update
This commit is contained in:
No files matched your search
@@ -0,0 +1,138 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use App\Periksa;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Console\Command;
|
||||
use Illuminate\Support\Facades\File;
|
||||
|
||||
class ExportRegisterApiByDateCommand extends Command
|
||||
{
|
||||
protected $signature = 'register-api:export
|
||||
{date : Tanggal data periksa, format YYYY-MM-DD}
|
||||
{--column=daftar : Kolom tanggal untuk filter, contoh daftar/tanggalregis/tanggalsampel}
|
||||
{--output= : Simpan hasil JSON ke file}
|
||||
{--pretty : Format JSON agar mudah dibaca}';
|
||||
|
||||
protected $description = 'Export data periksa per tanggal ke format JSON payload registerApi.';
|
||||
|
||||
public function handle(): int
|
||||
{
|
||||
$date = $this->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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user