isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $search = ""; if (isset($prm['search'])) { $search = trim($prm["search"]); if ($search != "") { $search = '%' . $prm['search'] . '%'; } else { $search = '%%'; } } $number_limit = 20; $number_offset = 0; if ($prm['current_page'] > 0) { $number_offset = ($prm['current_page'] - 1) * $number_limit; } $sql_count = "SELECT count(*) as total FROM supplier WHERE SupplierIsActive = 'Y' AND (SupplierCode LIKE ? OR SupplierName LIKE ?)"; $qry_count = $this->db->query($sql_count, [$search, $search]); $tot_count = 0; $tot_page = 0; if ($qry_count) { $tot_count = $qry_count->result_array()[0]["total"]; $tot_page = ceil($tot_count / $number_limit); } else { $this->db->trans_rollback(); $this->sys_error_db("supplier count error", $this->db); exit; } $sql = "SELECT SupplierID, SupplierCode, SupplierName, SupplierIsPpn, SupplierIsPph, SupplierPpnPct, SupplierPphPct FROM supplier WHERE SupplierIsActive = 'Y' AND (SupplierCode LIKE ? OR SupplierName LIKE ?) ORDER BY SupplierID DESC LIMIT ? OFFSET ?"; $qry = $this->db->query($sql, [$search, $search, $number_limit, $number_offset]); if ($qry) { $rows = $qry->result_array(); } else { $this->db->trans_rollback(); $this->sys_error_db("supplier list error", $this->db); exit; } $result = array( "total_page" => $tot_page, "total_filter" => $tot_count, "records" => $rows, "sql" => $this->db->last_query() ); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function searchdetail() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; // Get supplier ID from parameters if (!isset($prm['supplier_id'])) { $this->sys_error("Supplier ID is required"); exit; } $supplier_id = $prm['supplier_id']; // Handle search parameter $search = ""; if (isset($prm['search'])) { $search = trim($prm["search"]); if ($search != "") { $search = '%' . $prm['search'] . '%'; } else { $search = '%%'; } } // Pagination setup $number_limit = 20; $number_offset = 0; if ($prm['current_page'] > 0) { $number_offset = ($prm['current_page'] - 1) * $number_limit; } // Count total records $sql_count = "SELECT COUNT(*) as total FROM supplier_price sp JOIN m_item mi ON sp.SupplierPriceM_ItemID = mi.M_ItemID LEFT JOIN itemunit iu ON sp.SupplierPriceItemUnitID = iu.ItemUnitID WHERE sp.SupplierPriceIsActive = 'Y' AND sp.SupplierPriceSupplierID = ? AND (mi.M_ItemCode LIKE ? OR mi.M_ItemDesc LIKE ?)"; $qry_count = $this->db->query($sql_count, [$supplier_id, $search, $search]); $tot_count = 0; $tot_page = 0; if ($qry_count) { $tot_count = $qry_count->result_array()[0]["total"]; $tot_page = ceil($tot_count / $number_limit); } else { $this->db->trans_rollback(); $this->sys_error_db("supplier price count error", $this->db); exit; } // Get detailed records $sql = "SELECT sp.SupplierPriceID, sp.SupplierPriceSupplierID, mi.M_ItemID, mi.M_ItemCode, mi.M_ItemDesc, iu.ItemUnitID, iu.ItemUnitCode, iu.ItemUnitName, sp.SupplierPricePrice, sp.SupplierPriceCreated, sp.SupplierPriceLastUpdated FROM supplier_price sp JOIN m_item mi ON sp.SupplierPriceM_ItemID = mi.M_ItemID LEFT JOIN itemunit iu ON sp.SupplierPriceItemUnitID = iu.ItemUnitID WHERE sp.SupplierPriceIsActive = 'Y' AND sp.SupplierPriceSupplierID = ? AND (mi.M_ItemCode LIKE ? OR mi.M_ItemDesc LIKE ?) ORDER BY sp.SupplierPriceID DESC LIMIT ? OFFSET ?"; $qry = $this->db->query($sql, [$supplier_id, $search, $search, $number_limit, $number_offset]); if ($qry) { $rows = $qry->result_array(); } else { $this->db->trans_rollback(); $this->sys_error_db("supplier price list error", $this->db); exit; } $result = array( "total_page" => $tot_page, "total_filter" => $tot_count, "records" => $rows, "sql" => $this->db->last_query() ); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function save() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $this->db->trans_begin(); $prm = $this->sys_input; $userId = $this->sys_user["M_UserID"]; // Validate required parameters if (!isset($prm['nameSupplier']) || trim($prm['nameSupplier']) == "") { $this->sys_error("Supplier name is required"); exit; } $nameSupplier = ""; if (isset($prm['nameSupplier'])) { $nameSupplier = trim($prm['nameSupplier']); } $isPpn = ""; if (isset($prm['isPpn'])) { $isPpn = trim($prm['isPpn']); } $isPph = ""; if (isset($prm['isPph'])) { $isPph = trim($prm['isPph']); } $PpnPercent = ""; if (isset($prm['PpnPercent'])) { $PpnPercent = trim($prm['PpnPercent']); } $PphPercent = ""; if (isset($prm['PphPercent'])) { $PphPercent = trim($prm['PphPercent']); } $codeSql = "SELECT `fn_numbering`('S') as codeSp"; $exec = $this->db->query($codeSql, []); $codeSupplier = ""; if (!$exec) { $this->db->trans_rollback(); $this->sys_error_db("generate code error", $this->db); exit; } else { $codeSupplier = $exec->result_array()[0]["codeSp"]; } // Check for existing supplier with same name $sql_check = "SELECT COUNT(*) as total FROM supplier WHERE SupplierName = ? AND SupplierIsActive = 'Y'"; $qry_check = $this->db->query($sql_check, [$nameSupplier]); if ($qry_check && $qry_check->result_array()[0]['total'] > 0) { $this->sys_error("Nama supplier sudah ada"); exit; } $sql = "INSERT INTO supplier( SupplierCode, SupplierName, SupplierIsPpn, SupplierIsPph, SupplierPpnPct, SupplierPphPct, SupplierIsActive, SupplierCreatedUserID, SupplierCreated ) VALUES(?,?,?,?,?,?,'Y',?,NOW())"; $qry = $this->db->query($sql, [ $codeSupplier, $nameSupplier, $isPpn, $isPph, $PpnPercent, $PphPercent, $userId ]); if (!$qry) { $this->db->trans_rollback(); $this->sys_error_db("supplier insert error", $this->db); exit; } $this->db->trans_commit(); $newInsert = "SELECT * FROM supplier WHERE SupplierCode = '{$codeSupplier}' AND SupplierIsActive = 'Y'"; $records = $this->db->query($newInsert, [])->result_array(); $this->sys_ok(array( "total" => 1, "records" => $records )); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function update() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $this->db->trans_begin(); $prm = $this->sys_input; $userId = $this->sys_user["M_UserID"]; // Validate required parameters if (!isset($prm['nameSupplier']) || trim($prm['nameSupplier']) == "") { $this->sys_error("Supplier name is required"); exit; } $nameSupplier = ""; if (isset($prm['nameSupplier'])) { $nameSupplier = trim($prm['nameSupplier']); } $isPpn = ""; if (isset($prm['isPpn'])) { $isPpn = trim($prm['isPpn']); } $isPph = ""; if (isset($prm['isPph'])) { $isPph = trim($prm['isPph']); } $PpnPercent = ""; if (isset($prm['PpnPercent'])) { $PpnPercent = trim($prm['PpnPercent']); } $PphPercent = ""; if (isset($prm['PphPercent'])) { $PphPercent = trim($prm['PphPercent']); } $supplier_id = ""; if (isset($prm['supplier_id'])) { $supplier_id = trim($prm['supplier_id']); } $sql = "UPDATE supplier SET SupplierName = ?, SupplierIsPpn = ?, SupplierIsPph = ?, SupplierPpnPct = ?, SupplierPphPct = ?, SupplierLastUpdatedUserID = ?, SupplierLastUpdated = NOW() WHERE SupplierID = ?"; $qry = $this->db->query($sql, [ $nameSupplier, $isPpn, $isPph, $PpnPercent, $PphPercent, $userId, $supplier_id ]); if (!$qry) { $this->db->trans_rollback(); $this->sys_error_db("supplier update error", $this->db); exit; } $this->db->trans_commit(); $newInsert = "SELECT * FROM supplier WHERE SupplierID = {$supplier_id} AND SupplierIsActive = 'Y'"; $records = $this->db->query($newInsert, [])->result_array(); $this->sys_ok(array( "total" => 1, "records" => $records )); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function deletesupplier() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $this->db->trans_begin(); $prm = $this->sys_input; $userId = $this->sys_user["M_UserID"]; $supplier_id = ""; if (isset($prm['supplier_id'])) { $supplier_id = trim($prm['supplier_id']); } $sql = "UPDATE supplier SET SupplierIsActive = 'N', SupplierDeletedUserID = ?, SupplierDeleted = NOW() WHERE SupplierID = ?"; $qry = $this->db->query($sql, [ $userId, $supplier_id ]); if (!$qry) { $this->db->trans_rollback(); $this->sys_error_db("supplier update error", $this->db); exit; } $sql_price = "UPDATE supplier_price SET SupplierPriceIsActive = 'N', SupplierPriceUserID = ?, SupplierPriceLastUpdated = NOW() WHERE SupplierPriceSupplierID = ?"; $qry_price = $this->db->query($sql_price, [ $userId, $supplier_id ]); if (!$qry_price) { $this->db->trans_rollback(); $this->sys_error_db("supplier price update error", $this->db); exit; } $this->db->trans_commit(); $this->sys_ok(array( "total" => 1, "records" => array("xId" => $prm["supplier_id"]) )); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function searchItem() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); } $payload = $this->sys_input; $search = ""; if (isset($payload["search"])) { $search = trim($payload["search"]); if ($search != "") { $search = "%" . $payload["search"] . "%"; } else { $search = "%%"; } } $number_limit = 10; $sql = "SELECT M_ItemID, M_ItemCode, IF(M_ItemDesc = '', '-', M_ItemDesc) AS M_ItemDesc FROM m_item WHERE (M_ItemCode LIKE ? OR M_ItemDesc LIKE ?) ORDER BY M_ItemDesc ASC LIMIT ?"; $qry = $this->db->query($sql, array($search, $search, $number_limit)); if ($qry) { $rows = $qry->result_array(); } else { $this->db->trans_rollback(); $this->sys_error_db("select item error", $this->db); exit; } $result = array( "records" => $rows, "total_filter" => sizeof($rows) ); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function getUnit() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $search = isset($prm["search"]) ? $prm["search"] : ""; $itemID = $prm["itemID"]; $sql = "SELECT ItemUnitID, ItemUnitCode, ItemUnitName, ItemUnitCreated, ItemUnitLastUpdated, ItemUnitIsActive, ItemUnitUserID FROM itemunit JOIN itemunitmap ON ItemUnitMapItemUnitID = ItemUnitID AND ItemUnitMapM_ItemID = {$itemID} AND ItemUnitMapIsActive = 'Y' AND ItemUnitMapIsPurchase = 'Y' WHERE ItemUnitIsActive = 'Y' AND ItemUnitName LIKE '%$search%' ORDER BY ItemUnitName ASC"; $query = $this->db->query($sql); if (!$query) { $this->sys_error_db("item unit list", $this->db); exit; } $rows = $query->result_array(); $result = array( "records" => $rows, "sql" => $this->db->last_query() ); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function saveprice() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $this->db->trans_begin(); $prm = $this->sys_input; $userId = $this->sys_user["M_UserID"]; // Validate required parameters if (!isset($prm['supplier_id']) || !isset($prm['item_id']) || !isset($prm['unit_id']) || !isset($prm['price'])) { $this->sys_error("All fields are required"); exit; } $supplier_id = trim($prm['supplier_id']); $item_id = trim($prm['item_id']); $unit_id = trim($prm['unit_id']); $price = trim($prm['price']); // Check for existing supplier price with same item and unit $sql_check = "SELECT COUNT(*) as total FROM supplier_price WHERE SupplierPriceSupplierID = ? AND SupplierPriceM_ItemID = ? AND SupplierPriceItemUnitID = ? AND SupplierPriceIsActive = 'Y'"; $qry_check = $this->db->query($sql_check, [$supplier_id, $item_id, $unit_id]); if ($qry_check && $qry_check->result_array()[0]['total'] > 0) { $this->sys_error("Price for this item and unit already exists"); exit; } $sql = "INSERT INTO supplier_price( SupplierPriceSupplierID, SupplierPriceM_ItemID, SupplierPriceItemUnitID, SupplierPricePrice, SupplierPriceIsActive, SupplierPriceUserID, SupplierPriceCreated ) VALUES(?,?,?,?,'Y',?,NOW())"; $qry = $this->db->query($sql, [ $supplier_id, $item_id, $unit_id, $price, $userId ]); if (!$qry) { $this->db->trans_rollback(); $this->sys_error_db("supplier price insert error", $this->db); exit; } $this->db->trans_commit(); $newInsert = "SELECT sp.*, mi.M_ItemCode, mi.M_ItemDesc, iu.ItemUnitCode, iu.ItemUnitName FROM supplier_price sp JOIN m_item mi ON sp.SupplierPriceM_ItemID = mi.M_ItemID JOIN itemunit iu ON sp.SupplierPriceItemUnitID = iu.ItemUnitID WHERE sp.SupplierPriceID = LAST_INSERT_ID()"; $records = $this->db->query($newInsert)->result_array(); $this->sys_ok(array( "total" => 1, "records" => $records )); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function updateprice() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $this->db->trans_begin(); $prm = $this->sys_input; $userId = $this->sys_user["M_UserID"]; // Validate required parameters if (!isset($prm['supplier_price_id']) || !isset($prm['item_id']) || !isset($prm['unit_id']) || !isset($prm['price'])) { $this->sys_error("All fields are required"); exit; } $supplier_id = trim($prm['supplier_id']); $supplier_price_id = trim($prm['supplier_price_id']); $item_id = trim($prm['item_id']); $unit_id = trim($prm['unit_id']); $price = trim($prm['price']); // Check for existing supplier price with same item and unit $sql_check = "SELECT COUNT(*) as total FROM supplier_price WHERE SupplierPriceSupplierID = ? AND SupplierPriceM_ItemID = ? AND SupplierPriceItemUnitID = ? AND SupplierPriceIsActive = 'Y' AND SupplierPriceID != ?"; $qry_check = $this->db->query($sql_check, [$supplier_id, $item_id, $unit_id, $supplier_price_id]); if ($qry_check && $qry_check->result_array()[0]['total'] > 0) { $this->sys_error("Price for this item and unit already exists"); exit; } $sql = "UPDATE supplier_price SET SupplierPriceM_ItemID = ?, SupplierPriceItemUnitID = ?, SupplierPricePrice = ?, SupplierPriceUserID = ?, SupplierPriceLastUpdated = NOW() WHERE SupplierPriceID = ?"; $qry = $this->db->query($sql, [ $item_id, $unit_id, $price, $userId, $supplier_price_id ]); if (!$qry) { $this->db->trans_rollback(); $this->sys_error_db("supplier price insert error", $this->db); exit; } $this->db->trans_commit(); $newInsert = "SELECT sp.*, mi.M_ItemCode, mi.M_ItemDesc, iu.ItemUnitCode, iu.ItemUnitName FROM supplier_price sp JOIN m_item mi ON sp.SupplierPriceM_ItemID = mi.M_ItemID JOIN itemunit iu ON sp.SupplierPriceItemUnitID = iu.ItemUnitID WHERE sp.SupplierPriceID = {$supplier_price_id}"; $records = $this->db->query($newInsert)->result_array(); $this->sys_ok(array( "total" => 1, "records" => $records )); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } function deleteprice() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $this->db->trans_begin(); $prm = $this->sys_input; $userId = $this->sys_user["M_UserID"]; // Validate required parameters if (!isset($prm['supplier_price_id'])) { $this->sys_error("All fields are required"); exit; } $supplier_id = trim($prm['supplier_id']); $supplier_price_id = trim($prm['supplier_price_id']); $item_id = trim($prm['item_id']); $unit_id = trim($prm['unit_id']); $price = trim($prm['price']); $sql = "UPDATE supplier_price SET SupplierPriceIsActive = 'N', SupplierPriceUserID = ?, SupplierPriceLastUpdated = NOW() WHERE SupplierPriceID = ?"; $qry = $this->db->query($sql, [ $userId, $supplier_price_id ]); if (!$qry) { $this->db->trans_rollback(); $this->sys_error_db("supplier price delete error", $this->db); exit; } $this->db->trans_commit(); $this->sys_ok(array( "total" => 1, "qry" => $this->db->last_query() )); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } }