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

718 lines
32 KiB
PHP

<?php
class Expedition extends MY_Controller
{
var $inventory;
var $log_inventory;
// var $staff;
function __construct()
{
parent::__construct();
$this->inventory = $this->load->database("inventory", true);
$this->log_inventory = $this->load->database("inventory_log", true);
// $this->staff = $this->load->database("inventory_log", true);
}
function index()
{
echo "Api: Expedition";
}
function search()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$search = "%%";
if (isset($prm['search'])) {
$search = trim($prm["search"]);
$search = '%' . $prm['search'] . '%';
}
$order_by = "ExpeditionName";
if (isset($prm['order_by'])) {
$order_by = trim($prm["order_by"]);
}
$order_type = "asc";
if (isset($prm['order_type'])) {
$order_type = trim($prm["order_type"]);
}
$order = $order_by . ' ' . $order_type;
$perpage = 10;
$offset = ($prm['current_page'] - 1) * $perpage;
$count = "SELECT count(ExpeditionID) as total
FROM expedition
WHERE
ExpeditionIsActive = 'Y'
AND ExpeditionName like ?";
$qry_count = $this->inventory->query($count, array($search));
$total_count = 0;
$total_page = 0;
if ($qry_count) {
$total_count = $qry_count->row()->total;
$total_page = ceil($total_count / $perpage);
} else {
$this->sys_error_db("Expedition count error", $this->inventory->last_query());
exit;
}
$rows = [];
$sql = "SELECT ExpeditionID as id,
ExpeditionName as name,
ExpeditionIsInternal as internal
FROM expedition
WHERE
ExpeditionIsActive = 'Y'
AND ExpeditionName like ?
ORDER BY $order LIMIT ? OFFSET ?";
$qry = $this->inventory->query($sql, array($search, $perpage, $offset));
$lst_qryyy = $this->inventory->last_query();
if ($qry) {
$rows = $qry->result_array();
if (count($rows) > 0) {
foreach ($rows as $key => $value) {
$sql = "SELECT ExpeditionStaffID as id ,
ExpeditionStaffName as staffName,
ExpeditionStaffMobile as staffMobile,
ExpeditionStaffM_StaffID as staffId
FROM expeditionstaff
WHERE ExpeditionStaffIsActive = 'Y'
AND ExpeditionStaffExpeditionID = ?";
$qry = $this->inventory->query($sql, array($value['id']));
if ($qry) {
$rows[$key]['staff'] =
$qry->result_array();
}
}
}
} else {
$this->sys_error_db("Expedition data error", $this->inventory->last_query());
exit;
}
$result = array(
"total" => $total_page,
"total_filter" => $total_count,
"records" => $rows,
"qry" => $lst_qryyy
);
$this->sys_ok($result);
exit;
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function get_staff()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$count = "SELECT count(M_StaffID) as total
FROM m_staff
WHERE M_StaffIsActive = 'Y'
AND M_StaffIsCourier = 'Y' ;";
$qry_count = $this->db->query($count);
$total_count = 0;
if ($qry_count) {
$total_count = $qry_count->row()->total;
} else {
$this->sys_error_db("Expedition count error", $this->db->last_query());
exit;
}
$sql = "SELECT M_StaffID as staffId,
M_StaffName as staffName,
M_StaffHP as staffMobile
FROM m_staff
WHERE M_StaffIsActive = 'Y'
AND M_StaffIsCourier = 'Y' ORDER BY M_StaffName asc ";
$qry = $this->db->query($sql);
$staff = $qry->result_array();
$result = array(
"total_filter" => $total_count,
"records" => $staff,
);
$this->sys_ok($result);
exit;
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function add()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userid = $this->sys_user['M_UserID'];
$name = "";
if (isset($prm['name'])) {
$name = trim($prm["name"]);
}
$isInternal = "";
if (isset($prm['isInternal'])) {
$isInternal = trim($prm["isInternal"]);
}
$this->inventory->trans_start();
$this->inventory->trans_strict(FALSE);
$last_id = 0;
$staff_log = array();
$sql = "INSERT INTO expedition
(ExpeditionName,
ExpeditionIsInternal,
ExpeditionIsActive,
ExpeditionCreated,
ExpeditionLastUpdated,
ExpeditionUserID)
VALUES
(?,
?,
'Y',
NOW(),
NOW(),
?)";
$qry = $this->inventory->query($sql, array($name, $isInternal, $userid));
if ($qry) {
$last_id = $this->inventory->insert_id();
} else {
$this->sys_error_db("save expedition error", $this->inventory->last_query());
exit;
}
if (count($prm['staff']) > 0) {
foreach ($prm['staff'] as $key => $value) {
$stafName = trim($value['staffName']);
$stafMobile = trim($value['staffMobile']);
$staffId = trim($value['staffId']);
$sql = "INSERT INTO expeditionstaff
(ExpeditionStaffExpeditionID,
ExpeditionStaffName,
ExpeditionStaffMobile,
ExpeditionStaffM_StaffID,
ExpeditionStaffIsActive,
ExpeditionStaffUserID,
ExpeditionStaffCreated,
ExpeditionStaffLastUpdated)
VALUES
(?,
?,
?,
?,
'Y',
?,
NOW(),
NOW()
)";
$qry = $this->inventory->query($sql, array($last_id, $stafName, $stafMobile, $staffId, $userid));
$insert_id = $this->inventory->insert_id();
if (!$qry) {
$this->sys_error_db("save expedition error", $this->inventory->last_query());
exit;
}
$sql_json_after = "SELECT * FROM
expeditionstaff
WHERE
ExpeditionStaffID = ?";
$qry_json_after = $this->inventory->query($sql_json_after, [$insert_id]);
$json_after = $qry_json_after->row_array();
array_push($staff_log, $qry_json_after->row_array());
if (!$qry_json_after) {
$error = array(
"message" => $this->inventory->error()["message"],
"qry" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$sql_insert_log = "INSERT INTO expeditionstaff_log
(ExpeditionStaffLogExpeditionStaffID,
ExpeditionStaffLogStatus,
ExpeditionStaffLogJSONAfter,
ExpeditionStaffLogUserID ,
ExpeditionStaffLogCreated)
VALUES(?,'ADD', ?,?, now() )";
$qry_insert_log = $this->log_inventory->query($sql_insert_log, [$insert_id, json_encode($json_after), $userid]);
if (!$qry_insert_log) {
$error = array(
"message" => $this->log_inventory->error()["message"],
"qry" => $this->log_inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
}
}
$sql_json_after = "SELECT * FROM
expedition
WHERE ExpeditionID = ?";
$affected_rows = $this->inventory->affected_rows();
$qry_json_after = $this->inventory->query($sql_json_after, [$last_id]);
$json_after = $qry_json_after->row_array();
if (!$qry_json_after) {
$error = array(
"message" => $this->inventory->error()["message"],
"qry" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$json_after['expeditionstaff'] = $staff_log;
$sql_insert_log = "INSERT INTO expedition_log
(ExpeditionLogStatus,
ExpeditionLogExpeditionID,
ExpeditionLogJSONAfter,
ExpeditionLogUserID,
ExpeditionLogCreated)
VALUES('ADD',?, ?,?, NOW() )";
$qry_insert_log = $this->log_inventory->query($sql_insert_log, [$last_id, json_encode($json_after), $userid]);
if (!$qry_insert_log) {
$error = array(
"msg" => "failed insert expedition log",
"message" => $this->log_inventory->error()["message"],
"qry" => $this->log_inventory->last_query(),
"json_after" => $json_after
);
$this->sys_error_db($error);
exit;
}
$this->inventory->trans_complete();
$result = array(
"affected_rows" => $affected_rows,
"inserted_id" => $last_id,
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function edit()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userid = $this->sys_user['M_UserID'];
$name = "";
if (isset($prm['name'])) {
$name = trim($prm["name"]);
}
$isInternal = "";
if (isset($prm['isInternal'])) {
$isInternal = trim($prm["isInternal"]);
}
$id = $prm['id'];
$sql_json_before = "SELECT * FROM
expedition
WHERE ExpeditionID = ?";
$affected_rows = $this->inventory->affected_rows();
$qry_json_before = $this->inventory->query($sql_json_before, [$id]);
if (!$qry_json_before) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$json_expedition_before = $qry_json_before->row_array();
$sql_json_before = "SELECT * FROM
expeditionstaff
WHERE ExpeditionStaffExpeditionID = ?";
$qry_json_before = $this->inventory->query($sql_json_before, [$id]);
if (!$qry_json_before) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$json_expedition_before['expeditionstaff'] = $qry_json_before->result_array();
$isInternalBefore = $json_expedition_before['ExpeditionIsInternal'];
$this->inventory->trans_start();
$this->inventory->trans_strict(FALSE);
$sql = "UPDATE expedition SET
ExpeditionName = ? ,
ExpeditionIsInternal = ?,
ExpeditionLastUpdated = now()
WHERE ExpeditionID = ?";
$qry = $this->inventory->query($sql, [$name, $isInternal, $id]);
if (!$qry) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$last_qry = "";
//ISINTERNAL SAMA DENGAN KONDISI SEBELUMNYA
if ($isInternalBefore == $isInternal) {
// APABILA STAFF LEBIH DARI 0
if (count($prm['staff']) > 0) {
$sql = "UPDATE expeditionstaff SET
ExpeditionStaffIsActive = 'N'
WHERE ExpeditionStaffExpeditionID = ?";
$qry = $this->inventory->query($sql, [$id]);
if (!$qry) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
//PERULANGAN SETIAP STAFF
foreach ($prm['staff'] as $key => $value) {
$staffName = trim($value['staffName']);
$staffMobile = trim($value['staffMobile']);
$staffId = trim($value['id']);
$mStaffId = trim($value['staffId']);
//APABILA STAFFID YANG AKAN DI UBAH LEBIH DARI 0
if (intval($staffId) > 0) {
$sql_before = "SELECT * FROM
expeditionstaff
where ExpeditionStaffID = ?";
$qry_before = $this->inventory->query($sql_before, [$staffId]);
if (!$qry_before) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$json_before = json_encode($qry_before->row_array());
$sql = "UPDATE expeditionstaff SET
ExpeditionStaffName = ?,
ExpeditionStaffMobile =?,
ExpeditionStaffM_StaffID= ?,
ExpeditionStaffIsActive= 'Y',
ExpeditionStaffLastUpdated= now()
WHERE ExpeditionStaffID = ?";
$qry = $this->inventory->query($sql, [$staffName, $staffMobile, $mStaffId, $staffId]);
$last_qry = $this->inventory->last_query();
if (!$qry) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$sql_after = "SELECT * FROM
expeditionstaff
where ExpeditionStaffID = ?";
$qry_after = $this->inventory->query($sql_after, [$staffId]);
if (!$qry_after) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$json_after = json_encode($qry_after->row_array());
$sql_insert_log = "INSERT INTO expeditionstaff_log
VALUES(null,?,'EDIT', ?, ?,?, now() )";
$qry_insert_log = $this->log_inventory->query($sql_insert_log, [$id, $json_before, $json_after, $userid]);
if (!$qry) {
$this->sys_error_db("save expedition error", $this->inventory->last_query());
exit;
}
if (!$qry_insert_log) {
$error = array(
"message" => $this->log_inventory->error()["message"],
"sql" => $this->log_inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
//APABILA STAFF ID == 0
} else {
$sql = "INSERT INTO expeditionstaff
VALUES(null, ?, ?, ?,?,'Y',?, now(), now())";
$qry = $this->inventory->query($sql, array($id, $staffName, $staffMobile, $mStaffId, $userid));
$last_qry = $this->inventory->last_query();
$insert_id = $this->inventory->insert_id();
if (!$qry) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$sql_after = "SELECT * FROM
expeditionstaff
where ExpeditionStaffID = ?";
$qry_after = $this->inventory->query($sql_after, [$insert_id]);
if (!$qry_after) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$json_after = json_encode($qry_after->row_array());
$sql_insert_log = "INSERT INTO expeditionstaff_log
VALUES(null,?,'ADD', null, ?,?, now() )";
$qry_insert_log = $this->log_inventory->query($sql_insert_log, [$insert_id, $json_after, $userid]);
if (!$qry_insert_log) {
$error = array(
"message" => $this->log_inventory->error()["message"],
"sql" => $this->log_inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
}
}
}
//ISINTERNAL TIDAK SAMA DENGAN KONDISI SEBELUMNYA
} else {
if (count($prm['staff']) > 0) {
$sql = "UPDATE expeditionstaff SET
ExpeditionStaffIsActive = 'N'
WHERE ExpeditionStaffExpeditionID = ?";
$qry = $this->inventory->query($sql, [$id]);
if (!$qry) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
foreach ($prm['staff'] as $key => $value) {
$staffName = trim($value['staffName']);
$staffMobile = trim($value['staffMobile']);
$staffId = trim($value['id']);
$mStaffId = trim($value['staffId']);
$sql = "INSERT INTO expeditionstaff
VALUES(null, ?, ?, ?,?,'Y',?, now(), now())";
$qry = $this->inventory->query($sql, array($id, $staffName, $staffMobile, $mStaffId, $userid));
$last_qry = $this->inventory->last_query();
$insert_id = $this->inventory->insert_id();
if (!$qry) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$sql_after = "SELECT * FROM
expeditionstaff
where ExpeditionStaffID = ?";
$qry_after = $this->inventory->query($sql_after, [$insert_id]);
if (!$qry_after) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$json_after = json_encode($qry_after->row_array());
$sql_insert_log = "INSERT INTO expeditionstaff_log
VALUES(null,?,'ADD', null, ?,?, now() )";
$qry_insert_log = $this->log_inventory->query($sql_insert_log, [$insert_id, $json_after, $userid]);
if (!$qry_insert_log) {
$error = array(
"message" => $this->log_inventory->error()["message"],
"sql" => $this->log_inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
}
}
}
$this->inventory->trans_complete();
$sql_json_after = "SELECT expedition.* FROM
expedition
WHERE ExpeditionID = ?";
$qry_json_after = $this->inventory->query($sql_json_after, [$id]);
if (!$qry_json_after) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$json_after = $qry_json_after->row_array();
$sql_json_after = "SELECT * FROM
expeditionstaff
WHERE ExpeditionStaffExpeditionID = ?";
$qry_json_after = $this->inventory->query($sql_json_after, [$id]);
$json_after['expeditionstaff'] = $qry_json_after->result_array();
if (!$qry_json_after) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$sql_insert_log = "INSERT INTO expedition_log
VALUES(null,'EDIT',?, ?, ?,?, now() )";
$qry_insert_log = $this->log_inventory->query(
$sql_insert_log,
[$id, json_encode($json_expedition_before), json_encode($json_after), $userid]
);
if (!$qry_insert_log) {
$error = array(
"message" => $this->log_inventory->error()["message"],
"sql" => $this->log_inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$result = array(
"message" => '',
"sql_log" => $this->log_inventory->last_query(),
"sql" => $this->inventory->last_query(),
"last_qry" => $last_qry
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function delete()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userid = $this->sys_user['M_UserID'];
$id = "";
if (isset($prm['id'])) {
$id = trim($prm["id"]);
}
if ($id == "" || !$id) {
$error = array(
"message" => "id is mandatory",
);
$this->sys_error_db($error);
exit;
}
$this->inventory->trans_start();
$this->inventory->trans_strict(FALSE);
$sql = "UPDATE expedition
SET ExpeditionIsActive = 'N',
ExpeditionLastUpdated = NOW(),
ExpeditionUserID = ?
WHERE ExpeditionID = ?";
$qry = $this->inventory->query($sql, [$userid, $id]);
if (!$qry) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
} else {
$sql = "UPDATE expeditionstaff SET
ExpeditionStaffIsActive = 'N',
ExpeditionStaffUserID = ?,
ExpeditionStaffLastUpdated = NOW()
WHERE ExpeditionStaffExpeditionID = ?";
$qry = $this->inventory->query($sql, [$userid, $id]);
if (!$qry) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
}
$this->inventory->trans_complete();
$sql_json_after = "SELECT * FROM
expedition
WHERE ExpeditionID = ?";
$qry_json_after = $this->inventory->query($sql_json_after, [$id]);
if (!$qry_json_after) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$json_after = $qry_json_after->row_array();
$sql_json_after = "SELECT * FROM
expeditionstaff
WHERE ExpeditionStaffExpeditionID = ?";
$qry_json_after = $this->inventory->query($sql_json_after, [$id]);
$json_after['expeditionstaff'] = $qry_json_after->result_array();
if (!$qry_json_after) {
$error = array(
"message" => $this->inventory->error()["message"],
"sql" => $this->inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$sql_insert_log = "INSERT INTO expedition_log
VALUES(null,'DELETE',?, NULL, ?,?, now() )";
$qry_insert_log = $this->log_inventory->query(
$sql_insert_log,
[$id, json_encode($json_after), $userid]
);
if (!$qry_insert_log) {
$error = array(
"message" => $this->log_inventory->error()["message"],
"sql" => $this->log_inventory->last_query()
);
$this->sys_error_db($error);
exit;
}
$result = array(
"message" => '',
"sql_log" => $this->log_inventory->last_query(),
"sql" => $this->inventory->last_query(),
"json_after" => $json_after
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
}