From 656aef8f7c81b28bb0cb66d99b262399e50d9c90 Mon Sep 17 00:00:00 2001 From: mahdahar <89adham@gmail.com> Date: Fri, 5 Dec 2025 16:54:55 +0700 Subject: [PATCH] go go alpine ranger --- app/Config/Routes.php | 8 ++- app/Controllers/Request.php | 4 +- app/Controllers/V2.php | 66 ++++++++++++++++++++++++- app/Views/v2/dialog_unval.php | 10 ++++ app/Views/v2/dialog_val.php | 6 +-- app/Views/v2/index.php | 92 +++++++++++++++++++++++++---------- app/Views/v2/login.php | 49 +++++++++++++++++++ 7 files changed, 200 insertions(+), 35 deletions(-) create mode 100644 app/Views/v2/dialog_unval.php create mode 100644 app/Views/v2/login.php diff --git a/app/Config/Routes.php b/app/Config/Routes.php index 3228230..f41f5f6 100644 --- a/app/Config/Routes.php +++ b/app/Config/Routes.php @@ -62,7 +62,13 @@ $routes->post('api/specimen/collect/(:any)', 'Specimen::collect/$1'); $routes->delete('api/specimen/receive/(:any)', 'Specimen::unreceive/$1'); /*- lets go alpine -*/ + $routes->group('v2', function($routes) { - $routes->get('', 'v2::index'); + $routes->get('', 'V2::index'); + $routes->get('login', 'V2::loginPage'); + $routes->post('login', 'V2::login'); + $routes->group('Admin/', ['filter' => 'role:1'], function($routes) { + $routes->get('', 'V2\Admin::index'); + }); }); diff --git a/app/Controllers/Request.php b/app/Controllers/Request.php index 607a801..326a2df 100644 --- a/app/Controllers/Request.php +++ b/app/Controllers/Request.php @@ -51,8 +51,8 @@ class Request extends BaseController { $userid = $input['userid']; $comment = $input['comment']; $db = db_connect(); - $sql = "update GDC_CMOD.dbo.CM_REQUESTS set ISVAL1=0, VAL1USER=null, VAL1DATE=null, ISVAL2=0, VAL2USER=null, VAL2DATE=null, - PENDINGTEXT='$comment', PENDINGUSER='$userid', PENDINGDATE=GETDATE() where ACCESSNUMBER='$accessnumber'"; + $sql = "update GDC_CMOD.dbo.CM_REQUESTS set ISVAL1=null, VAL1USER=null, VAL1DATE=null, ISVAL2=null, VAL2USER=null, VAL2DATE=null, + ISPENDING=1, PENDINGTEXT='$comment', PENDINGUSER='$userid', PENDINGDATE=GETDATE() where ACCESSNUMBER='$accessnumber'"; $db->query($sql); $data = ['status' => 'success', 'message' => 'Data updated successfully', 'data' => "$accessnumber" ]; diff --git a/app/Controllers/V2.php b/app/Controllers/V2.php index b6ecb91..1704eda 100644 --- a/app/Controllers/V2.php +++ b/app/Controllers/V2.php @@ -4,11 +4,75 @@ namespace App\Controllers; use App\Controllers\BaseController; class V2 extends BaseController { + /* public function index() { return view("v2/index"); } + */ + public function index() { + $session = session(); - public function modal_specimen() { + if (! $session->get('isLoggedIn')) { + return redirect()->to('v2/login'); + } + + // 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"); + } + + public function login() { + helper(['form', 'url']); + $session = session(); + $db = \Config\Database::connect(); + + $userid = strtoupper(trim($this->request->getPost('userid'))); + $password = $this->request->getPost('password'); + + // Gunakan raw SQL sesuai kolom di tabel kamu + $query = $db->query("SELECT * FROM gdc_cmod.dbo.USERS WHERE USERID = ?", [$userid]); + $user = $query->getRowArray(); + + if ($user && !empty($user['PASSWORD']) && password_verify($password, $user['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; + } + + // 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/Views/v2/dialog_unval.php b/app/Views/v2/dialog_unval.php new file mode 100644 index 0000000..53abbee --- /dev/null +++ b/app/Views/v2/dialog_unval.php @@ -0,0 +1,10 @@ + + + diff --git a/app/Views/v2/dialog_val.php b/app/Views/v2/dialog_val.php index 27ad1a6..64aaeb4 100644 --- a/app/Views/v2/dialog_val.php +++ b/app/Views/v2/dialog_val.php @@ -6,10 +6,8 @@

- - - - + + diff --git a/app/Views/v2/index.php b/app/Views/v2/index.php index de92983..f2f00ac 100644 --- a/app/Views/v2/index.php +++ b/app/Views/v2/index.php @@ -30,7 +30,7 @@ CMOD
- Hi, lisfse + Hi,
@@ -118,6 +126,7 @@ include('v2/dialog_sample'); ?> include('v2/dialog_val'); ?> + include('v2/dialog_unval'); ?> @@ -200,28 +209,31 @@ this.fetchList(); }, + isValidated (item) { + return item.ISVAL == 1 && item.ISPENDING != 1; + }, get filtered() { - let data = this.list; + let filteredList = this.list; if (this.filterKey === 'Validated') { - data = data.filter(i => i.ISVAL == 1); + filteredList = filteredList.filter(item => this.isValidated(item)); } else { - const valid = this.statusMap[this.filterKey] - if (valid.length > 0) { - data = data.filter(i => valid.includes(i.STATS)); + const validStatuses = this.statusMap[this.filterKey]; + if (validStatuses.length > 0) { + filteredList = filteredList.filter(item => validStatuses.includes(item.STATS)); } } if (this.filterTable) { - const s = this.filterTable.toLowerCase(); - data = data.filter(i => - Object.values(i).some(v => - String(v).toLowerCase().includes(s) + const searchTerm = this.filterTable.toLowerCase(); + filteredList = filteredList.filter(item => + Object.values(item).some(value => + String(value).toLowerCase().includes(searchTerm) ) ); } - return data; + return filteredList; }, get validatedCount() { - return this.list.filter(r => r.ISVAL == 1).length; + return this.list.filter(r => this.isValidated(r)).length; }, /* @@ -291,21 +303,47 @@ closeValDialog () { this.isDialogValOpen = false; }, - unval(accessnumber) { - console.log("Unvalidate access number:", accessnumber); - }, validate(accessnumber, userid) { - fetch(`${BASE_URL}/api/request/validate/${accessnumber}`, { + fetch(`${BASEURL}/api/request/validate/${accessnumber}`, { method: "POST", headers: {"Content-Type": "application/json"}, body: JSON.stringify({ userid:`${userid}` }) }).then(response => { - this.closeValDialog() - console.log('Validate clicked for', this.valAccessnumber); + this.closeValDialog(); + this.fetchList(); + console.log('Validate clicked for', this.valAccessnumber, 'by user', userid); }); - } + }, + + /* + unvalidate dialog + */ + isDialogUnvalOpen : false, + unvalReason : '', + unvalAccessnumber : null, + openUnvalDialog (accessnumber) { + this.unvalReason = ''; + this.isDialogUnvalOpen = true; + this.unvalAccessnumber = accessnumber; + }, + unvalidate(accessnumber, userid) { + if(!confirm(`Unvalidate request ${accessnumber}?`)) { return ;} + fetch(`${BASEURL}/api/request/validate/${accessnumber}`, { + method: "DELETE", + headers: {"Content-Type": "application/json"}, + body: JSON.stringify({ userid:`${userid}`, comment: this.unvalReason.trim() }) + }).then(response => { + this.closeUnvalDialog(); + this.fetchList(); + console.log(`Unvalidate clicked for ${accessnumber}, by user ${userid}`); + }); + }, + closeUnvalDialog () { + this.isDialogUnvalOpen = false; + }, + })); - }); + }); Alpine.start(); diff --git a/app/Views/v2/login.php b/app/Views/v2/login.php new file mode 100644 index 0000000..d1e35ba --- /dev/null +++ b/app/Views/v2/login.php @@ -0,0 +1,49 @@ + + + + + + Login - CMOD + + + + + + +
+
+
+
+
+ Fun Avatar +
+
+

Welcome to CMOD!

+

Sign in to continue your adventure 🚀

+
+
+ +
+
+ +
+ +
+
+ Forgot password? + Contact admin +
+
+
+
© 2025 - 5Panda
+
+ +