dokter-telekonsultasi/app/Http/Controllers/Dokter/Order/PeresepanObatController.php
2025-06-05 15:36:53 +07:00

306 lines
13 KiB
PHP

<?php
namespace App\Http\Controllers\Dokter\Order;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Dokter\Partial\PartialController;
use DB;
use Auth;
use Session;
use Redirect;
class PeresepanObatController extends Controller
{
public function viewPeresepanObat(Request $request)
{
$listNorecOrderan = [];
$returnData = [];
$filter_identitas_pasien = (strlen($request->pdnorec) > 8) ? 'pdnorec' : 'nocm';
$getDataPD = PartialController::identitasPasien($filter_identitas_pasien, $request->pdnorec);
if(empty($getDataPD)){
Session::flash('message', "Special message goes here");
return Redirect::back();
}
$dataHistoryResep = DB::connection('smart')->select("
select
t_resep_dokter.strukorderfk,
strukorder_t.tglorder,
pegawai_m.namalengkap,
jeniskemasan_m.jeniskemasan,
t_resep_dokter.namaobat,
t_resep_dokter.keteranganpakai,
t_resep_dokter.keteranganlainnya,
t_resep_dokter.racikanke,
t_resep_dokter.qtyproduk
from
t_resep_dokter inner join
strukorder_t on t_resep_dokter.strukorderfk = strukorder_t.norec inner join
pegawai_m on strukorder_t.objectpegawaiorderfk = pegawai_m.id inner join
jeniskemasan_m on jeniskemasan_m.id = t_resep_dokter.jeniskemasanfk
where
t_resep_dokter.statusenabled is true
and strukorder_t.statusenabled is true
and strukorder_t.nocmfk = ?
order by
strukorder_t.tglorder desc
limit 10
", array($getDataPD[0]->nocmfk));
if(!empty($dataHistoryResep)){
foreach($dataHistoryResep as $key => $value){
array_push($listNorecOrderan, $value->strukorderfk);
$dataRacikenke[$value->strukorderfk]['racikanke'][] = $value->racikanke;
$dataRacikenke[$value->strukorderfk][$value->racikanke]['jeniskemasan'][] = $value->jeniskemasan;
$dataRacikenke[$value->strukorderfk][$value->racikanke]['keterangan'][] = $value->keteranganpakai;
$dataRacikenke[$value->strukorderfk][$value->racikanke]['keteranganlainnya'][] = $value->keteranganlainnya;
$dataHead[$value->strukorderfk]['namalengkap'] = $value->namalengkap;
$dataHead[$value->strukorderfk]['tglorder'] = $value->tglorder;
$dataHead[$value->strukorderfk]['tglorder'] = $value->tglorder;
}
$listNorecOrderan = array_unique($listNorecOrderan);
foreach($listNorecOrderan as $perResep){
$dataRacikanKeUniq = array_unique($dataRacikenke[$perResep]['racikanke']);
$detailResep = [];
foreach($dataRacikanKeUniq as $dataRacikanKe => $valRacikanKe){
$dataJenisKemasanUniq = array_unique($dataRacikenke[$perResep][$valRacikanKe]['jeniskemasan']);
$dataKeteranganUniq = array_unique($dataRacikenke[$perResep][$valRacikanKe]['keterangan']);
$dataKeteranganLainnyaUniq = array_unique($dataRacikenke[$perResep][$valRacikanKe]['keteranganlainnya']);
$afterFilterDetails = array_filter($dataHistoryResep, function ($val) use ($perResep, $valRacikanKe) {
return ($val->strukorderfk == $perResep && $val->racikanke == $valRacikanKe);
});
array_push($detailResep, array(
'racikanke' => $valRacikanKe,
'jeniskemasan' => $dataJenisKemasanUniq[0],
'keteranganpakai' => $dataKeteranganUniq[0],
'keteranganlainnya' => $dataKeteranganLainnyaUniq[0],
'details' => $afterFilterDetails
));
}
array_push($returnData, array(
'norecOrder' => $perResep,
'namalengkap' => $dataHead[$perResep]['namalengkap'],
'tglorder' => $dataHead[$perResep]['tglorder'],
'detail' => $detailResep
));
}
}
$dataMasterObat = DB::connection('smart')->select("
select
produk_m.id,
produk_m.namaproduk
from
produk_m inner join
detailjenisproduk_m on produk_m.objectdetailjenisprodukfk = detailjenisproduk_m.id
where
detailjenisproduk_m.objectjenisprodukfk = 97
AND produk_m.statusenabled IS true
order by
namaproduk
limit 20
");
$dataReturn['pdnorec'] = $request->pdnorec;
$dataReturn['pasien_identitas'] = $getDataPD[0];
$dataReturn['his_resep'] = $returnData;
$dataReturn['master_obat'] = $dataMasterObat;
$dataReturn['type'] = $filter_identitas_pasien;
//dd($dataReturn);
return view('dokter.order.form.resep')->with("data", $dataReturn);
}
public function formPeresepanObat(Request $request)
{
$filter_identitas_pasien = (strlen($request->pdnorec) > 8) ? 'pdnorec' : 'nocm';
$getDataPD = PartialController::identitasPasien($filter_identitas_pasien, $request->pdnorec);
if(empty($getDataPD)){
Session::flash('message', "Ops!, Data Tidak Ditemukan.");
return Redirect::back();
}
$dataHistoryResep = DB::connection('smart')->select("
select
strukorder_t.tglorder,
pegawai_m.namalengkap
from
t_resep_dokter inner join
strukorder_t on t_resep_dokter.strukorderfk = strukorder_t.norec inner join
pegawai_m on strukorder_t.objectpegawaiorderfk = pegawai_m.id
where
t_resep_dokter.statusenabled is true
and strukorder_t.statusenabled is true
and strukorder_t.nocmfk = ?
order by
strukorder_t.tglorder desc
limit 10
", array($getDataPD[0]->nocmfk));
$dataMasterObat = DB::connection('smart')->select("
select
produk_m.id,
produk_m.namaproduk,
detailjenisproduk_m.id as detid,
detailjenisproduk_m.detailjenisproduk
from
produk_m inner join
detailjenisproduk_m on produk_m.objectdetailjenisprodukfk = detailjenisproduk_m.id
where
detailjenisproduk_m.objectjenisprodukfk = 97
AND produk_m.statusenabled IS true
and detailjenisproduk_m.statusenabled is true
and detailjenisproduk_m.id in (474,1474,1346)
order by
namaproduk
");
$dataReturn['pdnorec'] = $request->pdnorec;
$dataReturn['pasien_identitas'] = $getDataPD[0];
$dataReturn['his_resep'] = $dataHistoryResep;
$dataReturn['master_obat'] = $dataMasterObat;
$dataReturn['type'] = $filter_identitas_pasien;
$assets = ['pro','select2'];
return view('dokter.order.form.resep-form', compact('assets'))->with("data", $dataReturn);
}
public function SimpanPeresepanObat(Request $request)
{
$filter_identitas_pasien = (strlen($request->pdnorec) > 8) ? 'pdnorec' : 'nocm';
DB::connection('smart')->beginTransaction();
try {
$now = date('Y-m-d H:i:s');
$registrasiDetail = DB::connection('smart')->table('antrianpasiendiperiksa_t as apd')
->JOIN('pasiendaftar_t as pd','pd.norec','=','apd.noregistrasifk')
->select('pd.norec','pd.nocmfk','apd.objectruanganfk','pd.objectkelasfk','apd.norec as apdnorec')
->where('apd.norec',$request->noregistrasifk)
->first();
$newId = DB::connection('smart')->table('strukorder_t')->where('noorder','like',date('ym').'%')->max('noorder');
$newId = substr(trim($newId),4);
$newId = (int)$newId + 1;
$noOrder = date('ym'). str_pad($newId, 6, "0", STR_PAD_LEFT);
$strukOrder = [
'norec' => $this->generateNorecSmartV1(),
'kdprofile' => 0,
'statusenabled' => 't',
'nocmfk' => $registrasiDetail->nocmfk,
'kddokter' => $request->penulisresepfk,
'objectjenisorderfk' => 5,
'isdelivered' => 1,
'objectkelompoktransaksifk' => 4,
'keteranganorder' => 'Order Farmasi',
'noorder' => $noOrder,
'noregistrasifk' => $registrasiDetail->norec,
'objectpegawaiorderfk' => $request->penulisresepfk,
'qtyproduk' => 0,
'qtyjenisproduk' => 0,
'objectruanganfk' => $registrasiDetail->objectruanganfk,
'objectruangantujuanfk' => $this->getRuanganTujuanOrderFarmasi($registrasiDetail->objectruanganfk),
'statusorder' => 0,
'tglorder' => $now,
'totalbeamaterai' => 0,
'totalbiayakirim' => 0,
'totalbiayatambahan' => 0,
'totaldiscount' => 0,
'totalhargasatuan' => 0,
'totalharusdibayar' => 0,
'totalpph' => 0,
'totalppn' => 0,
'masalah' => $request->riwayatalergi,
'diagnosis' => $request->beratbadan,
'cito' => (isset($request->cito) && $request->cito == 'on') ? true : false,
'ispickup' => (isset($request->pulang) && $request->pulang == 'on') ? true : false,
'alamattempattujuan' => 'Tidak',
];
DB::connection('smart')->table('strukorder_t')->insert($strukOrder);
foreach($request->resepdokter as $listItemObat){
$resepDokter = [
'norec' => $this->generateNorecSmartV1(),
'statusenabled' => 't',
'noorderfk' => $strukOrder['norec'],
'qtyproduk' => $listItemObat['jumlah'],
'objectruanganfk' => $registrasiDetail->objectruanganfk,
'strukorderfk' => $strukOrder['norec'],
'racikanke' => $listItemObat['rke'],
'jenisobatfk' => 5,
'jeniskemasanfk' => $listItemObat['jeniskemasanfk'],
'keteranganlainnya' => $listItemObat['keteranganlainnya'],
'keteranganpakai' =>$listItemObat['keteranganpakai'],
'namaobat' => $listItemObat['namaobat'],
];
DB::connection('smart')->table('t_resep_dokter')->insert($resepDokter);
}
DB::connection('smart')->commit();
return redirect()->route('dokter.order.resep.view', [$filter_identitas_pasien => $request->pdnorec])->with('success','Resep Berhasil Disimpan.');
} catch (\Exception $e) {
DB::connection('smart')->rollBack();
return back()->with('error', 'Data gagal disimpan, mohon periksa kembali inputan anda.');
}
}
public function generateNorecSmartV1(){
return str_replace("-","",strtolower(Str::uuid()->toString()));
}
public function getRuanganTujuanOrderFarmasi($asalOrder){
if($asalOrder==491){
return 116;
} elseif ($asalOrder==510) {
return 116;
} elseif ($asalOrder==511) {
return 116;
} elseif ($asalOrder==512) {
return 116;
} elseif ($asalOrder==514) {
return 116;
} elseif ($asalOrder==517) {
return 116;
} elseif ($asalOrder==518) {
return 116;
} elseif ($asalOrder==519) {
return 116;
} elseif ($asalOrder==520) {
return 116;
} elseif ($asalOrder==521) {
return 116;
} elseif ($asalOrder==522) {
return 116;
} elseif ($asalOrder==523) {
return 116;
} elseif ($asalOrder==525) {
return 116;
} elseif ($asalOrder==531) {
return 116;
} elseif ($asalOrder==533) {
return 116;
} elseif ($asalOrder==534) {
return 116;
} else {
return 94;
}
}
}