Files
BE_IBL/application/controllers/one_mitra/Generatefutureorder.php
2026-04-15 15:23:57 +07:00

604 lines
26 KiB
PHP

<?php
class Generatefutureorder extends MY_Controller
{
var $db;
function __construct()
{
parent::__construct();
}
function index()
{
echo "Api: Receiver Order DEVKEDUNGDORO";
}
function generate()
{
try {
$this->db->trans_begin();
$this->insertpatient();
$this->insertfutureorder();
$this->db->trans_commit();
} catch (Exception $exc) {
$message = $exc->getMessage();
$qry = $this->db->last_query();
$rst = [
'msg' => $exc->getMessage(),
'qry' => $qry,
];
$this->db->trans_rollback();
$this->sys_error($rst);
}
}
function insertpatient()
{
try {
$sql = "SELECT *
FROM one_mitra.m_patient
WHERE M_PatientPatientID IS NULL
AND M_PatientIsActive = 'Y'";
$query = $this->db->query($sql, []);
if (!$query) {
$message = $this->db->error();
$this->sys_error($message);
$this->db->trans_rollback();
exit;
}
$patients = $query->result_array();
for ($i = 0; $i < count($patients); $i++) {
$idtype = 4;
$nik = $patients[$i]['M_PatientNIK'];
if ($patients[$i]['M_PatientIsNIK'] == 'Y') {
$idtype = 1;
}
$sqlQuery = "SELECT
M_PatientID
FROM m_patient
WHERE M_PatientM_IdTypeID = ?
AND M_PatientIDNumber = ?
AND M_PatientIsActive = 'Y'";
$qry = $this->db->query($sqlQuery, [$idtype, $nik]);
if (!$qry) {
$message = $this->db->error();
$this->sys_error($message);
$this->db->trans_rollback();
exit;
}
$result = $qry->result_array();
if (count($result) > 0) {
$sqlQuery = "UPDATE one_mitra.m_patient SET M_PatientPatientID = ? WHERE M_PatientID = ?;";
$qry = $this->db->query($sqlQuery, [$result[0]['M_PatientID'], $patients[$i]['M_PatientID']]);
if (!$qry) {
$message = $this->db->error();
$this->sys_error($message);
$this->db->trans_rollback();
exit;
}
} else {
//apabila tidak ada
//insert m patient bisone
$sqlQuery = "INSERT INTO m_patient (
M_PatientPrefix,
M_PatientM_TitleID,
M_PatientSuffix,
M_PatientM_SexID,
M_PatientDOB,
M_PatientHP,
M_PatientM_IdTypeID,
M_PatientIDNumber,
M_PatientName,
M_PatientJabatan,
M_PatientKedudukan,
M_PatientLocation,
M_PatientJob
) VALUES (?,?,?,?,?,?,?,?, ?,?,?,?,?)";
$qry = $this->db->query($sqlQuery, [
$patients[$i]['M_PatientPrefix'],
$patients[$i]['M_PatientTitleID'],
$patients[$i]['M_PatientSuffix'],
$patients[$i]['M_PatientM_SexID'],
$patients[$i]['M_PatientDOB'],
$patients[$i]['M_PatientHP'],
$idtype,
$nik,
$patients[$i]['M_PatientName'],
$patients[$i]['M_PatientJabatan'],
$patients[$i]['M_PatientKedudukan'],
$patients[$i]['M_PatientLocation'],
$patients[$i]['M_PatientJob']
]);
if (!$qry) {
$message = $this->db->error();
$this->sys_error($message);
$this->db->trans_rollback();
exit;
}
$bisonePatientID = $this->db->insert_id();
$sqlQuery = "UPDATE one_mitra.m_patient SET M_PatientPatientID = ? WHERE M_PatientID = ?;";
$qry = $this->db->query($sqlQuery, [$bisonePatientID, $patients[$i]['M_PatientID']]);
if (!$qry) {
$message = $this->db->error();
$this->sys_error($message);
$this->db->trans_rollback();
exit;
}
//get mcompanykelurahan
$sqlQuery = "SELECT M_CompanyM_KelurahanID,
M_CompanyAddress
FROM m_company
WHERE M_CompanyID = ?
AND M_CompanyIsActive= 'Y'";
$qry = $this->db->query($sqlQuery, [
$patients[$i]['M_PatientM_CompanyID'],
]);
if (!$qry) {
$message = $this->db->error();
$this->sys_error($message);
$this->db->trans_rollback();
exit;
}
$companyKelurahanID = $qry->result_array()[0]['M_CompanyM_KelurahanID'];
$companyAddress = $qry->result_array()[0]['M_CompanyAddress'];
$patientAddress = $patients[$i]['M_PatientAddress'];
if ($patientAddress == null || trim($patientAddress) == "") {
$patientAddress = $companyAddress;
}
//get mcompanykelurahan
$sqlQuery = "INSERT INTO m_patientaddress
(M_PatientAddressM_PatientID,
M_PatientAddressNote,
M_PatientAddressDescription,
M_PatientAddressM_KelurahanID,
M_PatientAddressCreated,
M_PatientAddressLastUpdated,
M_PatientAddressUserID)
VALUES(?,?,?,?,NOW(), NOW(),'0')";
$qry = $this->db->query($sqlQuery, [
$bisonePatientID,
"Rumah",
$patientAddress,
$companyKelurahanID
]);
if (!$qry) {
$message = $this->db->error();
$this->sys_error($message);
$this->db->trans_rollback();
exit;
}
}
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->db->trans_rollback();
$this->sys_error($message);
}
}
function insertfutureorder()
{
try {
$sqlDoctor = "SELECT
M_DoctorID,
M_DoctorAddressID
FROM m_doctor
JOIN m_doctoraddress
ON M_DoctorID = M_DoctorAddressM_DoctorID
AND M_DoctorAddressIsActive = 'Y'
WHERE M_DoctorName = '-'
AND M_DoctorIsActive = 'Y'
GROUP BY M_DoctorID
LIMIT 1;";
$qryDoctor = $this->db->query($sqlDoctor);
if (!$qryDoctor) {
$message = $this->db->error();
$this->sys_error($message);
$this->db->trans_rollback();
exit;
}
$doctor = $qryDoctor->result_array()[0];
$sqlDoctorPj = "SELECT
M_DoctorPjM_DoctorID AS ID
FROM m_doctorpj
WHERE M_DoctorPjIsActive = 'Y'
LIMIT 1";
$qryDoctorPj = $this->db->query($sqlDoctorPj);
if (!$qryDoctorPj) {
$message = $this->db->error();
$this->sys_error($message);
$this->db->trans_rollback();
exit;
}
$doctorPj = $qryDoctorPj->result_array()[0];
$sql = "SELECT
pm.M_PatientPatientID,
pb.M_PatientID AS bisonePatientID,
fn_global_age_count(pb.M_PatientDOB, NOW()) AS age,
pm.M_PatientHP AS hp,
one_mitra.t_order.* ,
IFNULL(one_mitra.fn_get_order_detail (T_OrderID),'[]') AS orderDetail,
IFNULL(one_mitra.fn_get_order_detail_packet(T_OrderID),'[]') AS orderPacket,
T_OrderDeliveryDate
FROM one_mitra.t_order
JOIN one_mitra.m_patient AS pm
ON T_OrderM_PatientID = pm.M_PatientID
AND M_PatientIsActive = 'Y'
JOIN m_patient AS pb
ON pm.M_PatientPatientID = pb.M_PatientID
AND pb.M_PatientIsActive = 'Y'
JOIN one_mitra.t_orderdetaildelivery
ON T_OrderID = T_OrderDetailDeliveryT_OrderID
AND T_OrderDetailDeliveryIsActive = 'Y'
JOIN one_mitra.t_orderdelivery
ON T_OrderDetailDeliveryT_OrderDeliveryID = T_OrderDeliveryID
AND T_OrderDeliveryIsActive = 'Y'
WHERE
T_OrderIsActive = 'Y'
AND T_OrderFutureOrderID IS NULL";
$qry = $this->db->query($sql);
if (!$qry) {
$message = $this->db->error();
$this->sys_error($message);
$this->db->trans_rollback();
exit;
}
$order = $qry->result_array();
for ($i = 0; $i < count($order); $i++) {
if ($order[$i]['orderDetail'] != "[]") {
$order[$i]['orderDetail'] = json_decode($order[$i]['orderDetail'], true);
} else {
$order[$i]['orderDetail'] = [];
}
if ($order[$i]['orderPacket'] != "[]") {
$order[$i]['orderPacket'] = json_decode($order[$i]['orderPacket'], true);
} else {
$order[$i]['orderPacket'] = [];
}
}
//insert future order
for ($i = 0; $i < count($order); $i++) {
$date = $order[$i]['T_OrderDeliveryDate'];
$sql_insert = "INSERT INTO future_order
(FutureOrderNumber,
FutureOrderDateBooking,
FutureOrderM_PatientID,
FutureOrderM_CompanyID,
FutureOrderM_MouID,
FutureOrderSenderM_DoctorID,
FutureOrderSenderM_DoctorAddressID,
FutureOrderSubTotal,
FutureOrderTotal,
FutureOrderUserID)
VALUES(fn_numbering_future('FO'),?,?,?,?,?,?,?,?,?)";
$qry_insert = $this->db->query($sql_insert, [
$date,
$order[$i]["bisonePatientID"],
$order[$i]['T_OrderM_CompanyID'],
$order[$i]['T_OrderM_MouID'],
$doctor['M_DoctorID'],
$doctor['M_DoctorAddressID'],
$order[$i]['T_OrderTotal'],
$order[$i]['T_OrderTotal'],
"1500"
]);
if (!$qry_insert) {
$message = $this->db->error();
$err = [
'msg' => $message,
'qry' => $this->db->last_query(),
];
$this->sys_error($err);
$this->db->trans_rollback();
exit;
}
$futureOrderInsertedID = $this->db->insert_id();
// print_r($order[$i]);
// exit;
$total = 0;
$jsonHeader = array(
"booking_date" => date("dmY"),
"patient_id" => $order[$i]["bisonePatientID"],
"age" => $order[$i]["age"],
"alias_doctor" => "",
"alias_doctor_address" => "",
"sender_doctor_id" => intval($doctor['M_DoctorID']),
"sender_address_id" => $doctor['M_DoctorAddressID'],
"pj_doctor_id" => $doctorPj['ID'],
"lang_id" => "1",
"lang_si" => "N",
"lang_id_2" => 0,
"lang_si_2" => "N",
"doctor_note" => "",
"fo_note" => $order[$i]['T_OrderNote'],
"patient_note" => "",
"company_id" => $order[$i]['T_OrderM_CompanyID'],
"mou_id" => intval($order[$i]['T_OrderM_MouID']),
"received_sample" => "N",
"received_sample_time" => "",
"queue" => "",
"diagnose" => $order[$i]['T_OrderDiagnosis'],
"is_cito" => "N",
"cito_id" => "2",
"mcu_pre_id" => 0,
);
$jsonDetail = array();
// print_r($order[$i]['orderDetail'][0]);
// exit;
for ($k = 0; $k < count($order[$i]['orderDetail']); $k++) {
$detail = $order[$i]['orderDetail'][$k];
$sql_test = "SELECT
T_PriceTotal
FROM ss_price_mou
join t_test on T_PriceIsCito= 'N' and is_packet = 'N'
AND Ss_PriceMouM_MouID = ?
AND T_PriceM_CompanyID = ?
and ss_price_mou.T_TestID = t_test.T_TestID
AND t_test.T_TestID= ?";
$qry_test = $this->db->query($sql_test, [
$order[$i]['T_OrderM_MouID'],
$order[$i]['T_OrderM_CompanyID'],
$detail['T_OrderDetailTestID']
]);
if (!$qry_test) {
$message = $this->db->error();
$err = [
'msg' => $message,
'qry' => $this->db->last_query(),
];
$this->sys_error($err);
$this->db->trans_rollback();
exit;
}
$testPrice = $qry_test->result_array();
if (count($testPrice) == 0) {
$testPrice = 0;
} else {
$testPrice = $testPrice[0]['T_PriceTotal'];
}
$sql_insert = "INSERT INTO future_orderdetail (
Future_OrderDetailFutureOrderID,
Future_OrderDetailPacketType,
Future_OrderDetailT_PacketID,
Future_OrderDetailT_TestID,
Future_OrderDetailPrice,
Future_OrderDetailDisc,
Future_OrderDetailDiscTotal,
Future_OrderDetailTotal,
Future_OrderDetailUserID)
VALUES (?,?,?,?,?,?,?,?,?)";
$qry_insert = $this->db->query($sql_insert, [
$futureOrderInsertedID,
0,
0,
$detail['T_OrderDetailTestID'],
doubleval($testPrice),
"0",
0,
$testPrice,
"0"
]);
if (!$qry_insert) {
$message = $this->db->error();
$err = [
'msg' => $message . "FutureOrderdetail bukan paket",
'qry' => $this->db->last_query(),
"sql" => $sql_insert
];
$this->sys_error($err);
$this->db->trans_rollback();
exit;
}
$jsonDetail[] = array(
"t_id" => intval($detail['T_OrderDetailTestID']),
"t_price" => $testPrice,
"t_disc" => "0",
"t_discrp" => "0",
"t_cito" => "N",
"t_req" => "N",
"t_reqnote" => "",
"t_ispacket" => "N",
"t_packetid" => 0,
"t_packettype" => "PX"
);
$total = $total + doubleval($testPrice);
}
// print_r($jsonDetail);
// exit;
//Insert packet
for ($k = 0; $k < count($order[$i]['orderPacket']); $k++) {
$packet = $order[$i]['orderPacket'][$k];
$sql_packet = "SELECT
T_PacketType AS type,
T_PacketPrice AS price
FROM t_packet
WHERE T_PacketID = ?
AND T_PacketIsActive = 'Y'";
$qry_packet = $this->db->query($sql_packet, [
$packet['T_OrderDetailPacketT_PacketID']
]);
if (!$qry_packet) {
$message = $this->db->error();
$this->sys_error($message);
$this->db->trans_rollback();
exit;
}
$packetData = $qry_packet->result_array();
$sql_insert = "INSERT INTO future_orderdetail(
Future_OrderDetailFutureOrderID,
Future_OrderDetailPacketType,
Future_OrderDetailT_PacketID,
Future_OrderDetailT_TestID,
Future_OrderDetailPrice,
Future_OrderDetailDisc,
Future_OrderDetailDiscTotal,
Future_OrderDetailTotal,
Future_OrderDetailUserID)
VALUES (?,?,?,?,?,?,?,?,?)";
$qry_insert = $this->db->query($sql_insert, [
$futureOrderInsertedID,
$packetData[0]['type'],
$packet['T_OrderDetailPacketT_PacketID'],
"0",
doubleval($packetData[0]['price']),
"0",
0,
$packetData[0]['price'],
"0"
]);
if (!$qry_insert) {
$message = $this->db->error();
$err = [
'msg' => $message . " Futureorderdetailpacket",
'qry' => $this->db->last_query(),
];
$this->sys_error($err);
$this->db->trans_rollback();
exit;
}
$jsonDetail[] = array(
"t_id" => intval($packet['T_OrderDetailPacketT_PacketID']),
"t_price" => $packetData[0]['price'],
"t_disc" => "0",
"t_discrp" => "0",
"t_cito" => "N",
"t_req" => "N",
"t_reqnote" => "",
"t_ispacket" => "Y",
"t_packetid" => intval($packet['T_OrderDetailPacketT_PacketID']),
"t_packettype" => $packetData[0]['type']
);
$total = $total + doubleval($packetData[0]['price']);
}
$FutureOrderJSONReq = ["status" => "Y", "reqs" => []];
$sql_company = "SELECT
M_CompanyAddress,
M_CompanyM_KelurahanID,
M_CompanyAddressRegionalCd
FROM m_company
WHERE M_CompanyID = ?
AND M_CompanyIsActive = 'Y'";
$qry_company = $this->db->query($sql_company, [$order[$i]['T_OrderM_CompanyID']]);
if (!$qry_company) {
$message = $this->db->error();
$err = [
'msg' => $message,
'qry' => $this->db->last_query(),
];
$this->sys_error($err);
$this->db->trans_rollback();
exit;
}
$company = $qry_company->result_array()[0];
$jsonDelivery = [[
"delivery_id" => "10",
"delivery_code" => "ADDRESS",
"delivery_type_id" => "2",
"address_id" => "0",
"note" => $company['M_CompanyAddress'],
"noteplus" => "",
"kelurahan" => $company['M_CompanyAddressRegionalCd']
]];
$FutureOrderJSONDeliveryNote = [];
//insert future_qrcode_confirm
if ($order[$i]['T_OrderIsQRCode'] == 'Y') {
$hp = trim($order[$i]['hp']);
if ($hp != "0" && $hp != "-" && !empty($hp)) {
$sql_insert = "INSERT INTO future_qrcode_confirm
(FutureQrCodeConfirmFutureOrderID,
FutureQrCodeConfirmPhone
)VALUES
(?,?)";
$qry_insert = $this->db->query($sql_insert, [
$futureOrderInsertedID,
$hp
]);
if (!$qry_insert) {
$message = $this->db->error();
$err = [
'msg' => $message,
'qry' => $this->db->last_query(),
];
$this->sys_error($err);
$this->db->trans_rollback();
exit;
}
};
}
$headerJsn = json_encode($jsonHeader);
$detailJsn = json_encode($jsonDetail);
$deliveryJsn = json_encode($jsonDelivery);
$reqJsn = json_encode($FutureOrderJSONReq);
$noteJsn = json_encode($FutureOrderJSONDeliveryNote);
$sql_update = "UPDATE future_order
SET FutureOrderJSONHeader = '$headerJsn',
FutureOrderJSONDetail = '$detailJsn',
FutureOrderJSONDelivery='$deliveryJsn',
FutureOrderJSONReq = '$reqJsn',
FutureOrderJSONDeliveryNote = '$noteJsn'
WHERE FutureOrderID = ?";
$qry_update = $this->db->query($sql_update, [
json_encode($futureOrderInsertedID)
]);
if (!$qry_update) {
$message = $this->db->error();
$err = [
'msg' => $message,
'qry' => $this->db->last_query(),
];
$this->sys_error($err);
$this->db->trans_rollback();
exit;
}
$sql_update = "UPDATE one_mitra.t_order
SET T_OrderFutureOrderID = ?
WHERE T_OrderID = ?";
$qry_update = $this->db->query($sql_update, [
$futureOrderInsertedID,
$order[$i]['T_OrderID']
]);
if (!$qry_update) {
$message = $this->db->error();
$err = [
'msg' => $message,
'qry' => $this->db->last_query(),
];
$this->sys_error($err);
$this->db->trans_rollback();
exit;
}
}
$this->sys_ok($order);
} catch (Exception $exc) {
$message = $exc->getMessage();
$qry = $this->db->last_query();
$rst = [
'msg' => $exc->getMessage(),
'qry' => $qry,
];
$this->db->trans_rollback();
$this->sys_error($rst);
}
}
}