add: createPoAsset api
This commit is contained in:
@@ -172,6 +172,115 @@ Content-Type: application/json
|
||||
"ID": ""
|
||||
}
|
||||
|
||||
###
|
||||
// create po asset
|
||||
POST https://{{host}}/mockup/purchase/order/PurchaseOrderAset/createPoAsset/
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"token": {{token}},
|
||||
"podate": "2026-07-09",
|
||||
"reference": "REF-ASSET-001",
|
||||
"supplierID": 1,
|
||||
"typepajak": "nominal",
|
||||
"valuepajak": 0,
|
||||
"typediskon": "nominal",
|
||||
"valuediskon": 0,
|
||||
"catatan": "PO Asset Test",
|
||||
"summary": {
|
||||
"subtotal": 775000000,
|
||||
"diskon": 37500000,
|
||||
"pajak": 81125000,
|
||||
"total": 818625000
|
||||
},
|
||||
"detail": [
|
||||
{
|
||||
"M_ItemID": 123,
|
||||
"ItemUnitID": 1,
|
||||
"RequestQty": 2,
|
||||
"SupplierPrice": 75000000,
|
||||
"TempTotal": 150000000,
|
||||
"DiskonType": "R",
|
||||
"DiskonAmount": 0,
|
||||
"detail": [
|
||||
{
|
||||
"PurchaseRequestID": 1,
|
||||
"PurchaseRequestDetailID": 1,
|
||||
"PurchaseRequestFlagID": 1,
|
||||
"M_ItemID": 123,
|
||||
"ItemUnitID": 1,
|
||||
"OriginalQty": 2,
|
||||
"RequestQty": 2,
|
||||
"SupplierPrice": 75000000
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"M_ItemID": 124,
|
||||
"ItemUnitID": 2,
|
||||
"RequestQty": 5,
|
||||
"SupplierPrice": 25000000,
|
||||
"TempTotal": 125000000,
|
||||
"DiskonType": "P",
|
||||
"DiskonAmount": 10,
|
||||
"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
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"M_ItemID": 125,
|
||||
"ItemUnitID": 1,
|
||||
"RequestQty": 1,
|
||||
"SupplierPrice": 500000000,
|
||||
"TempTotal": 500000000,
|
||||
"DiskonType": "R",
|
||||
"DiskonAmount": 25000000,
|
||||
"detail": [
|
||||
{
|
||||
"PurchaseRequestID": 3,
|
||||
"PurchaseRequestDetailID": 4,
|
||||
"PurchaseRequestFlagID": 4,
|
||||
"M_ItemID": 125,
|
||||
"ItemUnitID": 1,
|
||||
"OriginalQty": 1,
|
||||
"RequestQty": 1,
|
||||
"SupplierPrice": 500000000
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"assetAttachmentID": null,
|
||||
"contractName": "Kontrak Pengadaan Mesin X",
|
||||
"contractDate": "2026-07-09",
|
||||
"contractStart": "2026-07-09",
|
||||
"contractEnd": "2027-07-09",
|
||||
"contractDuration": 12,
|
||||
"installmentNumber": 12,
|
||||
"installmentDate": 1,
|
||||
"installmentPayAmount": 12500000,
|
||||
"installmentDownPaymentType": "nominal",
|
||||
"installmentDownPayment": 5000000
|
||||
}
|
||||
|
||||
### Test isValidMultiple Warehouse
|
||||
### Should return True karena UnitRequest = UnitPurchase
|
||||
GET https://{{host}}/mockup/purchase/order/PurchaseOrder/isValidMultipleWarehouse/
|
||||
|
||||
@@ -162,6 +162,241 @@ class PurchaseOrderAset extends MY_Controller {
|
||||
}
|
||||
}
|
||||
|
||||
## MUTATIONS ##
|
||||
public function createPoAsset() {
|
||||
try {
|
||||
if (!$this->isLogin) {
|
||||
$this->sys_error("invalid token");
|
||||
exit;
|
||||
}
|
||||
|
||||
$this->db->trans_begin();
|
||||
|
||||
$para = $this->sys_input;
|
||||
$user = $this->sys_user;
|
||||
|
||||
/* GENERATE nomor PO */
|
||||
$areaid = $user['M_BranchID'];
|
||||
$areatype = 'B';
|
||||
if ($user['loginLevel'] == 'regional') {
|
||||
$areaid = $user['S_RegionalID'];
|
||||
$areatype = 'R';
|
||||
}
|
||||
|
||||
$sqlusrdivisi = "SELECT M_UserDivisionDivisionID FROM m_userdivision
|
||||
WHERE M_UserDivisionM_UserID = ? AND M_UserDivisionIsActive = 'Y'";
|
||||
$queusrdivisi = $this->db->query($sqlusrdivisi, [$user['M_UserID']]);
|
||||
if (!$queusrdivisi) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] get user divisi", $this->db);
|
||||
exit;
|
||||
}
|
||||
$userDivID = $queusrdivisi->row_array()['M_UserDivisionDivisionID'];
|
||||
|
||||
$sqlnum = "SELECT `fn_penomoran`(?, ?, ?, ?, ?, ?) AS numpd;";
|
||||
$quenum = $this->db->query($sqlnum, ['PO', $userDivID, $areatype, $areaid, 'SM', 'N']);
|
||||
if (!$quenum) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] generate number doc", $this->db);
|
||||
exit;
|
||||
}
|
||||
$numpd = $quenum->row_array()['numpd'];
|
||||
|
||||
/* INSERT into table purchase order */
|
||||
$taxtype = 'R';
|
||||
$taxpercent = 0;
|
||||
if ($para['typepajak'] == 'percent') {
|
||||
$taxtype = 'P';
|
||||
$taxpercent = floatval($para['valuepajak']);
|
||||
}
|
||||
|
||||
$discpercent = 0;
|
||||
if ($para['typediskon'] == 'percent') {
|
||||
$discpercent = floatval($para['valuediskon']);
|
||||
}
|
||||
|
||||
/* 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']);
|
||||
|
||||
$sql_po = "INSERT INTO purchase_order (
|
||||
PurchaseOrderNumber,
|
||||
PurchaseOrderItemCategoryID, -- '3' for asset
|
||||
PurchaseOrderDate,
|
||||
PurchaseOrderRefNumber,
|
||||
PurchaseOrderSupplierID,
|
||||
PurchaseOrderS_RegionalID,
|
||||
PurchaseOrderTaxPpnType,
|
||||
PurchaseOrderTaxPercentPpn,
|
||||
PurchaseOrderDiscountPercent,
|
||||
PurchaseOrderDiscountAmount,
|
||||
PurchaseOrderNote,
|
||||
PurchaseOrderSubTotal,
|
||||
PurchaseOrderTaxAmountPpn,
|
||||
PurchaseOrderGrandTotal,
|
||||
PurchaseOrderUserID,
|
||||
PurchaseOrderCreated
|
||||
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW())";
|
||||
$que_po = $this->db->query($sql_po, [
|
||||
$numpd, '3', $para['podate'], $para['reference'], $para['supplierID'],
|
||||
$user['S_RegionalID'], $taxtype, $taxpercent, $discpercent, $summary_diskon,
|
||||
$para['catatan'], $summary_subtotal, $summary_pajak, $summary_total, $user['M_UserID']
|
||||
]);
|
||||
if (!$que_po) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] insert into table purchase order");
|
||||
exit;
|
||||
}
|
||||
$PurchaseOrderID = $this->db->insert_id();
|
||||
|
||||
# INSERT into table purchase order 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, [
|
||||
$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] insert into table purchase order summary");
|
||||
exit;
|
||||
}
|
||||
|
||||
/* add detail to an array */
|
||||
$PurchaseSummaryID = $this->db->insert_id();
|
||||
foreach ($obj['detail'] as $key => $value) {
|
||||
$obj['detail'][$key]['PurchaseSummaryID'] = $PurchaseSummaryID;
|
||||
$obj['detail'][$key]['SupplierPrice'] = $obj['SupplierPrice'];
|
||||
}
|
||||
|
||||
$item_detail = array_merge($item_detail, $obj['detail']);
|
||||
}
|
||||
|
||||
# INSERT into table purchase order 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, [
|
||||
$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] insert into purchase order detail");
|
||||
exit;
|
||||
}
|
||||
|
||||
/* purchase request update flag */
|
||||
$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] update purchase request flag");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
# INSERT into table purchase_order_asset_contract #
|
||||
$sql_contract = "INSERT INTO purchase_order_asset_contract (
|
||||
PurchaseOrderAssetContractPurchaseOrderID,
|
||||
PurchaseOrderAssetContractTAssetAttachmentID,
|
||||
PurchaseOrderAssetContractName,
|
||||
PurchaseOrderAssetContractDate,
|
||||
PurchaseOrderAssetContractStartDate,
|
||||
PurchaseOrderAssetContractEndDate,
|
||||
PurchaseOrderAssetContractDuration,
|
||||
PurchaseOrderAssetContractInstallmentNumber,
|
||||
PurchaseOrderAssetContractInstallmentDate,
|
||||
PurchaseOrderAssetContractInstallmentPayAmount,
|
||||
PurchaseOrderAssetContractInstallmentDownPaymentType,
|
||||
PurchaseOrderAssetContractInstallmentDownPayment,
|
||||
PurchaseOrderAssetContractCreatedUserID,
|
||||
PurchaseOrderAssetContractCreated,
|
||||
PurchaseOrderAssetContractLastUpdated,
|
||||
PurchaseOrderAssetContractIsActive
|
||||
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,NOW(),NOW(),'Y')";
|
||||
$que_contract = $this->db->query($sql_contract, [
|
||||
$PurchaseOrderID,
|
||||
$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,
|
||||
$user['M_UserID']
|
||||
]);
|
||||
if (!$que_contract) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] insert into table purchase order asset contract");
|
||||
exit;
|
||||
}
|
||||
|
||||
$this->insertLog(
|
||||
$PurchaseOrderID, 'CREATE', $para, '',
|
||||
[], $user['M_UserID'], 'create purchase order asset'
|
||||
);
|
||||
$this->db->trans_commit();
|
||||
$this->sys_ok("[Success] success save po asset");
|
||||
} catch (Exception $exc) {
|
||||
$msg = $exc->getMessage();
|
||||
$this->sys_error($msg);
|
||||
}
|
||||
}
|
||||
|
||||
public function getUserApproveLevel() {
|
||||
try {
|
||||
if (!$this->isLogin) {
|
||||
@@ -183,4 +418,26 @@ class PurchaseOrderAset extends MY_Controller {
|
||||
$this->sys_error($exc->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private function insertLog($poID, $type, $prm, $dataBefore, $dataAfter, $userID, $desc = '') {
|
||||
$sql = "INSERT INTO acc_one_log.purchase_order_log (
|
||||
PurchaseOrderLogPurchaseOrderID,
|
||||
PurchaseOrderLogType,
|
||||
PurchaseOrderLogPrm,
|
||||
PurchaseOrderLogJSONBefore,
|
||||
PurchaseOrderLogJSONAfter,
|
||||
PurchaseOrderLogCreated,
|
||||
PurchaseOrderLogUserID,
|
||||
PurchaseOrderLogTypeDesc
|
||||
) VALUES (?,?,?,?,?,NOW(),?,?)";
|
||||
$que = $this->db->query($sql, [
|
||||
$poID, $type, json_encode($prm), json_encode($dataBefore),
|
||||
json_encode($dataAfter), $userID, $desc
|
||||
]);
|
||||
if (!$que) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] failed insert into table log PO");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user