Files
BE_IBL/application/controllers/inventory/requestmutasiv2/Mutation.php
2026-04-15 15:23:57 +07:00

1433 lines
60 KiB
PHP

<?php
class Mutation extends MY_Controller
{
function __construct()
{
parent::__construct();
$this->db_inventory = $this->load->database("inventory", true);
$this->db_inventory_log = $this->load->database('inventory_log', true);
$this->db_onex = 'one_aditya';
}
function search()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$search = "%%";
if (isset($prm['search']) && trim($prm["search"]) != '') {
$search = trim($prm["search"]);
$search = '%' . $prm['search'] . '%';
}
$filter_company_address = '';
if (isset($prm['to_company_addresses']) && intval($prm['to_company_addresses']) > 0) {
$filter_company_address = ' AND MutasiToCompanyAddressID = '.$prm['to_company_addresses'];
}
$filter_status = '';
if (isset($prm['status']) && $prm['status'] != 'A') {
$filter_status = " AND MutasiStatus = '{$prm['status']}'";
}
$order_by = "MutasiNumber";
if (isset($prm['order_by'])) {
$order_by = trim($prm["order_by"]);
}
$order_type = "asc";
if (isset($prm['order_type'])) {
$order_type = trim($prm["order_type"]);
}
$order = $order_by.' '.$order_type;
$perpage = 10;
$offset = ($prm['current_page'] - 1) * $perpage ;
$sql = "SELECT COUNT(*) as total FROM
(
SELECT MutasiID as id
FROM `mutasi`
JOIN `companyaddress` ON MutasiToCompanyAddressID = CompanyAddressID $filter_company_address
WHERE
MutasiIsActive = 'Y' AND MutasiType = 'T' AND (DATE(MutasiDate) BETWEEN ? AND ?) AND
( MutasiNumber like ? ) $filter_status
) x";
$qry = $this->db_inventory->query($sql,array($prm['start_date'],$prm['end_date'],$search));
$tot_count = 0;
$tot_page = 0;
if ($qry) {
$tot_count = $qry->row()->total;
$tot_page = ceil($tot_count/$perpage);
} else {
//echo $this->db_inventory->last_query();
$this->sys_error_db("purchase order count error", $this->db_inventory->last_query());
exit;
}
$rows = array();
$sql = "SELECT MutasiID as id,
MutasiStatus as status_pengiriman,
MutasiNumber as code,
DATE(MutasiDate) as mutation_date,
MutasiFromCompanyAddressID as from_company_address_id,
fromcompanyaddress.CompanyAddressLabel as from_company_address_name,
fromcompanyaddress.CompanyAddressDescription as from_company_address_description,
MutasiToCompanyAddressID as to_company_address_id,
tocompanyaddress.CompanyAddressLabel as to_company_address_name,
tocompanyaddress.CompanyAddressDescription as to_company_address_description,
M_BranchName as branch_name,
ExpeditionName as expedition_name,
ExpeditionID as expedition_id,
MutasiDate as mutasi_date,
ExpeditionIsInternal as is_expedition_internal,
IF(ExpeditionIsInternal = 'Y',M_StaffID,0) as staff_id,
IF(ExpeditionIsInternal = 'Y',M_StaffName,'') as staff_name,
IF(ExpeditionIsInternal = 'Y',M_StaffHP,'') as staff_mobile,
IFNULL(MutasiExpeditionPIC,'') as courier_name,
IFNULL(MutasiExpeditionMobile,'') as courier_mobile,
MutasiNote as note,
MutasiIsConfirm as is_confirm,
IF(MutasiConfirmAt = NULL, '',DATE_FORMAT(MutasiConfirmAt,'%d-%m-%Y %H:%i')) as confirm_at,
IFNULL(M_UserUsername,'') as confirm_by,
'' as details
FROM `mutasi`
JOIN `expedition` ON MutasiExpeditionID = ExpeditionID
LEFT JOIN $this->db_onex.`m_staff` ON MutasiExpeditionStaffID = M_StaffID
LEFT JOIN $this->db_onex.`m_user` ON MutasiConfirmBy = M_UserID
JOIN `companyaddress` fromcompanyaddress ON MutasiToCompanyAddressID = fromcompanyaddress.CompanyAddressID
JOIN `company` fromcompany ON fromcompanyaddress.CompanyAddressCompanyID = fromcompany.CompanyID
JOIN `companyaddress` tocompanyaddress ON MutasiToCompanyAddressID = tocompanyaddress.CompanyAddressID $filter_company_address
JOIN `company` tocompany ON tocompanyaddress.CompanyAddressCompanyID = tocompany.CompanyID
JOIN $this->db_onex.`m_branch` ON tocompany.CompanyM_BranchID = M_BranchID
WHERE
MutasiIsActive = 'Y' AND MutasiType = 'T' AND (DATE(MutasiDate) BETWEEN ? AND ?) AND
( MutasiNumber like ? ) $filter_status
ORDER BY $order_by $order_type
LIMIT ? OFFSET ?";
$qry = $this->db_inventory->query($sql, array($prm['start_date'],$prm['end_date'],$search, $perpage, $offset));
//echo $this->db_inventory->last_query();
if($qry){
$rows = $qry->result_array();
$result = array("total_page" => $tot_page, "records" => $rows);
$this->sys_ok($result);
exit;
}
else{
echo $this->db_inventory->last_query();
$this->sys_error_db("purchase order select error", $this->db_inventory->last_query());
exit;
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function get_details(){
try {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$sql = "SELECT MutasiRequestReceiveID as request_id,
MutasiRequestReceiveMutasiRequestNumber as request_number,
CompanyName as company_name,
M_BranchName as branch_name,
ItemID as item_id,
ItemUnitID as unit_id,
SUM(MutasiRequestReceiveRequestQty-MutasiRequestReceiveReceiveQty) as qty_request,
ItemName as item_name,
ItemUnitName as unit_name,
CONCAT(ItemName,' : ',ItemUnitName) as itemunit_name,
IFNULL(SUM(StockQty),0) as qty_stock,
IFNULL(MutasiDetailQty,0) as qty,
IFNULL(MutasiDetailID,0) as id,
IFNULL(MutasiIsConfirm,'X') as is_confirm,
'' as details
FROM mutasirequestreceive
JOIN companyaddress ON MutasiRequestReceiveCompanyAddressID = CompanyAddressID
JOIN company ON CompanyAddressCompanyID = CompanyID
JOIN $this->db_onex.m_branch ON CompanyM_BranchID = M_BranchID
JOIN item ON MutasiRequestReceiveItemID = ItemID
JOIN itemunit ON MutasiRequestReceiveItemUnitID = ItemUnitID
LEFT JOIN stock ON StockItemID = ItemID AND StockItemUnitID = ItemUnitID
LEFT JOIN warehouse ON StockWarehouseID = WarehouseID AND WarehouseIsOffice = 'Y'
LEFT JOIN `mutasidetail` ON MutasiDetailMutasiRequestReceiveID = MutasiRequestReceiveID AND
MutasiDetailMutasiID = ? AND MutasiDetailIsActive = 'Y' AND
MutasiDetailItemID = ItemID AND MutasiDetailItemUnitID = ItemUnitID
LEFT JOIN mutasi ON MutasiDetailMutasiID = MutasiID
WHERE
MutasiRequestReceiveStatus NOT IN('N','D','C') AND MutasiRequestReceiveIsActive = 'Y' AND
MutasiRequestReceiveCompanyAddressID = ? AND
( MutasiRequestReceiveRequestQty - MutasiRequestReceiveReceiveQty ) > 0
GROUP BY MutasiRequestReceiveID
";
$query = $this->db_inventory->query($sql,array($prm['id'],$prm['to_company_address_id']));
//echo $this->db_onedev->last_query();
if ($query) {
$rows = $query->result_array();
if($rows){
foreach ($rows as $key => $value) {
if($value['is_confirm'] === 'Y'){
$sql = "SELECT MutasiDetailStockID as id,
MutasiDetailStockItemID as item_id,
ItemName as item_name,
MutasiDetailStockItemUnitID as unit_id,
ItemUnitName as unit_name,
MutasiDetailStockBatchNo as batch_no,
MutasiDetailStockStockNumber as stock_number,
IF(MutasiDetailStockED = NULL OR MutasiDetailStockED = '0000-00-00','',MutasiDetailStockED) as ed,
MutasiDetailStockQty as qty
FROM `mutasidetailstock`
JOIN `item` ON MutasiDetailStockItemID = ItemID
JOIN `itemunit` ON MutasiDetailStockItemUnitID = ItemUnitID
WHERE
MutasiDetailStockMutasiDetailID = ? AND
MutasiDetailStockIsActive = 'Y'
";
$query = $this->db_inventory->query($sql,array($value['id']));
if($query){
$rows[$key]['details'] = $query->result_array();
}
else{
$this->sys_error_db("mutasidetailstock rows",$this->db_inventory);
exit;
}
}
}
}
//echo $this->db_onedev->last_query();
$result = array( "records" => $rows);
$this->sys_ok($result);
}
else {
$this->sys_error_db("mutasidetail rows",$this->db_inventory);
exit;
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function search_to_company_address(){
try {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$max_rst = 12;
$tot_count =0;
$q = [
'search' => '%'
];
if ($prm['search'] != '')
{
$q['search'] = "%{$prm['search']}%";
}
$sql = "
SELECT CompanyAddressID as id, CompanyAddressLabel as name, CompanyAddressDescription as description,
M_BranchID as branch_id, M_BranchName as branch_name
FROM companyaddress
JOIN company ON CompanyAddressCompanyID = CompanyID
JOIN $this->db_onex.m_branch ON CompanyM_BranchID = M_BranchID
WHERE
CompanyName like ?
AND CompanyAddressIsActive = 'Y'
ORDER BY CompanyName ASC
";
$query = $this->db_inventory->query($sql, array($q['search']));
if ($query) {
$rows = $query->result_array();
array_push($rows,array('id'=>0,'name'=>'Semua'));
//echo $this->db_onedev->last_query();
$result = array( "records" => $rows, "total_display" => sizeof($rows));
$this->sys_ok($result);
}
else {
$this->sys_error_db("companyaddress rows",$this->db_inventory);
exit;
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function get_to_company_address(){
try {
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$sql = "SELECT CompanyAddressID as id, CompanyAddressLabel as name, CompanyAddressDescription as description,
M_BranchID as branch_id, M_BranchName as branch_name
FROM companyaddress
JOIN company ON CompanyAddressCompanyID = CompanyID
JOIN $this->db_onex.m_branch ON CompanyM_BranchID = M_BranchID
WHERE
CompanyAddressIsActive = 'Y'
ORDER BY CompanyName ASC
";
$query = $this->db_inventory->query($sql);
if ($query) {
$rows = $query->result_array();
array_push($rows,array('id'=>0,'name'=>'Semua'));
//echo $this->db_onedev->last_query();
$result = array( "records" => $rows, "total_display" => sizeof($rows));
$this->sys_ok($result);
}
else {
$this->sys_error_db("companyaddress rows",$this->db_inventory);
exit;
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function saveAdd(){
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$userid = $this->sys_user['M_UserID'];
$prm = $this->sys_input;
$note = "";
if (isset($prm['note'])) {
$note = trim($prm['note']);
}
$this->db_inventory->trans_start();
$this->db_inventory->trans_strict(FALSE);
$numbering = '';
$sql = "SELECT `fn_numbering`('MPB') as numbering";
$qry = $this->db_inventory->query($sql);
if($qry){
$numbering = $qry->row()->numbering;
}
else{
$this->sys_error_db("get numbering error", $this->db_inventory->last_query());
exit;
}
$last_id = 0;
$now = new DateTime();
$sql = "INSERT INTO mutasi(
MutasiType,
MutasiStatus,
MutasiNumber,
MutasiDate,
MutasiFromCompanyAddressID,
MutasiToCompanyAddressID,
MutasiExpeditionID,
MutasiExpeditionStaffID,
MutasiExpeditionPIC,
MutasiExpeditionMobile,
MutasiNote,
MutasiCreated,
MutasiLastUpdated,
MutasiUserID
)
VALUES(
'T','N',?,?,?,?,?,?,?,?,?,NOW(),NOW(),?
)";
$param_insert = array(
$numbering,
$prm['mutation_date'].' '.$now->format('H:i:s'),
$prm['from_company_address']['id'],
$prm['to_company_addresses']['id'],
$prm['expedition']['id'],
intval($prm['courier_staf']['id']) > 0?$prm['courier_staf']['id']:NULL,
$prm['courier_name'],
$prm['courier_mobile'],
$note,
$userid
);
$qry = $this->db_inventory->query($sql, $param_insert);
$last_id = 0;
if($qry){
$last_id = $this->db_inventory->insert_id();
}
else{
//echo $this->db_inventory->last_query();
$this->sys_error_db("save mutasi error", $this->db_inventory->last_query());
exit;
}
if(count($prm['details'])>0){
foreach ($prm['details'] as $key => $value) {
if(intval($value['qty']) > 0){
$sql = "INSERT INTO mutasidetail(
MutasiDetailMutasiID,
MutasiDetailMutasiRequestReceiveID,
MutasiDetailItemID,
MutasiDetailItemUnitID,
MutasiDetailQty,
MutasiDetailUserID,
MutasiDetailCreated,
MutasiDetailLastUpdated
)
VALUES(
?,?,?,?,?,?,NOW(),NOW()
)";
$param_insert_detail = array(
$last_id,
$value['request_id'],
$value['item_id'],
$value['unit_id'],
$value['qty'],
$userid
);
$qry = $this->db_inventory->query($sql,$param_insert_detail);
if(!$qry){
//echo $this->db_inventory->last_query();
$this->sys_error_db("save mutasidetail error", $this->db_inventory->last_query());
exit;
}
}
}
}
$id = $last_id;
$sql = "SELECT mutasi.*, '' as details
FROM mutasi
WHERE MutasiID = ? ";
$qry = $this->db_inventory->query($sql, array($id));
//echo $this->db_inventory->last_query();
if(!$qry){
$this->sys_error_db("select mutasi error", $this->db_inventory->last_query());
exit;
}
$row_after = $qry->row_array();
$sql = "SELECT *, '' as details
FROM `mutasidetail`
WHERE
MutasiDetailMutasiID = ? AND
MutasiDetailIsActive = 'Y'";
$qry = $this->db_inventory->query($sql, array($id));
if(!$qry){
$this->sys_error_db("select mutasidetail error", $this->db_inventory->last_query());
exit;
}
$row_after['details'] = $qry->result_array();
$data_log_after = $row_after;
$sql = "INSERT INTO mutasi_log (
MutasiLogMutasiID,
MutasiLogStatus,
MutasiLogJSONBefore,
MutasiLogJSONAfter,
MutasiLogUserID,
MutasiLogCreated
)
VALUES(
?,?,NULL,?,?,NOW()
)";
$qry = $this->db_inventory_log->query($sql, array($id,'ADD',json_encode($data_log_after),$userid));
if(!$qry){
$this->sys_error_db("insert log error", $this->db_inventory_log->last_query());
exit;
}
$this->db_inventory->trans_complete();
$result = array(
"message" => ''
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function edit(){
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$prm = $this->sys_input;
$userid = $this->sys_user['M_UserID'];
$this->update($prm,$userid);
$result = array(
"message" => ''
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function update($prm,$userid){
$note = "";
if (isset($prm['note'])) {
$note = trim($prm["note"]);
}
$courier_name = '';
if (isset($prm['courier_name'])) {
$courier_name = trim($prm["courier_name"]);
}
$courier_mobile = '';
if (isset($prm['courier_mobile'])) {
$courier_mobile = trim($prm["courier_mobile"]);
}
$id = $prm['id'];
$sql = "SELECT mutasi.*, '' as details
FROM mutasi
WHERE MutasiID = ? ";
$qry = $this->db_inventory->query($sql, array($id));
//echo $this->db_inventory->last_query();
if(!$qry){
$this->sys_error_db("select mutasi error", $this->db_inventory->last_query());
exit;
}
$row_before = $qry->row_array();
$sql = "SELECT *, '' as details
FROM `mutasidetail`
WHERE
MutasiDetailMutasiID = ? AND
MutasiDetailIsActive = 'Y'";
$qry = $this->db_inventory->query($sql, array($id));
if(!$qry){
$this->sys_error_db("select mutasidetail error", $this->db_inventory->last_query());
exit;
}
$row_before['details'] = $qry->result_array();
$data_log_before = $row_before;
$this->db_inventory->trans_start();
$this->db_inventory->trans_strict(FALSE);
$last_id = $id;
$sql = "UPDATE mutasi SET
MutasiDate = ?,
MutasiExpeditionID = ?,
MutasiExpeditionStaffID = ?,
MutasiExpeditionPIC = ?,
MutasiExpeditionMobile = ?,
MutasiNote = ?,
MutasiLastUpdated = NOW(),
MutasiUserID = ?
WHERE
MutasiID = ?";
$param_update_header = array(
$prm['mutation_date'],
isset($prm['expedition'])?$prm['expedition']['id']:0,
isset($prm['courier_staf']) && intval($prm['courier_staf']['id']) > 0?$prm['courier_staf']['id']:0,
$courier_name,
$courier_mobile,
$note,
$userid,
$id
);
$qry = $this->db_inventory->query($sql, $param_update_header);
//echo $this->db_inventory->last_query();
if(!$qry){
//echo $this->db_inventory->last_query();
$this->sys_error_db("edit purchaseorder error", $this->db_inventory->last_query());
exit;
}
$sql = "UPDATE mutasidetail SET MutasiDetailIsActive = 'N' WHERE MutasiDetailMutasiID = ?";
$qry = $this->db_inventory->query($sql, array($id));
if(!$qry){
//echo $this->db_inventory->last_query();
$this->sys_error_db("update N detail error", $this->db_inventory->last_query());
exit;
}
if(count($prm['details'])>0){
foreach ($prm['details'] as $key => $value) {
if(intval($value['qty']) > 0){
if(intval($value['id']) > 0){
$sql = "UPDATE mutasidetail SET
MutasiDetailQty = ?,
MutasiDetailUserID = ?,
MutasiDetailIsActive = 'Y',
MutasiDetailLastUpdated = NOW()
WHERE
MutasiDetailID = ?";
$param_edit_detail = array(
$value['qty'],
$userid,
$value['id']
);
$qry = $this->db_inventory->query($sql, $param_edit_detail);
//echo $this->db_inventory->last_query();
if(!$qry){
//echo $this->db_inventory->last_query();
$this->sys_error_db("edit mutasidetail error", $this->db_inventory->last_query());
exit;
}
}else{
$sql = "INSERT INTO mutasidetail(
MutasiDetailMutasiID,
MutasiDetailMutasiRequestReceiveID,
MutasiDetailItemID,
MutasiDetailItemUnitID,
MutasiDetailQty,
MutasiDetailUserID,
MutasiDetailCreated,
MutasiDetailLastUpdated
)
VALUES(
?,?,?,?,?,?,NOW(),NOW()
)";
$param_insert_detail = array(
$last_id,
$value['request_id'],
$value['item_id'],
$value['unit_id'],
$value['qty'],
$userid
);
$qry = $this->db_inventory->query($sql,$param_insert_detail);
if(!$qry){
//echo $this->db_inventory->last_query();
$this->sys_error_db("save mutasidetail error", $this->db_inventory->last_query());
exit;
}
}
}
}
}
$sql = "SELECT mutasi.*, '' as details
FROM mutasi
WHERE MutasiID = ? ";
$qry = $this->db_inventory->query($sql, array($id));
//echo $this->db_inventory->last_query();
if(!$qry){
$this->sys_error_db("select mutasi error", $this->db_inventory->last_query());
exit;
}
$row_after = $qry->row_array();
$sql = "SELECT *, '' as details
FROM `mutasidetail`
WHERE
MutasiDetailMutasiID = ? AND
MutasiDetailIsActive = 'Y'";
$qry = $this->db_inventory->query($sql, array($id));
if(!$qry){
$this->sys_error_db("select mutasidetail error", $this->db_inventory->last_query());
exit;
}
$row_after['details'] = $qry->result_array();
$data_log_after = $row_after;
$sql = "INSERT INTO mutasi_log (
MutasiLogMutasiID,
MutasiLogStatus,
MutasiLogJSONBefore,
MutasiLogJSONAfter,
MutasiLogUserID,
MutasiLogCreated
)
VALUES(
?,?,?,?,?,NOW()
)";
$qry = $this->db_inventory_log->query($sql, array($id,'EDIT',json_encode($data_log_before),json_encode($data_log_after),$userid));
if(!$qry){
$this->sys_error_db("insert log error", $this->db_inventory_log->last_query());
exit;
}
$this->db_inventory->trans_complete();
return true;
}
function delete()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$userid = $this->sys_user['M_UserID'];
$param = $this->sys_input;
$id = "";
if (isset($param['id'])) {
$id = intval($param["id"]);
}
if ($id == "" || !$id) {
$error = array(
"message" => "id is mandatory",
);
$this->sys_error_db($error);
exit;
}
$this->db_inventory->trans_start();
$this->db_inventory->trans_strict(FALSE);
$sql = "UPDATE mutasi
SET
MutasiIsActive = 'N',
MutasiLastUpdated = now(),
MutasiUserID = ?
WHERE MutasiID = ?
";
$qry = $this->db_inventory->query($sql, [$userid,$id]);
if(!$qry){
$this->sys_error_db("delete mutasi error", $this->db_inventory->last_query());
exit;
}else{
$sql = "UPDATE mutasidetail
SET
MutasiDetailIsActive = 'N',
MutasiDetailLastUpdated = now(),
MutasiDetailUserID = ?
WHERE
MutasiDetailMutasiID = ?
";
$qry = $this->db_inventory->query($sql, [$userid,$id]);
if(!$qry){
$this->sys_error_db("delete mutasidetail error", $this->db_inventory->last_query());
exit;
}
}
$sql = "SELECT mutasi.*, '' as details
FROM mutasi
WHERE MutasiID = ? ";
$qry = $this->db_inventory->query($sql, array($id));
//echo $this->db_inventory->last_query();
if(!$qry){
$this->sys_error_db("select mutasi error", $this->db_inventory->last_query());
exit;
}
$row_after = $qry->row_array();
$data_log_after = $row_after;
$sql = "INSERT INTO mutasi_log (
MutasiLogMutasiID,
MutasiLogStatus,
MutasiLogJSONBefore,
MutasiLogJSONAfter,
MutasiLogUserID,
MutasiLogCreated
)
VALUES(
?,?,NULL,?,?,NOW()
)";
$qry = $this->db_inventory_log->query($sql, array($id,'DELETE',json_encode($data_log_after),$userid));
if(!$qry){
$this->sys_error_db("insert log error", $this->db_inventory_log->last_query());
exit;
}
$this->db_inventory->trans_complete();
$result = array(
"message" => ''
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function validateDate($date, $format = 'Y-m-d')
{
$d = DateTime::createFromFormat($format, $date);
// The Y ( 4 digits year ) returns TRUE for any integer with any number of digits so changing the comparison from == to === fixes the issue.
return $d && $d->format($format) === $date;
}
function confirm()
{
try {
if (!$this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$userid = $this->sys_user['M_UserID'];
$param = $this->sys_input;
$this->update($param,$userid);
$id = "";
if (isset($param['id'])) {
$id = intval($param["id"]);
}
if ($id == "" || !$id) {
$error = array(
"message" => "id is mandatory",
);
$this->sys_error_db($error);
exit;
}
$this->db_inventory->trans_start();
$this->db_inventory->trans_strict(FALSE);
$sql = "UPDATE mutasi
SET MutasiIsConfirm = 'Y',
MutasiStatus = 'S',
MutasiLastUpdated = NOW(),
MutasiConfirmAt = NOW(),
MutasiConfirmBy = ?,
MutasiUserID = ?
WHERE MutasiID = ?
";
$qry = $this->db_inventory->query($sql, [$userid,$userid,$id]);
if(!$qry){
$this->sys_error_db("confirm purchaseorder error", $this->db_inventory->last_query());
exit;
}
$sql = "SELECT mutasidetail.*, MutasiRequestReceiveMutasiRequestDetailID as MutasiRequestDetailID ,'' as details
FROM mutasidetail
JOIN mutasirequestreceive ON MutasiRequestReceiveID = MutasiDetailMutasiRequestReceiveID
WHERE
MutasiDetailMutasiID = ? AND MutasiDetailIsActive = 'Y'";
$qry = $this->db_inventory->query($sql, [$id]);
if(!$qry){
$this->sys_error_db("select mutasidetail before get stock error", $this->db_inventory->last_query());
exit;
}
$data_details = $qry->result_array();
//start mengeluarkan data dari stock
foreach ($data_details as $kdetail => $vdetail) {
$sql = "UPDATE mutasidetail SET MutasiDetailQty = 0
WHERE
MutasiDetailID = ?";
$qry = $this->db_inventory->query($sql, [$vdetail['MutasiDetailID']]);
if(!$qry){
$this->sys_error_db("update QTY = 0 mutasi detail", $this->db_inventory->last_query());
exit;
}
//print_r($vdetail);
$qty = intval($vdetail['MutasiDetailQty']);
//echo $qty;
if($qty > 0){
$qtyLoop = 0;
//start looping stock out sesuai qty yg dikirim
while($qtyLoop < $qty) {
//echo $qtyLoop;
$sql = "SELECT *
FROM stock
JOIN warehouse ON StockWarehouseID = WarehouseID AND
WarehouseIsOffice = 'Y'
WHERE
StockItemID = ? AND
StockItemUnitID = ? AND
StockQty > 0
ORDER BY StockED ASC, StockStockNumber ASC
LIMIT 1";
$qry = $this->db_inventory->query($sql, [$vdetail['MutasiDetailItemID'],$vdetail['MutasiDetailItemUnitID']]);
if(!$qry){
$qtyLoop = $qty;
$this->sys_error_db("select stock error", $this->db_inventory->last_query());
exit;
}
if($qry->row_array()){
$data_stock = $qry->row_array();
$qtyOut = 0;
if(intval($data_stock['StockQty']) >= $qty){
$qtyOut = $qty;
}else{
$qtyOut = intval($data_stock['StockQty']);
}
$sql = "UPDATE stock SET StockQty = ?
WHERE
StockID = ? ";
$qry = $this->db_inventory->query($sql, [intval($data_stock['StockQty'])-$qtyOut,$data_stock['StockID']]);
if(!$qry){
$this->sys_error_db("stock out error", $this->db_inventory->last_query());
exit;
}
$arr_insert = array(
'MutasiDetailStockMutasiDetailID' => $vdetail['MutasiDetailID'],
'MutasiDetailStockMutasiRequestDetailID' => $vdetail['MutasiRequestDetailID'],
'MutasiDetailStockItemID' => $vdetail['MutasiDetailItemID'],
'MutasiDetailStockItemUnitID' => $vdetail['MutasiDetailItemUnitID'],
'MutasiDetailStockBatchNo' => $data_stock['StockBatchNo'],
'MutasiDetailStockStockNumber' => $data_stock['StockStockNumber'],
'MutasiDetailStockQty' => $qtyOut,
'MutasiDetailStockUserID' => $userid,
'MutasiDetailStockCreated' => date("Y-m-d H:i:s"),
'MutasiDetailStockLastUpdated' => date("Y-m-d H:i:s")
);
$arr_insert_ed = $this->validateDate($data_stock['StockED'])?$data_stock['StockED']:NULL;
if($arr_insert_ed)
$arr_insert['MutasiDetailStockED'] = $data_stock['StockED'];
$qry = $this->db_inventory->insert_batch('mutasidetailstock', $arr_insert);
if(!$qry){
$this->sys_error_db("mutasidetailstock insert error", $this->db_inventory->last_query());
exit;
}
$sql = "UPDATE mutasidetail SET MutasiDetailQty = MutasiDetailQty + ?
WHERE
MutasiDetailID = ?";
$qry = $this->db_inventory->query($sql, [$qtyOut,$vdetail['MutasiDetailID']]);
if(!$qry){
$this->sys_error_db("update QTY mutasi detail berdasarkan stock keluar error", $this->db_inventory->last_query());
exit;
}
$detailstock_id = $this->db_inventory->insert_id();
$sql = "INSERT INTO stocklog (
StockLogWarehouseID,
StockLogWarehouseAlmariID,
StockLogWarehouseRackID,
StockLogDatetime,
StockLogItemID,
StockLogItemUnitID,
StockLogStockNumber,
StockLogBatchNo,
StockLogED,
StockLogReffID,
StockLogQty,
StockLogUserID,
StockLogStatus
)
VALUES(
?,?,?,NOW(),?,?,?,?,?,?,?,?,'MPB'
)";
$param_insert_stocklog = array(
$data_stock['StockWarehouseID'],
$data_stock['StockWarehouseAlmariID'],
$data_stock['StockWarehouseRackID'],
$data_stock['StockItemID'],
$data_stock['StockItemUnitID'],
$data_stock['StockStockNumber'],
$data_stock['StockBatchNo'],
$data_stock['StockLogED'],
$detailstock_id,
$qtyOut,
$userid
);
$qry = $this->db_inventory->query($sql, $param_insert_stocklog);
if(!$qry){
$this->sys_error_db("stocklog insert error", $this->db_inventory->last_query());
exit;
}
$last_stock_card = 0;
$sql = "SELECT *
FROM stockcard
WHERE
StockCardWarehouseID = ? AND
StockCardItemID = ? AND
StockCardItemUnitID = ? AND
StockCardBatchNo = ? AND
StockCardED = ?
ORDER BY StockCardDatetime DESC
LIMIT 1";
$param_get_stockcard = array(
$data_stock['StockWarehouseID'],
$data_stock['StockItemID'],
$data_stock['StockItemUnitID'],
$data_stock['StockBatchNo'],
$data_stock['StockLogED']
);
$qry = $this->db_inventory->query($sql, $param_get_stockcard);
if(!$qry){
$this->sys_error_db("get last stock card error", $this->db_inventory->last_query());
exit;
}
$qty_after_stockcard = $qry->row_array()?intval($qry->row_array()['StockCardAfter']):0;
$qty_after = $qty_after_stockcard-$qtyOut;
$batch_no = $data_stock['StockBatchNo'];
$ed = $this->validateDate($data_stock['StockLogED'])?$data_stock['StockLogED']:NULL;
$data_insert_stocklog = array(
'StockCardStatus' => 'MPB',
'StockCardDatetime' => date('Y-m-d H:i:s'),
'StockCardWarehouseID' => $data_stock['StockWarehouseID'],
'StockCardItemID' => $data_stock['StockItemID'],
'StockCardItemUnitID' => $data_stock['StockItemUnitID'],
'StockCardBatchNo' => $batch_no,
'StockCardReffID' => $detailstock_id,
'StockCardBefore' => $qty_after_stockcard,
'StockCardIn' => 0,
'StockCardOut' => $qtyOut,
'StockCardAfter' => $qty_after,
'StockCardUserID' => $userid
);
if($ed)
$data_insert_stocklog['StockCardED'] = $ed;
$qry = $this->db_inventory->insert('stockcard',$data_insert_stocklog);
if(!$qry){
$this->sys_error_db("insert stockcard error", $this->db_inventory->last_query());
exit;
}
}
else
$qtyLoop = $qty;
$qtyLoop = $qtyLoop + $qtyOut;
}
//end looping stock out sesuai qty yg dikirim
$sql = "UPDATE mutasirequestreceive SET MutasiRequestReceiveStatus = 'S'
WHERE
MutasiRequestReceiveID = ?";
$qry = $this->db_inventory->query($sql, array($vdetail['MutasiDetailMutasiRequestReceiveID']));
//echo $this->db_inventory->last_query();
if(!$qry){
$this->sys_error_db("cek qty detail and stockout error", $this->db_inventory->last_query());
exit;
}
$sql = "INSERT INTO mutasirequestreceive_status(
MutasiRequestReceiveStatusMutasiRequestReceiveID,
MutasiRequestReceiveStatusStatus,
MutasiRequestReceiveStatusUserID,
MutasiRequestReceiveStatusCreated
)
VALUES(?,'S',?,NOW())";
$qry = $this->db_inventory->query($sql, array($vdetail['MutasiDetailMutasiRequestReceiveID'],$userid));
//echo $this->db_inventory->last_query();
if(!$qry){
$this->sys_error_db("cek qty detail and stockout error", $this->db_inventory->last_query());
exit;
}
}
}
//end mengeluarkan data dari stock
$sql = "SELECT mutasi.*, '' as details,
ExpeditionName as expedition_name,
IF(ISNULL(MutasiExpeditionStaffID) OR MutasiExpeditionStaffID = 0, MutasiExpeditionPIC, M_StaffName) as expedition_staff
FROM mutasi
JOIN expedition ON MutasiExpeditionID = ExpeditionID
LEFT JOIN $this->db_onex.m_staff ON MutasiExpeditionStaffID = M_StaffID
WHERE MutasiID = ? ";
$qry = $this->db_inventory->query($sql, array($id));
//echo $this->db_inventory->last_query();
if(!$qry){
$this->sys_error_db("select mutasi error", $this->db_inventory->last_query());
exit;
}
$row_after = $qry->row_array();
//insert ke mutasi transit
$numbering = '';
$sql = "SELECT `fn_numbering`('MTB') as numbering";
$qry = $this->db_inventory->query($sql);
if($qry){
$numbering = $qry->row()->numbering;
}
else{
$this->sys_error_db("get numbering MTB error", $this->db_inventory->last_query());
exit;
}
$sql = "INSERT INTO mutasitransit(
MutasiTransitMutasiID,
MutasiTransitMutasiNumber,
MutasiTransitNumber,
MutasiTransitNote,
MutasiTransitDate,
MutasiTransitType,
MutasiTransitStatus,
MutasiTransitFromCompanyAddressID,
MutasiTransitToCompanyAddressID,
MutasiTransitExpeditionName,
MutasiTransitExpeditionStaff,
MutasiTransitUserID,
MutasiTransitCreated,
MutasiTransitLastUpdated
)
VALUES(
?,?,?,?,?,?,?,?,?,?,?,?,NOW(),NOW()
)";
$param_insert_mutasi_transit = array(
$row_after['MutasiID'],
$row_after['MutasiNumber'],
$row_after['MutasiNote'],
$numbering,
$row_after['MutasiDate'],
'SEND',
'S',
$row_after['MutasiFromCompanyAddressID'],
$row_after['MutasiToCompanyAddressID'],
$row_after['expedition_name'],
$row_after['expedition_staff'],
$userid
);
$qry = $this->db_inventory->query($sql,$param_insert_mutasi_transit);
//echo $this->db_inventory->last_query();
if(!$qry){
$this->sys_error_db("select mutasi error", $this->db_inventory->last_query());
exit;
}
$mutasi_transit_id = $this->db_inventory->insert_id();
$details = $data_details;
$insert_values_transit_details = [];
foreach ($details as $key => $value) {
$sql = "SELECT mutasidetailstock.*,
MutasiDetailMutasiRequestReceiveID as MutasiRequestReceiveID,
MutasiRequestReceiveMutasiRequestDetailID as MutasiRequestDetailID
FROM mutasidetailstock
JOIN mutasidetail ON MutasiDetailStockMutasiDetailID = MutasiDetailID
JOIN mutasirequestreceive ON MutasiDetailMutasiRequestReceiveID = MutasiRequestReceiveID
WHERE
MutasiDetailStockMutasiDetailID = ? AND MutasiDetailStockIsActive = 'Y'
";
$qry = $this->db_inventory->query($sql, array($value['MutasiDetailID']));
if(!$qry){
$this->sys_error_db("select mutasidetailstock error => ".$value['MutasiDetailID'], $this->db_inventory->last_query());
exit;
}
$details_stock = $qry->result_array();
$details[$key]['details'] = $details_stock;
foreach ($details_stock as $key_stock_details => $value_stock_details) {
$arr_push = array(
'MutasiTransitDetailMutasiDetailID' => $value_stock_details['MutasiDetailStockMutasiDetailID'],
'MutasiTransitDetailMutasiTransitNumber' => $numbering,
'MutasiTransitDetailMutasiRequestReceiveID' => $value_stock_details['MutasiRequestReceiveID'],
'MutasiTransitDetailMutasiRequestDetailID' => $value_stock_details['MutasiRequestDetailID'],
'MutasiTransitDetailMutasiTransitID' => $mutasi_transit_id,
'MutasiTransitDetailItemID' => $value_stock_details['MutasiDetailStockItemID'],
'MutasiTransitDetailItemUnitID' => $value_stock_details['MutasiDetailStockItemUnitID'],
'MutasiTransitDetailItemUnitID' => $value_stock_details['MutasiDetailStockItemUnitID'],
'MutasiTransitDetailQty' => $value_stock_details['MutasiDetailStockQty'],
'MutasiTransitDetailBatchNo' => $value_stock_details['MutasiDetailStockBatchNo'],
'MutasiTransitDetailStockNumber' => $value_stock_details['MutasiDetailStockStockNumber'],
'MutasiTransitDetailUserID' => $userid,
'MutasiTransitDetailCreated' => date("Y-m-d H:i:s"),
'MutasiTransitDetailLastUpdated' => date("Y-m-d H:i:s")
);
$arr_push_ed = $this->validateDate($data_stock['MutasiDetailStockED'])?$data_stock['StockLogED']:NULL;
if($arr_push_ed)
$arr_push['MutasiTransitDetailED'] = $value_stock_details['MutasiDetailStockED'];
array_push($insert_values_transit_details,$arr_push);
}
}
if(count($insert_values_transit_details) > 0)
$this->db_inventory->insert_batch('mutasitransitdetail', $insert_values_transit_details);
$row_after['details'] = $details;
$data_log_after = $row_after;
$sql = "INSERT INTO mutasi_log (
MutasiLogMutasiID,
MutasiLogStatus,
MutasiLogJSONBefore,
MutasiLogJSONAfter,
MutasiLogUserID,
MutasiLogCreated
)
VALUES(
?,?,NULL,?,?,NOW()
)";
$qry = $this->db_inventory_log->query($sql, array($id,'CONFRIM',json_encode($data_log_after),$userid));
if(!$qry){
$this->sys_error_db("insert log error", $this->db_inventory_log->last_query());
exit;
}
$this->db_inventory->trans_complete();
$result = array(
"message" => 'confirm success'
);
$this->sys_ok($result);
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function get_data_company_default(){
try{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$sql = "SELECT CompanyID as id,
CompanyName as name,
'' as address
FROM company
JOIN one_aditya.m_branch ON CompanyM_BranchID = M_BranchID AND M_BranchIsDefault = 'Y'
WHERE
CompanyIsActive = 'Y' LIMIT 1";
$query = $this->db_inventory->query($sql);
if ($query) {
$row = $query->row_array();
$sql = "SELECT CompanyAddressID as id,
CompanyAddressLabel as name,
CompanyAddressDescription as description
FROM companyaddress
WHERE
CompanyAddressCompanyID = ? AND CompanyAddressIsActive = 'Y'";
$query = $this->db_inventory->query($sql,array($row['id']));
$data_address = $query->result_array();
$row['address'] = $data_address;
$result = array("records" => $row);
$this->sys_ok($result);
}
else {
$this->sys_error_db("expedition rows",$this->db_inventory);
exit;
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function get_expedition(){
try{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$sql = "SELECT ExpeditionID as id,
ExpeditionName as name,
ExpeditionIsInternal as is_internal
FROM expedition
WHERE
ExpeditionIsActive = 'Y'";
$query = $this->db_inventory->query($sql);
if ($query) {
$rows = $query->result_array();
$result = array("records" => $rows);
$this->sys_ok($result);
}
else {
$this->sys_error_db("expedition rows",$this->db_inventory);
exit;
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function get_expedition_staff(){
try{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$sql = "SELECT M_StaffID as id,
M_StaffName as name
FROM expeditionstaff
JOIN $this->db_onex.m_staff ON ExpeditionStaffM_StaffID = M_StaffID AND M_StaffIsActive = 'Y'
WHERE
ExpeditionStaffIsActive = 'Y'";
$query = $this->db_inventory->query($sql);
if ($query) {
$rows = $query->result_array();
$result = array("records" => $rows);
$this->sys_ok($result);
}
else {
$this->sys_error_db("expedition rows",$this->db_inventory);
exit;
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function get_to_company_address_form(){
try{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$sql = "SELECT CompanyAddressID as id,
CompanyAddressLabel as name,
CompanyAddressDescription as description,
CompanyName as company_name
FROM companyaddress
JOIN mutasirequestreceive ON MutasiRequestReceiveCompanyAddressID = CompanyAddressID AND
MutasiRequestReceiveIsActive = 'Y' AND
( MutasiRequestReceiveStatus <> 'N' AND MutasiRequestReceiveStatus <> 'D' )
JOIN company ON CompanyAddressCompanyID = CompanyID
WHERE
CompanyAddressIsActive = 'Y'
GROUP BY CompanyAddressID";
$query = $this->db_inventory->query($sql);
if ($query) {
$rows = $query->result_array();
$result = array("records" => $rows);
$this->sys_ok($result);
}
else {
$this->sys_error_db("companyaddress rows",$this->db_inventory);
exit;
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function get_data_request(){
try{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$userid = $this->sys_user['M_UserID'];
$prm = $this->sys_input;
$id = $prm['company_address_id'];
$sql = "SELECT MutasiRequestReceiveID as request_id,
MutasiRequestReceiveMutasiRequestNumber as request_number,
CompanyName as company_name,
ItemID as item_id,
ItemUnitID as unit_id,
SUM(MutasiRequestReceiveRequestQty-MutasiRequestReceiveReceiveQty) as qty_request,
ItemName as item_name,
ItemUnitName as unit_name,
CONCAT(ItemName,' : ',ItemUnitName) as itemunit_name,
IFNULL(SUM(StockQty),0) as qty_stock,
0 as qty
FROM mutasirequestreceive
JOIN companyaddress ON MutasiRequestReceiveCompanyAddressID = CompanyAddressID
JOIN company ON CompanyAddressCompanyID = CompanyID
JOIN item ON MutasiRequestReceiveItemID = ItemID
JOIN itemunit ON MutasiRequestReceiveItemUnitID = ItemUnitID
LEFT JOIN stock ON StockItemID = ItemID AND StockItemUnitID = ItemUnitID
LEFT JOIN warehouse ON StockWarehouseID = WarehouseID AND WarehouseIsOffice = 'Y'
WHERE
MutasiRequestReceiveStatus NOT IN('N','D','C') AND MutasiRequestReceiveIsActive = 'Y' AND
MutasiRequestReceiveCompanyAddressID = ? AND
( MutasiRequestReceiveRequestQty - MutasiRequestReceiveReceiveQty ) > 0
GROUP BY MutasiRequestReceiveID";
$query = $this->db_inventory->query($sql,array($id));
//echo $this->db_inventory->last_query();
if ($query) {
$rows = $query->result_array();
$result = array("records" => $rows);
$this->sys_ok($result);
}
else {
$this->sys_error_db("get data request rows",$this->db_inventory);
exit;
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
function get_printout(){
try{
if (! $this->isLogin) {
$this->sys_error("Invalid Token");
exit;
}
$sql = "SELECT *
FROM r_report
WHERE
R_ReportCode = 'MPB' AND R_ReportIsActive = 'Y'";
$query = $this->db_inventory->query($sql);
if ($query) {
$rows = $query->row_array();
$result = array("records" => $rows);
$this->sys_ok($result);
}
else {
$this->sys_error_db("r_report rows",$this->db_inventory);
exit;
}
} catch (Exception $exc) {
$message = $exc->getMessage();
$this->sys_error($message);
}
}
}