From 5bd8e038fc5f59a051c182c746352d57eb6bd92f Mon Sep 17 00:00:00 2001 From: bintanghr Date: Thu, 9 Jul 2026 09:54:26 +0700 Subject: [PATCH] add: editPoAsset api --- .../mockup/purchase/order/PurchaseOrder.http | 91 ++++++++ .../purchase/order/PurchaseOrderAset.php | 221 ++++++++++++++++++ 2 files changed, 312 insertions(+) diff --git a/application/controllers/mockup/purchase/order/PurchaseOrder.http b/application/controllers/mockup/purchase/order/PurchaseOrder.http index 0460d6a..4038b18 100644 --- a/application/controllers/mockup/purchase/order/PurchaseOrder.http +++ b/application/controllers/mockup/purchase/order/PurchaseOrder.http @@ -281,6 +281,97 @@ Content-Type: application/json "installmentDownPayment": 5000000 } +### +// edit po asset +POST https://{{host}}/mockup/purchase/order/PurchaseOrderAset/editPoAsset/ +Content-Type: application/json + +{ + "token": {{token}}, + "PurchaseOrderID": 1, + "PurchaseOrderAssetContractID": 1, + "podate": "2026-07-09", + "reference": "REF-ASSET-001-UPDATED", + "supplierID": 1, + "typepajak": "percent", + "valuepajak": 11, + "typediskon": "nominal", + "valuediskon": 0, + "catatan": "PO Asset Updated", + "summary": { + "subtotal": 775000000, + "diskon": 0, + "pajak": 85250000, + "total": 860250000 + }, + "detail": [ + { + "M_ItemID": 123, + "ItemUnitID": 1, + "RequestQty": 3, + "SupplierPrice": 75000000, + "TempTotal": 225000000, + "DiskonType": "R", + "DiskonAmount": 0, + "detail": [ + { + "PurchaseRequestID": 1, + "PurchaseRequestDetailID": 1, + "PurchaseRequestFlagID": 1, + "M_ItemID": 123, + "ItemUnitID": 1, + "OriginalQty": 3, + "RequestQty": 3, + "SupplierPrice": 75000000 + } + ] + }, + { + "M_ItemID": 124, + "ItemUnitID": 2, + "RequestQty": 5, + "SupplierPrice": 25000000, + "TempTotal": 125000000, + "DiskonType": "R", + "DiskonAmount": 0, + "detail": [ + { + "PurchaseRequestID": 2, + "PurchaseRequestDetailID": 2, + "PurchaseRequestFlagID": 2, + "M_ItemID": 124, + "ItemUnitID": 2, + "OriginalQty": 3, + "RequestQty": 3, + "SupplierPrice": 25000000 + }, + { + "PurchaseRequestID": 2, + "PurchaseRequestDetailID": 3, + "PurchaseRequestFlagID": 3, + "M_ItemID": 124, + "ItemUnitID": 2, + "OriginalQty": 2, + "RequestQty": 2, + "SupplierPrice": 25000000 + } + ] + } + ], + "assetAttachmentID": 1, + "contractName": "Kontrak Pengadaan Mesin X - Revisi", + "contractDate": "2026-07-10", + "contractStart": "2026-07-10", + "contractEnd": "2027-10-10", + "contractDuration": 15, + "installmentNumber": 15, + "installmentDate": 5, + "installmentPayAmount": 15000000, + "installmentDownPaymentType": "persen", + "installmentDownPayment": 20 +} + + ### Test isValidMultiple Warehouse ### Should return True karena UnitRequest = UnitPurchase GET https://{{host}}/mockup/purchase/order/PurchaseOrder/isValidMultipleWarehouse/ diff --git a/application/controllers/mockup/purchase/order/PurchaseOrderAset.php b/application/controllers/mockup/purchase/order/PurchaseOrderAset.php index 2d04753..43bfaa1 100644 --- a/application/controllers/mockup/purchase/order/PurchaseOrderAset.php +++ b/application/controllers/mockup/purchase/order/PurchaseOrderAset.php @@ -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) {