Files
BE_IBL/application/controllers/fix/Fix_future.php
2026-04-23 15:41:30 +07:00

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;
}
}