3416 lines
142 KiB
PHP
3416 lines
142 KiB
PHP
<?php
|
|
|
|
class Fix_future extends MY_Controller
|
|
{
|
|
var $db;
|
|
var $PJ_DOCTOR_ID;
|
|
var $SENDER_DOCTOR_ID;
|
|
var $SENDER_ADDRESS_ID;
|
|
var $ONLINE_USER_ID;
|
|
var $load;
|
|
var $db_log;
|
|
function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->PJ_DOCTOR_ID = 0;
|
|
$this->SENDER_DOCTOR_ID = 0;
|
|
$this->SENDER_ADDRESS_ID = 0;
|
|
$this->ONLINE_USER_ID = 1500;
|
|
$this->db = $this->load->database("onedev", true);
|
|
$this->db_log = $this->load->database("one_lab_log", true);
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
echo "Fixing snapshot ss_piutang_test";
|
|
}
|
|
function get_rows($sql, $prm = false)
|
|
{
|
|
if ($prm) {
|
|
$qry = $this->db->query($sql, $prm);
|
|
} else {
|
|
$qry = $this->db->query($sql);
|
|
}
|
|
if (!$qry) {
|
|
$msg = "Error Query : {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
return [false, $msg];
|
|
}
|
|
$rows = $qry->result_array();
|
|
return [true, $rows];
|
|
}
|
|
function get_one_row($sql, $prm)
|
|
{
|
|
list($status, $msg) = $this->get_rows($sql, $prm);
|
|
if ($status !== true) {
|
|
return [$status, $msg];
|
|
}
|
|
if (count($msg) == 0) {
|
|
return [false, "Record not found. | " . $msg];
|
|
}
|
|
return [true, $msg[0]];
|
|
}
|
|
|
|
function now()
|
|
{
|
|
return Date("Y-m-d H:i:s");
|
|
}
|
|
|
|
function genqrcode($nomorlab, $id)
|
|
{
|
|
$this->load->library('ciqrcode'); //pemanggilan library QR CODE
|
|
$home_dir = "/home/one/project/one/";
|
|
$target_dir = $home_dir . "one-media/one-qrcontrolcard/";
|
|
$config['cacheable'] = false; //boolean, the default is true
|
|
//$config['cachedir'] = './assets/'; //string, the default is application/cache/
|
|
//$config['errorlog'] = './assets/'; //string, the default is application/logs/
|
|
$config['imagedir'] = $target_dir; //direktori penyimpanan qr code
|
|
$config['quality'] = true; //boolean, the default is true
|
|
$config['size'] = '1024'; //interger, the default is 1024
|
|
$config['black'] = array(224, 255, 255); // array, default is array(255,255,255)
|
|
$config['white'] = array(70, 130, 180); // array, default is array(0,0,0)
|
|
$this->ciqrcode->initialize($config);
|
|
|
|
$image_name = "qrcode_" . $nomorlab . ".png"; //buat name dari qr code sesuai dengan nim
|
|
|
|
$params['data'] = $_SERVER['HTTP_HOST'] . "/one-ui-lab/test/vuex/cpone-control-card/?noreg=" . $nomorlab . "&id=" . $id; //data yang akan di jadikan QR CODE
|
|
$params['level'] = 'H'; //H=High
|
|
$params['size'] = 10;
|
|
$params['savename'] = $config['imagedir'] . $image_name; //simpan image QR CODE ke folder assets/images/
|
|
$this->ciqrcode->generate($params); // fungsi untuk generate QR CODE
|
|
return $_SERVER['HTTP_HOST'] . "/one-api-lab/assets/images/" . $image_name;
|
|
}
|
|
|
|
function genpatientqrcode($nomorlab)
|
|
{
|
|
$this->load->library('ciqrcode'); //pemanggilan library QR CODE
|
|
$home_dir = "/home/one/project/one/";
|
|
$target_dir = $home_dir . "one-media/one-qrpatient/";
|
|
$config['cacheable'] = false; //boolean, the default is true
|
|
//$config['cachedir'] = './assets/'; //string, the default is application/cache/
|
|
//$config['errorlog'] = './assets/'; //string, the default is application/logs/
|
|
$config['imagedir'] = $target_dir; //direktori penyimpanan qr code
|
|
$config['quality'] = true; //boolean, the default is true
|
|
$config['size'] = '1024'; //interger, the default is 1024
|
|
$config['black'] = array(224, 255, 255); // array, default is array(255,255,255)
|
|
$config['white'] = array(70, 130, 180); // array, default is array(0,0,0)
|
|
$init = $this->ciqrcode->initialize($config);
|
|
//print_r($init);
|
|
|
|
$image_name = "patient_qr_" . $nomorlab . ".png"; //buat name dari qr code sesuai dengan nim
|
|
|
|
$params['data'] = $nomorlab; //data yang akan di jadikan QR CODE
|
|
$params['level'] = 'H'; //H=High
|
|
$params['size'] = 10;
|
|
$params['savename'] = $config['imagedir'] . $image_name; //simpan image QR CODE ke folder assets/images/
|
|
$save = $this->ciqrcode->generate($params); // fungsi untuk generate QR CODE
|
|
//print_r($save);
|
|
// exit;
|
|
return $_SERVER['HTTP_HOST'] . "/one-media/one-qrpatient/" . $image_name;
|
|
//echo "selesai";
|
|
}
|
|
|
|
function genformqrcode($uuid)
|
|
{
|
|
$this->load->library('ciqrcode'); //pemanggilan library QR CODE
|
|
$home_dir = "/home/one/project/one/";
|
|
$target_dir = $home_dir . "one-media/one-qrpatient/";
|
|
$config['cacheable'] = false; //boolean, the default is true
|
|
//$config['cachedir'] = './assets/'; //string, the default is application/cache/
|
|
//$config['errorlog'] = './assets/'; //string, the default is application/logs/
|
|
$config['imagedir'] = $target_dir; //direktori penyimpanan qr code
|
|
$config['quality'] = true; //boolean, the default is true
|
|
$config['size'] = '1024'; //interger, the default is 1024
|
|
$config['black'] = array(224, 255, 255); // array, default is array(255,255,255)
|
|
$config['white'] = array(70, 130, 180); // array, default is array(0,0,0)
|
|
$this->ciqrcode->initialize($config);
|
|
|
|
$image_name = "form_qr_" . $uuid . ".png"; //buat name dari qr code sesuai dengan nim
|
|
|
|
$params['data'] = $_SERVER['HTTP_HOST'] . "/one-ui-lab/test/vuex/cpone-riwayat-form-v2/?id=" . $uuid; //data yang akan di jadikan QR CODE
|
|
$params['level'] = 'H'; //H=High
|
|
$params['size'] = 10;
|
|
$params['savename'] = $config['imagedir'] . $image_name; //simpan image QR CODE ke folder assets/images/
|
|
$this->ciqrcode->generate($params); // fungsi untuk generate QR CODE
|
|
return array('image' => $_SERVER['HTTP_HOST'] . "/one-media/one-qrpatient/" . $image_name, 'url' => $params['data']);
|
|
//echo "selesai";
|
|
}
|
|
|
|
function generate_code_string()
|
|
{
|
|
$length = 5;
|
|
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
$code = '';
|
|
for ($i = 0; $i < $length; $i++) {
|
|
$code .= $characters[rand(0, strlen($characters) - 1)];
|
|
}
|
|
return $code;
|
|
}
|
|
|
|
function generate_uuid()
|
|
{
|
|
// Generate 16 bytes (128 bits) of random data
|
|
$data = random_bytes(16);
|
|
|
|
// Set version to 0100
|
|
$data[6] = chr(ord($data[6]) & 0x0f | 0x40);
|
|
// Set bits 6-7 to 10
|
|
$data[8] = chr(ord($data[8]) & 0x3f | 0x80);
|
|
|
|
// Output the 36 character UUID
|
|
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
|
|
}
|
|
|
|
function generate_code_form($preid, $orderid)
|
|
{
|
|
$userid = $this->sys_user["M_UserID"];
|
|
$sql = "SELECT COUNT(*) as total
|
|
FROM form_riwayat_pasien
|
|
WHERE FormRiwayatPasienT_OrderHeaderID = ? AND
|
|
FormRiwayatPasienIsActive = 'Y'
|
|
";
|
|
$qry = $this->db->query($sql, [$orderid]);
|
|
// echo $this->db->last_query();
|
|
// exit;
|
|
if ($qry) {
|
|
$total = $qry->result_array()[0]['total'];
|
|
if ($total == 0) {
|
|
$code = $this->generate_code_string();
|
|
$uuid = $this->generate_uuid();
|
|
|
|
$sql = "INSERT INTO form_riwayat_pasien (
|
|
FormRiwayatPasienPreregisterID,
|
|
FormRiwayatPasienCode,
|
|
FormRiwayatPasienUUID,
|
|
FormRiwayatPasienT_OrderHeaderID,
|
|
FormRiwayatPasienCreated,
|
|
FormRiwayatPasienCreatedUserID)
|
|
VALUES (?, ?, ?, ?, NOW(), ?)";
|
|
$qry = $this->db->query($sql, [$preid, $code, $uuid, $orderid, $userid]);
|
|
//echo $this->db->last_query();
|
|
//exit;
|
|
if (!$qry) {
|
|
return '';
|
|
}
|
|
return array('uuid' => $uuid, 'code' => $code);
|
|
}
|
|
} else {
|
|
return '';
|
|
}
|
|
}
|
|
|
|
function check_duplicate_nat_tests($data)
|
|
{
|
|
// Array untuk menyimpan nat_tests ID yang sudah ditemui beserta detail tesnya
|
|
$encountered_nat_tests = [];
|
|
|
|
// Array untuk menyimpan informasi duplikat
|
|
$duplicate_pairs = [];
|
|
|
|
// Flag untuk menandakan ada duplikat atau tidak
|
|
$has_duplicates = false;
|
|
|
|
// Iterasi melalui setiap item dalam data
|
|
foreach ($data as $index => $item) {
|
|
if (isset($item['t_id'])) {
|
|
$sql = "SELECT * FROM t_test WHERE T_TestID = {$item['t_id']}";
|
|
$query = $this->db->query($sql);
|
|
//echo $this->db->last_query();
|
|
|
|
if (!$query) {
|
|
$this->sys_error_db(["status" => "ERR", "message" => "select t_test | " .
|
|
$this->db->error()["message"], "debug" => $this->db->last_query()]);
|
|
exit;
|
|
}
|
|
$dt_test = $query->row_array();
|
|
$nat_test_id = $dt_test['T_TestNat_TestID'];
|
|
$test_name = $dt_test['T_TestName'];
|
|
if (isset($encountered_nat_tests[$nat_test_id])) {
|
|
$has_duplicates = true;
|
|
// Buat pasangan nama tes yang berisi duplikat
|
|
$existing_test = $encountered_nat_tests[$nat_test_id];
|
|
$pair_key = ($existing_test < $test_name) ?
|
|
$existing_test . '|' . $test_name :
|
|
$test_name . '|' . $existing_test;
|
|
|
|
if (!isset($duplicate_pairs[$pair_key])) {
|
|
$duplicate_pairs[$pair_key] = [
|
|
'test1' => $existing_test,
|
|
'test2' => $test_name
|
|
];
|
|
}
|
|
} else {
|
|
// Jika belum ada, tambahkan ke array encountered_nat_tests
|
|
$encountered_nat_tests[$nat_test_id] = $test_name;
|
|
}
|
|
} else {
|
|
$test_name = isset($item['T_TestName']) ? $item['T_TestName'] : 'Unknown Test';
|
|
|
|
// Periksa jika nat_tests ada dan dalam bentuk string JSON
|
|
if (isset($item['nat_tests']) && is_string($item['nat_tests'])) {
|
|
// Decode string JSON menjadi array
|
|
$nat_tests_array = json_decode($item['nat_tests'], true);
|
|
|
|
// Jika decode berhasil dan hasilnya array
|
|
if (is_array($nat_tests_array)) {
|
|
// Iterasi melalui setiap nat_tests ID dalam item saat ini
|
|
foreach ($nat_tests_array as $nat_test_id) {
|
|
// Jika nat_tests ID sudah ada di array encountered_nat_tests, berarti duplikat
|
|
if (isset($encountered_nat_tests[$nat_test_id])) {
|
|
$has_duplicates = true;
|
|
|
|
// Buat pasangan nama tes yang berisi duplikat
|
|
$existing_test = $encountered_nat_tests[$nat_test_id];
|
|
$pair_key = ($existing_test < $test_name) ?
|
|
$existing_test . '|' . $test_name :
|
|
$test_name . '|' . $existing_test;
|
|
|
|
if (!isset($duplicate_pairs[$pair_key])) {
|
|
$duplicate_pairs[$pair_key] = [
|
|
'test1' => $existing_test,
|
|
'test2' => $test_name
|
|
];
|
|
}
|
|
} else {
|
|
// Jika belum ada, tambahkan ke array encountered_nat_tests
|
|
$encountered_nat_tests[$nat_test_id] = $test_name;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Mengembalikan hasil pengecekan
|
|
return [
|
|
'is_duplicate' => $has_duplicates,
|
|
'duplicate_pairs' => array_values($duplicate_pairs) // Convert to indexed array
|
|
];
|
|
}
|
|
|
|
public function fix($futureNo)
|
|
{
|
|
$sql = "select FutureOrderID,
|
|
FutureOrderNumber, FutureOrderDateBooking, FutureOrderIsActive,
|
|
JSON_EXTRACT( fn_get_patient_atribute(FutureOrderM_PatientID) , '$.patient_fullname' )
|
|
PatientName,
|
|
JSON_EXTRACT( fn_get_patient_atribute(FutureOrderM_PatientID) , '$.M_PatientHP' )
|
|
PatientHP,
|
|
ifnull(T_OrderHeaderLabNumber,'Pending') LabNumber ,
|
|
if(FutureOrderDateBooking > date(now()), 'Y', 'N') inFuture,
|
|
if(FutureMapT_OrderHeaderID is not null, 'Y', 'N') isMapped
|
|
from future_order
|
|
left join future_map on FutureOrderID = FutureMapFutureOrderID
|
|
left join t_orderheader on FutureMapT_OrderHeaderID = T_OrderHeaderID
|
|
where FutureOrderNumber = ?
|
|
";
|
|
list($status, $row) = $this->get_one_row($sql, [$futureNo]);
|
|
if ($status === false) {
|
|
echo "ERR get Future Order: $row";
|
|
exit();
|
|
}
|
|
$this->print_table([$row], array_keys($row));
|
|
if ($row["inFuture"] == "Y") {
|
|
echo "<h4> Booking masa depan </h4>";
|
|
exit();
|
|
}
|
|
if ($row["FutureOrderIsActive"] == "N") {
|
|
echo "<h4> Booking dihapus </h4>";
|
|
exit();
|
|
}
|
|
|
|
if ($row["isMapped"] == "Y") {
|
|
echo "<h4> Sudah Tercreate ORDER {$row["LabNumber"]} </h4>";
|
|
exit();
|
|
}
|
|
|
|
$url_fix =
|
|
"/one-api-lab/fix/fix_future/do_fix/" .
|
|
$row["FutureOrderID"] .
|
|
"/" .
|
|
md5($row["FutureOrderNumber"]);
|
|
echo "<div>
|
|
<button onClick=\"document.location.href='{$url_fix}'\"
|
|
style='padding:5px; color:white; border: solid 0px; border-radius: 5px;
|
|
background-color:blue; margin-top:20px; display:block;' >Generate Order</button> </div>\n";
|
|
}
|
|
|
|
function do_fix($futureOrderID, $md5Future, $userid)
|
|
{
|
|
$sql = "select FutureOrderNumber,
|
|
if(FutureOrderDateBooking > date(now()) , 'Y' , 'N') inFuture,
|
|
if(FutureMapID is not null,'Y','N') isMapped,
|
|
FutureMapT_OrderHeaderID
|
|
from
|
|
future_order
|
|
left join future_map on FutureOrderID = FutureMapFutureOrderID and FutureMapIsActive ='Y'
|
|
where FutureOrderID = ?
|
|
and FutureOrderIsActive = 'Y' ";
|
|
list($status, $msg) = $this->get_one_row($sql, [$futureOrderID]);
|
|
if ($status === false) {
|
|
echo $msg;
|
|
exit();
|
|
}
|
|
$row = $msg;
|
|
$futureOrderNumber = $row["FutureOrderNumber"];
|
|
if (md5($row["FutureOrderNumber"]) != $md5Future) {
|
|
echo "Invalid Redirect Link";
|
|
exit();
|
|
}
|
|
if ($row["inFuture"] == "Y") {
|
|
echo "Booking Masa depan > hari ini";
|
|
exit();
|
|
}
|
|
if ($row["inMapped"] == "Y") {
|
|
echo "Booking sudah ada";
|
|
exit();
|
|
}
|
|
|
|
ob_start();
|
|
echo "<H5>Generate Order</H5>";
|
|
$this->generate_order($futureOrderID, $userid);
|
|
$result = ob_get_contents();
|
|
ob_end_clean();
|
|
echo "<div style='padding:10px; border-radius:10px; border:solid 1px #383838'>
|
|
<pre>$result</pre>
|
|
</div>";
|
|
|
|
$url_fix = "/one-ui-lab/test/vuex/one-fo-cashier-new-payment-v27/";
|
|
|
|
echo "<div>
|
|
<button onClick=\"document.location.href='{$url_fix}'\"
|
|
style='padding:5px; color:white; border: solid 0px; border-radius: 5px;
|
|
background-color:blue; margin-top:20px; display:block;' >Kasir</button> </div>\n";
|
|
}
|
|
|
|
|
|
public function fix_debug($futureNo)
|
|
{
|
|
$sql = "select FutureOrderID,
|
|
FutureOrderNumber, FutureOrderDateBooking, FutureOrderIsActive,
|
|
JSON_EXTRACT( fn_get_patient_atribute(FutureOrderM_PatientID) , '$.patient_fullname' )
|
|
PatientName,
|
|
JSON_EXTRACT( fn_get_patient_atribute(FutureOrderM_PatientID) , '$.M_PatientHP' )
|
|
PatientHP,
|
|
ifnull(T_OrderHeaderLabNumber,'Pending') LabNumber ,
|
|
if(FutureOrderDateBooking > date(now()), 'Y', 'N') inFuture,
|
|
if(FutureMapT_OrderHeaderID is not null, 'Y', 'N') isMapped
|
|
from future_order
|
|
left join future_map on FutureOrderID = FutureMapFutureOrderID
|
|
left join t_orderheader on FutureMapT_OrderHeaderID = T_OrderHeaderID
|
|
where FutureOrderNumber = ?
|
|
";
|
|
list($status, $row) = $this->get_one_row($sql, [$futureNo]);
|
|
if ($status === false) {
|
|
echo "ERR get Future Order: $row";
|
|
exit();
|
|
}
|
|
$this->print_table([$row], array_keys($row));
|
|
if ($row["inFuture"] == "Y") {
|
|
echo "<h4> Booking masa depan </h4>";
|
|
exit();
|
|
}
|
|
if ($row["FutureOrderIsActive"] == "N") {
|
|
echo "<h4> Booking dihapus </h4>";
|
|
exit();
|
|
}
|
|
|
|
if ($row["isMapped"] == "Y") {
|
|
echo "<h4> Sudah Tercreate ORDER {$row["LabNumber"]} </h4>";
|
|
exit();
|
|
}
|
|
|
|
$url_fix =
|
|
"/one-api-lab/fix/fix_future/do_fix_debug/" .
|
|
$row["FutureOrderID"] .
|
|
"/" .
|
|
md5($row["FutureOrderNumber"]);
|
|
echo "<div>
|
|
<button onClick=\"document.location.href='{$url_fix}'\"
|
|
style='padding:5px; color:white; border: solid 0px; border-radius: 5px;
|
|
background-color:blue; margin-top:20px; display:block;' >Generate Order</button> </div>\n";
|
|
}
|
|
|
|
function do_fix_debug($futureOrderID, $md5Future)
|
|
{
|
|
$sql = "select FutureOrderNumber,
|
|
if(FutureOrderDateBooking > date(now()) , 'Y' , 'N') inFuture,
|
|
if(FutureMapID is not null,'Y','N') isMapped,
|
|
FutureMapT_OrderHeaderID
|
|
from
|
|
future_order
|
|
left join future_map on FutureOrderID = FutureMapFutureOrderID and FutureMapIsActive ='Y'
|
|
where FutureOrderID = ?
|
|
and FutureOrderIsActive = 'Y' ";
|
|
list($status, $msg) = $this->get_one_row($sql, [$futureOrderID]);
|
|
if ($status === false) {
|
|
echo $msg;
|
|
exit();
|
|
}
|
|
$row = $msg;
|
|
$futureOrderNumber = $row["FutureOrderNumber"];
|
|
if (md5($row["FutureOrderNumber"]) != $md5Future) {
|
|
echo "Invalid Redirect Link";
|
|
exit();
|
|
}
|
|
if ($row["inFuture"] == "Y") {
|
|
echo "Booking Masa depan > hari ini";
|
|
exit();
|
|
}
|
|
if ($row["inMapped"] == "Y") {
|
|
echo "Booking sudah ada";
|
|
exit();
|
|
}
|
|
|
|
ob_start();
|
|
echo "<H5>Generate Order</H5>";
|
|
$this->generate_order_debug($futureOrderID);
|
|
$result = ob_get_contents();
|
|
ob_end_clean();
|
|
echo "<div style='padding:10px; border-radius:10px; border:solid 1px #383838'>
|
|
<pre>$result</pre>
|
|
</div>";
|
|
|
|
$url_fix = "/one-ui-lab/test/vuex/one-fo-cashier-new-payment-v27/";
|
|
|
|
echo "<div>
|
|
<button onClick=\"document.location.href='{$url_fix}'\"
|
|
style='padding:5px; color:white; border: solid 0px; border-radius: 5px;
|
|
background-color:blue; margin-top:20px; display:block;' >Kasir</button> </div>\n";
|
|
}
|
|
public function print_table_style()
|
|
{
|
|
echo "
|
|
<style>
|
|
th, td {
|
|
padding: 15px;
|
|
text-align: left;
|
|
}
|
|
tr:nth-child(even) {background-color: #f2f2f2;}
|
|
table {
|
|
border: solid 1px ;
|
|
min-width:600px;
|
|
}
|
|
</style>
|
|
";
|
|
}
|
|
|
|
public function print_table($rows, $keys)
|
|
{
|
|
$this->print_table_style();
|
|
echo "<table>";
|
|
echo "<tr>";
|
|
foreach ($keys as $k) {
|
|
echo "<td>$k</td>";
|
|
}
|
|
echo "</tr>\n";
|
|
foreach ($rows as $r) {
|
|
echo "<tr>";
|
|
foreach ($keys as $k) {
|
|
echo "<td>" . $r[$k] . "</td>";
|
|
}
|
|
echo "</tr>";
|
|
}
|
|
echo "</table>";
|
|
}
|
|
|
|
public function get_branch_default()
|
|
{
|
|
$sql =
|
|
"select * from m_branch where M_BranchIsDefault = 'Y' and M_BranchIsActive = 'Y'";
|
|
$qry = $this->db->query($sql);
|
|
if (!$qry) {
|
|
echo "{$this->now()} ERR : {$this->db->error()["message"]}\n";
|
|
exit();
|
|
}
|
|
$rows = $qry->result_array();
|
|
if (count($rows) == 0) {
|
|
echo "{$this->now()} ERR Get Default Branch: {$this->db->error()["message"]}\n";
|
|
exit();
|
|
}
|
|
$branchKelurahanID = $rows[0]["M_BranchM_KelurahanID"];
|
|
$this->SENDER_DOCTOR_ID = $rows[0]["M_BranchM_DoctorID"];
|
|
$this->SENDER_ADDRESS_ID = $rows[0]["M_BranchM_DoctorAddressID"];
|
|
|
|
$sql =
|
|
"select * from m_doctorpj where M_DoctorPjIsActive = 'Y' and M_DoctorPjIsDefaultPJ='Y'";
|
|
$qry = $this->db->query($sql);
|
|
if (!$qry) {
|
|
echo "{$this->now()} ERR : {$this->db->error()["message"]}\n";
|
|
exit();
|
|
}
|
|
$rows = $qry->result_array();
|
|
if (count($rows) == 0) {
|
|
echo "{$this->now()} ERR Get Default PJ: {$this->db->error()["message"]}\n";
|
|
exit();
|
|
}
|
|
$this->PJ_DOCTOR_ID = $rows[0]["M_DoctorPjM_DoctorID"];
|
|
|
|
return [$branchKelurahanID];
|
|
}
|
|
|
|
public function do_pelunasan(
|
|
$headerID,
|
|
$bankAccountID,
|
|
$paymentTypeID,
|
|
$paymentNote,
|
|
$amount
|
|
) {
|
|
$paymentTotal = $amount;
|
|
$paymentDate = date("Y-m-d H:i:s");
|
|
$arr = [
|
|
"F_PaymentT_OrderHeaderID" => $headerID,
|
|
"F_PaymentDate" => $paymentDate,
|
|
"F_PaymentNote" => $paymentNote,
|
|
"F_PaymentTotal" => $paymentTotal,
|
|
"F_PaymentM_UserID" => $this->ONLINE_USER_ID,
|
|
];
|
|
$qry = $this->db->insert("f_payment", $arr);
|
|
if (!$qry) {
|
|
echo "{$this->now()} ERR Get Total Order: {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
return false;
|
|
}
|
|
$paymentID = $this->db->insert_id();
|
|
$detailNote = "";
|
|
|
|
$arr = [
|
|
"F_PaymentDetailF_PaymentID" => $paymentID,
|
|
"F_PaymentDetailM_PaymentTypeID" => $paymentTypeID,
|
|
"F_PaymentDetailEDCNat_BankID" => 0,
|
|
"F_PaymentDetailCardNat_BankID" => 0,
|
|
"F_PaymentDetailM_BankAccountID" => $bankAccountID,
|
|
"F_PaymentDetailNote" => $paymentNote,
|
|
"F_PaymentDetailAmount" => $paymentTotal,
|
|
"F_PaymentDetailActual" => $paymentTotal,
|
|
"F_PaymentDetailChange" => 0,
|
|
];
|
|
$qry = $this->db->insert("f_paymentdetail", $arr);
|
|
if (!$qry) {
|
|
echo "{$this->now()} ERR Pelunasan: {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function add_delivery_note($orderHeaderID, $delivery_note)
|
|
{
|
|
$rst_id = $orderHeaderID;
|
|
$db_msg = "";
|
|
foreach ($delivery_note as $k => $v) {
|
|
if ($v["noteplus"] != "") {
|
|
if (
|
|
$v["delivery_code"] == "EMAIL" ||
|
|
$v["delivery_code"] == "WHATSAPP" ||
|
|
$v["delivery_code"] == "TELEGRAM"
|
|
) {
|
|
$sql = "UPDATE t_orderdelivery SET T_OrderDeliveryDestination = '{$v["noteplus"]}'
|
|
WHERE
|
|
T_OrderDeliveryT_OrderHeaderID = {$rst_id} AND
|
|
T_OrderDeliveryM_DeliveryID = {$v["delivery_id"]} AND
|
|
T_OrderDeliveryM_DeliveryTypeID = {$v["delivery_type_id"]} AND
|
|
T_OrderDeliveryAddressID = {$v["address_id"]} AND
|
|
T_OrderDeliveryIsActive = 'Y'";
|
|
$qry = $this->db->query($sql);
|
|
if (!$qry) {
|
|
$db_msg .=
|
|
"ERR : Update T_orderDelivery " .
|
|
$this->db->error()["message"] .
|
|
" | " .
|
|
$$this->db->last_query();
|
|
$db_msg .= "\n";
|
|
}
|
|
} else {
|
|
$sql = "SELECT T_OrderDeliveryID as xdel_id
|
|
FROM t_orderdelivery
|
|
WHERE
|
|
T_OrderDeliveryT_OrderHeaderID = {$rst_id} AND
|
|
T_OrderDeliveryM_DeliveryID = {$v["delivery_id"]} AND
|
|
T_OrderDeliveryM_DeliveryTypeID = {$v["delivery_type_id"]} AND
|
|
T_OrderDeliveryAddressID = {$v["address_id"]} AND
|
|
T_OrderDeliveryIsActive = 'Y'";
|
|
//echo $sql;
|
|
$qry = $this->db->query($sql);
|
|
if (!$qry) {
|
|
$db_msg .=
|
|
"ERR : Get T_orderDelivery for XDel " .
|
|
$this->db->error()["message"] .
|
|
" | " .
|
|
$$this->db->last_query();
|
|
$db_msg .= "\n";
|
|
}
|
|
$xdel_id = $qry->row()->xdel_id;
|
|
|
|
$sql = "INSERT INTO t_orderdeliverynote(
|
|
T_OrderDeliveryNoteT_OrderDeliveryID,
|
|
T_OrderDeliveryNoteValue,
|
|
T_OrderDeliveryNoteCreated,
|
|
T_OrderDeliveryNoteUserID
|
|
)
|
|
VALUES(
|
|
{$xdel_id},
|
|
'{$v["noteplus"]}',
|
|
NOW(),
|
|
{$this->sys_user["M_UserID"]}
|
|
)";
|
|
$qry = $this->db->query($sql);
|
|
if (!$qry) {
|
|
$db_msg .=
|
|
"ERR : Update T_orderDelivery " .
|
|
$this->db->error()["message"] .
|
|
" | " .
|
|
$$this->db->last_query();
|
|
$db_msg .= "\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return $db_msg;
|
|
}
|
|
|
|
public function generate_order_debug($futureOrderID)
|
|
{
|
|
$this->db->trans_begin();
|
|
$this->get_branch_default();
|
|
|
|
$sql = "select future_order.*,
|
|
if(FutureMapIsActive is null , 'N', 'Y') isMapped
|
|
from future_order
|
|
left join future_map
|
|
on FutureOrderID = FutureMapFutureOrderID
|
|
where FutureOrderID = ?
|
|
";
|
|
$qry = $this->db->query($sql, [$futureOrderID]);
|
|
if (!$qry) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err GetFutureOrder {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
$rows = $qry->result_array();
|
|
if (count($rows) == 0) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err GetFutureOrder not found | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
if ($rows[0]["isMapped"] == "Y") {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Order sudah di future_map | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
$futureOrder = $rows[0];
|
|
echo "{$this->now()} Create Order from {$futureOrder["FutureOrderNumber"]} \n";
|
|
$x_header = ($futureOrder["FutureOrderJSONHeader"]);
|
|
echo "$x_header\n";
|
|
$x_header = preg_replace('/[[:^print:]]/', '', $x_header);
|
|
$header = json_decode($x_header, true);
|
|
echo "HEADER : " . $x_header;
|
|
echo "JSON LAST ERR : " . json_last_error_msg() . "\n";
|
|
print_r($header);
|
|
echo "<br/><br/>";
|
|
$header["date"] = date("Y-m-d H:i:s");
|
|
echo "New Header: ";
|
|
print_r($header);
|
|
$t_header = json_encode($header);
|
|
echo "XXX Header : $t_header | " . json_last_error_msg();
|
|
echo "<br/><br/>";
|
|
|
|
|
|
$x_delivery = $futureOrder["FutureOrderJSONDelivery"];
|
|
$x_delivery = str_replace("\n", "", $x_delivery);
|
|
|
|
$delivery = json_decode($x_delivery, true);
|
|
echo "Raw Delivery :<br/> $x_delivery <br/>";
|
|
echo "Decode Delivery Json : " . json_last_error_msg() . "<br/>";
|
|
|
|
$delivery_note = json_decode(
|
|
$futureOrder["FutureOrderJSONDeliveryNote"],
|
|
true
|
|
);
|
|
$req = json_decode($futureOrder["FutureOrderJSONReq"], true);
|
|
$detail = json_decode($futureOrder["FutureOrderJSONDetail"], true);
|
|
$header_json = addslashes(
|
|
str_replace('\n', '\\\n', json_encode($header))
|
|
);
|
|
$detail_json = str_replace('\n', '\\\n', json_encode($detail));
|
|
$delivery_json = addslashes(
|
|
str_replace('\n', '\\\n', json_encode($delivery))
|
|
);
|
|
|
|
echo "<br/>";
|
|
echo "Delivery String:<br/> ";
|
|
echo $delivery;
|
|
echo "<br/>";
|
|
$req_json = json_encode($req);
|
|
echo "<br/>";
|
|
print_r($header_json);
|
|
echo "<br/>";
|
|
print_r($detail_json);
|
|
echo "<br/>";
|
|
echo "Delivery JSON:";
|
|
print_r($delivery_json);
|
|
|
|
$sql = "CALL sp_fo_register_save_online_debug(0, '{$header_json}', '{$delivery_json}',
|
|
'{$detail_json}', '{$req_json}', '3');";
|
|
$query = $this->db->query($sql);
|
|
if (!$query) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Create Order : {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
$rows = $query->result_array();
|
|
|
|
$this->db->trans_rollback();
|
|
$rst_data = json_decode($rows[0]["data"]);
|
|
$rst_id = $rst_data->id;
|
|
if ($rows[0]["status"] == "ERR") {
|
|
echo "ERR CALL sp_fo_register_save_online_debug| ";
|
|
echo "<br/>";
|
|
print_r($rows);
|
|
$this->db->trans_rollback();
|
|
return;
|
|
}
|
|
$this->db->trans_rollback();
|
|
echo "DEBUG ONLY";
|
|
return;
|
|
|
|
$this->clean_mysqli_connection($this->db->conn_id);
|
|
|
|
$orderHeaderID = $rst_id;
|
|
|
|
if ($orderHeaderID == 0) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Generate Order | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
$orderHeaderNo = $rst->data->number;
|
|
|
|
$db_msg = $this->add_delivery_note($orderHeaderID, $delivery_note);
|
|
if ($db_msg != "") {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Add Delivery Note $db_msg\n";
|
|
return;
|
|
}
|
|
|
|
//Doctor Alias
|
|
$sql = "UPDATE t_orderheaderaddon
|
|
SET T_OrderHeaderAddOnAliasDoctorName = '{$futureOrder["FutureOrderDoctorAlias"]}',
|
|
T_OrderHeaderAddOnAliasDoctorAddress = '{$futureOrder["FutureOrderDoctorAddress"]}',
|
|
T_OrderHeaderAddOnFoTimeStart = '{$futureOrder["FutureOrderFoTimeStart"]}',
|
|
T_OrderHeaderAddOnFoTimeEnd = '{$futureOrder["FutureOrderFoTimeEnd"]}'
|
|
WHERE
|
|
T_OrderHeaderAddOnT_OrderHeaderID = '{$orderHeaderID}'";
|
|
$query = $this->db->query($sql);
|
|
if (!$query) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Create Order : {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
|
|
// futtureMap
|
|
$arr = [
|
|
"FutureMapT_OrderHeaderID" => $orderHeaderID,
|
|
"FutureMapFutureOrderID" => $futureOrderID,
|
|
];
|
|
$qry = $this->db->insert("future_map", $arr);
|
|
if (!$qry) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Future Map: {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
//
|
|
// Down payment
|
|
//
|
|
$sql = "select group_concat(FutureDownpaymentNumber) as dpNo,
|
|
sum(FutureDownpaymentTotal) dpTotal
|
|
from future_downpayment
|
|
where FutureDownpaymentFutureOrderID = ?
|
|
and FutureDownpaymentIsActive='Y'";
|
|
|
|
$query = $this->db->query($sql, $futureOrderID);
|
|
if (!$query) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Get DownPaymentNumber : {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
$rows = $query->result_array();
|
|
$dpTotal = 0;
|
|
$dpNo = "";
|
|
if (count($rows) > 0) {
|
|
$dpTotal = $rows[0]["dpTotal"];
|
|
$dpNo = $rows[0]["dpNo"];
|
|
}
|
|
|
|
if ($dpTotal > 0) {
|
|
$bankAccountID = 0;
|
|
$paymentTypeID = 10;
|
|
$paymentNote = "DP : $dpNo";
|
|
$rst_payment = $this->do_pelunasan(
|
|
$orderHeaderID,
|
|
$bankAccountID,
|
|
$paymentTypeID,
|
|
$paymentNote,
|
|
$dpTotal
|
|
);
|
|
}
|
|
|
|
if ($this->db->trans_status === false) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} ERR : {$db_msg}\n";
|
|
} else {
|
|
$this->db->trans_commit();
|
|
echo "{$this->now()} $orderHeaderNo [Success]\n";
|
|
}
|
|
}
|
|
public function generate_order($futureOrderID, $userid)
|
|
{
|
|
$this->db->trans_begin();
|
|
$this->get_branch_default();
|
|
|
|
$sql = "select future_order.*,
|
|
if(FutureMapIsActive is null , 'N', 'Y') isMapped
|
|
from future_order
|
|
left join future_map
|
|
on FutureOrderID = FutureMapFutureOrderID
|
|
where FutureOrderID = ?
|
|
";
|
|
$qry = $this->db->query($sql, [$futureOrderID]);
|
|
if (!$qry) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err GetFutureOrder {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
$rows = $qry->result_array();
|
|
if (count($rows) == 0) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err GetFutureOrder not found | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
if ($rows[0]["isMapped"] == "Y") {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Order sudah di future_map | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
$futureOrder = $rows[0];
|
|
echo "{$this->now()} Create Order from {$futureOrder["FutureOrderNumber"]} \n";
|
|
|
|
$x_header = ($futureOrder["FutureOrderJSONHeader"]);
|
|
$x_header = preg_replace('/[[:^print:]]/', '', $x_header);
|
|
$header = json_decode($x_header, true);
|
|
$header["date"] = date("Y-m-d H:i:s");
|
|
|
|
$x_delivery = $futureOrder["FutureOrderJSONDelivery"];
|
|
$x_delivery = str_replace("\n", "", $x_delivery);
|
|
|
|
$delivery = json_decode($x_delivery, true);
|
|
|
|
$delivery_note = json_decode(
|
|
$futureOrder["FutureOrderJSONDeliveryNote"],
|
|
true
|
|
);
|
|
$req = json_decode($futureOrder["FutureOrderJSONReq"], true);
|
|
$detail = json_decode($futureOrder["FutureOrderJSONDetail"], true);
|
|
$header_json = addslashes(
|
|
str_replace('\n', '\\\n', json_encode($header))
|
|
);
|
|
$detail_json = str_replace('\n', '\\\n', json_encode($detail));
|
|
$delivery_json = addslashes(
|
|
str_replace('\n', '\\\n', json_encode($delivery))
|
|
);
|
|
|
|
$req_json = json_encode($req);
|
|
|
|
// echo "<br/>";
|
|
// echo "Delivery: ";
|
|
// print_r($delivery);
|
|
// echo "<br/>";
|
|
// echo "Req JSON : ";
|
|
// print_r($req_json);
|
|
// echo "<br/>";
|
|
// echo "Header JSON : ";
|
|
// print_r($header);
|
|
// echo "<br/>";
|
|
// echo "Detail JSON : ";
|
|
// print_r($detail);
|
|
// exit;
|
|
|
|
// $sql = "CALL sp_fo_register_save_online(0, '{$header_json}', '{$delivery_json}',
|
|
// '{$detail_json}', '{$req_json}', '{$userid}');";
|
|
// $query = $this->db->query($sql);
|
|
// if (!$query) {
|
|
// $this->db->trans_rollback();
|
|
// echo "{$this->now()} Err Create Order : {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
// return;
|
|
// }
|
|
|
|
// $rst = $query->row();
|
|
// $rst->data = json_decode($rst->data);
|
|
// $rst_id = $rst->data->id;
|
|
// $this->clean_mysqli_connection($this->db->conn_id);
|
|
|
|
// GENERATE ORDER REGISTRASI
|
|
$rst = $this->save($userid, $header, $detail, $delivery, $req);
|
|
// $rst->data = json_decode($rst->data);
|
|
// $rst_id = $rst->data->id;
|
|
$rst_id = $rst['id'];
|
|
$number = $rst['number'];
|
|
|
|
$orderHeaderID = $rst_id;
|
|
|
|
if ($orderHeaderID == 0) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Generate Order | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
$orderHeaderNo = $number;
|
|
|
|
$db_msg = $this->add_delivery_note($orderHeaderID, $delivery_note);
|
|
if ($db_msg != "") {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Add Delivery Note $db_msg\n";
|
|
return;
|
|
}
|
|
|
|
//Doctor Alias
|
|
$sql = "UPDATE t_orderheaderaddon
|
|
SET T_OrderHeaderAddOnAliasDoctorName = '{$futureOrder["FutureOrderDoctorAlias"]}',
|
|
T_OrderHeaderAddOnAliasDoctorAddress = '{$futureOrder["FutureOrderDoctorAddress"]}',
|
|
T_OrderHeaderAddOnFoTimeStart = '{$futureOrder["FutureOrderFoTimeStart"]}',
|
|
T_OrderHeaderAddOnFoTimeEnd = '{$futureOrder["FutureOrderFoTimeEnd"]}'
|
|
WHERE
|
|
T_OrderHeaderAddOnT_OrderHeaderID = '{$orderHeaderID}'";
|
|
$query = $this->db->query($sql);
|
|
if (!$query) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Create Order : {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
|
|
// futtureMap
|
|
$arr = [
|
|
"FutureMapT_OrderHeaderID" => $orderHeaderID,
|
|
"FutureMapFutureOrderID" => $futureOrderID,
|
|
];
|
|
$qry = $this->db->insert("future_map", $arr);
|
|
if (!$qry) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Future Map: {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
//
|
|
// Down payment
|
|
//
|
|
$sql = "select group_concat(FutureDownpaymentNumber) as dpNo,
|
|
sum(FutureDownpaymentTotal) dpTotal
|
|
from future_downpayment
|
|
where FutureDownpaymentFutureOrderID = ?
|
|
and FutureDownpaymentIsActive='Y'";
|
|
|
|
$query = $this->db->query($sql, $futureOrderID);
|
|
if (!$query) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} Err Get DownPaymentNumber : {$this->db->error()["message"]} | {$this->db->last_query()}\n";
|
|
return;
|
|
}
|
|
$rows = $query->result_array();
|
|
$dpTotal = 0;
|
|
$dpNo = "";
|
|
if (count($rows) > 0) {
|
|
$dpTotal = $rows[0]["dpTotal"];
|
|
$dpNo = $rows[0]["dpNo"];
|
|
}
|
|
|
|
if ($dpTotal > 0) {
|
|
$bankAccountID = 0;
|
|
$paymentTypeID = 10;
|
|
$paymentNote = "DP : $dpNo";
|
|
$rst_payment = $this->do_pelunasan(
|
|
$orderHeaderID,
|
|
$bankAccountID,
|
|
$paymentTypeID,
|
|
$paymentNote,
|
|
$dpTotal
|
|
);
|
|
}
|
|
|
|
if ($this->db->trans_status === false) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} ERR : {$db_msg}\n";
|
|
} else {
|
|
$this->db->trans_commit();
|
|
echo "{$this->now()} $orderHeaderNo [Success]\n";
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------
|
|
// Generate save order
|
|
function save($userid, $header, $details, $delivery, $req)
|
|
{
|
|
|
|
$tests = [];
|
|
foreach ($details as $k => $v) {
|
|
$dt_test_price = $v;
|
|
if ($v['t_ispacket'] == 'Y') {
|
|
$sql = "SELECT * FROM ss_price_mou WHERE packet_id = {$v['t_packetid']} AND is_packet = 'Y'";
|
|
$query = $this->db->query($sql);
|
|
if (!$query) {
|
|
$this->sys_error_db(["status" => "ERR", "message" => "select ss_price_mou | " .
|
|
$this->db->error()["message"], "debug" => $this->db->last_query()]);
|
|
exit;
|
|
}
|
|
$dt_test_price = $query->row_array();
|
|
}
|
|
|
|
$tests[] = $dt_test_price;
|
|
}
|
|
|
|
$check_test = $this->check_duplicate_nat_tests($tests);
|
|
if ($check_test['is_duplicate']) {
|
|
$this->sys_error_db(["status" => "ERR", "message" => "duplicate test | " . json_encode($check_test['duplicate_pairs'])]);
|
|
exit;
|
|
}
|
|
|
|
$this->db->trans_begin();
|
|
|
|
$fn_save_order_header = $this->save_order_header($header, $userid);
|
|
if (!$fn_save_order_header['status']) {
|
|
$this->db->trans_rollback();
|
|
$message = $fn_save_order_header['message'] ?? 'Terjadi kesalahan saat menyimpan data header';
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
|
|
$header_id = $fn_save_order_header['data']['header_id'];
|
|
$number = $fn_save_order_header['data']['number'];
|
|
|
|
$fn_save_order_detail = $this->save_order_detail($details, $header_id, $userid);
|
|
//print_r($fn_save_order_detail);
|
|
if (!$fn_save_order_detail['status']) {
|
|
$this->db->trans_rollback();
|
|
$message = $fn_save_order_detail['message'] ?? 'Terjadi kesalahan saat menyimpan data detail';
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
|
|
$fn_generate_sample_lab = $this->generate_sample_lab($header_id, $userid);
|
|
if (!$fn_generate_sample_lab['status']) {
|
|
$this->db->trans_rollback();
|
|
$message = $fn_generate_sample_lab['message'] ?? 'Terjadi kesalahan saat membuat sample lab';
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
|
|
$fn_generate_location = $this->generate_location($header_id, $userid);
|
|
if (!$fn_generate_location['status']) {
|
|
$this->db->trans_rollback();
|
|
$message = $fn_generate_location['message'] ?? 'Terjadi kesalahan saat membuat lokasi';
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
|
|
$fn_generate_req = $this->generate_req($header_id, $req, $userid);
|
|
if (!$fn_generate_req['status']) {
|
|
$this->db->trans_rollback();
|
|
$message = $fn_generate_req['message'] ?? 'Terjadi kesalahan saat membuat req';
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
|
|
|
|
// set preregister_id dan preregister_promise karena mitra tidak ada preregister
|
|
$preregister_id = 0;
|
|
$preregister_promise = '';
|
|
$fn_update_preregister_promise = $this->update_preregister_promise($header_id, $preregister_promise, $preregister_id, $userid);
|
|
if (!$fn_update_preregister_promise['status']) {
|
|
$this->db->trans_rollback();
|
|
$message = $fn_update_preregister_promise['message'] ?? 'Terjadi kesalahan saat memperbarui promise';
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
|
|
$fn_order_delivery = $this->save_delivery($header_id, $delivery, $userid);
|
|
if (!$fn_order_delivery['status']) {
|
|
$this->db->trans_rollback();
|
|
$message = $fn_order_delivery['message'] ?? 'Terjadi kesalahan saat membuat delivery';
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
|
|
$sql = "SELECT t_orderheader.*
|
|
FROM t_orderheader
|
|
WHERE
|
|
T_OrderHeaderID = ?
|
|
LIMIT 1";
|
|
$query_orderheader = $this->db->query($sql, [$header_id]);
|
|
//echo $this->db->last_query();
|
|
if (!$query_orderheader) {
|
|
$prm_log = ['SELECT_T_ORDERHEADER', 'order/save', $header_id];
|
|
$this->db->trans_rollback();
|
|
$insert_log_error = $this->insert_log_error($this->db->last_query(), $prm_log);
|
|
$message = 'Terjadi kesalahan saat mengambil data order header';
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
//echo $this->db->last_query();
|
|
$x_data_array = $query_orderheader->row_array();
|
|
$lab_number = $x_data_array['T_OrderHeaderLabNumber'];
|
|
|
|
$genqrcode = $this->genqrcode($lab_number, $header_id);
|
|
$genpatientqrcode = $this->genpatientqrcode($lab_number);
|
|
|
|
$sql = "SELECT COUNT(DISTINCT FisikTemplateID) as jumlah_fisik_template
|
|
FROM t_orderheader
|
|
JOIN t_orderdetail ON T_OrderDetailT_OrderHeaderID = T_OrderHeaderID AND T_OrderDetailIsActive = 'Y'
|
|
JOIN nat_test ON Nat_TestCode = T_OrderDetailT_TestCode AND Nat_TestIsActive = 'Y'
|
|
JOIN fisik_map_test_template ON Fisik_MapTestTemplateNat_TestID = Nat_TestID AND Fisik_MapTestTemplateIsActive = 'Y'
|
|
JOIN fisik_template_mapping ON Fisik_MapTestTemplateFisikTemplateMappingID = FisikTemplateMappingID AND FisikTemplateMappingIsActive = 'Y'
|
|
JOIN fisik_template_mapping_detail ON FisikTemplateMappingDetailFisikTemplateMappingID = FisikTemplateMappingID AND FisikTemplateMappingDetailIsActive = 'Y'
|
|
JOIN fisik_template ON FisikTemplateID = FisikTemplateMappingDetailFisikTemplateID AND FisikTemplateIsActive = 'Y' AND
|
|
( FisikTemplateType = 'Riwayat' OR FisikTemplateType = 'K3' )
|
|
WHERE T_OrderHeaderID = ?";
|
|
$query_orderheader = $this->db->query($sql, [$header_id]);
|
|
if (!$query_orderheader) {
|
|
$this->sys_error_db(["status" => "ERR", "message" => "select t_orderheader | " .
|
|
$this->db->error()["message"], "debug" => $this->db->last_query()]);
|
|
exit;
|
|
}
|
|
|
|
$dt_jumlah_fisik_template = $query_orderheader->row_array();
|
|
$jumlah_fisik_template = $dt_jumlah_fisik_template['jumlah_fisik_template'];
|
|
|
|
|
|
if ($jumlah_fisik_template > 0) {
|
|
$genformqrcode = '';
|
|
$uuid = '';
|
|
$get_uuid = $this->generate_code_form($preregister_id, $header_id);
|
|
if ($get_uuid && $get_uuid['uuid'] != '') {
|
|
$uuid = $get_uuid['uuid'];
|
|
$genformqrcode = $this->genformqrcode($uuid);
|
|
}
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
|
|
$get_order_header = $this->get_order_header($header_id);
|
|
if (!$get_order_header['status']) {
|
|
$this->sys_error($get_order_header['message']);
|
|
exit;
|
|
}
|
|
$order_header = $get_order_header['data'];
|
|
|
|
$get_order_detail = $this->get_order_detail($header_id);
|
|
if (!$get_order_detail['status']) {
|
|
$this->sys_error($get_order_detail['message']);
|
|
exit;
|
|
}
|
|
$order_detail = $get_order_detail['data'];
|
|
|
|
$get_deliveries = $this->get_deliveries_by_order($header_id);
|
|
if (!$get_deliveries['status']) {
|
|
$this->sys_error($get_deliveries['message']);
|
|
exit;
|
|
}
|
|
$order_delivery = $get_deliveries['data'];
|
|
|
|
$get_order_promises = $this->get_order_promises($header_id);
|
|
if (!$get_order_promises['status']) {
|
|
$this->sys_error($get_order_promises['message']);
|
|
exit;
|
|
}
|
|
$order_promise = $get_order_promises['data'];
|
|
|
|
$get_details = $this->get_details($header_id);
|
|
if (!$get_details['status']) {
|
|
$this->sys_error($get_details['message']);
|
|
exit;
|
|
}
|
|
$order_details = $get_details['data'];
|
|
|
|
$data_log = array(
|
|
'header' => $order_header,
|
|
'detail_order' => $order_detail,
|
|
'delivery' => $order_delivery,
|
|
'promise' => $order_promise,
|
|
'details' => $order_details
|
|
);
|
|
|
|
|
|
$sqllog = "INSERT INTO order_log(
|
|
orderLogType,
|
|
orderLogT_OrderHeaderID,
|
|
orderLogJSONBefore,
|
|
orderLogJSONAfter,
|
|
orderLogCreated,
|
|
orderLogUserID)
|
|
VALUES ('REGISTER',?,'',?,now(),?)";
|
|
$querylog = $this->db_log->query($sqllog, [$header_id, json_encode($data_log), $userid]);
|
|
//echo $this->db_log->last_query();
|
|
if (!$querylog) {
|
|
$prm_log = ['INSERT_ORDER_LOG', 'order/save'];
|
|
$insert_log_error = $this->insert_log_error($this->db_log->last_query(), $prm_log);
|
|
$this->db->trans_rollback();
|
|
$message = 'Terjadi kesalahan saat menyimpan data log';
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
|
|
$insert_group_order = $this->insert_group_order($header_id);
|
|
if (!$insert_group_order['status']) {
|
|
$this->db->trans_rollback();
|
|
$this->sys_error($insert_group_order['message']);
|
|
exit;
|
|
}
|
|
$group_order = $insert_group_order['data'];
|
|
|
|
// SELECT "OK" as status, JSON_OBJECT("id", orderid, "number", "EDIT") as data, "" as message;
|
|
return array(
|
|
"id" => $header_id,
|
|
"number" => $number
|
|
);
|
|
}
|
|
|
|
// private function
|
|
function insert_log_error($log_sql, $params, $data = '')
|
|
{
|
|
// Membersihkan SQL dari \r\n dan whitespace berlebih
|
|
//$clean_log_sql = trim(str_replace(["\r\n", "\r", "\n"], ' ', $log_sql));
|
|
|
|
$sql = "INSERT INTO error_log_order(
|
|
ErrorLogOrderCode,
|
|
ErrorLogOrderFnName,
|
|
ErrorLogOrderDescription,
|
|
ErrorLogOrderData,
|
|
ErrorLogOrderCreated
|
|
)
|
|
VALUES(
|
|
?,?,?,?,NOW()
|
|
)";
|
|
|
|
$query = $this->db_log->query($sql, [$params[0], $params[1], $log_sql, json_encode($data)]);
|
|
//echo $this->db_log->last_query();
|
|
if (!$query) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function save_order_header($header, $userid)
|
|
{
|
|
$return = [
|
|
"status" => true,
|
|
"message" => "",
|
|
"data" => []
|
|
];
|
|
|
|
$this->db->trans_begin();
|
|
|
|
$sql = "SELECT fn_numbering('L') xnumber";
|
|
$query = $this->db->query($sql);
|
|
if (!$query) {
|
|
$prm_log = ['SELECT_FN_NUMBERING_CPONE_TRANSACTION', 'order/save'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
$return['status'] = false;
|
|
$return['message'] = 'Terjadi kesalahan saat membuat nomor transaksi';
|
|
$this->db->trans_rollback();
|
|
return $return;
|
|
}
|
|
$rows_no_trans = $query->result_array();
|
|
//get no trans
|
|
$no_trans = $rows_no_trans[0]['xnumber'];
|
|
|
|
//insert header
|
|
$sql_header = "INSERT INTO t_orderheader (
|
|
T_OrderHeaderDate,
|
|
T_OrderHeaderLabNumber,
|
|
T_OrderHeaderM_PatientID,
|
|
T_OrderHeaderM_CompanyID,
|
|
T_OrderHeaderMgm_McuID,
|
|
T_OrderHeaderM_MouID,
|
|
T_OrderHeaderM_PatientAge,
|
|
T_OrderHeaderSenderM_DoctorID,
|
|
T_OrderHeaderSenderM_DoctorAddressID,
|
|
T_OrderHeaderPjM_DoctorID,
|
|
T_OrderHeaderPj2M_DoctorID,
|
|
T_OrderHeaderM_LangID,
|
|
T_OrderHeaderLangIsSI,
|
|
T_OrderHeaderIsCito,
|
|
T_OrderHeaderNat_CitoID,
|
|
T_OrderHeaderDiagnose,
|
|
T_OrderHeaderDoctorNote,
|
|
T_OrderHeaderFoNote,
|
|
T_OrderHeaderFoNoteM_UserID,
|
|
T_OrderHeaderReceivedSample,
|
|
T_OrderHeaderQueue,
|
|
T_OrderHeaderCreated,
|
|
T_OrderHeaderCreatedUserID,
|
|
T_OrderHeaderLastUpdated
|
|
) VALUES (NOW(),?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),?,NOW())";
|
|
$prm_header = [
|
|
$no_trans,
|
|
$header['patient_id'],
|
|
$header['company_id'],
|
|
0,
|
|
$header['mou_id'],
|
|
$header['age'],
|
|
$header['sender_doctor_id'],
|
|
$header['sender_address_id'],
|
|
$header['pj_doctor_id'],
|
|
0,
|
|
$header['lang_id'],
|
|
$header['lang_si'],
|
|
$header['is_cito'],
|
|
$header['is_cito'] == 'N' ? 0 : $header['cito_id'],
|
|
$header['diagnose'],
|
|
$header['doctor_note'],
|
|
$header['fo_note'],
|
|
$header['fo_note'] != '' ? $userid : 0,
|
|
$header['received_sample'],
|
|
$header['queue'],
|
|
$userid
|
|
];
|
|
$query_header = $this->db->query($sql_header, $prm_header);
|
|
if (!$query_header) {
|
|
$dt_log = ['data' => $prm_header, 'error' => $this->db->error()];
|
|
$prm_log = ['INSERT_T_ORDERHEADER', 'order/save_order_header'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $dt_log);
|
|
$this->db->trans_rollback();
|
|
$return = [
|
|
"status" => false,
|
|
"message" => "Terjadi kesalahan saat menyimpan data header",
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
//get header id
|
|
$header_id = $this->db->insert_id();
|
|
|
|
$sql = "SELECT
|
|
CONCAT(IF(M_TitleID is null, '', concat(M_TitleName, ' ')),IFNULL(M_PatientPrefix,''),' ',M_PatientName,' ',IFNULL(M_PatientSuffix,'')) as full_patient_name
|
|
FROM m_patient
|
|
LEFT JOIN m_title ON M_PatientM_TitleID = M_TitleID
|
|
WHERE M_PatientID = ? LIMIT 1";
|
|
$query_patient = $this->db->query($sql, [$header['patient_id']]);
|
|
if (!$query_patient) {
|
|
$prm_log = ['SELECT_M_PATIENT', 'order/save_order_header'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
$this->db->trans_rollback();
|
|
}
|
|
$rows_patient = $query_patient->row_array();
|
|
$full_patient_name = $rows_patient['full_patient_name'];
|
|
|
|
$sql = "INSERT INTO t_orderheaderaddon (
|
|
T_OrderHeaderAddOnT_OrderHeaderID,
|
|
T_OrderHeaderAddOnSecondM_LangID,
|
|
T_OrderHeaderAddOnSecondLangIsSI,
|
|
T_OrderHeaderAddOnAliasDoctorName,
|
|
T_OrderHeaderAddOnAliasDoctorAddress,
|
|
T_OrderHeaderAddOnOnlySampleTime,
|
|
T_OrderHeaderAddOnPatientMcu,
|
|
T_OrderHeaderAddOnFullPatientName,
|
|
T_OrderHeaderAddOnCreated,
|
|
T_OrderHeaderAddOnCreatedUserID
|
|
)
|
|
VALUES(
|
|
?,?,?,?,?,?,?,?,NOW(),?
|
|
)";
|
|
$prm_addon = [
|
|
$header_id,
|
|
$header['lang_id_2'],
|
|
$header['lang_si_2'],
|
|
$header['alias_doctor_name'],
|
|
$header['alias_doctor_address'],
|
|
$header['received_sample']['flag'] == 'Y' ? $header['received_sample']['time'] : null,
|
|
intval($header['pre_register_id']) > 0 ? 'Y' : 'N',
|
|
$full_patient_name,
|
|
$userid
|
|
];
|
|
$query_addon = $this->db->query($sql, $prm_addon);
|
|
if (!$query_addon) {
|
|
$prm_log = ['INSERT_T_ORDERHEADERADDON', 'order/save_order_header'];
|
|
$xsql = $this->db->last_query();
|
|
$dt_log = ['data' => $prm_addon, 'error' => $this->db->error()];
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $dt_log);
|
|
$this->db->trans_rollback();
|
|
$return = [
|
|
"status" => false,
|
|
"message" => "Terjadi kesalahan saat menyimpan data header addon",
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
$sqlheaderlang = "INSERT INTO t_orderheaderlang
|
|
(T_OrderHeaderLangT_OrderHeaderID,
|
|
T_OrderHeaderLangM_LangID,
|
|
T_OrderHeaderLangCreated,
|
|
T_OrderHeaderLangCreatedUserID,
|
|
T_OrderHeaderLangLastUpdated,
|
|
T_OrderHeaderLangLastUpdatedUserID)
|
|
VALUES(?,?,NOW(),?,NOW(),?)";
|
|
$prm_header_lang = [
|
|
$header_id,
|
|
$header['lang_id_2'] != 0 ? $header['lang_id_2'] : $header['lang_id'],
|
|
$userid,
|
|
$userid
|
|
];
|
|
$query_header_lang = $this->db->query($sqlheaderlang, $prm_header_lang);
|
|
if (!$query_header_lang) {
|
|
$prm_log = ['INSERT_T_ORDERHEADER_LANG', 'order/save'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
$this->db->trans_rollback();
|
|
$return = [
|
|
"status" => false,
|
|
"message" => "Terjadi kesalahan saat menyimpan data header lang",
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
$sql = "UPDATE m_patient SET M_PatientNote = ?, M_PatientLastUpdatedUserID = ?, M_PatientLastUpdated = NOW() WHERE M_PatientID = ?";
|
|
$query_patient_note = $this->db->query($sql, [$header['patient_note'], $userid, $header['patient_id']]);
|
|
if (!$query_patient_note) {
|
|
$dt_log = ['data' => $header['patient_note'], 'patient_id' => $header['patient_id'], 'error' => $this->db->error()];
|
|
$prm_log = ['UPDATE_M_PATIENT', 'order/save_order_header'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $dt_log);
|
|
$this->db->trans_rollback();
|
|
$return = [
|
|
"status" => false,
|
|
"message" => "Terjadi kesalahan saat menyimpan data patient note",
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
|
|
$return['data'] = [
|
|
"header_id" => $header_id,
|
|
"number" => $no_trans
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
function save_order_detail($details, $header_id, $userid)
|
|
{
|
|
$return = [
|
|
"status" => true,
|
|
"message" => "",
|
|
"data" => []
|
|
];
|
|
$this->db->trans_begin();
|
|
|
|
$tests = [];
|
|
foreach ($details as $k => $v) {
|
|
if ($v['t_ispacket'] == 'Y') {
|
|
$sql = "SELECT * FROM ss_price_mou WHERE packet_id = {$v['t_packetid']} AND is_packet = 'Y'";
|
|
$query = $this->db->query($sql);
|
|
if (!$query) {
|
|
$message = "Terjadi kesalahan saat memilih data test price";
|
|
$prm_log = ['SELECT_SS_PRICE_MOU', 'order/save_order_detail'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $v);
|
|
$this->db->trans_rollback();
|
|
$return = [
|
|
"status" => false,
|
|
"message" => $message,
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
$dt_test_price = $query->row_array();
|
|
$dt_test_price['child_test'] = json_decode($dt_test_price['child_test'], true);
|
|
//print_r($dt_test_price);
|
|
$tests[] = $dt_test_price;
|
|
} else {
|
|
$sql = "SELECT * FROM t_test WHERE T_TestID = {$v['t_id']}";
|
|
$query = $this->db->query($sql);
|
|
if (!$query) {
|
|
$message = "Terjadi kesalahan saat memilih data test";
|
|
$prm_log = ['SELECT_T_TEST', 'order/save_order_detail'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $v);
|
|
$this->db->trans_rollback();
|
|
$return = [
|
|
"status" => false,
|
|
"message" => $message,
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
$dt_test = $query->row_array();
|
|
$dt_test_price = $v;
|
|
$dt_test_price['child_test'] = [];
|
|
$dt_test_price['T_TestID'] = $dt_test['T_TestID'];
|
|
$dt_test_price['T_TestName'] = $dt_test['T_TestName'];
|
|
$dt_test_price['px_type'] = $v['t_packettype'];
|
|
$dt_test_price['T_PriceAmount'] = $v['t_price'];
|
|
$dt_test_price['T_PriceDisc'] = $v['t_disc'];
|
|
$dt_test_price['T_PriceDiscRp'] = $v['t_discrp'];
|
|
$dt_test_price['T_PriceSubTotal'] = $v['t_price'] - (($v['t_price'] * $v['t_disc'] / 100) + $v['t_disc_rp']);
|
|
$dt_test_price['T_PriceTotal'] = $dt_test_price['T_PriceSubTotal'];
|
|
$tests[] = $dt_test_price;
|
|
}
|
|
}
|
|
|
|
// print_r($tests);
|
|
// exit;
|
|
|
|
foreach ($tests as $k => $detail) {
|
|
|
|
$sql_orderdetailorder = "INSERT INTO t_orderdetailorder(
|
|
T_OrderDetailOrderT_OrderHeaderID,
|
|
T_OrderDetailOrderT_TestID,
|
|
T_OrderDetailOrderT_TestName,
|
|
T_OrderDetailOrderIsPacket,
|
|
T_OrderDetailOrderPacketType,
|
|
T_OrderDetailOrderT_PacketID,
|
|
T_OrderDetailOrderT_PacketName,
|
|
T_OrderDetailOrderT_PriceAmount,
|
|
T_OrderDetailOrderT_PriceDisc,
|
|
T_OrderDetailOrderT_PriceDiscRp,
|
|
T_OrderDetailOrderT_PriceSubTotal,
|
|
T_OrderDetailOrderT_PriceTotal,
|
|
T_OrderDetailOrderCreated,
|
|
T_OrderDetailOrderCreatedUserID,
|
|
T_OrderDetailOrderJsonChildren
|
|
)
|
|
VALUES(?,?,?,?,?,?,?,?,?,?,?,?,NOW(),?,?)";
|
|
$prm_detail_order = [
|
|
$header_id,
|
|
$detail['px_type'] == 'PX' ? $detail['T_TestID'] : '',
|
|
$detail['px_type'] == 'PX' ? $detail['T_TestName'] : '',
|
|
$detail['px_type'] != 'PX' ? 'Y' : 'N',
|
|
$detail['px_type'] != 'PX' ? $detail['px_type'] : 'PX',
|
|
$detail['px_type'] != 'PX' ? $detail['T_TestID'] : '0',
|
|
$detail['px_type'] != 'PX' ? $detail['T_TestName'] : '',
|
|
$detail['T_PriceAmount'],
|
|
$detail['T_PriceDisc'],
|
|
$detail['T_PriceDiscRp'],
|
|
$detail['T_PriceSubTotal'],
|
|
$detail['T_PriceTotal'],
|
|
$userid,
|
|
json_encode($detail['child_test'])
|
|
];
|
|
$query_detail_order = $this->db->query($sql_orderdetailorder, $prm_detail_order);
|
|
if (!$query_detail_order) {
|
|
$prm_log = ['INSERT_T_ORDERDETAILORDER', 'order/save_order_detail'];
|
|
$xsql = $this->db->last_query();
|
|
$dt_log = ['data' => $detail, 'error' => $this->db->error()];
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $dt_log);
|
|
$this->db->trans_rollback();
|
|
$return = [
|
|
"status" => false,
|
|
"message" => "Terjadi kesalahan saat menyimpan data detail order 1",
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
$detail_order_id = $this->db->insert_id();
|
|
|
|
if ($detail['px_type'] != 'PX') {
|
|
|
|
if (count($detail['child_test']) == 0) {
|
|
$message = "Detail packet tidak boleh kosong";
|
|
$prm_log = ['INSERT_T_ORDERDETAILORDER', 'order/save_order_detail'];
|
|
$dt_log = json_encode($detail);
|
|
$log_error = $this->insert_log_error($dt_log, $prm_log, $detail);
|
|
$this->db->trans_rollback();
|
|
$return = [
|
|
"status" => false,
|
|
"message" => $message,
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
foreach ($detail['child_test'] as $k => $child_test_packet) {
|
|
$child_test_packet['test_id'] = $child_test_packet['T_TestID'];
|
|
$child_test_packet['test_name'] = $child_test_packet['T_TestName'];
|
|
$detail_insert = $this->insert_order_detail($header_id, $detail_order_id, $child_test_packet, $userid);
|
|
|
|
if ($detail_insert['status'] == 'N') {
|
|
$message = $detail_insert['message'];
|
|
$this->db->trans_rollback();
|
|
$return = [
|
|
"status" => false,
|
|
"message" => $message,
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
}
|
|
} else {
|
|
$detail_insert = $this->insert_order_detail($header_id, $detail_order_id, $detail, $userid);
|
|
if ($detail_insert['status'] == 'N') {
|
|
$message = "Terjadi kesalahan saat menyimpan data detail order 2" . $detail['test_name'];
|
|
$this->db->trans_rollback();
|
|
$return = [
|
|
"status" => false,
|
|
"message" => $message,
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
|
|
return $return;
|
|
}
|
|
|
|
function insert_order_detail($header_id, $detail_order_id, $detail, $userid)
|
|
{
|
|
$this->db->trans_begin();
|
|
// Buat array untuk informasi error/success
|
|
$result = [
|
|
'status' => 'Y',
|
|
'message' => 'Success',
|
|
'test_name' => isset($detail['T_TestName']) ? $detail['T_TestName'] : '',
|
|
'test_id' => isset($detail['T_TestID']) ? $detail['T_TestID'] : '',
|
|
'test_code' => '',
|
|
'error_type' => '',
|
|
'error_detail' => []
|
|
];
|
|
|
|
// Cek data test
|
|
$sql = "SELECT * FROM t_test WHERE T_TestID = ?";
|
|
$query = $this->db->query($sql, $detail['T_TestID']);
|
|
|
|
if (!$query) {
|
|
$result['status'] = 'N';
|
|
$result['message'] = 'Terjadi kesalahan saat mengambil data test';
|
|
$result['error_type'] = 'DB_QUERY_ERROR';
|
|
$prm_log = ['SELECT_T_TEST', 'order/save_order_detail'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
$this->db->trans_rollback();
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
return $result;
|
|
}
|
|
|
|
$rows_test = $query->result_array();
|
|
if (count($rows_test) == 0) {
|
|
$result['status'] = 'N';
|
|
$result['message'] = 'Test tidak ditemukan';
|
|
$result['error_type'] = 'TEST_NOT_FOUND';
|
|
$prm_log = ['SELECT_T_TEST', 'order/save_order_detail'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
|
|
$dt_test = $rows_test[0];
|
|
//print_r($dt_test);
|
|
//return false;
|
|
// Update dengan data test yang benar dari database
|
|
$result['test_name'] = $dt_test['T_TestName'];
|
|
$result['test_code'] = $dt_test['T_TestCode'];
|
|
$result['test_sas_code'] = $dt_test['T_TestSasCode'];
|
|
|
|
$price = isset($detail['T_PriceAmount']) ? $detail['T_PriceAmount'] : $detail['price'];
|
|
$disc = isset($detail['T_PriceDisc']) ? $detail['T_PriceDisc'] : $detail['disc'];
|
|
$disc_rp = isset($detail['T_PriceDiscRp']) ? $detail['T_PriceDiscRp'] : $detail['disc_rp'];
|
|
$subtotal = isset($detail['T_PriceSubTotal']) ? $detail['T_PriceSubTotal'] : $detail['subtotal'];
|
|
$total = isset($detail['T_PriceTotal']) ? $detail['T_PriceTotal'] : $detail['total'];
|
|
|
|
$sql = "SELECT Nat_UnitID, Nat_UnitName
|
|
FROM t_test
|
|
JOIN nat_test ON T_TestNat_TestID = Nat_TestID
|
|
JOIN nat_unit ON Nat_TestNat_UnitID = Nat_UnitID
|
|
WHERE T_TestID = 2 LIMIT 1";
|
|
$dt_unit = $this->db->query($sql, $detail['T_TestID'])->row_array();
|
|
|
|
// Query insert order detail
|
|
$sql_orderdetail = "INSERT INTO t_orderdetail(
|
|
T_OrderDetailT_OrderHeaderID,
|
|
T_OrderDetailT_OrderDetailOrderID,
|
|
T_OrderDetailT_TestID,
|
|
T_OrderDetailT_TestCode,
|
|
T_OrderDetailT_TestSasCode,
|
|
T_OrderDetailT_TestName,
|
|
T_OrderDetailT_TestIsResult,
|
|
T_OrderDetailT_TestIsPanel,
|
|
T_OrderDetailT_TestIsPanelChildren,
|
|
T_OrderDetailT_TestIsPanelChildrenPrintNota,
|
|
T_OrderDetailT_TestIsPrice,
|
|
T_OrderDetailIsCito,
|
|
T_OrderDetailPrice,
|
|
T_OrderDetailPriceForDisc,
|
|
T_OrderDetailDisc,
|
|
T_OrderDetailDiscAmount,
|
|
T_OrderDetailDiscTotal,
|
|
T_OrderDetailTotal,
|
|
T_OrderDetailReq,
|
|
T_OrderDetailReqNote,
|
|
T_OrderDetailNat_UnitID,
|
|
T_OrderDetailNat_UnitName,
|
|
T_OrderDetailCreatedUserID,
|
|
T_OrderDetailCreated
|
|
) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'N','',?,?,?,NOW())";
|
|
|
|
$prm_orderdetail = [
|
|
$header_id,
|
|
$detail_order_id,
|
|
$dt_test['T_TestID'],
|
|
$dt_test['T_TestCode'],
|
|
$dt_test['T_TestSasCode'],
|
|
$dt_test['T_TestName'],
|
|
$dt_test['T_TestIsResult'],
|
|
'N',
|
|
'N',
|
|
'N',
|
|
$dt_test['T_TestIsPrice'],
|
|
'N',
|
|
$dt_test['T_TestIsPrice'] == 'N' ? 0 : $price,
|
|
$dt_test['T_TestIsPrice'] == 'N' ? 0 : $price,
|
|
$dt_test['T_TestIsPrice'] == 'N' ? 0 : $disc,
|
|
$dt_test['T_TestIsPrice'] == 'N' ? 0 : $disc_rp,
|
|
$dt_test['T_TestIsPrice'] == 'N' ? 0 : $subtotal,
|
|
$dt_test['T_TestIsPrice'] == 'N' ? 0 : $total,
|
|
$dt_unit['Nat_UnitID'],
|
|
$dt_unit['Nat_UnitName'],
|
|
$userid
|
|
];
|
|
|
|
$query_orderdetail = $this->db->query($sql_orderdetail, $prm_orderdetail);
|
|
//echo $this->db->last_query();
|
|
if (!$query_orderdetail) {
|
|
$result['status'] = 'N';
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data detail order 3';
|
|
$result['error_type'] = 'INSERT_DETAIL_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['INSERT_T_ORDERDETAIL', 'order/save_order_detail'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $dt_test);
|
|
$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
|
|
// Ambil child test
|
|
$sql = "SELECT * FROM t_test WHERE T_TestSasCode LIKE ? AND T_TestIsActive = 'Y' AND T_TestSasCode != ?";
|
|
$query = $this->db->query($sql, [$dt_test['T_TestSasCode'] . '%', $dt_test['T_TestSasCode']]);
|
|
|
|
if (!$query) {
|
|
$result['status'] = 'N';
|
|
$result['message'] = 'Terjadi kesalahan saat mengambil data child test';
|
|
$result['error_type'] = 'CHILD_TEST_QUERY_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query(),
|
|
'parent_test' => [
|
|
'id' => $dt_test['T_TestID'],
|
|
'name' => $dt_test['T_TestName'],
|
|
'code' => $dt_test['T_TestCode'],
|
|
'sas_code' => $dt_test['T_TestSasCode']
|
|
]
|
|
];
|
|
$prm_log = ['SELECT_CHILD_TEST', 'order/save_order_detail'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $result['error_detail']);
|
|
$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
|
|
$rows_test_child = $query->result_array();
|
|
if (count($rows_test_child) > 0) {
|
|
// Tambahkan informasi jumlah child test yang ditemukan
|
|
$result['child_tests_count'] = count($rows_test_child);
|
|
|
|
foreach ($rows_test_child as $k_child => $test_child) {
|
|
$sql = "SELECT Nat_UnitID, Nat_UnitName
|
|
FROM t_test
|
|
JOIN nat_test ON T_TestNat_TestID = Nat_TestID
|
|
JOIN nat_unit ON Nat_TestNat_UnitID = Nat_UnitID
|
|
WHERE T_TestID = ? LIMIT 1";
|
|
$dt_child_unit = $this->db->query($sql, $test_child['T_TestID'])->row_array();
|
|
$sql_orderdetail = "INSERT INTO t_orderdetail(
|
|
T_OrderDetailT_OrderHeaderID,
|
|
T_OrderDetailT_OrderDetailOrderID,
|
|
T_OrderDetailT_TestID,
|
|
T_OrderDetailT_TestCode,
|
|
T_OrderDetailT_TestSasCode,
|
|
T_OrderDetailT_TestName,
|
|
T_OrderDetailT_TestIsResult,
|
|
T_OrderDetailT_TestIsPanel,
|
|
T_OrderDetailT_TestIsPanelChildren,
|
|
T_OrderDetailT_TestIsPanelChildrenPrintNota,
|
|
T_OrderDetailT_TestIsPrice,
|
|
T_OrderDetailIsCito,
|
|
T_OrderDetailPrice,
|
|
T_OrderDetailPriceForDisc,
|
|
T_OrderDetailDisc,
|
|
T_OrderDetailDiscAmount,
|
|
T_OrderDetailDiscTotal,
|
|
T_OrderDetailTotal,
|
|
T_OrderDetailReq,
|
|
T_OrderDetailReqNote,
|
|
T_OrderDetailCreated,
|
|
T_OrderDetailNat_UnitID,
|
|
T_OrderDetailNat_UnitName,
|
|
T_OrderDetailCreatedUserID
|
|
) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,'N','',NOW(),?,?,?)";
|
|
|
|
$prm_orderdetail = [
|
|
$header_id,
|
|
$detail_order_id,
|
|
$test_child['T_TestID'],
|
|
$test_child['T_TestCode'],
|
|
$test_child['T_TestSasCode'],
|
|
$test_child['T_TestName'],
|
|
$test_child['T_TestIsResult'],
|
|
'N',
|
|
'N',
|
|
'N',
|
|
$test_child['T_TestIsPrice'],
|
|
'N',
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
0,
|
|
$dt_child_unit['Nat_UnitID'],
|
|
$dt_child_unit['Nat_UnitName'],
|
|
$userid
|
|
];
|
|
// echo $this->db->last_query();
|
|
$query_child = $this->db->query($sql_orderdetail, $prm_orderdetail);
|
|
if (!$query_child) {
|
|
$result['status'] = 'N';
|
|
$xsql = $this->db->last_query();
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data child test ' . $test_child['T_TestName'];
|
|
$result['error_type'] = 'INSERT_CHILD_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $xsql,
|
|
'child_index' => $k_child + 1,
|
|
'total_children' => count($rows_test_child),
|
|
'child_test' => [
|
|
'id' => $test_child['T_TestID'],
|
|
'name' => $test_child['T_TestName'],
|
|
'code' => $test_child['T_TestCode'],
|
|
'sas_code' => $test_child['T_TestSasCode']
|
|
],
|
|
'parent_test' => [
|
|
'id' => $dt_test['T_TestID'],
|
|
'name' => $dt_test['T_TestName'],
|
|
'code' => $dt_test['T_TestCode'],
|
|
'sas_code' => $dt_test['T_TestSasCode']
|
|
]
|
|
];
|
|
$prm_log = ['INSERT_T_ORDERDETAIL_CHILD', 'order/save_order_detail'];
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $result['error_detail']);
|
|
$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
// Jika semua proses berhasil
|
|
if (count($rows_test_child) > 0) {
|
|
$result['message'] = 'Berhasil menyimpan data test utama dan ' . count($rows_test_child) . ' child test';
|
|
} else {
|
|
$result['message'] = 'Berhasil menyimpan data test';
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
function generate_sample_lab($header_id, $userid)
|
|
{
|
|
$this->db->trans_begin();
|
|
|
|
$result = [
|
|
'status' => true,
|
|
'message' => 'Success',
|
|
'error_type' => '',
|
|
'error_detail' => []
|
|
];
|
|
|
|
$counter_barcode = 1;
|
|
$sql = "SELECT T_OrderHeaderLabNumber,
|
|
T_TestID,
|
|
T_SampleTypeID ,
|
|
T_SampleTypeSuffix,
|
|
T_SampleStationIsNonLab,
|
|
T_SampleStationID
|
|
FROM t_orderheader
|
|
JOIN t_orderdetail ON t_orderheaderid = t_orderdetailt_orderheaderid AND t_orderdetailIsActive = 'Y'
|
|
JOIN t_test ON t_orderdetailt_testid = t_testid AND T_TestIsResult = 'Y'
|
|
JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID
|
|
JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID
|
|
JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID
|
|
JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID AND Group_ResultDetailIsActive = 'Y'
|
|
JOIN group_result ON Group_ResultID = Group_ResultDetailGroup_ResultID AND Group_ResultIsActive = 'Y' AND
|
|
Group_ResultFlagNonLab = 'N'
|
|
WHERE T_OrderHeaderID = ?
|
|
GROUP BY T_SampleTypeID";
|
|
$qry = $this->db->query($sql, $header_id);
|
|
if (!$qry) {
|
|
$err = $this->db->error();
|
|
$prm_log = ['SELECT_SAMPLE', 'order/generate_sample_lab', $err];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat mengambil data sample';
|
|
$result['error_type'] = 'SAMPLE_QUERY_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $err,
|
|
'last_query' => $xsql
|
|
];
|
|
$prm_log = ['SELECT_SAMPLE', 'order/generate_sample_lab'];
|
|
|
|
$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
|
|
$data_samples = $qry->result_array();
|
|
|
|
if (count($data_samples) > 0) {
|
|
foreach ($data_samples as $k => $v) {
|
|
$counter_barcode = 1;
|
|
$lab_no = $v['T_OrderHeaderLabNumber'];
|
|
$test_id = $v['T_TestID'];
|
|
$sample_id = $v['T_SampleTypeID'];
|
|
$sample_code = $v['T_SampleTypeSuffix'];
|
|
$barcode = $lab_no . $sample_code;
|
|
$isnonlab = $v['T_SampleStationIsNonLab'];
|
|
$samplestation_id = $v['T_SampleStationID'];
|
|
|
|
if ($counter_barcode == 1) {
|
|
$barcode = $barcode . $counter_barcode;
|
|
$sql = "INSERT INTO t_barcodelab(
|
|
T_BarcodeLabT_OrderHeaderID,
|
|
T_BarcodeLabBarcode,
|
|
T_BarcodeLabT_SampleTypeID,
|
|
T_BarcodeLabCounter)
|
|
VALUES (?,?,?,?)";
|
|
$prm_barcode = [
|
|
$header_id,
|
|
$barcode,
|
|
$sample_id,
|
|
$counter_barcode
|
|
];
|
|
$qry = $this->db->query($sql, $prm_barcode);
|
|
//echo $this->db->last_query();
|
|
if (!$qry) {
|
|
echo $this->db->last_query();
|
|
$err = $this->db->error();
|
|
$prm_log = ['INSERT_T_BARCODELAB', 'order/generate_sample_lab', $err];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
$this->db->trans_rollback();
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data barcode lab';
|
|
$result['error_type'] = 'BARCODE_LAB_INSERT_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $log_error,
|
|
'last_query' => $xsql
|
|
];
|
|
return $result;
|
|
}
|
|
|
|
$last_id_barcode = $this->db->insert_id();
|
|
/*if ($isnonlab == "") {
|
|
$sql = "INSERT INTO t_ordersample(
|
|
T_OrderSampleT_OrderHeaderID,
|
|
T_OrderSampleT_SampleTypeID,
|
|
T_OrderSampleT_BarcodeLabID,
|
|
T_OrderSampleBarcode,
|
|
T_OrderSampleT_SampleStationID,
|
|
T_OrderSampleCreated)
|
|
VALUES (?,?,?,?,?,NOW())";
|
|
$prm_ordersample = [
|
|
$header_id,
|
|
$sample_id,
|
|
$last_id_barcode,
|
|
$barcode,
|
|
$samplestation_id
|
|
];
|
|
$qry = $this->db->query($sql, $prm_ordersample);
|
|
if (!$qry) {
|
|
echo $this->db->last_query();
|
|
$err = $this->db->error();
|
|
$prm_log = ['INSERT_T_ORDERSAMPLE', 'order/generate_sample_lab', $err];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data sample ' . $sample_code;
|
|
$result['error_type'] = 'SAMPLE_INSERT_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $log_error,
|
|
'last_query' => $xsql
|
|
];
|
|
|
|
$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
}*/
|
|
}
|
|
|
|
$sql = "SELECT MAX(T_BarcodeLabCounter) as ctr
|
|
FROM t_barcodelab
|
|
WHERE T_BarcodeLabT_OrderHeaderID = ? AND
|
|
T_BarcodeLabBarcode LIKE CONCAT(?, '%')
|
|
AND T_BarcodeLabIsActive = 'Y'";
|
|
$qry = $this->db->query($sql, [$header_id, $barcode]);
|
|
|
|
if ($qry) {
|
|
$ctr = $qry->row()->ctr;
|
|
$counter_barcode = $ctr + 1;
|
|
} else {
|
|
$err = $this->db->error();
|
|
$prm_log = ['SELECT_COUNTER_BARCODE', 'order/generate_sample_lab', $err];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat mengambil data counter barcode';
|
|
$result['error_type'] = 'COUNTER_BARCODE_QUERY_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $log_error,
|
|
'last_query' => $xsql
|
|
];
|
|
|
|
$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
|
|
return $result;
|
|
}
|
|
|
|
function generate_location($header_id, $userid)
|
|
{
|
|
$result = [
|
|
'status' => true,
|
|
'message' => 'Success',
|
|
'error_type' => '',
|
|
'error_detail' => []
|
|
];
|
|
|
|
|
|
$sql = "SELECT T_SampleStationID,T_SampleStationName
|
|
FROM t_orderdetail
|
|
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsActive = 'Y'
|
|
JOIN t_sampletype ON T_TestT_SampleTypeID = T_SampleTypeID
|
|
JOIN t_bahan ON T_SampleTypeT_BahanID = T_BahanID
|
|
JOIN t_samplestation ON T_BahanT_SampleStationID = T_SampleStationID
|
|
WHERE
|
|
T_OrderDetailT_OrderHeaderID = ?
|
|
GROUP BY T_SampleStationID ";
|
|
$qry = $this->db->query($sql, $header_id);
|
|
|
|
$data_samples = $qry->result_array();
|
|
foreach ($data_samples as $k => $v) {
|
|
$sample_id = $v['T_SampleStationID'];
|
|
$sql = "SELECT M_LocationID as loc_id
|
|
FROM m_location
|
|
WHERE M_LocationT_SampleStationID = ?
|
|
ORDER BY M_LocationPriority DESC, M_LocationID ASC
|
|
LIMIT 1";
|
|
$qry = $this->db->query($sql, $sample_id);
|
|
if (!$qry) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat mengambil data lokasi ' . $v['T_SampleStationName'];
|
|
$result['error_type'] = 'LOCATION_QUERY_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['SELECT_LOCATION', 'order/generate_location'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
//$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
$loc_id = $qry->row()->loc_id;
|
|
|
|
$sql = "INSERT INTO t_order_location(
|
|
T_OrderLocationT_OrderHeaderID,
|
|
T_OrderLocationM_LocationID,
|
|
T_OrderLocationT_SampleStationID,
|
|
T_OrderLocationCreated,
|
|
T_OrderLocationLastUpdated,
|
|
T_OrderLocationUserID)
|
|
VALUES (?,?,?,NOW(),NOW(),?)";
|
|
$prm_orderlocation = [
|
|
$header_id,
|
|
$loc_id,
|
|
$sample_id,
|
|
$userid
|
|
];
|
|
$qry = $this->db->query($sql, $prm_orderlocation);
|
|
if (!$qry) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data lokasi';
|
|
$result['error_type'] = 'ORDER_LOCATION_INSERT_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['INSERT_T_ORDERLOCATION', 'order/generate_location'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
//$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
|
|
//file_get_contents("http://127.0.0.1:9088/broadcast/sm.new." . $sample_id . "." . $mcuid . "." . $branch_id);
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
function generate_req($header_id, $req, $userid)
|
|
{
|
|
$this->db->trans_begin();
|
|
|
|
$result = [
|
|
'status' => true,
|
|
'message' => 'Success',
|
|
'error_type' => '',
|
|
'error_detail' => []
|
|
];
|
|
|
|
$sql = $this->db->query("SELECT Nat_PositionID as req_id FROM nat_position WHERE Nat_PositionCode = 'FO'")->row();
|
|
$req_id = $sql->req_id;
|
|
|
|
$req_status = $req['status'];
|
|
$req_tmp = "0";
|
|
$req['reqs'] = json_decode($req['reqs'], true);
|
|
if (count($req['reqs']) > 0) {
|
|
foreach ($req['reqs'] as $value) {
|
|
$req_tmp .= "," . $value;
|
|
}
|
|
}
|
|
$reqid = "[" . $req_tmp . "]";
|
|
|
|
$sql = "INSERT INTO t_orderreq(
|
|
T_OrderReqT_OrderHeaderID,
|
|
T_OrderReqNat_PositionID,
|
|
T_OrderReqStatus,
|
|
T_OrderReqT_TestID,
|
|
T_OrderReqs)
|
|
VALUES (?,?,?,?,?)";
|
|
$prm_orderreq = [
|
|
$header_id,
|
|
$req_id,
|
|
$req_status,
|
|
'[]',
|
|
$reqid
|
|
];
|
|
$qry = $this->db->query($sql, $prm_orderreq);
|
|
|
|
if (!$qry) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data request';
|
|
$result['error_type'] = 'ORDER_REQ_INSERT_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['INSERT_T_ORDERREQ', 'order/generate_req'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
//$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
|
|
return $result;
|
|
}
|
|
|
|
function update_preregister_promise($header_id, $preregister_promise, $preregister_id, $userid)
|
|
{
|
|
$result = [
|
|
'status' => true,
|
|
'message' => 'Success',
|
|
'error_type' => '',
|
|
'error_detail' => []
|
|
];
|
|
|
|
//$this->db->trans_begin();
|
|
|
|
if (intval($preregister_id) == 0) {
|
|
// generate promise baru untuk yang dari order
|
|
$set_order_promise = $this->generate_order_promise($header_id);
|
|
if (!$set_order_promise['status']) {
|
|
$result['status'] = false;
|
|
$result['message'] = $set_order_promise['message'];
|
|
$result['error_type'] = $set_order_promise['error_type'];
|
|
$result['error_detail'] = $set_order_promise['error_detail'];
|
|
//$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
} else {
|
|
// hapus promise yang aktif
|
|
$not_active_promise = $this->not_active_promise($header_id);
|
|
|
|
// generate promise baru untuk yang dari preregister
|
|
$sql = "INSERT INTO t_orderpromise(T_OrderPromiseT_OrderHeaderID, T_OrderPromiseDateTime) VALUES (?, ?)";
|
|
$query = $this->db->query($sql, [$header_id, $preregister_promise]);
|
|
if (!$query) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data promise';
|
|
$result['error_type'] = 'INSERT_PROMISE_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['INSERT_T_ORDERPROMISE', 'order/update_preregister_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
|
|
$order_promise_id = $this->db->insert_id();
|
|
|
|
$sql = "UPDATE t_orderdetail SET T_OrderDetailT_OrderPromiseID = ? WHERE T_OrderDetailT_OrderHeaderID = ?";
|
|
$query = $this->db->query($sql, [$order_promise_id, $header_id]);
|
|
if (!$query) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat update detail order';
|
|
$result['error_type'] = 'UPDATE_ORDER_DETAIL_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['UPDATE_T_ORDERDETAIL_PROMISE', 'order/update_preregister_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
|
|
$log_promise = $this->insert_log_promise('active', $header_id, $order_promise_id, $userid);
|
|
if (!$log_promise['status']) {
|
|
$result['status'] = false;
|
|
$result['message'] = $log_promise['message'];
|
|
$result['error_type'] = $log_promise['error_type'];
|
|
$result['error_detail'] = $log_promise['error_detail'];
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
function generate_order_promise($orderid)
|
|
{
|
|
$result = [
|
|
'status' => true,
|
|
'message' => 'Success',
|
|
'error_type' => '',
|
|
'error_detail' => []
|
|
];
|
|
|
|
/// $this->db->trans_begin();
|
|
|
|
try {
|
|
// Update existing promises to inactive
|
|
|
|
$not_active_promise = $this->not_active_promise($orderid);
|
|
if (!$not_active_promise['status']) {
|
|
$result['status'] = false;
|
|
$result['message'] = $not_active_promise['message'];
|
|
$result['error_type'] = $not_active_promise['error_type'];
|
|
$result['error_detail'] = $not_active_promise['error_detail'];
|
|
$prm_log = ['NOT_ACTIVE_PROMISE_ERROR', 'order/generate_order_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
|
|
// Get order details with cito information
|
|
$sql_details = "SELECT b.T_OrderDetailID, b.T_OrderDetailT_TestID, b.T_OrderDetailIsCito,
|
|
T_OrderHeaderIsCito, IFNULL(Nat_CitoID, 0) as Nat_CitoID,
|
|
IFNULL(Nat_CitoDuration, 0) as Nat_CitoDuration
|
|
FROM t_orderdetail a
|
|
JOIN t_orderdetail b on b.T_OrderdetailT_OrderHeaderID = ? AND b.T_OrderDetailIsActive = 'Y'
|
|
AND b.T_OrderDetailT_TestSasCode LIKE CONCAT(a.T_OrderDetailT_TestSasCode, '%')
|
|
JOIN t_orderheader ON b.T_OrderDetailT_OrderHeaderID = T_OrderHeaderID
|
|
LEFT JOIN nat_cito ON T_OrderHeaderIsCito = 'Y' AND T_OrderHeaderNat_CitoID = Nat_CitoID
|
|
WHERE a.T_OrderDetailT_OrderHeaderID = ?
|
|
AND a.T_OrderDetailIsActive = 'Y'
|
|
AND a.T_OrderDetailT_TestIsPrice = 'Y'";
|
|
|
|
$query_details = $this->db->query($sql_details, [$orderid, $orderid]);
|
|
if (!$query_details) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat mengambil data detail order';
|
|
$result['error_type'] = 'SELECT_ORDER_DETAIL_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['SELECT_ORDER_DETAIL_ERROR', 'order/generate_order_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
//$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
|
|
$details = $query_details->result_array();
|
|
|
|
// Initialize variables
|
|
$c_search = []; // Array to store dates
|
|
$c_dt = []; // Array to store datetime values
|
|
$c_data = []; // Array to store promise IDs
|
|
$cito_tmp = null;
|
|
$cito_tmp_id = null;
|
|
|
|
$order_promise_ids = [];
|
|
|
|
foreach ($details as $detail) {
|
|
$detail_id = $detail['T_OrderDetailID'];
|
|
$test_id = $detail['T_OrderDetailT_TestID'];
|
|
$is_cito_d = $detail['T_OrderDetailIsCito'];
|
|
$is_cito_h = $detail['T_OrderHeaderIsCito'];
|
|
$cito_id = $detail['Nat_CitoID'];
|
|
$cito_dur = $detail['Nat_CitoDuration'];
|
|
|
|
// Handle CITO logic
|
|
if ($is_cito_d == 'Y' && $is_cito_h == 'Y' && $cito_id != 0) {
|
|
if ($cito_tmp === null) {
|
|
$dur_hour = floor($cito_dur / 60);
|
|
$dur_min = $cito_dur % 60;
|
|
$tmp = date('Y-m-d H:i:s', strtotime("+{$dur_hour} hours +{$dur_min} minutes"));
|
|
$cito_tmp = $tmp;
|
|
|
|
// Insert CITO promise
|
|
$sql_insert_cito = "INSERT INTO t_orderpromise(T_OrderPromiseT_OrderHeaderID, T_OrderPromiseDateTime) VALUES (?, ?)";
|
|
$query_insert_cito = $this->db->query($sql_insert_cito, [$orderid, $cito_tmp]);
|
|
if (!$query_insert_cito) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data promise CITO';
|
|
$result['error_type'] = 'INSERT_CITO_PROMISE_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
$cito_tmp_id = $this->db->insert_id();
|
|
$order_promise_ids[] = $cito_tmp_id;
|
|
}
|
|
|
|
// Update detail with CITO promise ID
|
|
$sql_update_detail = "UPDATE t_orderdetail SET T_OrderDetailT_OrderPromiseID = ? WHERE T_OrderDetailID = ?";
|
|
$query_update_detail = $this->db->query($sql_update_detail, [$cito_tmp_id, $detail_id]);
|
|
if (!$query_update_detail) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat update detail dengan promise CITO';
|
|
$result['error_type'] = 'UPDATE_DETAIL_CITO_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
//$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
|
|
$log_promise = $this->insert_log_promise('active', $orderid, $cito_tmp_id, $userid);
|
|
if (!$log_promise['status']) {
|
|
$result['status'] = false;
|
|
$result['message'] = $log_promise['message'];
|
|
$result['error_type'] = $log_promise['error_type'];
|
|
$result['error_detail'] = $log_promise['error_detail'];
|
|
}
|
|
continue; // Skip to next iteration
|
|
}
|
|
|
|
// Get promise for non-CITO tests
|
|
$sql_promise = "SELECT fn_fo_find_promise_per_px_v2(?, ?) as promise_date";
|
|
$query_promise = $this->db->query($sql_promise, [$test_id, $orderid]);
|
|
if (!$query_promise) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat mengambil data promise';
|
|
$result['error_type'] = 'SELECT_PROMISE_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['SELECT_PROMISE_ERROR', 'order/generate_order_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
|
|
$promise_row = $query_promise->row();
|
|
$tmp = $promise_row->promise_date;
|
|
|
|
// Handle null or invalid date
|
|
if ($tmp == '0000-00-00 00:00:00' || $tmp == null) {
|
|
$tmp = null;
|
|
}
|
|
|
|
if ($tmp !== null) {
|
|
$tmp_d = date('Y-m-d', strtotime($tmp));
|
|
$tmp_t = date('H:i:s', strtotime($tmp));
|
|
|
|
$ln = count($c_search);
|
|
|
|
if ($ln < 1) {
|
|
// First entry
|
|
$c_search[] = $tmp_d;
|
|
$c_dt[] = $tmp;
|
|
|
|
// Insert promise
|
|
$sql_insert = "INSERT INTO t_orderpromise(T_OrderPromiseT_OrderHeaderID, T_OrderPromiseDateTime) VALUES (?, ?)";
|
|
$query_insert = $this->db->query($sql_insert, [$orderid, $tmp]);
|
|
if (!$query_insert) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data promise';
|
|
$result['error_type'] = 'INSERT_PROMISE_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['INSERT_PROMISE_ERROR', 'order/generate_order_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
|
|
$lid = $this->db->insert_id();
|
|
$order_promise_ids[] = $lid;
|
|
$c_data[] = $lid;
|
|
|
|
// Update detail
|
|
$sql_update_detail = "UPDATE t_orderdetail SET T_OrderDetailT_OrderPromiseID = ? WHERE T_OrderDetailID = ? AND T_OrderDetailIsActive = 'Y'";
|
|
$query_update_detail = $this->db->query($sql_update_detail, [$lid, $detail_id]);
|
|
if (!$query_update_detail) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat update detail dengan promise';
|
|
$result['error_type'] = 'UPDATE_DETAIL_PROMISE_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['UPDATE_DETAIL_PROMISE_ERROR', 'order/generate_order_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
} else {
|
|
// Check if date already exists
|
|
$c_idx = array_search($tmp_d, $c_search);
|
|
|
|
if ($c_idx !== false) {
|
|
// Date exists, check time
|
|
$c_t = date('H:i:s', strtotime($c_dt[$c_idx]));
|
|
$c_data_tmp = $c_data[$c_idx];
|
|
|
|
if ($tmp_t > $c_t) {
|
|
// Update with later time
|
|
$c_dt[$c_idx] = $tmp;
|
|
$sql_update_promise = "UPDATE t_orderpromise SET T_OrderPromiseDateTime = ? WHERE T_OrderPromiseID = ?";
|
|
$query_update_promise = $this->db->query($sql_update_promise, [$tmp, $c_data_tmp]);
|
|
if (!$query_update_promise) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat update promise datetime';
|
|
$result['error_type'] = 'UPDATE_PROMISE_DATETIME_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['UPDATE_PROMISE_DATETIME_ERROR', 'order/generate_order_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
}
|
|
|
|
// Update detail with existing promise ID
|
|
$sql_update_detail = "UPDATE t_orderdetail SET T_OrderDetailT_OrderPromiseID = ? WHERE T_OrderDetailID = ? AND T_OrderDetailIsActive = 'Y'";
|
|
$query_update_detail = $this->db->query($sql_update_detail, [$c_data_tmp, $detail_id]);
|
|
if (!$query_update_detail) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat update detail dengan promise existing';
|
|
$result['error_type'] = 'UPDATE_DETAIL_EXISTING_PROMISE_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['UPDATE_DETAIL_EXISTING_PROMISE_ERROR', 'order/generate_order_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
} else {
|
|
// New date, add to arrays
|
|
$c_search[] = $tmp_d;
|
|
$c_dt[] = $tmp;
|
|
|
|
// Insert new promise
|
|
$sql_insert = "INSERT INTO t_orderpromise(T_OrderPromiseT_OrderHeaderID, T_OrderPromiseDateTime) VALUES (?, ?)";
|
|
$query_insert = $this->db->query($sql_insert, [$orderid, $tmp]);
|
|
if (!$query_insert) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data promise baru';
|
|
$result['error_type'] = 'INSERT_NEW_PROMISE_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['INSERT_NEW_PROMISE_ERROR', 'order/generate_order_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
|
|
$lid = $this->db->insert_id();
|
|
$c_data[] = $lid;
|
|
|
|
// Update detail
|
|
$sql_update_detail = "UPDATE t_orderdetail SET T_OrderDetailT_OrderPromiseID = ? WHERE T_OrderDetailID = ? AND T_OrderDetailIsActive = 'Y'";
|
|
$query_update_detail = $this->db->query($sql_update_detail, [$lid, $detail_id]);
|
|
if (!$query_update_detail) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat update detail dengan promise baru';
|
|
$result['error_type'] = 'UPDATE_DETAIL_NEW_PROMISE_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['UPDATE_DETAIL_NEW_PROMISE_ERROR', 'order/generate_order_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (count($c_data) > 0) {
|
|
foreach ($c_data as $c_data_id) {
|
|
$log_promise = $this->insert_log_promise('active', $orderid, $c_data_id, $userid);
|
|
if (!$log_promise['status']) {
|
|
$result['status'] = false;
|
|
$result['message'] = $log_promise['message'];
|
|
$result['error_type'] = $log_promise['error_type'];
|
|
$result['error_detail'] = $log_promise['error_detail'];
|
|
$prm_log = ['INSERT_LOG_PROMISE_ERROR', 'order/generate_order_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
}
|
|
}
|
|
}
|
|
|
|
//$this->db->trans_commit();
|
|
return $result;
|
|
} catch (Exception $e) {
|
|
//$this->db->trans_rollback();
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan: ' . $e->getMessage();
|
|
$result['error_type'] = 'EXCEPTION';
|
|
$result['error_detail'] = [
|
|
'exception' => $e->getMessage(),
|
|
'file' => $e->getFile(),
|
|
'line' => $e->getLine()
|
|
];
|
|
return $result;
|
|
}
|
|
}
|
|
|
|
function not_active_promise($header_id)
|
|
{
|
|
$result = [
|
|
'status' => true,
|
|
'message' => 'Success',
|
|
'error_type' => '',
|
|
'error_detail' => []
|
|
];
|
|
|
|
$sql = "SELECT T_OrderPromiseID FROM t_orderpromise WHERE T_OrderPromiseT_OrderHeaderID = ? AND T_OrderPromiseIsActive = 'Y'";
|
|
$query = $this->db->query($sql, [$header_id]);
|
|
if (!$query) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat mengambil data promise';
|
|
$result['error_type'] = 'SELECT_PROMISE_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['SELECT_PROMISE_ERROR', 'order/update_preregister_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
//$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
$promise_ids = $query->result_array();
|
|
|
|
if (count($promise_ids) > 0) {
|
|
foreach ($promise_ids as $promise_id) {
|
|
$log_promise = $this->insert_log_promise('not_active', $header_id, $promise_id['T_OrderPromiseID'], $userid);
|
|
if (!$log_promise['status']) {
|
|
$result['status'] = false;
|
|
$result['message'] = $log_promise['message'];
|
|
$result['error_type'] = $log_promise['error_type'];
|
|
$result['error_detail'] = $log_promise['error_detail'];
|
|
$prm_log = ['INSERT_ORDER_LOG_PROMISE', 'order/not_active_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
|
|
$sql = "UPDATE t_orderpromise SET T_OrderPromiseIsActive = 'N' WHERE T_OrderPromiseID = ?";
|
|
$query = $this->db->query($sql, [$promise_id['T_OrderPromiseID']]);
|
|
if (!$query) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat update promise';
|
|
$result['error_type'] = 'UPDATE_PROMISE_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['UPDATE_T_ORDERPROMISE', 'order/not_active_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
function insert_log_promise($type, $header_id, $promise_id, $userid)
|
|
{
|
|
$result = [
|
|
'status' => true,
|
|
'message' => 'Success',
|
|
'error_type' => '',
|
|
'error_detail' => []
|
|
];
|
|
|
|
$sql = "SELECT T_OrderDetailID as xid,
|
|
T_OrderDetailT_TestID as test_id,
|
|
T_OrderDetailT_TestName as test_name,
|
|
T_OrderDetailT_TestSasCode as test_sas_code
|
|
FROM t_orderdetail
|
|
WHERE
|
|
T_OrderDetailT_OrderPromiseID = ? AND
|
|
T_OrderDetailIsActive = 'Y'";
|
|
$query = $this->db->query($sql, [$promise_id['T_OrderPromiseID']]);
|
|
if (!$query) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat mengambil data detail order';
|
|
$result['error_type'] = 'SELECT_ORDER_DETAIL_NOT_ACTIVE_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['SELECT_ORDER_DETAIL_NOT_ACTIVE_ERROR', 'order/insert_log_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
|
|
$detail_ids = $query->result_array();
|
|
|
|
if (count($detail_ids) > 0) {
|
|
$sql = "INSERT INTO order_log_promise(
|
|
Order_LogPromiseType,
|
|
Order_LogPromiseT_OrderHeaderID,
|
|
Order_LogPromiseT_OrderPromiseID,
|
|
Order_LogPromiseDetails,
|
|
Order_LogPromiseCreatedUserID,
|
|
Order_LogPromiseCreated
|
|
) VALUES (
|
|
?,
|
|
?,
|
|
?,
|
|
?,
|
|
NOW()
|
|
)";
|
|
$prm_orderlogpromise = [
|
|
$type,
|
|
$header_id,
|
|
$promise_id,
|
|
json_encode($detail_ids),
|
|
$userid
|
|
];
|
|
|
|
$qry = $this->db->query($sql, $prm_orderlogpromise);
|
|
if (!$qry) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data promise log';
|
|
$result['error_type'] = 'ORDER_LOG_PROMISE_INSERT_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['INSERT_ORDER_LOG_PROMISE', 'order/insert_log_promise'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
function save_delivery($header_id, $deliveries, $userid)
|
|
{
|
|
$result = [
|
|
'status' => true,
|
|
'message' => 'Success',
|
|
'error_type' => '',
|
|
'error_detail' => []
|
|
];
|
|
|
|
$this->db->trans_begin();
|
|
|
|
if (count($deliveries) > 0) {
|
|
foreach ($deliveries as $key => $delivery) {
|
|
$destination = $delivery['note'];
|
|
if (($delivery['delivery_code'] == 'EMAIL' || $delivery['delivery_code'] == 'WHATSAPP' || $delivery['delivery_code'] == 'TELEGRAM') && $delivery['noteplus'] != '') {
|
|
$destination = $delivery['noteplus'];
|
|
}
|
|
$sql = "INSERT INTO t_orderdelivery(
|
|
T_OrderDeliveryT_OrderHeaderID,
|
|
T_OrderDeliveryM_DeliveryID,
|
|
T_OrderDeliveryM_DeliveryTypeID,
|
|
T_OrderDeliveryDestination,
|
|
T_OrderDeliveryAddressID,
|
|
T_OrderDeliveryRegionalCd,
|
|
T_OrderDeliveryCreated,
|
|
T_OrderDeliveryCreatedUserID
|
|
) VALUES (?,?,?,?,?,?,NOW(),?)";
|
|
$prm_orderdelivery = [
|
|
$header_id,
|
|
$delivery['delivery_id'],
|
|
$delivery['delivery_type_id'],
|
|
$destination,
|
|
$delivery['address_id'],
|
|
$delivery['regional_cd'],
|
|
$userid
|
|
];
|
|
$qry = $this->db->query($sql, $prm_orderdelivery);
|
|
if (!$qry) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data delivery';
|
|
$result['error_type'] = 'ORDER_DELIVERY_INSERT_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['INSERT_T_ORDERDELIVERY', 'order/save_delivery', $delivery];
|
|
$log_error = $this->insert_log_error($this->db->last_query(), $prm_log);
|
|
//$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
|
|
$xdel_id = $this->db->insert_id();
|
|
|
|
if ($delivery['delivery_code'] != 'EMAIL' && $delivery['delivery_code'] != 'WHATSAPP' && $delivery['delivery_code'] != 'TELEGRAM' && $delivery['noteplus'] != '') {
|
|
$sql = "INSERT INTO t_orderdeliverynote(
|
|
T_OrderDeliveryNoteT_OrderDeliveryID,
|
|
T_OrderDeliveryNoteValue,
|
|
T_OrderDeliveryNoteCreated,
|
|
T_OrderDeliveryNoteCreatedUserID
|
|
)
|
|
VALUES(
|
|
?,
|
|
?,
|
|
NOW(),
|
|
?
|
|
)";
|
|
$prm_orderdeliverynote = [
|
|
$xdel_id,
|
|
$delivery['noteplus'],
|
|
$userid
|
|
];
|
|
$qry = $this->db->query($sql, $prm_orderdeliverynote);
|
|
if (!$qry) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data delivery note';
|
|
$result['error_type'] = 'ORDER_DELIVERY_NOTE_INSERT_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['INSERT_T_ORDERDELIVERYNOTE', 'order/save_delivery', $xdel_id];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
//$this->db->trans_rollback();
|
|
return $result;
|
|
}
|
|
}
|
|
|
|
// Jika $delivery['delivery_type_id'] == 3
|
|
|
|
// START
|
|
if ($delivery['delivery_type_id'] == 3) {
|
|
$sql_header_info = "SELECT
|
|
CONCAT(IFNULL(M_TitleName,''),'. ', IFNULL(M_PatientPrefix,''),M_PatientName, IFNULL(M_PatientSuffix,'')) as patient_fullname,
|
|
M_CompanyName as corporate_name,
|
|
CONCAT(IFNULL(M_DoctorPrefix,''),IFNULL(M_DoctorPrefix2,''),' ',M_DoctorName,IFNULL(M_DoctorSufix,''),IFNULL(M_DoctorSufix2,''),IFNULL(M_DoctorSufix3,'')) as doctor_fullname
|
|
FROM t_orderheader
|
|
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
|
JOIN m_title ON M_PatientM_TitleID = M_TitleID
|
|
JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID
|
|
JOIN m_doctor ON T_OrderHeaderSenderM_DoctorID = M_DoctorID
|
|
WHERE T_OrderHeaderID = ?";
|
|
$q_h = $this->db->query($sql_header_info, [$header_id]);
|
|
$d_h = $q_h->row_array();
|
|
|
|
$sql_del_source = "SELECT M_DeliverySource FROM m_delivery WHERE M_DeliveryID = ?";
|
|
$q_d = $this->db->query($sql_del_source, [$delivery['delivery_id']]);
|
|
$d_d = $q_d->row_array();
|
|
$recepient_type = $d_d ? strtoupper($d_d['M_DeliverySource']) : '';
|
|
if ($recepient_type == 'MOU') $recepient_type = 'COMPANY';
|
|
|
|
$type_email = 'S';
|
|
if ($recepient_type != 'PATIENT') $type_email = 'M';
|
|
|
|
$email_addresses = explode(',', $destination);
|
|
foreach ($email_addresses as $email) {
|
|
$email = trim($email);
|
|
if ($email == '') continue;
|
|
|
|
$sql_insert_email = "INSERT INTO t_send_email (
|
|
T_SendEmailT_OrderHeaderID,
|
|
T_SendEmailT_OrderDeliveryID,
|
|
T_SendEmailRecepient,
|
|
T_SendEmailRecepientType,
|
|
T_SendEmailPatientName,
|
|
T_SendEmailCorporateName,
|
|
T_SendEmailDoctorName,
|
|
T_SendEmailType,
|
|
T_SendEmailReports,
|
|
T_SendEmailNarratives,
|
|
T_SendEmailResponse,
|
|
T_SendEmailStatus,
|
|
T_SendEmailCount,
|
|
T_SendEmailReceived,
|
|
T_SendEmailIsActive,
|
|
T_SendEmailCreated,
|
|
T_SendEmailCreatedUserID,
|
|
T_SendEmailLastUpdated,
|
|
T_SendEmailLastUpdatedUserID
|
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, '[]', '', '', 'D', 0, '0000-00-00 00:00:00', 'Y', NOW(), ?, '0000-00-00 00:00:00', 0)";
|
|
|
|
$qry_email = $this->db->query($sql_insert_email, [
|
|
$header_id,
|
|
$xdel_id,
|
|
$email,
|
|
$recepient_type,
|
|
$d_h['patient_fullname'],
|
|
$d_h['corporate_name'],
|
|
$d_h['doctor_fullname'],
|
|
$type_email,
|
|
$userid
|
|
]);
|
|
|
|
if (!$qry_email) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data send email draft';
|
|
$result['error_type'] = 'INSERT_SEND_EMAIL_ERROR';
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
$prm_log = ['INSERT_T_SEND_EMAIL', 'order/save_delivery'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
return $result;
|
|
}
|
|
}
|
|
}
|
|
// END
|
|
|
|
$sql = "INSERT INTO order_log_deliveries (
|
|
Order_LogDeliveriesT_OrderHeaderID,
|
|
Order_LogDeliveriesM_DeliveryID,
|
|
Order_LogDeliveriesM_DeliveryTypeID,
|
|
Order_LogDeliveriesDestination,
|
|
Order_LogDeliveriesAddressID,
|
|
Order_LogDeliveriesRegionalCd,
|
|
Order_LogDeliveriesNote,
|
|
Order_LogDeliveriesCreated,
|
|
Order_LogDeliveriesCreatedUserID
|
|
) VALUES (?, ?, ?, ?, ?, ?, ?, NOW(), ?)";
|
|
$prm_orderlogdeliveries = [
|
|
$header_id,
|
|
$xdel_id,
|
|
$delivery['delivery_type_id'],
|
|
$destination,
|
|
$delivery['address_id'],
|
|
$delivery['regional_cd'],
|
|
$delivery['noteplus'],
|
|
$userid
|
|
];
|
|
|
|
$qry = $this->db->query($sql, $prm_orderlogdeliveries);
|
|
if (!$qry) {
|
|
$result['status'] = false;
|
|
$result['message'] = 'Terjadi kesalahan saat menyimpan data delivery log';
|
|
$result['error_type'] = 'ORDER_LOG_DELIVERY_INSERT_ERROR';
|
|
$prm_log = ['INSERT_ORDER_LOG_DELIVERIES', 'order/save_delivery'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log);
|
|
$result['error_detail'] = [
|
|
'sql_error' => $this->db->error(),
|
|
'last_query' => $this->db->last_query()
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|
|
$this->db->trans_commit();
|
|
|
|
return $result;
|
|
}
|
|
|
|
function insert_group_order($order_id)
|
|
{
|
|
$return = [
|
|
"status" => true,
|
|
"message" => "",
|
|
"data" => []
|
|
];
|
|
$sql = "SELECT DISTINCT Group_ResultID, Group_ResultName, Group_Concat(T_OrderDetailID) as T_OrderDetailIDs, 0 as T_TestID
|
|
FROM t_orderdetail
|
|
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' AND
|
|
T_TestIsActive = 'Y'
|
|
JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID AND
|
|
Group_ResultDetailIsActive = 'Y'
|
|
JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND
|
|
Group_ResultIsActive = 'Y' AND Group_ResultFlagPerTest = 'N'
|
|
WHERE
|
|
T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y'
|
|
GROUP BY Group_ResultID, Group_ResultName
|
|
HAVING Group_ResultID IS NOT NULL AND Group_Concat(T_OrderDetailID) IS NOT NULL
|
|
UNION
|
|
SELECT DISTINCT Group_ResultID as Group_ResultID, T_TestName as Group_ResultName, Group_Concat(T_OrderDetailID) as T_OrderDetailIDs, T_TestID as T_TestID
|
|
FROM t_orderdetail
|
|
JOIN t_test ON T_OrderDetailT_TestID = T_TestID AND T_TestIsResult = 'Y' AND
|
|
T_TestIsActive = 'Y'
|
|
JOIN group_resultdetail ON Group_ResultDetailT_TestID = T_TestID AND
|
|
Group_ResultDetailIsActive = 'Y'
|
|
JOIN group_result ON Group_ResultDetailGroup_ResultID = Group_ResultID AND
|
|
Group_ResultIsActive = 'Y' AND Group_ResultFlagPerTest = 'Y'
|
|
WHERE
|
|
T_OrderDetailT_OrderHeaderID = ? AND T_OrderDetailIsActive = 'Y'
|
|
GROUP BY T_TEstID, T_TestName
|
|
HAVING T_TEstID IS NOT NULL AND Group_Concat(T_OrderDetailID) IS NOT NULL";
|
|
$query = $this->db->query($sql, [$order_id, $order_id]);
|
|
if (!$query) {
|
|
$dt_log = ['data' => $order_id, 'error' => $this->db->error()];
|
|
$prm_log = ['SELECT_T_ORDERGROUP', 'order/insert_group_order'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $dt_log);
|
|
$return = [
|
|
"status" => false,
|
|
"message" => "Terjadi kesalahan saat mengambil data group order",
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
$data_group = $query->result_array();
|
|
$debug_query_get = $this->db->last_query();
|
|
foreach ($data_group as $key => $value) {
|
|
$sql = "INSERT INTO t_orderheader_group_result (
|
|
T_OrderHeaderGroupResultT_OrderHeaderID,
|
|
T_OrderHeaderGroupResultGroup_ResultID,
|
|
T_OrderHeaderGroupResultGroup_ResultName,
|
|
T_OrderHeaderGroupResultT_TestID,
|
|
T_OrderHeaderGroupResultDetails,
|
|
T_OrderHeaderGroupResultCreated
|
|
) VALUES (?, ?, ?, ?, ?, NOW())";
|
|
$query = $this->db->query($sql, [
|
|
$order_id,
|
|
$value['Group_ResultID'],
|
|
$value['Group_ResultName'],
|
|
isset($value['T_TestID']) ? $value['T_TestID'] : 0,
|
|
$value['T_OrderDetailIDs']
|
|
]);
|
|
if (!$query) {
|
|
$dt_log = ['data' => $order_id, 'error' => $this->db->error(), 'debug' => $debug_query_get];
|
|
$prm_log = ['INSERT_T_ORDERHEADER_GROUP_RESULT', 'order/insert_group_order'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $dt_log);
|
|
$return = [
|
|
"status" => false,
|
|
"message" => "Terjadi kesalahan saat menyimpan data group order",
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
}
|
|
$return['data'] = $data_group;
|
|
return $return;
|
|
}
|
|
|
|
//----
|
|
// get data generate
|
|
function get_order_header($order_id)
|
|
{
|
|
$return = [
|
|
"status" => true,
|
|
"message" => "",
|
|
"data" => []
|
|
];
|
|
$sql = "SELECT 'N' as M_CompanyIsAgingOnHold,
|
|
'' as M_CompanyIsAgingOnHoldNote,
|
|
M_CompanyIsBill,
|
|
M_CompanyMinDP,
|
|
pj1.M_DoctorName as doctor_pj1,
|
|
pj2.M_DoctorName as doctor_pj2,
|
|
sender.M_DoctorName as doctor_sender,
|
|
M_DoctorAddressDescription as doctor_sender_address,
|
|
M_CompanyName as order_company,
|
|
T_OrderHeaderDate as order_date,
|
|
T_OrderHeaderID as order_id,
|
|
T_OrderHeaderLabNumber as order_no,
|
|
M_MouName as order_mou,
|
|
T_OrderHeaderRounding as order_rounding,
|
|
T_OrderHeaderSubTotal as order_subtotal,
|
|
T_OrderHeaderTotal as order_total,
|
|
M_PatientNoReg as patient_mr,
|
|
M_PatientName as patient_name,
|
|
CONCAT(M_PatientAddressDescription,'<br>',IF(M_PatientAddressVillage IS NULL,'',CONCAT(M_PatientAddressVillage,', ')),IF(M_PatientAddressDistrict IS NULL,'',CONCAT(M_PatientAddressDistrict,', ')),IF(M_PatientAddressCity IS NULL,'',M_PatientAddressCity)) as patient_address,
|
|
M_PatientPhone as patient_phone,
|
|
M_PatientEmail as patient_email,
|
|
t_orderheader.*,
|
|
IFNULL(Nat_CitoName,'') as cito_name,
|
|
IFNULL(Mgm_McuNumber,'') as mcu_number,
|
|
IFNULL(Mgm_McuLabel,'') as mcu_label,
|
|
IFNULL(Patient_SignatureUrl,'') as image_signature
|
|
FROM `t_orderheader`
|
|
JOIN `t_orderheaderaddon` ON T_OrderHeaderAddOnT_OrderHeaderID = T_OrderHeaderID AND T_OrderHeaderAddOnIsActive = 'Y'
|
|
JOIN m_patient ON T_OrderHeaderM_PatientID = M_PatientID
|
|
JOIN m_patientaddress ON M_PatientAddressM_PatientID = M_PatientID AND M_PatientAddressIsActive = 'Y' AND M_PatientAddressNote = 'Utama'
|
|
JOIN m_company ON T_OrderHeaderM_CompanyID = M_CompanyID
|
|
JOIN m_mou ON T_OrderHeaderM_MouID = M_MouID
|
|
JOIN m_doctor pj1 ON T_OrderHeaderPjM_DoctorID = pj1.M_DoctorID
|
|
LEFT JOIN m_doctor pj2 ON T_OrderHeaderPj2M_DoctorID = pj2.M_DoctorID
|
|
JOIN m_doctor sender ON T_OrderHeaderSenderM_DoctorID = sender.M_DoctorID
|
|
LEFT JOIN m_doctoraddress sender_address ON T_OrderHeaderSenderM_DoctorAddressID = M_DoctorAddressID
|
|
LEFT JOIN nat_cito ON T_OrderHeaderNat_CitoID = Nat_CitoID
|
|
LEFT JOIN mgm_mcu ON T_OrderHeaderMgm_McuID = Mgm_McuID
|
|
LEFT JOIN patient_signature ON Patient_SignatureM_PatientID = M_PatientID AND Patient_SignatureM_PatientID = T_OrderHeaderM_PatientID AND
|
|
Patient_SignatureIsActive = 'Y'
|
|
WHERE `T_OrderHeaderID` = ?
|
|
GROUP BY T_OrderHeaderID";
|
|
$query = $this->db->query($sql, [$order_id]);
|
|
// echo $this->db->last_query();
|
|
|
|
if (!$query) {
|
|
|
|
$dt_log = ['data' => $order_id, 'error' => $this->db->error()];
|
|
$prm_log = ['SELECT_T_ORDERHEADER', 'order/get_order_header'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $dt_log);
|
|
|
|
$return = [
|
|
"status" => false,
|
|
"message" => "Terjadi kesalahan saat mengambil data header",
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
$data = $query->row_array();
|
|
$return['data'] = $data;
|
|
return $return;
|
|
}
|
|
|
|
function get_order_detail($order_id)
|
|
{
|
|
$return = [
|
|
"status" => true,
|
|
"message" => "",
|
|
"data" => []
|
|
];
|
|
$sql = "SELECT T_OrderDetailOrderID as d_id,
|
|
T_OrderDetailOrderT_TestID as t_id,
|
|
IF(T_OrderDetailOrderIsPacket = 'Y',T_OrderDetailOrderT_PacketName,T_OrderDetailOrderT_TestName) as t_name,
|
|
T_OrderDetailOrderT_PriceAmount as t_price,
|
|
((T_OrderDetailOrderT_PriceDisc/100) * T_OrderDetailOrderT_PriceAmount) + T_OrderDetailOrderT_PriceDiscRp as t_disctotal,
|
|
T_OrderDetailOrderT_PriceTotal as t_total
|
|
FROM `t_orderdetailorder`
|
|
WHERE `T_OrderDetailOrderT_OrderHeaderID` = ? AND `T_OrderDetailOrderIsActive` = 'Y'";
|
|
$query = $this->db->query($sql, [$order_id]);
|
|
if (!$query) {
|
|
|
|
$dt_log = ['data' => $order_id, 'error' => $this->db->error()];
|
|
$prm_log = ['SELECT_T_ORDERDETAILORDER', 'order/get_order_detail'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $dt_log);
|
|
$return = [
|
|
"status" => false,
|
|
"message" => "Terjadi kesalahan saat mengambil data detail order",
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
$data = $query->result_array();
|
|
$rst = [];
|
|
foreach ($data as $key => $value) {
|
|
$rst[] = $value;
|
|
}
|
|
$return['data'] = $rst;
|
|
return $return;
|
|
}
|
|
|
|
function get_deliveries_by_order($order_id)
|
|
{
|
|
$return = [
|
|
"status" => true,
|
|
"message" => "",
|
|
"data" => []
|
|
];
|
|
$sql = "SELECT M_DeliveryTypeCode as xtype,
|
|
M_DeliverySource as source,
|
|
M_DeliveryName as label,
|
|
IFNULL(T_OrderDeliveryNoteValue,T_OrderDeliveryDestination) as xdesc
|
|
FROM t_orderdelivery
|
|
JOIN m_deliverytype ON T_OrderDeliveryM_DeliveryTypeID = M_DeliveryTypeID
|
|
JOIN m_delivery ON T_OrderDeliveryM_DeliveryID = M_DeliveryID
|
|
LEFT JOIN t_orderdeliverynote ON T_OrderDeliveryNoteT_OrderDeliveryID = T_OrderDeliveryID AND T_OrderDeliveryNoteIsActive = 'Y'
|
|
WHERE
|
|
T_OrderDeliveryT_OrderHeaderID = ? AND
|
|
T_OrderDeliveryIsActive = 'Y'";
|
|
$query = $this->db->query($sql, [$order_id]);
|
|
if (!$query) {
|
|
$dt_log = ['data' => $order_id, 'error' => $this->db->error()];
|
|
$prm_log = ['SELECT_T_ORDERDELIVERY', 'order/get_deliveries_by_order'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $dt_log);
|
|
$return = [
|
|
"status" => false,
|
|
"message" => "Terjadi kesalahan saat mengambil data delivery",
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
$data = $query->result_array();
|
|
$rst = [];
|
|
foreach ($data as $key => $value) {
|
|
$rst[] = array(
|
|
'type' => $value['xtype'],
|
|
'source' => $value['source'],
|
|
'label' => $value['label'],
|
|
'desc' => $value['xdesc']
|
|
);
|
|
}
|
|
$return['data'] = $rst;
|
|
return $return;
|
|
}
|
|
|
|
function get_order_promises($order_id)
|
|
{
|
|
$return = [
|
|
"status" => true,
|
|
"message" => "",
|
|
"data" => []
|
|
];
|
|
$sql = "SELECT *, DATE_FORMAT(T_OrderPromiseDateTime,'%d-%m-%Y %H:%i') as T_OrderPromiseDateTime_ina
|
|
FROM t_orderpromise
|
|
WHERE
|
|
T_OrderPromiseT_OrderHeaderID = ? AND
|
|
T_OrderPromiseIsActive = 'Y'";
|
|
$query = $this->db->query($sql, [$order_id]);
|
|
if (!$query) {
|
|
$dt_log = ['data' => $order_id, 'error' => $this->db->error()];
|
|
$prm_log = ['SELECT_T_ORDERPROMISE', 'order/get_order_promises'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $dt_log);
|
|
$return = [
|
|
"status" => false,
|
|
"message" => "Terjadi kesalahan saat mengambil data promise",
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
$data = $query->result_array();
|
|
$return['data'] = $data;
|
|
return $return;
|
|
}
|
|
|
|
function get_details($order_id)
|
|
{
|
|
$return = [
|
|
"status" => true,
|
|
"message" => "",
|
|
"data" => []
|
|
];
|
|
$sql = "SELECT *
|
|
FROM `t_orderdetail`
|
|
JOIN `t_orderdetailaddon` ON T_OrderDetailAddOnT_OrderDetailID = T_OrderDetailID AND T_OrderDetailAddOnIsActive = 'Y'
|
|
WHERE `T_OrderDetailT_OrderHeaderID` = ? AND `T_OrderDetailIsActive` = 'Y'";
|
|
$query = $this->db->query($sql, [$order_id]);
|
|
if (!$query) {
|
|
|
|
$dt_log = ['data' => $order_id, 'error' => $this->db->error()];
|
|
$prm_log = ['SELECT_T_ORDERDETAIL', 'order/get_details'];
|
|
$xsql = $this->db->last_query();
|
|
$log_error = $this->insert_log_error($xsql, $prm_log, $dt_log);
|
|
$return = [
|
|
"status" => false,
|
|
"message" => "Terjadi kesalahan saat mengambil data details",
|
|
"data" => []
|
|
];
|
|
return $return;
|
|
}
|
|
|
|
$data = $query->result_array();
|
|
$rst = [];
|
|
foreach ($data as $key => $value) {
|
|
$rst[] = $value;
|
|
}
|
|
$return['data'] = $rst;
|
|
return $return;
|
|
}
|
|
|
|
function get_report_url($code_report, $params)
|
|
{
|
|
|
|
$this->load->library("Reporturl");
|
|
$report_url = $this->reporturl->get_report_url_by_code($code_report, $params);
|
|
if ($report_url[0]) {
|
|
return $report_url[1];
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// End Generate save order
|
|
|
|
|
|
function do_order_log($orderHeaderID, $delivery)
|
|
{
|
|
$rst_id = $$orderHeaderID;
|
|
|
|
$sql = "SELECT *
|
|
FROM t_orderheader
|
|
JOIN m_patient ON M_PatientID = T_OrderHeaderM_PatientID
|
|
WHERE
|
|
T_OrderHeaderID = {$rst_id}";
|
|
//echo $sql;
|
|
$qry = $this->db->query($sql);
|
|
if (!$qry) {
|
|
$this->db->trans_rollback();
|
|
echo "{$this->now()} ERR : {$db_msg}\n";
|
|
return false;
|
|
}
|
|
$x_header = $qry->row_array();
|
|
|
|
$sql = "SELECT *
|
|
FROM t_orderdetail
|
|
WHERE
|
|
T_OrderDetailT_OrderHeaderID = {$rst_id} AND
|
|
T_OrderDetailT_TestIsPrice = 'Y' AND
|
|
T_OrderDetailIsActive = 'Y'";
|
|
|
|
$x_details = $this->db->query($sql)->result_array();
|
|
$x_details = json_encode($x_details);
|
|
$x_deliveries = json_encode($delivery);
|
|
|
|
$sql = "SELECT *
|
|
FROM t_orderpromise
|
|
WHERE
|
|
T_OrderPromiseT_OrderHeaderID = {$rst_id} AND T_OrderPromiseIsActive = 'Y'";
|
|
$x_promises = $this->db->query($sql)->result_array();
|
|
$x_promises = json_encode($x_promises);
|
|
|
|
$sql = "INSERT INTO order_log(
|
|
OrderLogT_OrderHeaderID,
|
|
OrderLogM_PatientDOB,
|
|
OrderLogM_CompanyID,
|
|
OrderLogM_MouID,
|
|
OrderLogM_DoctorSenderID,
|
|
OrderLogM_DoctorSenderAddressID,
|
|
orderLogT_OrderHeaderAddOnAliasDoctorName,
|
|
orderLogT_OrderHeaderAddOnAliasDoctorAddress,
|
|
OrderLogAge,
|
|
OrderLogFoNote,
|
|
OrderLogSubtotal,
|
|
OrderLogTotal,
|
|
OrderLogUserID,
|
|
OrderLogDetails,
|
|
OrderLogDeliveries,
|
|
OrderLogPromises
|
|
)
|
|
VALUES(
|
|
{$rst_id},
|
|
'{$x_header["M_PatientDOB"]}',
|
|
{$x_header["T_OrderHeaderM_CompanyID"]},
|
|
{$x_header["T_OrderHeaderM_MouID"]},
|
|
{$x_header["T_OrderHeaderSenderM_DoctorID"]},
|
|
{$x_header["T_OrderHeaderSenderM_DoctorAddressID"]},
|
|
'{$hdr["alias_doctor"]}',
|
|
'{$hdr["alias_doctor_address"]}',
|
|
'{$x_header["T_OrderHeaderM_PatientAge"]}',
|
|
'{$x_header["T_OrderHeaderFoNote"]}',
|
|
'{$x_header["T_OrderHeaderSubTotal"]}',
|
|
'{$x_header["T_OrderHeaderTotal"]}',
|
|
{$this->sys_user["M_UserID"]},
|
|
'{$x_details}',
|
|
'{$x_deliveries}',
|
|
'{$x_promises}'
|
|
)";
|
|
$this->db->query($sql);
|
|
}
|
|
public function update_delivery($orderID, $deliveries)
|
|
{
|
|
$db_msg = "";
|
|
$sql = "update t_orderdelivery set T_OrderDeliveryIsActive = 'N'
|
|
where T_OrderDeliveryT_OrderHeaderID = ?";
|
|
$qry = $this->db->query($sql, [$orderID]);
|
|
if (!$qry) {
|
|
return "ERR Update Delivery | " .
|
|
$this->db->error()["message"] .
|
|
"|" .
|
|
$this->db->last_query();
|
|
}
|
|
foreach ($deliveries as $d) {
|
|
$arr = [
|
|
"T_OrderDeliveryT_OrderHeaderID" => $orderID,
|
|
"T_OrderDeliveryM_DeliveryID" =>
|
|
$d["T_OrderDeliveriesM_DeliveryID"],
|
|
"T_OrderDeliveryM_DeliveryTypeID" =>
|
|
$d["T_OrderDeliveriesM_DeliveryTypeID"],
|
|
"T_OrderDeliveryDestination" =>
|
|
$d["T_OrderDeliveriesDestination"],
|
|
];
|
|
$qry = $this->db->insert("t_orderdelivery", $arr);
|
|
if (!$qry) {
|
|
$db_msg .=
|
|
"ERR Update Delivery | " .
|
|
$this->db->error()["message"] .
|
|
"|" .
|
|
$this->db->last_query() .
|
|
"\n";
|
|
}
|
|
}
|
|
return $db_msg;
|
|
}
|
|
}
|