feature: serah terima & print barcode

This commit is contained in:
2026-07-22 11:43:32 +07:00
parent 805cb44530
commit 8d8a5e48d5
2 changed files with 83 additions and 57 deletions

View File

@@ -1635,55 +1635,12 @@ class Fakturv4 extends MY_Controller
0, 0,
$kredit $kredit
); );
if (!$status) { if (!$status['status']) {
$this->sys_error_db($status['msg']); $this->sys_error_db($status['msg']);
exit; exit;
} }
} else if ($item['M_ItemItem_CategoryID'] == '2') { } else if ($item['M_ItemItem_CategoryID'] == '2') {
if (empty($item['M_ItemM_InventarisGolID'])) { $this->InsertJurnalTxInventaris($jurnalID, $item, $inv, $user['M_UserID']);
$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;
}
} else if ($item['M_ItemItem_CategoryID'] == '3') { } else if ($item['M_ItemItem_CategoryID'] == '3') {
$this->InsertJurnalTxAsset($jurnalID, $item['M_ItemID'], $inv, $user['M_UserID']); $this->InsertJurnalTxAsset($jurnalID, $item['M_ItemID'], $inv, $user['M_UserID']);
} else if ($item['M_ItemItem_CategoryID'] == '4') { } 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) private function InsertJurnalTxJasa($jurnalID, $itemid, $invoice, $userid)
{ {
$sql_coa = "SELECT $sql_coa = "SELECT
@@ -1759,7 +1781,7 @@ class Fakturv4 extends MY_Controller
0, 0,
$kredit $kredit
); );
if (!$insert) { if (!$insert['status']) {
$this->db->trans_rollback(); $this->db->trans_rollback();
$this->sys_error_db($insert['msg']); $this->sys_error_db($insert['msg']);
exit; exit;
@@ -1804,7 +1826,7 @@ class Fakturv4 extends MY_Controller
0, 0,
$finalValue $finalValue
); );
if (!$insert) { if (!$insert['status']) {
$this->db->trans_rollback(); $this->db->trans_rollback();
$this->sys_error_db($insert['msg']); $this->sys_error_db($insert['msg']);
exit; exit;

View File

@@ -351,7 +351,8 @@ class ReceiveItemPOAsset extends MY_Controller
PurchaseOrderID, PurchaseOrderID,
PurchaseOrderNumber, PurchaseOrderNumber,
PurchaseOrderAssetContractID, PurchaseOrderAssetContractID,
PurchaseOrderAssetContractName PurchaseOrderAssetContractName,
ReceiveOrderPoIsHandover
FROM receive_order_po FROM receive_order_po
JOIN receive_order_po_detail JOIN receive_order_po_detail
ON ReceiveOrderPoDetailReceiveOrderPoID = ReceiveOrderPoID ON ReceiveOrderPoDetailReceiveOrderPoID = ReceiveOrderPoID
@@ -847,7 +848,7 @@ class ReceiveItemPOAsset extends MY_Controller
if (intval($obj['qty']) > intval($cekReceived['PoItemReceiveQty'])) { if (intval($obj['qty']) > intval($cekReceived['PoItemReceiveQty'])) {
$this->db->trans_rollback(); $this->db->trans_rollback();
throw new Exception( 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']; $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']); $que_typejurnal = $this->db->query($sql_typejurnal, ['AUTOGOODRECEIVE']);
if (!$que_typejurnal) { if (!$que_typejurnal) {
$this->db->trans_rollback(); $this->db->trans_rollback();
@@ -1451,12 +1455,12 @@ class ReceiveItemPOAsset extends MY_Controller
if (doubleval($elem['DiscPOPercent']) != 0.00) { if (doubleval($elem['DiscPOPercent']) != 0.00) {
$diskon_po = (doubleval($data_po['totalAllPricePO']) * doubleval($elem['DiscPOPercent'])) / 100; $diskon_po = (doubleval($data_po['totalAllPricePO']) * doubleval($elem['DiscPOPercent'])) / 100;
} }
$diskon_proratapo =
($diskon_po * doubleval($elem['TotalAllPO'])) / doubleval($data_po['totalAllPricePO']); $besarDiskonPO = ($diskon_po * doubleval($elem['TotalAllPO']));
$diskon_prorata_item = round( $diskon_proratapo = $besarDiskonPO / doubleval($data_po['totalAllPricePO']);
(intval($elem['ReceiveOrderPoDetailQty']) / intval($elem['QtyAllPO'])) * $diskon_proratapo,
2, $ratioQty = (intval($elem['ReceiveOrderPoDetailQty']) / intval($elem['QtyAllPO']));
); $diskon_prorata_item = round($ratioQty * $diskon_proratapo,2);
$total_diskonpo = round($total_diskonpo + $diskon_prorata_item, 2); $total_diskonpo = round($total_diskonpo + $diskon_prorata_item, 2);
$input_diskon = [$diskon, $diskon_prorata_item]; $input_diskon = [$diskon, $diskon_prorata_item];
@@ -1912,7 +1916,7 @@ class ReceiveItemPOAsset extends MY_Controller
$user, $user,
$param['ruanganID'], $param['ruanganID'],
'BNP', 'BNP',
$item['ReceiveOrderPoItemID'], $item['ReceiveOrderPoItemID']
); );
$sql_insert_barcode = "INSERT INTO t_barcode_barang( $sql_insert_barcode = "INSERT INTO t_barcode_barang(
T_BarcodeBarangReceiveOrderPoID, T_BarcodeBarangReceiveOrderPoID,