28 Commits

Author SHA1 Message Date
33666a2f5f add: inventaris item coa mapping API 2026-07-09 16:30:53 +07:00
b29ba9f225 add: inventaris coa mapping API 2026-07-09 15:47:24 +07:00
c83c42698a delete: empty function 2026-07-09 11:36:32 +07:00
009aff7d44 Merge branch 'po-asset-crud' into develop
# Conflicts:
#	application/controllers/mockup/purchase/order/PurchaseOrder.http
#	application/controllers/mockup/purchase/order/PurchaseOrderAset.php
2026-07-09 11:29:36 +07:00
6dbe0e400b remove workflow add scripts compare file and upload to server 2026-07-09 11:25:16 +07:00
0ea56f09fa add parameter ssh key passphrase to workflow 2026-07-09 11:25:16 +07:00
a6412c9688 add workflow auto update to server 2026-07-09 11:25:16 +07:00
bcb553ea56 add query insert into table stock_inventory in func savehandover receiveitempo inventaris 2026-07-09 11:25:16 +07:00
2874fab71d add api file po asset, api receive item inventaris add insert into table stock_inventaris 2026-07-09 11:25:16 +07:00
752c372c2f add: updateApprovalPO api in purchase order aset 2026-07-09 11:09:44 +07:00
c125289b92 add: getDaftarAttachment api for purchase order asset 2026-07-09 10:39:28 +07:00
fe5e6dd6cb add: uploadAttachment api 2026-07-09 10:39:28 +07:00
5fd6db863a add: getDataKontrakPoAset api 2026-07-09 10:39:28 +07:00
fc9947bce4 add: getDaftarPoAset api 2026-07-09 10:39:28 +07:00
c296d5598b add: deletePoAsset api 2026-07-09 10:39:28 +07:00
5bd8e038fc add: editPoAsset api 2026-07-09 10:39:28 +07:00
8f07a65485 add: createPoAsset api 2026-07-09 10:39:01 +07:00
7e88cf247b add: getDaftarAttachment api for purchase order asset 2026-07-09 10:34:26 +07:00
7af9fb2ca4 add: uploadAttachment api 2026-07-09 10:27:50 +07:00
77fc97e964 add: getDataKontrakPoAset api 2026-07-09 10:16:03 +07:00
b7a00bc242 remove workflow add scripts compare file and upload to server 2026-07-09 10:12:42 +07:00
834f23f26e add: getDaftarPoAset api 2026-07-09 10:11:28 +07:00
dc88589c78 add: deletePoAsset api 2026-07-09 10:04:43 +07:00
3871a680dd add: editPoAsset api 2026-07-09 09:54:26 +07:00
13af691645 add parameter ssh key passphrase to workflow
Some checks failed
Deploy controllers / upload (push) Has been cancelled
2026-07-09 09:51:11 +07:00
775a390bcb add workflow auto update to server
Some checks failed
Deploy controllers / upload (push) Has been cancelled
2026-07-09 09:46:34 +07:00
0d1dcb1b5e add query insert into table stock_inventory in func savehandover receiveitempo inventaris 2026-07-09 08:22:16 +07:00
22719de06f add api file po asset, api receive item inventaris add insert into table stock_inventaris 2026-07-08 17:15:55 +07:00
6 changed files with 1657 additions and 130 deletions

View File

@@ -0,0 +1,113 @@
@token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJNX1VzZXJJRCI6IjM4MCIsIk1fVXNlclVzZXJuYW1lIjoicmVnc2J5IiwiTV9Vc2VyR3JvdXBEYXNoYm9hcmQiOiJvbmUtdWlcL3Rlc3RcL3Z1ZXhcL2FjYy1vbmUtanVybmFsXC8iLCJNX1VzZXJEZWZhdWx0VF9TYW1wbGVTdGF0aW9uSUQiOiIwIiwiTV9TdGFmZk5hbWUiOiJTdGFmZiBSZWdpb25hbCIsImlzX2NvdXJpZXIiOiJOIiwidGltZV9hdXRvbG9nb3V0IjoiMTIwIiwiTV9Vc2VyTG9jYXRpb25JRCI6IjM3IiwiTV9Vc2VyTG9jYXRpb25GbGFnIjoiUiIsIlNfUmVnaW9uYWxOYW1lIjoiU3VyYWJheWEgUmF5YSIsIlNfUmVnaW9uYWxJRCI6IjYiLCJNX0JyYW5jaE5hbWUiOiIiLCJNX0JyYW5jaENvZGUiOiIiLCJNX0JyYW5jaElEIjoiMCIsImxvZ2luTGV2ZWwiOiJyZWdpb25hbCIsIk1fQnJhbmNoQ29tcGFueUlEIjoiMSIsIk1fQnJhbmNoQ29tcGFueU5hbWUiOiJQVCBQUkFNSVRBIiwiaXAiOiIxMzkuMTk1LjEyMi4yMzUiLCJhZ2VudCI6Ik1vemlsbGFcLzUuMCAoWDExOyBMaW51eCB4ODZfNjQ7IHJ2OjEzNy4wKSBHZWNrb1wvMjAxMDAxMDEgRmlyZWZveFwvMTM3LjAiLCJ2ZXJzaW9uIjoidjIiLCJsYXN0LWxvZ2luIjoiMjAyNS0wNi0wNCAxMzoyMDowNSIsIk1fU2F0ZWxsaXRlSUQiOjB9.hm6JtstjaQOzb7oDSXQ-oMWuX_jFQZH-HDr3r3OzPac"
@host = accone.aplikasi.web.id/one-api
###
// create inventaris coa mapping
POST https://{{host}}/map/InventarisCoaMapping/createInvCoaMapping/
Content-Type: application/json
{
"token": {{token}},
"M_InventarisGolID": 1,
"CoaInventarisID": 101,
"CoaHutangID": 102,
"CoaPembelianID": 103,
"CoaBebanPenyusutanID": 104,
"CoaAkumulasiPenyusutanID": 105,
"CoaLabaPelepasanID": 106,
"CoaRugiPelepasanID": 107
}
###
// get inventaris coa mapping by ID
POST https://{{host}}/map/InventarisCoaMapping/getInvCoaMapping/
Content-Type: application/json
{
"token": {{token}},
"M_InventarisCoaMappingID": 1
}
###
// edit inventaris coa mapping
POST https://{{host}}/map/InventarisCoaMapping/editInvCoaMapping/
Content-Type: application/json
{
"token": {{token}},
"M_InventarisCoaMappingID": 1,
"M_InventarisGolID": 2,
"CoaInventarisID": 201,
"CoaHutangID": 202,
"CoaPembelianID": 203,
"CoaBebanPenyusutanID": 204,
"CoaAkumulasiPenyusutanID": 205,
"CoaLabaPelepasanID": 206,
"CoaRugiPelepasanID": 207
}
###
// delete inventaris coa mapping
POST https://{{host}}/map/InventarisCoaMapping/deleteInvCoaMapping/
Content-Type: application/json
{
"token": {{token}},
"M_InventarisCoaMappingID": 1
}
###
// create inventaris item coa mapping
POST https://{{host}}/map/InventarisCoaMapping/createInvItemCoaMapping/
Content-Type: application/json
{
"token": {{token}},
"M_ItemID": 10,
"CoaInventarisID": 201,
"CoaHutangID": 202,
"CoaPembelianID": 203,
"CoaBebanPenyusutanID": 204,
"CoaAkumulasiPenyusutanID": 205,
"CoaLabaPelepasanID": 206,
"CoaRugiPelepasanID": 207
}
###
// get inventaris item coa mapping by ID
POST https://{{host}}/map/InventarisCoaMapping/getInvItemCoaMapping/
Content-Type: application/json
{
"token": {{token}},
"M_InventarisItemCoaMappingID": 1
}
###
// edit inventaris item coa mapping
POST https://{{host}}/map/InventarisCoaMapping/editInvItemCoaMapping/
Content-Type: application/json
{
"token": {{token}},
"M_InventarisItemCoaMappingID": 1,
"M_ItemID": 11,
"CoaInventarisID": 301,
"CoaHutangID": 302,
"CoaPembelianID": 303,
"CoaBebanPenyusutanID": 304,
"CoaAkumulasiPenyusutanID": 305,
"CoaLabaPelepasanID": 306,
"CoaRugiPelepasanID": 307
}
###
// delete inventaris item coa mapping
POST https://{{host}}/map/InventarisCoaMapping/deleteInvItemCoaMapping/
Content-Type: application/json
{
"token": {{token}},
"M_InventarisItemCoaMappingID": 1
}

View File

@@ -0,0 +1,361 @@
<?php
class InventarisCoaMapping extends MY_Controller {
var $db;
public function index() {
echo "Inventaris COA Mapping API";
}
public function __construct()
{
parent::__construct();
}
## MUTATIONS ##
public function createInvCoaMapping() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$para = $this->sys_input;
$user = $this->sys_user;
$sql = "INSERT INTO m_inventaris_coa_mapping (
M_InventarisCoaMappingM_InventarisGolID,
M_InventarisCoaMappingCoaInventarisID,
M_InventarisCoaMappingCoaHutangID,
M_InventarisCoaMappingCoaPembelianID,
M_InventarisCoaMappingCoaBebanPenyusutanID,
M_InventarisCoaMappingCoaAkumulasiPenyusutanID,
M_InventarisCoaMappingCoaLabaPelepasanID,
M_InventarisCoaMappingCoaRugiPelepasanID,
M_InventarisCoaMappingCreatedUserID,
M_InventarisCoaMappingCreated,
M_InventarisCoaMappingLastUpdated
) VALUES (?,?,?,?,?,?,?,?,?,NOW(),NOW())";
$query = $this->db->query($sql, [
$para['M_InventarisGolID'],
$para['CoaInventarisID'],
$para['CoaHutangID'],
$para['CoaPembelianID'],
$para['CoaBebanPenyusutanID'],
$para['CoaAkumulasiPenyusutanID'],
$para['CoaLabaPelepasanID'],
$para['CoaRugiPelepasanID'],
$user['M_UserID']
]);
if (!$query) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into table m_inventaris_coa_mapping");
exit;
}
$insertID = $this->db->insert_id();
$this->db->trans_commit();
$this->sys_ok($insertID);
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
## QUERY ##
public function getInvCoaMapping() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$para = $this->sys_input;
$sql = "SELECT
M_InventarisCoaMappingID,
M_InventarisCoaMappingM_InventarisGolID,
M_InventarisCoaMappingCoaInventarisID,
M_InventarisCoaMappingCoaHutangID,
M_InventarisCoaMappingCoaPembelianID,
M_InventarisCoaMappingCoaBebanPenyusutanID,
M_InventarisCoaMappingCoaAkumulasiPenyusutanID,
M_InventarisCoaMappingCoaLabaPelepasanID,
M_InventarisCoaMappingCoaRugiPelepasanID,
M_InventarisCoaMappingCreatedUserID,
M_InventarisCoaMappingCreated,
M_InventarisCoaMappingLastUpdated
FROM m_inventaris_coa_mapping
WHERE M_InventarisCoaMappingIsActive = 'Y'
AND M_InventarisCoaMappingID = ?";
$query = $this->db->query($sql, [$para['M_InventarisCoaMappingID']]);
if (!$query) {
$this->sys_error_db("[Error] get data m_inventaris_coa_mapping");
exit;
}
$data = $query->row_array();
$this->sys_ok($data);
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
## MUTATIONS ##
public function editInvCoaMapping() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$para = $this->sys_input;
$user = $this->sys_user;
$sql = "UPDATE m_inventaris_coa_mapping SET
M_InventarisCoaMappingM_InventarisGolID = ?,
M_InventarisCoaMappingCoaInventarisID = ?,
M_InventarisCoaMappingCoaHutangID = ?,
M_InventarisCoaMappingCoaPembelianID = ?,
M_InventarisCoaMappingCoaBebanPenyusutanID = ?,
M_InventarisCoaMappingCoaAkumulasiPenyusutanID = ?,
M_InventarisCoaMappingCoaLabaPelepasanID = ?,
M_InventarisCoaMappingCoaRugiPelepasanID = ?,
M_InventarisCoaMappingLastUpdated = NOW()
WHERE M_InventarisCoaMappingIsActive = 'Y'
AND M_InventarisCoaMappingID = ?";
$query = $this->db->query($sql, [
$para['M_InventarisGolID'],
$para['CoaInventarisID'],
$para['CoaHutangID'],
$para['CoaPembelianID'],
$para['CoaBebanPenyusutanID'],
$para['CoaAkumulasiPenyusutanID'],
$para['CoaLabaPelepasanID'],
$para['CoaRugiPelepasanID'],
$para['M_InventarisCoaMappingID']
]);
if (!$query) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update table m_inventaris_coa_mapping");
exit;
}
$this->db->trans_commit();
$this->sys_ok("[Success] update data inventaris coa mapping");
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
public function deleteInvCoaMapping() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$para = $this->sys_input;
$sql = "UPDATE m_inventaris_coa_mapping SET
M_InventarisCoaMappingIsActive = 'N',
M_InventarisCoaMappingLastUpdated = NOW()
WHERE M_InventarisCoaMappingIsActive = 'Y'
AND M_InventarisCoaMappingID = ?";
$query = $this->db->query($sql, [$para['M_InventarisCoaMappingID']]);
if (!$query) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] soft delete data m_inventaris_coa_mapping");
exit;
}
$this->db->trans_commit();
$this->sys_ok("[Success] delete data inventaris coa mapping");
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
## MUTATIONS ITEM ##
public function createInvItemCoaMapping() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$para = $this->sys_input;
$user = $this->sys_user;
$sql = "INSERT INTO m_inventaris_item_coa_mapping (
M_InventarisItemCoaMappingM_ItemID,
M_InventarisItemCoaMappingCoaInventarisID,
M_InventarisItemCoaMappingCoaHutangID,
M_InventarisItemCoaMappingCoaPembelianID,
M_InventarisItemCoaMappingCoaBebanPenyusutanID,
M_InventarisItemCoaMappingCoaAkumulasiPenyusutanID,
M_InventarisItemCoaMappingCoaLabaPelepasanID,
M_InventarisItemCoaMappingCoaRugiPelepasanID,
M_InventarisItemCoaMappingCreatedUserID,
M_InventarisItemCoaMappingCreated,
M_InventarisItemCoaMappingLastUpdated
) VALUES (?,?,?,?,?,?,?,?,?,NOW(),NOW())";
$query = $this->db->query($sql, [
$para['M_ItemID'],
$para['CoaInventarisID'],
$para['CoaHutangID'],
$para['CoaPembelianID'],
$para['CoaBebanPenyusutanID'],
$para['CoaAkumulasiPenyusutanID'],
$para['CoaLabaPelepasanID'],
$para['CoaRugiPelepasanID'],
$user['M_UserID']
]);
if (!$query) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into table m_inventaris_item_coa_mapping");
exit;
}
$insertID = $this->db->insert_id();
$this->db->trans_commit();
$this->sys_ok($insertID);
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
## QUERY ITEM ##
public function getInvItemCoaMapping() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$para = $this->sys_input;
$sql = "SELECT
M_InventarisItemCoaMappingID,
M_InventarisItemCoaMappingM_ItemID,
M_InventarisItemCoaMappingCoaInventarisID,
M_InventarisItemCoaMappingCoaHutangID,
M_InventarisItemCoaMappingCoaPembelianID,
M_InventarisItemCoaMappingCoaBebanPenyusutanID,
M_InventarisItemCoaMappingCoaAkumulasiPenyusutanID,
M_InventarisItemCoaMappingCoaLabaPelepasanID,
M_InventarisItemCoaMappingCoaRugiPelepasanID,
M_InventarisItemCoaMappingCreatedUserID,
M_InventarisItemCoaMappingCreated,
M_InventarisItemCoaMappingLastUpdated
FROM m_inventaris_item_coa_mapping
WHERE M_InventarisItemCoaMappingIsActive = 'Y'
AND M_InventarisItemCoaMappingID = ?";
$query = $this->db->query($sql, [$para['M_InventarisItemCoaMappingID']]);
if (!$query) {
$this->sys_error_db("[Error] get data m_inventaris_item_coa_mapping");
exit;
}
$data = $query->row_array();
$this->sys_ok($data);
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
## MUTATIONS ITEM ##
public function editInvItemCoaMapping() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$para = $this->sys_input;
$user = $this->sys_user;
$sql = "UPDATE m_inventaris_item_coa_mapping SET
M_InventarisItemCoaMappingM_ItemID = ?,
M_InventarisItemCoaMappingCoaInventarisID = ?,
M_InventarisItemCoaMappingCoaHutangID = ?,
M_InventarisItemCoaMappingCoaPembelianID = ?,
M_InventarisItemCoaMappingCoaBebanPenyusutanID = ?,
M_InventarisItemCoaMappingCoaAkumulasiPenyusutanID = ?,
M_InventarisItemCoaMappingCoaLabaPelepasanID = ?,
M_InventarisItemCoaMappingCoaRugiPelepasanID = ?,
M_InventarisItemCoaMappingLastUpdated = NOW()
WHERE M_InventarisItemCoaMappingIsActive = 'Y'
AND M_InventarisItemCoaMappingID = ?";
$query = $this->db->query($sql, [
$para['M_ItemID'],
$para['CoaInventarisID'],
$para['CoaHutangID'],
$para['CoaPembelianID'],
$para['CoaBebanPenyusutanID'],
$para['CoaAkumulasiPenyusutanID'],
$para['CoaLabaPelepasanID'],
$para['CoaRugiPelepasanID'],
$para['M_InventarisItemCoaMappingID']
]);
if (!$query) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update table m_inventaris_item_coa_mapping");
exit;
}
$this->db->trans_commit();
$this->sys_ok("[Success] update data inventaris item coa mapping");
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
public function deleteInvItemCoaMapping() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$para = $this->sys_input;
$sql = "UPDATE m_inventaris_item_coa_mapping SET
M_InventarisItemCoaMappingIsActive = 'N',
M_InventarisItemCoaMappingLastUpdated = NOW()
WHERE M_InventarisItemCoaMappingIsActive = 'Y'
AND M_InventarisItemCoaMappingID = ?";
$query = $this->db->query($sql, [$para['M_InventarisItemCoaMappingID']]);
if (!$query) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] soft delete data m_inventaris_item_coa_mapping");
exit;
}
$this->db->trans_commit();
$this->sys_ok("[Success] delete data inventaris item coa mapping");
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
}

View File

@@ -172,6 +172,91 @@ Content-Type: application/json
"ID": ""
}
###
// upload attachment — requires multipart/form-data with file(s)
// Gunakan REST Client atau Postman. Contoh format:
// POST https://{{host}}/mockup/purchase/order/PurchaseOrderAset/uploadAttachment/
// Content-Type: multipart/form-data; boundary=----boundary
//
// ------boundary
// Content-Disposition: form-data; name="token"
//
// eyJ...
// ------boundary
// Content-Disposition: form-data; name="ponumber"
//
// PO24070001
// ------boundary
// Content-Disposition: form-data; name="poID"
//
// 1
// ------boundary
// Content-Disposition: form-data; name="contractID"
//
// 1
// ------boundary
// Content-Disposition: form-data; name="files"; filename="foto1.jpg"
// Content-Type: image/jpeg
//
// < /path/to/foto1.jpg
// ------boundary
// Content-Disposition: form-data; name="files"; filename="foto2.jpg"
// Content-Type: image/jpeg
//
// < /path/to/foto2.jpg
// ------boundary--
Content-Type: application/json
{
"token": {{token}}
}
###
// listing po asset
POST https://{{host}}/mockup/purchase/order/PurchaseOrderAset/getDaftarPoAset/
Content-Type: application/json
{
"token": {{token}},
"search": "",
"currpage": 1,
"startdate": "2026-01-01",
"enddate": "2026-12-31",
"status": "All"
}
###
// get daftar attachment
POST https://{{host}}/mockup/purchase/order/PurchaseOrderAset/getDaftarAttachment/
Content-Type: application/json
{
"token": {{token}},
"contractID": 1,
"poID": 1
}
###
// update approval PO — verifikasi manager (level 1)
POST https://{{host}}/mockup/purchase/order/PurchaseOrderAset/updateApprovalPO/
Content-Type: application/json
{
"token": {{token}},
"poID": 1,
"approvelevel": "1"
}
###
// get data kontrak po asset
POST https://{{host}}/mockup/purchase/order/PurchaseOrderAset/getDataKontrakPoAset/
Content-Type: application/json
{
"token": {{token}},
"poID": 1
}
###
// create po asset
POST https://{{host}}/mockup/purchase/order/PurchaseOrderAset/createPoAsset/
@@ -281,6 +366,108 @@ Content-Type: application/json
"installmentDownPayment": 5000000
}
###
// edit po asset
POST https://{{host}}/mockup/purchase/order/PurchaseOrderAset/editPoAsset/
Content-Type: application/json
{
"token": {{token}},
"PurchaseOrderID": 1,
"PurchaseOrderAssetContractID": 1,
"podate": "2026-07-09",
"reference": "REF-ASSET-001-UPDATED",
"supplierID": 1,
"typepajak": "percent",
"valuepajak": 11,
"typediskon": "nominal",
"valuediskon": 0,
"catatan": "PO Asset Updated",
"summary": {
"subtotal": 775000000,
"diskon": 0,
"pajak": 85250000,
"total": 860250000
},
"detail": [
{
"M_ItemID": 123,
"ItemUnitID": 1,
"RequestQty": 3,
"SupplierPrice": 75000000,
"TempTotal": 225000000,
"DiskonType": "R",
"DiskonAmount": 0,
"detail": [
{
"PurchaseRequestID": 1,
"PurchaseRequestDetailID": 1,
"PurchaseRequestFlagID": 1,
"M_ItemID": 123,
"ItemUnitID": 1,
"OriginalQty": 3,
"RequestQty": 3,
"SupplierPrice": 75000000
}
]
},
{
"M_ItemID": 124,
"ItemUnitID": 2,
"RequestQty": 5,
"SupplierPrice": 25000000,
"TempTotal": 125000000,
"DiskonType": "R",
"DiskonAmount": 0,
"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
}
]
}
],
"assetAttachmentID": 1,
"contractName": "Kontrak Pengadaan Mesin X - Revisi",
"contractDate": "2026-07-10",
"contractStart": "2026-07-10",
"contractEnd": "2027-10-10",
"contractDuration": 15,
"installmentNumber": 15,
"installmentDate": 5,
"installmentPayAmount": 15000000,
"installmentDownPaymentType": "persen",
"installmentDownPayment": 20
}
###
// delete po asset
POST https://{{host}}/mockup/purchase/order/PurchaseOrderAset/deletePoAsset/
Content-Type: application/json
{
"token": {{token}},
"poID": 1,
"contractID": 1,
"ponumber": "PO24070001"
}
### Test isValidMultiple Warehouse
### Should return True karena UnitRequest = UnitPurchase
GET https://{{host}}/mockup/purchase/order/PurchaseOrder/isValidMultipleWarehouse/

View File

@@ -22,7 +22,7 @@ class PurchaseOrderAset extends MY_Controller {
$sql = "SELECT
SupplierID,
SupplierName
FROM supplier
FROM supplier
WHERE SupplierIsActive = 'Y'";
$que = $this->db->query($sql, []);
if (!$que) {
@@ -46,19 +46,19 @@ class PurchaseOrderAset extends MY_Controller {
$user = $this->sys_user;
$sql = "SELECT
$sql = "SELECT
M_BranchID,
M_BranchCode,
M_BranchName
FROM m_branch
WHERE M_BranchIsActive = 'Y'
FROM m_branch
WHERE M_BranchIsActive = 'Y'
AND M_BranchS_RegionalID = ?";
$que = $this->db->query($sql, [$user['S_RegionalID']]);
if (!$que) {
$this->sys_error_db("[Error] failed get list cabang");
exit;
}
$data = $que->result_array();
$this->sys_ok($data);
} catch (Exception $exc) {
@@ -74,7 +74,7 @@ class PurchaseOrderAset extends MY_Controller {
}
$para = $this->sys_input;
$keyword = "%";
if ($para['search'] != '') {
$keyword .= $para['search'] . "%";
@@ -86,13 +86,13 @@ class PurchaseOrderAset extends MY_Controller {
$offset = ($para['currpage'] - 1) * $limit;
}
$sql = "SELECT
$sql = "SELECT
PurchaseRequestID,
PurchaseRequestNumber,
PurchaseRequestDetailID,
PurchaseRequestFlagID,
PurchaseRequestFlagM_BranchCode AS BranchCode,
PurchaseRequestItemCategoryID AS ItemCategoryID,
PurchaseRequestItemCategoryID AS ItemCategoryID,
PurchaseRequestFlagQtyRest - PurchaseRequestFlagQtyProses AS UnprocessFlagQty,
PurchaseRequestDetailQty AS RequestQty,
PurchaseRequestDetailQty AS OriginalQty,
@@ -114,7 +114,7 @@ class PurchaseOrderAset extends MY_Controller {
AND PurchaseRequestFlagIsActive = 'Y'
JOIN m_item ON M_ItemID = PurchaseRequestDetailM_ItemID
JOIN itemunit ON ItemUnitID = PurchaseRequestDetailItemUnitID
JOIN supplier_price ON SupplierPriceSupplierID = ?
JOIN supplier_price ON SupplierPriceSupplierID = ?
AND SupplierPriceM_ItemID = M_ItemID
AND SupplierPriceItemUnitID = ItemUnitID
AND SupplierPriceIsActive = 'Y'
@@ -122,14 +122,14 @@ class PurchaseOrderAset extends MY_Controller {
AND M_BranchIsActive = 'Y'
WHERE NOT EXISTS (
SELECT 1
FROM purchase_order_detail
FROM purchase_order_detail
JOIN purchase_order ON PurchaseOrderDetailPurchaseOrderID = PurchaseOrderID
AND PurchaseOrderStatus = 'Approved'
AND PurchaseOrderIsActive = 'Y'
AND PurchaseOrderDetailIsActive = 'Y'
WHERE PurchaseOrderDetailPurchaseRequestDetailID = PurchaseRequestDetailID
)";
$sql_data = $sql . " LIMIT ? OFFSET ? ";
$que_data = $this->db->query($sql_data, [
$para['branchcode'], $keyword, $para['supplierID'],
@@ -162,6 +162,304 @@ class PurchaseOrderAset extends MY_Controller {
}
}
public function getDaftarPoAset() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$para = $this->sys_input;
$user = $this->sys_user;
$keyword = "%";
if ($para['search'] != '') {
$keyword .= $para['search'] . "%";
}
$sql_base = "SELECT
PurchaseOrderID,
PurchaseOrderDate,
PurchaseOrderNote,
PurchaseOrderNumber,
PurchaseOrderStatus,
PurchaseOrderRefNumber,
PurchaseOrderGrandTotal,
PurchaseOrderS_RegionalID,
PurchaseOrderApprovedManagerUserID AS verifiedby,
IFNULL(PurchaseOrderApprovedUserID, 0) AS approvedby,
PurchaseOrderAssetContractID,
PurchaseOrderAssetContractName AS contractName,
PurchaseOrderAssetContractStartDate AS contractStart,
PurchaseOrderAssetContractEndDate AS contractEnd,
SupplierID,
SupplierName
FROM purchase_order
JOIN supplier ON SupplierID = PurchaseOrderSupplierID
JOIN purchase_order_asset_contract
ON PurchaseOrderAssetContractPurchaseOrderID = PurchaseOrderID
WHERE PurchaseOrderIsActive = 'Y'
AND PurchaseOrderItemCategoryID = '3'
AND PurchaseOrderS_RegionalID = ?
AND PurchaseOrderDate BETWEEN DATE(?) AND DATE(?)
AND (PurchaseOrderStatus = ? OR 'All' = ?)
AND PurchaseOrderNumber LIKE ?";
$limit = 10;
$offset = 0;
if ($para['currpage'] > 0) {
$offset = ($para['currpage'] - 1) * $limit;
}
$sql_data = $sql_base . " LIMIT ? OFFSET ?";
$que_data = $this->db->query($sql_data, [
$user['S_RegionalID'], $para['startdate'], $para['enddate'],
$para['status'], $para['status'], $keyword, $limit, $offset
]);
if (!$que_data) {
$this->sys_error_db("[Error] failed get data listing PO asset");
exit;
}
$data_services = $que_data->result_array();
$sql_total = "SELECT COUNT(*) AS total FROM ($sql_base) AS x";
$que_total = $this->db->query($sql_total, [
$user['S_RegionalID'], $para['startdate'], $para['enddate'],
$para['status'], $para['status'], $keyword
]);
if (!$que_total) {
$this->sys_error_db("[Error] failed get total data listing PO asset");
exit;
}
$total_services = $que_total->row_array()['total'];
$output = [
"records" => $data_services,
"total" => $total_services
];
$this->sys_ok($output);
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
public function getDaftarAttachment() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$para = $this->sys_input;
$sql = "SELECT
PurchaseOrderAssetAttachmentID AS attach_id,
PurchaseOrderAssetAttachmentName AS img_url,
PurchaseOrderAssetAttachmentCreated AS created
FROM purchase_order_asset_attachment
WHERE PurchaseOrderAssetAttachmentIsActive = 'Y'
AND PurchaseOrderAssetAttachmentContractID = ?
AND PurchaseOrderAssetAttachmentPurchaseOrderID = ?
AND PurchaseOrderAssetAttachmentType = 'order'";
$que = $this->db->query($sql, [
$para['contractID'], $para['poID']
]);
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 getDataKontrakPoAset() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$para = $this->sys_input;
# get data from purchase order detail #
$sql_detail = "SELECT
PurchaseOrderID,
PurchaseRequestID,
PurchaseRequestNumber,
PurchaseOrderDetailPurchaseSummaryID AS PurchaseOrderSummaryID,
PurchaseOrderDetailPurchaseRequestDetailID AS PurchaseRequestDetailID,
PurchaseOrderDetailPurchaseRequestFlagID AS PurchaseRequestFlagID,
PurchaseOrderDetailRequestQty AS OriginalQty,
PurchaseOrderDetailQty AS RequestQty,
PurchaseOrderDetailPrice AS SupplierPrice,
PurchaseOrderDetailTotal,
PurchaseOrderDetailItemID AS M_ItemID,
M_ItemCode,
M_ItemDesc,
PurchaseOrderDetailItemUnitID AS ItemUnitID,
ItemUnitName
FROM purchase_order
JOIN purchase_order_detail ON PurchaseOrderDetailPurchaseOrderID = PurchaseOrderID
AND PurchaseOrderDetailIsActive = 'Y'
JOIN purchase_request ON PurchaseRequestID = PurchaseOrderDetailPurchaseRequestID
JOIN m_item ON M_ItemID = PurchaseOrderDetailItemID
JOIN itemunit ON ItemUnitID = PurchaseOrderDetailItemUnitID
WHERE PurchaseOrderDetailIsActive = 'Y'
AND PurchaseOrderID = ?";
$que_detail = $this->db->query($sql_detail, [$para['poID']]);
if (!$que_detail) {
$this->sys_error_db("[Error] failed get data po detail asset");
exit;
}
$detail_asset = $que_detail->result_array();
# get data from purchase order summary #
$sql_sumry = "SELECT
PurchaseOrderID,
PurchaseOrderSummaryID,
PurchaseOrderSummaryQty AS RequestQty,
PurchaseOrderSummaryPrice AS SupplierPrice,
PurchaseOrderSummaryDiscountRupiah AS DiskonRupiah,
PurchaseOrderSummaryDiscountPercent AS DiskonPercent,
PurchaseOrderSummaryDiscountAmount AS DiskonAmount,
PurchaseOrderSummaryDiscountType AS DiskonType,
(PurchaseOrderSummaryPrice - PurchaseOrderSummaryDiscountAmount) AS EndPrice,
PurchaseOrderSummaryTotal AS TempTotal,
PurchaseOrderSummaryItemID AS M_ItemID,
M_ItemCode,
M_ItemDesc,
PurchaseOrderSummaryItemUnitID AS ItemUnitID,
ItemUnitName
FROM purchase_order
JOIN purchase_order_summary ON PurchaseOrderSummaryPurchaseOrderID = PurchaseOrderID
JOIN m_item ON M_ItemID = PurchaseOrderSummaryItemID
JOIN itemunit ON ItemUnitID = PurchaseOrderSummaryItemUnitID
WHERE PurchaseOrderSummaryIsActive = 'Y'
AND PurchaseOrderID = ?";
$que_sumry = $this->db->query($sql_sumry, [$para['poID']]);
if (!$que_sumry) {
$this->sys_error_db("[Error] failed get data po summary asset");
exit;
}
$data_sumry = $que_sumry->result_array();
# get data from purchase order #
$sql_poasset = "SELECT
PurchaseOrderID,
PurchaseOrderDate AS podate,
PurchaseOrderNote AS catatan,
PurchaseOrderNumber,
PurchaseOrderStatus,
PurchaseOrderRefNumber AS reference,
PurchaseOrderGrandTotal AS grandtotal,
CASE
WHEN PurchaseOrderTaxPpnType = 'P' THEN 'percent'
ELSE 'absolute'
END AS typepajak,
CASE
WHEN PurchaseOrderTaxPpnType = 'P' THEN PurchaseOrderTaxPercentPpn
ELSE PurchaseOrderTaxAmountPpn
END AS valuepajak,
CASE
WHEN PurchaseOrderDiscountPercent > 0.00 THEN 'percent'
ELSE 'absolute'
END AS typediskon,
CASE
WHEN PurchaseOrderDiscountPercent > 0.00 THEN PurchaseOrderDiscountPercent
ELSE PurchaseOrderDiscountAmount
END AS valuediskon,
PurchaseOrderSubTotal AS subtotal,
PurchaseOrderGrandTotal AS grandtotal,
SupplierID AS supplierID,
SupplierName,
PurchaseOrderAssetContractID,
PurchaseOrderAssetContractTAssetAttachmentID AS assetAttachmentID,
PurchaseOrderAssetContractName AS contractName,
PurchaseOrderAssetContractDate AS contractDate,
PurchaseOrderAssetContractStartDate AS contractStart,
PurchaseOrderAssetContractEndDate AS contractEnd,
PurchaseOrderAssetContractDuration AS contractDuration,
PurchaseOrderAssetContractInstallmentNumber AS installmentNumber,
PurchaseOrderAssetContractInstallmentDate AS installmentDate,
PurchaseOrderAssetContractInstallmentPayAmount AS installmentPayAmount,
PurchaseOrderAssetContractInstallmentDownPaymentType AS installmentDownPaymentType,
PurchaseOrderAssetContractInstallmentDownPayment AS installmentDownPayment,
PurchaseOrderApprovedManagerUserID AS verifiedby
FROM purchase_order
JOIN supplier ON SupplierID = PurchaseOrderSupplierID
JOIN purchase_order_asset_contract
ON PurchaseOrderAssetContractPurchaseOrderID = PurchaseOrderID
WHERE PurchaseOrderIsActive = 'Y'
AND PurchaseOrderID = ?";
$que_poasset = $this->db->query($sql_poasset, [$para['poID']]);
if (!$que_poasset) {
$this->sys_error_db("[Error] failed get data from purchase order");
exit;
}
$datapo = $que_poasset->row_array();
# process data output #
/* map detail po to summary */
$grouped_detailpo = array();
foreach ($detail_asset as $obj) {
$idz = $obj['PurchaseOrderSummaryID'];
if (!isset($grouped_detailpo[$idz])) {
$grouped_detailpo[$idz] = array();
}
$grouped_detailpo[$idz][] = $obj;
}
foreach ($data_sumry as $key => $summary) {
$ids = $summary['PurchaseOrderSummaryID'];
if (isset($grouped_detailpo[$ids])) {
$data_sumry[$key]['detail'] = $grouped_detailpo[$ids];
} else {
$data_sumry[$key]['detail'] = array();
}
}
$subtotal = floatval($datapo['subtotal']);
$grandtotal = floatval($datapo['grandtotal']);
$valuediskon = floatval($datapo['valuediskon']);
if ($datapo['typediskon'] == 'percent') {
$valuediskon = round(floatval($datapo['valuediskon']) * $subtotal / 100, 2);
}
$valuepajak = floatval($datapo['valuepajak']);
if ($datapo['typepajak'] == 'percent') {
$price = ($subtotal - $valuediskon);
$valuepajak = round(floatval($datapo['valuepajak']) * $price / 100, 2);
}
$outsummary = [
"subtotal" => $subtotal,
"diskon" => $valuediskon,
"pajak" => $valuepajak,
"total" => $grandtotal
];
/* map summary to purchase order */
$datapo['valuepajak'] = floatval($datapo['valuepajak']);
$datapo['valuediskon'] = floatval($datapo['valuediskon']);
$datapo['detail'] = $data_sumry;
$datapo['summary'] = $outsummary;
$this->sys_ok($datapo);
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
## MUTATIONS ##
public function createPoAsset() {
try {
@@ -183,7 +481,7 @@ class PurchaseOrderAset extends MY_Controller {
$areatype = 'R';
}
$sqlusrdivisi = "SELECT M_UserDivisionDivisionID FROM m_userdivision
$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) {
@@ -332,8 +630,8 @@ class PurchaseOrderAset extends MY_Controller {
}
/* purchase request update flag */
$sql_flag = "UPDATE purchase_request_flag SET
PurchaseRequestFlagQtyProses = ?
$sql_flag = "UPDATE purchase_request_flag SET
PurchaseRequestFlagQtyProses = ?
WHERE PurchaseRequestFlagID = ?";
$que_flag = $this->db->query($sql_flag, [
$obj['RequestQty'], $obj['PurchaseRequestFlagID']
@@ -397,6 +695,479 @@ class PurchaseOrderAset extends MY_Controller {
}
}
public function editPoAsset() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$para = $this->sys_input;
$user = $this->sys_user;
# check tipe diskon dan pajak #
$taxtype = 'R';
$taxpercent = 0;
if ($para['typepajak'] == 'percent') {
$taxtype = 'P';
$taxpercent = floatval($para['valuepajak']);
}
$discpercent = 0;
if ($para['typediskon'] == 'percent') {
$discpercent = floatval($para['valuediskon']);
}
# get data 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']);
# update po header #
$sql_po = "UPDATE purchase_order SET
PurchaseOrderDate = ?,
PurchaseOrderRefNumber = ?,
PurchaseOrderSupplierID = ?,
PurchaseOrderS_RegionalID = ?,
PurchaseOrderTaxPpnType = ?,
PurchaseOrderTaxPercentPpn = ?,
PurchaseOrderDiscountPercent = ?,
PurchaseOrderDiscountAmount = ?,
PurchaseOrderNote = ?,
PurchaseOrderSubTotal = ?,
PurchaseOrderTaxAmountPpn = ?,
PurchaseOrderGrandTotal = ?,
PurchaseOrderLastUpdated = NOW()
WHERE PurchaseOrderID = ?
AND PurchaseOrderIsActive = 'Y'";
$que_po = $this->db->query($sql_po, [
$para['podate'], $para['reference'], $para['supplierID'], $user['S_RegionalID'],
$taxtype, $taxpercent, $discpercent, $summary_diskon, $para['catatan'],
$summary_subtotal, $summary_pajak, $summary_total, $para['PurchaseOrderID']
]);
if (!$que_po) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update header purchase order");
exit;
}
# update purchase_order_asset_contract #
$sql_contract = "UPDATE purchase_order_asset_contract SET
PurchaseOrderAssetContractTAssetAttachmentID = ?,
PurchaseOrderAssetContractName = ?,
PurchaseOrderAssetContractDate = ?,
PurchaseOrderAssetContractStartDate = ?,
PurchaseOrderAssetContractEndDate = ?,
PurchaseOrderAssetContractDuration = ?,
PurchaseOrderAssetContractInstallmentNumber = ?,
PurchaseOrderAssetContractInstallmentDate = ?,
PurchaseOrderAssetContractInstallmentPayAmount = ?,
PurchaseOrderAssetContractInstallmentDownPaymentType = ?,
PurchaseOrderAssetContractInstallmentDownPayment = ?,
PurchaseOrderAssetContractLastUpdated = NOW()
WHERE PurchaseOrderAssetContractID = ?
AND PurchaseOrderAssetContractIsActive = 'Y'";
$que_contract = $this->db->query($sql_contract, [
$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,
$para['PurchaseOrderAssetContractID']
]);
if (!$que_contract) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update purchase order asset contract");
exit;
}
# update status old po summary isActive to 'N' #
$sql_active = "UPDATE purchase_order_summary SET
PurchaseOrderSummaryIsActive = 'N'
WHERE PurchaseOrderSummaryPurchaseOrderID = ?
AND PurchaseOrderSummaryIsActive = 'Y'";
$que_active = $this->db->query($sql_active, [$para['PurchaseOrderID']]);
if (!$que_active) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update status po summary to N");
exit;
}
# insert new po 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, [
$para['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] failed update data purchase order summary");
exit;
}
$PurchaseSummaryID = $this->db->insert_id();
foreach ($obj['detail'] as $key => $value) {
$obj['detail'][$key]['PurchaseSummaryID'] = $PurchaseSummaryID;
}
$item_detail = array_merge($item_detail, $obj['detail']);
}
# update status po detail isActive to 'N' #
$sql_active = "UPDATE purchase_order_detail SET
PurchaseOrderDetailIsActive = 'N'
WHERE PurchaseOrderDetailPurchaseOrderID = ?
AND PurchaseOrderDetailIsActive = 'Y'";
$que_active = $this->db->query($sql_active, [$para['PurchaseOrderID']]);
if (!$que_active) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update status po detail to N");
exit;
}
# insert new po 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, [
$para['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] failed re-insert purchase order detail");
exit;
}
$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] failed update qty proses flag");
exit;
}
}
$this->insertLog(
$para['PurchaseOrderID'], 'UPDATE', $para, '',
[], $user['M_UserID'], 'edit purchase order asset'
);
$this->db->trans_commit();
$this->sys_ok("[success] update purchase order asset");
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
public function deletePoAsset() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$para = $this->sys_input;
$user = $this->sys_user;
$sql_detail = "SELECT
PurchaseOrderDetailPurchaseRequestFlagID,
PurchaseOrderDetailQty
FROM purchase_order_detail
WHERE PurchaseOrderDetailPurchaseOrderID = ?
AND PurchaseOrderDetailIsActive = 'Y'";
$que_detail = $this->db->query($sql_detail, [$para['poID']]);
if (!$que_detail) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed current data purchase order detail asset");
exit;
}
$asset_detail = $que_detail->result_array();
/* reduce qty process in purchase order flag */
foreach ($asset_detail as $key => $obj) {
$sql_updateflag = "UPDATE purchase_request_flag SET
PurchaseRequestFlagQtyProses = PurchaseRequestFlagQtyProses - ?
WHERE PurchaseRequestFlagID = ?";
$que_updateflag = $this->db->query($sql_updateflag, [
$obj['PurchaseOrderDetailQty'],
$obj['PurchaseOrderDetailPurchaseRequestFlagID']
]);
if (!$que_updateflag) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed to update qty po asset");
exit;
}
}
/* soft delete purchase order detail */
$sql_deldetail = "UPDATE purchase_order_detail SET
PurchaseOrderDetailIsActive = 'N',
PurchaseOrderDetailDeleted = NOW(),
PurchaseOrderDetailDeletedUserID = ?
WHERE PurchaseOrderDetailPurchaseOrderID = ?";
$que_deldetail = $this->db->query($sql_deldetail, [
$user['M_UserID'], $para['poID']
]);
if (!$que_deldetail) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed soft delete data purchase order detail");
exit;
}
/* soft delete purchase order summary */
$sql_delsummary = "UPDATE purchase_order_summary SET
PurchaseOrderSummaryIsActive = 'N',
PurchaseOrderSummaryDeleted = NOW(),
PurchaseOrderSummaryDeletedUserID = ?
WHERE PurchaseOrderSummaryPurchaseOrderID = ?";
$que_delsummary = $this->db->query($sql_delsummary, [
$user['M_UserID'], $para['poID']
]);
if (!$que_delsummary) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed soft delete data purchase order summary");
exit;
}
/* soft delete purchase_order_asset_contract */
$sql_delcontract = "UPDATE purchase_order_asset_contract SET
PurchaseOrderAssetContractIsActive = 'N',
PurchaseOrderAssetContractLastUpdated = NOW()
WHERE PurchaseOrderAssetContractID = ?
AND PurchaseOrderAssetContractPurchaseOrderID = ?";
$que_delcontract = $this->db->query($sql_delcontract, [
$para['contractID'], $para['poID']
]);
if (!$que_delcontract) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed soft delete data purchase order asset contract");
exit;
}
/* soft delete purchase order */
$sql_delorder = "UPDATE purchase_order SET
PurchaseOrderIsActive = 'N',
PurchaseOrderDeleted = NOW(),
PurchaseOrderDeletedUserID = ?
WHERE PurchaseOrderID = ?";
$que_delorder = $this->db->query($sql_delorder, [
$user['M_UserID'], $para['poID']
]);
if (!$que_delorder) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed soft delete data purchase order");
exit;
}
$desc = "delete purchase order asset dengan nomor {$para['ponumber']}";
$this->insertLog($para['poID'], 'DELETE', $para, '', [], $user['M_UserID'], $desc);
$this->db->trans_commit();
$this->sys_ok("[Success] {$desc}");
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
// upload file
public function uploadAttachment() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$para = $this->sys_input;
$user = $this->sys_user;
$basepath = "/home/one/project/accone/one-media/order-asset/";
$year = date("Y");
$targetpath = $basepath . $year . "/";
if (!is_dir($targetpath)) {
mkdir($targetpath, 0755, true);
}
$config['upload_path'] = $targetpath;
$config['allowed_types'] = 'jpg|jpeg|png';
$config['max_size'] = '10000';
$count = count($_FILES['files']['name']);
$this->load->library('upload', $config);
for ($i=0; $i < $count; $i++) {
if (!empty($_FILES['files']['name'][$i])) {
$_FILES['file']['name'] = $_FILES['files']['name'][$i];
$_FILES['file']['type'] = $_FILES['files']['type'][$i];
$_FILES['file']['tmp_name'] = $_FILES['files']['tmp_name'][$i];
$_FILES['file']['error'] = $_FILES['files']['error'][$i];
$_FILES['file']['size'] = $_FILES['files']['size'][$i];
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
$new_filename = "PO" . date("YmdHis") . "_" . $para['ponumber'] . "." . $ext;
$config['file_name'] = $new_filename;
$this->upload->initialize($config);
if ($this->upload->do_upload('file')) {
$upload_data = $this->upload->data();
$filename = $upload_data['file_name'];
$sql_insert = "INSERT INTO purchase_order_asset_attachment (
PurchaseOrderAssetAttachmentContractID,
PurchaseOrderAssetAttachmentPurchaseOrderID,
PurchaseOrderAssetAttachmentName,
PurchaseOrderAssetAttachmentType,
PurchaseOrderAssetAttachmentCreated
) VALUES (?,?,?,?,NOW())";
$que_insert = $this->db->query($sql_insert, [
$para['contractID'], $para['poID'], $filename, 'order'
]);
if (!$que_insert) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed insert attachment table purchase order asset attachment");
exit;
}
} else {
$error = $this->upload->display_errors();
$this->db->trans_rollback();
$this->sys_error("[Error] " . $error);
}
}
}
$this->db->trans_commit();
$this->sys_ok("[Success] upload attachment order asset");
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
public function updateApprovalPO() {
try {
if (!$this->isLogin) {
$this->sys_error("invalid token");
exit;
}
$this->db->trans_begin();
$para = $this->sys_input;
$user = $this->sys_user;
$approvelevel = $para['approvelevel'];
/* request purchase order */
if ($approvelevel == '0') {
$sql = "UPDATE purchase_order SET
PurchaseOrderStatus = 'Pending',
PurchaseOrderLastUpdated = NOW()
WHERE PurchaseOrderID = ?
AND PurchaseOrderIsActive = 'Y'";
$que = $this->db->query($sql, [$para['poID']]);
if (!$que) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update table purchase order request");
exit;
}
}
/* verifikasi oleh manager */
if ($approvelevel == '1') {
$sql = "UPDATE purchase_order SET
PurchaseOrderApprovedManagerUserID = ?,
PurchaseOrderLastUpdated = NOW()
WHERE PurchaseOrderID = ?
AND PurchaseOrderIsActive = 'Y'";
$que = $this->db->query($sql, [$user['M_UserID'], $para['poID']]);
if (!$que) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update table purchase order verif");
exit;
}
}
/* approval oleh kepala regional */
if ($approvelevel == '2') {
$sql = "UPDATE purchase_order SET
PurchaseOrderStatus = 'Approved',
PurchaseOrderLastUpdated = NOW(),
PurchaseOrderApprovedUserID = ?
WHERE PurchaseOrderID = ?
AND PurchaseOrderIsActive = 'Y'";
$que = $this->db->query($sql, [$user['M_UserID'], $para['poID']]);
if (!$que) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] failed update table purchase order approve");
exit;
}
}
$this->db->trans_commit();
$this->sys_ok("[Success] success update status PO Asset");
} catch (Exception $exc) {
$msg = $exc->getMessage();
$this->sys_error($msg);
}
}
public function getUserApproveLevel() {
try {
if (!$this->isLogin) {
@@ -405,7 +1176,7 @@ class PurchaseOrderAset extends MY_Controller {
}
$user = $this->sys_user;
$sql = "SELECT M_UserM_ApproveLevelID FROM m_user
$sql = "SELECT M_UserM_ApproveLevelID FROM m_user
WHERE M_UserIsActive = 'Y' AND M_UserID = ? ";
$que = $this->db->query($sql, [$user['M_UserID']]);
if (!$que) {
@@ -440,4 +1211,4 @@ class PurchaseOrderAset extends MY_Controller {
exit;
}
}
}
}

View File

@@ -1514,23 +1514,23 @@ class ReceiveItemPoInventaris extends MY_Controller
# GET DATA RO #
$json_ro_before = $this->getDataROPO($ROID);
$sql_ro = "SELECT
receive_order_po.*,
DATE_FORMAT(ReceiveOrderPoIDate, '%d-%m-%Y') AS formatedDate,
CASE
WHEN WarehouseType = 'B'
THEN CONCAT(WarehouseCode,' ', WarehouseName, ' - ', M_BranchName)
WHEN WarehouseType = 'R'
THEN CONCAT(WarehouseCode,' ', WarehouseName, ' - ', S_RegionalName)
ELSE ''
END WarehouseName,
WarehouseID
FROM receive_order_po
JOIN warehouse ON ReceiveOrderPoWarehouseID = WarehouseID
JOIN s_regional ON WarehouseS_RegionalID = S_RegionalID
AND S_RegionalIsActive = 'Y'
LEFT JOIN m_branch ON WarehouseM_BranchID = M_BranchID
AND M_BranchIsActive = 'Y'
WHERE ReceiveOrderPoID = ?";
receive_order_po.*,
DATE_FORMAT(ReceiveOrderPoIDate, '%d-%m-%Y') AS formatedDate,
CASE
WHEN WarehouseType = 'B'
THEN CONCAT(WarehouseCode,' ', WarehouseName, ' - ', M_BranchName)
WHEN WarehouseType = 'R'
THEN CONCAT(WarehouseCode,' ', WarehouseName, ' - ', S_RegionalName)
ELSE ''
END WarehouseName,
WarehouseID
FROM receive_order_po
JOIN warehouse ON ReceiveOrderPoWarehouseID = WarehouseID
JOIN s_regional ON WarehouseS_RegionalID = S_RegionalID
AND S_RegionalIsActive = 'Y'
LEFT JOIN m_branch ON WarehouseM_BranchID = M_BranchID
AND M_BranchIsActive = 'Y'
WHERE ReceiveOrderPoID = ?";
$que_ro = $this->db->query($sql_ro, [$ROID]);
if (!$que_ro) {
$this->db->trans_rollback();
@@ -1545,23 +1545,23 @@ class ReceiveItemPoInventaris extends MY_Controller
}
$sql_detail_ro = "SELECT
receive_order_po_detail.*,
PurchaseOrderID,
PurchaseOrderNumber,
PurchaseOrderTaxPercentPph,
PurchaseOrderTaxPercentPpn,
PurchaseOrderSummaryDiscountAmount as DiscountPerItem,
PurchaseOrderSummaryQty as QtyAllPO,
PurchaseOrderSummaryTotal as TotalAllPO,
PurchaseOrderDiscountPercent AS DiscPOPercent,
PurchaseOrderDiscountAmount AS DiscPORupiah
FROM receive_order_po_detail
JOIN purchase_order ON ReceiveOrderPoDetailPurchaseOrderID = PurchaseOrderID
JOIN purchase_order_summary ON ReceiveOrderPoDetailPurchaseOrderSummaryID = PurchaseOrderSummaryID
AND PurchaseOrderSummaryIsActive = 'Y'
WHERE ReceiveOrderPoDetailReceiveOrderPoID = ?
AND ReceiveOrderPoDetailIsActive='Y'
GROUP BY ReceiveOrderPoDetailID";
receive_order_po_detail.*,
PurchaseOrderID,
PurchaseOrderNumber,
PurchaseOrderTaxPercentPph,
PurchaseOrderTaxPercentPpn,
PurchaseOrderSummaryDiscountAmount as DiscountPerItem,
PurchaseOrderSummaryQty as QtyAllPO,
PurchaseOrderSummaryTotal as TotalAllPO,
PurchaseOrderDiscountPercent AS DiscPOPercent,
PurchaseOrderDiscountAmount AS DiscPORupiah
FROM receive_order_po_detail
JOIN purchase_order ON ReceiveOrderPoDetailPurchaseOrderID = PurchaseOrderID
JOIN purchase_order_summary ON ReceiveOrderPoDetailPurchaseOrderSummaryID = PurchaseOrderSummaryID
AND PurchaseOrderSummaryIsActive = 'Y'
WHERE ReceiveOrderPoDetailReceiveOrderPoID = ?
AND ReceiveOrderPoDetailIsActive='Y'
GROUP BY ReceiveOrderPoDetailID";
$que_detail_ro = $this->db->query($sql_detail_ro, [$ROID]);
if (!$que_detail_ro) {
$this->db->trans_rollback();
@@ -1572,10 +1572,10 @@ class ReceiveItemPoInventaris extends MY_Controller
# UPDATE STATUS RO #
$sql_update_ro = "UPDATE receive_order_po SET
ReceiveOrderPoConfirmed = 'Y',
ReceiveOrderPoConfirmedDate = NOW(),
ReceiveOrderPoConfirmedUserID = ?
WHERE ReceiveOrderPoID = ?";
ReceiveOrderPoConfirmed = 'Y',
ReceiveOrderPoConfirmedDate = NOW(),
ReceiveOrderPoConfirmedUserID = ?
WHERE ReceiveOrderPoID = ?";
$que_update_ro = $this->db->query($sql_update_ro, [$user['M_UserID'], $ROID]);
if (!$que_update_ro) {
$this->db->trans_rollback();
@@ -1594,8 +1594,8 @@ class ReceiveItemPoInventaris extends MY_Controller
$jurnal_number = $que_jrnl_num->row_array()['numbering'];
$sql_periode = "SELECT periodeID FROM periode
WHERE DATE(NOW()) BETWEEN periodeStartDate AND periodeEndDate
AND periodeIsActive= 'Y' AND periodeIsClosed = 'N'";
WHERE DATE(NOW()) BETWEEN periodeStartDate AND periodeEndDate
AND periodeIsActive= 'Y' AND periodeIsClosed = 'N'";
$que_periode = $this->db->query($sql_periode, []);
if (!$que_periode) {
$this->sys_error_db("[Error] get periode", $this->db);
@@ -1631,17 +1631,17 @@ class ReceiveItemPoInventaris extends MY_Controller
# INSERT JURNAL HEADER #
$sql_head_jurnal = "INSERT INTO jurnal (
jurnalM_BranchCompanyID,
JurnalS_RegionalID,
jurnalM_BranchCode,
jurnalperiodeID,
jurnalNo,
jurnalTitle,
jurnalDescription,
jurnalDate,
jurnalJurnalTypeID,
jurnalM_UserID
) VALUES (?,?,?,?,?,?,?,NOW(),?,?)";
jurnalM_BranchCompanyID,
JurnalS_RegionalID,
jurnalM_BranchCode,
jurnalperiodeID,
jurnalNo,
jurnalTitle,
jurnalDescription,
jurnalDate,
jurnalJurnalTypeID,
jurnalM_UserID
) VALUES (?,?,?,?,?,?,?,NOW(),?,?)";
$que_head_jurnal = $this->db->query($sql_head_jurnal, [
$user['M_BranchCompanyID'],
$user['S_RegionalID'],
@@ -1668,9 +1668,9 @@ class ReceiveItemPoInventaris extends MY_Controller
foreach ($data_detail_ro as $key => $detail) {
# UPDATE PO Summary #
$sql_posummary = "UPDATE purchase_order_summary SET
PurchaseOrderSummaryQtyReceived = PurchaseOrderSummaryQtyReceived + ?
WHERE PurchaseOrderSummaryIsActive = 'Y'
AND PurchaseOrderSummaryID = ?";
PurchaseOrderSummaryQtyReceived = PurchaseOrderSummaryQtyReceived + ?
WHERE PurchaseOrderSummaryIsActive = 'Y'
AND PurchaseOrderSummaryID = ?";
$que_posummary = $this->db->query($sql_posummary, [
intval($detail['ReceiveOrderPoDetailQty']),
$detail['ReceiveOrderPoDetailPurchaseOrderSummaryID']
@@ -1862,8 +1862,8 @@ class ReceiveItemPoInventaris extends MY_Controller
// save diskon prorata
$sql_save_diskon = "UPDATE receive_order_po_detail SET
ReceiveOrderPoDetailDiskonPoProrata = ?
WHERE ReceiveOrderPoDetailID = ?";
ReceiveOrderPoDetailDiskonPoProrata = ?
WHERE ReceiveOrderPoDetailID = ?";
$que_save_diskon = $this->db->query($sql_save_diskon, [
$diskon_prorata_item,
$detail['ReceiveOrderPoDetailID']
@@ -1898,9 +1898,9 @@ class ReceiveItemPoInventaris extends MY_Controller
// update stock based on batch
foreach ($batch_list as $key => $batch) {
$sql_cek_stock = "SELECT *
FROM stock s
JOIN m_item i ON s.StockItemID = i.M_ItemID
WHERE s.StockItemID = ?
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 = ?";
@@ -1946,18 +1946,18 @@ class ReceiveItemPoInventaris extends MY_Controller
}
// insert stockid barcode barang
$sql_update_barcode = "UPDATE t_barcode_barang SET
T_BarcodeBarangStockID = ?
WHERE T_BarcodeBarangReceiveOrderPoDetailID = ?";
$qry_update_barcode = $this->db->query($sql_update_barcode, [
$stock_ID,
$detail['ReceiveOrderPoDetailID']
]);
if (!$qry_update_barcode) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update barcode stockID", $this->db);
exit;
}
// $sql_update_barcode = "UPDATE t_barcode_barang SET
// T_BarcodeBarangStockID = ?
// WHERE T_BarcodeBarangReceiveOrderPoDetailID = ?";
// $qry_update_barcode = $this->db->query($sql_update_barcode, [
// $stock_ID,
// $detail['ReceiveOrderPoDetailID']
// ]);
// if (!$qry_update_barcode) {
// $this->db->trans_rollback();
// $this->sys_error_db("[Error] update barcode stockID", $this->db);
// exit;
// }
} else {
$sql_insert_stock = "INSERT INTO stock (
StockWarehouseAlmariID,
@@ -1990,18 +1990,18 @@ class ReceiveItemPoInventaris extends MY_Controller
$stock_qty_end = intval($batch['qty']);
// insert stockid barcode barang
$sql_update_barcode = "UPDATE t_barcode_barang SET
T_BarcodeBarangStockID = ?
WHERE T_BarcodeBarangReceiveOrderPoDetailID = ?";
$qry_update_barcode = $this->db->query($sql_update_barcode, [
$stockID,
$detail['ReceiveOrderPoDetailID']
]);
if (!$qry_update_barcode) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] update barcode stockID", $this->db);
exit;
}
// $sql_update_barcode = "UPDATE t_barcode_barang SET
// T_BarcodeBarangStockID = ?
// WHERE T_BarcodeBarangReceiveOrderPoDetailID = ?";
// $qry_update_barcode = $this->db->query($sql_update_barcode, [
// $stockID,
// $detail['ReceiveOrderPoDetailID']
// ]);
// if (!$qry_update_barcode) {
// $this->db->trans_rollback();
// $this->sys_error_db("[Error] update barcode stockID", $this->db);
// exit;
// }
}
// insert stock card
@@ -2095,14 +2095,14 @@ class ReceiveItemPoInventaris extends MY_Controller
// insert jurnal tx for GRNI
$total_grni = round($total_debet - ($total_discount_item + $total_discount_po), 2) + $ship_cost;
$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, [$jurnal_ID, $total_grni, $user['M_UserID']]);
if (!$que_grni) {
$this->db->trans_rollback();
@@ -2112,13 +2112,13 @@ class ReceiveItemPoInventaris extends MY_Controller
$grni_jurnal_id = $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, [
$jurnal_ID,
$grni_jurnal_id,
@@ -2344,22 +2344,22 @@ class ReceiveItemPoInventaris extends MY_Controller
$this->db->trans_begin();
$sql_insert = "INSERT INTO receive_order_po_inspeksi (
ReceiveOrderPoInspeksiReceiveOrderPoDetailID,
ReceiveOrderPoInspeksiQtyPesan,
ReceiveOrderPoInspeksiQtyActual,
ReceiveOrderPoInspeksiPricePesan,
ReceiveOrderPoInspeksiPriceActual,
ReceiveOrderPoInspeksiDatePesan,
ReceiveOrderPoInspeksiDateActual,
ReceiveOrderPoInspeksiExpireDate,
ReceiveOrderPoInspeksiKeadaanKemasan,
ReceiveOrderPoInspeksiKondisiPengiriman,
ReceiveOrderPoInspeksiSimpulan,
ReceiveOrderPoInspeksiCatatan,
ReceiveOrderPoInspeksiStaffPenerima,
ReceiveOrderPoInspeksiStaffPengirim,
ReceiveOrderPoInspeksiUserID
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
ReceiveOrderPoInspeksiReceiveOrderPoDetailID,
ReceiveOrderPoInspeksiQtyPesan,
ReceiveOrderPoInspeksiQtyActual,
ReceiveOrderPoInspeksiPricePesan,
ReceiveOrderPoInspeksiPriceActual,
ReceiveOrderPoInspeksiDatePesan,
ReceiveOrderPoInspeksiDateActual,
ReceiveOrderPoInspeksiExpireDate,
ReceiveOrderPoInspeksiKeadaanKemasan,
ReceiveOrderPoInspeksiKondisiPengiriman,
ReceiveOrderPoInspeksiSimpulan,
ReceiveOrderPoInspeksiCatatan,
ReceiveOrderPoInspeksiStaffPenerima,
ReceiveOrderPoInspeksiStaffPengirim,
ReceiveOrderPoInspeksiUserID
) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
$que_insert = $this->db->query($sql_insert, [
$ROdetailID,
$inspeksi['qty_po'],
@@ -2736,6 +2736,47 @@ class ReceiveItemPoInventaris extends MY_Controller
$barcodeID = $this->db->insert_id();
# check if item already in stock #
$sql_cekstock = "SELECT StockID
FROM stock
JOIN warehouse ON WarehouseID = StockWarehouseID
AND WarehouseIsActive = 'Y'
WHERE WarehouseM_BranchID = ?
AND StockItemID = ?
AND StockItemUnitID = ?";
$que_cekstock = $this->db->query($sql_cekstock, [
$user['M_BranchID'],
$item['ReceiveOrderPoItemID'],
$item['ReceiveOrderPoItemUnitID'],
]);
if (!$que_cekstock) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] query cek stock");
exit;
}
$stockID = $que_cekstock->row_array()['StockID'];
# insert stock inventaris #
$sql_stockinventaris = "INSERT INTO stock_inventory (
StockInventoryStockID,
StockInventoryRuanganID,
StockInventoryBarcode,
StockInventoryBranchID,
StockInventoryCreatedUserID
) VALUES (?,?,?,?,?)";
$que_stockinventaris = $this->db->query($sql_stockinventaris, [
$stockID,
$param['ruanganID'],
$noBarcode,
$user['M_BranchID'],
$user['M_UserID']
]);
if (!$que_stockinventaris) {
$this->db->trans_rollback();
$this->sys_error_db("[Error] insert into table stock inventaris");
exit;
}
# insert each inventory handover detail #
$sql_insert_handover_detail = "INSERT INTO asset_handover_detail(
AssetHandoverDetailAssetHandoverID,

54
scripts/deploy-controllers.sh Executable file
View File

@@ -0,0 +1,54 @@
#!/usr/bin/env bash
set -euo pipefail
REMOTE_HOST="accone.aplikasi.web.id"
LOCAL_PATH="application/controllers/"
REMOTE_PATH="/home/one/project/accone/one-api/application/controllers/"
cd "$(dirname "$0")/.."
if ! command -v rsync >/dev/null 2>&1; then
echo "rsync is required but was not found in PATH." >&2
exit 1
fi
if ! command -v ssh >/dev/null 2>&1; then
echo "ssh is required but was not found in PATH." >&2
exit 1
fi
if ! command -v awk >/dev/null 2>&1; then
echo "awk is required but was not found in PATH." >&2
exit 1
fi
usage() {
echo "Usage: $0 <test|sync> [remote_user]" >&2
echo "Examples:" >&2
echo " $0 test" >&2
echo " $0 sync" >&2
echo " $0 test one" >&2
}
COMMAND="${1:-}"
REMOTE_USER="${2:-one}"
REMOTE="${REMOTE_USER}@${REMOTE_HOST}"
case "$COMMAND" in
test)
echo "Checking SSH connection to ${REMOTE}..."
ssh -o ConnectTimeout=10 "$REMOTE" "test -d '$REMOTE_PATH'"
echo
echo "Files/folders that would be uploaded:"
rsync -rzcin --out-format="%i %n%L" "$LOCAL_PATH" "${REMOTE}:${REMOTE_PATH}" \
| awk '$1 ~ /^</ || $1 ~ /^cd/ { print }'
;;
sync)
rsync -rzcv "$LOCAL_PATH" "${REMOTE}:${REMOTE_PATH}"
;;
*)
usage
exit 1
;;
esac