From 119f73403ee541693e749d23c304b9a8c8e7695c Mon Sep 17 00:00:00 2001 From: Dwi Swandhana Date: Sat, 1 Aug 2026 12:15:25 +0700 Subject: [PATCH] update --- htdocs/.env.example | 12 + htdocs/README.md | 214 ++++++- .../Commands/BackupRestoreLatestCommand.php | 155 +++++ .../Commands/BackupUploadFileCommand.php | 95 +++ .../ExportRegisterApiByDateCommand.php | 138 ++++ .../app/Http/Controllers/DokterController.php | 600 +++++++++--------- .../Http/Controllers/FrontpageController.php | 4 +- htdocs/config/cloud_backup.php | 16 + 8 files changed, 933 insertions(+), 301 deletions(-) create mode 100644 htdocs/app/Console/Commands/BackupRestoreLatestCommand.php create mode 100644 htdocs/app/Console/Commands/BackupUploadFileCommand.php create mode 100644 htdocs/app/Console/Commands/ExportRegisterApiByDateCommand.php create mode 100644 htdocs/config/cloud_backup.php diff --git a/htdocs/.env.example b/htdocs/.env.example index daeceef8..f668f89e 100644 --- a/htdocs/.env.example +++ b/htdocs/.env.example @@ -64,3 +64,15 @@ BPJS_CONSID="2112121" BPJS_SECRET_KEY="121212121" BPJS_BASE_URL="https://new-api.bpjs-kesehatan.go.id:8080" BPJS_SERVICE_NAME="new-vclaim-rest" + +CLOUD_BACKUP_API_URL=https://duidev.com +CLOUD_BACKUP_API_TOKEN= +CLOUD_BACKUP_NAME=lismikro +CLOUD_BACKUP_CHUNK_SIZE=5242880 +CLOUD_BACKUP_DOWNLOAD_PATH= +CLOUD_BACKUP_PG_RESTORE=pg_restore +CLOUD_BACKUP_DB_HOST=10.10.123.193 +CLOUD_BACKUP_DB_PORT=5002 +CLOUD_BACKUP_DB_DATABASE=lismikro +CLOUD_BACKUP_DB_USERNAME=lismikro +CLOUD_BACKUP_DB_PASSWORD= diff --git a/htdocs/README.md b/htdocs/README.md index af1f1120..8e238943 100644 --- a/htdocs/README.md +++ b/htdocs/README.md @@ -47,9 +47,221 @@ Untuk panduan pengguna atau manual book dari LIS, dapat diunduh melalui link ber - **Bootstrap** (Frontend) - **jQuery** (Frontend) +## Backup Database ke Cloud + +Backup database dijalankan dari server production `10.10.123.218`. Database yang di-backup berada di server PostgreSQL `10.10.123.193`, lalu file hasil backup `.backup` dikirim secara bertahap/chunked ke `https://duidev.com` sebagai cadangan cloud. + +Alur backup: + +```text +10.10.123.218 -> pg_dump dari 10.10.123.193 -> upload .backup ke duidev.com +``` + +Alur restore: + +```text +10.10.123.218 -> download backup terbaru dari duidev.com -> pg_restore ke 10.10.123.193 +``` + +### Konfigurasi Server Production + +Tambahkan konfigurasi berikut di file `.env` server production `10.10.123.218`: + +```env +CLOUD_BACKUP_API_URL=https://duidev.com +CLOUD_BACKUP_API_TOKEN=isi_token_rahasia_yang_sama_dengan_duidev +CLOUD_BACKUP_NAME=lismikro +CLOUD_BACKUP_CHUNK_SIZE=5242880 +CLOUD_BACKUP_DB_HOST=10.10.123.193 +CLOUD_BACKUP_DB_PORT=5002 +CLOUD_BACKUP_DB_DATABASE=lismikro +CLOUD_BACKUP_DB_USERNAME=lismikro +CLOUD_BACKUP_DB_PASSWORD= +``` + +Jika password PostgreSQL sudah disimpan di `.pgpass`, `CLOUD_BACKUP_DB_PASSWORD` boleh dikosongkan. + +Setelah mengubah `.env`, jalankan: + +```bash +php artisan config:clear +``` + +### Password PostgreSQL Tanpa Prompt + +Buat file `~/.pgpass` pada user Linux yang menjalankan cron: + +```text +10.10.123.193:5002:lismikro:lismikro:PASSWORD_DATABASE +``` + +Lalu amankan permission-nya: + +```bash +chmod 600 ~/.pgpass +``` + +### Script Backup Harian + +Contoh file `/home/mikro/project/backup.sh`: + +```bash +#!/bin/bash + +echo "===== Backup mulai: $(date '+%Y-%m-%d %H:%M:%S') =====" + +BACKUP_DIR="/home/mikro/project/backups" +DATE=$(date +"%Y-%m-%d_%H-%M-%S") +FILE="$BACKUP_DIR/lismikro_$DATE.backup" + +mkdir -p "$BACKUP_DIR" + +pg_dump -h 10.10.123.193 -p 5002 -U lismikro -d lismikro -F c -v -f "$FILE" +STATUS=$? + +if [ $STATUS -eq 0 ]; then + echo "Backup berhasil: $FILE" + + cd /home/mikro/project/htdocs + php artisan backup:upload-file "$FILE" + UPLOAD_STATUS=$? + + if [ $UPLOAD_STATUS -eq 0 ]; then + echo "Upload cloud berhasil" + else + echo "Upload cloud gagal dengan status: $UPLOAD_STATUS" + fi + + find "$BACKUP_DIR" -type f -name "lismikro_*.backup" -mtime +2 -delete +else + echo "Backup gagal dengan status: $STATUS" +fi + +echo "===== Backup selesai: $(date '+%Y-%m-%d %H:%M:%S') =====" +echo "" +``` + +Aktifkan script: + +```bash +chmod +x /home/mikro/project/backup.sh +``` + +### Crontab + +Jalankan backup setiap hari jam `23:59`: + +```cron +59 23 * * * /home/mikro/project/backup.sh >> /home/mikro/project/backup.log 2>&1 +``` + +Lihat log: + +```bash +tail -n 100 /home/mikro/project/backup.log +``` + +### Upload Manual + +Jika sudah memiliki file `.backup` dan ingin mengirim ulang ke cloud: + +```bash +cd /home/mikro/project/htdocs +php artisan backup:upload-file /home/mikro/project/backups/lismikro_YYYY-MM-DD_HH-MM-SS.backup +``` + +### Download Backup Terbaru + +Untuk download saja tanpa restore: + +```bash +cd /home/mikro/project/htdocs +php artisan backup:restore-latest --download-only +``` + +### Restore Penuh ke Database + +Restore dijalankan dari server production `10.10.123.218` dan target database adalah `10.10.123.193`. + +```bash +cd /home/mikro/project/htdocs +php artisan backup:restore-latest +``` + +Jika ingin langsung restore tanpa pertanyaan konfirmasi: + +```bash +php artisan backup:restore-latest --yes +``` + +Perintah restore memakai `pg_restore --clean --if-exists --no-owner` secara default. Pastikan `pg_restore` tersedia di server production. + +## Export Reverse Payload `registerApi` + +Perintah ini menarik data dari tabel `periksa` berdasarkan tanggal tertentu, lalu mengubahnya kembali menjadi JSON dengan key yang sama seperti payload awal `registerApi`. + +Contoh export berdasarkan tanggal daftar: + +```bash +php artisan register-api:export 2026-08-01 --pretty +``` + +Simpan hasil ke file: + +```bash +php artisan register-api:export 2026-08-01 --pretty --output=/home/mikro/project/export-register-api-2026-08-01.json +``` + +Secara default filter memakai kolom `daftar`. Jika ingin memakai tanggal lain: + +```bash +php artisan register-api:export 2026-08-01 --column=tanggalregis --pretty +php artisan register-api:export 2026-08-01 --column=tanggalsampel --pretty +``` + +Format JSON yang dihasilkan: + +```json +{ + "tanggal": "2026-08-01", + "filter_column": "daftar", + "total": 1, + "data": [ + { + "norm": "RM001", + "nama": "Nama Pasien", + "alamat": "Alamat Pasien", + "kota": "Kota", + "tgllahir": "1990-01-01", + "nohap": "0000000000", + "kelamin": "L", + "urgensi": "Elective", + "beratbadan": "0", + "nik": "0", + "nobpjs": "0", + "drpeminta": "Dokter Peminta", + "asalpasien": "Rawat Jalan", + "diagnosa": "Diagnosa", + "statusbayar": null, + "nomor_lab": "ORDER001", + "jenispembayaran": "UMM", + "klinisi": "Dokter Peminta", + "jenispemeriksaan": "Jenis Pemeriksaan", + "spesimen": "Sputum", + "kodespesimen": "SPT", + "pengambilan": null, + "keteranganrujukan": "RSSA Malang", + "namarspengirim": "RSSA Malang", + "tanggalregis": "2026-08-01", + "tanggalsampel": "2026-08-01", + "asalpengirim": null + } + ] +} +``` + ## Kontribusi Jika Anda ingin berkontribusi pada proyek ini, silakan buat **pull request** atau **issue** terkait. ## Lisensi Proyek ini dilisensikan di bawah lisensi MIT. Lihat file **LICENSE** untuk informasi lebih lanjut. - diff --git a/htdocs/app/Console/Commands/BackupRestoreLatestCommand.php b/htdocs/app/Console/Commands/BackupRestoreLatestCommand.php new file mode 100644 index 00000000..e185ab1c --- /dev/null +++ b/htdocs/app/Console/Commands/BackupRestoreLatestCommand.php @@ -0,0 +1,155 @@ +option('name') ?: config('cloud_backup.backup_name', 'lismikro')); + $file = $this->option('file') + ? (string) $this->option('file') + : $this->downloadLatest($backupName); + + if (!$file || !File::exists($file)) { + $this->error('File backup tidak ditemukan.'); + return Command::FAILURE; + } + + $this->info('File backup siap: ' . $file); + + if ($this->option('download-only')) { + return Command::SUCCESS; + } + + $host = (string) ($this->option('host') ?: config('cloud_backup.db_host')); + $port = (string) ($this->option('port') ?: config('cloud_backup.db_port')); + $database = (string) ($this->option('database') ?: config('cloud_backup.db_database')); + $username = (string) ($this->option('username') ?: config('cloud_backup.db_username')); + + if (!$this->option('yes') && !$this->confirm("Restore penuh ke database {$database} di {$host}:{$port}?", false)) { + $this->warn('Restore dibatalkan.'); + return Command::FAILURE; + } + + $command = [ + (string) config('cloud_backup.pg_restore', 'pg_restore'), + '-h', $host, + '-p', $port, + '-U', $username, + '-d', $database, + '-v', + ]; + + if ((int) $this->option('clean') === 1) { + $command[] = '--clean'; + } + + if ((int) $this->option('if-exists') === 1) { + $command[] = '--if-exists'; + } + + if ((int) $this->option('no-owner') === 1) { + $command[] = '--no-owner'; + } + + $command[] = $file; + + $env = null; + $password = (string) ($this->option('password') ?: config('cloud_backup.db_password')); + if ($password !== '') { + $env = ['PGPASSWORD' => $password]; + } + + $process = new Process($command, base_path(), $env, null, null); + $process->setTimeout(null); + + $this->info('Menjalankan pg_restore...'); + $process->run(function (string $type, string $buffer): void { + $this->output->write($buffer); + }); + + if (!$process->isSuccessful()) { + $this->error('Restore gagal dengan kode: ' . $process->getExitCode()); + return Command::FAILURE; + } + + $this->info('Restore selesai.'); + + return Command::SUCCESS; + } + + private function downloadLatest(string $backupName): ?string + { + $baseUrl = rtrim((string) ($this->option('url') ?: config('cloud_backup.api_url')), '/'); + $token = (string) ($this->option('token') ?: config('cloud_backup.api_token')); + + if ($baseUrl === '' || $token === '') { + $this->error('CLOUD_BACKUP_API_URL dan CLOUD_BACKUP_API_TOKEN wajib diisi.'); + return null; + } + + $output = $this->option('output') + ? (string) $this->option('output') + : (string) config('cloud_backup.download_path'); + + File::ensureDirectoryExists(dirname($output), 0750, true); + + $metadata = Http::withToken($token) + ->timeout(60) + ->get($baseUrl . '/api/backups/latest', ['backup_name' => $backupName]); + + if (!$metadata->successful()) { + $this->error('Gagal membaca metadata backup terbaru. HTTP ' . $metadata->status()); + $this->line($metadata->body()); + return null; + } + + $info = $metadata->json(); + $this->info('Backup terbaru: ' . ($info['file'] ?? '-')); + + $download = Http::withToken($token) + ->timeout(0) + ->sink($output) + ->get($baseUrl . '/api/backups/latest/download', ['backup_name' => $backupName]); + + if (!$download->successful()) { + File::delete($output); + $this->error('Gagal download backup. HTTP ' . $download->status()); + $this->line($download->body()); + return null; + } + + if (!empty($info['sha256']) && hash_file('sha256', $output) !== strtolower((string) $info['sha256'])) { + File::delete($output); + $this->error('Checksum file download tidak sesuai.'); + return null; + } + + return $output; + } +} diff --git a/htdocs/app/Console/Commands/BackupUploadFileCommand.php b/htdocs/app/Console/Commands/BackupUploadFileCommand.php new file mode 100644 index 00000000..dee8872c --- /dev/null +++ b/htdocs/app/Console/Commands/BackupUploadFileCommand.php @@ -0,0 +1,95 @@ +argument('file'); + if (!is_file($file) || !is_readable($file)) { + $this->error('File backup tidak ditemukan atau tidak bisa dibaca: ' . $file); + return Command::FAILURE; + } + + $baseUrl = rtrim((string) ($this->option('url') ?: config('cloud_backup.api_url')), '/'); + $token = (string) ($this->option('token') ?: config('cloud_backup.api_token')); + $backupName = (string) ($this->option('name') ?: config('cloud_backup.backup_name', 'lismikro')); + $chunkSize = (int) ($this->option('chunk-size') ?: config('cloud_backup.chunk_size', 5 * 1024 * 1024)); + + if ($baseUrl === '' || $token === '') { + $this->error('CLOUD_BACKUP_API_URL dan CLOUD_BACKUP_API_TOKEN wajib diisi.'); + return Command::FAILURE; + } + + if ($chunkSize < 1024 * 1024) { + $this->error('Chunk size minimal 1 MB.'); + return Command::FAILURE; + } + + $size = filesize($file); + $checksum = hash_file('sha256', $file); + $totalChunks = (int) ceil($size / $chunkSize); + $uploadId = now()->format('YmdHis') . '_' . Str::random(16); + $endpoint = $baseUrl . '/api/backups/chunk'; + + $this->info('Upload backup: ' . basename($file)); + $this->info('Total chunk: ' . $totalChunks); + + $handle = fopen($file, 'rb'); + if (!$handle) { + $this->error('Gagal membuka file backup.'); + return Command::FAILURE; + } + + try { + for ($index = 0; $index < $totalChunks; $index++) { + $chunk = fread($handle, $chunkSize); + if ($chunk === false) { + $this->error('Gagal membaca chunk ke-' . $index); + return Command::FAILURE; + } + + $response = Http::withToken($token) + ->timeout(300) + ->attach('chunk', $chunk, 'chunk_' . $index . '.part') + ->post($endpoint, [ + 'backup_name' => $backupName, + 'upload_id' => $uploadId, + 'filename' => basename($file), + 'chunk_index' => $index, + 'total_chunks' => $totalChunks, + 'total_size' => $size, + 'checksum' => $checksum, + ]); + + if (!$response->successful()) { + $this->error('Upload chunk ke-' . $index . ' gagal. HTTP ' . $response->status()); + $this->line($response->body()); + return Command::FAILURE; + } + + $this->line('Chunk ' . ($index + 1) . '/' . $totalChunks . ' terkirim.'); + } + } finally { + fclose($handle); + } + + $this->info('Upload backup selesai.'); + + return Command::SUCCESS; + } +} diff --git a/htdocs/app/Console/Commands/ExportRegisterApiByDateCommand.php b/htdocs/app/Console/Commands/ExportRegisterApiByDateCommand.php new file mode 100644 index 00000000..cabae955 --- /dev/null +++ b/htdocs/app/Console/Commands/ExportRegisterApiByDateCommand.php @@ -0,0 +1,138 @@ +argument('date'); + $column = (string) $this->option('column'); + + if (!$this->isValidDate($date)) { + $this->error('Format tanggal harus YYYY-MM-DD.'); + return Command::FAILURE; + } + + if (!in_array($column, ['daftar', 'tanggalregis', 'tanggalsampel'], true)) { + $this->error('Kolom tanggal hanya boleh: daftar, tanggalregis, tanggalsampel.'); + return Command::FAILURE; + } + + $records = Periksa::with('getPasien') + ->whereDate($column, $date) + ->orderBy($column) + ->orderBy('id') + ->get() + ->map(fn (Periksa $periksa) => $this->mapPeriksaToRegisterPayload($periksa)) + ->values(); + + $payload = [ + 'tanggal' => $date, + 'filter_column' => $column, + 'total' => $records->count(), + 'data' => $records, + ]; + + $jsonOptions = JSON_UNESCAPED_SLASHES; + if ($this->option('pretty')) { + $jsonOptions |= JSON_PRETTY_PRINT; + } + + $json = json_encode($payload, $jsonOptions); + if ($json === false) { + $this->error('Gagal membuat JSON.'); + return Command::FAILURE; + } + + if ($this->option('output')) { + $output = (string) $this->option('output'); + File::ensureDirectoryExists(dirname($output)); + File::put($output, $json . PHP_EOL); + $this->info('Export selesai: ' . $output); + $this->info('Total data: ' . $records->count()); + return Command::SUCCESS; + } + + $this->line($json); + + return Command::SUCCESS; + } + + private function mapPeriksaToRegisterPayload(Periksa $periksa): array + { + $pasien = $periksa->getPasien; + $tanggalLahir = $this->formatDate($periksa->tgllahirpasien ?? $pasien?->tgl_lahir); + $tanggalRegis = $this->formatDate($periksa->tanggalregis) ?: $this->formatDate($periksa->daftar); + $tanggalSampel = $this->formatDate($periksa->tanggalsampel) ?: $tanggalRegis; + $diagnosa = $periksa->klinis ?: null; + $klinisi = $periksa->klinisi ?: null; + + return [ + 'norm' => $periksa->noregister, + 'nama' => $periksa->nmpasien, + 'alamat' => $periksa->alamatpasien ?: config('global.addressapps'), + 'kota' => $pasien?->kota ?: config('global.subdomainapps'), + 'tgllahir' => $tanggalLahir ?: date('Y-m-d'), + 'nohap' => $periksa->tlppasien ?: '0000000000', + 'kelamin' => $periksa->jkpasien ?: 'L', + 'urgensi' => $periksa->urgensi ?: 'Elective', + 'beratbadan' => (string) ($periksa->berat ?? '0'), + 'nik' => $periksa->ktp ?: '0', + 'nobpjs' => $periksa->bpjs ?: '0', + 'drpeminta' => $klinisi, + 'asalpasien' => $periksa->asalpasien, + 'diagnosa' => $diagnosa, + 'statusbayar' => null, + 'nomor_lab' => $periksa->orderid, + 'jenispembayaran' => $periksa->asuransi ?: 'UMM', + 'klinisi' => $klinisi, + 'jenispemeriksaan' => $periksa->reques, + 'spesimen' => $periksa->nm_spesimen, + 'kodespesimen' => $periksa->kd_spesimen, + 'pengambilan' => $periksa->pengambilan, + 'keteranganrujukan' => $periksa->nmrs ?: 'RSSA Malang', + 'namarspengirim' => $periksa->nmrs ?: 'RSSA Malang', + 'tanggalregis' => $tanggalRegis ?: date('Y-m-d'), + 'tanggalsampel' => $tanggalSampel ?: date('Y-m-d'), + 'asalpengirim' => $periksa->asalpengirim, + ]; + } + + private function isValidDate(string $date): bool + { + try { + $parsed = Carbon::createFromFormat('Y-m-d', $date); + } catch (\Throwable) { + return false; + } + + return $parsed && $parsed->format('Y-m-d') === $date; + } + + private function formatDate(mixed $value): ?string + { + if (!$value) { + return null; + } + + try { + return Carbon::parse($value)->format('Y-m-d'); + } catch (\Throwable) { + return null; + } + } +} diff --git a/htdocs/app/Http/Controllers/DokterController.php b/htdocs/app/Http/Controllers/DokterController.php index 0501fde0..65cdc75e 100644 --- a/htdocs/app/Http/Controllers/DokterController.php +++ b/htdocs/app/Http/Controllers/DokterController.php @@ -459,7 +459,7 @@ class DokterController extends Controller $dlp = $request->input('val10'); $idperiksa = $request->input('periksa_id'); $nofoto = $request->input('acc_number'); - $addendumketerangan = $request->input('addendumketerangan'); + $addendumketerangan = $request->input('addendumketerangan') ?? ''; if ($kerja == 'Draft'){ $iddokter = Session('id'); } @@ -468,310 +468,314 @@ class DokterController extends Controller $nm_spesimen = $periksa->nm_spesimen ?? ''; $noregister = $periksa->noregister ?? ''; $nmadendum = $periksa->nmadendum ?? ''; - $tglverifikasi = $periksa->verifikasi ?? $today; - - $cekganda = Periksa::where('noregister', $noregister)->where('nmadendum', $nmadendum)->where('id', '!=', $idperiksa)->get(); - $statusdraft = 'Pemeriksaan awal'; - KomponenJawaban::where('accnumber', $nofoto)->where('template', $dlp)->delete(); - $data = $request->except(['_token', 'periksa_id', 'val01', 'val10', 'acc_number']); - foreach ($data as $key => $value) { - if ($value === "" || is_null($value) || $value === "Pilih Salah Satu") continue; - $isidataawal = null; - if (is_array($value)) { - $isidataawal = json_encode($value); - } else { - if ($key == 'id_statusmediatamlainnya' AND $value != ''){ - $statusdraft = $value; - } else if ($key == 'id_statusmediasellainnya' AND $value != ''){ - $statusdraft = $value; - } else if ($key == 'id_statusmediasda' AND $value != ''){ - $statusdraft = $value; - } else if ($key == 'id_statusmediamcconkey' AND $value != ''){ - $statusdraft = $value; - } else if ($key == 'id_statusmediacap' AND $value != ''){ - $statusdraft = $value; - } else if ($key == 'id_statusmediabap' AND $value != ''){ - $statusdraft = $value; + $statuslama = $periksa->status ?? ''; + if ($statuslama == 'Selesai' AND $addendumketerangan == ''){ + return response()->json(['icon' => 'error', 'status' => 'Gagal', 'message' => 'Pemeriksaan sudah selesai, silahkan buat adendum untuk menambahkan keterangan']); + } else { + $tglverifikasi = $periksa->verifikasi ?? $today; + $cekganda = Periksa::where('noregister', $noregister)->where('nmadendum', $nmadendum)->where('id', '!=', $idperiksa)->get(); + $statusdraft = 'Pemeriksaan awal'; + KomponenJawaban::where('accnumber', $nofoto)->where('template', $dlp)->delete(); + $data = $request->except(['_token', 'periksa_id', 'val01', 'val10', 'acc_number']); + foreach ($data as $key => $value) { + if ($value === "" || is_null($value) || $value === "Pilih Salah Satu") continue; + $isidataawal = null; + if (is_array($value)) { + $isidataawal = json_encode($value); } else { - } - $isidataawal = $value; - } - KomponenJawaban::updateOrCreate( - [ - 'accnumber' => $nofoto, - 'komponen' => $key, - ], - [ - 'isidata' => $isidataawal, - 'template' => $dlp, - 'created_by' => session('nama'), - ] - ); - $yangperludicloning = ''; - if ($key == 'id_selepitel'){ $yangperludicloning = 'lsg_selepitel'; } - if ($key == 'id_selradang'){ $yangperludicloning = 'lsg_selradang'; } - if ($key == 'id_mikroorganisme'){ $yangperludicloning = 'lsg_mikroorganisme'; } - if ($key == 'id_mikroorganismeoptional'){ $yangperludicloning = 'lsg_mikroorganismeoptional'; } - if ($key == 'id_pewarnaanziehlnielsen'){ $yangperludicloning = 'lsg_pewarnaanziehlnielsen'; } - if ($key == 'id_pewarnaanziehlnielsensewaktu'){ $yangperludicloning = 'lsg_pewarnaanziehlnielsensewaktu'; } - if ($key == 'id_pewarnaankoh'){ $yangperludicloning = 'lsg_pewarnaankoh'; } - if ($key == 'id_pewarnaankohoptional'){ $yangperludicloning = 'lsg_pewarnaankohoptional'; } - if ($key == 'id_pewarnaanneisser'){ $yangperludicloning = 'lsg_pewarnaanneisser'; } - if ($key == 'id_pewarnaannegatif'){ $yangperludicloning = 'lsg_pewarnaannegatif'; } - if ($key == 'id_pewarnaanspora'){ $yangperludicloning = 'lsg_pewarnaanspora'; } - if ($key == 'id_pewarnaangiesma'){ $yangperludicloning = 'lsg_pewarnaangiesma'; } - if ($key == 'id_pewarnaangiesmaoptional'){ $yangperludicloning = 'lsg_pewarnaangiesmaoptional'; } - if ($key == 'lsg_selepitel'){ $yangperludicloning = 'id_selepitel'; } - if ($key == 'lsg_selradang'){ $yangperludicloning = 'id_selradang'; } - if ($key == 'lsg_mikroorganisme'){ $yangperludicloning = 'id_mikroorganisme'; } - if ($key == 'lsg_mikroorganismeoptional'){ $yangperludicloning = 'id_mikroorganismeoptional'; } - if ($key == 'lsg_pewarnaanziehlnielsen'){ $yangperludicloning = 'id_pewarnaanziehlnielsen'; } - if ($key == 'lsg_pewarnaanziehlnielsensewaktu'){ $yangperludicloning = 'id_pewarnaanziehlnielsensewaktu'; } - if ($key == 'lsg_pewarnaankoh'){ $yangperludicloning = 'id_pewarnaankoh'; } - if ($key == 'lsg_pewarnaankohoptional'){ $yangperludicloning = 'id_pewarnaankohoptional'; } - if ($key == 'lsg_pewarnaanneisser'){ $yangperludicloning = 'id_pewarnaanneisser'; } - if ($key == 'lsg_pewarnaannegatif'){ $yangperludicloning = 'id_pewarnaannegatif'; } - if ($key == 'lsg_pewarnaanspora'){ $yangperludicloning = 'id_pewarnaanspora'; } - if ($key == 'lsg_pewarnaangiesma'){ $yangperludicloning = 'id_pewarnaangiesma'; } - if ($key == 'lsg_pewarnaangiesmaoptional'){ $yangperludicloning = 'id_pewarnaangiesmaoptional'; } - - if (!empty($cekganda) AND $yangperludicloning != ''){ - foreach($cekganda as $rcloning){ - $nofotocloning = $rcloning->nofoto; - $dlpcloning = $rcloning->dlp ?? 'Kultur'; - $cekada = KomponenJawaban::where('accnumber', $nofotocloning)->where('komponen', $yangperludicloning)->first(); - if ($cekada){ - + if ($key == 'id_statusmediatamlainnya' AND $value != ''){ + $statusdraft = $value; + } else if ($key == 'id_statusmediasellainnya' AND $value != ''){ + $statusdraft = $value; + } else if ($key == 'id_statusmediasda' AND $value != ''){ + $statusdraft = $value; + } else if ($key == 'id_statusmediamcconkey' AND $value != ''){ + $statusdraft = $value; + } else if ($key == 'id_statusmediacap' AND $value != ''){ + $statusdraft = $value; + } else if ($key == 'id_statusmediabap' AND $value != ''){ + $statusdraft = $value; } else { - KomponenJawaban::updateOrCreate( - [ - 'accnumber' => $nofotocloning, - 'komponen' => $yangperludicloning, - ], - [ - 'isidata' => $isidataawal, - 'template' => $dlpcloning, - 'created_by' => session('nama'), - ] - ); - Riwayat::create([ - 'nofoto' => $nofotocloning, - 'jawaban' => $isidataawal, - 'inputor' => Session('nama'), - 'keterangan' => 'Clone Data '.$yangperludicloning.' Dari ('.$nofoto.')', - 'verifikasi' => '', - ]); + } + $isidataawal = $value; + } + KomponenJawaban::updateOrCreate( + [ + 'accnumber' => $nofoto, + 'komponen' => $key, + ], + [ + 'isidata' => $isidataawal, + 'template' => $dlp, + 'created_by' => session('nama'), + ] + ); + $yangperludicloning = ''; + if ($key == 'id_selepitel'){ $yangperludicloning = 'lsg_selepitel'; } + if ($key == 'id_selradang'){ $yangperludicloning = 'lsg_selradang'; } + if ($key == 'id_mikroorganisme'){ $yangperludicloning = 'lsg_mikroorganisme'; } + if ($key == 'id_mikroorganismeoptional'){ $yangperludicloning = 'lsg_mikroorganismeoptional'; } + if ($key == 'id_pewarnaanziehlnielsen'){ $yangperludicloning = 'lsg_pewarnaanziehlnielsen'; } + if ($key == 'id_pewarnaanziehlnielsensewaktu'){ $yangperludicloning = 'lsg_pewarnaanziehlnielsensewaktu'; } + if ($key == 'id_pewarnaankoh'){ $yangperludicloning = 'lsg_pewarnaankoh'; } + if ($key == 'id_pewarnaankohoptional'){ $yangperludicloning = 'lsg_pewarnaankohoptional'; } + if ($key == 'id_pewarnaanneisser'){ $yangperludicloning = 'lsg_pewarnaanneisser'; } + if ($key == 'id_pewarnaannegatif'){ $yangperludicloning = 'lsg_pewarnaannegatif'; } + if ($key == 'id_pewarnaanspora'){ $yangperludicloning = 'lsg_pewarnaanspora'; } + if ($key == 'id_pewarnaangiesma'){ $yangperludicloning = 'lsg_pewarnaangiesma'; } + if ($key == 'id_pewarnaangiesmaoptional'){ $yangperludicloning = 'lsg_pewarnaangiesmaoptional'; } + if ($key == 'lsg_selepitel'){ $yangperludicloning = 'id_selepitel'; } + if ($key == 'lsg_selradang'){ $yangperludicloning = 'id_selradang'; } + if ($key == 'lsg_mikroorganisme'){ $yangperludicloning = 'id_mikroorganisme'; } + if ($key == 'lsg_mikroorganismeoptional'){ $yangperludicloning = 'id_mikroorganismeoptional'; } + if ($key == 'lsg_pewarnaanziehlnielsen'){ $yangperludicloning = 'id_pewarnaanziehlnielsen'; } + if ($key == 'lsg_pewarnaanziehlnielsensewaktu'){ $yangperludicloning = 'id_pewarnaanziehlnielsensewaktu'; } + if ($key == 'lsg_pewarnaankoh'){ $yangperludicloning = 'id_pewarnaankoh'; } + if ($key == 'lsg_pewarnaankohoptional'){ $yangperludicloning = 'id_pewarnaankohoptional'; } + if ($key == 'lsg_pewarnaanneisser'){ $yangperludicloning = 'id_pewarnaanneisser'; } + if ($key == 'lsg_pewarnaannegatif'){ $yangperludicloning = 'id_pewarnaannegatif'; } + if ($key == 'lsg_pewarnaanspora'){ $yangperludicloning = 'id_pewarnaanspora'; } + if ($key == 'lsg_pewarnaangiesma'){ $yangperludicloning = 'id_pewarnaangiesma'; } + if ($key == 'lsg_pewarnaangiesmaoptional'){ $yangperludicloning = 'id_pewarnaangiesmaoptional'; } + + if (!empty($cekganda) AND $yangperludicloning != ''){ + foreach($cekganda as $rcloning){ + $nofotocloning = $rcloning->nofoto; + $dlpcloning = $rcloning->dlp ?? 'Kultur'; + $cekada = KomponenJawaban::where('accnumber', $nofotocloning)->where('komponen', $yangperludicloning)->first(); + if ($cekada){ + + } else { + KomponenJawaban::updateOrCreate( + [ + 'accnumber' => $nofotocloning, + 'komponen' => $yangperludicloning, + ], + [ + 'isidata' => $isidataawal, + 'template' => $dlpcloning, + 'created_by' => session('nama'), + ] + ); + Riwayat::create([ + 'nofoto' => $nofotocloning, + 'jawaban' => $isidataawal, + 'inputor' => Session('nama'), + 'keterangan' => 'Clone Data '.$yangperludicloning.' Dari ('.$nofoto.')', + 'verifikasi' => '', + ]); + } } } } - } - $analis = $request->input('analis'); - $ppds3 = $request->input('ppds3'); - $cekdokter = optional(User::find($iddokter)); - $cekanalis = optional(User::find($analis)); - $cekppds3 = optional(User::find($ppds3)); - $statusdraft = $this->resolvePeriksaHierarchyStatus($periksa->status, $statusdraft); - switch ($kerja) { - case 'verifikasi': - if ($periksa->status != 'Selesai'){ - $tglverifikasi = date('Y-m-d H:i:s'); - } - $updateData = [ - 'keterangan' => $keterangan, - 'dlp' => $dlp, - 'analis' => $analis, - 'nmanalis' => $cekanalis->nama ?? null, - 'dokter_id' => Session('id'), - 'nmdokter' => Session('nama'), - 'ppdssenior' => $ppds3, - 'nmppdssenior' => $cekppds3->nama ?? null, - 'tandatangan' => '', - 'verifikasi' => $tglverifikasi, - 'akhir' => $tglverifikasi, - 'nmexcutor' => Session('nama'), - 'excutor' => Session('id'), - 'status' => 'Selesai', - ]; - $periksa->update($updateData); - if ($this->shouldMarkAsCritical($request)) { - $this->upsertCriticalValueSample($periksa); - } - $surat = self::genSurat($periksa->id, 'dengan kop'); - Riwayat::create([ - 'nofoto' => $nofoto, - 'jawaban' => $surat, - 'inputor' => Session('nama'), - 'verifikasi' => 'Accepted', - 'keterangan' => 'Expertise', - ]); - if (isset($addendumketerangan) AND $addendumketerangan != ''){ - Riwayat::create([ - 'nofoto' => $nofoto, - 'jawaban' => $addendumketerangan, - 'inputor' => Session('nama'), - 'verifikasi' => 'Accepted', - 'keterangan' => 'Addendum', - ]); - } - if (is_null($nofoto)){ - return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => 'Expertise Verified']); - } else { - $pesan = 'Expertise Saved'; - return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => $pesan]); - } - case 'statuspewarnaanlsg': - $periksa->update([ - 'keterangan' => $keterangan, - 'dlp' => $dlp, - 'analis' => $analis, - 'nmanalis' => $cekanalis->nama ?? null, - 'nmdrafter' => Session('nama'), - 'nmexcutor' => Session('nama'), - 'excutor' => Session('id'), - 'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Pewarnaan Langsung'), - ]); - return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Set Status Pewarnaan Langsung']); - case 'preliminary': - $updateData = [ - 'keterangan' => $keterangan, - 'dlp' => $dlp, - 'analis' => $analis, - 'nmanalis' => $cekanalis->nama ?? null, - 'dokter_id' => Session('id'), - 'nmdokter' => Session('nama'), - 'ppdssenior' => $ppds3, - 'nmppdssenior' => $cekppds3->nama ?? null, - 'tandatangan' => '', - 'verifikasi' => $tglverifikasi, - 'nmexcutor' => Session('nama'), - 'excutor' => Session('id'), - 'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Preliminary Results'), - ]; - $periksa->update($updateData); - if ($this->shouldMarkAsCritical($request)) { - $this->upsertCriticalValueSample($periksa); - } - $surat = self::genSurat($periksa->id, 'dengan kop'); - Riwayat::create([ - 'nofoto' => $nofoto, - 'jawaban' => $surat, - 'inputor' => Session('nama'), - 'verifikasi' => 'Accepted', - 'keterangan' => 'Preliminary Results', - ]); - $pesan = 'Preliminary Results Saved'; - return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => $pesan]); - case 'Permohonan Verifikasi': - $updateData = [ - 'keterangan' => $keterangan, - 'dlp' => $dlp, - 'analis' => $analis, - 'nmanalis' => $cekanalis->nama ?? null, - 'dokter_id' => $iddokter, - 'nmdokter' => $cekdokter->nama ?? null, - 'ppdssenior' => $ppds3, - 'nmppdssenior' => $cekppds3->nama ?? null, - 'tandatangan' => '', - 'baca' => $today, - 'nmexcutor' => Session('nama'), - 'excutor' => Session('id'), - 'nmpembaca' => Session('nama'), - 'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Expertise Saved (Un Verified)'), - ]; - $periksa->update($updateData); - $surat = self::genSurat($periksa->id, 'dengan kop'); - Riwayat::create([ - 'nofoto' => $nofoto, - 'jawaban' => $surat, - 'inputor' => Session('nama'), - 'verifikasi' => 'Accepted', - 'keterangan' => 'Kirim ke SPV', - ]); - return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => 'Permohonan Verifikasi Terkirim']); - case 'Permohonan Verifikasi Preliminary': - $updateData = [ - 'keterangan' => $keterangan, - 'dlp' => $dlp, - 'analis' => $analis, - 'nmanalis' => $cekanalis->nama ?? null, - 'dokter_id' => $iddokter, - 'nmdokter' => $cekdokter->nama ?? null, - 'ppdssenior' => $ppds3, - 'nmppdssenior' => $cekppds3->nama ?? null, - 'tandatangan' => '', - 'baca' => $today, - 'nmexcutor' => Session('nama'), - 'excutor' => Session('id'), - 'nmpembaca' => Session('nama'), - 'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Otor Maldi (Un Verified)'), - ]; - $periksa->update($updateData); - $surat = self::genSurat($periksa->id, 'dengan kop'); - Riwayat::create([ - 'nofoto' => $nofoto, - 'jawaban' => $surat, - 'inputor' => Session('nama'), - 'verifikasi' => 'Accepted', - 'keterangan' => 'Kirim Preliminary ke SPV', - ]); - return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => 'Permohonan Verifikasi Preliminary Terkirim']); - case 'tolakadendum': - Riwayat::where('nofoto', $nofoto)->whereNull('verifikasi')->update([ - 'verifikasi' => 'Declined', - ]); - return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Addendum Declined']); - case 'Draft': - $periksa->update([ - 'keterangan' => $keterangan, - 'dlp' => $dlp, - 'analis' => $analis, - 'nmanalis' => $cekanalis->nama ?? null, - 'nmdrafter' => Session('nama'), - 'nmexcutor' => Session('nama'), - 'excutor' => Session('id'), - 'status' => $statusdraft - ]); - $surat = self::genSurat($periksa->id, 'dengan kop'); - Riwayat::create([ - 'nofoto' => $nofoto, - 'jawaban' => $surat, - 'inputor' => Session('nama'), - 'verifikasi' => '', - 'keterangan' => 'Draft', - ]); - return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Draft Expertise Saved']); - case 'terimadendum': - $getid = Riwayat::where('keterangan', 'Adendum')->where('nofoto', $nofoto)->whereNull('verifikasi')->first(); - if (isset($getid->id)){ - Riwayat::where('id', $getid->id)->update([ - 'verifikasi' => 'Accepted', - ]); - Periksa::where('nofoto', $getid->nofoto)->update([ + $analis = $request->input('analis'); + $ppds3 = $request->input('ppds3'); + $cekdokter = optional(User::find($iddokter)); + $cekanalis = optional(User::find($analis)); + $cekppds3 = optional(User::find($ppds3)); + $statusdraft = $this->resolvePeriksaHierarchyStatus($periksa->status, $statusdraft); + switch ($kerja) { + case 'verifikasi': + if ($periksa->status != 'Selesai'){ + $tglverifikasi = date('Y-m-d H:i:s'); + } + $updateData = [ + 'keterangan' => $keterangan, + 'dlp' => $dlp, + 'analis' => $analis, + 'nmanalis' => $cekanalis->nama ?? null, + 'dokter_id' => Session('id'), + 'nmdokter' => Session('nama'), + 'ppdssenior' => $ppds3, + 'nmppdssenior' => $cekppds3->nama ?? null, + 'tandatangan' => '', + 'verifikasi' => $tglverifikasi, + 'akhir' => $tglverifikasi, 'nmexcutor' => Session('nama'), 'excutor' => Session('id'), - 'tgladendum' => now(), - 'keterangan' => $getid->jawaban + 'status' => 'Selesai', + ]; + $periksa->update($updateData); + if ($this->shouldMarkAsCritical($request)) { + $this->upsertCriticalValueSample($periksa); + } + $surat = self::genSurat($periksa->id, 'dengan kop'); + Riwayat::create([ + 'nofoto' => $nofoto, + 'jawaban' => $surat, + 'inputor' => Session('nama'), + 'verifikasi' => 'Accepted', + 'keterangan' => 'Expertise', ]); - return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Addendum Accepted']); - } else { - return response()->json(['icon' => 'error', 'status' => 'Gagal', 'message' => 'Addendum Data Cannot Be Found']); - } - default: - $periksa->update([ - 'keterangan' => $keterangan, - 'dlp' => $dlp, - 'analis' => $analis, - 'nmanalis' => $cekanalis->nama ?? null, - 'dokter_id' => $iddokter, - 'nmdokter' => $cekdokter->nama ?? null, - 'ppdssenior' => $ppds3, - 'nmppdssenior' => $cekppds3->nama ?? null, - 'nmdrafter' => Session('nama'), - 'nmexcutor' => Session('nama'), - 'excutor' => Session('id'), - 'status' => $statusdraft - ]); - return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Expertise Saved']); + if (isset($addendumketerangan) AND $addendumketerangan != ''){ + Riwayat::create([ + 'nofoto' => $nofoto, + 'jawaban' => $addendumketerangan, + 'inputor' => Session('nama'), + 'verifikasi' => 'Accepted', + 'keterangan' => 'Addendum', + ]); + } + if (is_null($nofoto)){ + return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => 'Expertise Verified']); + } else { + $pesan = 'Expertise Saved'; + return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => $pesan]); + } + case 'statuspewarnaanlsg': + $periksa->update([ + 'keterangan' => $keterangan, + 'dlp' => $dlp, + 'analis' => $analis, + 'nmanalis' => $cekanalis->nama ?? null, + 'nmdrafter' => Session('nama'), + 'nmexcutor' => Session('nama'), + 'excutor' => Session('id'), + 'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Pewarnaan Langsung'), + ]); + return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Set Status Pewarnaan Langsung']); + case 'preliminary': + $updateData = [ + 'keterangan' => $keterangan, + 'dlp' => $dlp, + 'analis' => $analis, + 'nmanalis' => $cekanalis->nama ?? null, + 'dokter_id' => Session('id'), + 'nmdokter' => Session('nama'), + 'ppdssenior' => $ppds3, + 'nmppdssenior' => $cekppds3->nama ?? null, + 'tandatangan' => '', + 'verifikasi' => $tglverifikasi, + 'nmexcutor' => Session('nama'), + 'excutor' => Session('id'), + 'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Preliminary Results'), + ]; + $periksa->update($updateData); + if ($this->shouldMarkAsCritical($request)) { + $this->upsertCriticalValueSample($periksa); + } + $surat = self::genSurat($periksa->id, 'dengan kop'); + Riwayat::create([ + 'nofoto' => $nofoto, + 'jawaban' => $surat, + 'inputor' => Session('nama'), + 'verifikasi' => 'Accepted', + 'keterangan' => 'Preliminary Results', + ]); + $pesan = 'Preliminary Results Saved'; + return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => $pesan]); + case 'Permohonan Verifikasi': + $updateData = [ + 'keterangan' => $keterangan, + 'dlp' => $dlp, + 'analis' => $analis, + 'nmanalis' => $cekanalis->nama ?? null, + 'dokter_id' => $iddokter, + 'nmdokter' => $cekdokter->nama ?? null, + 'ppdssenior' => $ppds3, + 'nmppdssenior' => $cekppds3->nama ?? null, + 'tandatangan' => '', + 'baca' => $today, + 'nmexcutor' => Session('nama'), + 'excutor' => Session('id'), + 'nmpembaca' => Session('nama'), + 'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Expertise Saved (Un Verified)'), + ]; + $periksa->update($updateData); + $surat = self::genSurat($periksa->id, 'dengan kop'); + Riwayat::create([ + 'nofoto' => $nofoto, + 'jawaban' => $surat, + 'inputor' => Session('nama'), + 'verifikasi' => 'Accepted', + 'keterangan' => 'Kirim ke SPV', + ]); + return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => 'Permohonan Verifikasi Terkirim']); + case 'Permohonan Verifikasi Preliminary': + $updateData = [ + 'keterangan' => $keterangan, + 'dlp' => $dlp, + 'analis' => $analis, + 'nmanalis' => $cekanalis->nama ?? null, + 'dokter_id' => $iddokter, + 'nmdokter' => $cekdokter->nama ?? null, + 'ppdssenior' => $ppds3, + 'nmppdssenior' => $cekppds3->nama ?? null, + 'tandatangan' => '', + 'baca' => $today, + 'nmexcutor' => Session('nama'), + 'excutor' => Session('id'), + 'nmpembaca' => Session('nama'), + 'status' => $this->resolvePeriksaHierarchyStatus($periksa->status, 'Otor Maldi (Un Verified)'), + ]; + $periksa->update($updateData); + $surat = self::genSurat($periksa->id, 'dengan kop'); + Riwayat::create([ + 'nofoto' => $nofoto, + 'jawaban' => $surat, + 'inputor' => Session('nama'), + 'verifikasi' => 'Accepted', + 'keterangan' => 'Kirim Preliminary ke SPV', + ]); + return response()->json(['icon' => 'success', 'warna' => '#5ba035', 'status' => 'Sukses', 'message' => 'Permohonan Verifikasi Preliminary Terkirim']); + case 'tolakadendum': + Riwayat::where('nofoto', $nofoto)->whereNull('verifikasi')->update([ + 'verifikasi' => 'Declined', + ]); + return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Addendum Declined']); + case 'Draft': + $periksa->update([ + 'keterangan' => $keterangan, + 'dlp' => $dlp, + 'analis' => $analis, + 'nmanalis' => $cekanalis->nama ?? null, + 'nmdrafter' => Session('nama'), + 'nmexcutor' => Session('nama'), + 'excutor' => Session('id'), + 'status' => $statusdraft + ]); + $surat = self::genSurat($periksa->id, 'dengan kop'); + Riwayat::create([ + 'nofoto' => $nofoto, + 'jawaban' => $surat, + 'inputor' => Session('nama'), + 'verifikasi' => '', + 'keterangan' => 'Draft', + ]); + return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Draft Expertise Saved']); + case 'terimadendum': + $getid = Riwayat::where('keterangan', 'Adendum')->where('nofoto', $nofoto)->whereNull('verifikasi')->first(); + if (isset($getid->id)){ + Riwayat::where('id', $getid->id)->update([ + 'verifikasi' => 'Accepted', + ]); + Periksa::where('nofoto', $getid->nofoto)->update([ + 'nmexcutor' => Session('nama'), + 'excutor' => Session('id'), + 'tgladendum' => now(), + 'keterangan' => $getid->jawaban + ]); + return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Addendum Accepted']); + } else { + return response()->json(['icon' => 'error', 'status' => 'Gagal', 'message' => 'Addendum Data Cannot Be Found']); + } + default: + $periksa->update([ + 'keterangan' => $keterangan, + 'dlp' => $dlp, + 'analis' => $analis, + 'nmanalis' => $cekanalis->nama ?? null, + 'dokter_id' => $iddokter, + 'nmdokter' => $cekdokter->nama ?? null, + 'ppdssenior' => $ppds3, + 'nmppdssenior' => $cekppds3->nama ?? null, + 'nmdrafter' => Session('nama'), + 'nmexcutor' => Session('nama'), + 'excutor' => Session('id'), + 'status' => $statusdraft + ]); + return response()->json(['icon' => 'success', 'status' => 'Success', 'message' => 'Expertise Saved']); + } } } protected function resolvePeriksaHierarchyStatus($currentStatus, $proposedStatus): string { @@ -3891,7 +3895,7 @@ class DokterController extends Controller $data[] = array( 'nofoto' => $rows->nofoto, 'nolab' => $rows->orderid, - 'norm' => $rows->norm, + 'norm' => $rows->noregister, 'jenispemeriksaan' => $rows->reques, 'mulai' => $rows->daftar, 'selesai' => $rows->verifikasi, diff --git a/htdocs/app/Http/Controllers/FrontpageController.php b/htdocs/app/Http/Controllers/FrontpageController.php index 10f739d3..d40186cb 100644 --- a/htdocs/app/Http/Controllers/FrontpageController.php +++ b/htdocs/app/Http/Controllers/FrontpageController.php @@ -1122,7 +1122,7 @@ class FrontpageController extends Controller $nik = $request->input('nik') ?? 0; $bpjs = $request->input('bpjs') ?? 0; $tlsasal = $request->input('asalpasien'); - $nmrs = $request->input('namarspengirim') ?? 'RSSA Malang'; + $nmrs = $request->input('namarspengirim') ?? $request->input('keteranganrujukan') ?? 'RSSA Malang'; $klinisi = $request->input('drpeminta'); $insurance = $request->input('asuransi') ?? 'UMM'; $rekues = $request->input('layanan'); @@ -1340,7 +1340,7 @@ class FrontpageController extends Controller $nm_spesimen = $decodedData['spesimen'] ?? null; $kd_spesimen = $decodedData['kodespesimen'] ?? null; $pengambilan = $decodedData['pengambilan'] ?? null; - $nmrs = $decodedData['keteranganrujukan'] ?? 'RSSA Malang'; + $nmrs = $decodedData['keteranganrujukan'] ?? $decodedData['namarspengirim'] ?? 'RSSA Malang'; $tanggalregis = $decodedData['tanggalregis'] ?? date('Y-m-d'); $tanggalsampel = $decodedData['tanggalsampel'] ?? date('Y-m-d'); $asalpengirim = $decodedData['asalpengirim'] ?? null; diff --git a/htdocs/config/cloud_backup.php b/htdocs/config/cloud_backup.php new file mode 100644 index 00000000..80721762 --- /dev/null +++ b/htdocs/config/cloud_backup.php @@ -0,0 +1,16 @@ + env('CLOUD_BACKUP_API_URL', 'https://duidev.com'), + 'api_token' => env('CLOUD_BACKUP_API_TOKEN'), + 'backup_name' => env('CLOUD_BACKUP_NAME', 'lismikro'), + 'chunk_size' => (int) env('CLOUD_BACKUP_CHUNK_SIZE', 5 * 1024 * 1024), + 'download_path' => env('CLOUD_BACKUP_DOWNLOAD_PATH', storage_path('app/cloud-backups/lismikro_latest.backup')), + + 'pg_restore' => env('CLOUD_BACKUP_PG_RESTORE', 'pg_restore'), + 'db_host' => env('CLOUD_BACKUP_DB_HOST', '10.10.123.193'), + 'db_port' => env('CLOUD_BACKUP_DB_PORT', '5002'), + 'db_database' => env('CLOUD_BACKUP_DB_DATABASE', 'lismikro'), + 'db_username' => env('CLOUD_BACKUP_DB_USERNAME', 'lismikro'), + 'db_password' => env('CLOUD_BACKUP_DB_PASSWORD'), +];