feature: payment instruction & cashier case cicilan dan downpayment

This commit is contained in:
2026-07-21 15:21:24 +07:00
parent 64f434cd78
commit e1feaa68a8
9 changed files with 1930 additions and 1388 deletions

View File

@@ -1127,11 +1127,14 @@ class ReceiveItemPOAsset extends MY_Controller
PurchaseOrderSummaryQty as QtyAllPO,
PurchaseOrderSummaryTotal as TotalAllPO,
PurchaseOrderDiscountPercent AS DiscPOPercent,
PurchaseOrderDiscountAmount AS DiscPORupiah
PurchaseOrderDiscountAmount AS DiscPORupiah,
M_ItemItem_CategoryID
FROM receive_order_po_detail
JOIN purchase_order ON ReceiveOrderPoDetailPurchaseOrderID = PurchaseOrderID
JOIN purchase_order_summary ON ReceiveOrderPoDetailPurchaseOrderSummaryID = PurchaseOrderSummaryID
AND PurchaseOrderSummaryIsActive = 'Y'
JOIN m_item ON M_ItemID = ReceiveOrderPoItemID
AND M_ItemIsActive = 'Y'
WHERE ReceiveOrderPoDetailReceiveOrderPoID = ?
AND ReceiveOrderPoDetailIsActive='Y'
GROUP BY ReceiveOrderPoDetailID";
@@ -1268,13 +1271,13 @@ class ReceiveItemPOAsset extends MY_Controller
/* INSERT table jurnal tx item */
$sql_jurnaltx = "INSERT INTO jurnal_tx (
jurnalTxJurnalID,
jurnalTxCoaID,
jurnalTxDescription,
jurnalTxDebit,
jurnalTxCredit,
jurnalTxM_UserID
) VALUES (?,?,?,?,?,?)";
jurnalTxJurnalID,
jurnalTxCoaID,
jurnalTxDescription,
jurnalTxDebit,
jurnalTxCredit,
jurnalTxM_UserID
) VALUES (?,?,?,?,?,?)";
$que_jurnaltx = $this->db->query($sql_jurnaltx, [
$jurnalID,
$coa_asset['Fa_ClassCoaID'],
@@ -1291,14 +1294,14 @@ class ReceiveItemPOAsset extends MY_Controller
/* INSERT table jurnal addon item */
$sql_jurnaladdon = "INSERT INTO jurnal_addon (
jurnalAddOnJurnalID,
jurnalAddOnJurnalTxID,
jurnalAddOnCode,
jurnalAddOnValue,
jurnalAddOnM_ItemID,
jurnalAddOnCreated,
jurnalAddOnCreatedUserID
) VALUES (?,?,'PONUMB',?,?,NOW(),?)";
jurnalAddOnJurnalID,
jurnalAddOnJurnalTxID,
jurnalAddOnCode,
jurnalAddOnValue,
jurnalAddOnM_ItemID,
jurnalAddOnCreated,
jurnalAddOnCreatedUserID
) VALUES (?,?,'PONUMB',?,?,NOW(),?)";
$que_jurnaladdon = $this->db->query($sql_jurnaladdon, [
$jurnalID,
$jurnalTXID,
@@ -1354,7 +1357,7 @@ class ReceiveItemPOAsset extends MY_Controller
throw new Exception("[Error] failed get account diskon", 1);
}
$coa_diskon = $que_coadiskon->row_array();
foreach ($input_diskon as $key => $val) {
foreach ($input_diskon as $idx => $val) {
if (doubleval($val) <= 0.00) {
continue;
}
@@ -1397,10 +1400,199 @@ class ReceiveItemPOAsset extends MY_Controller
$this->db->trans_rollback();
throw new Exception("[Error] save diskon prorate", 1);
}
/* handling table stock */
$sql_cekstock = "SELECT *
FROM stock s
JOIN m_item i ON s.StockItemID = i.M_ItemID
WHERE s.StockItemID = ?
AND s.StockItemUnitID = ?
AND s.StockWarehouseID = ?
AND i.M_ItemItem_CategoryID = ?";
$que_cekstock = $this->db->query($sql_cekstock, [
$elem['ReceiveOrderPoItemID'],
$elem['ReceiveOrderPoItemUnitID'],
$data_ro['ReceiveOrderPoWarehouseID'],
$elem['M_ItemItem_CategoryID']
]);
if (!$que_cekstock) {
$this->db->trans_rollback();
throw new Exception("[Error] failed to check item exist in stock", 1);
}
$stock_exist = $que_cekstock->row_array();
$stock_ID = $stock_exist['StockID'];
$stock_qty_ori = intval($stock_exist['StockQty']);
$stock_price = doubleval($stock_exist['StockItemPrice']);
$stock_qty_end = 0;
if (!empty($stock_exist)) {
$stock_qty_end = $stock_qty_ori + intval($elem['ReceiveOrderPoDetailQty']);
$all_price = ($stock_qty_ori * $stock_price) + (intval($elem['ReceiveOrderPoDetailQty']) * doubleval($elem['ReceiveOrderPoDetailPrice']));
$avg_price = round($all_price / $stock_qty_end, 2);
$sql_update_stock = "UPDATE stock SET
StockItemPrice = ?,
StockQty = ?,
StockLastUpdated = NOW(),
StockUserID = ?
WHERE StockID = ?";
$que_update_stock = $this->db->query($sql_update_stock, [
$avg_price,
$stock_qty_end,
$user['M_UserID'],
$stock_ID
]);
if (!$que_update_stock) {
$this->db->trans_rollback();
throw new Exception("[Error] failed to update stock", 1);
}
} else {
$sql_insert_stock = "INSERT INTO stock (
StockWarehouseAlmariID,
StockWarehouseRackID,
StockWarehouseID,
StockStockNumber,
StockItemID,
StockItemUnitID,
StockItemPrice,
StockQty,
StockLastUpdated,
StockUserID
) VALUES (0,0,?,fn_numbering('SN'),?,?,?,?,NOW(),?)";
$que_insert_stock = $this->db->query($sql_insert_stock, [
$data_ro['ReceiveOrderPoWarehouseID'],
$elem['ReceiveOrderPoItemID'],
$elem['ReceiveOrderPoItemUnitID'],
$elem['ReceiveOrderPoDetailPrice'],
$elem['ReceiveOrderPoDetailQty'],
$user['M_UserID']
]);
if (!$que_insert_stock) {
$this->db->trans_rollback();
throw new Exception("[Error] failed to insert stock", 1);
}
$stock_ID = $this->db->insert_id();
$stock_qty_ori = 0;
$stock_qty_end = intval($elem['ReceiveOrderPoDetailQty']);
}
/* insert stock card */
$sql_stock_card = "INSERT INTO stockcard (
StockCardWarehouseID,
StockCardDatetime,
StockCardItemID,
StockCardItemUnitID,
StockCardReffID,
StockCardStatus,
StockCardBefore,
StockCardIn,
StockCardOut,
StockCardAfter,
StockCardUserID
) VALUES (?, NOW(), ?, ?, ?, 'PRV', ?, ?, 0, ?, ?)";
$que_stock_card = $this->db->query($sql_stock_card, [
$data_ro['ReceiveOrderPoWarehouseID'],
$elem['ReceiveOrderPoItemID'],
$elem['ReceiveOrderPoItemUnitID'],
$stock_ID,
$stock_qty_ori,
$elem['ReceiveOrderPoDetailQty'],
$stock_qty_end,
$user['M_UserID']
]);
if (!$que_stock_card) {
$this->db->trans_rollback();
throw new Exception("[Error] failed to insert stock card", 1);
}
/* insert stock log */
$sql_stock = "SELECT * FROM stock WHERE StockID = ?";
$que_stock = $this->db->query($sql_stock, [$stock_ID]);
if (!$que_stock) {
$this->db->trans_rollback();
throw new Exception("[Error] failed to cek latest stock", 1);
}
$stock_latest = $que_stock->row_array();
$sql_stock_log = "INSERT INTO stocklog (
StockLogWarehouseID,
StockLogDateTime,
StockLogItemID,
StockLogItemUnitID,
StockLogStockNumber,
StockLogReffID,
StockLogStatus,
StockLogQty,
StockLogUserID
) VALUES (?, NOW(), ?, ?, ?, ?, 'PRV', ?, ?)";
$que_stock_log = $this->db->query($sql_stock_log, [
$data_ro['WarehouseID'],
$elem['ReceiveOrderPoItemID'],
$elem['ReceiveOrderPoItemUnitID'],
$stock_latest['StockStockNumber'],
$stock_ID,
$elem['ReceiveOrderPoDetailQty'],
$user['M_UserID']
]);
if (!$que_stock_log) {
$this->db->trans_rollback();
throw new Exception("[Error] failed insert stock log", 1);
}
}
/* handle shipping */
$ship_cost = round(doubleval($data_ro['ReceiveOrderShippingCostAmount']), 2);
if ($ship_cost > 0.00) {
$sql_tx_ship = "INSERT INTO jurnal_tx (
jurnalTxJurnalID,
jurnalTxCoaID,
jurnalTxDescription,
jurnalTxDebit,
jurnalTxCredit,
jurnalTxM_UserID
) SELECT ?, coaID, coaDescription, ?, 0, ?
FROM coa WHERE coaAccountNo = '5320700001' LIMIT 1";
$que_tx_ship = $this->db->query($sql_tx_ship, [$jurnalID, $ship_cost, $user['M_UserID']]);
if (!$que_tx_ship) {
$this->db->trans_rollback();
throw new Exception("[Error] failed insert jurnal shipping", 1);
}
$sql_rec_ship = "INSERT INTO receive_order_po_shipping (
ReceiveOrderPoShippingPurchaseOrderID,
ReceiveOrderPoShippingReceiveOrderPoID,
ReceiveOrderPoShippingAmount,
ReceiveOrderPoShippingStatus,
ReceiveOrderPoShippingIsActive,
ReceiveOrderPoShippingCreatedUserID
) SELECT
PurchaseOrderID,
{$roID},
PurchaseOrderShippingCost,
PurchaseOrderShippingCostStatus,
'Y',
{$user['M_UserID']}
FROM purchase_order
WHERE PurchaseOrderID IN (
SELECT DISTINCT ReceiveOrderPoDetailPurchaseOrderID
FROM receive_order_po
JOIN receive_order_po_detail ON ReceiveOrderPoDetailReceiveOrderPoID = ReceiveOrderPoID
WHERE ReceiveOrderPoID = {$user['M_UserID']}
)
AND PurchaseOrderShippingCost IS NOT NULL
AND PurchaseOrderShippingCost > 0";
$que_rec_ship = $this->db->query($sql_rec_ship, []);
if (!$que_rec_ship) {
$this->db->trans_rollback();
throw new Exception("[Error] failed insert table shipping", 1);
}
}
# INSERT jurnal tx for GRNI #
$total_grni = round($total_debet - ($total_diskonitem + $total_diskonpo), 2);
$total_grni = round($total_debet - ($total_diskonitem + $total_diskonpo), 2) + $ship_cost;
$sql_grni = "INSERT INTO jurnal_tx (
jurnalTxJurnalID,
jurnalTxCoaID,
@@ -1533,10 +1725,11 @@ class ReceiveItemPOAsset extends MY_Controller
SupplierInvoiceGrandTotal,
SupplierInvoiceUnpaid,
SupplierInvoiceNote,
SupplierInvoiceIsInstallment,
SupplierInvoiceReceiveDate,
SupplierInvoiceReceivedBy,
SupplierInvoiceCreatedUserID
) VALUES (?,?,NOW(),?,?,?,?,?,?,?,?,?,?,?,?,NOW(),?,?)";
) VALUES (?,?,NOW(),?,?,?,?,?,?,?,?,?,?,?,?,'Y',NOW(),?,?)";
$que_insert_pi = $this->db->query($sql_insert_pi, [
$num_pi,
$data_ro['ReceiveOrderPoID'],