io_title($filter) as $v){ $title[] = kernel::single('base_charset')->utf2local($v); } return $title; } function io_title($filter){ switch( $filter ){ case 'adjust': default: $this->oSchema['csv'][$filter] = array( '*:货号' =>'', '*:货品名称' =>'', '*:仓库编号' =>'', '*:调整到的数量' =>'', '*:备注' =>'', ); break; } return $this->ioTitle['csv'][$filter] = array_keys( $this->oSchema['csv'][$filter] ); } function prepared_import_csv_row($row,$title,&$tmpl,&$mark,&$newObjFlag,&$msg) { $basicMaterialObj = app::get('material')->model('basic_material'); $basicMStockFreezeLib = kernel::single('material_basic_material_stock_freeze'); $this->aa++; $mark = false; $fileData = $this->kvdata; if( !$fileData ) $fileData = array(); if( substr($row[0],0,2) == '*:' ){ $titleRs = array_flip($row); $mark = 'title'; return $titleRs; }else{ $bn = trim($row[0]); $branch_bn = $row[2]; $nums = $row[3]; $memo = $row[4]; if ($bn && $branch_bn && ($nums>=0)) { //判断货号是否存在 $oBranch_product = app::get('ome')->model('branch_product'); $products = $basicMaterialObj->dump(array('material_bn'=>$bn), 'bm_id, material_bn'); if(!$products){ $msg['error'] = '货号不存在 '.$bn; return false; } //判断仓库编号是否存在 $branchObj = app::get('ome')->model('branch'); $branch = $branchObj->dump(array('branch_bn'=>$branch_bn),'branch_id,branch_bn'); if( ! $branch){ $msg['error']= '编号 '.$branch_bn.' 仓库不存在 '; return false; } //判断数量是否合法 if($nums < 0){ $msg['error'] = '货号 '.$bn.' 数量应为正整数 '; return false; } $branch_product = $oBranch_product->dump(array('branch_id'=>$branch['branch_id'],'product_id'=>$products['bm_id']),'store,store_freeze'); //根据仓库ID、基础物料ID获取该物料仓库级的预占 $branch_product['store_freeze'] = $basicMStockFreezeLib->getBranchFreeze($products['bm_id'], $branch['branch_id']); if($branch_product['store_freeze'] > $nums){ $msg['error'] = '货号 '.$bn.' 冻结大于调整数量 '; return false; } if(empty($branch_product)){ $branch_product['store'] = 0; $branch_product['store_freeze'] = 0; } $diff_nums = $branch_product['store']-$nums; if($diff_nums == 0){ $msg['error'] = '货号 '.$bn.' 库存数量无差异变化 '; return false; } $type = $diff_nums < 0 ? "IN" : "OUT"; $fileData[$type][] = array( 'product_id'=>$products['bm_id'], 'bn' =>$bn, 'branch_id'=>$branch['branch_id'], 'nums' =>abs($diff_nums), 'memo'=>$memo, ); } $this->kvdata = $fileData; } return null; } function prepared_import_csv(){ set_time_limit(0); } function finish_import_csv(){ $oQueue = app::get('base')->model('queue'); $data = $this->kvdata; unset($this->kvdata); $oBranch_product = app::get('ome')->model('branch_product'); $adjustout = array(); $adjustin = array(); foreach ($data as $k=>$v ) { $iostockData = array(); if ($k == 'IN') { $adjustLib = kernel::single('siso_receipt_iostock_stockin'); $adjustLib->_typeId = 8; }else{ $adjustLib = kernel::single('siso_receipt_iostock_stockout'); $adjustLib->_typeId = 80; } $iostockData['items'] = $v; $adjustLib->create($iostockData, $createdata, $msg); } return null; } }