db_inventory = $this->load->database("inventory", true); $this->db_inventory_log = $this->load->database('inventory_log', true); $this->db_onex = 'one_aditya'; } function get_warehouses(){ try{ if (! $this->isLogin) { $this->sys_error("Invalid Token"); exit; } $sql = "SELECT WarehouseID as id, warehouseName as name FROM warehouse WHERE WarehouseIsActive = 'Y'"; $query = $this->db_inventory->query($sql); if ($query) { $row = $query->result_array(); $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 search() { try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $prm = $this->sys_input; $search = "%%"; if (isset($prm['search'])) { $search = trim($prm["search"]); $search = '%' . $prm['search'] . '%'; } $order_by = "ItemName"; 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"]); } $filter_warehouse = ""; if (isset($prm['warehouse']['id'])) { $filter_warehouse = " AND WarehouseID = {$prm['warehouse']['id']}"; } $order = $order_by.' '.$order_type; $perpage = 10; $offset = ($prm['current_page'] - 1) * $perpage ; $sql = "SELECT COUNT(*) as total FROM ( SELECT StockID as stock_id FROM `stock` JOIN `item` ON StockItemID = ItemID AND ( ItemName like ? OR ItemSKU like ?) JOIN `itemunit` ON StockItemUnitID = ItemUnitID JOIN `warehousealmari` ON StockWarehouseAlmariID = WarehouseAlmariID JOIN `warehouserack` ON StockWarehouseRackID = WarehouseRackID JOIN `warehouse` ON StockWarehouseID = WarehouseID AND WarehouseID = ? WHERE StockQty > 0 ) x"; $qry = $this->db_inventory->query($sql,array($search, $search, $prm['warehouse']['id'])); $tot_count = 0; $tot_page = 0; if ($qry) { $tot_count = $qry->row()->total; $tot_page = ceil($tot_count/$perpage); } else { $this->sys_error_db("supplier count error", $this->db_inventory->last_query()); exit; } $rows = array(); $sql = "SELECT ItemID as item_id, ItemName as item_name, ItemUnitID as unit_id, ItemUnitName as unit_name, StockID as stock_id, StockStockNumber as stock_number, StockBatchNo as batch_no, IF(StockED IS NULL,'',DATE_FORMAT(StockED, '%d-%m-%Y') ) as ed, StockED as stock_ed, StockQty as qty_stock, 0 as qty, WarehouseAlmariName as almari_name, StockWarehouseAlmariID as almari_id, WarehouseRackName as rack_name, WarehouseRackID as rack_id, WarehouseName as warehouse_name FROM `stock` JOIN `item` ON StockItemID = ItemID AND ( ItemName like ? OR ItemSKU like ?) JOIN `itemunit` ON StockItemUnitID = ItemUnitID JOIN `warehousealmari` ON StockWarehouseAlmariID = WarehouseAlmariID JOIN `warehouserack` ON StockWarehouseRackID = WarehouseRackID JOIN `warehouse` ON StockWarehouseID = WarehouseID AND WarehouseID = ? WHERE StockQty > 0 ORDER BY ? LIMIT ? OFFSET ?"; $qry = $this->db_inventory->query($sql, array($search, $search, $prm['warehouse']['id'],$order, $perpage, $offset)); //echo $this->db_inventory->last_query(); if($qry){ $rows = $qry->result_array(); }else { $this->sys_error_db("supplier data error", $this->db_inventory->last_query()); exit; } $result = array("total_page" => $tot_page, "records" => $rows); $this->sys_ok($result); exit; } 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 get_data_conversion(){ try { if (!$this->isLogin) { $this->sys_error("Invalid Token"); exit; } $userid = $this->sys_user['M_UserID']; $prm = $this->sys_input; $sql = "SELECT UnitConvertID as id, fromunit.ItemUnitID as from_unit_id, fromunit.ItemUnitName as from_unit_name, tounit.ItemUnitID as to_unit_id, tounit.ItemUnitName as to_unit_name, UnitConvertAmount as amount FROM `unitconvert` JOIN itemunitmap ON ItemUnitMapItemID = ? AND ItemUnitMapItemUnitID = UnitConvertFromItemUnitID JOIN itemunit fromunit ON UnitConvertFromItemUnitID = fromunit.ItemUnitID JOIN itemunit tounit ON UnitConvertToItemUnitID = tounit.ItemUnitID WHERE UnitConvertIsActive = 'Y' AND UnitConvertFromItemUnitID = ?"; $qry = $this->db_inventory->query($sql,array($prm['item_id'],$prm['unit_id'])); //echo $this->db_inventory->last_query(); if(!$qry){ $this->sys_error_db("update is active exist error", $this->db_inventory_log->last_query()); exit; } $rows = $qry->result_array(); $result = array("records" => $rows); $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; } $userid = $this->sys_user['M_UserID']; $prm = $this->sys_input; $this->db_inventory->trans_start(); $this->db_inventory->trans_strict(FALSE); $numbering = ''; $sql = "SELECT `fn_numbering`('CU') 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; } $arr_insert_detail = array( 'StockConversionNumber' => $numbering, 'StockConversionWarehouseID' => $prm['warehouse']['id'], 'StockConversionWarehouseAlmariiD' => $prm['selected_item']['almari_id'], 'StockConversionWarehouseRackID' => $prm['selected_item']['rack_id'], 'StockConversionItemID' => $prm['selected_item']['item_id'], 'StockConversionItemUnitID' => $prm['selected_item']['unit_id'], 'StockConversionStockNumber' => $prm['selected_item']['stock_number'], 'StockConversionBatchNo' => $prm['selected_item']['batch_no'], 'StockConversionToItemUnitID' => $prm['selected_unit_conversion']['to_unit_id'], 'StockConversionAmount' => $prm['selected_unit_conversion']['amount'], 'StockConversionQty' => $prm['qty_conversi'], 'StockConversionQtyStock' => $prm['selected_item']['qty_stock'], 'StockConversionUserID' => $userid, 'StockConversionCreated' => date("Y-m-d H:i:s"), 'StockConversionLastUpdated' => date("Y-m-d H:i:s") ); $valid_ed = $this->validateDate($prm['selected_item']['stock_ed'])?$prm['selected_item']['stock_ed']:NULL; if($valid_ed && $prm['selected_item']['stock_ed'] != '0000-00-00') $arr_insert_detail['StockConversionED'] = $prm['selected_item']['stock_ed']; $qry = $this->db_inventory->insert('stockconversion', $arr_insert_detail); if($qry){ $last_id = $this->db_inventory->insert_id(); } else{ $this->sys_error_db("save stockconversion error", $this->db_inventory->last_query()); exit; } //start stockcard out $sql = "SELECT * FROM stock WHERE StockID = ?"; $qry = $this->db_inventory->query($sql, array( $prm['selected_item']['stock_id'] )); if(!$qry){ $this->sys_error_db("select stock error", $this->db_inventory->last_query()); exit; } $data_last_stock = $qry->row_array(); $last_stock = $data_last_stock['StockQty']; $value = $prm['selected_item']; $warehouse_id = $prm['warehouse']['id']; $arr_insert_stockcard = array( 'StockCardWarehouseID' => $warehouse_id, 'StockCardItemID' => $value['item_id'], 'StockCardItemUnitID' => $value['unit_id'], 'StockCardBatchNo' => $value['batch_no'], 'StockCardBefore' => $last_stock, 'StockCardIn' => 0, 'StockCardOut' => $prm['qty_conversi'], 'StockCardAfter' => $last_stock-intval($prm['qty_conversi']), 'StockCardDatetime' => date("Y-m-d H:i:s"), 'StockCardUserID' => $userid, 'StockCardStatus' => 'CUO', 'StockCardReffID' => $last_id ); $valid_ed = $this->validateDate($data_last_stock['StockED'])?$data_last_stock['StockED']:NULL; if($valid_ed && $data_last_stock['StockED'] != '0000-00-00') $arr_insert_stockcard['StockCardED'] = $data_last_stock['StockED']; $qry = $this->db_inventory->insert('stockcard', $arr_insert_stockcard); if(!$qry){ //echo $this->db_inventory->last_query(); $this->sys_error_db("insert stockcard error", $this->db_inventory->last_query()); exit; } //end stockcard out // start update stock out $sql = "UPDATE stock SET StockQty = StockQty - {$prm['qty_conversi']} WHERE StockID = ?"; $qry = $this->db_inventory->query($sql, array( $prm['selected_item']['stock_id'] )); //echo $this->db_inventory->last_query(); if(!$qry){ //echo $this->db_inventory->last_query(); $this->sys_error_db("update stock error", $this->db_inventory->last_query()); exit; } // end update stock out //start stockcard in $sql = "SELECT * FROM stock WHERE StockWarehouseID = ? AND StockWarehouseAlmariID = ? AND StockWarehouseRackID = ? AND StockStockNumber = ? AND StockItemID = ? AND StockItemUnitID = ? AND StockBatchNo = ? AND StockED = ? "; $qry = $this->db_inventory->query($sql, array( $prm['warehouse']['id'], $value['almari_id'], $value['rack_id'], $value['stock_number'], $value['item_id'], $prm['selected_unit_conversion']['to_unit_id'], $value['batch_no'], $value['stock_ed'] )); if(!$qry){ $this->sys_error_db("select stock error", $this->db_inventory->last_query()); exit; } //echo $this->db_inventory->last_query(); $data_last_stock = $qry->row_array(); //print_r($data_last_stock); if($data_last_stock ) $last_stock = $data_last_stock['StockQty']; else $last_stock = 0; $qty_in = intval($prm['qty_conversi']) * intval($prm['selected_unit_conversion']['amount']); $qty_after = $last_stock + $qty_in ; $arr_insert_stockcard = array( 'StockCardWarehouseID' => $warehouse_id, 'StockCardItemID' => $value['item_id'], 'StockCardItemUnitID' => $prm['selected_unit_conversion']['to_unit_id'], 'StockCardBatchNo' => $value['batch_no'], 'StockCardBefore' => $last_stock, 'StockCardIn' => $qty_in, 'StockCardOut' => 0, 'StockCardAfter' => $qty_after, 'StockCardDatetime' => date("Y-m-d H:i:s"), 'StockCardUserID' => $userid, 'StockCardStatus' => 'CUI', 'StockCardReffID' => $last_id ); $valid_ed = $this->validateDate($value['stock_ed'])?$value['stock_ed']:NULL; if($valid_ed && $value['stock_ed'] != '0000-00-00') $arr_insert_stockcard['StockCardED'] = $value['stock_ed']; $qry = $this->db_inventory->insert('stockcard', $arr_insert_stockcard); if(!$qry){ //echo $this->db_inventory->last_query(); $this->sys_error_db("insert stockcard error", $this->db_inventory->last_query()); exit; } //end stockcard in // start update stock in if($data_last_stock){ $sql = "UPDATE stock SET StockQty = StockQty + {$qty_in} WHERE StockID = ?"; $qry = $this->db_inventory->query($sql, array( $data_last_stock['StockID'] )); //echo $this->db_inventory->last_query(); if(!$qry){ //echo $this->db_inventory->last_query(); $this->sys_error_db("update stock error", $this->db_inventory->last_query()); exit; } }else{ $arr_insert_stock = array( 'StockWarehouseID' => $warehouse_id, 'StockWarehouseAlmariID' => $value['almari_id'], 'StockWarehouseRackID' => $value['rack_id'], 'StockItemID' => $value['item_id'], 'StockItemUnitID' => $prm['selected_unit_conversion']['to_unit_id'], 'StockBatchNo' => $value['batch_no'], 'StockQty' => $qty_in, 'StockLastUpdated' => date("Y-m-d H:i:s"), 'StockUserID' => $userid, 'StockStockNumber' => $value['stock_number'] ); $valid_ed = $this->validateDate($value['stock_ed'])?$value['stock_ed']:NULL; if($valid_ed && $value['stock_ed'] != '0000-00-00') $arr_insert_stock['StockED'] = $value['stock_ed']; $qry = $this->db_inventory->insert('stock', $arr_insert_stock); if(!$qry){ //echo $this->db_inventory->last_query(); $this->sys_error_db("insert stockcard error", $this->db_inventory->last_query()); exit; } } // end update stock in //start insert stocklog $arr_insert_stock = array( 'StockLogWarehouseID' => $warehouse_id, 'StockLogWarehouseAlmariID' => $value['almari_id'], 'StockLogWarehouseRackID' => $value['rack_id'], 'StockLogStockNumber' => $value['stock_number'], 'StockLogItemID' => $value['item_id'], 'StockLogItemUnitID' => $value['unit_id'], 'StockLogBatchNo' => $value['batch_no'], 'StockLogQty' => $prm['qty_conversi'], 'StockLogDatetime' => date("Y-m-d H:i:s"), 'StockLogUserID' => $userid, 'StockLogReffID' => $last_id, 'StockLogStatus' => 'CUO' ); if($valid_ed && $value['stock_ed'] != '0000-00-00') $arr_insert_stock['StockLogED'] = $value['stock_ed']; $qry = $this->db_inventory->insert('stocklog', $arr_insert_stock); if(!$qry){ //echo $this->db_inventory->last_query(); $this->sys_error_db("save stocklog error", $this->db_inventory->last_query()); exit; } $arr_insert_stock = array( 'StockLogWarehouseID' => $warehouse_id, 'StockLogWarehouseAlmariID' => $value['almari_id'], 'StockLogWarehouseRackID' => $value['rack_id'], 'StockLogStockNumber' => $value['stock_number'], 'StockLogItemID' => $value['item_id'], 'StockLogItemUnitID' => $prm['selected_unit_conversion']['to_unit_id'], 'StockLogBatchNo' => $value['batch_no'], 'StockLogQty' => $qty_in, 'StockLogDatetime' => date("Y-m-d H:i:s"), 'StockLogUserID' => $userid, 'StockLogReffID' => $last_id, 'StockLogStatus' => 'CUI' ); if($valid_ed && $value['stock_ed'] != '0000-00-00') $arr_insert_stock['StockLogED'] = $value['stock_ed']; $qry = $this->db_inventory->insert('stocklog', $arr_insert_stock); if(!$qry){ //echo $this->db_inventory->last_query(); $this->sys_error_db("save stocklog error", $this->db_inventory->last_query()); exit; } //end insert stocklog $this->db_inventory->trans_complete(); $result = array( "message" => '' ); $this->sys_ok($result); } catch (Exception $exc) { $message = $exc->getMessage(); $this->sys_error($message); } } }