add: editPoAsset api

This commit is contained in:
2026-07-09 09:54:26 +07:00
committed by sasadib
parent 8f07a65485
commit 5bd8e038fc
2 changed files with 312 additions and 0 deletions

View File

@@ -420,6 +420,227 @@ class PurchaseOrderAset extends MY_Controller
}
}
public function editPoAsset() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$para = $this->sys_input;
$user = $this->sys_user;
# check tipe diskon dan pajak #
$taxtype = 'R';
$taxpercent = 0;
if ($para['typepajak'] == 'percent') {
$taxtype = 'P';
$taxpercent = floatval($para['valuepajak']);
}
$discpercent = 0;
if ($para['typediskon'] == 'percent') {
$discpercent = floatval($para['valuediskon']);
}
# get data summary #
$summary_subtotal = floatval($para['summary']['subtotal']);
$summary_diskon = floatval($para['summary']['diskon']);
$summary_pajak = floatval($para['summary']['pajak']);
$summary_total = floatval($para['summary']['total']);
# update po header #
$sql_po = "UPDATE purchase_order SET
PurchaseOrderDate = ?,
PurchaseOrderRefNumber = ?,
PurchaseOrderSupplierID = ?,
PurchaseOrderS_RegionalID = ?,
PurchaseOrderTaxPpnType = ?,
PurchaseOrderTaxPercentPpn = ?,
PurchaseOrderDiscountPercent = ?,
PurchaseOrderDiscountAmount = ?,
PurchaseOrderNote = ?,
PurchaseOrderSubTotal = ?,
PurchaseOrderTaxAmountPpn = ?,
PurchaseOrderGrandTotal = ?,
PurchaseOrderLastUpdated = NOW()
WHERE PurchaseOrderID = ?
AND PurchaseOrderIsActive = 'Y'";
$que_po = $this->db->query($sql_po, [
$para['podate'], $para['reference'], $para['supplierID'], $user['S_RegionalID'],
$taxtype, $taxpercent, $discpercent, $summary_diskon, $para['catatan'],
$summary_subtotal, $summary_pajak, $summary_total, $para['PurchaseOrderID']
]);
if (!$que_po) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update header purchase order");
exit;
}
# update purchase_order_asset_contract #
$sql_contract = "UPDATE purchase_order_asset_contract SET
PurchaseOrderAssetContractTAssetAttachmentID = ?,
PurchaseOrderAssetContractName = ?,
PurchaseOrderAssetContractDate = ?,
PurchaseOrderAssetContractStartDate = ?,
PurchaseOrderAssetContractEndDate = ?,
PurchaseOrderAssetContractDuration = ?,
PurchaseOrderAssetContractInstallmentNumber = ?,
PurchaseOrderAssetContractInstallmentDate = ?,
PurchaseOrderAssetContractInstallmentPayAmount = ?,
PurchaseOrderAssetContractInstallmentDownPaymentType = ?,
PurchaseOrderAssetContractInstallmentDownPayment = ?,
PurchaseOrderAssetContractLastUpdated = NOW()
WHERE PurchaseOrderAssetContractID = ?
AND PurchaseOrderAssetContractIsActive = 'Y'";
$que_contract = $this->db->query($sql_contract, [
$para['assetAttachmentID'],
$para['contractName'],
$para['contractDate'],
$para['contractStart'],
$para['contractEnd'],
$para['contractDuration'] ?: 1,
$para['installmentNumber'] ?: 1,
$para['installmentDate'] ?: 1,
$para['installmentPayAmount'] ?: 0.00,
$para['installmentDownPaymentType'] ?: 'nominal',
$para['installmentDownPayment'] ?: 0.00,
$para['PurchaseOrderAssetContractID']
]);
if (!$que_contract) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update purchase order asset contract");
exit;
}
# update status old po summary isActive to 'N' #
$sql_active = "UPDATE purchase_order_summary SET
PurchaseOrderSummaryIsActive = 'N'
WHERE PurchaseOrderSummaryPurchaseOrderID = ?
AND PurchaseOrderSummaryIsActive = 'Y'";
$que_active = $this->db->query($sql_active, [$para['PurchaseOrderID']]);
if (!$que_active) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update status po summary to N");
exit;
}
# insert new po summary #
$summary_detail = $para['detail'];
$item_detail = [];
foreach ($summary_detail as $key => $obj) {
$discpercent = 0;
$discabsolut = 0;
if ($obj['DiskonType'] == 'P') {
$discpercent = $obj['DiskonAmount'];
} else {
$discabsolut = $obj['DiskonAmount'];
}
$sql_summary = "INSERT INTO purchase_order_summary (
PurchaseOrderSummaryPurchaseOrderID,
PurchaseOrderSummaryItemID,
PurchaseOrderSummaryItemUnitID,
PurchaseOrderSummaryQty,
PurchaseOrderSummaryPrice,
PurchaseOrderSummaryTotal,
PurchaseOrderSummaryDiscountRupiah,
PurchaseOrderSummaryDiscountPercent,
PurchaseOrderSummaryDiscountAmount,
PurchaseOrderSummaryDiscountType,
PurchaseOrderSummaryCreatedUserID,
PurchaseOrderSummaryCreated
) VALUES (?,?,?,?,?,?,?,?,?,?,?,NOW())";
$que_summary = $this->db->query($sql_summary, [
$para['PurchaseOrderID'], $obj['M_ItemID'], $obj['ItemUnitID'],
$obj['RequestQty'], $obj['SupplierPrice'], $obj['TempTotal'],
$discabsolut, $discpercent, $obj['DiskonAmount'],
$obj['DiskonType'], $user['M_UserID']
]);
if (!$que_summary) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update data purchase order summary");
exit;
}
$PurchaseSummaryID = $this->db->insert_id();
foreach ($obj['detail'] as $key => $value) {
$obj['detail'][$key]['PurchaseSummaryID'] = $PurchaseSummaryID;
}
$item_detail = array_merge($item_detail, $obj['detail']);
}
# update status po detail isActive to 'N' #
$sql_active = "UPDATE purchase_order_detail SET
PurchaseOrderDetailIsActive = 'N'
WHERE PurchaseOrderDetailPurchaseOrderID = ?
AND PurchaseOrderDetailIsActive = 'Y'";
$que_active = $this->db->query($sql_active, [$para['PurchaseOrderID']]);
if (!$que_active) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update status po detail to N");
exit;
}
# insert new po detail #
foreach ($item_detail as $key => $obj) {
$total = floatval($obj['SupplierPrice']) * floatval($obj['RequestQty']);
$sql_detail = "INSERT INTO purchase_order_detail (
PurchaseOrderDetailPurchaseOrderID,
PurchaseOrderDetailPurchaseSummaryID,
PurchaseOrderDetailPurchaseRequestID,
PurchaseOrderDetailPurchaseRequestDetailID,
PurchaseOrderDetailPurchaseRequestFlagID,
PurchaseOrderDetailItemID,
PurchaseOrderDetailItemUnitID,
PurchaseOrderDetailRequestQty,
PurchaseOrderDetailQty,
PurchaseOrderDetailPrice,
PurchaseOrderDetailTotal,
PurchaseOrderDetailUserID,
PurchaseOrderDetailCreatedUserID,
PurchaseOrderDetailCreated
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,NOW())";
$que_detail = $this->db->query($sql_detail, [
$para['PurchaseOrderID'], $obj['PurchaseSummaryID'], $obj['PurchaseRequestID'],
$obj['PurchaseRequestDetailID'], $obj['PurchaseRequestFlagID'],
$obj['M_ItemID'], $obj['ItemUnitID'], $obj['OriginalQty'], $obj['RequestQty'],
$obj['SupplierPrice'], $total, $user['M_UserID'], $user['M_UserID']
]);
if (!$que_detail) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed re-insert purchase order detail");
exit;
}
$sql_flag = "UPDATE purchase_request_flag SET
PurchaseRequestFlagQtyProses = ?
WHERE PurchaseRequestFlagID = ?";
$que_flag = $this->db->query($sql_flag, [
$obj['RequestQty'], $obj['PurchaseRequestFlagID']
]);
if (!$que_flag) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update qty proses flag");
exit;
}
}
$this->insertLog(
$para['PurchaseOrderID'], 'UPDATE', $para, '',
[], $user['M_UserID'], 'edit purchase order asset'
);
$this->db->trans_commit();
$this->sys_ok("[success] update purchase order asset");
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
public function getUserApproveLevel() {
try {
if (!$this->isLogin) {