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); } } }