From 8d8a5e48d5a3d57b3f79cfdb5ed729655e72a205 Mon Sep 17 00:00:00 2001 From: sasadib Date: Wed, 22 Jul 2026 11:43:32 +0700 Subject: [PATCH] feature: serah terima & print barcode --- .../mockup/purchase/faktur/Fakturv4.php | 116 +++++++++++------- .../receive-item-po/ReceiveItemPOAsset.php | 24 ++-- 2 files changed, 83 insertions(+), 57 deletions(-) diff --git a/application/controllers/mockup/purchase/faktur/Fakturv4.php b/application/controllers/mockup/purchase/faktur/Fakturv4.php index 6437caa..d0e4346 100644 --- a/application/controllers/mockup/purchase/faktur/Fakturv4.php +++ b/application/controllers/mockup/purchase/faktur/Fakturv4.php @@ -1635,55 +1635,12 @@ class Fakturv4 extends MY_Controller 0, $kredit ); - if (!$status) { + if (!$status['status']) { $this->sys_error_db($status['msg']); exit; } } else if ($item['M_ItemItem_CategoryID'] == '2') { - if (empty($item['M_ItemM_InventarisGolID'])) { - $this->db->trans_rollback(); - $this->sys_error_db("[Error] item golongan inventaris belum ditentukan"); - exit; - } - - $sql_coainv = "SELECT - CoaMapInventarisHutangCoaID, - CoaMapInventarisHutangCoaNo, - CoaMapInventarisHutangCoaDesc - FROM coa_map_inventaris - WHERE CoaMapInventarisM_InventarisGolID = ? - AND CoaMapInventarisIsActive = 'Y'"; - $que_coainv = $this->db->query($sql_coainv, [$item['M_ItemM_InventarisGolID']]); - if (!$que_coainv) { - $this->db->trans_rollback(); - $this->sys_error_db("[Error] failed to get coa inventaris gol"); - exit; - } - $item_coainv = $que_coainv->row_array(); - if (empty($item_coainv)) { - $this->db->trans_rollback(); - $this->sys_error_db("[Error] item inventaris coa not found"); - exit; - } - - $price = (doubleval($inv['SupplierInvoiceDetailTotal']) - doubleval($inv['SupplierInvoiceDetailDiscountPoProrata'])); - // $taxPPH = doubleval($inv['SupplierInvoiceTaxPercentPph']) * $price / 100; - $taxPPN = doubleval($inv['SupplierInvoiceTaxPercentPpn']) * $price / 100; - - $kredit = round($price + $taxPPN, 2); - - $status = $this->InsertJurnalTx( - $jurnalID, - $item_coainv['CoaMapInventarisHutangCoaID'], - $item_coainv['CoaMapInventarisHutangCoaDesc'], - $user['M_UserID'], - 0, - $kredit - ); - if (!$status) { - $this->sys_error_db($status['msg']); - exit; - } + $this->InsertJurnalTxInventaris($jurnalID, $item, $inv, $user['M_UserID']); } else if ($item['M_ItemItem_CategoryID'] == '3') { $this->InsertJurnalTxAsset($jurnalID, $item['M_ItemID'], $inv, $user['M_UserID']); } else if ($item['M_ItemItem_CategoryID'] == '4') { @@ -1720,6 +1677,71 @@ class Fakturv4 extends MY_Controller } } + private function InsertJurnalTxInventaris($jurnalID, $items, $invoice, $userid) + { + if (empty($items['M_ItemM_InventarisGolID'])) { + $this->db->trans_rollback(); + $this->sys_error_db("[Error] item golongan inventaris belum ditentukan"); + exit; + } + + $sql_coa = "SELECT + COALESCE( + i.M_InventarisItemCoaMappingID, + g.M_InventarisCoaMappingID + ) AS MappingID, + COALESCE( + i.M_InventarisItemCoaMappingCoaHutangID, + g.M_InventarisCoaMappingCoaHutangID + ) AS CoaHutangID, + c.coaDescription AS CoaHutangDesc + FROM (SELECT 1) AS inventory + LEFT JOIN m_inventaris_item_coa_mapping i + ON i.M_InventarisItemCoaMappingM_ItemID = ? + AND i.M_InventarisItemCoaMappingIsActive = 'Y' + LEFT JOIN m_inventaris_coa_mapping g + ON g.M_InventarisCoaMappingM_InventarisGolID = ? + AND g.M_InventarisCoaMappingIsActive = 'Y' + LEFT JOIN coa c + ON c.coaID = COALESCE(i.M_InventarisItemCoaMappingCoaHutangID, g.M_InventarisCoaMappingCoaHutangID) + AND c.coaIsActive = 'Y'"; + $que_coa = $this->db->query($sql_coa, [ + $items['M_ItemID'], + $items['M_ItemM_InventarisGolID'], + ]); + if (!$que_coa) { + $this->db->trans_rollback(); + $this->sys_error_db("[Error] failed query coa hutang inventaris"); + exit; + } + $item_coainv = $que_coa->row_array(); + if (empty($item_coainv['CoaHutangID'])) { + $this->db->trans_rollback(); + $this->sys_error_db("[Error] coa ivnentory item {$items['M_ItemDesc']} not found"); + exit; + } + + $invtotal = doubleval($invoice['SupplierInvoiceDetailTotal']); + $disprorata = doubleval($invoice['SupplierInvoiceDetailDiscountPoProrata']); + $price = $invtotal - $disprorata; + $taxPPN = doubleval($invoice['SupplierInvoiceTaxPercentPpn']) * $price / 100; + $kredit = round($price + $taxPPN, 2); + + $insert = $this->InsertJurnalTx( + $jurnalID, + $item_coainv['CoaHutangID'], + $item_coainv['CoaHutangDesc'], + $userid, + 0, + $kredit + ); + if (!$insert['status']) { + $this->db->trans_rollback(); + $this->sys_error_db($insert['msg']); + exit; + } + } + private function InsertJurnalTxJasa($jurnalID, $itemid, $invoice, $userid) { $sql_coa = "SELECT @@ -1759,7 +1781,7 @@ class Fakturv4 extends MY_Controller 0, $kredit ); - if (!$insert) { + if (!$insert['status']) { $this->db->trans_rollback(); $this->sys_error_db($insert['msg']); exit; @@ -1804,7 +1826,7 @@ class Fakturv4 extends MY_Controller 0, $finalValue ); - if (!$insert) { + if (!$insert['status']) { $this->db->trans_rollback(); $this->sys_error_db($insert['msg']); exit; diff --git a/application/controllers/mockup/receive-item-po/ReceiveItemPOAsset.php b/application/controllers/mockup/receive-item-po/ReceiveItemPOAsset.php index 8489a24..72393c7 100644 --- a/application/controllers/mockup/receive-item-po/ReceiveItemPOAsset.php +++ b/application/controllers/mockup/receive-item-po/ReceiveItemPOAsset.php @@ -351,7 +351,8 @@ class ReceiveItemPOAsset extends MY_Controller PurchaseOrderID, PurchaseOrderNumber, PurchaseOrderAssetContractID, - PurchaseOrderAssetContractName + PurchaseOrderAssetContractName, + ReceiveOrderPoIsHandover FROM receive_order_po JOIN receive_order_po_detail ON ReceiveOrderPoDetailReceiveOrderPoID = ReceiveOrderPoID @@ -847,7 +848,7 @@ class ReceiveItemPOAsset extends MY_Controller if (intval($obj['qty']) > intval($cekReceived['PoItemReceiveQty'])) { $this->db->trans_rollback(); throw new Exception( - "jumlah item {$obj['M_ItemDesc']} yang tesedia sudah berubah, silakan pilih ulang item", + "jumlah item {$obj['M_ItemDesc']} yang tesedia sudah berubah, silakan pilih ulang item" ); } @@ -1288,7 +1289,10 @@ class ReceiveItemPOAsset extends MY_Controller } $periode_jurnal = $que_periode->row_array()['periodeID']; - $sql_typejurnal = "SELECT JurnalTypeID FROM jurnal_type WHERE JurnalTypeCode = ? AND JurnalTypeIsActive = 'Y'"; + $sql_typejurnal = "SELECT JurnalTypeID + FROM jurnal_type + WHERE JurnalTypeCode = ? + AND JurnalTypeIsActive = 'Y'"; $que_typejurnal = $this->db->query($sql_typejurnal, ['AUTOGOODRECEIVE']); if (!$que_typejurnal) { $this->db->trans_rollback(); @@ -1451,12 +1455,12 @@ class ReceiveItemPOAsset extends MY_Controller if (doubleval($elem['DiscPOPercent']) != 0.00) { $diskon_po = (doubleval($data_po['totalAllPricePO']) * doubleval($elem['DiscPOPercent'])) / 100; } - $diskon_proratapo = - ($diskon_po * doubleval($elem['TotalAllPO'])) / doubleval($data_po['totalAllPricePO']); - $diskon_prorata_item = round( - (intval($elem['ReceiveOrderPoDetailQty']) / intval($elem['QtyAllPO'])) * $diskon_proratapo, - 2, - ); + + $besarDiskonPO = ($diskon_po * doubleval($elem['TotalAllPO'])); + $diskon_proratapo = $besarDiskonPO / doubleval($data_po['totalAllPricePO']); + + $ratioQty = (intval($elem['ReceiveOrderPoDetailQty']) / intval($elem['QtyAllPO'])); + $diskon_prorata_item = round($ratioQty * $diskon_proratapo,2); $total_diskonpo = round($total_diskonpo + $diskon_prorata_item, 2); $input_diskon = [$diskon, $diskon_prorata_item]; @@ -1912,7 +1916,7 @@ class ReceiveItemPOAsset extends MY_Controller $user, $param['ruanganID'], 'BNP', - $item['ReceiveOrderPoItemID'], + $item['ReceiveOrderPoItemID'] ); $sql_insert_barcode = "INSERT INTO t_barcode_barang( T_BarcodeBarangReceiveOrderPoID,