From 315e2ce4002d46519d26821917160dba87f0e945 Mon Sep 17 00:00:00 2001 From: mahdahar <89adham@gmail.com> Date: Sat, 6 Dec 2025 18:47:56 +0700 Subject: [PATCH] finish v2 --- app/Config/Routes.php | 6 +- app/Controllers/Sample.php | 209 +++++++++++---------- app/Controllers/V2.php | 140 ++++++++------ app/Controllers/V2/Admin.php | 10 + app/Views/v2/{ => admin}/dialog_sample.php | 21 ++- app/Views/v2/{ => admin}/dialog_unval.php | 0 app/Views/v2/{ => admin}/dialog_val.php | 0 app/Views/v2/{ => admin}/index.php | 162 ++++++++++++---- app/Views/v2/login.php | 39 ++-- 9 files changed, 357 insertions(+), 230 deletions(-) create mode 100644 app/Controllers/V2/Admin.php rename app/Views/v2/{ => admin}/dialog_sample.php (78%) rename app/Views/v2/{ => admin}/dialog_unval.php (100%) rename app/Views/v2/{ => admin}/dialog_val.php (100%) rename app/Views/v2/{ => admin}/index.php (61%) diff --git a/app/Config/Routes.php b/app/Config/Routes.php index f41f5f6..7bde72e 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -56,6 +56,10 @@ $routes->post('api/request/validate/(:any)', 'Request::val/$1'); $routes->delete('api/request/validate/(:any)', 'Request::unval/$1'); $routes->get('api/request', 'Request::index'); $routes->get('api/sample/(:any)', 'Sample::show/$1'); +$routes->post('api/sample/collect/(:any)', 'Sample::collect/$1'); +$routes->delete('api/sample/collect/(:any)', 'Sample::uncollect/$1'); +$routes->delete('api/sample/receive/(:any)', 'Sample::unreceive/$1'); + $routes->get('api/specimen/(:any)', 'Specimen::show/$1'); $routes->post('api/specimen/collect/(:any)', 'Specimen::collect/$1'); @@ -67,7 +71,7 @@ $routes->group('v2', function($routes) { $routes->get('', 'V2::index'); $routes->get('login', 'V2::loginPage'); $routes->post('login', 'V2::login'); - $routes->group('Admin/', ['filter' => 'role:1'], function($routes) { + $routes->group('admin', ['filter' => 'role:1'], function($routes) { $routes->get('', 'V2\Admin::index'); }); }); diff --git a/app/Controllers/Sample.php b/app/Controllers/Sample.php index 70d6a48..01f0d75 100644 --- a/app/Controllers/Sample.php +++ b/app/Controllers/Sample.php @@ -3,112 +3,121 @@ namespace App\Controllers; use CodeIgniter\API\ResponseTrait; class Sample extends BaseController { - use ResponseTrait; + use ResponseTrait; - public function show($accessnumber) { - $db = \Config\Database::connect(); + public function show($accessnumber) { + $db = \Config\Database::connect(); - $sql = "SELECT right(p.PATNUMBER,16) as [patnumber], ISNULL(p.FIRSTNAME,'') + ' ' + ISNULL(p.NAME,'') as [Name], - case when format(p.BIRTHDATE,'MMdd')=format(spr.COLLECTIONDATE,'MMdd') then DATEDIFF(YEAR,p.BIRTHDATE, spr.COLLECTIONDATE) - else FLOOR(DATEDIFF(DAY, p.BIRTHDATE, spr.COLLECTIONDATE) / 365.25) end , - [Gender] = case - when p.SEX = 1 then 'M' - when p.SEX = 2 then 'F' - else '' - end, spr.REQDATE, spo.COMMENTTEXT, dmg.DMG_CKTPNO, dmg.DMG_CPLACEOFBIRTH - from SP_REQUESTS spr - left join PATIENTS p on p.PATID=spr.PATID - left join SP_REQUESTS_OCOM spo on spr.SP_ACCESSNUMBER=spo.SP_ACCESSNUMBER - left join GDC_CMOD.dbo.TDL_DEMOGRAPHIC dmg on right(dmg.DMG_CPATNUMBER,15)=right(p.PATNUMBER,15) - where spr.PATID=p.PATID and spr.SP_ACCESSNUMBER='$accessnumber'"; - $query = $db->query($sql); - $results = $query->getRowArray(); - $data = [ - 'patnumber' => $results["patnumber"], - 'age' => $results[""], - 'patname' => $results['Name'] ?? '', - 'reqdate' => $results['REQDATE'] ?? '', - 'gender' => $results['Gender'] ?? '', - 'placeofbirth' => $results['DMG_CPLACEOFBIRTH'] ?? '', - 'ktp' => $results['DMG_CKTPNO'] ?? '', - 'comment' => $results['COMMENTTEXT'] ?? '', - 'accessnumber' => $accessnumber, + $sql = "SELECT right(p.PATNUMBER,16) as [patnumber], ISNULL(p.FIRSTNAME,'') + ' ' + ISNULL(p.NAME,'') as [Name], + case when format(p.BIRTHDATE,'MMdd')=format(spr.COLLECTIONDATE,'MMdd') then DATEDIFF(YEAR,p.BIRTHDATE, spr.COLLECTIONDATE) + else FLOOR(DATEDIFF(DAY, p.BIRTHDATE, spr.COLLECTIONDATE) / 365.25) end , + [Gender] = case + when p.SEX = 1 then 'M' + when p.SEX = 2 then 'F' + else '' + end, spr.REQDATE, spo.COMMENTTEXT, dmg.DMG_CKTPNO, dmg.DMG_CPLACEOFBIRTH + from SP_REQUESTS spr + left join PATIENTS p on p.PATID=spr.PATID + left join SP_REQUESTS_OCOM spo on spr.SP_ACCESSNUMBER=spo.SP_ACCESSNUMBER + left join GDC_CMOD.dbo.TDL_DEMOGRAPHIC dmg on right(dmg.DMG_CPATNUMBER,15)=right(p.PATNUMBER,15) + where spr.PATID=p.PATID and spr.SP_ACCESSNUMBER='$accessnumber'"; + $query = $db->query($sql); + $results = $query->getRowArray(); + $data = [ + 'patnumber' => $results["patnumber"], + 'age' => $results[""], + 'patname' => $results['Name'] ?? '', + 'reqdate' => $results['REQDATE'] ?? '', + 'gender' => $results['Gender'] ?? '', + 'placeofbirth' => $results['DMG_CPLACEOFBIRTH'] ?? '', + 'ktp' => $results['DMG_CKTPNO'] ?? '', + 'comment' => $results['COMMENTTEXT'] ?? '', + 'accessnumber' => $accessnumber, + ]; + + $samples = []; + $sql = "SELECT req.SAMPTYPEID, req.SAMPCODE, req.SHORTTEXT, tu.STATUS, st.TUBESTATUS + from GDC_CMOD.dbo.v_sp_reqtube req + left join GDC_CMOD.dbo.TUBES tu on req.SP_ACCESSNUMBER=tu.ACCESSNUMBER and req.SAMPCODE=tu.TUBENUMBER + left join glendb.dbo.SP_TUBES st on st.SP_ACCESSNUMBER=req.SP_ACCESSNUMBER and req.SAMPCODE=st.SAMPLETYPE + where req.SP_ACCESSNUMBER='$accessnumber'"; + $query = $db->query($sql); + $results = $query->getResultArray(); + foreach ($results as $row) { + $samples[] = [ + 'samptypeid' => $row['SAMPTYPEID'] ?? null, + 'sampcode' => $row['SAMPCODE'] ?? null, + 'name' => $row['SHORTTEXT'] ?? '', + 'colstatus' => $row['STATUS'] ?? '', + 'tubestatus' => $row['TUBESTATUS'] ?? '', ]; + } + $data['samples'] = $samples; - $samples = []; - $sql = "SELECT req.SAMPTYPEID, req.SAMPCODE, req.SHORTTEXT, tu.STATUS, st.TUBESTATUS - from GDC_CMOD.dbo.v_sp_reqtube req - left join GDC_CMOD.dbo.TUBES tu on req.SP_ACCESSNUMBER=tu.ACCESSNUMBER and req.SAMPCODE=tu.TUBENUMBER - left join glendb.dbo.SP_TUBES st on st.SP_ACCESSNUMBER=req.SP_ACCESSNUMBER and req.SAMPCODE=st.SAMPLETYPE - where req.SP_ACCESSNUMBER='$accessnumber'"; - $query = $db->query($sql); - $results = $query->getResultArray(); - foreach ($results as $row) { - $samples[] = [ - 'samptypeid' => $row['SAMPTYPEID'] ?? null, - 'sampcode' => $row['SAMPCODE'] ?? null, - 'name' => $row['SHORTTEXT'] ?? '', - 'colstatus' => $row['STATUS'] ?? '', - 'tubestatus' => $row['TUBESTATUS'] ?? '', - ]; - } - $data['samples'] = $samples; + $resp = [ 'data' => $data ]; - $resp = [ 'data' => $data ]; + return $this->response->setJSON($resp); + } + + public function collect($accessnumber) { + $db = \Config\Database::connect(); + $input = $this->request->getJSON(true); + $samplenumber = $input['samplenumber']; + $userid = $input['userid']; + $sql = "update GDC_CMOD.dbo.TUBES set USERID='$userid',STATUS='1', COLLECTIONDATE=getdate() where ACCESSNUMBER='$accessnumber' and TUBENUMBER='$samplenumber'"; + $db->query($sql); + $sql = "INSERT INTO GDC_CMOD.dbo.AUDIT_TUBES(ACCESSNUMBER, TUBENUMBER, USERID, STATUS, LOGDATE) + VALUES ('$accessnumber', '$samplenumber', '$userid', '1', getdate())"; + $db->query($sql); + return $this->respondCreated([ 'status' => 'success', 'message' => 'Data updated successfully', 'data' => "$accessnumber-$samplenumber" ], 201); + } - return $this->response->setJSON($resp); - } - - public function collect($accessnumber) { - $db = \Config\Database::connect(); - $input = $this->request->getJSON(true); - $samplenumber = $input['samplenumber']; - $status = $input['status']; - $userid = $input['userid']; - $sql = "if not exists (select * from GDC_CMOD.dbo.TUBES where ACCESSNUMBER='$accessnumber' and TUBENUMBER='$samplenumber' and STATUS='$status') - begin - update GDC_CMOD.dbo.TUBES set USERID='$userid',STATUS='$status', COLLECTIONDATE=getdate() where ACCESSNUMBER='$accessnumber' and TUBENUMBER='$samplenumber' - end"; - $db->query($sql); - $sql = "INSERT INTO GDC_CMOD.dbo.AUDIT_TUBES(ACCESSNUMBER, TUBENUMBER, USERID, STATUS, LOGDATE) - VALUES ('$accessnumber', '$samplenumber', '$userid', '$status', getdate())"; - $db->query($sql); - return $this->respondCreated([ 'status' => 'success', 'message' => 'Data updated successfully', 'data' => "$accessnumber-$samplenumber" ], 201); + public function uncollect($accessnumber) { + $db = \Config\Database::connect(); + $input = $this->request->getJSON(true); + $samplenumber = $input['samplenumber']; + $userid = $input['userid']; + $sql = "update GDC_CMOD.dbo.TUBES set USERID='$userid',STATUS='0', COLLECTIONDATE=getdate() where ACCESSNUMBER='$accessnumber' and TUBENUMBER='$samplenumber'"; + $db->query($sql); + $sql = "INSERT INTO GDC_CMOD.dbo.AUDIT_TUBES(ACCESSNUMBER, TUBENUMBER, USERID, STATUS, LOGDATE) + VALUES ('$accessnumber', '$samplenumber', '$userid', '0', getdate())"; + $db->query($sql); + return $this->respondCreated([ 'status' => 'success', 'message' => 'Data updated successfully', 'data' => "$accessnumber-$samplenumber" ], 201); + } + + public function unreceive($accessnumber) { + $db = \Config\Database::connect(); + $input = $this->request->getJSON(true); + $samplenumber = $input['samplenumber']; + // update firebird + $sql = "select r.EXTERNALORDERNUMBER, dt.TESTCODE, do.HISCODE from glendb.dbo.TESTS t + left join glendb.dbo.DICT_TESTS dt on dt.TESTID=t.TESTID + left join glendb.dbo.REQUESTS r on r.REQUESTID=t.REQUESTID + left join glendb.dbo.DICT_TEST_SAMPLES dts on dts.TESTID=t.TESTID + left join glendb.dbo.DICT_SAMPLES_TYPES ds on ds.SAMPTYPEID=dts.SAMPTYPEID + left join GDC_CMOD.dbo.DICT_TESTS_ORDER do on do.TESTCODE=dt.TESTCODE + where t.DEPTH=0 + and r.ACCESSNUMBER='$req' and ds.SAMPCODE='$samplenumber'"; + $rows = $db->query($sql)->getResultArray(); + $his_test = ''; + foreach( $rows as $row ) { + $hon = $row['EXTERNALORDERNUMBER']; + $testcode = $row['TESTCODE']; + $hiscode = $row['HISCODE']; + $his_test .= "'$hiscode',"; + $lis_test .= "'$testcode',"; } + $his_test = rtrim($his_test,','); + $lis_test = rtrim($lis_test,','); + $conn = odbc_connect('GLENEAGLES','',''); + $sql = "UPDATE TDL_ORDERDT SET ODD_NRECEIVED=NULL , ODD_DTRECEIVE=NULL WHERE ODR_CNOLAB='$hon' and ODD_CPRODUCTCODE IN ($his_test)"; + $rs = odbc_exec($conn,$sql); + if (!$rs) {exit("Error in Update FB");} - public function unreceive($accessnumber) { - $db = \Config\Database::connect(); - $input = $this->request->getJSON(true); - $samplenumber = $input['samplenumber']; - // update firebird - $sql = "select r.EXTERNALORDERNUMBER, dt.TESTCODE, do.HISCODE from glendb.dbo.TESTS t - left join glendb.dbo.DICT_TESTS dt on dt.TESTID=t.TESTID - left join glendb.dbo.REQUESTS r on r.REQUESTID=t.REQUESTID - left join glendb.dbo.DICT_TEST_SAMPLES dts on dts.TESTID=t.TESTID - left join glendb.dbo.DICT_SAMPLES_TYPES ds on ds.SAMPTYPEID=dts.SAMPTYPEID - left join GDC_CMOD.dbo.DICT_TESTS_ORDER do on do.TESTCODE=dt.TESTCODE - where t.DEPTH=0 - and r.ACCESSNUMBER='$req' and ds.SAMPCODE='$samplenumber'"; - $rows = $db->query($sql)->getResultArray(); - $his_test = ''; - foreach( $rows as $row ) { - $hon = $row['EXTERNALORDERNUMBER']; - $testcode = $row['TESTCODE']; - $hiscode = $row['HISCODE']; - $his_test .= "'$hiscode',"; - $lis_test .= "'$testcode',"; - } - $his_test = rtrim($his_test,','); - $lis_test = rtrim($lis_test,','); - $conn = odbc_connect('GLENEAGLES','',''); - $sql = "UPDATE TDL_ORDERDT SET ODD_NRECEIVED=NULL , ODD_DTRECEIVE=NULL WHERE ODR_CNOLAB='$hon' and ODD_CPRODUCTCODE IN ($his_test)"; - $rs = odbc_exec($conn,$sql); - if (!$rs) {exit("Error in Update FB");} - - $sql = "update SP_TUBES set TUBESTATUS=0 where SP_ACCESSNUMBER='$accessnumber' and SAMPLETYPE='$samplenumber' "; - $db->query($sql); - $sql = "update SP_TESTS set SP_TESTSTATUS=NULL where SP_ACCESSNUMBER='$req' and SP_TESTCODE in ($lis_test)"; - $db->query($sql); - return $this->respondCreated([ 'status' => 'success', 'message' => 'Data updated successfully', 'data' => "$accessnumber-$samplenumber" ], 201); - } + $sql = "update SP_TUBES set TUBESTATUS=0 where SP_ACCESSNUMBER='$accessnumber' and SAMPLETYPE='$samplenumber' "; + $db->query($sql); + $sql = "update SP_TESTS set SP_TESTSTATUS=NULL where SP_ACCESSNUMBER='$req' and SP_TESTCODE in ($lis_test)"; + $db->query($sql); + return $this->respondCreated([ 'status' => 'success', 'message' => 'Data updated successfully', 'data' => "$accessnumber-$samplenumber" ], 201); + } } diff --git a/app/Controllers/V2.php b/app/Controllers/V2.php index 1704eda..7e14c65 100644 --- a/app/Controllers/V2.php +++ b/app/Controllers/V2.php @@ -1,78 +1,94 @@ get('isLoggedIn')) { - return redirect()->to('v2/login'); - } + public function index() { + $session = session(); - // Jika sudah login, arahkan sesuai level - switch ($session->get('level')) { - case 1: return redirect()->to('v2/admin'); - case 2: return redirect()->to('v2/dokter'); - case 3: return redirect()->to('v2/analis'); - case 4: return redirect()->to('v2/cs'); - default: return redirect()->to('v2/login'); - } - } - - public function loginPage() { - return view("v2/login"); - } + if (! $session->get('isLoggedIn')) { + return redirect()->to('v2/login'); + } - public function login() { - helper(['form', 'url']); - $session = session(); - $db = \Config\Database::connect(); + // Jika sudah login, arahkan sesuai level + switch ($session->get('level')) { + case 1: + return redirect()->to('v2/admin'); + case 2: + return redirect()->to('v2/dokter'); + case 3: + return redirect()->to('v2/analis'); + case 4: + return redirect()->to('v2/cs'); + default: + return redirect()->to('v2/login'); + } + } - $userid = strtoupper(trim($this->request->getPost('userid'))); - $password = $this->request->getPost('password'); + public function loginPage() { + return view("v2/login"); + } - // Gunakan raw SQL sesuai kolom di tabel kamu - $query = $db->query("SELECT * FROM gdc_cmod.dbo.USERS WHERE USERID = ?", [$userid]); - $user = $query->getRowArray(); + public function login() { + helper(['form', 'url']); + $session = session(); + $db = \Config\Database::connect(); - if ($user && !empty($user['PASSWORD']) && password_verify($password, $user['PASSWORD'])) { + $userid = strtoupper(trim($this->request->getPost('userid'))); + $password = $this->request->getPost('password'); - // Role untuk url - switch ((int)$user['USERLEVEL']) { - case 1: $role = 'admin'; break; - case 2: $role = 'doctor'; break; - case 3: $role = 'analyst'; break; - case 4: $role = 'cs'; break; - default: $role = ''; break; - } + // Gunakan raw SQL sesuai kolom di tabel kamu + $query = $db->query("SELECT * FROM gdc_cmod.dbo.USERS WHERE USERID = ?", [$userid]); + $user = $query->getRowArray(); - // Simpan session - $session->set([ - 'isLoggedIn' => true, - 'userid' => (string) $user['USERID'], - 'userlevel' => (int) $user['USERLEVEL'], - 'userrole' => (string) $role, - ]); + if ($user && !empty($user['PASSWORD']) && password_verify($password, $user['PASSWORD'])) { - // Redirect sesuai level dari data didatabase - switch ((int)$user['USERLEVEL']) { - case 1: return redirect()->to('v2/admin'); - case 2: return redirect()->to('v2/doctor'); - case 3: return redirect()->to('v2/analyst'); - case 4: return redirect()->to('v2/cs'); - default: return redirect()->to('v2/login'); - } - } else { - $session->setFlashdata('error', 'USERID atau PASSWORD salah.'); - return redirect()->back(); - } - } - + // Role untuk url + switch ((int)$user['USERLEVEL']) { + case 1: + $role = 'admin'; + break; + case 2: + $role = 'doctor'; + break; + case 3: + $role = 'analyst'; + break; + case 4: + $role = 'cs'; + break; + default: + $role = ''; + break; + } + + // Simpan session + $session->set([ + 'isLoggedIn' => true, + 'userid' => (string) $user['USERID'], + 'userlevel' => (int) $user['USERLEVEL'], + 'userrole' => (string) $role, + ]); + + // Redirect sesuai level dari data didatabase + switch ((int)$user['USERLEVEL']) { + case 1: + return redirect()->to('v2/admin'); + case 2: + return redirect()->to('v2/doctor'); + case 3: + return redirect()->to('v2/analyst'); + case 4: + return redirect()->to('v2/cs'); + default: + return redirect()->to('v2/login'); + } + } else { + $session->setFlashdata('error', 'USERID atau PASSWORD salah.'); + return redirect()->back(); + } + } } diff --git a/app/Controllers/V2/Admin.php b/app/Controllers/V2/Admin.php new file mode 100644 index 0000000..a47455a --- /dev/null +++ b/app/Controllers/V2/Admin.php @@ -0,0 +1,10 @@ +