column_edit_stock); unset($this->detail_stock); } $this->_basicMStockFreezeLib = kernel::single('material_basic_material_stock_freeze'); //重置冻结库存权限 $this->_isPower = kernel::single('desktop_user')->has_permission('console_reset_freeze'); } function detail_stock($product_id) { $basicMaterialSelect = kernel::single('material_basic_select'); // 保存安全库存数量 if($_POST) { $oBranchPro = app::get('ome')->model('branch_product'); $branch_id = $_POST['branch_id']; $product_ids = $_POST['product_id']; $safe_store = $_POST['safe_store']; $is_locked = $_POST['is_locked']; for($k=0;$k update( array('safe_store'=>$safe_store[$k],'is_locked'=>$is_locked[$k]), array( 'product_id'=>$product_ids[$k], 'branch_id'=>$branch_id[$k] ) ); } $sql = 'UPDATE sdb_material_basic_material_stock SET alert_store=0 WHERE bm_id='.$product_ids[$k-1]; kernel::database()->exec($sql); /*** $sql = 'UPDATE sdb_material_basic_material_stock SET alert_store=999 WHERE bm_id IN ( SELECT product_id FROM sdb_ome_branch_product WHERE product_id='.$product_ids[$k-1].' AND safe_store>(store - store_freeze + arrive_store) )'; kernel::database()->exec($sql); ***/ //冻结库存 $sql = "SELECT product_id, safe_store, store, store_freeze, arrive_store FROM sdb_ome_branch_product WHERE product_id=". $product_ids[$k-1]; $tempData = $oBranchPro->db->select($sql); if($tempData) { $bm_ids = array(); foreach ($tempData as $key => $val) { //根据基础物料ID获取对应的冻结库存 $val['store_freeze'] = $this->_basicMStockFreezeLib->getMaterialStockFreeze($val['product_id']); $safe_store = $val['store'] - $val['store_freeze'] + $val['arrive_store']; if($val['safe_store'] > $safe_store) { $bm_ids[] = $val['product_id']; } } if($bm_ids) { $sql = "UPDATE sdb_material_basic_material_stock SET alert_store=999 WHERE bm_id IN(". implode(',', $bm_ids) .")"; kernel::database()->exec($sql); } } } $render = app::get('ome')->render(); $is_super = kernel::single('desktop_user')->is_super(); if (!$is_super){ $oBranch = app::get('ome')->model('branch'); $branch_ids = $oBranch->getBranchByUser(true); $render->pagedata['branch_ids'] = $branch_ids; } $render->pagedata['pro_detail'] = $basicMaterialSelect->products_detail($product_id); return $render->fetch('admin/stock/detail_stock.html'); } /*------------------------------------------------------ */ //-- 格式化字段 /*------------------------------------------------------ */ #总库存 var $column_store = '总库存'; var $column_store_width = 80; var $column_store_order = 80; function column_store($row,$list) { $bmstocklist = $this->getbmStocklist($list); $bm_id = $row['bm_id']; $this->bmStock[$bm_id]['store'] = (int) $bmstocklist[$bm_id]['store']; $this->bmStock[$row['bm_id']]['store_freeze'] = (int)$bmstocklist[$bm_id]['store_freeze']; return $this->bmStock[$row['bm_id']]['store']; } #良品库存 /* var $column_good_store = '良品库存'; var $column_good_store_width = 80; var $column_good_store_order = 85; function column_good_store($row){ $good_store = $this->_basicMStockFreezeLib->getMaterialGoodStore($row['bm_id']); return $good_store; }*/ #良品库存 var $column_good_store = '大仓良品库存'; var $column_good_store_width = 95; var $column_good_store_order = 85; function column_good_store($row,$list){ $bm_id = $row['bm_id']; $good_stores = $this->getMaterialWarehouseStorelist($list); return $good_stores[$bm_id]['total']? $good_stores[$bm_id]['total'] : 0; } //仓库冻结库存 var $column_branch_store_freeze = '大仓冻结'; var $column_branch_store_freeze_width = 70; var $column_branch_store_freeze_order = 5; function column_branch_store_freeze($row,$list) { $bm_id = $row['bm_id']; $store_freezes = $this->getWareBranchFreezelist($list); return $store_freezes[$bm_id]['total']? $store_freezes[$bm_id]['total'] :0; } var $column_valid_store = '大仓可售库存';//公式:大仓良品库存 - 大仓冻结-店铺冻结 var $column_valid_store_width = 95; var $column_valid_store_order = 7; function column_valid_store($row,$list){ $bm_id = $row['bm_id']; $good_stores = $this->getMaterialWarehouseStorelist($list); $store_freezes = $this->getWareBranchFreezelist($list); $shop_freezes = $this->getShopFreezelist($list); $warehouse_store = $good_stores[$bm_id]['total']; $branch_freeze = $store_freezes[$bm_id]['total']; $shop_freeze = $shop_freezes[$bm_id]['total']; return $warehouse_store - $branch_freeze-$shop_freeze; } #良品库存 var $column_o2o_store = '门店库存'; var $column_o2o_store_width = 70; var $column_o2o_store_order = 9; function column_o2o_store($row,$list){ $bm_id = $row['bm_id']; $good_stores = $this->getMaterialO2oStorelist($list); $good_store = $good_stores[$bm_id]['total']; return $good_store ? $good_store : 0; } //仓库冻结库存 var $column_o2o_store_freeze = '门店冻结'; var $column_o2o_store_freeze_width = 70; var $column_o2o_store_freeze_order = 11; function column_o2o_store_freeze($row,$list) { $shop_freezes = $this->getStoreBranchFreezelist($list); $bm_id = $row['bm_id']; $store_freeze = $shop_freezes[$bm_id]['total']; return $store_freeze ? $store_freeze : 0; } //总冻结库存 var $column_store_freeze = '总冻结'; var $column_store_freeze_width = 60; var $column_store_freeze_order = 90; function column_store_freeze($row,$list) { $finder_id = $_GET['_finder']['finder_id']; //重置冻结库存 $linkUrl = $this->bmStock[$row['bm_id']]['store_freeze']; if($this->_isPower){ $linkUrl = "". $this->bmStock[$row['bm_id']]['store_freeze'] .""; } return $linkUrl; } //订单冻结库存 var $column_order_store_freeze = '订单冻结'; var $column_order_store_freeze_width = 70; var $column_order_store_freeze_order = 12; function column_order_store_freeze($row,$list) { $bm_id = $row['bm_id']; $shop_freezes = $this->getShopFreezelist($list); $store_freeze = $shop_freezes[$bm_id]['total']; return $store_freeze ? $store_freeze : 0; } #在途库存 var $column_arrive_store='在途库存'; var $column_arrive_store_width='60'; var $column_arrive_store_order = 100;//排在列尾 function column_arrive_store($row,$list) { $finder_id = $_GET['_finder']['finder_id']; $bm_id = $row['bm_id']; $arrive_storelist = $this->getMaterialArriveStorelist($list); $arrive_store = $arrive_storelist[$bm_id]['total']; //重置在途库存 $linkUrl = $arrive_store; if($this->_isPower){ $linkUrl = "".$arrive_store.""; } return $linkUrl; } /*------------------------------------------------------ */ //-- 显示行样式[粗体:highlight-row] //-- [加绿:list-even 加黄:selected 加红:list-warning] /*------------------------------------------------------ */ /** * row_style * @param mixed $row row * @return mixed 返回值 */ public function row_style($row) { $has = app::get('ome')->model('branch_product')->dump(array('product_id'=>$row['bm_id'], 'filter_sql'=>'(safe_store+store_freeze)>(store+CAST(arrive_store AS SIGNED))'), 'product_id'); if(!empty($has)){ return 'list-warning'; } if($row[$this->col_prefix.'alert_store']==999){ return 'list-warning'; } } /** * 获取bmStocklist * @param mixed $list list * @return mixed 返回结果 */ public function getbmStocklist($list){ static $bmstocklist; if(isset($bmstocklist)) { return $bmstocklist; } $stockMdl = app::get('material')->model('basic_material_stock'); $bm_ids = array_column($list,'bm_id'); if($bm_ids){ $stocks = $stockMdl->getlist('store,store_freeze,bm_id',array('bm_id'=>$bm_ids)); $bmstocklist = $stocks ? array_column($stocks,null,'bm_id') : array(); return $bmstocklist; } } /** * 获取MaterialWarehouseStorelist * @param mixed $list list * @return mixed 返回结果 */ public function getMaterialWarehouseStorelist($list){ static $warehousestorelist; if(isset($warehousestorelist)){ return $warehousestorelist; } $bm_ids =array_column($list,'bm_id'); if(empty($bm_ids)){ return false; } $filter_str = "product_id in (".implode(",", $bm_ids).") and store_id=0"; $mdl_ome_branch = app::get('ome')->model('branch'); $branchList = $mdl_ome_branch->db->select("SELECT branch_id FROM sdb_ome_branch WHERE (type='damaged' or (type='main' and online='false') ) "); if(!empty($branchList)){ $damaged_branch_ids = array(); foreach($branchList as $var_branch){ $damaged_branch_ids[] = $var_branch["branch_id"]; } $filter_str.= " and branch_id not in(".implode(",", $damaged_branch_ids).")"; } $sql = "SELECT SUM(store) AS 'total',product_id FROM ".DB_PREFIX."ome_branch_product WHERE ".$filter_str.' group by product_id'; $products = kernel::database()->select($sql); $warehousestorelist = $products ? array_column($products,null,'product_id') : array(); return $warehousestorelist; } /** * 根据基础物料bm_id获取该物料仓库级的预占 * * @param Int $bm_id 基础物料ID * @param Array $branch_ids 仓库 * @return number */ public function getWareBranchFreezelist($list){ static $warebranchfreezelist; if(isset($warebranchfreezelist)){ return $warebranchfreezelist; } $bm_ids =array_column($list,'bm_id'); if(empty($bm_ids)){ return false; } $bill_type = $this->_basicMStockFreezeLib::__ORDER_YOU; $sql = "SELECT sum(num) as total,bm_id FROM sdb_material_basic_material_stock_freeze WHERE bm_id in (".implode(",", $bm_ids).") AND (obj_type=2 || (obj_type=1 AND bill_type=".$bill_type."))"; $branch_ids = $this->_basicMStockFreezeLib->getWarehouseBranch(); //仓库条件 if($branch_ids && is_array($branch_ids)){ $sql .= " AND branch_id IN(". implode(',', $branch_ids) .")"; } $sql.=" group by bm_id"; //仓库冻结总数 $freezes = kernel::database()->select($sql); $warebranchfreezelist = $freezes ? array_column($freezes,null,'bm_id') : array(); return $warebranchfreezelist; } //店铺冻结 /** * 获取ShopFreezelist * @param mixed $list list * @return mixed 返回结果 */ public function getShopFreezelist($list){ static $shopfreezelist; if(isset($shopfreezelist)){ return $shopfreezelist; } $bm_ids =array_column($list,'bm_id'); if(empty($bm_ids)){ return false; } $bill_type = $this->_basicMStockFreezeLib::__ORDER_YOU; $result =kernel::database()->select("SELECT sum(num) as total,bm_id FROM sdb_material_basic_material_stock_freeze WHERE bm_id in (".implode(",", $bm_ids).") AND obj_type=1 AND bill_type<>".$bill_type." group by bm_id"); $shopfreezelist = $result ? array_column($result,null,'bm_id') : array(); return $shopfreezelist; } //o2o仓库列表 /** * 获取MaterialO2oStorelist * @param mixed $list list * @return mixed 返回结果 */ public function getMaterialO2oStorelist($list){ static $o2ostores; if(isset($o2ostores)){ return $o2ostores; } $bm_ids =array_column($list,'bm_id'); if(empty($bm_ids)){ return false; } $filter_str = "product_id in(".implode(",", $bm_ids).") and store_id>0 "; $sql = "SELECT SUM(store) AS 'total',product_id FROM sdb_ome_branch_product WHERE ".$filter_str." group by product_id"; $result = kernel::database()->select($sql); $o2ostores = $result ? array_column($result,null,'product_id') : array(); return $o2ostores; } /** * 在途库存 * */ public function getMaterialArriveStorelist($list){ static $arrivestores; if(isset($arrivestores)){ return $arrivestores; } $bm_ids =array_column($list,'bm_id'); if(empty($bm_ids)){ return false; } $sql = "SELECT SUM(arrive_store) AS 'total',product_id FROM sdb_ome_branch_product WHERE product_id in (".implode(",", $bm_ids).") group by product_id"; $result = kernel::database()->select($sql); $arrivestores = $result ? array_column($result,null,'product_id'):array(); return $arrivestores; } /** * 门店冻结 * */ public function getStoreBranchFreezelist($list){ static $storebranchfreezes; if(isset($storebranchfreezes)){ return $storebranchfreezes; } $bm_ids =array_column($list,'bm_id'); if(empty($bm_ids)){ return false; } $sql = "SELECT sum(num) as total,bm_id FROM sdb_material_basic_material_stock_freeze WHERE bm_id in(".implode(",", $bm_ids).") AND obj_type=2"; $branch_ids = $this->_basicMStockFreezeLib->getWarehouseBranch(); //仓库条件 if($branch_ids && is_array($branch_ids)){ $sql .= " AND branch_id not IN(". implode(',', $branch_ids) .")"; } $sql.=" group by bm_id"; //仓库冻结总数 $result = kernel::database()->select($sql); $storebranchfreezes = $result ? array_column($result,null,'bm_id'):array(); return $storebranchfreezes; } }