mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-31 13:25:32 +08:00
420 lines
15 KiB
PHP
420 lines
15 KiB
PHP
<?php
|
||
/**
|
||
* Copyright © ShopeX (http://www.shopex.cn). All rights reserved.
|
||
* See LICENSE file for license details.
|
||
*/
|
||
|
||
/**
|
||
* 门店供货管理
|
||
*
|
||
* @author wangbiao@shopex.cn
|
||
* @version 0.1
|
||
*/
|
||
class wap_ctl_branch_product extends wap_controller
|
||
{
|
||
var $delivery_link = array();
|
||
var $branch_id = array();
|
||
|
||
function __construct($app)
|
||
{
|
||
parent::__construct($app);
|
||
|
||
$this->delivery_link['index'] = app::get('wap')->router()->gen_url(array('ctl'=>'store','act'=>'index'), true);
|
||
$this->delivery_link['mine'] = app::get('wap')->router()->gen_url(array('ctl'=>'user','act'=>'mine'), true);
|
||
|
||
$this->pagedata['delivery_link'] = $this->delivery_link;
|
||
|
||
//管辖的仓库
|
||
$is_super = kernel::single('desktop_user')->is_super();
|
||
if(!$is_super)
|
||
{
|
||
$branchObj = kernel::single('o2o_store_branch');
|
||
$branch_ids = $branchObj->getO2OBranchByUser(true);
|
||
if(empty($branch_ids))
|
||
{
|
||
$this->pagedata['link_url'] = $this->delivery_link['index'];
|
||
$this->pagedata['error_msg'] = '操作员没有管辖的仓库';
|
||
echo $this->fetch('auth_error.html');
|
||
exit;
|
||
}
|
||
|
||
$this->branch_id = $branch_ids[0];
|
||
}
|
||
}
|
||
|
||
/**
|
||
* is_bind 1:已绑定 0:未绑定
|
||
*/
|
||
function _views_supply($curr_view)
|
||
{
|
||
$storeObj = app::get('o2o')->model('store');
|
||
|
||
$base_filter = array('branch_id'=>$this->branch_id);
|
||
|
||
$page = intval($_POST['page']) ? intval($_POST['page']) : 0;
|
||
$limit = 10;//默认显示10条
|
||
$offset = $limit * $page;
|
||
|
||
$sub_menu = array(
|
||
'all' => array('label'=>app::get('base')->_('全部'), 'href'=>app::get('wap')->router()->gen_url(array('ctl'=>'branch_product','act'=>'index'), true)),
|
||
'unrelation' => array('label'=>app::get('base')->_('未关联'), 'href'=>app::get('wap')->router()->gen_url(array('ctl'=>'branch_product','act'=>'unrelation'), true)),
|
||
'relation' => array('label'=>app::get('base')->_('已关联'), 'href'=>app::get('wap')->router()->gen_url(array('ctl'=>'branch_product','act'=>'relation'), true)),
|
||
);
|
||
|
||
foreach($sub_menu as $k=>$v)
|
||
{
|
||
//Ajax加载下一页数据,只处理本页
|
||
if($_POST['flag'] == 'ajax' && $curr_view != $k)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
$sub_menu[$k]['offset'] = $offset;
|
||
$sub_menu[$k]['limit'] = $limit;
|
||
|
||
if($k == $curr_view){
|
||
$sub_menu[$k]['curr_view'] = true;
|
||
}else{
|
||
$sub_menu[$k]['curr_view'] = false;
|
||
}
|
||
}
|
||
|
||
return $sub_menu;
|
||
}
|
||
|
||
/**
|
||
* 供货管理
|
||
*/
|
||
function index()
|
||
{
|
||
$this->store_type = 'all';
|
||
|
||
$sub_menu = $this->_views_supply($this->store_type);
|
||
$offset = $sub_menu[$this->store_type]['offset'];
|
||
$limit = $sub_menu[$this->store_type]['limit'];
|
||
|
||
$branchProObj = app::get('o2o')->model('branch_product');
|
||
|
||
//filter
|
||
$where = 'WHERE a.visibled=1';
|
||
|
||
if($_POST['sel_type'] && $_POST['sel_keywords'])
|
||
{
|
||
switch ($_POST['sel_type'])
|
||
{
|
||
case 'item_bn':
|
||
$where .= " AND a.material_bn='". htmlspecialchars(trim($_POST['sel_keywords'])) ."'";
|
||
break;
|
||
case 'item_name':
|
||
$where .= " AND a.material_name like '%". htmlspecialchars(trim($_POST['sel_keywords'])) ."'%";
|
||
break;
|
||
}
|
||
}
|
||
|
||
//count
|
||
$c_sql = "SELECT count(*) AS num FROM sdb_material_basic_material as a ". $where;
|
||
$count = $branchProObj->db->selectrow($c_sql);
|
||
$count = $count['num'];
|
||
|
||
$pageSize = ceil($count / $limit);
|
||
|
||
//门店供货列表
|
||
$sql = "SELECT a.bm_id, a.material_bn, a.material_name FROM sdb_material_basic_material as a ". $where ."
|
||
ORDER BY a.bm_id DESC LIMIT ". $offset .", ". $limit;
|
||
$dataList = $branchProObj->db->select($sql);
|
||
if($dataList)
|
||
{
|
||
foreach ($dataList as $key => $val)
|
||
{
|
||
//供货记录
|
||
$row = $branchProObj->dump(array('branch_id'=>$this->branch_id, 'bm_id'=>$val['bm_id']), 'id');
|
||
if($row)
|
||
{
|
||
$dataList[$key]['is_relate'] = true;
|
||
}
|
||
else
|
||
{
|
||
$dataList[$key]['is_relate'] = false;
|
||
}
|
||
}
|
||
}
|
||
|
||
$this->pagedata['dataList'] = $dataList;
|
||
$this->pagedata['sub_menu'] = $sub_menu;
|
||
$this->pagedata['pageSize'] = $pageSize;
|
||
|
||
$this->pagedata['link_url'] = $sub_menu[$this->store_type]['href'];
|
||
|
||
if($offset > 0)
|
||
{
|
||
//Ajax加载更多
|
||
$this->display('store/supply_more.html');
|
||
}
|
||
else
|
||
{
|
||
$this->display('store/supply.html');
|
||
}
|
||
}
|
||
|
||
//未关联
|
||
function unrelation()
|
||
{
|
||
$this->store_type = 'unrelation';
|
||
|
||
$sub_menu = $this->_views_supply($this->store_type);
|
||
$offset = $sub_menu[$this->store_type]['offset'];
|
||
$limit = $sub_menu[$this->store_type]['limit'];
|
||
|
||
$branchProObj = app::get('o2o')->model('branch_product');
|
||
|
||
//filter
|
||
$where = 'WHERE a.visibled=1 AND b.id is null';
|
||
|
||
if($_POST['sel_type'] && $_POST['sel_keywords'])
|
||
{
|
||
switch ($_POST['sel_type'])
|
||
{
|
||
case 'item_bn':
|
||
$where .= " AND a.material_bn='". htmlspecialchars(trim($_POST['sel_keywords'])) ."'";
|
||
break;
|
||
case 'item_name':
|
||
$where .= " AND a.material_name like '%". htmlspecialchars(trim($_POST['sel_keywords'])) ."'%";
|
||
break;
|
||
}
|
||
}
|
||
|
||
//count
|
||
$c_sql = "SELECT count(*) AS num FROM sdb_material_basic_material as a
|
||
LEFT JOIN sdb_o2o_branch_product AS b ON a.bm_id=b.bm_id ". $where;
|
||
$count = $branchProObj->db->selectrow($c_sql);
|
||
$count = $count['num'];
|
||
|
||
$pageSize = ceil($count / $limit);
|
||
|
||
//门店供货列表
|
||
$sql = "SELECT a.bm_id, a.material_bn, a.material_name FROM sdb_material_basic_material as a
|
||
LEFT JOIN sdb_o2o_branch_product AS b ON a.bm_id=b.bm_id ". $where ."
|
||
ORDER BY a.bm_id DESC LIMIT ". $offset .", ". $limit;
|
||
$dataList = $branchProObj->db->select($sql);
|
||
|
||
$this->pagedata['dataList'] = $dataList;
|
||
$this->pagedata['sub_menu'] = $sub_menu;
|
||
$this->pagedata['pageSize'] = $pageSize;
|
||
|
||
$this->pagedata['active'] = $this->store_type;
|
||
$this->pagedata['link_url'] = $sub_menu[$this->store_type]['href'];
|
||
$this->pagedata['relate_url'] = app::get('wap')->router()->gen_url(array('ctl'=>'branch_product','act'=>'saveRelate'), true);
|
||
|
||
if($offset > 0)
|
||
{
|
||
//Ajax加载更多
|
||
$this->display('store/supply_more.html');
|
||
}
|
||
else
|
||
{
|
||
$this->display('store/supply_unrelation.html');
|
||
}
|
||
}
|
||
|
||
//已关联
|
||
function relation()
|
||
{
|
||
$this->store_type = 'relation';
|
||
|
||
$sub_menu = $this->_views_supply($this->store_type);
|
||
$offset = $sub_menu[$this->store_type]['offset'];
|
||
$limit = $sub_menu[$this->store_type]['limit'];
|
||
|
||
$branchProObj = app::get('o2o')->model('branch_product');
|
||
|
||
//filter
|
||
$where = "WHERE a.branch_id=". $this->branch_id;
|
||
|
||
if($_POST['sel_type'] && $_POST['sel_keywords'])
|
||
{
|
||
switch ($_POST['sel_type'])
|
||
{
|
||
case 'item_bn':
|
||
$where .= " AND b.material_bn='". htmlspecialchars(trim($_POST['sel_keywords'])) ."'";
|
||
break;
|
||
case 'item_name':
|
||
$where .= " AND b.material_name like '%". htmlspecialchars(trim($_POST['sel_keywords'])) ."'%";
|
||
break;
|
||
}
|
||
}
|
||
|
||
//count
|
||
$c_sql = "SELECT count(*) AS num FROM sdb_o2o_branch_product as a
|
||
LEFT JOIN sdb_material_basic_material AS b ON a.bm_id=b.bm_id ". $where;
|
||
$count = $branchProObj->db->selectrow($c_sql);
|
||
$count = $count['num'];
|
||
|
||
$pageSize = ceil($count / $limit);
|
||
|
||
//门店供货列表
|
||
$sql = "SELECT a.id, a.bm_id, a.status, b.material_bn, b.material_name FROM sdb_o2o_branch_product as a
|
||
LEFT JOIN sdb_material_basic_material AS b ON a.bm_id=b.bm_id ". $where ."
|
||
ORDER BY a.id DESC LIMIT ". $offset .", ". $limit;
|
||
$dataList = $branchProObj->db->select($sql);
|
||
|
||
$this->pagedata['dataList'] = $dataList;
|
||
$this->pagedata['sub_menu'] = $sub_menu;
|
||
$this->pagedata['pageSize'] = $pageSize;
|
||
|
||
$this->pagedata['active'] = $this->store_type;
|
||
$this->pagedata['link_url'] = $sub_menu[$this->store_type]['href'];
|
||
$this->pagedata['config_url'] = app::get('wap')->router()->gen_url(array('ctl'=>'branch_product','act'=>'setConfig'), true);
|
||
|
||
if($offset > 0)
|
||
{
|
||
//Ajax加载更多
|
||
$this->display('store/supply_more.html');
|
||
}
|
||
else
|
||
{
|
||
$this->display('store/supply_relation.html');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 关联商品
|
||
*/
|
||
function saveRelate()
|
||
{
|
||
$redirect = app::get('wap')->router()->gen_url(array('ctl'=>'branch_product','act'=>'unrelation'), true);
|
||
$bm_ids = $_POST['bm_id'];
|
||
if(empty($bm_ids))
|
||
{
|
||
echo json_encode(array('error'=>true, 'message'=>'请选择货品', 'redirect'=>null));
|
||
exit;
|
||
}
|
||
|
||
$branchProObj = app::get('o2o')->model('branch_product');
|
||
|
||
//先判断是否存在供货关系
|
||
$rs_b_p = $branchProObj->getList('bm_id', array('branch_id'=>$this->branch_id, 'bm_id'=>$bm_ids));
|
||
if(!empty($rs_b_p)){
|
||
$exist_bm_ids = array();
|
||
foreach ($rs_b_p as $var_b_p){
|
||
$exist_bm_ids[] = $var_b_p['bm_id'];
|
||
}
|
||
}
|
||
|
||
if(!empty($exist_bm_ids)){
|
||
//移除bm_ids中存在供货关系的bm_id
|
||
foreach ($bm_ids as $bk => &$var_b_i){
|
||
if(in_array($var_b_i,$exist_bm_ids)){
|
||
unset($bm_ids[$bk]);
|
||
}
|
||
}
|
||
unset($var_b_i);
|
||
}
|
||
|
||
if(empty($bm_ids)){
|
||
echo json_encode(array('error'=>true, 'message'=>'没有可供货关联的商品', 'redirect'=>null));
|
||
exit;
|
||
}
|
||
|
||
//插入数据
|
||
$branch_id = $this->branch_id;
|
||
foreach ($bm_ids as $var_bm_id)
|
||
{
|
||
$insert_sql = "insert into sdb_o2o_branch_product (`branch_id`,`bm_id`) values (". $branch_id .",". $var_bm_id .")";
|
||
$branchProObj->db->exec($insert_sql);
|
||
}
|
||
|
||
//[批量创建]淘宝门店关联宝贝
|
||
$storeItemLib = kernel::single('tbo2o_store_items');
|
||
$result = $storeItemLib->batchCreate($bm_ids, $this->branch_id, $errormsg);
|
||
|
||
echo json_encode(array('success'=>true, 'message'=>'货品关联成功', 'redirect'=>$redirect));
|
||
exit;
|
||
}
|
||
|
||
/**
|
||
* 门店供货配置
|
||
*/
|
||
function setConfig()
|
||
{
|
||
$back_url = app::get('wap')->router()->gen_url(array('ctl'=>'branch_product','act'=>'relation'), true);
|
||
|
||
$branchProObj = app::get('o2o')->model('branch_product');
|
||
$proStoreObj = app::get('ome')->model('branch_product');
|
||
$storeObj = app::get('o2o')->model('store');
|
||
|
||
if($_POST)
|
||
{
|
||
$id = intval($_POST['id']);
|
||
|
||
|
||
|
||
|
||
//门店信息
|
||
$storeInfo = $storeObj->dump(array('branch_id'=>$item['branch_id']), 'store_id,store_bn,store_mode');
|
||
|
||
//保存门店物料库存
|
||
$store_num = intval($_POST['store_num']);
|
||
$store_item = $proStoreObj->dump(array('branch_id'=>$item['branch_id'], 'product_id'=>$item['bm_id']), 'id');
|
||
if($store_item){
|
||
//更新
|
||
$updateData = array('store'=>$store_num);
|
||
|
||
//门店类型
|
||
if($storeInfo['store_mode']){
|
||
$updateData['store_bn'] = $storeInfo['store_bn'];
|
||
$updateData['store_mode'] = $storeInfo['store_mode'];
|
||
}
|
||
|
||
$result = $proStoreObj->update($updateData, array('id'=>$store_item['id']));
|
||
}else {
|
||
//新增
|
||
$save_data = array('branch_id'=>$item['branch_id'], 'product_id'=>$item['bm_id'], 'store'=>$store_num, 'last_modified'=>time());
|
||
|
||
//门店类型
|
||
if($storeInfo['store_mode']){
|
||
$save_data['store_bn'] = $storeInfo['store_bn'];
|
||
$save_data['store_mode'] = $storeInfo['store_mode'];
|
||
}
|
||
|
||
$result = $proStoreObj->insert($save_data);
|
||
}
|
||
unset($item, $store_item,$save_data);
|
||
|
||
if(!$result)
|
||
{
|
||
echo json_encode(array('error'=>true, 'message'=>'门店库存信息保存失败', 'redirect'=>null));
|
||
exit;
|
||
}
|
||
|
||
echo json_encode(array('success'=>true, 'message'=>'保存成功', 'redirect'=>$back_url));
|
||
exit;
|
||
}
|
||
|
||
$id = intval($_GET['id']);
|
||
if(empty($id))
|
||
{
|
||
$this->pagedata['link_url'] = $back_url;
|
||
$this->pagedata['error_msg'] = '无效的操作';
|
||
echo $this->fetch('error.html');
|
||
exit;
|
||
}
|
||
|
||
|
||
|
||
//基础物料信息
|
||
$basicMaterialObj = app::get('material')->model('basic_material');
|
||
$materialInfo = $basicMaterialObj->dump(array('bm_id'=>$item['bm_id']), 'bm_id, material_name, material_bn');
|
||
|
||
//库存信息
|
||
$store = $proStoreObj->dump(array('product_id'=>$item['bm_id'], 'branch_id'=>$this->branch_id), 'store');
|
||
$store['store'] = intval($store['store']);//防止空数组array_merge不能合并
|
||
unset($store['id']);
|
||
|
||
$item = array_merge($item, $materialInfo, $store);
|
||
$this->pagedata['item'] = $item;
|
||
$this->pagedata['link_url'] = app::get('wap')->router()->gen_url(array('ctl'=>'branch_product','act'=>'setConfig'), true);
|
||
|
||
$this->display('store/supply_config.html');
|
||
}
|
||
}
|