feature: receive item order asset & insert jurnal faktur asset
This commit is contained in:
@@ -300,54 +300,66 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
}
|
||||
|
||||
$sql_base = "SELECT DISTINCT
|
||||
ReceiveOrderPoID,
|
||||
ReceiveOrderPoNumber,
|
||||
ReceiveOrderPoIDate,
|
||||
ReceiveOrderPoRefNumber,
|
||||
ReceiveOrderPoNote,
|
||||
ReceiveOrderPoConfirmed,
|
||||
SupplierID,
|
||||
SupplierName,
|
||||
PurchaseOrderID,
|
||||
PurchaseOrderNumber
|
||||
FROM receive_order_po
|
||||
JOIN receive_order_po_detail
|
||||
ON ReceiveOrderPoDetailReceiveOrderPoID = ReceiveOrderPoID
|
||||
AND ReceiveOrderPoIDate BETWEEN DATE(?) AND DATE(?)
|
||||
AND (ReceiveOrderPoConfirmed = ? OR 'X' = ?)
|
||||
AND ReceiveOrderPoNumber LIKE ?
|
||||
AND ReceiveOrderPoDetailIsActive = 'Y'
|
||||
JOIN purchase_order
|
||||
ON ReceiveOrderPoDetailPurchaseOrderID = PurchaseOrderID
|
||||
AND PurchaseOrderItemCategoryID = 3 -- Filter category here
|
||||
JOIN m_branch
|
||||
ON M_BranchCode = ReceiveOrderPoM_BranchCode
|
||||
AND ReceiveOrderPoM_BranchCode = ?
|
||||
JOIN supplier
|
||||
ON ReceiveOrderPoSupplierID = SupplierID
|
||||
WHERE ReceiveOrderPoIsActive = 'Y'
|
||||
ORDER BY ReceiveOrderPoID DESC ";
|
||||
ReceiveOrderPoID,
|
||||
ReceiveOrderPoNumber,
|
||||
ReceiveOrderPoIDate,
|
||||
ReceiveOrderPoRefNumber,
|
||||
ReceiveOrderPoNote,
|
||||
ReceiveOrderPoConfirmed,
|
||||
SupplierID,
|
||||
SupplierName,
|
||||
PurchaseOrderID,
|
||||
PurchaseOrderNumber,
|
||||
PurchaseOrderAssetContractID,
|
||||
PurchaseOrderAssetContractName
|
||||
FROM receive_order_po
|
||||
JOIN receive_order_po_detail
|
||||
ON ReceiveOrderPoDetailReceiveOrderPoID = ReceiveOrderPoID
|
||||
AND ReceiveOrderPoIDate BETWEEN DATE(?) AND DATE(?)
|
||||
AND (ReceiveOrderPoConfirmed = ? OR 'X' = ?)
|
||||
AND ReceiveOrderPoNumber LIKE ?
|
||||
AND ReceiveOrderPoDetailIsActive = 'Y'
|
||||
JOIN purchase_order
|
||||
ON ReceiveOrderPoDetailPurchaseOrderID = PurchaseOrderID
|
||||
AND PurchaseOrderItemCategoryID = 3 -- Filter category here
|
||||
JOIN purchase_order_asset_contract
|
||||
ON PurchaseOrderAssetContractPurchaseOrderID = PurchaseOrderID
|
||||
AND PurchaseOrderAssetContractIsActive = 'Y'
|
||||
JOIN m_branch
|
||||
ON M_BranchCode = ReceiveOrderPoM_BranchCode
|
||||
AND ReceiveOrderPoM_BranchCode = ?
|
||||
JOIN supplier
|
||||
ON ReceiveOrderPoSupplierID = SupplierID
|
||||
WHERE ReceiveOrderPoIsActive = 'Y'
|
||||
ORDER BY ReceiveOrderPoID DESC";
|
||||
|
||||
$sql_data = $sql_base . " LIMIT ? OFFSET ? ";
|
||||
$que_data = $this->db->query($sql_data, [
|
||||
$para['startdate'], $para['enddate'],
|
||||
$confirmed, $confirmed, $keyword,
|
||||
$user['M_BranchCode'], $limit, $offset
|
||||
$para['startdate'],
|
||||
$para['enddate'],
|
||||
$confirmed,
|
||||
$confirmed,
|
||||
$keyword,
|
||||
$user['M_BranchCode'],
|
||||
$limit,
|
||||
$offset
|
||||
]);
|
||||
if (!$que_data) {
|
||||
$this->sys_error_db("[Error] failed to get data receive order");
|
||||
exit;
|
||||
throw new Exception('failed to get data receive order', 1);
|
||||
}
|
||||
$data = $que_data->result_array();
|
||||
|
||||
$sql_total = "SELECT COUNT(*) AS total FROM ($sql_base) AS x";
|
||||
$que_total = $this->db->query($sql_total, [
|
||||
$para['startdate'], $para['enddate'],
|
||||
$confirmed, $confirmed, $keyword, $user['M_BranchCode']
|
||||
$para['startdate'],
|
||||
$para['enddate'],
|
||||
$confirmed,
|
||||
$confirmed,
|
||||
$keyword,
|
||||
$user['M_BranchCode']
|
||||
]);
|
||||
if (!$que_total) {
|
||||
$this->sys_error_db("[Error] failed to get total data receive order");
|
||||
exit;
|
||||
throw new Exception('failed to get total data receive order', 1);
|
||||
}
|
||||
$total = $que_total->row_array()['total'];
|
||||
|
||||
@@ -369,6 +381,149 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
}
|
||||
}
|
||||
|
||||
public function getListAttachment()
|
||||
{
|
||||
try {
|
||||
if (!$this->isLogin) {
|
||||
$this->sys_error("invalid token");
|
||||
exit;
|
||||
}
|
||||
|
||||
$para = $this->sys_input;
|
||||
|
||||
$sql = "SELECT
|
||||
ReceiveOrderPoDocumentID AS attach_id,
|
||||
ReceiveOrderPoDocumentFile AS img_url,
|
||||
ReceiveOrderPoDocumentCreated AS created
|
||||
FROM receive_order_po_document
|
||||
WHERE ReceiveOrderPoDocumentIsActive = 'Y'
|
||||
AND ReceiveOrderPoDocumentReceiveOrderPoID = ?
|
||||
AND ReceiveOrderPoDocumentType = 'aset'";
|
||||
$que = $this->db->query($sql, [$para['roID']]);
|
||||
if (!$que) {
|
||||
$this->sys_error_db("[Error] failed get data attachment");
|
||||
exit;
|
||||
}
|
||||
$data = $que->result_array();
|
||||
|
||||
$this->sys_ok($data);
|
||||
} catch (Exception $exc) {
|
||||
$msg = $exc->getMessage();
|
||||
$this->sys_error($msg);
|
||||
}
|
||||
}
|
||||
|
||||
public function getDetailDataROAsset()
|
||||
{
|
||||
try {
|
||||
if (!$this->isLogin) {
|
||||
$this->sys_error("invalid token");
|
||||
exit;
|
||||
}
|
||||
|
||||
$para = $this->sys_input;
|
||||
|
||||
$sql_header = "SELECT
|
||||
ReceiveOrderPoID,
|
||||
ReceiveOrderPoNumber,
|
||||
ReceiveOrderPoIDate AS date,
|
||||
ReceiveOrderPoSupplierID AS supplier,
|
||||
ReceiveOrderPoRefNumber AS reference,
|
||||
'' AS ponumber,
|
||||
M_BranchID AS branchID,
|
||||
ReceiveOrderPoWarehouseID AS gudangID,
|
||||
ReceiveOrderShippingCostIsPaid AS shippingIsPaid,
|
||||
ReceiveOrderShippingCostAmount AS shipping,
|
||||
ReceiveOrderPoNote AS catatan
|
||||
FROM receive_order_po
|
||||
JOIN m_branch
|
||||
ON M_BranchCode = ReceiveOrderPoM_BranchCode
|
||||
WHERE ReceiveOrderPoID = ?
|
||||
AND ReceiveOrderPoIsActive = 'Y'";
|
||||
$que_header = $this->db->query($sql_header, [$para['roid']]);
|
||||
if (!$que_header) {
|
||||
$this->sys_error_db("[Error] failed get header data RO");
|
||||
exit;
|
||||
}
|
||||
$header = $que_header->row_array();
|
||||
|
||||
$sql_detail = "SELECT
|
||||
M_ItemID,
|
||||
M_ItemCode,
|
||||
M_ItemDesc,
|
||||
ItemUnitID,
|
||||
ItemUnitCode,
|
||||
ItemUnitName,
|
||||
ReceiveOrderPoDetailID,
|
||||
ReceiveOrderPoDetailPurchaseOrderID AS PurchaseOrderID,
|
||||
ReceiveOrderPoDetailPurchaseOrderDetailID AS PODetailID,
|
||||
ReceiveOrderPoDetailPurchaseOrderSummaryID AS POSummaryID,
|
||||
ReceiveOrderPoDetailPoItemReceiveID AS PoItemReceiveID,
|
||||
ReceiveOrderPoDetailQty AS qty,
|
||||
ReceiveOrderPoDetailPrice AS price,
|
||||
PurchaseOrderNumber
|
||||
FROM receive_order_po_detail
|
||||
JOIN purchase_order
|
||||
ON PurchaseOrderID = ReceiveOrderPoDetailPurchaseOrderID
|
||||
JOIN m_item ON M_ItemID = ReceiveOrderPoItemID
|
||||
JOIN itemunit ON ItemUnitID = ReceiveOrderPoItemUnitID
|
||||
WHERE ReceiveOrderPoDetailReceiveOrderPoID = ?
|
||||
AND ReceiveOrderPoDetailIsActive = 'Y'";
|
||||
$que_detail = $this->db->query($sql_detail, [$para['roid']]);
|
||||
if (!$que_detail) {
|
||||
$this->sys_error_db("[Error] failed to get detail data ro");
|
||||
exit;
|
||||
}
|
||||
$detail = $que_detail->result_array();
|
||||
|
||||
$uniquePoNumbers = [];
|
||||
foreach ($detail as $obj) {
|
||||
$poNumber = $obj['PurchaseOrderNumber'];
|
||||
if ($poNumber !== null && $poNumber !== '' && !in_array($poNumber, $uniquePoNumbers, true)) {
|
||||
$uniquePoNumbers[] = $poNumber;
|
||||
}
|
||||
}
|
||||
$header['ponumber'] = implode(', ', $uniquePoNumbers);
|
||||
|
||||
foreach ($detail as $key => $obj) {
|
||||
$sql_inspeksi = "SELECT
|
||||
ReceiveOrderPoInspeksiID AS inspeksiID,
|
||||
ReceiveOrderPoInspeksiReceiveOrderPoDetailID AS roID,
|
||||
ReceiveOrderPoInspeksiQtyPesan AS qty_po,
|
||||
ReceiveOrderPoInspeksiQtyActual AS qty_ro,
|
||||
ReceiveOrderPoInspeksiDatePesan AS date_po,
|
||||
ReceiveOrderPoInspeksiDateActual AS date_ro,
|
||||
ReceiveOrderPoInspeksiKeadaanKemasan AS condt_kemasan,
|
||||
ReceiveOrderPoInspeksiKeadaanKemasanNote AS catatan_kemasan,
|
||||
ReceiveOrderPoInspeksiKondisiPengiriman AS condt_pengiriman,
|
||||
ReceiveOrderPoInspeksiKondisiPengirimanNote AS catatan_kirim,
|
||||
ReceiveOrderPoInspeksiSimpulan AS summary,
|
||||
ReceiveOrderPoInspeksiCatatan AS catatan,
|
||||
ReceiveOrderPoInspeksiStaffPenerimaID AS pemeriksa,
|
||||
ReceiveOrderPoInspeksiPengirim AS pengirim
|
||||
FROM receive_order_po_inspeksi
|
||||
WHERE ReceiveOrderPoInspeksiReceiveOrderPoDetailID = ?
|
||||
AND ReceiveOrderPoInspeksiIsActive = 'Y'";
|
||||
$que_inspeksi = $this->db->query($sql_inspeksi, [
|
||||
$obj['ReceiveOrderPoDetailID']
|
||||
]);
|
||||
if (!$que_inspeksi) {
|
||||
$this->sys_error_db("[Error] failed to get data inspeksi ro");
|
||||
exit;
|
||||
}
|
||||
|
||||
$detail[$key]['inspeksi'] = $que_inspeksi->row_array();
|
||||
}
|
||||
|
||||
$this->sys_ok([
|
||||
"header" => $header,
|
||||
"detail" => $detail
|
||||
]);
|
||||
} catch (Exception $exc) {
|
||||
$this->sys_error($exc->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
## MUTATION ##
|
||||
public function generatePOItemReceive()
|
||||
{
|
||||
@@ -671,6 +826,180 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
}
|
||||
}
|
||||
|
||||
public function editReceivedOrder()
|
||||
{
|
||||
try {
|
||||
if (!$this->isLogin) {
|
||||
throw new Exception('invalid token');
|
||||
}
|
||||
|
||||
$this->db->trans_begin();
|
||||
$param = $this->sys_input;
|
||||
$user = $this->sys_user;
|
||||
|
||||
if (empty($param['ReceiveOrderPoID'])) {
|
||||
throw new Exception('ReceiveOrderPoID is required');
|
||||
}
|
||||
if (!isset($param['detail']) || !is_array($param['detail'])) {
|
||||
throw new Exception('detail is required');
|
||||
}
|
||||
|
||||
$roID = $param['ReceiveOrderPoID'];
|
||||
|
||||
# update receive order header #
|
||||
$sqlHeader = "UPDATE receive_order_po SET
|
||||
ReceiveOrderPoNumber = ?,
|
||||
ReceiveOrderPoSupplierID = ?,
|
||||
ReceiveOrderPoIDate = ?,
|
||||
ReceiveOrderPoWarehouseID = ?,
|
||||
ReceiveOrderPoM_BranchCode = ?,
|
||||
ReceiveOrderPoS_RegionalID = ?,
|
||||
ReceiveOrderShippingCostAmount = ?,
|
||||
ReceiveOrderShippingCostIsPaid = ?,
|
||||
ReceiveOrderPoNote = ?,
|
||||
ReceiveOrderPoRefNumber = ?,
|
||||
ReceiveOrderPoDONumber = ?
|
||||
WHERE ReceiveOrderPoID = ?
|
||||
AND ReceiveOrderPoIsActive = 'Y'";
|
||||
$queHeader = $this->db->query($sqlHeader, [
|
||||
$param['ReceiveOrderPoNumber'],
|
||||
$param['supplier'],
|
||||
$param['date'],
|
||||
$param['gudangID'],
|
||||
$user['M_BranchCode'],
|
||||
$user['S_RegionalID'],
|
||||
$param['shipping'],
|
||||
$param['shippingIsPaid'],
|
||||
$param['catatan'],
|
||||
$param['reference'],
|
||||
$param['reference'],
|
||||
$roID
|
||||
]);
|
||||
if (!$queHeader) {
|
||||
throw new Exception('failed to update table receive order po', 1);
|
||||
}
|
||||
|
||||
# soft delete the existing receive order details #
|
||||
$sqlDetailInactive = "UPDATE receive_order_po_detail SET
|
||||
ReceiveOrderPoDetailIsActive = 'N',
|
||||
ReceiveOrderPoDetailDeletedUserID = ?,
|
||||
ReceiveOrderPoDetailDeleted = NOW()
|
||||
WHERE ReceiveOrderPoDetailReceiveOrderPoID = ?
|
||||
AND ReceiveOrderPoDetailIsActive = 'Y'";
|
||||
$queDetailInactive = $this->db->query($sqlDetailInactive, [
|
||||
$user['M_UserID'],
|
||||
$roID
|
||||
]);
|
||||
if (!$queDetailInactive) {
|
||||
throw new Exception('failed to soft delete receive order po detail', 1);
|
||||
}
|
||||
|
||||
# soft delete the inspections belonging to the existing details #
|
||||
$sqlInspeksiInactive = "UPDATE receive_order_po_inspeksi
|
||||
JOIN receive_order_po_detail
|
||||
ON ReceiveOrderPoDetailID = ReceiveOrderPoInspeksiReceiveOrderPoDetailID
|
||||
SET ReceiveOrderPoInspeksiIsActive = 'N',
|
||||
ReceiveOrderPoInspeksiUserID = ?,
|
||||
ReceiveOrderPoInspeksiDeleted = NOW()
|
||||
WHERE ReceiveOrderPoDetailReceiveOrderPoID = ?
|
||||
AND ReceiveOrderPoInspeksiIsActive = 'Y'";
|
||||
$queInspeksiInactive = $this->db->query($sqlInspeksiInactive, [
|
||||
$user['M_UserID'],
|
||||
$roID
|
||||
]);
|
||||
if (!$queInspeksiInactive) {
|
||||
throw new Exception('failed to soft delete receive order po inspeksi', 1);
|
||||
}
|
||||
|
||||
# re-insert receive order details and their inspection forms #
|
||||
foreach ($param['detail'] as $obj) {
|
||||
if (!isset($obj['inspeksi']) || !is_array($obj['inspeksi'])) {
|
||||
throw new Exception("inspection data is required for item {$obj['M_ItemDesc']}");
|
||||
}
|
||||
|
||||
$sqlDetail = "INSERT INTO receive_order_po_detail (
|
||||
ReceiveOrderPoDetailReceiveOrderPoID,
|
||||
ReceiveOrderPoDetailPurchaseOrderID,
|
||||
ReceiveOrderPoDetailPurchaseOrderSummaryID,
|
||||
ReceiveOrderPoDetailPurchaseOrderDetailID,
|
||||
ReceiveOrderPoDetailPoItemReceiveID,
|
||||
ReceiveOrderPoDetailQty,
|
||||
ReceiveOrderPoDetailPrice,
|
||||
ReceiveOrderPoDetailTotal,
|
||||
ReceiveOrderPoItemID,
|
||||
ReceiveOrderPoItemUnitID,
|
||||
ReceiveOrderPoDetailCreatedUserID
|
||||
) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
|
||||
$queDetail = $this->db->query($sqlDetail, [
|
||||
$roID,
|
||||
$obj['PurchaseOrderID'],
|
||||
$obj['POSummaryID'],
|
||||
$obj['PODetailID'],
|
||||
$obj['PoItemReceiveID'],
|
||||
$obj['qty'],
|
||||
$obj['price'],
|
||||
(doubleval($obj['price']) * intval($obj['qty'])),
|
||||
$obj['M_ItemID'],
|
||||
$obj['ItemUnitID'],
|
||||
$user['M_UserID']
|
||||
]);
|
||||
if (!$queDetail) {
|
||||
throw new Exception('failed to insert table receive order po detail', 1);
|
||||
}
|
||||
$roDetailID = $this->db->insert_id();
|
||||
|
||||
$inspeksi = $obj['inspeksi'];
|
||||
$sqlInspeksi = "INSERT INTO receive_order_po_inspeksi (
|
||||
ReceiveOrderPoInspeksiReceiveOrderPoDetailID,
|
||||
ReceiveOrderPoInspeksiQtyPesan,
|
||||
ReceiveOrderPoInspeksiQtyActual,
|
||||
ReceiveOrderPoInspeksiDatePesan,
|
||||
ReceiveOrderPoInspeksiDateActual,
|
||||
ReceiveOrderPoInspeksiKeadaanKemasan,
|
||||
ReceiveOrderPoInspeksiKeadaanKemasanNote,
|
||||
ReceiveOrderPoInspeksiKondisiPengiriman,
|
||||
ReceiveOrderPoInspeksiKondisiPengirimanNote,
|
||||
ReceiveOrderPoInspeksiSimpulan,
|
||||
ReceiveOrderPoInspeksiCatatan,
|
||||
ReceiveOrderPoInspeksiStaffPenerimaID,
|
||||
ReceiveOrderPoInspeksiPengirim,
|
||||
ReceiveOrderPoInspeksiUserID
|
||||
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
|
||||
$queInspeksi = $this->db->query($sqlInspeksi, [
|
||||
$roDetailID,
|
||||
$inspeksi['qty_po'],
|
||||
$inspeksi['qty_ro'],
|
||||
$inspeksi['date_po'],
|
||||
$inspeksi['date_ro'],
|
||||
$inspeksi['condt_kemasan'],
|
||||
$inspeksi['catatan_kemasan'],
|
||||
$inspeksi['condt_pengiriman'],
|
||||
$inspeksi['catatan_kirim'],
|
||||
$inspeksi['summary'],
|
||||
$inspeksi['catatan'],
|
||||
$inspeksi['pemeriksa'],
|
||||
$inspeksi['pengirim'],
|
||||
$user['M_UserID']
|
||||
]);
|
||||
if (!$queInspeksi) {
|
||||
throw new Exception('failed to insert table receive order po inspeksi', 1);
|
||||
}
|
||||
}
|
||||
|
||||
$this->db->trans_commit();
|
||||
$this->sys_ok('[Success] edit receive order asset');
|
||||
} catch (Exception $e) {
|
||||
$this->db->trans_rollback();
|
||||
$msg = '[Error] ' . $e->getMessage();
|
||||
if ($e->getCode() == 1) {
|
||||
$this->sys_error_db($msg);
|
||||
} else {
|
||||
$this->sys_error($msg);
|
||||
}
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
public function deleteReceiveOrder()
|
||||
{
|
||||
try {
|
||||
@@ -908,8 +1237,8 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
$itemdata = $que_itemdata->row_array();
|
||||
|
||||
/* cek kategori item */
|
||||
if (empty($itemdata['M_ItemItem_CategoryID'])) {
|
||||
$desc = "kategori item {$itemdata['M_ItemDesc']} tidak ditemukan pada ";
|
||||
if (empty($itemdata['M_ItemFa_ClassID'])) {
|
||||
$desc = "FA class {$itemdata['M_ItemDesc']} tidak ditemukan pada ";
|
||||
$desc .= "PO {$elem['PurchaseOrderNumber']}";
|
||||
$this->db->trans_rollback();
|
||||
throw new Exception($desc, 1);
|
||||
@@ -954,8 +1283,7 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
]);
|
||||
if (!$que_jurnaltx) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] failed insert jurnaltx {$itemdata['M_ItemDesc']}");
|
||||
exit;
|
||||
throw new Exception("[Error] failed insert jurnaltx {$itemdata['M_ItemDesc']}", 1);
|
||||
}
|
||||
$jurnalTXID = $this->db->insert_id();
|
||||
|
||||
@@ -978,8 +1306,7 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
]);
|
||||
if (!$que_jurnaladdon) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] failed insert jurnal addon {$itemdata['M_ItemDesc']}");
|
||||
exit;
|
||||
throw new Exception("[Error] failed insert jurnal addon {$itemdata['M_ItemDesc']}", 1);
|
||||
}
|
||||
|
||||
/* INSERT table jurnal tx kredit diskon per item */
|
||||
@@ -999,8 +1326,7 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
$que_qtypo = $this->db->query($sql_qtypo, [$roID]);
|
||||
if (!$que_qtypo) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] get detail qty & price po");
|
||||
exit;
|
||||
throw new Exception("[Error] get detail qty & price po", 1);
|
||||
}
|
||||
$data_po = $que_qtypo->row_array();
|
||||
/* kalkulasi diskon per item */
|
||||
@@ -1023,8 +1349,7 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
$que_coadiskon = $this->db->query($sql_coadiskon, ['2190100001']);
|
||||
if (!$que_coadiskon) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] failed get account diskon");
|
||||
exit;
|
||||
throw new Exception("[Error] failed get account diskon", 1);
|
||||
}
|
||||
$coa_diskon = $que_coadiskon->row_array();
|
||||
foreach ($input_diskon as $key => $val) {
|
||||
@@ -1041,8 +1366,7 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
]);
|
||||
if (!$que_jurnaltx) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] failed insert jurnal tx diskon");
|
||||
exit;
|
||||
throw new Exception("[Error] failed insert jurnal tx diskon", 1);
|
||||
}
|
||||
$jurnalTXID_diskon = $this->db->insert_id();
|
||||
|
||||
@@ -1050,41 +1374,40 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
$jurnalID,
|
||||
$jurnalTXID_diskon,
|
||||
$elem['PurchaseOrderNumber'],
|
||||
$elem['ReceiveOrderPoItemID'],
|
||||
$user['M_UserID']
|
||||
]);
|
||||
if (!$que_jurnaladdon) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] failed insert jurnal addon diskon");
|
||||
exit;
|
||||
throw new Exception("[Error] failed insert jurnal addon diskon", 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* save diskon prorata item */
|
||||
$sql_saveprorate = "UPDATE receive_order_po_detail SET
|
||||
ReceiveOrderPoDetailDiskonPoProrata = ?
|
||||
WHERE ReceiveOrderPoDetailID = ?";
|
||||
ReceiveOrderPoDetailDiskonPoProrata = ?
|
||||
WHERE ReceiveOrderPoDetailID = ?";
|
||||
$que_saveprorate = $this->db->query($sql_saveprorate, [
|
||||
$diskon_prorata_item,
|
||||
$elem['ReceiveOrderPoDetailID']
|
||||
]);
|
||||
if (!$que_saveprorate) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] save diskon prorate");
|
||||
exit;
|
||||
throw new Exception("[Error] save diskon prorate", 1);
|
||||
}
|
||||
}
|
||||
|
||||
# INSERT jurnal tx for GRNI #
|
||||
$total_grni = round($total_debet - ($total_diskonitem + $total_diskonpo), 2);
|
||||
$sql_grni = "INSERT INTO jurnal_tx (
|
||||
jurnalTxJurnalID,
|
||||
jurnalTxCoaID,
|
||||
jurnalTxDescription,
|
||||
jurnalTxDebit,
|
||||
jurnalTxCredit,
|
||||
jurnalTxM_UserID
|
||||
) SELECT ?, coaID, coaDescription, 0, ?, ?
|
||||
FROM coa WHERE coaAccountNo = '2110100030' LIMIT 1";
|
||||
jurnalTxJurnalID,
|
||||
jurnalTxCoaID,
|
||||
jurnalTxDescription,
|
||||
jurnalTxDebit,
|
||||
jurnalTxCredit,
|
||||
jurnalTxM_UserID
|
||||
) SELECT ?, coaID, coaDescription, 0, ?, ?
|
||||
FROM coa WHERE coaAccountNo = '2110100030' LIMIT 1";
|
||||
$que_grni = $this->db->query($sql_grni, [
|
||||
$jurnalID,
|
||||
$total_grni,
|
||||
@@ -1092,19 +1415,18 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
]);
|
||||
if (!$que_grni) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] insert jurnal tx GRNI");
|
||||
exit;
|
||||
throw new Exception('insert jurnal tx GRNI', 1);
|
||||
}
|
||||
$jurnalTXID_GRNI = $this->db->insert_id();
|
||||
|
||||
$sql_addon_grni = "INSERT INTO jurnal_addon (
|
||||
jurnalAddOnJurnalID,
|
||||
jurnalAddOnJurnalTxID,
|
||||
jurnalAddOnCode,
|
||||
jurnalAddOnValue,
|
||||
jurnalAddOnCreated,
|
||||
jurnalAddOnCreatedUserID
|
||||
) VALUES (?,?,'RONUMB',?,NOW(),?)";
|
||||
jurnalAddOnJurnalID,
|
||||
jurnalAddOnJurnalTxID,
|
||||
jurnalAddOnCode,
|
||||
jurnalAddOnValue,
|
||||
jurnalAddOnCreated,
|
||||
jurnalAddOnCreatedUserID
|
||||
) VALUES (?,?,'RONUMB',?,NOW(),?)";
|
||||
$que_addon_grni = $this->db->query($sql_addon_grni, [
|
||||
$jurnalID,
|
||||
$jurnalTXID_GRNI,
|
||||
@@ -1113,12 +1435,11 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
]);
|
||||
if (!$que_addon_grni) {
|
||||
$this->db->trans_rollback();
|
||||
$this->sys_error_db("[Error] insert jurnal addon GRNI");
|
||||
exit;
|
||||
throw new Exception('insert jurnal addon GRNI', 1);
|
||||
}
|
||||
|
||||
// generate purchase invoice
|
||||
// still debatable
|
||||
/* generate purchase invoice */
|
||||
$this->generatePurchaseInvoice($user, $roID, $total_grni, $total_diskonpo);
|
||||
|
||||
$this->db->trans_commit();
|
||||
$this->sys_ok("[Success] order received");
|
||||
@@ -1134,6 +1455,157 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
}
|
||||
}
|
||||
|
||||
private function generatePurchaseInvoice($user, $roID, $grni, $diskonPO)
|
||||
{
|
||||
$num_pi = $this->generateNoLogistik($user, 'PI');
|
||||
|
||||
# prepare data #
|
||||
$sql_dataro = "SELECT DISTINCT
|
||||
receive_order_po.* ,
|
||||
PurchaseOrderID,
|
||||
PurchaseOrderTaxPpnType AS tax_type,
|
||||
PurchaseOrderTaxPercentPpn AS tax_percent,
|
||||
PurchaseOrderTaxAmountPpn AS tax_amount
|
||||
FROM receive_order_po
|
||||
JOIN receive_order_po_detail ON ReceiveOrderPoDetailReceiveOrderPoID = ReceiveOrderPoID
|
||||
AND ReceiveOrderPoDetailIsActive = 'Y'
|
||||
AND ReceiveOrderPoIsActive = 'Y'
|
||||
JOIN purchase_order ON ReceiveOrderPoDetailPurchaseOrderID = PurchaseOrderID
|
||||
WHERE ReceiveOrderPoID = ?";
|
||||
$que_dataro = $this->db->query($sql_dataro, [$roID]);
|
||||
if (!$que_dataro) {
|
||||
$this->db->trans_rollback();
|
||||
throw new Exception('failed get current data for generate PI', 1);
|
||||
}
|
||||
$data_ro = $que_dataro->row_array();
|
||||
|
||||
$sql_detailro = "SELECT
|
||||
receive_order_po_detail.*,
|
||||
M_ItemDesc,
|
||||
PurchaseOrderSummaryDiscountType AS DiscountType,
|
||||
PurchaseOrderSummaryDiscountRupiah AS DiscountRupiah,
|
||||
PurchaseOrderSummaryDiscountPercent AS DiscountPercent,
|
||||
PurchaseOrderSummaryDiscountAmount as DiscountPerItem
|
||||
FROM receive_order_po_detail
|
||||
JOIN m_item ON M_ItemID = ReceiveOrderPoItemID AND M_ItemIsActive = 'Y'
|
||||
JOIN purchase_order_summary ON ReceiveOrderPoDetailPurchaseOrderSummaryID = PurchaseOrderSummaryID
|
||||
WHERE ReceiveOrderPoDetailIsActive = 'Y'
|
||||
AND ReceiveOrderPoDetailReceiveOrderPoID = ?";
|
||||
$que_detailro = $this->db->query($sql_detailro, [$roID]);
|
||||
if (!$que_detailro) {
|
||||
$this->db->trans_rollback();
|
||||
throw new Exception('failed to get data detail ro for generate PI', 1);
|
||||
}
|
||||
$detail_ro = $que_detailro->result_array();
|
||||
|
||||
# INSERT header supplier invoice #
|
||||
$due_date = new DateTime($data_ro['ReceiveOrderPoIDate']);
|
||||
$due_date->add(new DateInterval('P7D'));
|
||||
$due_date = $due_date->format('Y-m-d');
|
||||
|
||||
$subtotal = round(($grni + $diskonPO), 2);
|
||||
|
||||
$donumber = "-";
|
||||
if ($data_ro['ReceiveOrderPoDONumber'] != '') {
|
||||
$donumber = $data_ro['ReceiveOrderPoDONumber'];
|
||||
}
|
||||
|
||||
$sql_insert_pi = "INSERT INTO supplier_invoice (
|
||||
SupplierInvoiceNumber,
|
||||
SupplierInvoiceReceiveOrderPoID,
|
||||
SupplierInvoiceDate,
|
||||
SupplierInvoiceDueDate,
|
||||
SupplierInvoiceSupplierID,
|
||||
SupplierInvoiceRefNumber,
|
||||
SupplierInvoiceDeliveryOrderNumber,
|
||||
SupplierInvoiceSubTotal,
|
||||
SupplierInvoiceDiscountPercent,
|
||||
SupplierInvoiceDiscountAmount,
|
||||
SupplierInvoiceTaxPercentPpn,
|
||||
SupplierInvoiceTaxAmountPpn,
|
||||
SupplierInvoiceGrandTotal,
|
||||
SupplierInvoiceUnpaid,
|
||||
SupplierInvoiceNote,
|
||||
SupplierInvoiceReceiveDate,
|
||||
SupplierInvoiceReceivedBy,
|
||||
SupplierInvoiceCreatedUserID
|
||||
) VALUES (?,?,NOW(),?,?,?,?,?,?,?,?,?,?,?,?,NOW(),?,?)";
|
||||
$que_insert_pi = $this->db->query($sql_insert_pi, [
|
||||
$num_pi,
|
||||
$data_ro['ReceiveOrderPoID'],
|
||||
$due_date,
|
||||
$data_ro['ReceiveOrderPoSupplierID'],
|
||||
$data_ro['ReceiveOrderPoNumber'],
|
||||
$donumber,
|
||||
$subtotal,
|
||||
0.00,
|
||||
$diskonPO,
|
||||
$data_ro['tax_percent'],
|
||||
$data_ro['tax_amount'],
|
||||
$grni,
|
||||
$grni,
|
||||
$data_ro['ReceiveOrderPoNote'],
|
||||
$user['M_UserID'],
|
||||
$user['M_UserID']
|
||||
]);
|
||||
if (!$que_insert_pi) {
|
||||
$this->db->trans_rollback();
|
||||
throw new Exception('failed insert data into table PI', 1);
|
||||
}
|
||||
$Pinvoice_ID = $this->db->insert_id();
|
||||
|
||||
# INSERT supplier invoice detail #
|
||||
$sql_ins_itemPI = "INSERT INTO supplier_invoice_detail (
|
||||
SupplierInvoiceDetailSupplierInvoiceID,
|
||||
SupplierInvoiceDetailPurchaseOrderID,
|
||||
SupplierInvoiceDetailPurchaseOrderSummaryID,
|
||||
SupplierInvoiceDetailReceiveOrderPoID,
|
||||
SupplierInvoiceDetailReceiveOrderPoDetailID,
|
||||
SupplierInvoiceDetailItemID,
|
||||
SupplierInvoiceDetailItemUnitID,
|
||||
SupplierInvoiceDetailDescription,
|
||||
SupplierInvoiceDetailQty,
|
||||
SupplierInvoiceDetailPrice,
|
||||
SupplierInvoiceDetailDiscountPercent,
|
||||
SupplierInvoiceDetailDiscountDiscountRupiah,
|
||||
SupplierInvoiceDetailDiscountDiscountType,
|
||||
SupplierInvoiceDetailDiscountPoProrata,
|
||||
SupplierInvoiceDetailDiscountAmount,
|
||||
SupplierInvoiceDetailTotal,
|
||||
SupplierInvoiceDetailUnpaid,
|
||||
SupplierInvoiceDetailCreatedUserID
|
||||
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
|
||||
foreach ($detail_ro as $key => $elem) {
|
||||
$itemprice = doubleval($elem['ReceiveOrderPoDetailPrice']) - doubleval($elem['DiscountPerItem']);
|
||||
$totalprice = round($itemprice * intval($elem['ReceiveOrderPoDetailQty']), 2);
|
||||
|
||||
$que_ins_itemPI = $this->db->query($sql_ins_itemPI, [
|
||||
$Pinvoice_ID,
|
||||
$elem['ReceiveOrderPoDetailPurchaseOrderID'],
|
||||
$elem['ReceiveOrderPoDetailPurchaseOrderSummaryID'],
|
||||
$elem['ReceiveOrderPoDetailReceiveOrderPoID'],
|
||||
$elem['ReceiveOrderPoDetailID'],
|
||||
$elem['ReceiveOrderPoItemID'],
|
||||
$elem['ReceiveOrderPoItemUnitID'],
|
||||
$elem['M_ItemDesc'],
|
||||
$elem['ReceiveOrderPoDetailQty'],
|
||||
$elem['ReceiveOrderPoDetailPrice'],
|
||||
$elem['DiscountPercent'],
|
||||
$elem['DiscountRupiah'],
|
||||
$elem['DiscountType'],
|
||||
$elem['ReceiveOrderPoDetailDiskonPoProrata'],
|
||||
$elem['DiscountPerItem'],
|
||||
$totalprice,
|
||||
$totalprice,
|
||||
$user['M_UserID']
|
||||
]);
|
||||
if (!$que_ins_itemPI) {
|
||||
$this->db->trans_rollback();
|
||||
throw new Exception('failed insert table detail PI', 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function uploadAttachment()
|
||||
{
|
||||
try {
|
||||
@@ -1169,7 +1641,7 @@ class ReceiveItemPOAsset extends MY_Controller
|
||||
$_FILES['file']['size'] = $_FILES['files']['size'][$i];
|
||||
|
||||
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
|
||||
$new_filename = "PO" . date("YmdHis") . "_" . $para['ponumber'] . "." . $ext;
|
||||
$new_filename = "PO" . date("YmdHis") . "_" . $para['ronumber'] . "." . $ext;
|
||||
$config['file_name'] = $new_filename;
|
||||
$this->upload->initialize($config);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user