diff --git a/application/.htaccess b/application/.htaccess new file mode 100755 index 00000000..6c63ed4c --- /dev/null +++ b/application/.htaccess @@ -0,0 +1,6 @@ + + Require all denied + + + Deny from all + \ No newline at end of file diff --git a/application/controllers/Arial_Narrow.ttf b/application/controllers/Arial_Narrow.ttf new file mode 100644 index 00000000..9d92f4f5 Binary files /dev/null and b/application/controllers/Arial_Narrow.ttf differ diff --git a/application/controllers/Auth_placeholder.php b/application/controllers/Auth_placeholder.php new file mode 100644 index 00000000..7387dcf6 --- /dev/null +++ b/application/controllers/Auth_placeholder.php @@ -0,0 +1,131 @@ +corss(); + $rst = []; + $rst[] = [ + "privilege" => "Admin Lab", + "menus" => [ + ["title" => "Pasien", "path" => "/masterdata/pasien" ], + ["title" => "Pemeriksaan", "path" => "/masterdata/px" ], + ] + ]; + $rst[] = [ + "privilege" => "Keu", + "menus" => [ + ["title" => "Company", "path" => "/masterdata/company" ], + ["title" => "Agreement", "path" => "/masterdata/agreement" ], + ] + ]; + echo json_encode(["status" => "OK", "data" => $rst]); + } + function old_menu() { + //for preflight + $this->corss(); + $rst = [ + ["id"=>1,"icon" => "SendIcon","label" => "Menu 01", "target" => "url:/other_module" , "level" => 1], + ["id"=>2,"icon" => "DrafsIcon","label" => "Menu 02", "target" => "", "level" => 1, + "children" => [ + ["id"=>3,"icon" => "DrafsIcon","label" => "Sub Menu 0201", "target" => "link:/def", "level" => 2,], + ["id"=>4,"icon" => "StarIcon","label" => "Sub Menu 0202", "target" => "link:/def", "level" => 2], + ["id"=>5,"icon" => "InboxIcon","label" => "Sub Menu 0203", "target" => "link:/def", "level" => 2], + ["id"=>6,"icon" => "","label" => "Sub Menu 0204", "target" => "link:/def", "level" => 2, + "children" => [ + ["id"=>7,"icon" => "DrafsIcon","label" => "Sub Menu 020401", "target" => "link:/def", "level" => 3], + ["id"=>8,"icon" => "StarIcon","label" => "Sub Menu 020402", "target" => "link:/def", "level" => 3], + ["id"=>9,"icon" => "InboxIcon","label" => "Sub Menu 020403", "target" => "link:/def", "level" => 3], + ["id"=>10,"icon" => "","label" => "Sub Menu 020404", "target" => "link:/def" , "level" => 3], + ], + ] + ], + ], + ["id"=>11,"icon" => "InboxIcon","label" => "Menu 03", "target" => "url:/other_module", "level" => 1 ], + ["id"=>12,"icon" => "StarIcon","label" => "Menu 04", "target" => "url:/other_module", "level" => 1 ], + ["id"=>13,"icon" => "SendIcon","label" => "Menu 05", "target" => "url:/other_module" , "level" => 1], + ]; + echo json_encode(["status"=>"OK","records" => $rst ]); + } + function check_token() { + $req_headers = $headers = array_change_key_case(getallheaders(), CASE_LOWER); + $isLogin = false; + $user = []; + if (isset($req_headers["authorization"])) { + //have bearer + list($bearer, $token) = explode(" ", trim($req_headers["authorization"])); + $user =JWT::decode($token,$this->SECRET_KEY); + $isLogin = true; + } + return [$isLogin,$user]; + } + function info() { + list($isLogin,$user) = $this->check_token(); + echo json_encode(["isLogin" => $isLogin,"user" => $user]); + } + + function refresh_token () { + list($isLogin,$user) = $this->check_token(); + if (! $isLogin) { + $this->sys_error("Invalid Token"); + } else { + $token_expire = date("Y-m-d H:i:s",strtotime("now + 5 minute")); + $user["token_expire"] = $token_expire; + $token = JWT::encode($user,$this->SECRET_KEY); + $data = array( + "status" => "OK", + "user" => $user, + "token" => $token, + "token_expire" => $token_expire + ); + echo json_encode($data); + } + } + function login() { + $this->corss(); + $prm = json_decode(file_get_contents("php://input"),true); + if ($prm["username"] =="admin" && $prm["password"] == "123") { + $token_expire = date("Y-m-d H:i:s",strtotime("now + 5 minute")); + $user = ["name" => "The Admin" , "level" => "Admin", "expire" => $token_expire]; + $this->load->library("Jwt"); + $token = JWT::encode($user,$this->SECRET_KEY); + echo json_encode([ + "status" => "OK", + "token" => $token, + "token_expire" => $token_expire, + "redirect" => "/xinfo", + "user" => $user + ]); + exit; + } + echo json_encode(["status" => "ERR" , "message" => "Invalid username/password"]); + } + + function logout() + { + echo json_encode(["status" => "OK" , "message" => ""]); + } +} +?> diff --git a/application/controllers/Auth_placeholder_v2.php b/application/controllers/Auth_placeholder_v2.php new file mode 100644 index 00000000..7736adf2 --- /dev/null +++ b/application/controllers/Auth_placeholder_v2.php @@ -0,0 +1,92 @@ +load->library("Jwt"); + } + function chalenge() { + $this->corss(); + $param_chalenge = date("YmdHis"); + $ckey = JWT::encode($param_chalenge,$this->CHALENGE_KEY); + echo json_encode(["status" => "OK", "chalenge" => $ckey]); + } + function get_param() { + $sparam = file_get_contents("php://input"); + $jparam = json_decode($sparam,true); + return $jparam; + } + function auth() { + $param = $this->get_param(); + $username = $param["username"]; + $chalenge = $param["chalenge"]; + $password = $param["password"]; + $date = JWT::decode($chalenge,$this->CHALENGE_KEY); + $xdate = date("YmdHis",strtotime("now - 1 minute")); + $is_expired = $date < $xdate; + echo "chalenge date : $date | last 1 minute $xdate => " . ( $is_expired ? " Valid " : "Expired"); + echo "\n\n"; + $x_pw = hash_hmac("sha512","admin123",$chalenge); + echo "pw : $password | $x_pw => " . ( $password == $x_pw ? " OK " : " Not OK"); + } + function corss() { + global $_SERVER; + if (isset($_SERVER["HTTP_ORIGIN"])) { + header('Access-Control-Allow-Origin: ' . $_SERVER["HTTP_ORIGIN"]); + } else { + header('Access-Control-Allow-Origin: */*' ); + } + header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS'); + header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization'); + if ( isset($_SERVER["REQUEST_METHOD"]) && $_SERVER["REQUEST_METHOD"] == "OPTIONS") { + http_response_code(200); + echo json_encode("OK"); + exit; + } + } + function check_token() { + $req_headers = $headers = array_change_key_case(getallheaders(), CASE_LOWER); + $isLogin = false; + $user = []; + if (isset($req_headers["authorization"])) { + //have bearer + list($bearer, $token) = explode(" ", trim($req_headers["authorization"])); + $user =JWT::decode($token,$this->SECRET_KEY); + $isLogin = true; + } + return [$isLogin,$user]; + } +} + +/* + var enc = new TextEncoder("utf-8"); + +window.crypto.subtle.importKey( + "raw", // raw format of the key - should be Uint8Array + enc.encode("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.IjIwMjIwNDExMDUxOTE1Ig.gn7rkM_UAluoChLQWxJ5ZSqp0mxpekK_5Ex18kEM1fI"), + { // algorithm details + name: "HMAC", + hash: {name: "SHA-512"} + }, + false, // export = false + ["sign", "verify"] // what this key can do +).then( key => { + window.crypto.subtle.sign( + "HMAC", + key, + enc.encode("admin123") + ).then(signature => { + var b = new Uint8Array(signature); + var str = Array.prototype.map.call(b, x => ('00'+x.toString(16)).slice(-2)).join("") + console.log(str); + }); +}); + +*/ +?> diff --git a/application/controllers/Diagnosticreport.php b/application/controllers/Diagnosticreport.php new file mode 100644 index 00000000..32c56376 --- /dev/null +++ b/application/controllers/Diagnosticreport.php @@ -0,0 +1,375 @@ +load->library('Satusehat'); + } + + function index() + { + echo "Satu Sehat Diagnostic Report"; + } + + function getdiagnosticreport() + { + + $prm = $this->sys_input; + $orderheaderID = $prm['orderheaderID']; + + //cek db one_health diagnostic report sudah ada atau belum + + + + // get organization + $sql = "SELECT organizationID + FROM one_health.organization + WHERE organizationIsActive = 'Y'"; + + $qry = $this->db->query($sql, []); + $last_qry = $this->db->last_query(); + + if (!$qry) { + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_qry + ); + $this->sys_error_db($error); + exit; + } + + $organizationID = $qry->result_array()[0]['organizationID']; + + + + $sql_data_diagnostic_report = "SELECT T_OrderHeaderID,T_OrderHeaderLabNumber, + IFNULL(OHPatientMapIHSNumber,'') as OHPatientMapIHSNumber, + IFNULL(OHDoctorMapIHSNumber,'') as doctor_ihsnumber, + EncounterUUID, T_TestName, + IFNULL(Nat_TestLoincCode,'') as code_loinc, + IFNULL(Nat_TestLoincDisplay,'') as code_display, + ServiceRequestUUID, + ServiceRequestID + FROM one_health.service_request + JOIN t_orderheader ON ServiceRequestT_OrderHeaderID = ? AND + ServiceRequestT_OrderHeaderID = T_OrderHeaderID + JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID + JOIN t_orderdetail ON ServiceRequestT_OrderDetailID = T_OrderDetailID + JOIN t_test ON T_OrderDetailT_TestID = T_TestID + JOIN nat_test ON T_TestNat_TestID = Nat_TestID AND Nat_TestIsActive = 'Y' + LEFT JOIN nat_test_loinc ON Nat_TestLoincNat_TestID = T_TestNat_TestID + LEFT JOIN one_health.oh_patient_map ON OHPatientMapM_PatientID = M_PatientID + AND OHPatientMapIsActive = 'Y' + LEFT JOIN one_health.oh_doctor_map ON OHDoctorMapM_DoctorID = T_OrderHeaderPjM_DoctorID + LEFT JOIN one_health.encounter ON EncounterT_orderHeaderID = T_orderHeaderID + AND EncounterIsActive= 'Y' + WHERE + ServiceRequestIsActive = 'Y'"; + + $qry_data_diagnostic_report = $this->db->query($sql_data_diagnostic_report,[$orderheaderID]); + + if (!$qry_data_diagnostic_report) { + $last_qry = $this->db->last_query(); + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_qry + ); + $this->sys_error_db($error); + exit; + } + + $ddr = $qry_data_diagnostic_report->result_array(); + $results = []; + + foreach ($ddr as $k_sr => $rdr) { + $sql = "SELECT * + FROM one_health.diagnostic_report + WHERE DiagnosticReportT_orderHeaderID = ? + AND DiagnosticReportServiceRequestID = ? + AND DiagnosticReportIsActive = 'Y'"; + + $qry = $this->db->query($sql, [ + $orderheaderID, + $rdr['ServiceRequestID'] + ]); + + + $last_qry = $this->db->last_query(); + + if (!$qry) { + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_qry + ); + $this->sys_error_db($error); + exit; + } + + $exist_data = $qry->result_array(); + + if(count($exist_data) == 0){ + $diagnosticreport_uuid = $this->satusehat->gen_uuid(); + $result["fullUrl"] = "urn:uuid:".$diagnosticreport_uuid; + $data_result['resourceType'] = "DiagnosticReport"; + $data_result['identifier'] = array( + array( + "system" => "http://sys-ids.kemkes.go.id/observation/".$organizationID, + "value" => $rdr['T_OrderHeaderLabNumber'] + ) + ); + $data_result['status'] = "final"; + $data_result['category'] = array( + array( + "coding" => array( + array( + "system" => "http://terminology.hl7.org/CodeSystem/v2-0074", + "code" => "CH", + "display" => "Chemistry" + ) + ) + ) + ); + + $sql = "SELECT T_OrderDetailValDate + FROM t_orderdetail + WHERE + T_OrderDetailT_OrderHeaderID = $orderheaderID AND + T_OrderDetailIsActive = 'Y' AND + T_OrderDetailT_TestIsResult = 'Y' + ORDER BY T_OrderDetailValDate ASC + LIMIT 1"; + //echo $sql; + $query = $this->db->query($sql); + //echo $this->db->last_query(); + if(!$query){ + echo $this->db->last_query(); + $this->sys_error("error get t_orderdetail"); + exit; + } + + $data_validdate = $query->row()->T_OrderDetailValDate; + $efectiveDate = $data_validdate; + $issuedDate = $data_validdate; + + $coding[] = [ + "system" => "http://loinc.org", + "code" => $rdr['code_loinc'], + "display" => $rdr['T_TestName'] + ]; + + $data_result['code'] = array( + "coding" => $coding + ); + $data_result['subject'] = array( + "reference" => "Patient/".$rdr['OHPatientMapIHSNumber'] + ); + $data_result['encounter'] = array( + 'reference' => "Encounter/".$rdr['EncounterUUID'] + ); + $data_result['effectiveDateTime'] = date('c', strtotime($efectiveDate)); + $data_result['issued'] = date('c', strtotime($issuedDate)); + $data_result['performer'] = array( + array( + 'reference' => "Practitioner/".$rdr['doctor_ihsnumber'] + ), + array( + 'reference' => "Organization/".$organizationID + ) + ); + + $sql = "SELECT IFNULL(OHStaffMapIhsNumber,'') as staff_ihsnumber + FROM t_orderdetail + JOIN m_user ON T_OrderDetailValUserID = M_UserID + JOIN m_staff ON M_UserM_StaffID = M_StaffID + LEFT JOIN one_health.oh_staff_map ON OHStaffMapM_StaffNIK = M_StaffNIK + + WHERE + T_OrderDetailT_OrderHeaderID = $orderheaderID AND + T_OrderDetailIsActive = 'Y' AND + T_OrderDetailT_TestIsResult = 'Y' + ORDER BY T_OrderDetailValDate DESC + LIMIT 1"; + $query = $this->db->query($sql); + if(!$query){ + // echo $this->db->last_query(); + $this->sys_error("error get t_orderdetail"); + exit; + } + + $r_validator = $query->row_array(); + + $data_result['performer'] = array( + array( + 'reference' => "Practitioner/".$r_validator['staff_ihsnumber'] + ), + array( + 'reference' => "Organization/".$organizationID + ) + ); + + $sql = "SELECT observationUUID + FROM t_orderdetail + JOIN one_health.observation ON observationT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND + observationT_TestID = T_OrderDetailT_TestID AND + observationIsActive = 'Y' + WHERE + T_OrderDetailT_OrderHeaderID = $orderheaderID AND + T_OrderDetailIsActive = 'Y' AND + T_OrderDetailT_TestIsResult = 'Y'"; + $query = $this->db->query($sql); + if(!$query){ + echo $this->db->last_query(); + $this->sys_error("error get t_orderdetail observation"); + exit; + } + + $r_observations = $query->result_array(); + + $rst_result = []; + foreach ($r_observations as $idx => $val) { + $idnew = $idx+1; + $rst_result[] = array( + "id" => "{$idnew}", + "reference" => "Observation/".$val['observationUUID'] + ); + } + $data_result['result'] = $rst_result; + + $sql = "SELECT SpecimenUUID + FROM t_orderdetail + JOIN t_test ON T_OrderDetailT_TestID = T_TestID + JOIN t_ordersample ON T_OrderSampleT_SampleTypeID = T_TestT_SampleTypeID AND + T_OrderSampleT_OrderHeaderID = {$prm['orderheaderID']} AND T_OrderSampleIsActive = 'Y' + JOIN one_health.specimen ON SpecimentT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND + SpecimentT_OrderSampleID = T_OrderSampleID AND + SpecimenIsActive = 'Y' + WHERE + T_OrderDetailT_OrderHeaderID = {$prm['orderheaderID']} AND + T_OrderDetailIsActive = 'Y' AND + T_OrderDetailT_TestIsResult = 'Y' + GROUP BY T_OrderSampleID"; + $query = $this->db->query($sql); + if(!$query){ + echo $this->db->last_query(); + $this->sys_error("error get specimen uuid"); + exit; + } + + $r_specimens = $query->result_array(); + + $rst_specimen = []; + foreach ($r_specimens as $idxx => $vall) { + $idnew = $idxx+1; + $rst_specimen[] = array( + "id" => "{$idnew}", + "reference" => "Specimen/".$vall['SpecimenUUID'] + ); + } + $data_result['specimen'] = $rst_specimen; + + $data_result['basedOn'] = array( + array( + "reference" => "urn:uuid:".$rdr['ServiceRequestUUID'] + ) + ); + $data_result["conclusion"] = ""; + $result["resource"] = $data_result; + $result["request"] = array("method" => "POST", "url" => "DiagnosticReport"); + + $sql = "INSERT INTO one_health.diagnostic_report + ( + DiagnosticReportUUID, + DiagnosticReportT_orderHeaderID, + DiagnosticReportServiceRequestID, + DiagnosticReportJSON, + DiagnosticReportCreated + ) + VALUES + ( + ?, + ?, + ?, + ?, + NOW() + )"; + $qry = $this->db->query($sql, [ + $diagnosticreport_uuid, + $orderheaderID, + $rdr['ServiceRequestID'], + json_encode($result) + ]); + $last_qry = $this->db->last_query(); + + if (!$qry) { + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_qry + ); + $this->sys_error_db($error); + exit; + } + + $results[] = $result; + }else{ + //echo "Y"; + //print_r($exist_data); + $results[] = json_decode($exist_data[0]['DiagnosticReportJSON']); + } + + + } + + echo json_encode($results); + } + + function getcategorydiagnosticreport() { + $prm = $this->sys_input; + $orderheaderID = $prm['orderheaderID']; + + $sql_category = "SELECT DiagnosticReportJSON + From one_health.diagnostic_report + WHERE DiagnosticReportT_orderHeaderID = ? + AND DiagnosticReportIsActive = 'Y' + "; + + $sql_category_report = $this->db->query($sql_category,[$orderheaderID]); + if (!$sql_category_report) { + $last_qry = $this->db->last_query(); + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_qry + ); + $this->sys_error_db($error); + exit; + } + $exist_datas = $sql_category_report->result_array(); + // echo json_encode($exist_data); + + $exist_data = json_decode($exist_datas, true); + + // Loop through each object in the array + foreach ($exist_data as $data) { + // Extract the DiagnosticReportJSON string + $diagnosticReportJSON = $data['DiagnosticReportJSON']; + + // Parse the DiagnosticReportJSON string + $diagnosticReport = json_decode($diagnosticReportJSON, true); + + // Access properties within the DiagnosticReportJSON + $fullUrl = $diagnosticReport['fullUrl']; + $resourceType = $diagnosticReport['resource']['resourceType']; + // ... access other properties as needed + + // Print or use the extracted data + echo "Full URL: $fullUrl, Resource Type: $resourceType
"; + } + // for ($i=0; $i < count($exist_data); $i++) { + // $datas = json_decode(json_encode($exist_data[$i]['DiagnosticReportJSON'])); + // $encode = $datas; + // $referenceValue = $datas['resource']['basedOn']['reference']; + // } + exit; + } + } +?> \ No newline at end of file diff --git a/application/controllers/Dummy_login.php b/application/controllers/Dummy_login.php new file mode 100644 index 00000000..03557435 --- /dev/null +++ b/application/controllers/Dummy_login.php @@ -0,0 +1,17 @@ +sys_input; + if ($prm["companyID"]== 100 && $prm["username"] =="admin" && $prm["password"] == "123" ) { + echo json_encode([ + "status" =>"OK", + "data" => [ + "token"=>"token1231231231321", + "name"=>"Administrator", + "userID"=>121, + ]]); + exit; + } + echo json_encode(["status" => "ERR", "message" => "Invalid Login"]); + } +} diff --git a/application/controllers/Ext_rspad.php b/application/controllers/Ext_rspad.php new file mode 100644 index 00000000..35d3af67 --- /dev/null +++ b/application/controllers/Ext_rspad.php @@ -0,0 +1,237 @@ + 0 or Last_Errno <> 0 + or Last_SQL_Errno <> 0 + ) + and date + interval ? minute > now() + order by id desc"; + $qry = $this->db->query($sql, [$target, $last_minute]); + if (!$qry) { + echo "

"; + print_r($this->db->error()); + echo "

"; + exit; + } + $rows = $qry->result_array(); + if (count($rows) == 0) { + echo "No Error in Last 15 minutes\n"; + exit; + } + $msg = "*Last $last_minute minute Error*:\n"; + if (count($rows) > 0) { + foreach ($rows as $r) { + $msg .= "Date: \t" . $r["date"] . "\n"; + if ($r["Last_IO_Errno"] > 0) { + $msg .= "IO Err: \t" . $r["Last_IO_Error"] . "\n"; + } + if ($r["Last_Errno"] > 0) { + $msg .= "Gen Err: \t" . $r["Last_Error"] . "\n"; + } + if ($r["Last_SQL_Errno"] > 0) { + $msg .= "SQL Err: \t" . $r["Last_SQL_Error"] . "\n"; + } + } + } + $msg .= "Last Status: https://devone.aplikasi.web.id/one-api/ext_rspad/show"; + $this->load->library("Wa_sas"); + $hp = "081339692415"; + $resp = $this->wa_sas->send_message($hp, $msg, false); + echo json_encode($resp); + } + function wa_sum($target = "slave_rspad") + { + $sql = "select * from ext_rspad.slave_log + where + target = ? and + ( + Last_IO_Errno <> 0 or Last_Errno <> 0 + or Last_SQL_Errno <> 0 + ) + and date + interval 3 day > now() + order by id desc limit 0,3"; + $qry = $this->db->query($sql, [$target]); + if (!$qry) { + echo "

"; + print_r($this->db->error()); + echo "

"; + exit; + } + $rows = $qry->result_array(); + $msg = ""; + if (count($rows) > 0) { + $msg = "*Last 3 Error (last 3 day)*:\n"; + foreach ($rows as $r) { + $msg .= "Date: \t" . $r["date"] . "\n"; + if ($r["Last_IO_Errno"] > 0) { + $msg .= "IO Err: \t" . $r["Last_IO_Error"] . "\n"; + } + if ($r["Last_Errno"] > 0) { + $msg .= "Gen Err: \t" . $r["Last_Error"] . "\n"; + } + if ($r["Last_SQL_Errno"] > 0) { + $msg .= "SQL Err: \t" . $r["Last_SQL_Error"] . "\n"; + } + } + } + $sql = "select * from ext_rspad.slave_log + where target = ? + order by id desc limit 0,3"; + $qry = $this->db->query($sql, [$target]); + if (!$qry) { + echo "

"; + print_r($this->db->error()); + echo "

"; + exit; + } + $rows = $qry->result_array(); + $msg .= "*Last 3 status*:\n"; + if (count($rows) > 0) { + foreach ($rows as $r) { + $msg .= "Date: \t" . $r["date"] . "\n"; + if ($r["Last_IO_Errno"] > 0) { + $msg .= "IO Err: \t" . $r["Last_IO_Error"] . "\n"; + } + if ($r["Last_Errno"] > 0) { + $msg .= "Gen Err: \t" . $r["Last_Error"] . "\n"; + } + if ($r["Last_SQL_Errno"] > 0) { + $msg .= "SQL Err: \t" . $r["Last_SQL_Error"] . "\n"; + } + $msg .= "IO State:\t" . $r["Slave_IO_State"] . "\n"; + $msg .= "IO Running:\t" . $r["Slave_IO_Running"] . "\n"; + $msg .= "Sql State:\t" . $r["Slave_SQL_Running_State"] . "\n"; + $msg .= "Sql Running:\t" . $r["Slave_SQL_Running"] . "\n"; + $msg .= "Behind Master:\t" . $r["Seconds_Behind_Master"] . "\n"; + $msg .= "\n"; + } + } else { + $msg .= "Tidak ada\n"; + } + $msg .= "Last Status: https://devone.aplikasi.web.id/one-api/ext_rspad/show"; + $this->load->library("Wa_sas"); + $hp = "081339692415"; + $resp = $this->wa_sas->send_message($hp, $msg, false); + echo json_encode($resp); + } + function show($target = "slave_rspad") + { + $sql = "select + date as TrxDate, Slave_IO_Running, Slave_IO_State, Seconds_Behind_Master, + Last_Errno, Last_Error, Last_SQL_Errno, Last_SQL_Error, + Last_IO_Errno, Last_IO_Error + from ext_rspad.slave_log + where target =? order by id desc limit 0,20"; + $qry = $this->db->query($sql, [$target]); + echo "
Log for $target
"; + if (!$qry) { + echo "

"; + print_r($this->db->error()); + echo "

"; + exit; + } + $rows = $qry->result_array(); + $this->print_table_style(); + $this->print_table($rows, array_keys($rows[0])); + } + function slave() + { + $sql = "INSERT INTO ext_rspad.slave_log ( + target, + `Slave_IO_State`,`Master_Host`,`Master_User`, + `Master_Port`,`Connect_Retry`,`Master_Log_File`, + `Read_Master_Log_Pos`,`Relay_Log_File`,`Relay_Log_Pos`, + `Relay_Master_Log_File`,`Slave_IO_Running`,`Slave_SQL_Running`, + `Replicate_Do_DB`,`Replicate_Ignore_DB`,`Replicate_Do_Table`, + `Replicate_Ignore_Table`,`Replicate_Wild_Do_Table`,`Replicate_Wild_Ignore_Table`, + `Last_Errno`,`Last_Error`,`Skip_Counter`, + `Exec_Master_Log_Pos`,`Relay_Log_Space`,`Until_Condition`, + `Until_Log_File`,`Until_Log_Pos`,`Master_SSL_Allowed`, + `Master_SSL_CA_File`,`Master_SSL_CA_Path`,`Master_SSL_Cert`, + `Master_SSL_Cipher`,`Master_SSL_Key`,`Seconds_Behind_Master`, + `Master_SSL_Verify_Server_Cert`,`Last_IO_Errno`,`Last_IO_Error`, + `Last_SQL_Errno`,`Last_SQL_Error`,`Replicate_Ignore_Server_Ids`, + `Master_Server_Id`,`Master_SSL_Crl`,`Master_SSL_Crlpath`, + `Using_Gtid`,`Gtid_IO_Pos`,`Replicate_Do_Domain_Ids`, + `Replicate_Ignore_Domain_Ids`,`Parallel_Mode`,`SQL_Delay`, + `SQL_Remaining_Delay`,`Slave_SQL_Running_State`,`Slave_DDL_Groups`, + `Slave_Non_Transactional_Groups`,`Slave_Transactional_Groups`) + values(?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,?,?, ?,? ) "; + $body = file_get_contents("php://input"); + $prm = json_decode($body, true, 2048); + $qry = $this->db->query($sql, [ + $prm["target"], + $prm["Slave_IO_State"], $prm["Master_Host"], $prm["Master_User"], + $prm["Master_Port"], $prm["Connect_Retry"], $prm["Master_Log_File"], + $prm["Read_Master_Log_Pos"], $prm["Relay_Log_File"], $prm["Relay_Log_Pos"], + $prm["Relay_Master_Log_File"], $prm["Slave_IO_Running"], $prm["Slave_SQL_Running"], + $prm["Replicate_Do_DB"], $prm["Replicate_Ignore_DB"], $prm["Replicate_Do_Table"], + $prm["Replicate_Ignore_Table"], $prm["Replicate_Wild_Do_Table"], $prm["Replicate_Wild_Ignore_Table"], + $prm["Last_Errno"], $prm["Last_Error"], $prm["Skip_Counter"], + $prm["Exec_Master_Log_Pos"], $prm["Relay_Log_Space"], $prm["Until_Condition"], + $prm["Until_Log_File"], $prm["Until_Log_Pos"], $prm["Master_SSL_Allowed"], + $prm["Master_SSL_CA_File"], $prm["Master_SSL_CA_Path"], $prm["Master_SSL_Cert"], + $prm["Master_SSL_Cipher"], $prm["Master_SSL_Key"], $prm["Seconds_Behind_Master"], + $prm["Master_SSL_Verify_Server_Cert"], $prm["Last_IO_Errno"], $prm["Last_IO_Error"], + $prm["Last_SQL_Errno"], $prm["Last_SQL_Error"], $prm["Replicate_Ignore_Server_Ids"], + $prm["Master_Server_Id"], $prm["Master_SSL_Crl"], $prm["Master_SSL_Crlpath"], + $prm["Using_Gtid"], $prm["Gtid_IO_Pos"], $prm["Replicate_Do_Domain_Ids"], + $prm["Replicate_Ignore_Domain_Ids"], $prm["Parallel_Mode"], $prm["SQL_Delay"], + $prm["SQL_Remaining_Delay"], $prm["Slave_SQL_Running_State"], $prm["Slave_DDL_Groups"], + $prm["Slave_Non_Transactional_Groups"], $prm["Slave_Transactional_Groups"] + ]); + if (!$qry) { + echo json_encode([ + "status" => "ERR", + "error" => $this->db->error() + ]); + exit; + } + echo json_encode(["status" => "OK", "error" => []]); + } + + public function print_table_style() + { + echo " + + "; + } + public function print_table($rows, $keys) + { + echo ""; + echo ""; + foreach ($keys as $k) { + echo ""; + } + echo "\n"; + foreach ($rows as $r) { + echo ""; + foreach ($keys as $k) { + echo ""; + } + echo ""; + } + echo "
$k
" . $r[$k] . "
"; + } +} diff --git a/application/controllers/File_upload.php b/application/controllers/File_upload.php new file mode 100644 index 00000000..0ad400b5 --- /dev/null +++ b/application/controllers/File_upload.php @@ -0,0 +1,496 @@ +corss(); + $param = $this->get_param(); + $param["url"] = $param["url"]; + $userID = $this->sys_user["M_UserID"]; + if ($param["cmd"] == "replace") { + $sql = "update fpp set fppUrl = ?, fppUserID = ? + where fppT_OrderHeaderID = ?"; + $qry = $this->db->query($sql, [ + $param["url"], + $userID, + $param["orderHeaderID"], + ]); + } else { + $sql = + " insert into fpp (fppUrl, fppUserID, fppT_OrderHeaderID) values(?,?,?)"; + $qry = $this->db->query($sql, [ + $param["url"], + $userID, + $param["orderHeaderID"], + ]); + } + if (!$qry) { + echo json_encode([ + "status" => "ERR", + "message" => $this->db->error()["message"], + ]); + exit(); + } + echo json_encode(["status" => "OK", "message" => ""]); + } + function get_fpp($orderHeaderID) + { + $sql = "select fppUrl from fpp + where fppT_OrderHeaderID = ? and fppIsActive = 'Y' "; + $qry = $this->db->query($sql, [$orderHeaderID]); + if (!$qry) { + echo json_encode([ + "status" => "ERR", + "message" => $this->db->error()["message"], + ]); + exit(); + } + $rows = $qry->result_array(); + echo json_encode(["status" => "OK", "rows" => $rows]); + } + function view_fpp($orderHeaderID) + { + $sql = "select fppUrl from fpp + where fppT_OrderHeaderID = ? and fppIsActive = 'Y' "; + $qry = $this->db->query($sql, [$orderHeaderID]); + if (!$qry) { + echo "
Error : " . $this->db->error()["message"] . "
"; + exit(); + } + $rows = $qry->result_array(); + if (count($rows) == 0) { + echo "
Belum ada FPP
"; + exit(); + } + $view = ""; + foreach ($rows as $r) { + $pi = pathinfo($r["fppUrl"]); + if ($pi["extenstion"] != "pdf") { + $view .= + "
"; + } else { + $view .= " View FPP PDF "; + } + } + echo "
$view
"; + } + function upload_v2() + { + $this->corss(); + $file = $_FILES["file"]; + $host = "http://devone.aplikasi.web.id"; + $fpp_folder = "/data-fpp/"; + $param = $this->get_param(); + $userID = $this->sys_user["M_UserID"]; + if (!($userID > 0)) { + echo json_encode([ + "status" => "ERR", + "message" => "Authorization error", + ]); + exit(); + } + $nolab = $_POST["nolab"]; + $orderHeaderID = $_POST["orderHeaderID"]; + $sql = "select fppID from fpp where fppT_OrderHeaderID=? + and fppIsActive = 'Y'"; + $qry = $this->db->query($sql, [$orderHeaderID]); + if (!$qry) { + echo json_encode([ + "status" => "ERR", + "message" => $this->db->error()["message"], + ]); + exit(); + } + $rows = $qry->result_array(); + $fppID = 0; + if (count($rows) > 0) { + $fppID = $rows[0]["fppID"]; + } + if (file_exists($file["tmp_name"])) { + $tmpName = tempnam($fpp_folder, "fpp-") . "-{$nolab}.pdf"; + $xname = substr($tmpName, strlen($fpp_folder)); + $upload_status = file_put_contents( + $tmpName, + file_get_contents($file["tmp_name"]) + ); + if (!$upload_status) { + echo json_encode([ + "status" => "ERR", + "message" => "Error Upload File", + ]); + exit(); + } + $url = $host . "/one-api/file_upload/dlv2/" . $xname; + if ($fppID == 0) { + $sql = "insert into fpp (fppUrl, fppUserID, fppT_OrderHeaderID) values(?,?,?)"; + $qry = $this->db->query($sql, [$url, $userID, $orderHeaderID]); + } else { + $sql = "update fpp set fppUrl = ?, fppUserID = ? + where fppID = ?"; + $qry = $this->db->query($sql, [$url, $userID, $orderHeaderID]); + } + if (!$qry) { + echo json_encode([ + "status" => "ERR", + "message" => $this->db->error()["message"], + ]); + exit(); + } + echo json_encode([ + "status" => "OK", + "url" => $url, + ]); + exit(); + } + echo json_encode([ + "status" => "ERR", + "message" => "Failed upload file", + ]); + } + function index() + { + $this->corss(); + $file = $_FILES["file"]; + $host = ""; + if (file_exists($file["tmp_name"])) { + $tmpName = tempnam("/xtmp/", "fpp-") . $file["name"]; + $xname = substr($tmpName, 6); + file_put_contents($tmpName, file_get_contents($file["tmp_name"])); + $nolab = pathinfo($file["name"])["filename"]; + $order = $this->get_order($nolab); + echo json_encode([ + "status" => "OK", + "order" => $order, + "name" => $file["name"], + "url" => $host . "/one-api/file_upload/dl/" . $xname, + ]); + exit(); + } + echo json_encode([ + "status" => "ERR", + "message" => "Failed upload file", + ]); + } + function get_order_by_id($headerID) + { + $sql = "select T_OrderHeaderID, T_OrderHeaderDate, + T_OrderHeaderLabNumber, T_OrderHeaderLabNumberExt, + T_OrderHeaderM_PatientID, T_OrderHeaderSenderM_DoctorID , + T_OrderHeaderSenderM_DoctorAddressID + from t_orderheader + where T_OrderHeaderID = ? + and T_OrderHeaderIsActive = 'Y'"; + $qry = $this->db->query($sql, [$headerID]); + $result = []; + if (!$qry) { + $result["status"] = "ERR"; + $result["message"] = $this->db->error()["message"]; + echo json_encode($result); + exit(); + } + $rows = $qry->result_array(); + if (count($rows) == 0) { + $result["status"] = "ERR"; + $result["message"] = "Order Lab tidak ada"; + echo json_encode($result); + exit(); + } + $orderHeaderID = $rows[0]["T_OrderHeaderID"]; + $orderDate = $rows[0]["T_OrderHeaderDate"]; + $labNo = $rows[0]["T_OrderHeaderLabNumber"]; + $labNoExt = $rows[0]["T_OrderHeaderLabNumberExt"]; + $doctorID = $rows[0]["T_OrderHeaderSenderM_DoctorID"]; + $patientID = $rows[0]["T_OrderHeaderM_PatientID"]; + $addressID = $rows[0]["T_OrderHeaderSenderM_DoctorAddressID"]; + + $sql = "select fn_get_doctor_fullname(?) doctor, + fn_get_patient_atribute(?) patient, + M_DoctorAddressDescription + from m_doctoraddress + where M_DoctorAddressID = ?"; + $qry = $this->db->query($sql, [$doctorID, $patientID, $addressID]); + if (!$qry) { + $result["status"] = "ERR"; + $result["message"] = $this->db->error()["message"]; + echo json_encode($result); + exit(); + } + $rows = $qry->result_array(); + if (count($rows) == 0) { + $result["status"] = "ERR"; + $result["message"] = "Alamat Dokter pengirim tidak ada"; + echo json_encode($result); + exit(); + } + $doctor = $rows[0]["doctor"]; + $address = $rows[0]["M_DoctorAddressDescrtiption"]; + $jpatient = json_decode($rows[0]["patient"], true); + $patient = $jpatient["patient_fullname"]; + $sql = "select T_TestName + from t_orderdetail + join t_test on T_OrderDetailT_OrderHeaderID = ? + and T_OrderDetailIsActive = 'Y' + and T_OrderDetailT_TestID = T_TestID + and T_TestIsPrice = 'Y' + order by T_TestSasCode "; + $qry = $this->db->query($sql, [$orderHeaderID]); + if (!$qry) { + $result["status"] = "ERR"; + $result["message"] = $this->db->error()["message"]; + echo json_encode($result); + exit(); + } + $tests = $qry->result_array(); + $sql = "select fppUrl from fpp where fppT_OrderHeaderID=?"; + + $qry = $this->db->query($sql, [$orderHeaderID]); + if (!$qry) { + $result["status"] = "ERR"; + $result["message"] = $this->db->error()["message"]; + echo json_encode($result); + exit(); + } + $rows = $qry->result_array(); + $existingFpp = []; + foreach ($rows as $r) { + $existingFpp[] = $r["fppUrl"]; + } + echo json_encode([ + "status" => "OK", + "data" => [ + "orderHeaderID" => $orderHeaderID, + "labNo" => $labNo, + "labNoExt" => $labNoExt, + "date" => $orderDate, + "doctor" => $doctor, + "address" => $address, + "patient" => $patient, + "test" => $tests, + "status" => "OK", + "haveExisting" => count($existingFpp) > 0, + "existing" => $existingFpp, + "message" => "", + ], + ]); + } + function get_order($nolab) + { + $sql = "select T_OrderHeaderID, T_OrderHeaderDate, + T_OrderHeaderLabNumber, T_OrderHeaderLabNumberExt, + T_OrderHeaderM_PatientID, T_OrderHeaderSenderM_DoctorID , + T_OrderHeaderSenderM_DoctorAddressID + from t_orderheader + where T_OrderHeaderLabNumber like ? + or T_OrderHeaderLabNumberExt like ? + and T_OrderHeaderIsActive = 'Y'"; + $param = "%" . $nolab; + $qry = $this->db->query($sql, [$param, $param]); + $result = []; + if (!$qry) { + $result["status"] = "ERR"; + $result["message"] = $this->db->error()["message"]; + return $result; + } + $rows = $qry->result_array(); + if (count($rows) == 0) { + $result["status"] = "ERR"; + $result["message"] = "Order dengan No. Lab $nolab tidak ada"; + return $result; + } + $orderHeaderID = $rows[0]["T_OrderHeaderID"]; + $orderDate = $rows[0]["T_OrderHeaderDate"]; + $labNo = $rows[0]["T_OrderHeaderLabNumber"]; + $labNoExt = $rows[0]["T_OrderHeaderLabNumberExt"]; + $doctorID = $rows[0]["T_OrderHeaderSenderM_DoctorID"]; + $patientID = $rows[0]["T_OrderHeaderM_PatientID"]; + $addressID = $rows[0]["T_OrderHeaderSenderM_DoctorAddressID"]; + + $sql = "select fn_get_doctor_fullname(?) doctor, + fn_get_patient_atribute(?) patient, + M_DoctorAddressDescription + from m_doctoraddress + where M_DoctorAddressID = ?"; + $qry = $this->db->query($sql, [$doctorID, $patientID, $addressID]); + if (!$qry) { + $result["status"] = "ERR"; + $result["message"] = $this->db->error()["message"]; + return $result; + } + $rows = $qry->result_array(); + if (count($rows) == 0) { + $result["status"] = "ERR"; + $result["message"] = "Alamat Dokter pengirim tidak ada"; + return $result; + } + $doctor = $rows[0]["doctor"]; + $address = $rows[0]["M_DoctorAddressDescrtiption"]; + $jpatient = json_decode($rows[0]["patient"], true); + $patient = $jpatient["patient_fullname"]; + $sql = "select T_TestName + from t_orderdetail + join t_test on T_OrderDetailT_OrderHeaderID = ? + and T_OrderDetailIsActive = 'Y' + and T_OrderDetailT_TestID = T_TestID + and T_TestIsPrice = 'Y' + order by T_TestSasCode "; + $qry = $this->db->query($sql, [$orderHeaderID]); + if (!$qry) { + $result["status"] = "ERR"; + $result["message"] = $this->db->error()["message"]; + return $result; + } + $tests = $qry->result_array(); + $sql = "select fppUrl from fpp where fppT_OrderHeaderID=?"; + + $qry = $this->db->query($sql, [$orderHeaderID]); + if (!$qry) { + $result["status"] = "ERR"; + $result["message"] = $this->db->error()["message"]; + return $result; + } + $rows = $qry->result_array(); + $existingFpp = []; + foreach ($rows as $r) { + $existingFpp[] = $r["fppUrl"]; + } + return [ + "orderHeaderID" => $orderHeaderID, + "labNo" => $labNo, + "labNoExt" => $labNoExt, + "date" => $orderDate, + "doctor" => $doctor, + "address" => $address, + "patient" => $patient, + "test" => $tests, + "status" => "OK", + "haveExisting" => count($existingFpp) > 0, + "existing" => $existingFpp, + "message" => "", + ]; + } + function dl($xname) + { + $fpath = "/xtmp/" . $xname; + header("Content-type: " . $this->get_mime_type($fpath)); + echo file_get_contents($fpath); + } + function dlv2($xname) + { + $fpath = "/data-fpp/" . $xname; + header("Content-type: " . $this->get_mime_type($fpath)); + echo file_get_contents($fpath); + } + + function get_mime_type($filename) + { + $idx = explode(".", $filename); + $count_explode = count($idx); + $idx = strtolower($idx[$count_explode - 1]); + + $mimet = [ + "txt" => "text/plain", + "htm" => "text/html", + "html" => "text/html", + "php" => "text/html", + "css" => "text/css", + "js" => "application/javascript", + "json" => "application/json", + "xml" => "application/xml", + "swf" => "application/x-shockwave-flash", + "flv" => "video/x-flv", + + // images + "png" => "image/png", + "jpe" => "image/jpeg", + "jpeg" => "image/jpeg", + "jpg" => "image/jpeg", + "gif" => "image/gif", + "bmp" => "image/bmp", + "ico" => "image/vnd.microsoft.icon", + "tiff" => "image/tiff", + "tif" => "image/tiff", + "svg" => "image/svg+xml", + "svgz" => "image/svg+xml", + + // archives + "zip" => "application/zip", + "rar" => "application/x-rar-compressed", + "exe" => "application/x-msdownload", + "msi" => "application/x-msdownload", + "cab" => "application/vnd.ms-cab-compressed", + + // audio/video + "mp3" => "audio/mpeg", + "qt" => "video/quicktime", + "mov" => "video/quicktime", + + // adobe + "pdf" => "application/pdf", + "psd" => "image/vnd.adobe.photoshop", + "ai" => "application/postscript", + "eps" => "application/postscript", + "ps" => "application/postscript", + + // ms office + "doc" => "application/msword", + "rtf" => "application/rtf", + "xls" => "application/vnd.ms-excel", + "ppt" => "application/vnd.ms-powerpoint", + "docx" => "application/msword", + "xlsx" => "application/vnd.ms-excel", + "pptx" => "application/vnd.ms-powerpoint", + + // open office + "odt" => "application/vnd.oasis.opendocument.text", + "ods" => "application/vnd.oasis.opendocument.spreadsheet", + ]; + + if (isset($mimet[$idx])) { + return $mimet[$idx]; + } else { + return "application/octet-stream"; + } + } +} +?> diff --git a/application/controllers/Imgtoken.php b/application/controllers/Imgtoken.php new file mode 100644 index 00000000..e74535bf --- /dev/null +++ b/application/controllers/Imgtoken.php @@ -0,0 +1,39 @@ +sys_input); + } + function convert() + { + $resp = file_get_contents("php://input"); + echo $resp; + } +} diff --git a/application/controllers/Json_placeholder.php b/application/controllers/Json_placeholder.php new file mode 100644 index 00000000..b3653c2d --- /dev/null +++ b/application/controllers/Json_placeholder.php @@ -0,0 +1,233 @@ +corss(); + $this->load->database("default"); + $max_result = 30; + $param = $this->get_param(); + if ($param["search"] == "") { + $sql = "select * from place_holder.drug_allergy limit 0,$max_result"; + $qry = $this->db->query($sql); + } else { + $param["search"] = "%" . $param["search"] . "%"; + $sql = "select * from place_holder.drug_allergy + where CODE like ? or STR like ? + limit 0,$max_result"; + $qry = $this->db->query($sql,[$param["search"]]); + } + if ($qry) { + echo json_encode(["status"=>"ERR","message" => $this->db->error()["message"]]); + exit; + } + echo json_encode(["status"=>"OK","rows"=>$this->db->result_array()]); + } + function search_location() + { + // metode search : 1. search kelurahan ( limit 20) , jika < 20 search kecamatan limit 20 - hasil kelurahan, jika < 20 search city dst + $max_result = 30; + $param = $this->get_param(); + $param["search"] = "%" . $param["search"] . "%"; + $a_loc = []; + if ($param["queryLoc"] != "") { + $a_loc = explode(",",$param["queryLoc"]); + } + $filter_loc = ""; + if (count($a_loc) > 0) { + if (count($a_loc) == 1) { + $filter_loc = " and M_ProvinceName = '" . $a_loc[0] . "'"; + } + if (count($a_loc) == 2) { + $filter_loc = " and M_CityName = '" . $a_loc[1] . "'"; + } + if (count($a_loc) == 3) { + $filter_loc = " and M_DistrictName= '" . $a_loc[2] . "'"; + } + } + $this->load->database("default"); + $this->corss(); + $sql = "select M_KelurahanID,M_KelurahanName, + M_DistrictID, M_DistrictName, + M_CityID, M_CityName, + M_ProvinceID, M_ProvinceName + from m_kelurahan + join m_district on M_KelurahanName like ? + and M_KelurahanIsActive='Y' + and M_DistrictID = M_KelurahanM_DistrictID + join m_city on M_CityID = M_DistrictM_CityID + and M_CityIsActive = 'Y' + join m_province on M_CityM_ProvinceID = M_ProvinceID + and M_ProvinceIsActive = 'Y' + $filter_loc + limit 0,$max_result"; + $qry = $this->db->query($sql, [$param["search"]]); + if (!$qry) { + echo json_encode(["status"=>"ERR","message"=>$this->db->error()["message"]]); + exit; + } + $rows = $qry->result_array(); + $result = []; + foreach ($rows as $r) { + $result[] = $r; + $idx = count($result) - 1; + $result[$idx]["tag"] = [ + $r["M_ProvinceName"], + $r["M_CityName"], + $r["M_DistrictName"], + $r["M_KelurahanName"], + ]; + $result[$idx]["level"] = 1; + } + if (count($rows) < $max_result) { + $max_result = $max_result - count($rows); + $sql = "select + M_DistrictID, M_DistrictName, + M_CityID, M_CityName, + M_ProvinceID, M_ProvinceName + from m_district + join m_city on M_DistrictName like ? + and M_DistrictIsActive ='Y' + and M_DistrictM_CityID = M_CityID + and M_CityIsActive = 'Y' + join m_province on M_CityM_ProvinceID = M_ProvinceID + and M_ProvinceIsActive = 'Y' + $filter_loc + limit 0,$max_result"; + $qry = $this->db->query($sql, [$param["search"]]); + if (!$qry) { + echo json_encode(["status"=>"ERR","message"=>$this->db->error()["message"]]); + exit; + } + $rows = $qry->result_array(); + foreach ($rows as $r) { + $result[] = $r; + $idx = count($result) - 1; + $result[$idx]["tag"] = [ + $r["M_ProvinceName"], + $r["M_CityName"], + $r["M_DistrictName"], + ]; + $result[$idx]["level"] = 2; + } + + if (count($rows) < $max_result) { + $max_result = $max_result - count($rows); + $x_loc = $filter_loc ; + if(count($a_loc) > 2) $x_loc = ""; + $sql = "select + M_CityID, M_CityName, + M_ProvinceID, M_ProvinceName + from m_city + join m_province on M_CityName like ? + and M_CityIsActive = 'Y' + and M_CityM_ProvinceID= M_ProvinceID + and M_ProvinceIsActive= 'Y' + $x_loc + limit 0,$max_result"; + $qry = $this->db->query($sql, [$param["search"]]); + if (!$qry) { + echo json_encode(["status"=>"ERR","message"=>$this->db->error()["message"]]); + exit; + } + $rows = $qry->result_array(); + foreach ($rows as $r) { + $result[] = $r; + $idx = count($result) - 1; + $result[$idx]["tag"] = [ + $r["M_ProvinceName"], + $r["M_CityName"], + ]; + $result[$idx]["level"] = 3; + } + } + } + echo json_encode([ + "status" => "OK", + "rows" => $result + ]); + } + function get_param() + { + $sbody = file_get_contents("php://input"); + return json_decode($sbody, true); + } + function search_patient() + { + $this->corss(); + $ch = curl_init( + "http://devone.aplikasi.web.id/one-api/mockup/fo/registration_v11/patient/search" + ); + $param = $this->get_param(); + $payload = json_encode([ + "noreg" => "", + "search" => $param["search"], + "current_page" => 1, + ]); + curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); + curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type:application/json"]); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $resp = curl_exec($ch); + $error = curl_errno($ch); + $error_msg = curl_error($ch); + if ($error != 0) { + echo json_encode(["status" => "ERR", "message" => $error_msg]); + exit(); + } + echo $resp; + } + function lookup($param = "") + { + $this->corss(); + $result = [ + "status" => "OK", + "data" => [ + ["id" => 1, "name" => "Satu"], + ["id" => 2, "name" => "Dua"], + ["id" => 3, "name" => "Tiga"], + ["id" => 4, "name" => "Empat"], + ["id" => 5, "name" => "Lima"], + ["id" => 6, "name" => "Enam"], + ["id" => 7, "name" => "Tujuh"], + ["id" => 8, "name" => "Delapan"], + ["id" => 9, "name" => "Sembilan"], + ], + ]; + if ($param != "") { + $data = array_filter($result["data"], function ($r) use ($param) { + return strpos($r["name"], $param) >= 0; + }); + $result["data"] = $data; + } + echo json_encode($result); + } +} +?> diff --git a/application/controllers/Merge_rpt.php b/application/controllers/Merge_rpt.php new file mode 100644 index 00000000..7e45029d --- /dev/null +++ b/application/controllers/Merge_rpt.php @@ -0,0 +1,531 @@ +corss(); + $sql = "select T_OrderHeaderLabNumber, + T_OrderHeaderAddOnSecondM_LangID, + T_OrderHeaderM_LangID, + fn_get_patient_atribute(T_OrderHeaderM_PatientID) patient + from t_orderheader + join t_orderheaderaddon on T_OrderHeaderID = ? + and T_OrderHeaderID = T_OrderHeaderAddonT_OrderHeaderID"; + $qry = $this->db->query($sql, [$orderID]); + if (!$qry) { + echo json_encode([ + "status" => "ERR", + "message" => $this->db->error()["message"], + ]); + exit(); + } + $reports = []; + $rows = $qry->result_array(); + if (count($rows) == 0) { + echo json_encode([ + "status" => "ERR", + "message" => "Order Not Found", + ]); + exit(); + } + $labNo = $rows[0]["T_OrderHeaderLabNumber"]; + $jpat = json_decode($rows[0]["patient"], true); + $pname = str_replace(" ", "_", $jpat["patient_fullname"]); + $ts = "&ts=" . date("Ymdhis"); + $reports[] = [ + "name" => "Hasil Lab", + "url" => "{$rpt_lab}&__format=pdf&username={$username}&PID={$orderID}&ts={$ts}", + ]; + $haveSecondLang = false; + if ( + $rows[0]["T_OrderHeaderAddOnSecondM_LangID"] > 0 && + $rows[0]["T_OrderHeaderAddOnSecondM_LangID"] != + $rows["T_OrderHeaderM_LangID"] + ) { + $haveSecondLang = true; + $reports[] = [ + "name" => "Hasil Lab (Inggris)", + "url" => "{$rpt_lab_en}&__format=pdf&username={$username}&PID={$orderID}&ts={$ts}", + ]; + } + //Xray + $reports[] = [ + "name" => "Rontgen", + "url" => "{$rpt_xray}&__format=pdf&username={$username}&PID={$orderID}&PLang=1&ts={$ts}", + ]; + $reports[] = [ + "name" => "Rontgen (v2)", + "url" => "{$rpt_xray_v2}&__format=pdf&username={$username}&PID={$orderID}&PLang=1&ts={$ts}", + ]; + + if (false && $haveSecondLang) { + $reports[] = [ + "name" => "Rontgen (Inggris)", + "url" => "{$rpt_xray_en}&__format=pdf&username={$username}&PID={$orderID}&PLang=1&ts={$ts}", + ]; + $reports[] = [ + "name" => "Rontgen (Inggris v2)", + "url" => "{$rpt_xray_v2_en}&__format=pdf&username={$username}&PID={$orderID}&PLang=1&ts={$ts}", + ]; + } + $sql = "select * from so_resultentry where So_ResultEntryT_OrderHeaderID=? and So_ResultEntrySo_TemplateName='ECG' + and So_ResultEntryIsActive='Y'"; + $qry = $this->db->query($sql, [$orderID]); + if (!$qry) { + echo json_encode([ + "status" => "ERR", + "message" => $this->db->error()["messaga"], + ]); + exit(); + } + $rows = $qry->result_array(); + foreach ($rows as $r) { + $soID = $r["So_ResultEntryID"]; + $langID = $r["So_ResultEntryM_LangID"]; + if ($langID == 1) { + $name = "Elektromedik"; + $reports[] = [ + "name" => $name, + "url" => "{$rpt_elmd}&__format=pdf&username={$username}&PID={$soID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "$name (v2)", + "url" => "{$rpt_elmd_v2}&__format=pdf&username={$username}&PID={$soID}&PLang={$langID}&ts={$ts}", + ]; + } else { + continue; + $name = "Elektromedik (Inggris)"; + $reports[] = [ + "name" => $name, + "url" => "{$rpt_elmd_en}&__format=pdf&username={$username}&PID={$soID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "Elektromedik (Inggris v2)", + "url" => "{$rpt_elmd_v2_en}&__format=pdf&username={$username}&PID={$soID}&PLang={$langID}&ts={$ts}", + ]; + } + } + //FISIK UMUM + $sql = "select * from so_resultentry where So_ResultEntryT_OrderHeaderID=? and So_ResultEntrySo_TemplateName='FISIK UMUM' + and So_ResultEntryIsActive='Y'"; + $qry = $this->db->query($sql, [$orderID]); + if (!$qry) { + echo json_encode([ + "status" => "ERR", + "message" => $this->db->error()["messaga"], + ]); + exit(); + } + $rows = $qry->result_array(); + foreach ($rows as $r) { + $soID = $r["So_ResultEntryID"]; + $langID = $r["So_ResultEntryM_LangID"]; + if ($langID == 1) { + $reports[] = [ + "name" => "Fisik (riwayat)", + "url" => "{$rpt_fisik_riwayat}&__format=pdf&PType=riwayat&username={$username}&PID={$soID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "Fisik", + "url" => "{$rpt_fisik}&__format=pdf&PType=fisik&username={$username}&PID={$soID}&PLang={$langID}&ts={$ts}", + ]; + } else { + continue; + $name = "Elektromedik (Inggris)"; + $reports[] = [ + "name" => $name, + "url" => "{$rpt_elmd_en}&__format=pdf&username={$username}&PID={$soID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "Elektromedik (Inggris v2)", + "url" => "{$rpt_elmd_v2_en}&__format=pdf&username={$username}&PID={$soID}&PLang={$langID}&ts={$ts}", + ]; + } + } + //FISIK UMUM + $sql = + "select * from mcu_resume where Mcu_ResumeT_OrderHeaderID=? and Mcu_ResumeIsActive = 'Y'"; + $qry = $this->db->query($sql, [$orderID]); + if (!$qry) { + echo json_encode([ + "status" => "ERR", + "message" => $this->db->error()["messaga"], + ]); + exit(); + } + $rows = $qry->result_array(); + foreach ($rows as $r) { + $mcuResumeID = $r["Mcu_ResumeID"]; + $langID = $r["Mcu_ResumeM_LangID"]; + if ($langID == 1) { + $reports[] = [ + "name" => "MCU Resume", + "url" => "{$rpt_mcu_resume}&__format=pdf&username={$username}&PID={$mcuResumeID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "MCU Resume (v2)", + "url" => "{$rpt_mcu_resume_v2}&__format=pdf&username={$username}&PID={$mcuResumeID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "MCU Resume (v3)", + "url" => "{$rpt_mcu_resume_v3}&__format=pdf&username={$username}&PID={$mcuResumeID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "MCU Resume (v4)", + "url" => "{$rpt_mcu_resume_v4}&__format=pdf&username={$username}&PID={$mcuResumeID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "MCU Resume (v5)", + "url" => "{$rpt_mcu_resume_v5}&__format=pdf&username={$username}&PID={$mcuResumeID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "MCU Resume (v6)", + "url" => "{$rpt_mcu_resume_v6}&__format=pdf&username={$username}&PID={$mcuResumeID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "MCU Resume (v7)", + "url" => "{$rpt_mcu_resume_v7}&__format=pdf&username={$username}&PID={$mcuResumeID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "MCU Resume (v8)", + "url" => "{$rpt_mcu_resume_v8}&__format=pdf&username={$username}&PID={$mcuResumeID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "MCU Resume (v9)", + "url" => "{$rpt_mcu_resume_v9}&__format=pdf&username={$username}&PID={$mcuResumeID}&PLang={$langID}&ts={$ts}", + ]; + $reports[] = [ + "name" => "MCU Resume v10", + "url" => "{$rpt_mcu_resume_v10}&__format=pdf&username={$username}&PID={$mcuResumeID}&PLang={$langID}&ts={$ts}", + ]; + } else { + continue; + } + } + + echo json_encode([ + "status" => "OK", + "data" => $reports, + "labNo" => $labNo, + "name" => $pname, + ]); + } + function download_pdf() + { + $this->corss(); + $orderHeaderID = $this->sys_input["headerId"]; + $output_file_name = $orderHeaderID . "-" . "merge" . ".pdf"; + $urls = $this->sys_input["urls"]; + $target = tempnam("/xtmp", uniqid("target", true)) . ".pdf"; + $merge_cmd = "/usr/bin/pdfunite"; + $base_url = "http://localhost/"; + $fnames_del = []; + foreach ($urls as $url) { + $fname = tempnam("/xtmp", uniqid("src", true)) . ".pdf"; + $rpt_data = file_get_contents($base_url . $url); + file_put_contents($fname, $rpt_data); + $merge_cmd .= " $fname "; + $fnames_del[] = $fname; + } + $merge_cmd .= " $target"; + $output = []; + exec($merge_cmd, $output); + header("Content-type: application/pdf"); + header("Content-Disposition: inline"); + /* + header( + 'Content-Disposition: inline; filename="' . + $output_file_name . + '"' + ); + */ + echo file_get_contents($target); + foreach ($fnames_del as $fdel) { + unlink($fdel); + } + if (file_exists($target)) { + unlink($target); + } + } + function get_pdf($orderID) + { + $sql = "select distinct + Group_ResultID,Group_ResultName, + Group_ResultFlagNonLab,IFNULL(T_EmailNonLabUrl,'-') EmailNonLabUrl, + IF(T_EmailNonLabUrl IS NULL AND Group_ResultFlagNonLab = 'Y',' [Belum Pilih Format Hasil]','') temail + from + t_orderdetail + join group_resultdetail + on Group_ResultDetailT_TestID = T_OrderDetailT_TestID + and T_OrderDetailIsActive = 'Y' and Group_ResultDetailIsActive = 'Y' + and T_OrderDetailT_OrderHeaderID = ? + join group_result + on Group_ResultDetailGroup_ResultID = Group_ResultID + and Group_ResultIsActive = 'Y' + LEFT JOIN t_email_nonlab ON T_EmailNonLabT_OrderHeaderID = T_OrderDetailT_OrderHeaderID AND + T_EmailNonLabType LIKE CONCAT('%',REPLACE(Group_ResultName, 'Elektromedik', 'electromedis'),'%')"; + $query = $this->db->query($sql, [$orderID]); + if ($query) { + $rows = $query->result_array(); + $ts = "&ts=" . date("Ymdhis"); + foreach ($rows as $r) { + $xname = $r["Group_ResultName"]; + $gid = $r["Group_ResultID"]; + $emailnonlaburl = str_replace(" ", "", $r["EmailNonLabUrl"]); + if (strpos($emailnonlaburl, "fisik") > 0) { + continue; + } + $report = ""; + switch ($gid) { + case 1: + $report = + "/birt/frameset?__report=report/one/lab/rpt_test_email.rptdesign&__format=pdf&username=admin&PID=" . + $orderID . + $ts; + break; + case 2: + $report = + "/birt/frameset?__report=report/one/lab/rpt_hasil_papsmear_email.rptdesign&__format=pdf&username=admin&PID=" . + $orderID . + $ts; + break; + case 3: + $report = + "/birt/frameset?__report=report/one/lab/rpt_hasil_fna_email.rptdesign&__format=pdf&username=admin&PID=" . + $orderID . + $ts; + break; + case 4: + $report = $emailnonlaburl; + break; + case 5: + $report = $emailnonlaburl; + break; + case 6: + $report = $emailnonlaburl; + break; + case 7: + $report = $emailnonlaburl; + break; + case 8: + $report = $emailnonlaburl; + break; + case 9: + $report = $emailnonlaburl; + break; + case 10: + $report = $emailnonlaburl; + break; + case 11: + $report = $emailnonlaburl; + break; + case 12: + $report = + "/birt/frameset?__report=report/one/lab/rpt_hasil_lcprep_email.rptdesign&__format=pdf&username=admin&PID=" . + $orderID . + $ts; + break; + case 13: + $report = + "/birt/frameset?__report=report/one/lab/rpt_test_mikro_email.rptdesign&__format=pdf&username=admin&PID=" . + $orderID . + $ts; + break; + case 14: + $report = + "/birt/frameset?__report=report/one/lab/rpt_hasil_cytologi_email.rptdesign&__format=pdf&username=admin&PID=" . + $orderID . + $ts; + break; + case 15: + $report = $emailnonlaburl; + break; + case 16: + $report = $emailnonlaburl; + break; + case 17: + $report = $emailnonlaburl; + break; + case 19: + $report = $emailnonlaburl; + break; + } + if ($report != "-") { + $result[] = [ + "name" => $xname, + "groupID" => $gid, + "url" => $report, + ]; + } + } + } + echo json_encode(["status" => "OK", "data" => $result]); + } + + function merge($orderHeaderID, $lang = 1, $rpt = "lab") + { + $sql = "select T_OrderHeaderLabNumber,T_OrderHeaderLabNumberExt,M_PatientName + from t_orderheader + join m_patient on T_OrderHeaderID = ? + and T_OrderHeaderM_PatientID = M_PatientID"; + $qry = $this->db->query($sql, [$orderHeaderID]); + $output_file_name = $orderHeaderID . "-" . $rpt . ".pdf"; + if ($qry) { + $rows = $qry->result_array(); + if (count($rows) > 0) { + $output_file_name = + $rows[0]["T_OrderHeaderLabNumberExt"] . "-" . $rpt . ".pdf"; + } + } + $fnames = []; + $target = tempnam("/xtmp", uniqid("target", true)) . ".pdf"; + $merge_cmd = "/usr/bin/pdfunite"; + $base_url = "http://localhost/"; + $fnames_del = []; + if (strpos($rpt, "lab") !== false) { + $fname = tempnam("/xtmp", uniqid("src", true)) . ".pdf"; + $url = + $base_url . + "/birt/frameset?__report=report/one/lab/rpt_test_email.rptdesign&__format=pdf&username=Administrator&PID=" . + $orderHeaderID . + "&tm=" . + date("Ymdhnis"); + $rpt_data = file_get_contents($url); + file_put_contents($fname, $rpt_data); + $merge_cmd .= " $fname "; + $fnames_del[] = $fname; + } + if (strpos($rpt, "xray") !== false) { + $fname = tempnam("/xtmp", uniqid("src", true)) . ".pdf"; + $url = + $base_url . + "/birt/run?__report=report/one/lab/rpt_hasil_so_xray_email.rptdesign&__format=pdf&username=Administrator&PID=" . + $orderHeaderID . + "&PLang=" . + $lang . + "&tm=" . + date("Ymdhnis"); + $rpt_data = file_get_contents($url); + file_put_contents($fname, $rpt_data); + $merge_cmd .= " $fname "; + $fnames_del[] = $fname; + } + if (strpos($rpt, "ecg") !== false) { + $ecgID = 0; + $sql = "select * from so_resultentry + where So_ResultEntryT_OrderHeaderID=? + and So_ResultEntryIsActive = 'Y' + and So_ResultEntrySo_TemplateName = 'ECG'"; + $qry = $this->db->query($sql, [$orderHeaderID]); + if ($qry) { + $rows = $qry->result_array(); + if (count($rows) > 0) { + $ecgID = $rows[0]["So_ResultEntryID"]; + } + } + if ($ecgID > 0) { + $fname = tempnam("/xtmp", uniqid("src", true)) . ".pdf"; + $url = + $base_url . + "/birt/run?__report=report/one/lab/rpt_hasil_so_elmd_email.rptdesign&__format=pdf&username=Administrator&PID=" . + $ecgID . + "&PLang=" . + $lang . + "&tm=" . + date("Ymdhnis"); + $rpt_data = file_get_contents($url); + file_put_contents($fname, $rpt_data); + $merge_cmd .= " $fname "; + $fnames_del[] = $fname; + } + } + $merge_cmd .= " $target"; + $output = []; + exec($merge_cmd, $output); + header("Content-type: application/pdf"); + header( + 'Content-Disposition: attachment; filename="' . + $output_file_name . + '"' + ); + echo file_get_contents($target); + foreach ($fnames_del as $fdel) { + unlink($fdel); + } + if (file_exists($target)) { + unlink($target); + } + exit(); + } +} +?> diff --git a/application/controllers/Odoo.php b/application/controllers/Odoo.php new file mode 100644 index 00000000..482ae394 --- /dev/null +++ b/application/controllers/Odoo.php @@ -0,0 +1,644 @@ +url = "https://odoo.sismedika.online"; + $this->db_odoo = "odoo16_sismedika"; + $this->username = "admin@sismedika.com"; + $this->password = "duD#Z36qH5ctmRRD"; + $this->common = ripcord::client("{$this->url}/xmlrpc/2/common"); + $this->uid = $this->common->authenticate($this->db_odoo, $this->username, $this->password, array()); + $this->model = ripcord::client("{$this->url}/xmlrpc/2/object"); + $this->db->query("use one_support"); + } + function update_task($client_id = 2) + { + //last 60 days + $sql = "select TicketingID,TicketingDescription,TicketingCreated,TicketingNumber + from one_support.ticketing + where TicketingClientID = ? + and TicketingCreated + interval 7 day > now() + and ( + TicketingOdooTaskID = 0 + or + TicketingDoneDate is null + ) + "; + $qry = $this->db->query($sql, [$client_id]); + if (!$qry) { + print_r($this->db->error()); + } + $rows = $qry->result_array(); + foreach ($rows as $r) { + $no = $r["TicketingNumber"]; + $id = $r["TicketingID"]; + $desc = $r["TicketingDescription"]; + $taskDate = $r["TicketingCreated"]; + + $taskID = $this->task_by_tag($no); + echo "Get Odoo TaskID $taskDate : $no => $taskID\n"; + // echo "\t$desc\n"; + if ($taskID > 0) { + $sql = "update one_support.ticketing + set TicketingOdooTaskID = ? + where TicketingID = ?"; + } + list($date, $staff) = $this->get_done($taskID); + echo "\tDone by $staff at $date\n"; + if ($date != "") { + $sql = "update one_support.ticketing + set TicketingOdooTaskID = ? + , TicketingDoneDate = ?, + TicketingDoneStaff=? + where TicketingID = ?"; + $qry = $this->db->query($sql, [ + $taskID, + $date, $staff, $id + ]); + } else { + $qry = $this->db->query($sql, [ + $taskID, + $id + ]); + } + if (!$qry) { + echo "\tERR : " . print_r($this->db->error()) . "\n"; + } + sleep(1); + $date = ""; + $staff = ""; + } + } + function task_by_tag($tag, $project_id = 123) + { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_URL, "http://odoo.sismedika.online/web/dataset/call_kw/project.task/web_search_read"); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + "Content-Type: application/json", + "Cookie: frontend_lang=en_us; td_id=669b47846b8437b163a9c8d43a16c42cae2bc609; session_id=e1c224f95431fc75271cf484260586408c0757d4; cids=1; tz=asia/jakarta", + "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" + ]); + $param = [ + "jsonrpc" => "2.0", + "method" => "call", + "params" => [ + "model" => "project.task", + "method" => "web_search_read", + "args" => [], + "kwargs" => [ + "limit" => 80, + "offset" => 0, + "order" => "", + "context" => [ + "lang" => "en_US", + "tz" => "Asia/Jakarta", + "uid" => 39, + // "allowed_company_ids" => [ + // 1 + // ], + "bin_size" => true, + "active_model" => "project.project", + "active_id" => $project_id, + "active_ids" => [ + $project_id + ], + "default_project_id" => $project_id, + "show_project_update" => true, + "create" => true, + "active_test" => true + ], + "count_limit" => 81, + "domain" => [ + "&", + [ + "display_project_id", + "=", + $project_id + ], + "|", + [ + "name", + "ilike", + "$tag" + ], + [ + "id", + "ilike", + "$tag" + ] + ], + "fields" => [ + "name", + "project_id", + "tag_ids" + ] + ] + ] + ]; + curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($param)); + $response = curl_exec($ch); + $taskID = 0; + if (curl_errno($ch)) { + echo json_encode(["status" => "ERR", "message" => curl_error($ch)]); + } else { + $resp = json_decode($response, true); + if ($resp["result"]["length"] > 0) { + $taskID = $resp["result"]["records"][0]["id"]; + } + } + curl_close($ch); + return $taskID; + } + function get_done($task_id) + { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_URL, "http://odoo.sismedika.online/mail/thread/messages"); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + "Content-Type: application/json", + "Cookie: frontend_lang=en_us; td_id=669b47846b8437b163a9c8d43a16c42cae2bc609; session_id=e1c224f95431fc75271cf484260586408c0757d4; cids=1; tz=asia/jakarta", + "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" + ]); + $data = [ + "jsonrpc" => "2.0", + "method" => "call", + "params" => [ + "thread_id" => $task_id, + "thread_model" => "project.task", + "limit" => 30 + ] + ]; + curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + $response = curl_exec($ch); + if (curl_errno($ch)) { + return ["", ""]; + echo json_encode(["status" => "ERR", "message" => curl_error($ch)]); + } else { + $resp = json_decode($response, true); + $date = ""; + $staff = ""; + foreach ($resp["result"] as $r) { + foreach ($r["trackingValues"] as $t) { + if ($t["changedField"] == "Stage") { + if ($t["newValue"]["value"] == "IMPLEMENTATION") { + $date = $r["date"]; + $staff = $r["email_from"]; + break; + } + } + if ($date != "") break; + } + } + if ($date != "") { + // echo json_encode(["status" => "OK", "date" => $date, "by" => $staff]); + return [$date, $staff]; + exit; + } + return ["", ""]; + echo $response; + } + curl_close($ch); + } + function test_implementation($project_id = 70) + { + $sdate = "2024-07-03 00:00:00"; + $edate = "2024-07-03 23:59:59"; + $arg = array(); + $kwarg = array( + "limit" => 10, + "offset" => 0, + "order" => "", + "count_limit" => 11, + "fields" => [ + "id", + "name", + "description", + ], + //"domain"=>[["stage_id","ilike","implementation"]] + // "domain" + ); + $resp = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + "project.task", + "web_search_read", + array(array( + "&", + ["display_project_id", "=", $project_id], + "&", + ["date_last_stage_update", ">=", $sdate], + "&", + ["date_last_stage_update", "<=", $edate], + ["stage_id", "ilike", "implementation"] + )), + $kwarg + ); + echo "$sdate : $edate\n"; + print_r($resp); + } + function get_implementation_v2($project_id = 70, $stage = "", $date = "") + { + if ($date == "") $date = date("Y-m-d"); + $sdate = $date . " 00:00:00"; + $edate = $date . " 23:59:59"; + if ($stage == "") $date = "x"; + if ($date == "x") { + $sdate = "2024-01-01 00:00:00"; + $edate = "2024-08-07 23:59:59"; + } + $arg = array(); + $kwarg = array( + "limit" => 10, + "offset" => 0, + "order" => "", + "count_limit" => 11, + "fields" => [ + "id", + "name", + "description", + ], + //"domain"=>[["stage_id","ilike","implementation"]] + // "domain" + ); + if ($stage == "") { + echo "$sdate | $edate | $project_id\n"; + $resp = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + "project.task", + "web_search_read", + array(array( + "&", + ["display_project_id", "=", intval($project_id)], + "&", + ["date_last_stage_update", ">=", $sdate], + ["date_last_stage_update", "<=", $edate] + )), + $kwarg + ); + } else { + $resp = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + "project.task", + "web_search_read", + array(array( + "&", + ["display_project_id", "=", intval($project_id)], + "&", + ["date_last_stage_update", ">=", $sdate], + "&", + ["date_last_stage_update", "<=", $edate], + ["stage_id", "ilike", $stage] + )), + $kwarg + ); + } + print_r($resp); + exit; + $arr_ticket = []; + if (isset($resp["records"])) { + foreach ($resp["records"] as $r) { + $desc = $r["description"]; + $name = $r["name"]; + $id = $r["id"]; + $tiket = ""; + if (preg_match("/ No. Tiket : (.+)<\/b>
Cabang/", $desc, $match)) { + $tiket = $match[1]; + if (in_array($tiket, $arr_ticket)) { + echo date("Y-m-d H:i:s") . " Ticket # $tiket duplicate \n"; + continue; + } + $arr_ticket[] = $tiket; + } + if ($tiket != "") { + $rec = $this->get_ticketing($tiket); + if ($rec["TicketingStatus"] != "IMPLEMENTATION") { + $ticketID = $rec["TicketingID"]; + $sender = $rec["TicketingSender"]; + $cabang = $rec["M_BranchName"]; + $hasil = ""; + if (preg_match("/(Hasil.*:.+)/", $desc, $match)) { + $hasil = strip_tags($match[1]); + $hasil = str_replace(" ", "", $hasil); + } + $impl_msg = " +Pengirim : $sender +No. Tiket : $tiket +Issue : $name +Cabang : $cabang +Status : Selesai +$hasil + +Silahkan di cek kembali +Terima Kasih\n"; + echo date("Y-m-d H:i:s") . " Done Ticket # $tiket from $sender \n"; + $this->wa_to_sasone_done($impl_msg, $project_id); + $this->update_ticketing($ticketID, "IMPLEMENTATION", $ticketID); + sleep(2); + } + } + } + } + } + function get_implementation($project_id = 70, $date = "") + { + if ($date == "" || $date = "-") $date = date("Y-m-d"); + $sdate = $date . " 00:00:00"; + $edate = $date . " 23:59:59"; + $arg = array(); + $project_id = intval($project_id); + $kwarg = array( + "limit" => 10, + "offset" => 0, + "order" => "", + "count_limit" => 11, + "fields" => [ + "id", + "name", + "description", + ], + //"domain"=>[["stage_id","ilike","implementation"]] + // "domain" + ); + $resp = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + "project.task", + "web_search_read", + array(array( + "&", + ["display_project_id", "=", $project_id], + "&", + ["date_last_stage_update", ">=", $sdate], + "&", + ["date_last_stage_update", "<=", $edate], + ["stage_id", "ilike", "implementation"] + )), + $kwarg + ); + $arr_ticket = []; + if (isset($resp["records"])) { + foreach ($resp["records"] as $r) { + $desc = $r["description"]; + $name = $r["name"]; + $id = $r["id"]; + $tiket = ""; + if (preg_match("/ No. Tiket : (.+)<\/b>
Cabang/", $desc, $match)) { + $tiket = $match[1]; + if (in_array($tiket, $arr_ticket)) { + echo date("Y-m-d H:i:s") . " Ticket # $tiket duplicate \n"; + continue; + } + $arr_ticket[] = $tiket; + } + if ($tiket != "") { + $rec = $this->get_ticketing($tiket); + if ($rec["TicketingStatus"] != "IMPLEMENTATION") { + $ticketID = $rec["TicketingID"]; + $sender = $rec["TicketingSender"]; + $cabang = $rec["M_BranchName"]; + $hasil = ""; + if (preg_match("/(Hasil.*:.+)/", $desc, $match)) { + $hasil = strip_tags($match[1]); + $hasil = str_replace(" ", "", $hasil); + } + $impl_msg = " +Pengirim : $sender +No. Tiket : $tiket +Issue : $name +Cabang : $cabang +Status : Selesai +$hasil + +Silahkan di cek kembali +Terima Kasih\n"; + echo date("Y-m-d H:i:s") . " Done Ticket # $tiket from $sender \n"; + $this->wa_to_sasone_done($impl_msg, $project_id); + $this->update_ticketing($ticketID, "IMPLEMENTATION", $ticketID); + sleep(2); + } + } + } + } + } + + function get_message($taskID) + { + $arg = [ + "thread_id" => $taskID, + "thread_model" => "project_task", + "limit" => 30 + ]; + $resp = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + "mail.thread", + "read", + array($arg) + ); + print_r($resp); + } + function wa_to_sasone_done( + $msg, + $project_id = 70 + ) { + $this->load->library("Wa_sas"); + //$hp = "6287823783747"; + //$hp="6282113702602-1584412485@g.us"; + //bisone supporter + $hp = "6281328282909-1583223560@g.us"; + if ($project_id != 70) { + //sasone + //6282113702602-1584412485 + $hp = "6282113702602-1584412485@g.us"; + if ($project_id == 123) { + //hore + $hp = "120363280846797029@g.us"; + } + } + $resp = $this->wa_sas->send_message($hp, $msg, true); + // print_r($resp); + } + function update_ticketing($ticketID, $status, $taskID) + { + $sql = "update ticketing set TicketingStatus = ?, + TicketingOdooTaskID=? + where ticketingID = ?"; + $qry = $this->db->query($sql, [$status, $taskID, $taskID]); + if (!$qry) { + echo "Error update ticketing $ticketID\n"; + exit; + } + echo $this->db->last_query() . "\n"; + } + function get_ticketing($tiket) + { + $sql = "select TicketingID,TicketingStatus , + M_BranchName, TicketingSender + from + ticketing + join m_branch on TicketingM_BranchCode = M_BranchCode + and TicketingNumber = ? + "; + $qry = $this->db->query($sql, [$tiket]); + if (!$qry) { + echo "Error get ticketing $tiket\n"; + exit; + } + $rows = $qry->result_array(); + if (count($rows) == 0) { + echo "Error get ticketing $tiket\n"; + exit; + } + return $rows[0]; + } + function create_ts() + { + $prm = $this->sys_input; + $date = $prm["date"]; + $time = $prm["time"]; + $employee_id = $prm["employee_id"]; + $task_id = $prm["task_id"]; + $project_id = $prm["project_id"]; + $description = $prm["description"]; + + $arg = array( + "name" => $description, + "date" => $date, + "unit_amount" => $time, + "user_id" => $this->uid, + "task_id" => $task_id, + "project_id" => $project_id, + "employee_id" => $employee_id + ); + + $resp = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + "account.analytic.line", + "create", + array($arg) + ); + print_r($resp); + if (!is_numeric($resp)) { + echo json_encode(["status" => "ERR", "message" => json_encode($resp)]); + } else { + echo json_encode( + [ + "status" => "OK", + "ts_id" => $resp + ] + ); + } + } + function create_task() + { + $prm = $this->sys_input; + $title = $prm["title"]; + $description = $prm["description"]; + $project_id = $prm["project_id"]; + if ($project_id == "") $project_id = 70; + $images = $prm["images"]; + if (is_array($images)) { + foreach ($images as $img) { + $description .= "
" . + ""; + } + } + $users = $prm["users"]; + if ($users == "") { + $users = [ + 44, + 41, + 42 + ]; + } + $arg = array( + "sun" => $this->bool_day("sun"), + "mon" => $this->bool_day("mon"), + "tue" => $this->bool_day("tue"), + "wed" => $this->bool_day("wed"), + "thu" => $this->bool_day("thu"), + "fri" => $this->bool_day("fri"), + "sat" => $this->bool_day("sat"), + "recurrence_id" => false, + "parent_id" => false, + "company_id" => 1, + "stage_id" => 443, + "personal_stage_type_id" => false, + "recurrence_update" => "this", + "priority" => "0", + "name" => "$title", + "kanban_state" => "normal", + "project_id" => $project_id, + "display_project_id" => false, + "milestone_id" => false, + "user_ids" => [ + [ + 6, + false, + $users + ] + ], + "active" => true, + "partner_id" => false, + "partner_phone" => false, + "date_deadline" => false, + "tag_ids" => [ + [ + 6, + false, + [] + ] + ], + "task_properties" => [], + "description" => $description, + "planned_hours" => 0, + "timesheet_ids" => [], + "child_ids" => [], + ); + $resp = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + "project.task", + "create", + array($arg) + ); + if (!is_numeric($resp)) { + echo json_encode(["status" => "ERR", "message" => json_encode($resp)]); + } else { + echo json_encode( + [ + "status" => "OK", + "task_id" => $resp + ] + ); + } + } + function bool_day($inp_dow) + { + $dow = strtolower(date("D", strtotime("now"))); + if ($inp_dow == $dow) return true; + return false; + } +} diff --git a/application/controllers/Or_dummy.php b/application/controllers/Or_dummy.php new file mode 100644 index 00000000..c63f7ff5 --- /dev/null +++ b/application/controllers/Or_dummy.php @@ -0,0 +1,26 @@ +sys_input; + $param = [ + "IncomingJSONData" => json_encode($data), + "IncomingM_BranchID" => $data["branch_id"], + "IncomingT_OrderHeaderID" => $data["T_OrderHeaderID"], + ]; + $qry = $this->db->insert("or_dummy.incoming", $param); + if (!$qry) { + echo json_encode([ + "status" => "ERR", + "message" => "Err incoming " . $this->db->error()["message"] + ]); + exit; + } + echo json_encode(["status" => "OK", "message" => ""]); + } +} diff --git a/application/controllers/PushOrder.http b/application/controllers/PushOrder.http new file mode 100644 index 00000000..00e08fff --- /dev/null +++ b/application/controllers/PushOrder.http @@ -0,0 +1,100 @@ +POST https://devone.aplikasi.web.id/one-api/PushOrder + +{ + "CorporateID": "46", + "CorporateName": "PT Astra Daihatsu Motor", + "outletId": "I", + "BranchCode": "00000619", + "BranchName": "Westerindo Cikarang", + "PatientCode": "CP2407270280", + "PatientName": "Ibu Adela Nurpadilah ", + "PatientSexCode": "F", + "PatientSexName": "Female", + "PatientDOB": "2001\/08\/05", + "PatientAdress": "CpOne Address", + "OrderNumber": "I2410180003", + "OrderDateTime": "2024\/10\/18 14:40:52", + "DoctorOrderCode": "CpOne001", + "DoctorOrderName": "Dr CpOne", + "GuarantorID": "00000619", + "GuarantorName": "Westerindo Cikarang", + "AgreementID": "Cp001", + "AgreementName": "CpOne", + "ReceivedFlag": false, + "LabRegNo": null, + "ReceivedDateTime": null, + "OrderedItems": [ + { + "itemCode": "00000250", + "itemName": "Glukosa Darah Puasa" + }, + { + "itemCode": "00000506", + "itemName": "Urine Lengkap" + }, + { + "itemCode": "00000686", + "itemName": "Hematologi Lengkap" + }, + { + "itemCode": "00001598", + "itemName": "Panel Creatinin" + } + ] + } + +### Error orderNumber mengandung 3 +POST https://devone.aplikasi.web.id/one-api/PushOrder + +{ + "outletId": "02", + "orderNumber": "131112^02", + "orderDT": "2022/04/14 01:01:01", + "visitNumber": "111111^02", + "patientId": "00-01-02-03", + "patientName": "Tn. COBA", + "sexId": "1", + "sexName": "Male", + "dob": "2019/01/23", + "addressName": "Mid o Nowhere 23, Neverland", + "cityId": "0001", + "cityName": "Neverland", + "mobileNumber": "+6281818181818", + "phoneNumber": "+62212345678", + "faxNumber": "", + "email": "coba@gmail.com", + "idNIK": "31750000000000005", + "idSIM": "", + "idPassport": "", + "physicianId": "02-ZZA", + "physicianName": "Dr. Stein", + "isCito": "0", + "diagnoseId": "Z0101", + "diagnoseName": "Nama Diagnosa", + "guarantorId": "GG", + "guarantorName": "PRIVATE", + "agreementId": "X01", + "agreementName": "InsuranceX VIP", + "serviceUnitId": "OP", + "serviceUnitName": "Out Patient", + "wardPoliId": "P01", + "wardPoliName": "Poli Umum", + "roomId": "R01", + "roomName": "Ruang Alamanda", + "bedId": "B01", + "bedName": "Bed 01", + "classId": "0001", + "className": "VIP Class", + "regUserId": "S1234", + "regUserName": "Rafaela", + "orderItemList": [ + { + "OrderItemId": "2792", + "OrderItemName": "PCR SARS-COV-2 H+1 B2C" + }, + { + "OrderItemId": "2234", + "OrderItemName": "Glukosa sewaktu" + } + ] +} diff --git a/application/controllers/PushOrder.php b/application/controllers/PushOrder.php new file mode 100644 index 00000000..3da49767 --- /dev/null +++ b/application/controllers/PushOrder.php @@ -0,0 +1,44 @@ +db->query($sql, [$body]); + $jbody = json_decode($body, true); + //print_r($jbody); + //exit; + $outletId = $jbody["outletId"]; + $nolab = $jbody["OrderNumber"]; + // echo $nolab; + + + $receivedDT = Date("Y/m/d h:i:s"); + if (strpos($nolab, "3") !== false) { + $resp = [ + "status" => 1, + "message" => "ERROR", + "outletId" => $outletId, + "orderNumber" => $nolab, + "lisRegNo" => "x-lis-" . $nolab, + "receivedDT" => $receivedDT + ]; + } else { + + $resp = [ + "status" => 0, + "message" => "SUCCESS", + "outletId" => $outletId, + "orderNumber" => $nolab, + "lisRegNo" => "x-lis-" . $nolab, + "receivedDT" => $receivedDT + ]; + } + echo json_encode($resp); + } +} diff --git a/application/controllers/Random_saran.php b/application/controllers/Random_saran.php new file mode 100644 index 00000000..2b8facd5 --- /dev/null +++ b/application/controllers/Random_saran.php @@ -0,0 +1,42 @@ + 1) { + $ext = $a_ext[1]; + } + $fname = "$xid.$ext"; + $this->load->library("Sas_s3"); + $resp = $this->sas_s3->upload("audio-sample", "$xid.{$ext}", $type, file_get_contents($tmp_name)); + if ($resp['@metadata']['statusCode'] == 200) { + echo json_encode(["status" => "OK", "result" => "file $name of $type ulded to s3 $xid.ogg "]); + }; + } + function index() + { + $sql = "select concat(Mcu_ResumeKesimpulan, ' Untuk itu disarankan ', + Mcu_ResumeSaran) text + from + mcu_resume + where length(Mcu_ResumeSaran) > 20 + and length(Mcu_ResumeSaran) > 20 + order by rand() + limit 0, 1 "; + $qry = $this->db->query($sql); + $rows = $qry->result_array(); + echo json_encode(["status" => "OK", "data" => $rows]); + } +} diff --git a/application/controllers/Search.php b/application/controllers/Search.php new file mode 100644 index 00000000..d736ca1f --- /dev/null +++ b/application/controllers/Search.php @@ -0,0 +1,856 @@ +db = $this->load->database("onedev", true); + } + function index() + { + echo "Api: Training Playground"; + } + + function instrument_byname() + { + try { + //# cek token valid + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $param = $this->sys_input; + $page = $param["page"]; + + // check input parameter + $control = ""; + if (isset($param['control'])) { + $control = trim($param["control"]); + if ($control != "") { + $control = '%' . $param['control'] . '%'; + } + } + $test = ""; + if (isset($param['test'])) { + $test = trim($param["test"]); + if ($test != "") { + $test = '%' . $param['test'] . '%'; + } + } + $instrument = trim($param['instrument']); + $instrument = "%" . $instrument . "%"; + + // hitung start_offset + $ROW_PER_PAGE = 10; + $start_offset = 0; + if (isset($param["page"])) { + if (is_numeric((int)$param["page"]) && $param["page"] > 0) { + $start_offset = ($page - 1) * $ROW_PER_PAGE; + } + } + //query + if ( + $control == "" && $test == "" + ) { + $sql = "select distinct Nat_InstrumentID, Nat_InstrumentName + from + nat_instrument + join t_instrument_local on Nat_InstrumentID = T_InstrumentLocalNat_InstrumentID + and Nat_InstrumentIsActive = 'Y' and T_InstrumentLocalIsActive = 'Y' + and Nat_InstrumentName like ? + join nat_qc on Nat_instrumentID = Nat_QcNat_InstrumentID + and Nat_QcIsActive = 'Y' + limit 10 offset ?"; + $qry = $this->db->query($sql, [$instrument, $start_offset]); + $last_qry = $this->db->last_query(); + $count = "select count(distinct Nat_InstrumentID) as total + from + nat_instrument + join t_instrument_local on Nat_InstrumentID = T_InstrumentLocalNat_InstrumentID + and Nat_InstrumentIsActive = 'Y' and T_InstrumentLocalIsActive = 'Y' + and Nat_InstrumentName like ? + join nat_qc on Nat_instrumentID = Nat_QcNat_InstrumentID + and Nat_QcIsActive = 'Y'"; + $qry_total_filter = $this->db->query($count, [$instrument]); + $last_qry_total_filter = $this->db->last_query(); + } else if ( + $control != "" && $test == "" + ) { + $sql = "select distinct Nat_InstrumentID, Nat_InstrumentName + from nat_instrument + join t_instrument_local on Nat_InstrumentID = T_InstrumentLocalNat_InstrumentID + and Nat_InstrumentIsActive = 'Y' + and T_InstrumentLocalIsActive = 'Y' + and Nat_InstrumentName like ? + join nat_qc on Nat_instrumentID = Nat_QcNat_InstrumentID + and Nat_QcIsActive = 'Y' + join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID + and Nat_QcControlIsActive = 'Y' + and Nat_QcControlName like ? + limit 10 offset ?"; + $qry = $this->db->query($sql, [$instrument, $control, $start_offset]); + $last_qry = $this->db->last_query(); + $count = "select count(distinct Nat_InstrumentID) as total + from nat_instrument + join t_instrument_local on Nat_InstrumentID = T_InstrumentLocalNat_InstrumentID + and Nat_InstrumentIsActive = 'Y' + and T_InstrumentLocalIsActive = 'Y' + and Nat_InstrumentName like ? + join nat_qc on Nat_instrumentID = Nat_QcNat_InstrumentID + and Nat_QcIsActive = 'Y' + join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID + and Nat_QcControlIsActive = 'Y' + and Nat_QcControlName like ? + "; + $qry_total_filter = $this->db->query($count, [$instrument, $control]); + $last_qry_total_filter = $this->db->last_query(); + } else if ( + $control == "" && $test != "" + ) { + $sql = "select distinct Nat_InstrumentID, Nat_InstrumentName + from nat_instrument + join t_instrument_local on Nat_InstrumentID = T_InstrumentLocalNat_InstrumentID + and Nat_InstrumentIsActive = 'Y' + and T_InstrumentLocalIsActive = 'Y' + and Nat_InstrumentName like ? + join nat_qc on Nat_instrumentID = Nat_QcNat_InstrumentID + and Nat_QcIsActive = 'Y' + join nat_test on Nat_TestID = Nat_QcNat_TestID + and Nat_TestName like ? + limit 10 offset ?"; + $qry = + $this->db->query($sql, [$instrument, $test, $start_offset]); + $last_qry = $this->db->last_query(); + $count = "select count(distinct Nat_InstrumentID) as total + from nat_instrument + join t_instrument_local on Nat_InstrumentID = T_InstrumentLocalNat_InstrumentID + and Nat_InstrumentIsActive = 'Y' + and T_InstrumentLocalIsActive = 'Y' + and Nat_InstrumentName like ? + join nat_qc on Nat_instrumentID = Nat_QcNat_InstrumentID + and Nat_QcIsActive = 'Y' + join nat_test on Nat_TestID = Nat_QcNat_TestID + and Nat_TestName like ? + "; + $qry_total_filter = $this->db->query($count, [$instrument, $test]); + $last_qry_total_filter = $this->db->last_query(); + } else { + $sql = "select distinct Nat_InstrumentID, Nat_InstrumentName + from nat_instrument + join t_instrument_local on Nat_InstrumentID = T_InstrumentLocalNat_InstrumentID + and Nat_InstrumentIsActive = 'Y' + and T_InstrumentLocalIsActive = 'Y' + and Nat_InstrumentName like ? + join nat_qc on Nat_instrumentID = Nat_QcNat_InstrumentID + and Nat_QcIsActive = 'Y' + join nat_test on Nat_TestID = Nat_QcNat_TestID + and Nat_TestName like ? + join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID + and Nat_QcControlIsActive = 'Y' + and Nat_QcControlName like ? + limit 10 offset ?"; + $qry = $this->db->query($sql, [$instrument, $test, $control, $start_offset]); + $last_qry = $this->db->last_query(); + $count = "select count(distinct Nat_InstrumentID) as total + from nat_instrument + join t_instrument_local on Nat_InstrumentID = T_InstrumentLocalNat_InstrumentID + and Nat_InstrumentIsActive = 'Y' + and T_InstrumentLocalIsActive = 'Y' + and Nat_InstrumentName like ? + join nat_qc on Nat_instrumentID = Nat_QcNat_InstrumentID + and Nat_QcIsActive = 'Y' + join nat_test on Nat_TestID = Nat_QcNat_TestID + and Nat_TestName like ? + join nat_qc_control on Nat_QcNat_QcControlID = Nat_QcControlID + and Nat_QcControlIsActive = 'Y' + and Nat_QcControlName like ? + "; + + $qry_total_filter = $this->db->query($count, [$instrument, $test, $control]); + $last_qry_total_filter = $this->db->last_query(); + } + if (!$qry) { + $this->db->trans_rollback(); + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_qry + ); + $this->sys_error_db($error); + exit; + } + if (!$qry_total_filter) { + $this->db->trans_rollback(); + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_qry_total_filter + ); + $this->sys_error_db($error); + exit; + } + $rows = $qry->result_array(); + $total_filter = (int)$qry_total_filter->result_array()[0]["total"]; + + $total = ceil($total_filter / $ROW_PER_PAGE); + $result = array( + "total" => $total, + "total_filter" => $total_filter, + "records" => $rows, + "sql" => $last_qry, + "count" => $last_qry_total_filter + ); + $this->sys_ok($result); + } catch (Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + function qc_byname() + { + try { + //# cek token valid + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $param = $this->sys_input; + + $page = $param["page"]; + $control = "%%"; + if (isset($param['control'])) { + $control = trim($param["control"]); + + if ($control != "") { + $control = '%' . $param['control'] . '%'; + } + } + $instrument = "%%"; + if (isset($param['instrument'])) { + $instrument = trim($param["instrument"]); + if ($instrument != "") { + $instrument = '%' . $param['instrument'] . '%'; + } + } + $test = "%%"; + if (isset($param['test'])) { + $test = trim($param["test"]); + if ($test != "") { + $test = '%' . $param['test'] . '%'; + } + } + $sdate = ""; + if (isset($param['sdate'])) { + $sdate = trim($param["sdate"]); + if ($sdate != "") { + $sdate = $param['sdate']; + } + } + $ROW_PER_PAGE = 10; + $start_offset = 0; + if (isset($param["page"])) { + if ( + is_numeric($param["page"]) && $param["page"] > 0 + ) { + $start_offset = ($page - 1) * $ROW_PER_PAGE; + } + } + $sql = "select distinct M_QcID, M_QcStatMean, M_QcStatSd, M_QcStatTea, + M_QcResultID, M_QcResultValue, M_QcResultIsInstrument , M_QcResultDate, + Nat_QcControlID , Nat_QcControlName , Nat_InstrumentID, Nat_InstrumentName, Nat_TestID , Nat_TestName + from m_qc_result + join m_qc on M_QcResultM_QcID = M_QcID + and M_QcResultDate = ? + and M_QcResultIsActive ='Y' + join nat_qc on M_QcNat_QcID = Nat_QcID + and Nat_QcIsActive = 'Y' + join nat_qc_control on Nat_QcNat_QcControlID =Nat_QcControlID + and Nat_QcControlName like ? + and Nat_QcControlIsActive = 'Y' + join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID + and Nat_InstrumentName like ? + and Nat_InstrumentIsActive = 'Y' + join nat_test on Nat_QcNat_TestID = Nat_TestID + and Nat_TestName like ? + and Nat_TestIsActive = 'Y' limit 10 offset ?"; + $qry = $this->db->query($sql, [ + $sdate, $control, $instrument, $test, $start_offset + ]); + $last_qry = $this->db->last_query(); + $count = + "select count(distinct M_QcID) as total + from m_qc_result + join m_qc on M_QcResultM_QcID = M_QcID + and M_QcResultDate = ? + and M_QcResultIsActive ='Y' + join nat_qc on M_QcNat_QcID = Nat_QcID + and Nat_QcIsActive = 'Y' + join nat_qc_control on Nat_QcNat_QcControlID =Nat_QcControlID + and Nat_QcControlName like ? + and Nat_QcControlIsActive = 'Y' + join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID + and Nat_InstrumentName like ? + and Nat_InstrumentIsActive = 'Y' + join nat_test on Nat_QcNat_TestID = Nat_TestID + and Nat_TestName like ? + and Nat_TestIsActive = 'Y' "; + $qry_total_filter = + $this->db->query($count, [ + $sdate, $control, $instrument, $test + ]); + $last_qry_total_filter = $this->db->last_query(); + if ($sdate == "" or $test == "") { + echo json_encode([ + "status" => "ERR", "message" => 'test and sdate is mandatory', + + ]); + } else { + if (!$qry) { + $this->db->trans_rollback(); + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_qry + ); + $this->sys_error_db($error); + exit; + } + if (!$qry_total_filter) { + $this->db->trans_rollback(); + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_qry_total_filter + ); + $this->sys_error_db($error); + exit; + } + $rows = $qry->result_array(); + $total_filter = (int)$qry_total_filter->result_array()[0]["total"]; + + $total = ceil($total_filter / $ROW_PER_PAGE); + $result = array( + "total" => $total, + "total_filter" => $total_filter, + "records" => $rows, + "sql" => $last_qry, + "count" => $last_qry_total_filter + ); + $this->sys_ok($result); + } + } catch (Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + function qc_byid() + { + try { + //# cek token valid + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $param = $this->sys_input; + $page = $param["page"]; + $controlid = ""; + $instrumentid = ""; + $ROW_PER_PAGE = 10; + $start_offset = 0; + if (isset($param["page"])) { + if (is_numeric($param["page"]) && $param["page"] > 0) { + $start_offset = ($page - 1) * $ROW_PER_PAGE; + } + } + if (isset($param["controlid"])) { + if (is_numeric($param["controlid"])) { + $controlid = $param["controlid"]; + } + } + if (isset($param["instrumentid"])) { + if (is_numeric($param["instrumentid"])) { + $instrumentid = $param["instrumentid"]; + } + } + $sdate = ""; + if (isset($param['sdate'])) { + $sdate = trim($param["sdate"]); + if ($sdate != "") { + $sdate = $param['sdate']; + } + } + $test = "%%"; + if (isset($param['test'])) { + $test = trim($param["test"]); + if ($test != "") { + $test = '%' . $param['test'] . '%'; + } + } + $sql = "select distinct M_QcID, M_QcStatMean, M_QcStatSd, M_QcStatTea, + M_QcResultID, M_QcResultValue, M_QcResultIsInstrument , M_QcResultDate, + Nat_QcControlID , Nat_QcControlName , Nat_InstrumentID, Nat_InstrumentName, Nat_TestID , Nat_TestName + from m_qc_result + join m_qc on M_QcResultM_QcID = M_QcID + and M_QcResultDate = ? and M_QcResultIsActive ='Y' + join nat_qc on M_QcNat_QcID = Nat_QcID + and Nat_QcIsActive = 'Y' + join nat_qc_control on Nat_QcNat_QcControlID =Nat_QcControlID + and Nat_QcControlID = ? + and Nat_QcControlIsActive = 'Y' + join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID + and Nat_InstrumentID = ? + and Nat_InstrumentIsActive = 'Y' + join nat_test on Nat_QcNat_TestID = Nat_TestID + and Nat_TestName like ? + and Nat_TestIsActive = 'Y' limit 10 offset ?"; + $qry = $this->db->query($sql, [$sdate, $controlid, $instrumentid, $test, $start_offset]); + $last_qry = $this->db->last_query(); + $count = "select count(distinct M_QcID) as total + from m_qc_result + join m_qc on M_QcResultM_QcID = M_QcID + and M_QcResultDate = ? and M_QcResultIsActive ='Y' + join nat_qc on M_QcNat_QcID = Nat_QcID + and Nat_QcIsActive = 'Y' + join nat_qc_control on Nat_QcNat_QcControlID =Nat_QcControlID + and Nat_QcControlID = ? + and Nat_QcControlIsActive = 'Y' + join nat_instrument on Nat_QcNat_InstrumentID = Nat_InstrumentID + and Nat_InstrumentID = ? + and Nat_InstrumentIsActive = 'Y' + join nat_test on Nat_QcNat_TestID = Nat_TestID + and Nat_TestName like ? + and Nat_TestIsActive = 'Y'"; + $qry_total_filter = $this->db->query($count, [$sdate, $controlid, $instrumentid, $test]); + $last_qry_total_filter = $this->db->last_query(); + if ($controlid == "" or $instrumentid == "" or $sdate == "") { + echo json_encode([ + "status" => "ERR", "message" => 'control, instrument, and sdate is mandatory', + ]); + } else { + if (!$qry) { + $this->db->trans_rollback(); + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_qry + ); + $this->sys_error_db($error); + exit; + } + + if (!$qry_total_filter) { + $this->db->trans_rollback(); + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_qry_total_filter + ); + $this->sys_error_db($error); + exit; + } + $rows = $qry->result_array(); + $total_filter = (int)$qry_total_filter->result_array()[0]["total"]; + + $total = ceil($total_filter / $ROW_PER_PAGE); + $result = array( + "total" => $total, + "total_filter" => $total_filter, + "records" => $rows, + "sql" => $last_qry, + "count" => $last_qry_total_filter + ); + $this->sys_ok($result); + } + } catch (Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + function control_byname() + { + try { + //# cek token valid + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $param = $this->sys_input; + // $page = 0; + $page = $param['page']; + + // check input parameter + + // mandatory + $control = trim($param['control']); + $control = "%" . $control . "%"; + + // tidak mandatory + $instrument = ""; + if (isset($param['instrument'])) { + $instrument = trim($param["instrument"]); + if ($instrument != "") { + $instrument = '%' . $param['instrument'] . '%'; + } + } + $test = ""; + if (isset($param['test'])) { + $test = trim($param["test"]); + if ($test != "") { + $test = '%' . $param['test'] . '%'; + } + } + + // hitung start_offset + $ROW_PER_PAGE = 10; + $start_offset = 0; + if (isset($param["page"])) { + if (is_numeric($param["page"]) && $param['page'] > 0) { + $start_offset = ($page - 1) * $ROW_PER_PAGE; + } + } + + // query + if ($instrument == "" && $test == "") { + $sql = "select + distinct Nat_QcControlID, + Nat_QcControlName, + Nat_QcControlLotNumber, + Nat_QcControlExpired, + Nat_QcLevelID, + Nat_QcLevelName + from nat_qc_control + join nat_qc_level + ON Nat_QcControlNat_QcLevelID = Nat_QcLevelID + AND Nat_QcControlIsActive = 'Y' + AND Nat_QcLevelIsActive = 'Y' + AND Nat_QcControlName like ? + limit 10 offset ?"; + $qry = $this->db->query($sql, [$control, $start_offset]); + $last_query = $this->db->last_query(); + + $sql_total_filter = "select + count(distinct Nat_QcControlID, + Nat_QcControlName, + Nat_QcControlLotNumber, + Nat_QcControlExpired, + Nat_QcLevelID, + Nat_QcLevelName) as total_filter + from nat_qc_control + join nat_qc_level + ON Nat_QcControlNat_QcLevelID = Nat_QcLevelID + AND Nat_QcControlIsActive = 'Y' + AND Nat_QcLevelIsActive = 'Y' + AND Nat_QcControlName like ?"; + $qry_total_filter = $this->db->query($sql_total_filter, [$control]); + $last_query_total_filter = $this->db->last_query(); + } else if ($instrument !== "" && $test == "") { + // instrument terisi dan tes kosong + $sql = "select + distinct Nat_QcControlID, + Nat_QcControlName, + Nat_QcControlLotNumber, + Nat_QcControlExpired, + Nat_QcLevelID, + Nat_QcLevelName + from nat_qc_control + join nat_qc_level + ON Nat_QcControlNat_QcLevelID = Nat_QcLevelID + AND Nat_QcControlIsActive = 'Y' + AND Nat_QcLevelIsActive = 'Y' + AND Nat_QcControlName like ? + join nat_qc + ON Nat_QcControlID = Nat_QcNat_QcControlID + AND Nat_QcIsActive = 'Y' + join nat_instrument + ON Nat_QcNat_InstrumentID = Nat_InstrumentID + AND Nat_InstrumentIsActive = 'Y' + AND Nat_InstrumentName like ? + limit 10 offset ?"; + $qry = $this->db->query($sql, [$control, $instrument, $start_offset]); + $last_query = $this->db->last_query(); + + $sql_total_filter = "select + count(distinct Nat_QcControlID, + Nat_QcControlName, + Nat_QcControlLotNumber, + Nat_QcControlExpired, + Nat_QcLevelID, + Nat_QcLevelName) as total_filter + from nat_qc_control + join nat_qc_level + ON Nat_QcControlNat_QcLevelID = Nat_QcLevelID + AND Nat_QcControlIsActive = 'Y' + AND Nat_QcLevelIsActive = 'Y' + AND Nat_QcControlName like ? + join nat_qc + ON Nat_QcControlID = Nat_QcNat_QcControlID + AND Nat_QcIsActive = 'Y' + join nat_instrument + ON Nat_QcNat_InstrumentID = Nat_InstrumentID + AND Nat_InstrumentIsActive = 'Y' + AND Nat_InstrumentName like ?"; + $qry_total_filter = $this->db->query($sql_total_filter, [$control, $instrument]); + $last_query_total_filter = $this->db->last_query(); + } else if ($instrument == "" && $test !== "") { + // instrument kosong dan tes terisi + $sql = "select + distinct Nat_QcControlID, + Nat_QcControlName, + Nat_QcControlLotNumber, + Nat_QcControlExpired, + Nat_QcLevelID, + Nat_QcLevelName + from nat_qc_control + join nat_qc_level + ON Nat_QcControlNat_QcLevelID = Nat_QcLevelID + AND Nat_QcControlIsActive = 'Y' + AND Nat_QcLevelIsActive = 'Y' + AND Nat_QcControlName like ? + join nat_qc + ON Nat_QcControlID = Nat_QcNat_QcControlID + AND Nat_QcIsActive = 'Y' + join nat_test + ON Nat_QcNat_TestID = Nat_TestID + AND Nat_TestIsActive = 'Y' + AND Nat_TestName like ? + limit 10 offset ?"; + $qry = $this->db->query($sql, [$control, $test, $start_offset]); + $last_query = $this->db->last_query(); + + $sql_total_filter = "select + count(distinct Nat_QcControlID, + Nat_QcControlName, + Nat_QcControlLotNumber, + Nat_QcControlExpired, + Nat_QcLevelID, + Nat_QcLevelName) as total_filter + from nat_qc_control + join nat_qc_level + ON Nat_QcControlNat_QcLevelID = Nat_QcLevelID + AND Nat_QcControlIsActive = 'Y' + AND Nat_QcLevelIsActive = 'Y' + AND Nat_QcControlName like ? + join nat_qc + ON Nat_QcControlID = Nat_QcNat_QcControlID + AND Nat_QcIsActive = 'Y' + join nat_test + ON Nat_QcNat_TestID = Nat_TestID + AND Nat_TestIsActive = 'Y' + AND Nat_TestName like ?"; + $qry_total_filter = $this->db->query($sql_total_filter, [$control, $test]); + $last_query_total_filter = $this->db->last_query(); + } else { + // instrument dan test terisi + $sql = "select + distinct Nat_QcControlID, + Nat_QcControlName, + Nat_QcControlLotNumber, + Nat_QcControlExpired, + Nat_QcLevelID, + Nat_QcLevelName + from nat_qc_control + join nat_qc_level + ON Nat_QcControlNat_QcLevelID = Nat_QcLevelID + AND Nat_QcControlIsActive = 'Y' + AND Nat_QcLevelIsActive = 'Y' + AND Nat_QcControlName like ? + join nat_qc + ON Nat_QcControlID = Nat_QcNat_QcControlID + AND Nat_QcIsActive = 'Y' + join nat_instrument + ON Nat_QcNat_InstrumentID = Nat_InstrumentID + AND Nat_InstrumentIsActive = 'Y' + AND Nat_InstrumentName like ? + join nat_test + ON Nat_QcNat_TestID = Nat_TestID + AND Nat_TestIsActive = 'Y' + AND Nat_TestName like ? + limit 10 offset ?"; + $qry = $this->db->query($sql, [$control, $instrument, $test, $start_offset]); + $last_query = $this->db->last_query(); + + $sql_total_filter = "select + count(distinct Nat_QcControlID, + Nat_QcControlName, + Nat_QcControlLotNumber, + Nat_QcControlExpired, + Nat_QcLevelID, + Nat_QcLevelName) as total_filter + from nat_qc_control + join nat_qc_level + ON Nat_QcControlNat_QcLevelID = Nat_QcLevelID + AND Nat_QcControlIsActive = 'Y' + AND Nat_QcLevelIsActive = 'Y' + AND Nat_QcControlName like ? + join nat_qc + ON Nat_QcControlID = Nat_QcNat_QcControlID + AND Nat_QcIsActive = 'Y' + join nat_instrument + ON Nat_QcNat_InstrumentID = Nat_InstrumentID + AND Nat_InstrumentIsActive = 'Y' + AND Nat_InstrumentName like ? + join nat_test + ON Nat_QcNat_TestID = Nat_TestID + AND Nat_TestIsActive = 'Y' + AND Nat_TestName like ?"; + $qry_total_filter = $this->db->query($sql_total_filter, [$control, $instrument, $test]); + $last_query_total_filter = $this->db->last_query(); + } + + if (!$qry) { + $this->db->trans_rollback(); + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_query + ); + $this->sys_error_db($error); + exit; + } + + if (!$qry_total_filter) { + $this->db->trans_rollback(); + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_query_total_filter + ); + $this->sys_error_db($error); + exit; + } + + $rows = $qry->result_array(); + $rows_total_filter = $qry_total_filter->result_array(); + $total = ceil($rows_total_filter[0]["total_filter"] / $ROW_PER_PAGE); + $result = array( + "total" => $total, + "total_filter" => (int)$rows_total_filter[0]["total_filter"], + "records" => $rows, + "sql" => $this->db->last_query() + ); + $this->sys_ok($result); + } catch (Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + function control_byid() + { + try { + //# cek token valid + if (!$this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $param = $this->sys_input; + $page = $param['page']; + + // check input parameter + + // mandatory + $id = 0; + if (isset($param['id'])) { + if (is_numeric($param['id'])) { + $id = $param['id']; + } + } + + // hitung start_offset + $ROW_PER_PAGE = 10; + $start_offset = 0; + if (isset($param["page"])) { + if (is_numeric($param["page"]) && $param['page'] > 0) { + $start_offset = ($page - 1) * $ROW_PER_PAGE; + } + } + + + $sql = "select + distinct Nat_QcControlID, + Nat_QcControlName, + Nat_QcControlLotNumber, + Nat_QcControlExpired, + Nat_QcLevelID, + Nat_QcLevelName, + Nat_InstrumentID, + Nat_InstrumentName, + Nat_TestID, + Nat_TestName + from nat_qc_control + join nat_qc_level + ON Nat_QcControlNat_QcLevelID = Nat_QcLevelID + AND Nat_QcControlIsActive = 'Y' + AND Nat_QcLevelIsActive = 'Y' + join nat_qc + ON Nat_QcControlID = Nat_QcNat_QcControlID + AND Nat_QcIsActive = 'Y' + join nat_instrument + ON Nat_QcNat_InstrumentID = Nat_InstrumentID + AND Nat_InstrumentIsActive = 'Y' + AND Nat_InstrumentID = ? + join nat_test + ON Nat_QcNat_TestID = Nat_TestID + AND Nat_TestIsActive = 'Y' + limit 10 offset ?"; + $qry = $this->db->query($sql, [$id, $start_offset]); + $last_query = $this->db->last_query(); + + $sql_total_filter = "select + count(distinct Nat_QcControlID, + Nat_QcControlName, + Nat_QcControlLotNumber, + Nat_QcControlExpired, + Nat_QcLevelID, + Nat_QcLevelName, + Nat_InstrumentID, + Nat_InstrumentName, + Nat_TestID, + Nat_TestName) as total_filter + from nat_qc_control + join nat_qc_level + ON Nat_QcControlNat_QcLevelID = Nat_QcLevelID + AND Nat_QcControlIsActive = 'Y' + AND Nat_QcLevelIsActive = 'Y' + join nat_qc + ON Nat_QcControlID = Nat_QcNat_QcControlID + AND Nat_QcIsActive = 'Y' + join nat_instrument + ON Nat_QcNat_InstrumentID = Nat_InstrumentID + AND Nat_InstrumentIsActive = 'Y' + AND Nat_InstrumentID = ? + join nat_test + ON Nat_QcNat_TestID = Nat_TestID + AND Nat_TestIsActive = 'Y'"; + $qry_total_filter = $this->db->query($sql_total_filter, [$id]); + $last_query_total_filter = $this->db->last_query(); + + if (!$qry) { + $this->db->trans_rollback(); + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_query + ); + $this->sys_error_db($error); + exit; + } + + if (!$qry_total_filter) { + $this->db->trans_rollback(); + $error = array( + "message" => $this->db->error()["message"], + "sql" => $last_query_total_filter + ); + $this->sys_error_db($error); + exit; + } + + $rows = $qry->result_array(); + $rows_total_filter = $qry_total_filter->result_array(); + $total = ceil($rows_total_filter[0]["total_filter"] / $ROW_PER_PAGE); + + $result = array( + "total" => $total, + "total_filter" => (int)$rows_total_filter[0]["total_filter"], + "records" => $rows, + "sql" => $this->db->last_query() + ); + $this->sys_ok($result); + } catch (Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } +} diff --git a/application/controllers/Station.php b/application/controllers/Station.php new file mode 100644 index 00000000..67f35de9 --- /dev/null +++ b/application/controllers/Station.php @@ -0,0 +1,479 @@ +db_onedev = $this->load->database("onedev", true); + } + + + function lookupbahan(){ + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $id = $prm['id']; + $sql = "select T_BahanID as id, + T_BahanT_SampleStationID as usergroupid, + T_BahanCode as code, + T_BahanName As name, + 'xxx' as action + from t_bahan + join t_samplestation oN T_BahanT_SampleStationID = T_SampleStationID + where + T_BahanT_SampleStationID = {$id} AND T_BahanIsActive = 'Y'"; + //echo $sql; + $rows = $this->db_onedev->query($sql)->result(); + + $result = array ("total" => count($rows), "records" => $rows); + $this->sys_ok($result); + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + + public function lookup() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $prm = $this->sys_input; + $search = $prm['search']; + $all = $prm['all']; + $limit = ''; + if($all == 'N'){ + $limit = ' LIMIT 10'; + } + $sql = "select COUNT(*) as total + from t_samplestation + where + T_SampleStationIsActive = 'Y'"; + $sql_param = array($search); + $total = $this->db_onedev->query($sql,$sql_param)->row()->total; + + + $sql = "select T_SampleStationID as id, + T_SampleStationCode as code, + T_SampleStationName as name, + T_SampleStationIsNonLab as isnonlab, T_SampleStationName as description , 'xxx' as usergrouptype + from t_samplestation + where + T_SampleStationName LIKE CONCAT('%','{$search}','%') AND + T_SampleStationIsActive = 'Y' $limit"; + $sql_param = array($search); + $query = $this->db_onedev->query($sql); + //echo $this->db_onedev->last_query(); + if ($query) { + $rows = $query->result_array(); + + + } else { + $this->sys_error_db("t_samplestation select",$this->db_onedev); + exit; + } + + + $result = array ("total" => $total, "total_filter"=>count($rows),"records" => $rows); + $this->sys_ok($result); + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + + + public function addnewstation() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + //# ambil parameter input + $prm = $this->sys_input; + + $name_station = $prm['name']; + $code_station = $prm['code']; + $isnonlab_station = $prm['isnonlab']; + + + $query = "SELECT COUNT(*) as exist FROM t_samplestation WHERE T_SampleStationIsActive = 'Y' AND T_SampleStationName = '{$name_station}'"; + $exist_name = $this->db_onedev->query($query)->row()->exist; + + + //echo $exist_name; + if($exist_name == 0 ){ + $sql = "insert into t_samplestation( + T_SampleStationCode, + T_SampleStationName, + T_SampleStationIsNonLab, + T_SampleStationCreated, + T_SampleStationLastUpdated + ) + values( ?, ?, ?,now(), now())"; + $query = $this->db_onedev->query($sql, + array( + $name_station, + $code_station, + $isnonlab_station + ) + ); + //echo $query; + if (!$query) { + $this->sys_error_db("t_samplestation insert"); + exit; + } + + $result = array ("total" => 1, "records" => array("xid" => 0)); + $this->sys_ok($result); + } else{ + $errors = array(); + + if($exist_name != 0){ + array_push($errors,array('field'=>'name','msg'=>'Nama sudah ada ')); + } + + $result = array ("total" => -1,"errors" => $errors, "records" => 0); + $this->sys_ok($result); + } + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + + public function editstation() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + //# ambil parameter input + $prm = $this->sys_input; + $id_station = $prm['id']; + $code_station = $prm['code']; + $name_station = $prm['name']; + $isnonlab_station = $prm['isnonlab']; + + $query = "SELECT COUNT(*) as exist FROM t_samplestation WHERE T_SampleStationIsActive = 'Y' AND T_SampleStationName = '{$name_station}' + AND T_SampleStationID <> {$id_station} "; +$exist_name = $this->db_onedev->query($query)->row()->exist; + + +if($exist_name == 0){ + + $sql = "update t_samplestation SET + T_SampleStationCode = ?, + T_SampleStationName = ?, + T_SampleStationIsNonLab = ?, + T_SampleStationLastUpdated = now() + where + T_SampleStationID = ? +"; +$query = $this->db_onedev->query($sql, + array( + $code_station, + $name_station, + $isnonlab_station, + $id_station + ) +); +//file_put_contents("/tmp/adi-update-user.sql",$this->db_onedev->last_query()); +//echo $query; +if (!$query) { + $this->sys_error_db("t_samplestation update"); + exit; +} + +$result = array ("total" => 1, "records" => array("xid" => $id_station)); +$this->sys_ok($result); +}else{ + $errors = array(); + + + if($exist_name != 0){ + array_push($errors,array('field'=>'name','msg'=>'Nama sudah ada')); + } + + $result = array ("total" => -1,"errors" => $errors, "records" => 0); + $this->sys_ok($result); +} + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + + + + public function editbahan() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + //# ambil parameter input + $prm = $this->sys_input; + $bahanid = $prm['xid']; + $code = $prm['code']; + $name = $prm['name']; + $xstationname = $prm['xstationname']; + + + + $query = "SELECT COUNT(*) as exist FROM t_bahan WHERE T_BahanIsActive = 'Y' AND T_BahanName = '{$name}' + and T_BahanID <> $bahanid "; + $exist_name = $this->db_onedev->query($query)->row()->exist; + + if($exist_name == 0){ + + $sql = "update m_user SET + T_BahanCode = ?, + T_BahanName = ?, + T_BahanT_SampleStationID = ?, + T_BahanLastUpdated = now() + where T_BahanID = ? "; + + $query = $this->db_onedev->query($sql, + array( + $code, + $name, + $xstationname["T_SampleStationID"], + $bahanid + )); + if (!$query) { + $this->sys_error_db("t_bahan update",$this->db_onedev); + exit; + } + $result = array ("total" => 1, "records" => array("xid" => $bahanid)); + $this->sys_ok($result); + } else { + $errors = array(); + + if($exist_name != 0){ + array_push($errors,array('field'=>'name','msg'=>'Nama sudah ada yang pakai dong')); + } + + $result = array ("total" => -1,"errors" => $errors, "records" => 0); + $this->sys_ok($result); + } + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + + public function addnewbahan() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + //# ambil parameter input + $prm = $this->sys_input; + $stationid = $prm['stationid']; + $code = $prm['code']; + $name = $prm['name']; + + if($prm['xid'] == 0){ + $query = "SELECT COUNT(*) as exist FROM t_bahan WHERE T_BahanIsActive = 'Y' AND T_BahanName = '{$name}'"; + $exist_name = $this->db_onedev->query($query)->row()->exist; + + if($exist_name == 0){ + $sql = "insert into t_bahan( + T_BahanT_SampleStationID, + T_BahanCode, + T_BahanName, + T_BahanCreated, + T_BahanLastUpdated + ) + values( ?,?,?,now(),now())"; +$query = $this->db_onedev->query($sql, + array( + $stationid, + $code, + $name + ) +); +if (!$query) { + $this->sys_error_db("t_bahan insert",$this->db_onedev); + exit; +} +$result = array ("total" => 1, "records" => array("xid" => 0)); +$this->sys_ok($result); + }else{ + $errors = array(); + if($exist_name != 0){ + array_push($errors,array('field'=>'name','msg'=>'Nama sudah ada yang pakai dong')); + } + + + $result = array ("total" => -1,"errors" => $errors, "records" => 0); + $this->sys_ok($result); + } + }else{ + $query = "SELECT COUNT(*) as exist FROM t_bahan WHERE T_BahanIsActive = 'Y' AND T_BahanName = '{$name}' AND T_BahanID <> {$prm['xid']}"; + $exist_name = $this->db_onedev->query($query)->row()->exist; + //echo $query; + + //echo $query; + if($exist_name == 0 ){ + $sql = "UPDATE t_bahan SET T_BahanName = '{$name}', T_BahanCode = '{$code}' WHERE T_BahanID = '{$prm['xid']}'"; + //echo $sql; + $query = $this->db_onedev->query($sql); + $result = array ("total" => 1, "records" => array("xid" => 0)); + $this->sys_ok($result); + }else{ + $errors = array(); + if($exist_name != 0){ + array_push($errors,array('field'=>'name','msg'=>'name sudah ada yang pakai dong')); + } + + $result = array ("total" => -1,"errors" => $errors, "records" => 0); + $this->sys_ok($result); + } + } + + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + + + + public function deletebahan() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + //# ambil parameter input + $prm = $this->sys_input; + + $sql = "update t_bahan SET + T_BahanIsActive = 'N', + T_BahanLastUpdated = now() + WHERE + T_BahanID = ? + +"; + +$query = $this->db_onedev->query($sql, + array( + $prm['id'] + ) +); +// echo $query; +if (!$query) { + $this->sys_error_db("t_bahan delete"); + exit; +} + + + + + +$result = array ("total" => 1, "records" => array("xid" => 0)); +$this->sys_ok($result); + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + + public function deleteselect() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + //# ambil parameter input + $prm = $this->sys_input; + + $sql = "update t_samplestation SET + T_SampleStationIsActive = 'N', + T_SampleStationLastUpdated = now() + WHERE + T_SampleStationID = ? + +"; + +$query = $this->db_onedev->query($sql, + array( + $prm['id'] + ) +); +// echo $query; +if (!$query) { + $this->sys_error_db("t_samplestation delete"); + exit; +} + +$sql = "UPDATE m_user SET + M_UserIsActive = 'N', + M_UserLastUpdated = now() + WHERE + M_UserM_UserGroupID = ? +"; + +$query = $this->db_onedev->query($sql, + array( + $prm['id'] + ) +); +// echo $query; +if (!$query) { + $this->sys_error_db("m_user delete"); + exit; +} + +$result = array ("total" => 1, "records" => array("xid" => 0)); +$this->sys_ok($result); + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + + } diff --git a/application/controllers/Test_api.php b/application/controllers/Test_api.php new file mode 100644 index 00000000..7fa421be --- /dev/null +++ b/application/controllers/Test_api.php @@ -0,0 +1,18 @@ +get_param()); + echo "header : "; + print_r(getallheaders()); + } +} diff --git a/application/controllers/Test_rpt.php b/application/controllers/Test_rpt.php new file mode 100644 index 00000000..0cef45c6 --- /dev/null +++ b/application/controllers/Test_rpt.php @@ -0,0 +1,18 @@ +url = "http://odoo.sismedika.com:8070"; + $this->db_odoo = "odoo16_sismedika"; + $this->username = "admin@sismedika.com"; + $this->password = "duD#Z36qH5ctmRRD"; + $this->common = ripcord::client("{$this->url}/xmlrpc/2/common"); + $this->uid = $this->common->authenticate($this->db_odoo, $this->username, $this->password, array()); + $this->model = ripcord::client("{$this->url}/xmlrpc/2/object"); + $this->db->query("use one_support"); + $this->teams = [3, 22, 18, 21, 24, 15, 49, 34]; + } + + function external_by_date($date = "") + { + if ($date == "") $date = date("Y-m-d"); + $startDate = "$date 00:00:00"; + $endDate = "$date 23:59:59"; + // Define domain for search + $domain = [ + "&", + ['project_id', '!=', false], + "&", + ['project_id', '!=', "HISv3"], + "&", + ['employee_id', 'in', $this->teams], + "&", + ['date', '>=', $startDate], + ['date', '<=', $endDate] + ]; + $kwarg = array( + "limit" => 1000, + "offset" => 0, + "order" => "user_id", + 'fields' => array( + 'name', 'date', 'project_id', 'task_id', + 'unit_amount', 'user_id' + ) + ); + // Search for timesheet entries + $timesheets = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + 'account.analytic.line', + 'web_search_read', + array($domain), + $kwarg + ); + $total_hours = 0; + $result = []; + foreach ($timesheets["records"] as $r) { + $name = $r["name"]; + $date = $r["date"]; + $project = $r["project_id"][1]; + $hour = $r["unit_amount"]; + $date = $r["date"]; + $user = $r["user_id"][1]; + $total_hours += $hour; + + if (!isset($result[$user])) { + $result[$user] = []; + } + if (!isset($result[$user][$project])) { + $result[$user][$project] = $hour; + } else { + $result[$user][$project] += $hour; + } + } + return $result; + } + + function sas_one($date = "") + { + $sas_teams = [34, 36, 37, 38, 39, 40, 41, 42, 43, 44]; + if ($date == "") $date = date("Y-m-d"); + $startDate = "$date 00:00:00"; + $endDate = "$date 23:59:59"; + // Define domain for search + $domain = [ + "&", + ['project_id', '!=', false], + "&", + ['employee_id', 'in', $sas_teams], + "&", + ['date', '>=', $startDate], + ['date', '<=', $endDate] + ]; + $kwarg = array( + "limit" => 1000, + "offset" => 0, + "order" => "user_id", + 'fields' => array( + 'name', 'date', 'project_id', 'task_id', + 'unit_amount', 'user_id' + ) + ); + // Search for timesheet entries + $timesheets = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + 'account.analytic.line', + 'web_search_read', + array($domain), + $kwarg + ); + $total_hours = 0; + $result = []; + foreach ($timesheets["records"] as $r) { + $name = $r["name"]; + $date = $r["date"]; + $project = $r["project_id"][1]; + $task = $r["task_id"][1]; + $hour = $r["unit_amount"]; + $date = $r["date"]; + $user = $r["user_id"][1]; + $total_hours += $hour; + $total_hours += $hour; + $result[$user][] = [ + "project" => $project, + "task" => $task, + "date" => $date, + "desc" => $name, + "hour" => $hour + ]; + } + $table = "@startuml\n "; + $total_staff = 0; + $prev_user = ""; + $table .= "object Timesheet { \n"; + $table .= "\n"; + foreach ($result as $user => $data) { + if ($prev_user != $user) { + $table .= "$user\n"; + $table .= "<#lightblue,#black>|= Project |= Task |= Desc |= Hour |\n"; + $total_staff++; + $prev_user = $user; + } + foreach ($data as $d) { + $xdesc = $d["desc"]; + if (strlen($xdesc) > 30) { + $xdesc = substr($xdesc, 0, 26) . "..."; + } + $table .= "<#white>| {$d["project"]}| {$d["task"]}| {$xdesc}| {$d["hour"]}|\n"; + } + } + $msg = "Collection Date : " . date("Y-m-d H:i:s") . "\n"; + $msg .= "Total Hour : " . $total_hours . "\n"; + $msg .= "Total Staff: " . $total_staff . "\n"; + $msg .= "---\n"; + $table = str_replace("", $msg, $table); + if ($prev_user != "") { + $table .= "}\n\n"; + } + $table .= "@enduml"; + $img = $this->puml_post($table); + $url = "https://puml.sismedika.online/png/$img"; + $this->wa_to_sasone($url); + } + + function by_project_date($project, $date = "") + { + if ($date == "") $date = date("Y-m-d"); + $startDate = "$date 00:00:00"; + $endDate = "$date 23:59:59"; + // Define domain for search + $domain = [ + "&", + ['project_id', '!=', false], + "&", + ['project_id', 'ilike', "$project"], + "&", + ['date', '>=', $startDate], + ['date', '<=', $endDate] + ]; + + $kwarg = array( + "limit" => 1000, + "offset" => 0, + "order" => "user_id", + 'fields' => array( + 'name', 'date', 'task_id', + 'unit_amount', 'user_id' + ) + ); + // Search for timesheet entries + $timesheets = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + 'account.analytic.line', + 'web_search_read', + array($domain), + $kwarg + ); + $total_hours = 0; + $result = []; + foreach ($timesheets["records"] as $r) { + $name = $r["name"]; + $date = $r["date"]; + $task = $r["task_id"][1]; + $hour = $r["unit_amount"]; + $date = $r["date"]; + $user = $r["user_id"][1]; + $total_hours += $hour; + $result[$user][] = [ + "task" => $task, + "date" => $date, + "desc" => $name, + "hour" => $hour + ]; + } + $table = "@startuml\n "; + $msg = "Collection Date : " . date("Y-m-d H:i:s") . "\n"; + $msg .= "Total Hour : " . $total_hours . "\n"; + $total_staff = 0; + $prev_user = ""; + $table .= "object Timesheet { \n"; + $table .= "\n"; + foreach ($result as $user => $data) { + if ($prev_user != $user) { + $table .= "$user\n"; + $table .= "<#lightblue,#black>|= Date |= Task |= Desc |= Hour |\n"; + $total_staff++; + $prev_user = $user; + } + foreach ($data as $d) { + $xdesc = $d["desc"]; + if (strlen($xdesc) > 50) { + $xdesc = substr($xdesc, 0, 46) . "..."; + } + $table .= "<#white>| {$d["date"]}| {$d["task"]}| {$xdesc}| {$d["hour"]}|\n"; + } + } + $msg .= "Total Staff: " . $total_staff . "\n"; + $msg .= "---\n"; + $table = str_replace("", $msg, $table); + $result = $this->external_by_date($date); + $have_ext = false; + if (count($result) > 0) { + $have_ext = true; + $table .= "\n\n\n"; + $table .= "Non HIS V3\n"; + $table .= "<#lightblue,#black>|= User|= Project|= Hour |\n"; + $total_hours = 0; + foreach ($result as $u => $r) { + foreach ($r as $prj => $hour) { + $table .= "<#white>| {$u}| {$prj}| {$hour}|\n"; + $total_hours += $hour; + } + } + echo "\n"; + $table .= "Total Hour: " . $total_hours . "\n"; + } + if ($prev_user != "" || $have_ext) { + $table .= "}\n\n"; + } + $table .= "@enduml"; + $img = $this->puml_post($table); + $url = "https://puml.sismedika.online/png/$img"; + //echo $url; + $this->wa_to_group($url); + } + function wa_to_sasone( + $url + ) { + $this->load->library("Wa_sas"); + $hp = "6282113702602-1584412485@g.us"; + $resp = $this->wa_sas->send_image( + $hp, + "Timesheet Summary", + $url, + "image/png", + "sasone-status", + "png", + true + ); + print_r($resp); + } + + function wa_to_group( + $url + ) { + $this->load->library("Wa_sas"); + //$hp = "6287823783747"; + //group set to true + $hp = "120363194169273747@g.us"; + //$resp = $this->wa_sas->send_message($hp, $msg,true); + // print_r($resp); + $resp = $this->wa_sas->send_image( + $hp, + "Timesheet Summary", + $url, + "image/png", + "hisv3-status", + "png", + true + ); + print_r($resp); + } + function wa_to_sasone_done( + $msg + ) { + $this->load->library("Wa_sas"); + $hp = "6287823783747"; + //$hp="6282113702602-1584412485@g.us"; + //bisone supporter + //$hp = "6281328282909-1583223560@g.us"; + $resp = $this->wa_sas->send_message($hp, $msg, true); + } + + function puml_post($data) + { + $url = "https://puml.sismedika.online/coder"; + $ch = curl_init($url); + $payload = $data; + curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/plain')); + # Return response instead of printing. + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + # Send request. + $result = curl_exec($ch); + curl_close($ch); + return $result; + } + function bool_day($inp_dow) + { + $dow = strtolower(date("D", strtotime("now"))); + if ($inp_dow == $dow) return true; + return false; + } +} diff --git a/application/controllers/Timesheet_v2.php b/application/controllers/Timesheet_v2.php new file mode 100644 index 00000000..a99530f9 --- /dev/null +++ b/application/controllers/Timesheet_v2.php @@ -0,0 +1,575 @@ +url = "http://odoo.sismedika.com:8070"; + $this->db_odoo = "odoo16_sismedika"; + $this->username = "admin@sismedika.com"; + $this->password = "duD#Z36qH5ctmRRD"; + $this->common = ripcord::client("{$this->url}/xmlrpc/2/common"); + $this->uid = $this->common->authenticate($this->db_odoo, $this->username, $this->password, array()); + $this->model = ripcord::client("{$this->url}/xmlrpc/2/object"); + $this->db->query("use one_support"); + $this->teams = [3, 22, 18, 21, 24, 15, 49, 34]; + } + + // --- v2 + // + function mobile($date = "") + { + $teams = [30, 32, 29, 27, 43]; + if ($date == "") $date = date("Y-m-d"); + $startDate = "$date 00:00:00"; + $endDate = "$date 23:59:59"; + // Define domain for search + $domain = [ + "&", + ['project_id', '!=', false], + "&", + ['employee_id', 'in', $teams], + "&", + ['date', '>=', $startDate], + ['date', '<=', $endDate] + ]; + $kwarg = array( + "limit" => 1000, + "offset" => 0, + "order" => "user_id", + 'fields' => array( + 'name', 'date', 'project_id', 'task_id', + 'unit_amount', 'user_id' + ) + ); + // Search for timesheet entries + $timesheets = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + 'account.analytic.line', + 'web_search_read', + array($domain), + $kwarg + ); + $total_hours = 0; + $result = []; + foreach ($timesheets["records"] as $r) { + $name = $r["name"]; + $date = $r["date"]; + $project = $r["project_id"][1]; + $task = $r["task_id"][1]; + $hour = round($r["unit_amount"], 1); + $date = $r["date"]; + $user = $r["user_id"][1]; + $total_hours += $hour; + $total_hours += $hour; + $result[$user][] = [ + "project" => $project, + "task" => $task, + "date" => $date, + "desc" => $name, + "hour" => $hour + ]; + } + $table = "@startuml\n "; + $total_staff = 0; + $prev_user = ""; + $table .= "object Timesheet { \n"; + $table .= "\n"; + foreach ($result as $user => $data) { + if ($prev_user != $user) { + $table .= "$user\n"; + $table .= "<#lightblue,#black>|= Project |= Task |= Desc |= Hour |\n"; + $total_staff++; + $prev_user = $user; + } + foreach ($data as $d) { + $xdesc = $d["desc"]; + if (strlen($xdesc) > 30) { + $xdesc = substr($xdesc, 0, 26) . "..."; + } + $table .= "<#white>| {$d["project"]}| {$d["task"]}| {$xdesc}| {$d["hour"]}|\n"; + } + } + $msg = "Collection Date : " . date("Y-m-d H:i:s") . "\n"; + $msg .= "Total Hour : " . $total_hours . "\n"; + $msg .= "Total Staff: " . $total_staff . "\n"; + $msg .= "---\n"; + $table = str_replace("", $msg, $table); + if ($prev_user != "") { + $table .= "}\n\n"; + } + $table .= "@enduml"; + $img = $this->puml_post($table); + $url = "https://puml.sismedika.online/png/$img"; + $this->wa_to_mobile($url); + } + function wa_to_mobile( + $url + ) { + $this->load->library("Wa_sas"); + $hp = "120363166799845051@g.us"; + $resp = $this->wa_sas->send_image( + $hp, + "Timesheet Summary", + $url, + "image/png", + "dev.backend-status", + "png", + true + ); + print_r($resp); + } + + function ais($date = "") + { + $teams = [19, 28, 47, 31, 44]; + if ($date == "") $date = date("Y-m-d"); + $startDate = "$date 00:00:00"; + $endDate = "$date 23:59:59"; + // Define domain for search + $domain = [ + "&", + ['project_id', '!=', false], + "&", + ['employee_id', 'in', $teams], + "&", + ['date', '>=', $startDate], + ['date', '<=', $endDate] + ]; + $kwarg = array( + "limit" => 1000, + "offset" => 0, + "order" => "user_id", + 'fields' => array( + 'name', 'date', 'project_id', 'task_id', + 'unit_amount', 'user_id' + ) + ); + // Search for timesheet entries + $timesheets = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + 'account.analytic.line', + 'web_search_read', + array($domain), + $kwarg + ); + $total_hours = 0; + $result = []; + foreach ($timesheets["records"] as $r) { + $name = $r["name"]; + $date = $r["date"]; + $project = $r["project_id"][1]; + $task = $r["task_id"][1]; + $hour = round($r["unit_amount"], 1); + $date = $r["date"]; + $user = $r["user_id"][1]; + $total_hours += $hour; + $total_hours += $hour; + $result[$user][] = [ + "project" => $project, + "task" => $task, + "date" => $date, + "desc" => $name, + "hour" => $hour + ]; + } + $table = "@startuml\n "; + $total_staff = 0; + $prev_user = ""; + $table .= "object Timesheet { \n"; + $table .= "\n"; + foreach ($result as $user => $data) { + if ($prev_user != $user) { + $table .= "$user\n"; + $table .= "<#lightblue,#black>|= Project |= Task |= Desc |= Hour |\n"; + $total_staff++; + $prev_user = $user; + } + foreach ($data as $d) { + $xdesc = $d["desc"]; + if (strlen($xdesc) > 30) { + $xdesc = substr($xdesc, 0, 26) . "..."; + } + $table .= "<#white>| {$d["project"]}| {$d["task"]}| {$xdesc}| {$d["hour"]}|\n"; + } + } + $msg = "Collection Date : " . date("Y-m-d H:i:s") . "\n"; + $msg .= "Total Hour : " . $total_hours . "\n"; + $msg .= "Total Staff: " . $total_staff . "\n"; + $msg .= "---\n"; + $table = str_replace("", $msg, $table); + if ($prev_user != "") { + $table .= "}\n\n"; + } + $table .= "@enduml"; + $img = $this->puml_post($table); + $url = "https://puml.sismedika.online/png/$img"; + $this->wa_to_ais($url); + } + function wa_to_ais( + $url + ) { + $this->load->library("Wa_sas"); + $hp = "120363185074039892@g.us"; + $resp = $this->wa_sas->send_image( + $hp, + "Timesheet Summary", + $url, + "image/png", + "dev.backend-status", + "png", + true + ); + print_r($resp); + } + function wa_to_me( + $url + ) { + $this->load->library("Wa_sas"); + $hp = "6287823783747"; + $resp = $this->wa_sas->send_image( + $hp, + "Timesheet Summary", + $url, + "image/png", + "ais-status", + "png" + ); + print_r($resp); + } + + + + + + + function external_by_date($date = "") + { + if ($date == "") $date = date("Y-m-d"); + $startDate = "$date 00:00:00"; + $endDate = "$date 23:59:59"; + // Define domain for search + $domain = [ + "&", + ['project_id', '!=', false], + "&", + ['project_id', '!=', "HISv3"], + "&", + ['employee_id', 'in', $this->teams], + "&", + ['date', '>=', $startDate], + ['date', '<=', $endDate] + ]; + $kwarg = array( + "limit" => 1000, + "offset" => 0, + "order" => "user_id", + 'fields' => array( + 'name', 'date', 'project_id', 'task_id', + 'unit_amount', 'user_id' + ) + ); + // Search for timesheet entries + $timesheets = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + 'account.analytic.line', + 'web_search_read', + array($domain), + $kwarg + ); + $total_hours = 0; + $result = []; + foreach ($timesheets["records"] as $r) { + $name = $r["name"]; + $date = $r["date"]; + $project = $r["project_id"][1]; + $hour = round($r["unit_amount"], 1); + $date = $r["date"]; + $user = $r["user_id"][1]; + $total_hours += $hour; + + if (!isset($result[$user])) { + $result[$user] = []; + } + if (!isset($result[$user][$project])) { + $result[$user][$project] = $hour; + } else { + $result[$user][$project] += $hour; + } + } + return $result; + } + + function sas_one($date = "") + { + $sas_teams = [34, 36, 37, 38, 39, 40, 41, 42, 43, 44]; + if ($date == "") $date = date("Y-m-d"); + $startDate = "$date 00:00:00"; + $endDate = "$date 23:59:59"; + // Define domain for search + $domain = [ + "&", + ['project_id', '!=', false], + "&", + ['employee_id', 'in', $sas_teams], + "&", + ['date', '>=', $startDate], + ['date', '<=', $endDate] + ]; + $kwarg = array( + "limit" => 1000, + "offset" => 0, + "order" => "user_id", + 'fields' => array( + 'name', 'date', 'project_id', 'task_id', + 'unit_amount', 'user_id' + ) + ); + // Search for timesheet entries + $timesheets = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + 'account.analytic.line', + 'web_search_read', + array($domain), + $kwarg + ); + $total_hours = 0; + $result = []; + foreach ($timesheets["records"] as $r) { + $name = $r["name"]; + $date = $r["date"]; + $project = $r["project_id"][1]; + $task = $r["task_id"][1]; + $hour = round($r["unit_amount"], 1); + $date = $r["date"]; + $user = $r["user_id"][1]; + $total_hours += $hour; + $total_hours += $hour; + $result[$user][] = [ + "project" => $project, + "task" => $task, + "date" => $date, + "desc" => $name, + "hour" => $hour + ]; + } + $table = "@startuml\n "; + $total_staff = 0; + $prev_user = ""; + $table .= "object Timesheet { \n"; + $table .= "\n"; + foreach ($result as $user => $data) { + if ($prev_user != $user) { + $table .= "$user\n"; + $table .= "<#lightblue,#black>|= Project |= Task |= Desc |= Hour |\n"; + $total_staff++; + $prev_user = $user; + } + foreach ($data as $d) { + $xdesc = $d["desc"]; + if (strlen($xdesc) > 30) { + $xdesc = substr($xdesc, 0, 26) . "..."; + } + $table .= "<#white>| {$d["project"]}| {$d["task"]}| {$xdesc}| {$d["hour"]}|\n"; + } + } + $msg = "Collection Date : " . date("Y-m-d H:i:s") . "\n"; + $msg .= "Total Hour : " . $total_hours . "\n"; + $msg .= "Total Staff: " . $total_staff . "\n"; + $msg .= "---\n"; + $table = str_replace("", $msg, $table); + if ($prev_user != "") { + $table .= "}\n\n"; + } + $table .= "@enduml"; + $img = $this->puml_post($table); + $url = "https://puml.sismedika.online/png/$img"; + $this->wa_to_sasone($url); + } + + function by_project_date($project, $date = "") + { + if ($date == "") $date = date("Y-m-d"); + $startDate = "$date 00:00:00"; + $endDate = "$date 23:59:59"; + // Define domain for search + $domain = [ + "&", + ['project_id', '!=', false], + "&", + ['project_id', 'ilike', "$project"], + "&", + ['date', '>=', $startDate], + ['date', '<=', $endDate] + ]; + + $kwarg = array( + "limit" => 1000, + "offset" => 0, + "order" => "user_id", + 'fields' => array( + 'name', 'date', 'task_id', + 'unit_amount', 'user_id' + ) + ); + // Search for timesheet entries + $timesheets = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + 'account.analytic.line', + 'web_search_read', + array($domain), + $kwarg + ); + $total_hours = 0; + $result = []; + foreach ($timesheets["records"] as $r) { + $name = $r["name"]; + $date = $r["date"]; + $task = $r["task_id"][1]; + $hour = round($r["unit_amount"], 1); + $date = $r["date"]; + $user = $r["user_id"][1]; + $total_hours += $hour; + $result[$user][] = [ + "task" => $task, + "date" => $date, + "desc" => $name, + "hour" => $hour + ]; + } + $table = "@startuml\n "; + $msg = "Collection Date : " . date("Y-m-d H:i:s") . "\n"; + $msg .= "Total Hour : " . $total_hours . "\n"; + $total_staff = 0; + $prev_user = ""; + $table .= "object Timesheet { \n"; + $table .= "\n"; + foreach ($result as $user => $data) { + if ($prev_user != $user) { + $table .= "$user\n"; + $table .= "<#lightblue,#black>|= Date |= Task |= Desc |= Hour |\n"; + $total_staff++; + $prev_user = $user; + } + foreach ($data as $d) { + $xdesc = $d["desc"]; + if (strlen($xdesc) > 50) { + $xdesc = substr($xdesc, 0, 46) . "..."; + } + $table .= "<#white>| {$d["date"]}| {$d["task"]}| {$xdesc}| {$d["hour"]}|\n"; + } + } + $msg .= "Total Staff: " . $total_staff . "\n"; + $msg .= "---\n"; + $table = str_replace("", $msg, $table); + $result = $this->external_by_date($date); + $have_ext = false; + if (count($result) > 0) { + $have_ext = true; + $table .= "\n\n\n"; + $table .= "Non HIS V3\n"; + $table .= "<#lightblue,#black>|= User|= Project|= Hour |\n"; + $total_hours = 0; + foreach ($result as $u => $r) { + foreach ($r as $prj => $hour) { + $table .= "<#white>| {$u}| {$prj}| {$hour}|\n"; + $total_hours += $hour; + } + } + echo "\n"; + $table .= "Total Hour: " . $total_hours . "\n"; + } + if ($prev_user != "" || $have_ext) { + $table .= "}\n\n"; + } + $table .= "@enduml"; + $img = $this->puml_post($table); + $url = "https://puml.sismedika.online/png/$img"; + //echo $url; + $this->wa_to_group($url); + } + function wa_to_sasone( + $url + ) { + $this->load->library("Wa_sas"); + $hp = "6282113702602-1584412485@g.us"; + $resp = $this->wa_sas->send_image( + $hp, + "Timesheet Summary", + $url, + "image/png", + "sasone-status", + "png", + true + ); + print_r($resp); + } + + function wa_to_group( + $url + ) { + $this->load->library("Wa_sas"); + //$hp = "6287823783747"; + //group set to true + $hp = "120363194169273747@g.us"; + //$resp = $this->wa_sas->send_message($hp, $msg,true); + // print_r($resp); + $resp = $this->wa_sas->send_image( + $hp, + "Timesheet Summary", + $url, + "image/png", + "hisv3-status", + "png", + true + ); + print_r($resp); + } + function wa_to_sasone_done( + $msg + ) { + $this->load->library("Wa_sas"); + $hp = "6287823783747"; + //$hp="6282113702602-1584412485@g.us"; + //bisone supporter + //$hp = "6281328282909-1583223560@g.us"; + $resp = $this->wa_sas->send_message($hp, $msg, true); + } + + function puml_post($data) + { + $url = "https://puml.sismedika.online/coder"; + $ch = curl_init($url); + $payload = $data; + curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/plain')); + # Return response instead of printing. + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + # Send request. + $result = curl_exec($ch); + curl_close($ch); + return $result; + } + function bool_day($inp_dow) + { + $dow = strtolower(date("D", strtotime("now"))); + if ($inp_dow == $dow) return true; + return false; + } +} diff --git a/application/controllers/Timesheet_v3.php b/application/controllers/Timesheet_v3.php new file mode 100644 index 00000000..5a27bc86 --- /dev/null +++ b/application/controllers/Timesheet_v3.php @@ -0,0 +1,189 @@ +url = "http://odoo.sismedika.com:8070"; + $this->db_odoo = "odoo16_sismedika"; + $this->username = "admin@sismedika.com"; + $this->password = "duD#Z36qH5ctmRRD"; + $this->common = ripcord::client("{$this->url}/xmlrpc/2/common"); + $this->uid = $this->common->authenticate($this->db_odoo, $this->username, $this->password, array()); + $this->model = ripcord::client("{$this->url}/xmlrpc/2/object"); + $this->db->query("use one_support"); + $this->teams = [3, 22, 18, 21, 24, 15, 49, 34]; + } + + + + // sismedika + // 1. Design: Inggrit, Ira, Nana, Zalfa + //2. HIS 2: Heri, Bagas,Febio, Domi, Morris, Putri + //3. App: Tb,Rajif, Pajri, Hanif, Adib + //4. Backoffice: Gifari, Ivan, Moko, Akbar, Stephen + //5. LIS: Fajri, Hanan, Fitri,Andi, Sindhu + //6. HIS 3: Suritno, Ramdhan, Fajar, Rubi + //7. Suppport : Yulius, Jafar, Ahmad fadil, Andreas, Ainun, Indra Waskito + //8. Document : Fardil, Ari Antoni, Heru + function ts_all($date = "") + { + $design_teams = [14, 36, 15, 16]; + $this->ts_team("Design Timesheet", $design_teams, $date); + $hisv2_teams = [17, 24, 26, 25, 23, 11]; + $this->ts_team("HISv2 Timesheet", $hisv2_teams, $date); + $app_teams = [30, 29, 32, 27, 43]; + $this->ts_team("App Timesheet", $app_teams, $date); + $backoffice_teams = [19, 28, 47, 31, 44]; + $this->ts_team("Backoffice Timesheet", $backoffice_teams, $date); + $lis_teams = [37, 39, 40, 41, 42]; + $this->ts_team("LIS Timesheet", $lis_teams, $date); + $hisv3_teams = [18, 21, 20, 22]; + $this->ts_team("HIS v3 Timesheet", $hisv3_teams, $date); + $support_teams = [5, 7, 45, 4, 9, 8, 10]; + $this->ts_team("Support Timesheet", $support_teams, $date); + $doc_teams = [13, 38, 12]; + $this->ts_team("Doc Timesheet", $doc_teams, $date); + } + function ts_team($title, $teams, $date = "") + { + if ($date == "") $date = date("Y-m-d"); + if ($date == "ytd") { + $date = date("Y-m-d", strtotime("now - 1 day")); + } + $startDate = "$date 00:00:00"; + $endDate = "$date 23:59:59"; + // Define domain for search + $domain = [ + "&", + ['project_id', '!=', false], + "&", + ['employee_id', 'in', $teams], + "&", + ['date', '>=', $startDate], + ['date', '<=', $endDate] + ]; + $kwarg = array( + "limit" => 1000, + "offset" => 0, + "order" => "user_id", + 'fields' => array( + 'name', 'date', 'project_id', 'task_id', + 'unit_amount', 'user_id' + ) + ); + // Search for timesheet entries + $timesheets = $this->model->execute_kw( + $this->db_odoo, + $this->uid, + $this->password, + 'account.analytic.line', + 'web_search_read', + array($domain), + $kwarg + ); + $total_hours = 0; + $result = []; + foreach ($timesheets["records"] as $r) { + $name = $r["name"]; + $date = $r["date"]; + $project = $r["project_id"][1]; + $task = $r["task_id"][1]; + $hour = round($r["unit_amount"], 1); + $date = $r["date"]; + $user = $r["user_id"][1]; + $total_hours += $hour; + $total_hours += $hour; + $result[$user][] = [ + "project" => $project, + "task" => $task, + "date" => $date, + "desc" => $name, + "hour" => $hour + ]; + } + $table = "@startuml\n "; + $total_staff = 0; + $prev_user = ""; + $table .= "object Timesheet { \n"; + $table .= "\n"; + foreach ($result as $user => $data) { + if ($prev_user != $user) { + $table .= "$user\n"; + $table .= "<#lightblue,#black>|= Project |= Task |= Desc |= Hour |\n"; + $total_staff++; + $prev_user = $user; + } + foreach ($data as $d) { + $xdesc = $d["desc"]; + if (strlen($xdesc) > 30) { + $xdesc = substr($xdesc, 0, 26) . "..."; + } + $table .= "<#white>| {$d["project"]}| {$d["task"]}| {$xdesc}| {$d["hour"]}|\n"; + } + } + $msg = "Collection Date : " . date("Y-m-d H:i:s") . "\n"; + $msg .= "Timesheet Date : " . $date . "\n"; + $msg .= "Total Hour : " . $total_hours . "\n"; + $msg .= "Total Staff: " . $total_staff . "\n"; + $msg .= "---\n"; + $table = str_replace("", $msg, $table); + if ($prev_user != "") { + $table .= "}\n\n"; + } + $table .= "@enduml"; + $img = $this->puml_post($table); + $url = "https://puml.sismedika.online/png/$img"; + $this->wa_to_me($url, $title); + } + // dev team wa group + // 120363267858371806 + function wa_to_me( + $url, + $title + ) { + $this->load->library("Wa_sas"); + $hp = "120363267858371806@g.us"; + $resp = $this->wa_sas->send_image( + $hp, + "$title", + $url, + "image/png", + "$title", + "png", + true + ); + print_r($resp); + } + + + + + + function puml_post($data) + { + $url = "https://puml.sismedika.online/coder"; + $ch = curl_init($url); + $payload = $data; + curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); + curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/plain')); + # Return response instead of printing. + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + # Send request. + $result = curl_exec($ch); + curl_close($ch); + return $result; + } + function bool_day($inp_dow) + { + $dow = strtolower(date("D", strtotime("now"))); + if ($inp_dow == $dow) return true; + return false; + } +} diff --git a/application/controllers/Ttv_dummy.php b/application/controllers/Ttv_dummy.php new file mode 100644 index 00000000..1cf07d48 --- /dev/null +++ b/application/controllers/Ttv_dummy.php @@ -0,0 +1,47 @@ +sys_input; + foreach ($a_data as $d) { + $d["obv_json"] = json_encode($d["obv"]); + unset($d["obv"]); + $qry = $this->db->insert("ttv_dummy.incoming", $d); + if (!$qry) { + echo json_encode([ + "status" => "ERR", + "message" => "Err incoming " . $this->db->error()["message"] + ]); + exit; + } + } + echo json_encode(["status" => "OK", "message" => ""]); + } + function qry() + { + $data = $this->sys_input; + $medrec = $data["medrec"]; + $sql = "select * from ttv_dummy.xorder where medrec = ?"; + $qry = $this->db->query($sql,[$medrec]); + if (!$qry) { + echo json_encode([ + "status" => "ERR", + "message" => "Err incoming " . $this->db->error()["message"] + ]); + } + $rows = $qry->result_array(); + if (count($rows) == 0) { + echo json_encode([ + "status" => "E01", + "message" => "Patient not found" + ]); + exit; + } + echo json_encode(["status"=>"OK", "data"=> $rows[0]]); + } +} diff --git a/application/controllers/Wa_webhook.php b/application/controllers/Wa_webhook.php new file mode 100644 index 00000000..d9b60e36 --- /dev/null +++ b/application/controllers/Wa_webhook.php @@ -0,0 +1,58 @@ +post($json); + } else { + file_put_contents("/xtmp/webhook-raw", "\nno tag : $message\n", FILE_APPEND); + } + } else { + file_put_contents("/xtmp/webhook-raw", "\ninvalid json\n", FILE_APPEND); + } + echo json_encode(["status" => "OK"]); + } + function post($json) + { + //$url = 'http://10.9.10.205:5678/webhook-test/aea7f5ff-f24d-4afe-a52e-8b12d328a3b5'; + $url = "http://10.9.10.205:5678/webhook/428e0945-f0fc-4dce-a043-2f789a0cafda"; + $jsonData = json_encode($json); + + // Initialize cURL + $ch = curl_init($url); + + // Set cURL options + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData); + curl_setopt($ch, CURLOPT_HTTPHEADER, [ + 'Content-Type: application/json', + 'Content-Length: ' . strlen($jsonData) + ]); + + // Execute request and capture response + $response = curl_exec($ch); + + // Check for errors + if (curl_errno($ch)) { + $c_msg = 'cURL error: ' . curl_error($ch); + } else { + $c_msg = 'Response: ' . $response; + } + file_put_contents("/xtmp/webhook-raw", "\n$c_msg\n", FILE_APPEND); + // Close cURL + curl_close($ch); + } +} diff --git a/application/controllers/Welcome.php b/application/controllers/Welcome.php new file mode 100755 index 00000000..51094edd --- /dev/null +++ b/application/controllers/Welcome.php @@ -0,0 +1,25 @@ + + * @see https://codeigniter.com/user_guide/general/urls.html + */ + public function index() + { + echo(".:: -- ::."); + } +} diff --git a/application/controllers/Xraw.php b/application/controllers/Xraw.php new file mode 100644 index 00000000..888098a0 --- /dev/null +++ b/application/controllers/Xraw.php @@ -0,0 +1,13 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/application/controllers/mockup/Subgroup.php b/application/controllers/mockup/Subgroup.php new file mode 100644 index 00000000..ae90e8bb --- /dev/null +++ b/application/controllers/mockup/Subgroup.php @@ -0,0 +1,1145 @@ +db_onedev = $this->load->database("onedev", true); + } + + + function lookupsubsubgroup(){ + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $id = $prm['id']; + $sql = "select Nat_SubSubGroupID as id,Nat_SubGroupID,Nat_SubGroupName, + nat_subsubgroup.* + from nat_subsubgroup + JOIN nat_subgroup ON Nat_SubSubGroupSubGroupID = Nat_SubGroupID + WHERE + Nat_SubSubGroupSubGroupID = {$id} AND Nat_SubSubGroupIsActive = 'Y'"; + // echo $sql; + $query = $this->db_onedev->query($sql, $sql_param); + $rows = $query->result_array(); + if($rows){ + } + + $result = array ("total" => count($rows), "records" => $rows); + $this->sys_ok($result); + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + public function lookup() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + $prm = $this->sys_input; + $search = $prm['search']; + $all = $prm['all']; + $limit = ''; + if($all == 'N'){ + $limit = ' LIMIT 10'; + } + $sql = "select COUNT(*) as total + from nat_subgroup + where + Nat_SubGroupIsActive = 'Y'"; + $sql_param = array($search); + $total = $this->db_onedev->query($sql,$sql_param)->row()->total; + + + $sql = "select Nat_SubGroupID as id, + Nat_SubGroupCode as code, + Nat_SubGroupName as name, + Nat_SubGroupNat_GroupID as groupid, + Nat_SubGroupLangName as namelang, + '' as T_TestIsNonLabName,Nat_GroupName ,Nat_GroupID, + nat_subgroup.* + from nat_subgroup + join nat_group on Nat_SubGroupNat_GroupID = Nat_GroupID + where + ( Nat_SubGroupName LIKE CONCAT('%','{$search}','%') OR + Nat_SubGroupCode LIKE CONCAT('%','{$search}','%') + )AND + Nat_SubGroupIsActive = 'Y' + GROUP BY Nat_SubGroupID + ORDER BY Nat_SubGroupID ASC $limit"; + $sql_param = array($search); + $query = $this->db_onedev->query($sql); + //echo $this->db_onedev->last_query(); + if ($query) { + $rows = $query->result_array(); + + + } else { + $this->sys_error_db("nat_subgroup select"); + exit; + } + + $result = array ("total" => $total, "total_filter"=>count($rows),"records" => $rows); + $this->sys_ok($result); + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + + + public function addnewsubgroup() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + //# ambil parameter input + $prm = $this->sys_input; + $name = $prm['name']; + $namelang = $prm['namelang']; + $code = $prm['code']; + $group = $prm['group']; + $query = "SELECT COUNT(*) as exist FROM nat_subgroup WHERE Nat_SubGroupIsActive = 'Y' AND Nat_SubGroupCode = '{$code}'"; + $exist_code = $this->db_onedev->query($query)->row()->exist; + if($exist_code == 0){ + $sql = "insert into nat_subgroup( + Nat_SubGroupCode, + Nat_SubGroupName, + Nat_SubGroupLangName, + Nat_SubGroupNat_GroupID, + Nat_SubGroupCreated, + Nat_SubGroupLastUpdated + ) + values( ?, ?, ?,?, now(), now())"; + $query = $this->db_onedev->query($sql, + array( + $code, + $name, + $namelang, + $group + ) + ); + //echo $query; + if (!$query) { + $this->sys_error_db("nat_subgroup insert"); + exit; + } + + $result = array ("total" => 1, "records" => array("xid" => 0)); + $this->sys_ok($result); + $last_id = $this->db_onedev->insert_id(); + }else{ + $errors = array(); + if($exist_code != 0){ + // array_push($errors,array('field'=>'code','msg'=>'Kode sudah ada yang pakai dong')); + + $sql = "insert into nat_subgroup( + Nat_SubGroupCode, + Nat_SubGroupName, + Nat_SubGroupLangName, + Nat_SubGroupNat_GroupID, + Nat_SubGroupCreated, + Nat_SubGroupLastUpdated + ) + values( ?, ?, ?,?, now(), now())"; + $query = $this->db_onedev->query($sql, + array( + $code, + $name, + $namelang, + $group + ) + ); + //echo $query; + if (!$query) { + $this->sys_error_db("nat_subgroup insert"); + exit; + } + + $result = array ("total" => 1, "records" => array("xid" => 0)); + $this->sys_ok($result); + $last_id = $this->db_onedev->insert_id(); + } + //$result = array ("total" => -1,"errors" => $errors, "records" => 0); + // $this->sys_ok($result); + } + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + + public function editsubgroup() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + //# ambil parameter input + $prm = $this->sys_input; + $id = $prm['id']; + $name = $prm['name']; + $namelang = $prm['namelang']; + $code = $prm['code']; + $group = $prm['group']; + $userid = $this->sys_user["M_UserID"]; + $query = "SELECT COUNT(*) as exist FROM nat_subgroup WHERE Nat_SubGroupIsActive = 'Y' AND Nat_SubGroupCode = '{$code}' AND Nat_SubGroupID <> {$prm['id']}"; + $exist_code = $this->db_onedev->query($query)->row()->exist; + if($exist_code == 0){ + $sqlcompany = "update nat_subgroup SET + Nat_SubGroupCode = ?, + Nat_SubGroupName = ?, + Nat_SubGroupLangName = ?, + Nat_SubGroupNat_GroupID = ?, + Nat_SubGroupLastUpdated = now() + where + Nat_SubGroupID = ? + "; + $querycompany = $this->db_onedev->query($sqlcompany, + array( + $code, + $name, + $namelang, + $group, + $id + ) + ); + // echo $query; + if (!$querycompany) { + $this->sys_error_db("nat_subgroup update"); + exit; + } + $result = array ("total" => 1, "records" => array("xid" => $id)); + $this->sys_ok($result); + }else{ + $errors = array(); + if($exist_code != 0){ + + $sqlcompany = "update nat_subgroup SET + Nat_SubGroupCode = ?, + Nat_SubGroupName = ?, + Nat_SubGroupLangName = ?, + Nat_SubGroupNat_GroupID = ?, + Nat_SubGroupLastUpdated = now() + where + Nat_SubGroupID = ? + "; + $querycompany = $this->db_onedev->query($sqlcompany, + array( + $code, + $name, + $namelang, + $group, + $id + ) + ); + // echo $query; + if (!$querycompany) { + $this->sys_error_db("nat_subgroup update"); + exit; + } + $result = array ("total" => 1, "records" => array("xid" => $id)); + $this->sys_ok($result); + } + // $result = array ("total" => -1,"errors" => $errors, "records" => 0); + // $this->sys_ok($result); + } + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + public function addnewsubsubgroup() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + //# ambil parameter input + $prm = $this->sys_input; + $subgroupid = $prm['subgroupid']; + $subsubgroupcode = $prm['subsubgroupcode']; + $subsubgroupname = $prm['subsubgroupname']; + $subsubgroupnamelang = $prm['subsubgroupnamelang']; + + if($prm['xid'] == 0){ + $query = "SELECT COUNT(*) as exist FROM nat_subsubgroup WHERE Nat_SubsubgroupIsActive = 'Y' AND Nat_SubsubgroupName = '{$name}'"; + $exist_name = $this->db_onedev->query($query)->row()->exist; + + if($exist_name == 0){ + $sql = "insert into nat_subsubgroup( + Nat_SubSubGroupSubGroupID, + Nat_SubSubGroupCode, + Nat_SubSubGroupName, + Nat_SubSubGroupLangName, + Nat_SubSubGroupLasUpdated + ) + values( ?,?,?,? ,now())"; +$query = $this->db_onedev->query($sql, + array( + $subgroupid, + $subsubgroupcode , + $subsubgroupname , + $subsubgroupnamelang + ) +); +if (!$query) { + $this->sys_error_db("nat_subsubgroup insert",$this->db_onedev); + exit; +} +$result = array ("total" => 1, "records" => array("xid" => 0)); +$this->sys_ok($result); + }else{ + $errors = array(); + if($exist_name != 0){ + array_push($errors,array('field'=>'name','msg'=>'Nama sudah ada yang pakai dong')); + } + + + $result = array ("total" => -1,"errors" => $errors, "records" => 0); + $this->sys_ok($result); + } + }else{ + $query = "SELECT COUNT(*) as exist FROM nat_subsubgroup WHERE Nat_SubSubGroupIsActive = 'Y' AND Nat_SubSubGroupName = '{$subsubgroupname}' AND Nat_SubSubGroupID <> {$prm['xid']}"; + $exist_name = $this->db_onedev->query($query)->row()->exist; + //echo $query; + + //echo $query; + if($exist_name == 0 ){ + $sql = "UPDATE nat_subsubgroup SET Nat_SubSubGroupName = '{$subsubgroupname}', Nat_SubSubGroupCode = '{$subsubgroupcode}' ,Nat_SubSubGroupLangName = '{$subsubgroupnamelang}' WHERE Nat_SubSubGroupID = '{$prm['xid']}'"; + //echo $sql; + $query = $this->db_onedev->query($sql); + $result = array ("total" => 1, "records" => array("xid" => 0)); + $this->sys_ok($result); + }else{ + $errors = array(); + if($exist_name != 0){ + array_push($errors,array('field'=>'name','msg'=>'name sudah ada yang pakai dong')); + } + + $result = array ("total" => -1,"errors" => $errors, "records" => 0); + $this->sys_ok($result); + } + } + + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + + + + public function deletesubgroup() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + //# ambil parameter input + $prm = $this->sys_input; + $userid = $this->sys_user["M_UserID"]; + $sql = "update nat_subgroup SET + Nat_SubGroupIsActive = 'N', + Nat_SubGroupLastUpdated = now() + WHERE + Nat_SubGroupID = ? + + "; + + $query = $this->db_onedev->query($sql, + array( + $prm['id'] + ) + ); + // echo $query; + if (!$query) { + $this->sys_error_db("nat_subgroup delete"); + exit; + } + $sql = "update nat_subsubgroup SET + Nat_SubSubGroupIsActive = 'N', + Nat_SubSubGroupLastUpdated = now() + WHERE + Nat_SubSubGroupNat_SubGroupID = ? + + "; + + $query = $this->db_onedev->query($sql, + array( + $prm['id'] + ) + ); + // echo $query; + if (!$query) { + $this->sys_error_db("nat_subsubgroup delete"); + exit; + } + $result = array ("total" => 1, "records" => array("xid" => 0)); + $this->sys_ok($result); + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + public function deletesubsubgroup() + { + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + + //# ambil parameter input + $prm = $this->sys_input; + $userid = $this->sys_user["M_UserID"]; + $sql = "update nat_subsubgroup SET + Nat_SubSubGroupNat_SubGroupID = 0, + Nat_SubSubGroupLastUpdated = now() + WHERE + Nat_SubSubGroupID = ? + + "; + + $query = $this->db_onedev->query($sql, + array( + $prm['id'] + ) + ); + // echo $query; + if (!$query) { + $this->sys_error_db("nat_subsubgroup delete"); + exit; + } + $result = array ("total" => 1, "records" => array("xid" => 0)); + $this->sys_ok($result); + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + } + function selectnonlab(){ + + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rows = []; + $rows['nonlabs'] = array(array("T_TestIsNonLabID"=>"","T_TestIsNonLabName"=>"LAB"),array("T_TestIsNonLabID"=>"RADIODIAGNOSTIC","T_TestIsNonLabName"=>"RADIODIAGNOSTIC"), array("T_TestIsNonLabID"=>"ELEKTROMEDIS","T_TestIsNonLabName"=>"ELEKTROMEDIS"),array("T_TestIsNonLabID"=>"OTHERS","T_TestIsNonLabName"=>"OTHERS")); + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + +} + +function selectgroup(){ + + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rows = []; + $query =" SELECT * + FROM nat_group + WHERE + Nat_GroupIsActive = 'Y' + "; + //echo $query; + $rows['groups'] = $this->db_onedev->query($query)->result_array(); + + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + +} +function selectcompanybusiness(){ + + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rows = []; + $query =" SELECT *, COUNT(M_CompanyID) as used + FROM (SELECT m_companybusiness.*,M_CompanyID + FROM + m_companybusiness + LEFT JOIN m_company ON M_CompanyBusinessID = M_CompanyM_CompanyBusinessID AND M_CompanyIsActive = 'Y' + WHERE M_CompanyBusinessIsActive = 'Y') a + GROUP BY M_CompanyBusinessID + "; + //echo $query; + $rows['companybusinesss'] = $this->db_onedev->query($query)->result_array(); + + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + + } + function selectcompanylevel(){ + + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + $id = $prm['id']; + $rows = []; + $query =" SELECT *,CONCAT(Nat_CompanyLevelName,' [',M_CompanyName,']') as Nat_CompanyLevelName, COUNT(M_CompanyID) as used + FROM (SELECT nat_companylevel.*,M_CompanyID,M_CompanyName + FROM + nat_companylevel + LEFT JOIN m_company ON Nat_CompanyLevelNat_CompanyID = M_CompanyID AND M_CompanyIsActive = 'Y' + WHERE Nat_CompanyLevelIsActive = 'Y') a + GROUP BY Nat_CompanyLevelID + "; + //echo $query; + $rows['companylevels'] = $this->db_onedev->query($query)->result_array(); + + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + + } + function selecthierarchy(){ + + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rows = []; + $query =" SELECT *, COUNT(M_CompanyID) as used + FROM (SELECT nat_hierarchy.*,M_CompanyID + FROM + nat_hierarchy + LEFT JOIN m_company ON Nat_HierarchyID = M_CompanyNat_HierarchyID AND M_CompanyIsActive = 'Y' + WHERE Nat_HierarchyIsActive = 'Y') a + GROUP BY Nat_HierarchyID + "; + //echo $query; + $rows['hierarchys'] = $this->db_onedev->query($query)->result_array(); + + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + + } +function selectdoctor(){ + + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rows = []; + $query =" SELECT * + FROM m_doctor + WHERE + M_DoctorIsActive = 'Y' + "; + //echo $query; + $rows['doctors'] = $this->db_onedev->query($query)->result_array(); + + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + + } + function searchdoctor(){ + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + + $max_rst = 12; + $tot_count =0; + + $q = [ + 'search' => '%' + ]; + + if ($prm['search'] != '') + { + $q['search'] = "%{$prm['search']}%"; + } + + // QUERY TOTAL + $sql = "SELECT count(*) as total + FROM + m_doctor + WHERE + M_DoctorName like ? + AND M_DoctorIsActive = 'Y'"; + $query = $this->db_onedev->query($sql,$q['search']); + //echo $query; + if ($query) { + $tot_count = $query->result_array()[0]["total"]; + } + else { + $this->sys_error_db("m_doctor count",$this->db_onedev); + exit; + } + + $sql = " + SELECT * FROM( + SELECT 0 as M_DoctorID, 'Semua Dokter' as M_DoctorName, 'Semua Dokter' as M_DoctorNames + UNION + SELECT M_DoctorID, M_DoctorName, CONCAT(IFNULL(M_DoctorPrefix,''),IFNULL(M_DoctorPrefix2,''),' ',M_DoctorName,' ',IFNULL(M_DoctorSufix,''),IFNULL(M_DoctorSufix2,''),IFNULL(M_DoctorSufix3,'')) as M_DoctorNames + FROM m_doctor + WHERE M_DoctorIsActive = 'Y') a + WHERE + M_DoctorNames like ? + ORDER BY M_DoctorName DESC + "; + $query = $this->db_onedev->query($sql, array($q['search'])); + + if ($query) { + $rows = $query->result_array(); + //echo $this->db_onedev->last_query(); + $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows)); + $this->sys_ok($result); + } + else { + $this->sys_error_db("m_doctor rows",$this->db_onedev); + exit; + } + } + function searchsubsubgroup(){ + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + + $max_rst = 12; + $tot_count =0; + + $q = [ + 'search' => '%' + ]; + + if ($prm['search'] != '') + { + $q['search'] = "%{$prm['search']}%"; + } + + // QUERY TOTAL + $sql = "SELECT count(*) as total + FROM nat_subsubgroup + WHERE + Nat_SubSubGroupName like ? + AND Nat_SubSubGroupIsActive = 'Y'"; + $query = $this->db_onedev->query($sql,$q['search']); + //echo $query; + if ($query) { + $tot_count = $query->result_array()[0]["total"]; + } + else { + $this->sys_error_db("nat_subsubgroup count",$this->db_onedev); + exit; + } + + $sql = " + SELECT Nat_SubSubGroupID, Nat_SubSubGroupName + FROM nat_subsubgroup + WHERE + Nat_SubSubGroupName like ? + AND Nat_SubSubGroupIsActive = 'Y' + GROUP BY Nat_SubSubGroupID + ORDER BY Nat_SubSubGroupName ASC + "; + $query = $this->db_onedev->query($sql, array($q['search'])); + + if ($query) { + $rows = $query->result_array(); + //echo $this->db_onedev->last_query(); + $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows)); + $this->sys_ok($result); + } + else { + $this->sys_error_db("nat_subsubgroup rows",$this->db_onedev); + exit; + } + } + function searchtemplate(){ + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + + $max_rst = 12; + $tot_count =0; + + $q = [ + 'search' => '%' + ]; + + if ($prm['search'] != '') + { + $q['search'] = "%{$prm['search']}%"; + } + + // QUERY TOTAL + $sql = "SELECT count(*) as total + FROM so_template + WHERE + So_TemplateName like ? + AND So_TemplateIsActive = 'Y'"; + $query = $this->db_onedev->query($sql,$q['search']); + //echo $query; + if ($query) { + $tot_count = $query->result_array()[0]["total"]; + } + else { + $this->sys_error_db("so_template count",$this->db_onedev); + exit; + } + + $sql = " + SELECT So_TemplateID, So_TemplateName + FROM so_template + WHERE + So_TemplateName like ? + AND So_TemplateIsActive = 'Y' + GROUP BY So_TemplateID + ORDER BY So_TemplateName ASC + "; + $query = $this->db_onedev->query($sql, array($q['search'])); + + if ($query) { + $rows = $query->result_array(); + //echo $this->db_onedev->last_query(); + $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows)); + $this->sys_ok($result); + } + else { + $this->sys_error_db("so_template rows",$this->db_onedev); + exit; + } + } + function searchcompanylevel(){ + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + + $max_rst = 12; + $tot_count =0; + + + $name = $prm['name']; + $hirarkiid = intval($prm['id']) - 1; + + // QUERY TOTAL + $sql = "SELECT count(*) as total + FROM nat_companylevel + WHERE + Nat_CompanyLevelName like '%{$name}%' + AND + Nat_CompanyLevelNat_HierarchyID = '{$hirarkiid}' + AND Nat_CompanyLevelIsActive = 'Y'"; + $query = $this->db_onedev->query($sql); + //echo $query; + if ($query) { + $tot_count = $query->result_array()[0]["total"]; + } + else { + $this->sys_error_db("nat_companylevel count",$this->db_onedev); + exit; + } + + $sql = " + SELECT * FROM(SELECT *, CONCAT(Nat_CompanyLevelName, ' [',M_CompanyName,']') as Nat_CompanyLevelNames + FROM nat_companylevel + LEFT JOIN m_company ON Nat_CompanyLevelNat_CompanyID = M_CompanyID + WHERE Nat_CompanyLevelIsActive = 'Y') a + WHERE + Nat_CompanyLevelName like '%{$name}%' + AND + Nat_CompanyLevelNat_HierarchyID = '{$hirarkiid}' + AND Nat_CompanyLevelIsActive = 'Y' + ORDER BY Nat_CompanyLevelName DESC + "; + $query = $this->db_onedev->query($sql); + + if ($query) { + $rows = $query->result_array(); + //echo $this->db_onedev->last_query(); + $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows)); + $this->sys_ok($result); + } + else { + $this->sys_error_db("nat_companylevel rows",$this->db_onedev); + exit; + } + } +function searchcity(){ + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $prm = $this->sys_input; + + $max_rst = 12; + $tot_count =0; + + $q = [ + 'search' => '%' + ]; + + if ($prm['search'] != '') + { + $q['search'] = "%{$prm['search']}%"; + } + + // QUERY TOTAL + $sql = "SELECT count(*) as total + FROM m_city + WHERE + M_CityName like ? + AND M_CityIsActive = 'Y'"; + $query = $this->db_onedev->query($sql,$q['search']); + //echo $query; + if ($query) { + $tot_count = $query->result_array()[0]["total"]; + } + else { + $this->sys_error_db("m_city count",$this->db_onedev); + exit; + } + + $sql = " + SELECT * + FROM m_city + WHERE + M_CityName like ? + AND M_CityIsActive = 'Y' + ORDER BY M_CityName DESC + "; + $query = $this->db_onedev->query($sql, array($q['search'])); + + if ($query) { + $rows = $query->result_array(); + //echo $this->db_onedev->last_query(); + $result = array("total" => $tot_count, "records" => $rows, "total_display" => sizeof($rows)); + $this->sys_ok($result); + } + else { + $this->sys_error_db("m_city rows",$this->db_onedev); + exit; + } +} +function getstaff(){ + $prm = $this->sys_input; + $query =" SELECT * + FROM m_staff + WHERE + M_StaffIsActive = 'Y' AND M_StaffM_PositionID = 2"; + //echo $query; + $rows = $this->db_onedev->query($query,array($prm['id']))->result_array(); + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + exit; +} +function getprovince(){ + $prm = $this->sys_input; + $query =" SELECT * + FROM m_province + WHERE + M_ProvinceIsActive = 'Y'"; + //echo $query; + $rows = $this->db_onedev->query($query,array($prm['id']))->result_array(); + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + exit; +} +function getcity(){ + $prm = $this->sys_input; + $query =" SELECT * + FROM m_city + WHERE + M_CityIsActive = 'Y' AND M_CityM_ProvinceID = ? + "; + //echo $query; + $rows = $this->db_onedev->query($query,array($prm['id']))->result_array(); + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + exit; +} +function getdistrict(){ + $prm = $this->sys_input; + $query =" SELECT * + FROM m_district + WHERE + M_DistrictIsActive = 'Y' AND M_DistrictM_CityID = ? + "; + //echo $query; + $rows = $this->db_onedev->query($query,array($prm['id']))->result_array(); + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + exit; +} + +function getkelurahan(){ + $prm = $this->sys_input; + $query =" SELECT * + FROM m_kelurahan + WHERE + M_KelurahanIsActive = 'Y' AND M_KelurahanM_DistrictID = ? + "; + //echo $query; + $rows = $this->db_onedev->query($query,array($prm['id']))->result_array(); + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + exit; +} +function selectbase(){ + + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rows = []; + $query =" SELECT 'SPK' as baseid, 'SPK' as basename + UNION SELECT 'MOU' as baseid, 'MOU' as basename + "; + //echo $query; + $rows['bases'] = $this->db_onedev->query($query)->result_array(); + + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + + } + function selectomzettype(){ + + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rows = []; + $query =" SELECT * + FROM m_omzettype + WHERE + M_OmzetTypeIsActive = 'Y' + "; + //echo $query; + $rows['omzettypes'] = $this->db_onedev->query($query)->result_array(); + + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + + } + function selectmoutype(){ + + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rows = []; + $query =" SELECT * + FROM m_moutype + WHERE + M_MouTypeIsActive = 'Y' + "; + //echo $query; + $rows['moutypes'] = $this->db_onedev->query($query)->result_array(); + + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + + } + function selectagingtype(){ + + try { + //# cek token valid + if (! $this->isLogin) { + $this->sys_error("Invalid Token"); + exit; + } + $rows = []; + $query =" SELECT * + FROM m_agingtype + WHERE + M_AgingIsActive = 'Y' + "; + //echo $query; + $rows['agingtypes'] = $this->db_onedev->query($query)->result_array(); + + + $result = array( + "total" => count($rows) , + "records" => $rows, + ); + $this->sys_ok($result); + + + } catch(Exception $exc) { + $message = $exc->getMessage(); + $this->sys_error($message); + } + + } + +}