1273 lines
47 KiB
PHP
1273 lines
47 KiB
PHP
<?php
|
|
class Mdprice extends MY_Controller
|
|
{
|
|
var $db_onedev;
|
|
var $load;
|
|
var $sspricemou;
|
|
|
|
public function index()
|
|
{
|
|
echo "CPONE MD PRICE API";
|
|
}
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->db_onedev = $this->load->database("onedev", true);
|
|
// $this->load->library("SsPriceMou");
|
|
}
|
|
function searchpriceheader()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$prm = $this->sys_input;
|
|
$search = '%' . $prm['search'] . '%';
|
|
$page = $prm["page"];
|
|
$ROW_PER_PAGE = 20;
|
|
$start_offset = 0;
|
|
// print_r($prm);
|
|
|
|
if (isset($prm["page"])) {
|
|
if (
|
|
is_numeric($prm["page"]) && $prm["page"] > 0
|
|
) {
|
|
$start_offset = ($page - 1) * $ROW_PER_PAGE;
|
|
}
|
|
}
|
|
$sql = "SELECT
|
|
count(T_PriceHeaderID ) as total
|
|
FROM t_priceheader
|
|
WHERE T_PriceHeaderName LIKE '{$search}'
|
|
AND T_PriceHeaderIsActive = 'Y'
|
|
";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$total = $query->row_array()['total'];
|
|
$sql = "SELECT
|
|
T_PriceHeaderID AS headerID,
|
|
T_PriceHeaderName AS headerName,
|
|
T_PriceHeaderStartDate AS headerStartDate,
|
|
T_PriceHeaderEndDate AS headerEndDate,
|
|
T_PriceHeaderCode AS headerCode,
|
|
T_PriceHeaderValidasi AS headerValidate,
|
|
CASE
|
|
WHEN `fn_get_count_price_notgenerate`(T_PriceHeaderID) > 0 THEN 'Y'
|
|
ELSE 'N'
|
|
END AS readyValidate,
|
|
CASE
|
|
WHEN `fn_get_status_validate_packet`(T_PriceHeaderID) > 0 THEN 'Y'
|
|
ELSE 'N'
|
|
END AS validatePacket
|
|
FROM t_priceheader
|
|
WHERE T_PriceHeaderName LIKE '{$search}'
|
|
AND T_PriceHeaderIsActive = 'Y'
|
|
ORDER BY T_PriceHeaderID DESC
|
|
LIMIT ? OFFSET ? ";
|
|
$query = $this->db_onedev->query($sql, [$ROW_PER_PAGE, $start_offset]);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$result = [
|
|
"total" => ceil($total / $ROW_PER_PAGE),
|
|
"records" => $query->result_array()
|
|
];
|
|
$this->sys_ok($result);
|
|
}
|
|
function insertpriceheader()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$prm = $this->sys_input;
|
|
$userid = $this->sys_user["M_UserID"];
|
|
if (!isset($prm['name'])) {
|
|
$this->sys_error("Nama harus diisi");
|
|
exit;
|
|
}
|
|
if (trim($prm['name']) == "") {
|
|
$this->sys_error("Nama harus diisi");
|
|
exit;
|
|
}
|
|
// if (!isset($prm['sd'])) {
|
|
// $this->sys_error("Tanggal awal harus diisi");
|
|
// exit;
|
|
// }
|
|
// if (!isset($prm['ed'])) {
|
|
// $this->sys_error("Tanggal akhir harus diisi");
|
|
// exit;
|
|
// }
|
|
$name = $prm['name'];
|
|
$startDate = $prm['sd'];
|
|
$endDate = $prm['ed'];
|
|
$nw = strtotime($startDate);
|
|
$nwe = strtotime($endDate);
|
|
|
|
$sql = "SELECT fn_numbering('PH') as number";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$number = $query->row_array()['number'];
|
|
|
|
$sql = "INSERT INTO t_priceheader (
|
|
T_PriceHeaderName,
|
|
T_PriceHeaderCreated,
|
|
T_PriceHeaderCraetdUserID,
|
|
T_PriceHeaderCode)
|
|
VALUES (?,NOW(),?,?)";
|
|
$query = $this->db_onedev->query($sql, [$name, $userid, $number]);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$newHeaderid = $this->db_onedev->insert_id();
|
|
$dataAfter = $this->getPrice($newHeaderid);
|
|
$log = [
|
|
'ID' => $newHeaderid,
|
|
'detailID' => '0',
|
|
'type' => 'CREATE HEADER',
|
|
'desc' => "Tambah header {$number}",
|
|
'prm' => $prm,
|
|
'dataBefore' => '',
|
|
'dataAfter' => $dataAfter,
|
|
'userID' => $this->sys_user["M_UserID"],
|
|
];
|
|
$this->insertLog($log);
|
|
// "total" => ceil($total / $ROW_PER_PAGE),
|
|
|
|
$this->sys_ok("OK");
|
|
}
|
|
function editpriceheader()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$prm = $this->sys_input;
|
|
$userid = $this->sys_user["M_UserID"];
|
|
if (!isset($prm['name'])) {
|
|
$this->sys_error("Nama harus diisi");
|
|
exit;
|
|
}
|
|
if (trim($prm['name']) == "") {
|
|
$this->sys_error("Nama harus diisi");
|
|
exit;
|
|
}
|
|
// if (!isset($prm['sd'])) {
|
|
// $this->sys_error("Tanggal awal harus diisi");
|
|
// exit;
|
|
// }
|
|
// if (!isset($prm['ed'])) {
|
|
// $this->sys_error("Tanggal akhir harus diisi");
|
|
// exit;
|
|
// }
|
|
$name = $prm['name'];
|
|
$startDate = $prm['sd'];
|
|
$endDate = $prm['ed'];
|
|
$id = $prm['id'];
|
|
$nw = strtotime($startDate);
|
|
$nwe = strtotime($endDate);
|
|
$dataBefore = $this->getPrice($id);
|
|
|
|
$sql = "UPDATE t_priceheader
|
|
SET T_PriceHeaderName = '{$name}',
|
|
T_PriceHeaderLastUpdated = NOW(),
|
|
T_PriceHeaderLastUpdatedUserID = {$userid}
|
|
WHERE T_PriceHeaderID = $id";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$dataAfter = $this->getPrice($id);
|
|
$log = [
|
|
'ID' => $id,
|
|
'detailID' => '0',
|
|
'type' => 'EDIT HEADER',
|
|
'desc' => "edit header name '{$dataBefore['T_PriceHeaderName']}' menjadi '{$name}'",
|
|
'prm' => $prm,
|
|
'dataBefore' => $dataBefore,
|
|
'dataAfter' => $dataAfter,
|
|
'userID' => $this->sys_user["M_UserID"],
|
|
];
|
|
$this->insertLog($log);
|
|
|
|
|
|
// "total" => ceil($total / $ROW_PER_PAGE),
|
|
|
|
$this->sys_ok("OK");
|
|
}
|
|
function deletepriceheader()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$prm = $this->sys_input;
|
|
$userid = $this->sys_user["M_UserID"];
|
|
$id = $prm['id'];
|
|
$dataBefore = $this->getPrice($id);
|
|
|
|
|
|
$sql = "UPDATE t_priceheader
|
|
SET T_PriceHeaderIsActive = 'N',
|
|
T_PriceHeaderDeleted = NOW(),
|
|
T_PriceHeaderDeletedUserID = {$userid}
|
|
WHERE T_PriceHeaderID = $id";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$sql = "UPDATE t_price
|
|
SET T_PriceIsActive = 'N',
|
|
T_PriceLastUpdated = NOW(),
|
|
T_PriceUserID = {$userid}
|
|
WHERE T_PriceT_PriceHeaderID = $id";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$dataAfter = $this->getPrice($id);
|
|
$log = [
|
|
'ID' => $id,
|
|
'detailID' => '0',
|
|
'type' => 'DELETE HEADER',
|
|
'desc' => "DELETE header",
|
|
'prm' => $prm,
|
|
'dataBefore' => $dataBefore,
|
|
'dataAfter' => $dataAfter,
|
|
'userID' => $this->sys_user["M_UserID"],
|
|
];
|
|
$this->insertLog($log);
|
|
|
|
|
|
// "total" => ceil($total / $ROW_PER_PAGE),
|
|
|
|
$this->sys_ok("OK");
|
|
}
|
|
function getfilterprice()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
|
|
|
|
$sql = "SELECT Nat_SubGroupID AS id, Nat_SubGroupName AS name
|
|
FROM nat_subgroup
|
|
WHERE Nat_SubGroupIsActive= 'Y'";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$subgroup = $query->result_array();
|
|
array_push($subgroup, [
|
|
'id' => '0',
|
|
'name' => 'Semua'
|
|
]);
|
|
|
|
$status = [[
|
|
'id' => 'A',
|
|
'name' => 'Semua'
|
|
], [
|
|
'id' => 'Y',
|
|
'name' => 'Ya'
|
|
], [
|
|
'id' => 'N',
|
|
'name' => 'Tidak'
|
|
]];
|
|
|
|
|
|
// "total" => ceil($total / $ROW_PER_PAGE),
|
|
$rst = [
|
|
"subgroup" => $subgroup,
|
|
'status' => $status,
|
|
];
|
|
|
|
$this->sys_ok($rst);
|
|
}
|
|
function searchpricetest()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$prm = $this->sys_input;
|
|
$search = '%' . $prm['search'] . '%';
|
|
$subgroup = $prm['subgroup'];
|
|
$headerID = $prm['headerid'];
|
|
$status = $prm['status'];
|
|
$page = $prm["page"];
|
|
$ROW_PER_PAGE = 20;
|
|
$start_offset = 0;
|
|
// print_r($prm);
|
|
$filterSubGroup = "";
|
|
if ($subgroup != '0') {
|
|
$filterSubGroup = "AND Nat_SubGroupID = $subgroup";
|
|
}
|
|
$filterStatus = "";
|
|
if ($status == 'N') {
|
|
$filterStatus = 'AND T_PriceID IS NULL ';
|
|
}
|
|
if ($status == 'Y') {
|
|
$filterStatus = 'AND T_PriceID IS NOT NULL ';
|
|
}
|
|
|
|
if (isset($prm["page"])) {
|
|
if (
|
|
is_numeric($prm["page"]) && $prm["page"] > 0
|
|
) {
|
|
$start_offset = ($page - 1) * $ROW_PER_PAGE;
|
|
}
|
|
}
|
|
$sql = "SELECT
|
|
COUNT(T_TestID) as total
|
|
FROM
|
|
t_test
|
|
JOIN nat_subgroup
|
|
ON T_TestNat_SubgroupID = Nat_SubGroupID
|
|
AND Nat_SubGroupIsActive = 'Y'
|
|
AND `T_TestIsPrice` = 'Y'
|
|
AND (T_TestName LIKE ? OR T_TestSasCode LIKE ?)
|
|
{$filterSubGroup}
|
|
LEFT JOIN t_price
|
|
ON T_TestID = T_PriceT_TestID
|
|
AND T_PriceT_PriceHeaderID = ?
|
|
AND T_PriceIsActive = 'Y'
|
|
LEFT JOIN t_priceheader
|
|
ON T_PriceT_PriceHeaderID = T_PriceHeaderID
|
|
AND T_PriceHeaderIsActive = 'Y'
|
|
WHERE
|
|
`T_TestIsActive` = 'Y'
|
|
{$filterStatus}
|
|
";
|
|
$query = $this->db_onedev->query($sql, [$search, $search, $headerID,]);
|
|
$qryTotal = $this->db_onedev->last_query();
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$total = $query->row_array()['total'];
|
|
$sql = "SELECT
|
|
T_TestID AS testID,
|
|
T_TestSasCode AS testCode,
|
|
T_TestName AS testName,
|
|
T_TestIsPrice AS testIsPrice,
|
|
T_PriceAmount AS priceAmount,
|
|
T_PriceDisc AS priceDisc,
|
|
T_PriceDiscRp AS priceDiscRp,
|
|
T_PriceSubTotal AS subTotal,
|
|
T_PriceID AS priceID,
|
|
T_PriceT_PriceHeaderID AS headerID,
|
|
T_PriceHeaderName AS headerName,
|
|
Nat_SubGroupID AS subGroupID,
|
|
Nat_SubGroupName AS subGroupName,
|
|
'N' AS isChange,
|
|
CASE
|
|
WHEN T_PriceID IS NULL THEN 'N'
|
|
WHEN T_PriceID IS NOT NULL THEN 'Y'
|
|
ELSE 'N'
|
|
END as status,
|
|
IFNULL(Nat_TestMapCode, '') as lis_code
|
|
FROM
|
|
t_test
|
|
JOIN nat_subgroup
|
|
ON T_TestNat_SubgroupID = Nat_SubGroupID
|
|
AND Nat_SubGroupIsActive = 'Y'
|
|
JOIN nat_test ON T_TestNat_TestID = Nat_TestID
|
|
AND `T_TestIsPrice` = 'Y'
|
|
AND (T_TestName LIKE ? OR T_TestSasCode LIKE ?)
|
|
{$filterSubGroup}
|
|
LEFT JOIN t_price
|
|
ON T_TestID = T_PriceT_TestID
|
|
AND T_PriceT_PriceHeaderID = ?
|
|
AND T_PriceIsActive = 'Y'
|
|
LEFT JOIN t_priceheader
|
|
ON T_PriceT_PriceHeaderID = T_PriceHeaderID
|
|
AND T_PriceHeaderIsActive = 'Y'
|
|
LEFT JOIN nat_testmap ON Nat_TestMapNat_TestID = Nat_TestID AND Nat_TestMapIsActive = 'Y'
|
|
WHERE
|
|
`T_TestIsActive` = 'Y'
|
|
{$filterStatus}
|
|
LIMIT ? OFFSET ? ";
|
|
$query = $this->db_onedev->query($sql, [$search, $search, $headerID, $ROW_PER_PAGE, $start_offset]);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$result = [
|
|
"total" => ceil($total / $ROW_PER_PAGE),
|
|
"ttl" => $total,
|
|
"records" => $query->result_array(),
|
|
"qry" => $this->db_onedev->last_query(),
|
|
"qryttl" => $qryTotal,
|
|
];
|
|
$this->sys_ok($result);
|
|
}
|
|
function savetest()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
$userid = $this->sys_user["M_UserID"];
|
|
// {
|
|
// "testID": "19",
|
|
// "testCode": "10110200",
|
|
// "testName": "Hematologi Rutin",
|
|
// "testIsPrice": "Y",
|
|
// "priceAmount": "10000",
|
|
// "priceDisc": null,
|
|
// "priceDiscRp": null,
|
|
// "subTotal": 10000,
|
|
// "priceID": null,
|
|
// "headerID": null,
|
|
// "headerName": null,
|
|
// "subGroupID": "1",
|
|
// "subGroupName": "Hematologi",
|
|
// "isChange": "Y",
|
|
// "status": "N"
|
|
// }
|
|
$prm = $this->sys_input;
|
|
$test = $prm['test'];
|
|
$headerid = $prm['headerid'];
|
|
$dataBefore = $this->getPrice($headerid);
|
|
$arrDesc = [];
|
|
for ($i = 0; $i < count($test); $i++) {
|
|
$data = $test[$i];
|
|
$diskon = 0;
|
|
if ($data['priceDisc'] != null) {
|
|
$diskon = $data['priceDisc'];
|
|
}
|
|
$diskonRp = 0;
|
|
if ($data['priceDiscRp'] != null) {
|
|
$diskonRp = $data['priceDiscRp'];
|
|
}
|
|
if ($data['priceID'] === null || $data['priceID'] === '0') {
|
|
|
|
$sql = "INSERT INTO t_price
|
|
(T_PriceT_PriceHeaderID,
|
|
T_PriceT_TestID,
|
|
T_PriceAmount,
|
|
T_PriceDisc,
|
|
T_PriceDiscRp,
|
|
T_PriceSubTotal,
|
|
T_PriceTotal,
|
|
T_PriceCreated,
|
|
T_PriceUserID
|
|
)
|
|
VALUES(?,?,?,?,?,?,?,NOW(),?)";
|
|
$query = $this->db_onedev->query($sql, [
|
|
$headerid,
|
|
$data['testID'],
|
|
$data['priceAmount'],
|
|
$diskon,
|
|
$diskonRp,
|
|
$data['subTotal'],
|
|
$data['subTotal'],
|
|
$userid,
|
|
]);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$arrDesc[] = "- Add price {$data['testID']} {$data['testCode']} {$data['testName']}";
|
|
} else {
|
|
$sql = "UPDATE t_price
|
|
SET T_PriceAmount = ?,
|
|
T_PriceDisc = ?,
|
|
T_PriceDiscRp = ?,
|
|
T_PriceSubTotal = ?,
|
|
T_PriceTotal = ?,
|
|
T_PriceLastUpdated = NOW(),
|
|
T_PriceUserID = ?
|
|
WHERE T_PriceT_TestID = ?
|
|
AND T_PriceID = ?
|
|
AND T_PriceT_PriceHeaderID = ?";
|
|
$query = $this->db_onedev->query($sql, [
|
|
$data['priceAmount'],
|
|
$diskon,
|
|
$diskonRp,
|
|
$data['subTotal'],
|
|
$data['subTotal'],
|
|
$userid,
|
|
$data['testID'],
|
|
$data['priceID'],
|
|
$headerid,
|
|
]);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$arrDesc[] = "- update price {$data['testID']} {$data['testCode']} {$data['testName']}";
|
|
}
|
|
}
|
|
$dataAfter = $this->getPrice($headerid);
|
|
$log = [
|
|
'ID' => $headerid,
|
|
'detailID' => '0',
|
|
'type' => 'ADD / UPDATE TEST',
|
|
'desc' => "Add / update test" . "\n" . implode("\n", $arrDesc),
|
|
'prm' => $prm,
|
|
'dataBefore' => $dataBefore,
|
|
'dataAfter' => $dataAfter,
|
|
'userID' => $this->sys_user["M_UserID"],
|
|
];
|
|
$this->insertLog($log);
|
|
$this->sys_ok(["last_qry" => $this->db_onedev->last_query()]);
|
|
}
|
|
function searchpriceheaderautocomplete()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
|
|
$prm = $this->sys_input;
|
|
$search = '%' . $prm['search'] . '%';
|
|
|
|
$sql = "SELECT
|
|
T_PriceHeaderID AS headerID,
|
|
CONCAT(T_PriceHeaderCode, ' ', T_PriceHeaderName) AS headerName,
|
|
T_PriceHeaderStartDate AS headerStartDate,
|
|
T_PriceHeaderEndDate AS headerEndDate,
|
|
T_PriceHeaderCode AS headerCode,
|
|
T_PriceHeaderValidasi AS headerValidate,
|
|
CASE
|
|
WHEN `fn_get_count_price`(T_PriceHeaderID) > 0 THEN 'Y'
|
|
ELSE 'N'
|
|
END AS readyValidate
|
|
FROM t_priceheader
|
|
WHERE CONCAT(T_PriceHeaderCode, ' ', T_PriceHeaderName) LIKE '{$search}'
|
|
AND fn_get_count_price(T_PriceHeaderID) > 0
|
|
AND T_PriceHeaderIsActive = 'Y'
|
|
";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$result = [
|
|
"records" => $query->result_array()
|
|
];
|
|
$this->sys_ok($result);
|
|
}
|
|
function copyharga()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
// $this->db_onedev->trans_begin();
|
|
// $this->db_onedev->trans_rollback();
|
|
// $this->db_onedev->trans_commit();
|
|
$this->db_onedev->trans_begin();
|
|
$prm = $this->sys_input;
|
|
$headerid = $prm['headerid'];
|
|
$name = $prm['name'];
|
|
$copypacket = $prm['copypacket'];
|
|
$userid = $this->sys_user["M_UserID"];
|
|
$sql = "SELECT fn_numbering('PH') as number";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$numberHeader = $query->row_array()['number'];
|
|
|
|
//insert price header
|
|
$sql = "INSERT INTO t_priceheader (
|
|
T_PriceHeaderName,
|
|
T_PriceHeaderCreated,
|
|
T_PriceHeaderCraetdUserID,
|
|
T_PriceHeaderCode)
|
|
VALUES(?,NOW(),?,?)";
|
|
$query = $this->db_onedev->query($sql, [$name, $userid, $numberHeader]);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$newHeaderid = $this->db_onedev->insert_id();
|
|
|
|
$sql = "INSERT INTO t_price
|
|
( T_PriceT_PriceHeaderID,
|
|
T_PriceT_TestID,
|
|
T_PriceAmount,
|
|
T_PriceDisc,
|
|
T_PriceDiscRp,
|
|
T_PriceSubTotal,
|
|
T_PriceTotal,
|
|
T_PriceCreated,
|
|
T_PriceUserID)
|
|
SELECT
|
|
'{$newHeaderid}' AS headerid,
|
|
T_PriceT_TestID,
|
|
T_PriceAmount,
|
|
T_PriceDisc,
|
|
T_PriceDiscRp,
|
|
T_PriceSubTotal,
|
|
T_PriceTotal,
|
|
NOW() as created,
|
|
'{$userid}' as userID
|
|
FROM t_price
|
|
WHERE T_PriceT_PriceHeaderID = ?
|
|
AND T_PriceIsActive = 'Y'
|
|
";
|
|
$query = $this->db_onedev->query($sql, [$headerid]);
|
|
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
// echo $this->db_onedev->last_query();
|
|
// exit;
|
|
if ($copypacket) {
|
|
$sql = 'SELECT * FROM t_packet WHERE T_PacketT_PriceHeaderID = ? AND T_PacketIsActive = "Y"';
|
|
$query = $this->db_onedev->query($sql, [$headerid]);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$pcktlst = $query->result_array();
|
|
for ($i = 0; $i < count($pcktlst); $i++) {
|
|
$p = $pcktlst[$i];
|
|
$name = $p['T_PacketName'] . " " . $numberHeader;
|
|
$oldPHid = $p['T_PacketID'];
|
|
$type_number = "PCPR";
|
|
if ($pcktlst[$i]['T_PacketType'] == 'PN')
|
|
$type_number = "PCPN";
|
|
|
|
$sql = "SELECT fn_numbering('{$type_number}') as number";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$number = $query->row_array()['number'];
|
|
|
|
$sql = "INSERT INTO t_packet
|
|
(T_PacketT_PriceHeaderID,
|
|
T_PacketType,
|
|
T_PacketName,
|
|
T_PacketPrice,
|
|
T_PacketOriginalPrice,
|
|
T_PacketSasCode,
|
|
T_PacketStartDate,
|
|
T_PacketEndDate,
|
|
T_PacketCreated,
|
|
T_PacketOriginalBruto)
|
|
VALUES(?,?,?,?,?,?,?,?,NOW(),?)";
|
|
$query = $this->db_onedev->query($sql, [
|
|
$newHeaderid,
|
|
$p['T_PacketType'],
|
|
$name,
|
|
$p['T_PacketPrice'],
|
|
$p['T_PacketOriginalPrice'],
|
|
$number,
|
|
$p['T_PacketStartDate'],
|
|
$p['T_PacketEndDate'],
|
|
$p['T_PacketOriginalBruto'],
|
|
]);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$newPHid = $this->db_onedev->insert_id();
|
|
|
|
$sql = "INSERT INTO t_packetdetail
|
|
(T_PacketDetailT_PacketID,
|
|
T_PacketDetailT_TestID,
|
|
T_PacketDetailOriginalPrice,
|
|
T_PacketDetailPrice,
|
|
T_PacketDetailCreated,
|
|
T_PacketDetailPriceAmount,
|
|
T_PacketDetailPriceDisc,
|
|
T_PacketDetailPriceDiscRp,
|
|
T_PacketDetailPriceSubTotal)
|
|
SELECT
|
|
'{$newPHid}' as pid,
|
|
T_PacketDetailT_TestID,
|
|
T_PacketDetailOriginalPrice,
|
|
T_PacketDetailPrice,
|
|
NOW() as created,
|
|
T_PacketDetailPriceAmount,
|
|
T_PacketDetailPriceDisc,
|
|
T_PacketDetailPriceDiscRp,
|
|
T_PacketDetailPriceSubTotal
|
|
FROM t_packetdetail
|
|
WHERE T_PacketDetailT_PacketID = ?
|
|
AND T_PacketDetailIsActive = 'Y'";
|
|
$query = $this->db_onedev->query($sql, [
|
|
$oldPHid
|
|
]);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
}
|
|
$packetAfter = $this->getPacket($headerid);
|
|
foreach ($packetAfter as $key => $value) {
|
|
$logPacket = [
|
|
'ID' => $value['T_PacketID'],
|
|
'detailID' => '0',
|
|
'type' => 'COPY PACKET ',
|
|
'desc' => "copy paket dari copy price id $headerid",
|
|
'prm' => $prm,
|
|
'dataBefore' => '',
|
|
'dataAfter' => $value,
|
|
'userID' => $this->sys_user["M_UserID"],
|
|
];
|
|
$this->insertLogPacket($logPacket);
|
|
}
|
|
}
|
|
$dataAfter = $this->getPrice($headerid);
|
|
$log = [
|
|
'ID' => $headerid,
|
|
'detailID' => '0',
|
|
'type' => 'COPY ',
|
|
'desc' => "COPY",
|
|
'prm' => $prm,
|
|
'dataBefore' => '',
|
|
'dataAfter' => $dataAfter,
|
|
'userID' => $this->sys_user["M_UserID"],
|
|
];
|
|
$this->insertLog($log);
|
|
$this->db_onedev->trans_commit();
|
|
|
|
// $result = [
|
|
// "records" => $query->result_array()
|
|
// ];
|
|
$this->sys_ok('OK');
|
|
}
|
|
function create($id)
|
|
{
|
|
$this->load->library("SsPriceMou");
|
|
list($status, $message) = $this->sspricemou->create($id);
|
|
if ($status) {
|
|
return [
|
|
"status" => 'OK',
|
|
"msg" => $message
|
|
];
|
|
} else {
|
|
return [
|
|
"status" => 'OK',
|
|
"msg" => $message
|
|
];
|
|
}
|
|
}
|
|
function insertLog($data)
|
|
{
|
|
$sql = "INSERT INTO cpone_log.log_md_price
|
|
(LogMdPriceT_priceHeaderID,
|
|
LogMdPriceT_priceID,
|
|
LogMdPriceType,
|
|
LogMdPriceDesc,
|
|
LogMdPricePrm,
|
|
LogMdPriceJsonBefore,
|
|
LogMdPriceJsonAfter,
|
|
LogMdPriceUserID,
|
|
LogMdPriceCreated)
|
|
VALUES(?,?,?,?,?,?,?,?, NOW())";
|
|
$query = $this->db_onedev->query($sql, [
|
|
$data['ID'],
|
|
$data['detailID'],
|
|
$data['type'],
|
|
$data['desc'],
|
|
$data['prm'] == '' ? '' : json_encode($data['prm']),
|
|
$data['dataBefore'] == '' ? '' : json_encode($data['dataBefore']),
|
|
$data['dataAfter'] == '' ? '' : json_encode($data['dataAfter']),
|
|
$data['userID']
|
|
]);
|
|
// [
|
|
// 'ID' => $data[''],
|
|
// 'detailID' => $data[''],
|
|
// 'type' => $data[''],
|
|
// 'desc' => $data[''],
|
|
// 'prm' => $data[''],
|
|
// 'dataBefore' => $data[''],
|
|
// 'dataAfter ' => $data[''],
|
|
// 'userID ' => $data[''],
|
|
// ];
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
}
|
|
function insertLogPacket($data)
|
|
{
|
|
$sql = "INSERT INTO cpone_log.log_packet
|
|
(LogPacketT_PacketID,
|
|
LogPacketT_PacketDetailID,
|
|
LogPacketType,
|
|
LogPacketDesc,
|
|
LogPacketPrm,
|
|
LogPacketJsonBefore,
|
|
LogPacketJsonAfter,
|
|
LogPacketUserID,
|
|
LogPacketCreated)
|
|
VALUES(?,?,?,?,?,?,?,?, NOW())";
|
|
$query = $this->db_onedev->query($sql, [
|
|
$data['ID'],
|
|
$data['detailID'],
|
|
$data['type'],
|
|
$data['desc'],
|
|
$data['prm'] == '' ? '' : json_encode($data['prm']),
|
|
$data['dataBefore'] == '' ? '' : json_encode($data['dataBefore']),
|
|
$data['dataAfter'] == '' ? '' : json_encode($data['dataAfter']),
|
|
$data['userID']
|
|
]);
|
|
// [
|
|
// 'ID' => $data[''],
|
|
// 'detailID' => $data[''],
|
|
// 'type' => $data[''],
|
|
// 'desc' => $data[''],
|
|
// 'prm' => $data[''],
|
|
// 'dataBefore' => $data[''],
|
|
// 'dataAfter ' => $data[''],
|
|
// 'userID ' => $data[''],
|
|
// ];
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
}
|
|
function insertLogValidatePacket($data)
|
|
{
|
|
$sql = "INSERT INTO cpone_log.log_validate_packet
|
|
(
|
|
LogValidatePacketT_PacketID,
|
|
LogValidatePacketT_PriceHeaderID,
|
|
LogValidatePacketPrice,
|
|
LogValidatePacketOriginalPrice,
|
|
LogValidatePacketPriceUserID,
|
|
LogValidatePacketPriceCreated)
|
|
VALUES(?,?,?,?,?, NOW())";
|
|
$query = $this->db_onedev->query($sql, [
|
|
$data['packetID'],
|
|
$data['priceID'],
|
|
$data['price'],
|
|
$data['originalPrice'],
|
|
$data['userID']
|
|
]);
|
|
// [
|
|
// 'packetID' => $data[''],
|
|
// 'priceID' => $data[''],
|
|
// 'price' => $data[''],
|
|
// 'originalPrice' => $data[''],
|
|
// 'userID' => $data[''],
|
|
// ];
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
}
|
|
function getPrice($id)
|
|
{
|
|
$sql = "SELECT * FROM t_priceheader WHERE T_PriceHeaderID = ?";
|
|
$query = $this->db_onedev->query($sql, [$id]);
|
|
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$header = $query->row_array();
|
|
$sql = "SELECT * FROM t_price WHERE T_PriceT_PriceHeaderID = ?";
|
|
$query = $this->db_onedev->query($sql, [$id]);
|
|
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$detail = $query->result_array();
|
|
$header['detail'] = $detail;
|
|
return $header;
|
|
}
|
|
function getPacket($id)
|
|
{
|
|
$sql = "SELECT * FROM t_packet WHERE T_PacketT_PriceHeaderID = ?";
|
|
$query = $this->db_onedev->query($sql, [$id]);
|
|
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$header = $query->result_array();
|
|
foreach ($header as $key => $value) {
|
|
# code...
|
|
$sql = "SELECT * FROM t_packetdetail WHERE T_PacketDetailT_PacketID = ?";
|
|
$query = $this->db_onedev->query($sql, [$value['T_PacketID']]);
|
|
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$detail = $query->result_array();
|
|
$header[$key]['detail'] = $detail;
|
|
}
|
|
return $header;
|
|
}
|
|
function validateheader()
|
|
{
|
|
if (!$this->isLogin) {
|
|
$this->sys_error("Invalid Token");
|
|
exit;
|
|
}
|
|
// $this->db_onedev->trans_begin();
|
|
// $this->db_onedev->trans_rollback();
|
|
// $this->db_onedev->trans_commit();
|
|
|
|
$prm = $this->sys_input;
|
|
$userid = $this->sys_user["M_UserID"];
|
|
|
|
$id = $prm['id'];
|
|
|
|
$sql = "SELECT * FROM t_packet WHERE T_PacketIsActive = 'Y' AND
|
|
T_PacketT_PriceHeaderID = $id";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$arr_packets = $query->result_array();
|
|
foreach ($arr_packets as $key => $value) {
|
|
$packet_id = $value['T_PacketID'];
|
|
$result = $this->removeDuplicateTests($packet_id);
|
|
|
|
// Optional: Handle result if needed
|
|
if (!$result['success']) {
|
|
error_log("Failed to remove duplicates from packet_id $packet_id: " . $result['message']);
|
|
// You can choose to continue or handle error as needed
|
|
} else if ($result['deleted_count'] > 0) {
|
|
error_log("Successfully removed " . $result['deleted_count'] . " duplicate tests from packet_id $packet_id");
|
|
}
|
|
}
|
|
|
|
$this->db_onedev->trans_begin();
|
|
|
|
|
|
$dataBefore = $this->getPrice($id);
|
|
|
|
|
|
$sql = "UPDATE t_priceheader
|
|
SET T_PriceHeaderValidasi = 'Y',
|
|
T_PriceHeaderValidasiDate = NOW(),
|
|
T_PriceHeaderValidasiUserID = {$userid},
|
|
T_PriceHeaderIsGenerated = 'Y',
|
|
T_PriceHeaderGeneratedDate = NOW()
|
|
WHERE T_PriceHeaderID = $id";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$sql = "UPDATE t_price
|
|
SET T_PriceValidasi = 'Y',
|
|
T_PriceValidasiDate = NOW(),
|
|
T_PriceValidasiDateUserID = {$userid},
|
|
T_PriceIsGenerated = 'Y',
|
|
T_PriceIsGeneratedDate = NOW()
|
|
WHERE T_PriceT_PriceHeaderID = $id
|
|
AND T_PriceValidasi = 'N'";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
|
|
$packetBefore = $this->getPacket($id);
|
|
|
|
$sql = "UPDATE t_packet
|
|
SET T_PacketIsGenerated = 'Y',
|
|
T_PacketGeneratedDate = NOW()
|
|
WHERE T_PacketT_PriceHeaderID = $id
|
|
AND T_PacketIsGenerated= 'N'";
|
|
$query = $this->db_onedev->query($sql, []);
|
|
if (!$query) {
|
|
$message = $this->db_onedev->error();
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
|
|
$rtn = $this->create($id);
|
|
if ($rtn['status'] !== 'OK') {
|
|
$message = $rtn['msg'];
|
|
$message['qry'] = $this->db_onedev->last_query();
|
|
$this->db_onedev->trans_rollback();
|
|
$this->sys_error($message);
|
|
exit;
|
|
}
|
|
$packetAfter = $this->getPacket($id);
|
|
$dataAfter = $this->getPrice($id);
|
|
foreach ($packetBefore as $key => $value) {
|
|
$logPacket = [
|
|
'ID' => $value['T_PacketID'],
|
|
'detailID' => '0',
|
|
'type' => 'VALIDATE',
|
|
'desc' => "Validate price and packet, price id $id",
|
|
'prm' => $prm,
|
|
'dataBefore' => $packetBefore[$key],
|
|
'dataAfter' => $packetAfter[$key],
|
|
'userID' => $this->sys_user["M_UserID"],
|
|
];
|
|
$this->insertLogPacket($logPacket);
|
|
$logValidate = [
|
|
'packetID' => $value['T_PacketID'],
|
|
'priceID' => $id,
|
|
'price' => $packetAfter[$key]['T_PacketPrice'],
|
|
'originalPrice' => $packetAfter[$key]['T_PacketOriginalPrice'],
|
|
'userID' => $this->sys_user["M_UserID"],
|
|
];
|
|
$this->insertLogValidatePacket($logValidate);
|
|
}
|
|
$log = [
|
|
'ID' => $id,
|
|
'detailID' => '0',
|
|
'type' => 'VALIDATE',
|
|
'desc' => "Validate price and packet",
|
|
'prm' => $prm,
|
|
'dataBefore' => $dataBefore,
|
|
'dataAfter' => $dataAfter,
|
|
'userID' => $this->sys_user["M_UserID"],
|
|
];
|
|
|
|
$this->insertLog($log);
|
|
|
|
|
|
// "total" => ceil($total / $ROW_PER_PAGE),
|
|
$this->db_onedev->trans_commit();
|
|
$this->sys_ok([
|
|
"msg" => "OK",
|
|
"generate" => $rtn
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Remove duplicate tests from packet using direct SQL queries
|
|
* @param int $packet_id - ID of the packet to remove duplicates from
|
|
* @return array - Result with deleted count and message
|
|
*/
|
|
private function removeDuplicateTests($packet_id) {
|
|
try {
|
|
// Validate input parameter
|
|
if (empty($packet_id) || $packet_id <= 0) {
|
|
return [
|
|
'success' => false,
|
|
'deleted_count' => 0,
|
|
'message' => 'Error: Invalid PacketID parameter'
|
|
];
|
|
}
|
|
|
|
// Check if packet exists and has active records
|
|
$check_sql = "SELECT COUNT(*) as count_records
|
|
FROM t_packetdetail
|
|
WHERE T_PacketDetailT_PacketID = ?
|
|
AND T_PacketDetailIsActive = 'Y'";
|
|
|
|
$check_query = $this->db_onedev->query($check_sql, [$packet_id]);
|
|
if (!$check_query) {
|
|
$error = $this->db_onedev->error();
|
|
error_log("Error checking packet existence for packet_id $packet_id: " . json_encode($error));
|
|
return [
|
|
'success' => false,
|
|
'deleted_count' => 0,
|
|
'message' => 'Database error: ' . $error['message']
|
|
];
|
|
}
|
|
|
|
$check_result = $check_query->row_array();
|
|
if ($check_result['count_records'] == 0) {
|
|
return [
|
|
'success' => false,
|
|
'deleted_count' => 0,
|
|
'message' => "Error: No active records found for PacketID $packet_id"
|
|
];
|
|
}
|
|
|
|
// Find duplicate TestIDs
|
|
$duplicate_sql = "SELECT T_PacketDetailT_TestID, COUNT(*) as duplicate_count
|
|
FROM t_packetdetail
|
|
WHERE T_PacketDetailT_PacketID = ?
|
|
AND T_PacketDetailIsActive = 'Y'
|
|
GROUP BY T_PacketDetailT_TestID
|
|
HAVING COUNT(*) > 1";
|
|
|
|
$duplicate_query = $this->db_onedev->query($duplicate_sql, [$packet_id]);
|
|
if (!$duplicate_query) {
|
|
$error = $this->db_onedev->error();
|
|
error_log("Error finding duplicates for packet_id $packet_id: " . json_encode($error));
|
|
return [
|
|
'success' => false,
|
|
'deleted_count' => 0,
|
|
'message' => 'Database error: ' . $error['message']
|
|
];
|
|
}
|
|
|
|
$duplicates = $duplicate_query->result_array();
|
|
if (empty($duplicates)) {
|
|
return [
|
|
'success' => true,
|
|
'deleted_count' => 0,
|
|
'message' => "Info: No duplicate records found for PacketID $packet_id"
|
|
];
|
|
}
|
|
|
|
$total_deleted = 0;
|
|
$duplicate_test_ids = count($duplicates);
|
|
|
|
// Process each duplicate TestID
|
|
foreach ($duplicates as $duplicate) {
|
|
$test_id = $duplicate['T_PacketDetailT_TestID'];
|
|
|
|
// Get all records for this TestID, ordered by creation date (keep the oldest)
|
|
$records_sql = "SELECT T_PacketDetailID
|
|
FROM t_packetdetail
|
|
WHERE T_PacketDetailT_PacketID = ?
|
|
AND T_PacketDetailT_TestID = ?
|
|
AND T_PacketDetailIsActive = 'Y'
|
|
ORDER BY T_PacketDetailCreated ASC, T_PacketDetailID ASC
|
|
LIMIT 1, 999999"; // Skip first record (oldest), get the rest
|
|
|
|
$records_query = $this->db_onedev->query($records_sql, [$packet_id, $test_id]);
|
|
if (!$records_query) {
|
|
error_log("Error getting duplicate records for packet_id $packet_id, test_id $test_id");
|
|
continue;
|
|
}
|
|
|
|
$records_to_delete = $records_query->result_array();
|
|
if (!empty($records_to_delete)) {
|
|
$ids_to_delete = array_column($records_to_delete, 'T_PacketDetailID');
|
|
$ids_string = implode(',', $ids_to_delete);
|
|
|
|
// Soft delete duplicates (set IsActive to 'N')
|
|
$delete_sql = "UPDATE t_packetdetail
|
|
SET T_PacketDetailIsActive = 'N',
|
|
T_PacketDetailLastUpdated = NOW()
|
|
WHERE T_PacketDetailID IN ($ids_string)";
|
|
|
|
$delete_query = $this->db_onedev->query($delete_sql);
|
|
if ($delete_query) {
|
|
$deleted_count = $this->db_onedev->affected_rows();
|
|
$total_deleted += $deleted_count;
|
|
error_log("Deactivated $deleted_count duplicate records for TestID $test_id in PacketID $packet_id");
|
|
} else {
|
|
error_log("Error deleting duplicates for TestID $test_id in PacketID $packet_id");
|
|
}
|
|
}
|
|
}
|
|
|
|
$message = $total_deleted > 0
|
|
? "Success: Deactivated $total_deleted duplicate records from PacketID $packet_id. Found $duplicate_test_ids TestIDs with duplicates."
|
|
: "Info: No duplicate records were deactivated for PacketID $packet_id";
|
|
|
|
return [
|
|
'success' => true,
|
|
'deleted_count' => $total_deleted,
|
|
'message' => $message
|
|
];
|
|
|
|
} catch (Exception $e) {
|
|
error_log("Exception in removeDuplicateTests for packet_id $packet_id: " . $e->getMessage());
|
|
return [
|
|
'success' => false,
|
|
'deleted_count' => 0,
|
|
'message' => 'Exception: ' . $e->getMessage()
|
|
];
|
|
}
|
|
}
|
|
}
|