'导入模板',
'href' => $this->url.'&act=downloadCpfrTmpl',
'target' => '_blank',
);
$actions[] = array(
'label' => '导入配货',
'href' => $this->url . '&act=cpfrImport',
'target' => "dialog::{width:550,height:350,title:'导入配货'}",
);
$params = array(
'title' => '配货单列表',
'use_buildin_new_dialog' => false,
'use_buildin_set_tag' => false,
'use_buildin_recycle' => false,
'use_buildin_export' => false,
'use_buildin_import' => false,
'use_buildin_filter' => true,
'actions' => $actions,
'orderBy' => 'cpfr_id desc',
);
$this->finder('console_mdl_cpfr', $params);
}
/**
* 一键补发
*
* @return void
* @author
* */
public function cpfrImport()
{
$this->display('admin/stock/cpfr_import.html');
}
/**
* 下载渠道库存模板
*
* @return void
* @author
* */
public function downloadCpfrTmpl()
{
set_time_limit(0);
@ini_set('memory_limit', '512M');
$data = array(
array(
'A1' => '*:SKUID',
'B1' => '发货仓库',
'C1' => '*:配货数量',
'D1' => '*:店仓代码',
'F1' => '*:备注',
),
array(
'A2' => 'test001',
'B2' => 'qimen',
'C2' => '1',
'D2' => 'md001',
'F2' => '',
),
array(
'A3' => 'test002',
'B3' => 'qimen',
'C3' => '2',
'D3' => 'md002',
'F3' => '',
),
);
kernel::single('omecsv_phpexcel')->newExportExcel($data, '配货单导入', 'xls');
}
/**
* 导入一键补发数据
*
* @return void
* @author
* */
public function importCpfrData()
{
ini_set('memory_limit','1G');
$filename = $_FILES['import_file']['tmp_name'];
if (!$filename) {
$this->splash('error', null, '未上传文件');
}
if (!in_array(pathinfo($_FILES['import_file']['name'], PATHINFO_EXTENSION), ['xls', 'xsl', 'xlsx'])) {
$this->splash('error', null, '请上传xls文件类型');
}
// 读取文件
try {
kernel::single('omecsv_io_io')->fgethandle($filename,$data);
if (!$data[0]) {
$this->splash('error', null, '文件内容为空');
}
foreach ($data as $key => $value) {
unset($data[$key]);
if ($value[0] == '*:SKUID') {
$title = $value;
break;
}
}
//导入的bn
$bn_list = array_filter(array_column($data, 0));
if (!$bn_list) {
$this->splash('error', null, '基础物料编码不能为空');
}
$branch_bns = array_column($data, 1);
$branch_lists = app::get('ome')->model('branch')->getList('branch_bn,branch_id', array('branch_bn' => $branch_bns,'check_permission'=>'false'));
if(count($branch_lists)>1){
$this->splash('error', null, '出库仓只支持一个');
}
$branch_list = array_column($branch_lists, null, 'branch_bn');
$branch_idlist = array_column($branch_lists, null, 'branch_id');
$branch_ids = array_column($branch_lists, 'branch_id');
$store_bns = array_column($data, 3);
$store_list = app::get('o2o')->model('store')->getList('store_id,store_bn,branch_id', array('store_bn' => $store_bns));
$store_list = array_column($store_list, null, 'store_bn');
$bm_list = app::get('material')->model('basic_material')->getList('material_name,material_bn,bm_id', array('material_bn' => $bn_list));
if (!$bm_list) {
$this->splash('error', null, '基础物料编码不存在');
}
$bm_list = array_column($bm_list, null, 'material_bn');
$bm_id_list = array_column($bm_list, 'bm_id');
// 库存判断
$bpMdl = app::get('ome')->model('branch_product');
$product_store =$bpMdl->getList('product_id,branch_id,store,store_freeze', array('product_id' =>$bm_id_list, 'branch_id' => $branch_ids));
$product_store = array_column($product_store, null, 'product_id');
$bp_list = array();
$msg = [];
$items = array();
foreach ($data as $key => $value) {
$row = $value;
$material_bn = array_shift($row);
$branch_bn = array_shift($row);
$num = array_shift($row);
$store_bn = array_shift($row);
$store = $store_list[$store_bn] ? $store_list[$store_bn] : '';
if(!$store){
$this->splash('error', null, sprintf('[%s]门店不存在', $store_bn));
}
if (!is_numeric($num) || $num <= 0) {
$num = 0;
}
$bm = $bm_list[$material_bn];
if (!$bm) {
$this->splash('error', null, sprintf('[%s]基础物料不存在', $material_bn));
}
$pstores = $product_store[$bm['bm_id']];
if($pstores['store']<$num){
$this->splash('error', null, sprintf('[%s]库存不足', $material_bn));
}
$branch_id = $branch_list[$branch_bn]['branch_id'];
$to_branch_id = $store['branch_id'];
$items[$to_branch_id][$material_bn]['num'] = $num;
$items[$to_branch_id][$material_bn]['branch_id'] = $branch_id;
$items[$to_branch_id][$material_bn]['product_id'] = $bm['bm_id'];
$items[$to_branch_id][$material_bn]['store_bn'] = $store_bn;
$items[$to_branch_id][$material_bn]['to_branch_id']= $store['branch_id'] ? $store['branch_id'] : 0;
}
$operator = kernel::single('desktop_user')->get_name();
$branch_id = $branch_lists[0]['branch_id'];
$branchs= $branch_idlist[$branch_id];
// 插入到配货表
$cpfr_data = array(
'cpfr_bn' => uniqid(date('YmdHi')),
'cpfr_name' => $_FILES['import_file']['name'],
'store_total' => count($items),
'create_time' => time(),
'operator' => $operator,
'branch_id' => $branch_id,
'branch_bn' => $branchs['branch_bn'],
);
$cpfr_data_items = array();
$sku_total = $num_total = $original_total = 0;
foreach($items as $k=>$item){
$cpfrMdl = app::get('console')->model('cpfr');
foreach ($item as $bn => $r) {
$cpfr_data_items[] = array(
'bn' => $bn,
'product_id' => $r['product_id'],
'num' => $r['num'],
'store_bn' => $r['store_bn'],
'to_branch_id' => $r['to_branch_id'],
);
if ($r['num'] < 0) {
unset($items[$store_bn][$bn]);
continue;
}
$num_total += $r['num'];
$sku_total++;
}
}
$cpfr_data['sku_total'] = $sku_total;
$cpfr_data['original_total']=$cpfr_data['num_total'] = $num_total;
if (!$cpfrMdl->insert($cpfr_data)) {
$this->splash('error', null, '单据添加失败');
}
$cpfrItemMdl = app::get('console')->model('cpfr_items');
foreach($cpfr_data_items as &$v){
$v['cpfr_id'] = $cpfr_data['cpfr_id'];
}
$sql = ome_func::get_insert_sql($cpfrItemMdl, $cpfr_data_items);
if (!kernel::database()->exec($sql)) {
$this->splash('error', null, '渠道库存明细生成失败');
}
$msg = implode('
', $msg);
$finder_id = $_GET['finder_id'];
header("content-type:text/html; charset=utf-8");
echo <<
alert("上传成功");
parent.\$E('#import-form .error').set('html',"部分导入失败:
$msg");
if ("$msg") {
parent.\$E('#import-form .error').show();
} else {
parent.\$E('#import-form').getParent('.dialog').retrieve('instance').close();
if (window.finderGroup && window.finderGroup["$finder_id"]) {
window.finderGroup["$finder_id"].refresh();
}else{
parent.location.reload();
}
}
JS;
} catch (Exception $e) {
$this->splash('error', null, '文件读取失败:' . $e->getMessage());
}
}
/**
* sortRegions
* @param mixed $region_names region_names
* @return mixed 返回值
*/
public function sortRegions($region_names){
$region_names = explode(',',$region_names);
sort($region_names);
$region_names = implode(',',$region_names);
return $region_names;
}
/**
* 获取配货单明细
*/
public function getItems($cpfr_id)
{
if(empty($cpfr_id)){
return '';
}
$cpfrItemsObj = app::get('console')->model('cpfr_items');
//配货单明细
$dataList = $cpfrItemsObj->getList('*', array('cpfr_id'=>$cpfr_id));
if(empty($dataList)){
return '';
}
//format
$branchList = array();
foreach ($dataList as $key => $val)
{
$to_branch_id = intval($val['to_branch_id']);
if(empty($branchList[$to_branch_id])){
$sql = "SELECT branch_id,branch_bn,name FROM sdb_ome_branch WHERE branch_id=".$to_branch_id;
$tempInfo = $cpfrItemsObj->db->selectrow($sql);
if($tempInfo){
$branchList[$to_branch_id] = $tempInfo;
}
}
$dataList[$key]['branch_name'] = $branchList[$to_branch_id]['name'];
}
echo(json_encode($dataList));
}
/**
* singleConfirm
* @param mixed $cpfr_id ID
* @return mixed 返回值
*/
public function singleConfirm($cpfr_id){
$cpfrMdl = app::get('console')->model('cpfr');
$cpfrs = $cpfrMdl->db_dump(array('cpfr_id'=>$cpfr_id),'cpfr_id,cpfr_bn,bill_status,adjust_type');
if(!$cpfrs || !in_array($cpfrs['bill_status'],array('1')) || $cpfrs['adjust_type']!='import'){
$this->splash('error', $this->url, '确认失败:没有需要操作的配货单');
}
$data = [
'cpfr_bn' => $cpfrs['cpfr_bn'],
'cpfr_id' => $cpfrs['cpfr_id'],
];
$rs = kernel::single('console_replenish')->createAppropriation($data,$error_msg);
if(!$rs) {
$this->splash('error', $this->url, '确认失败:'.$error_msg);
}
$this->splash('success', $this->url, '确认成功');
}
}