From 43342bf361b855fa2c371b25f0d61e1a039d11b7 Mon Sep 17 00:00:00 2001 From: Hanan Askarim Date: Mon, 22 Jun 2026 15:00:49 +0700 Subject: [PATCH] add api poli --- .../controllers/mockup/masterdata/Poli.http | 73 ++++ .../controllers/mockup/masterdata/Poli.php | 323 ++++++++++++++++++ 2 files changed, 396 insertions(+) create mode 100644 application/controllers/mockup/masterdata/Poli.http create mode 100644 application/controllers/mockup/masterdata/Poli.php diff --git a/application/controllers/mockup/masterdata/Poli.http b/application/controllers/mockup/masterdata/Poli.http new file mode 100644 index 00000000..0e27ded1 --- /dev/null +++ b/application/controllers/mockup/masterdata/Poli.http @@ -0,0 +1,73 @@ +@baseUrl = https://devone.aplikasi.web.id/one-api-lab +@token = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJNX1VzZXJJRCI6IjMiLCJNX1VzZXJVc2VybmFtZSI6ImFkbWluICIsIk1fVXNlckdyb3VwRGFzaGJvYXJkIjoib25lLXVpLWxhYlwvdGVzdFwvdnVleFwvb25lLXBhdGllbnQtbGlzdC1iYXJjb2RlLXZ2LTYtY3BvbmVcLyIsIk1fVXNlckRlZmF1bHRUX1NhbXBsZVN0YXRpb25JRCI6IjAiLCJNX1N0YWZmTmFtZSI6IkFCSVRBIEpVV0lUQSBTQVJJIiwiaXNfY291cmllciI6Ik4iLCJ0aW1lX2F1dG9sb2dvdXQiOiIxMDAwMDAwIiwiaXAiOiIxMDMuMy4yMjAuMjIxIiwiYWdlbnQiOiJNb3ppbGxhXC81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXRcLzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZVwvMTQ5LjAuMC4wIFNhZmFyaVwvNTM3LjM2IiwidmVyc2lvbiI6InYyIiwibGFzdC1sb2dpbiI6IjIwMjYtMDYtMjIgMTE6MjM6MjkiLCJNX1NhdGVsbGl0ZUlEIjowfQ.wkQFPGQ52TeceDQARm8auj6jEb159V46BzTZ9NEE_vM +@poliId = 1 + +### Search Poli +POST {{baseUrl}}/mockup/masterdata/poli/search +Content-Type: application/json + +{ + "token": "{{token}}", + "search": "", + "page": 1, + "row_per_page": 10, + "order_by": "id", + "order": "asc" +} + +### Search Poli By Name +POST {{baseUrl}}/mockup/masterdata/poli/search +Content-Type: application/json + +{ + "token": "{{token}}", + "search": "khitan", + "page": 1, + "row_per_page": 10, + "order_by": "name", + "order": "asc" +} + +### Get Screening Templates +POST {{baseUrl}}/mockup/masterdata/poli/gettemplates +Content-Type: application/json + +{ + "token": "{{token}}" +} + +### Add Poli +POST {{baseUrl}}/mockup/masterdata/poli/add +Content-Type: application/json + +{ + "token": "{{token}}", + "code": "POLI_TEST", + "name": "Poli Test", + "description": "Poli untuk test API", + "satusehat_location_id": "", + "screening_template_id": null +} + +### Update Poli +POST {{baseUrl}}/mockup/masterdata/poli/update +Content-Type: application/json + +{ + "token": "{{token}}", + "id": {{poliId}}, + "code": "POLI_TEST", + "name": "Poli Test Update", + "description": "Poli untuk test API update", + "satusehat_location_id": "", + "screening_template_id": null +} + +### Delete Poli +POST {{baseUrl}}/mockup/masterdata/poli/delete +Content-Type: application/json + +{ + "token": "{{token}}", + "id": {{poliId}} +} diff --git a/application/controllers/mockup/masterdata/Poli.php b/application/controllers/mockup/masterdata/Poli.php new file mode 100644 index 00000000..24dc36aa --- /dev/null +++ b/application/controllers/mockup/masterdata/Poli.php @@ -0,0 +1,323 @@ +db_oneklinik = $this->load->database("onedev", true); + } + + public function index() + { + echo "POLI API"; + } + + public function search() + { + try { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $prm = $this->sys_input; + $search = isset($prm['search']) ? trim($prm['search']) : (isset($prm['name']) ? trim($prm['name']) : ''); + $like = '%' . $search . '%'; + $row_per_page = isset($prm['row_per_page']) && intval($prm['row_per_page']) > 0 ? intval($prm['row_per_page']) : 10; + $page = 1; + if (isset($prm['page']) && intval($prm['page']) > 0) { + $page = intval($prm['page']); + } elseif (isset($prm['current_page']) && intval($prm['current_page']) > 0) { + $page = intval($prm['current_page']); + } + $offset = ($page - 1) * $row_per_page; + + $allowed_order_by = array( + 'id' => 'cu.M_ClinicUnitID', + 'code' => 'cu.M_ClinicUnitCode', + 'name' => 'cu.M_ClinicUnitName', + 'description' => 'cu.M_ClinicUnitDescription', + 'screening_template_name' => 'st.M_ScreeningTemplateName' + ); + $order_by = 'cu.M_ClinicUnitID'; + if (isset($prm['order_by']) && isset($allowed_order_by[$prm['order_by']])) { + $order_by = $allowed_order_by[$prm['order_by']]; + } + $order = isset($prm['order']) && strtolower($prm['order']) === 'desc' ? 'DESC' : 'ASC'; + + $sql_count = "SELECT COUNT(*) AS total + FROM one_klinik.m_clinic_unit cu + LEFT JOIN one_klinik.m_screening_template st + ON st.M_ScreeningTemplateID = cu.M_ClinicUnitM_ScreeningTemplateID + AND st.M_ScreeningTemplateIsActive = 'Y' + WHERE cu.M_ClinicUnitIsActive = 'Y' + AND ( + cu.M_ClinicUnitCode LIKE ? + OR cu.M_ClinicUnitName LIKE ? + OR IFNULL(cu.M_ClinicUnitDescription, '') LIKE ? + OR IFNULL(cu.M_ClinicUnitSatusehatLocationID, '') LIKE ? + OR IFNULL(st.M_ScreeningTemplateName, '') LIKE ? + )"; + $query_count = $this->db_oneklinik->query($sql_count, array($like, $like, $like, $like, $like)); + if (!$query_count) { + $this->sys_error_db("m_clinic_unit count", $this->db_oneklinik); + exit; + } + + $total_filter = intval($query_count->row()->total); + $total_page = ceil($total_filter / $row_per_page); + + $sql = "SELECT + cu.M_ClinicUnitID AS id, + cu.M_ClinicUnitCode AS code, + cu.M_ClinicUnitName AS name, + cu.M_ClinicUnitDescription AS description, + cu.M_ClinicUnitSatusehatLocationID AS satusehat_location_id, + cu.M_ClinicUnitM_ScreeningTemplateID AS screening_template_id, + st.M_ScreeningTemplateCode AS screening_template_code, + st.M_ScreeningTemplateName AS screening_template_name, + cu.M_ClinicUnitIsActive AS is_active, + cu.M_ClinicUnitCreated AS created, + cu.M_ClinicUnitLastUpdated AS last_updated + FROM one_klinik.m_clinic_unit cu + LEFT JOIN one_klinik.m_screening_template st + ON st.M_ScreeningTemplateID = cu.M_ClinicUnitM_ScreeningTemplateID + AND st.M_ScreeningTemplateIsActive = 'Y' + WHERE cu.M_ClinicUnitIsActive = 'Y' + AND ( + cu.M_ClinicUnitCode LIKE ? + OR cu.M_ClinicUnitName LIKE ? + OR IFNULL(cu.M_ClinicUnitDescription, '') LIKE ? + OR IFNULL(cu.M_ClinicUnitSatusehatLocationID, '') LIKE ? + OR IFNULL(st.M_ScreeningTemplateName, '') LIKE ? + ) + ORDER BY {$order_by} {$order} + LIMIT ? OFFSET ?"; + $query = $this->db_oneklinik->query($sql, array($like, $like, $like, $like, $like, $row_per_page, $offset)); + if (!$query) { + $this->sys_error_db("m_clinic_unit select", $this->db_oneklinik); + exit; + } + + $rows = $query->result_array(); + $this->sys_ok(array( + "total" => $total_page, + "total_filter" => $total_filter, + "records" => $rows + )); + } catch (Exception $exc) { + $this->sys_error($exc->getMessage()); + } + } + + public function gettemplates() + { + try { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $sql = "SELECT + M_ScreeningTemplateID AS id, + M_ScreeningTemplateCode AS code, + M_ScreeningTemplateName AS name, + M_ScreeningTemplateDescription AS description + FROM one_klinik.m_screening_template + WHERE M_ScreeningTemplateIsActive = 'Y' + ORDER BY M_ScreeningTemplateName ASC"; + $query = $this->db_oneklinik->query($sql); + if (!$query) { + $this->sys_error_db("m_screening_template select", $this->db_oneklinik); + exit; + } + + $rows = $query->result_array(); + $this->sys_ok(array("total" => count($rows), "records" => $rows)); + } catch (Exception $exc) { + $this->sys_error($exc->getMessage()); + } + } + + public function add() + { + try { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $prm = $this->sys_input; + $code = isset($prm['code']) ? trim($prm['code']) : ''; + $name = isset($prm['name']) ? trim($prm['name']) : ''; + $description = isset($prm['description']) ? trim($prm['description']) : null; + $satusehat_location_id = isset($prm['satusehat_location_id']) ? trim($prm['satusehat_location_id']) : null; + $screening_template_id = isset($prm['screening_template_id']) && $prm['screening_template_id'] !== '' ? intval($prm['screening_template_id']) : null; + $userid = $this->sys_user["M_UserID"]; + + if ($code === '' || $name === '') { + $this->sys_error("code and name are mandatory"); + exit; + } + + $duplicate = $this->db_oneklinik->query( + "SELECT COUNT(*) AS total + FROM one_klinik.m_clinic_unit + WHERE M_ClinicUnitCode = ? + OR (M_ClinicUnitIsActive = 'Y' AND M_ClinicUnitName = ?)", + array($code, $name) + ); + if (!$duplicate) { + $this->sys_error_db("m_clinic_unit duplicate check", $this->db_oneklinik); + exit; + } + if (intval($duplicate->row()->total) > 0) { + $this->sys_ok(array( + "total" => -1, + "errors" => array(array("field" => "code", "msg" => "Kode atau nama sudah ada")), + "records" => 0 + )); + exit; + } + + $sql = "INSERT INTO one_klinik.m_clinic_unit ( + M_ClinicUnitCode, + M_ClinicUnitName, + M_ClinicUnitDescription, + M_ClinicUnitSatusehatLocationID, + M_ClinicUnitM_ScreeningTemplateID, + M_ClinicUnitUserID, + M_ClinicUnitCreated, + M_ClinicUnitLastUpdated + ) VALUES (?, ?, ?, ?, ?, ?, NOW(), NOW())"; + $query = $this->db_oneklinik->query($sql, array( + $code, + $name, + $description, + $satusehat_location_id, + $screening_template_id, + $userid + )); + if (!$query) { + $this->sys_error_db("m_clinic_unit insert", $this->db_oneklinik); + exit; + } + + $this->sys_ok(array( + "total" => 1, + "records" => array("xid" => $this->db_oneklinik->insert_id()) + )); + } catch (Exception $exc) { + $this->sys_error($exc->getMessage()); + } + } + + public function update() + { + try { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $prm = $this->sys_input; + $id = isset($prm['id']) ? intval($prm['id']) : 0; + $code = isset($prm['code']) ? trim($prm['code']) : ''; + $name = isset($prm['name']) ? trim($prm['name']) : ''; + $description = isset($prm['description']) ? trim($prm['description']) : null; + $satusehat_location_id = isset($prm['satusehat_location_id']) ? trim($prm['satusehat_location_id']) : null; + $screening_template_id = isset($prm['screening_template_id']) && $prm['screening_template_id'] !== '' ? intval($prm['screening_template_id']) : null; + $userid = $this->sys_user["M_UserID"]; + + if (!$id || $code === '' || $name === '') { + $this->sys_error("id, code and name are mandatory"); + exit; + } + + $duplicate = $this->db_oneklinik->query( + "SELECT COUNT(*) AS total + FROM one_klinik.m_clinic_unit + WHERE M_ClinicUnitID <> ? + AND (M_ClinicUnitCode = ? + OR (M_ClinicUnitIsActive = 'Y' AND M_ClinicUnitName = ?))", + array($id, $code, $name) + ); + if (!$duplicate) { + $this->sys_error_db("m_clinic_unit duplicate check", $this->db_oneklinik); + exit; + } + if (intval($duplicate->row()->total) > 0) { + $this->sys_ok(array( + "total" => -1, + "errors" => array(array("field" => "code", "msg" => "Kode atau nama sudah ada")), + "records" => 0 + )); + exit; + } + + $sql = "UPDATE one_klinik.m_clinic_unit SET + M_ClinicUnitCode = ?, + M_ClinicUnitName = ?, + M_ClinicUnitDescription = ?, + M_ClinicUnitSatusehatLocationID = ?, + M_ClinicUnitM_ScreeningTemplateID = ?, + M_ClinicUnitUserID = ?, + M_ClinicUnitLastUpdated = NOW() + WHERE M_ClinicUnitID = ? + AND M_ClinicUnitIsActive = 'Y'"; + $query = $this->db_oneklinik->query($sql, array( + $code, + $name, + $description, + $satusehat_location_id, + $screening_template_id, + $userid, + $id + )); + if (!$query) { + $this->sys_error_db("m_clinic_unit update", $this->db_oneklinik); + exit; + } + + $this->sys_ok(array("total" => 1, "records" => array("xid" => $id))); + } catch (Exception $exc) { + $this->sys_error($exc->getMessage()); + } + } + + public function delete() + { + try { + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $prm = $this->sys_input; + $id = isset($prm['id']) ? intval($prm['id']) : 0; + if (!$id) { + $this->sys_error("id is mandatory"); + exit; + } + $userid = $this->sys_user["M_UserID"]; + + $sql = "UPDATE one_klinik.m_clinic_unit SET + M_ClinicUnitIsActive = 'N', + M_ClinicUnitUserID = ?, + M_ClinicUnitLastUpdated = NOW() + WHERE M_ClinicUnitID = ?"; + $query = $this->db_oneklinik->query($sql, array($userid, $id)); + if (!$query) { + $this->sys_error_db("m_clinic_unit delete", $this->db_oneklinik); + exit; + } + + $this->sys_ok(array("total" => 1, "records" => array("xid" => $id))); + } catch (Exception $exc) { + $this->sys_error($exc->getMessage()); + } + } +}