mirror of
https://gitee.com/ShopeX/OMS
synced 2026-03-22 18:35:35 +08:00
413 lines
14 KiB
PHP
413 lines
14 KiB
PHP
<?php
|
||
/**
|
||
* Copyright © ShopeX (http://www.shopex.cn). All rights reserved.
|
||
* See LICENSE file for license details.
|
||
*/
|
||
|
||
/**
|
||
* 供应商货品
|
||
*
|
||
* @access public
|
||
* @author wangbiao<wangbiao@shopex.cn>
|
||
*/
|
||
class purchase_ctl_admin_supplier_goods extends desktop_controller{
|
||
|
||
var $name = "供应商货品";
|
||
var $workground = "purchase_manager";
|
||
|
||
/*
|
||
* 供应商货品列表
|
||
*/
|
||
function index()
|
||
{
|
||
$finder_id = $_REQUEST['_finder']['finder_id'];
|
||
|
||
$base_filter = array();
|
||
$params = array('title'=>'供应商货品管理',
|
||
'actions'=>array(
|
||
array(
|
||
'label' => '物料关联',
|
||
'href' => 'index.php?app=purchase&ctl=admin_supplier_goods&&act=dispatch&view='.$_GET['view']."&finder_id=".$finder_id,
|
||
'target' => "_blank",
|
||
),
|
||
array(
|
||
'label' => '导出模板',
|
||
'href' => 'index.php?app=purchase&ctl=admin_supplier_goods&act=exportTemplate',
|
||
'target' => "_blank",
|
||
),
|
||
),
|
||
'use_buildin_import'=>true,
|
||
'use_buildin_filter'=>true,
|
||
'use_buildin_recycle'=>true,
|
||
'use_buildin_selectrow'=>true,
|
||
'use_bulidin_view'=>true,
|
||
'base_filter'=>$base_filter,
|
||
'orderBy'=>'supplier_id ASC',
|
||
);
|
||
|
||
$this->finder('purchase_mdl_supplier_goods', $params);
|
||
}
|
||
|
||
//门店关联物料
|
||
function dispatch()
|
||
{
|
||
$view = $_REQUEST['view'];
|
||
$finder_id = $_REQUEST['finder_id'];
|
||
$page = $_REQUEST['page'] ? $_REQUEST['page'] : 1;
|
||
$pagelimit = 50;
|
||
$offset = ($page-1) * $pagelimit;
|
||
|
||
//供应商列表
|
||
$supplierList = array();
|
||
$supplierObj = app::get('purchase')->model('supplier');
|
||
$supplierList = $supplierObj->getList('supplier_id, name', array(), 0, -1, 'supplier_id DESC');
|
||
$this->pagedata['supplierList'] = $supplierList;
|
||
|
||
//搜索项
|
||
if($_REQUEST['search'])
|
||
{
|
||
//搜索操作
|
||
$params['search_key'] = $_REQUEST['search_key'];
|
||
|
||
//选择品牌或者分类 此值为空
|
||
if(empty($_REQUEST['search_value'])){
|
||
$params['search_value'] = $_REQUEST['search_value_'.$_REQUEST['search_key']];
|
||
$this->pagedata['search_value_key'][$_REQUEST['search_key']] = $params['search_value'];
|
||
}else{
|
||
$params['search_value'] = $_REQUEST['search_value'];
|
||
$this->pagedata['search_value'] = $params['search_value'];
|
||
}
|
||
|
||
$this->pagedata['search_key'] = $params['search_key'];
|
||
$this->pagedata['search_value_last'] = $params['search_value'];
|
||
|
||
//获取基础物料列表
|
||
$data = $this->get_product_info($offset, $pagelimit, $params);
|
||
|
||
//获取记录数
|
||
$count = $this->do_count($params);
|
||
$link = 'index.php?app=purchase&ctl=admin_supplier_goods&&act=dispatch&view='.$view;
|
||
$link .= '&search=true&search_value='.$params['search_value'].'&search_key='.$params['search_key'].'&target=container&page=%d&finder_id='. $finder_id;
|
||
}else{
|
||
//获取基础物料列表
|
||
$data = $this->get_product_info($offset, $pagelimit);
|
||
|
||
//获取记录数
|
||
$count = $this->do_count();
|
||
$link = 'index.php?app=purchase&ctl=admin_supplier_goods&&act=dispatch&view='.$view.'&target=container&page=%d&finder_id='. $finder_id;
|
||
}
|
||
|
||
$total_page = ceil($count/$pagelimit);
|
||
$pager = $this->ui()->pager(array(
|
||
'current'=>$page,
|
||
'total'=>$total_page,
|
||
'link'=>$link,
|
||
));
|
||
|
||
$this->pagedata['rows'] = $data;
|
||
|
||
//获取搜索选项
|
||
$this->pagedata['search'] = $this->get_search_options();
|
||
|
||
//获取自定义搜索项下拉列表
|
||
$this->pagedata['search_list'] = $this->get_search_list();
|
||
|
||
$this->pagedata['count'] = $count;
|
||
$this->pagedata['pager'] = $pager;
|
||
$this->pagedata['finder_id'] = $finder_id;
|
||
|
||
if($_GET['target'] || $_POST['search'] == 'true')
|
||
{
|
||
return $this->display('admin/supplier/product_index.html');
|
||
}
|
||
|
||
$this->singlepage('admin/supplier/product_index.html');
|
||
}
|
||
|
||
//保存
|
||
function do_save()
|
||
{
|
||
$this->begin();
|
||
|
||
$bm_ids = $_POST['bm_id'];
|
||
if(!$bm_ids){
|
||
$this->end(false,'请选择基础物料');
|
||
}
|
||
|
||
$supplier_id = intval($_POST['supplier_id']);
|
||
if(empty($supplier_id)){
|
||
$this->end(false,'请选择供应商');
|
||
}
|
||
|
||
//全选时候的处理
|
||
if($_POST['select_all'] == 'true')
|
||
{
|
||
$bm_ids = array();
|
||
$params = array();
|
||
$params['search_key'] = $_POST['search_key'];
|
||
$params['search_value'] = $_POST['search_value'];
|
||
|
||
if(!empty($params['search_key']) && !empty($params['search_value']))
|
||
{
|
||
$bm_ids = $this->get_product_info('', '', $params, true);
|
||
}
|
||
else
|
||
{
|
||
$bm_ids = $this->get_product_info('', '', '', true);
|
||
}
|
||
}
|
||
|
||
//格式化bm_ids
|
||
$bm_id_list = array();
|
||
foreach ($bm_ids as $key => $val)
|
||
{
|
||
$bm_id_list[$val] = $val;
|
||
}
|
||
|
||
$bm_ids = $bm_id_list;
|
||
unset($bm_id_list);
|
||
|
||
//获取已关联的基础物料
|
||
$supGoodsObj = app::get('purchase')->model('supplier_goods');
|
||
$supGoodsList = $supGoodsObj->getList('bm_id', array('supplier_id'=>$supplier_id));
|
||
if($supGoodsList)
|
||
{
|
||
foreach ($supGoodsList as $key => $val)
|
||
{
|
||
if(in_array($val['bm_id'], $bm_ids))
|
||
{
|
||
unset($bm_ids[$val['bm_id']]);
|
||
}
|
||
}
|
||
}
|
||
|
||
if(empty($bm_ids)){
|
||
$this->end(false,'没有可关联的基础物料');
|
||
}
|
||
|
||
$values = array();
|
||
foreach ($bm_ids as $key => $val)
|
||
{
|
||
$values[] = "(". $supplier_id .", ". $val .")";
|
||
}
|
||
|
||
$sql = "INSERT INTO sdb_purchase_supplier_goods (supplier_id, bm_id) VALUES";
|
||
$sql .= implode(',', $values);
|
||
$supGoodsObj->db->exec($sql);
|
||
|
||
$this->end(true,'操作成功');
|
||
}
|
||
|
||
//计算记录条数
|
||
function do_count($params=array())
|
||
{
|
||
$mdlMaterialBasic = app::get('material')->model('basic_material');
|
||
$sql = "SELECT count(mbm.bm_id) as total_count FROM sdb_material_basic_material as mbm";
|
||
$sql_filter = $this->get_filter($params);
|
||
$sql = $sql.$sql_filter;
|
||
$count = $mdlMaterialBasic->db->select($sql);
|
||
return $count[0]["total_count"];
|
||
}
|
||
|
||
/**
|
||
* 获取自定义搜素选项
|
||
* @return multitype:multitype:unknown
|
||
*/
|
||
public function get_search_list()
|
||
{
|
||
//品牌
|
||
$brandObj = app::get('ome')->model('brand');
|
||
$brand_tmp =$brandObj->getList('brand_name,brand_id');
|
||
$brand = array();
|
||
foreach($brand_tmp as $branddata){
|
||
$brand[$branddata['brand_id']] = $branddata['brand_name'];
|
||
}
|
||
|
||
//类型
|
||
$typeObj = app::get('ome')->model('goods_type');
|
||
$type_tmp = $typeObj->getList('type_id,name');
|
||
$type = array();
|
||
foreach($type_tmp as $typedata){
|
||
$type[$typedata['type_id']] = $typedata['name'];
|
||
}
|
||
|
||
$list = array(
|
||
'brand_name'=>$brand,
|
||
'type_name'=>$type,
|
||
);
|
||
|
||
return $list;
|
||
}
|
||
|
||
/**
|
||
* 获取自定义搜素选项
|
||
*/
|
||
function get_search_options(){
|
||
$options = array(
|
||
'material_name'=>'物料名称',
|
||
'material_bn'=>'物料编码',
|
||
'brand_name'=>'品牌',
|
||
'type_name'=>'分类',
|
||
);
|
||
return $options;
|
||
}
|
||
|
||
/**
|
||
* 搜索基础物料
|
||
*/
|
||
function get_product_info($offset='', $limit='', $params=[], $flag=false)
|
||
{
|
||
$mdlMaterialBasic = app::get('material')->model('basic_material');
|
||
$mdlMaterialBasicExt = app::get('material')->model('basic_material_ext');
|
||
$mdlOmeBrand = app::get('ome')->model('brand');
|
||
$mdlOmeGoodsType = app::get('ome')->model('goods_type');
|
||
|
||
$sql = "SELECT mbm.bm_id,mbm.material_name,mbm.material_bn FROM sdb_material_basic_material as mbm";
|
||
$sql_filter = $this->get_filter($params);
|
||
if($limit){
|
||
$sql = $sql.$sql_filter." limit ". $offset .",". $limit;
|
||
}else{
|
||
$sql = $sql.$sql_filter;
|
||
}
|
||
|
||
$rs_material = $mdlMaterialBasic->db->select($sql);
|
||
|
||
if(empty($rs_material)){
|
||
return array();
|
||
}
|
||
|
||
$bm_ids = array();
|
||
foreach ($rs_material as $var_material){
|
||
$bm_ids[] = $var_material["bm_id"];
|
||
}
|
||
|
||
//直接返回bm_ids
|
||
if($flag)
|
||
{
|
||
return $bm_ids;
|
||
}
|
||
|
||
$rs_material_ext = $mdlMaterialBasicExt->getList("bm_id,specifications,brand_id,cat_id",array("bm_id|in"=>$bm_ids));
|
||
$brand_ids = array();
|
||
$cat_ids = array();
|
||
foreach ($rs_material_ext as $var_material_ext){
|
||
if($var_material_ext["brand_id"] && !in_array($var_material_ext["brand_id"],$brand_ids)){
|
||
$brand_ids[] = $var_material_ext["brand_id"];
|
||
}
|
||
if($var_material_ext["cat_id"] && !in_array($var_material_ext["cat_id"],$cat_ids)){
|
||
$cat_ids[] = $var_material_ext["cat_id"];
|
||
}
|
||
}
|
||
|
||
//获取品牌
|
||
if($brand_ids){
|
||
$rs_brand = $mdlOmeBrand->getList("brand_id,brand_name",array("brand_id|in"=>$brand_ids));
|
||
$rl_brand_id_name = array();
|
||
foreach ($rs_brand as $var_brand){
|
||
$rl_brand_id_name[$var_brand["brand_id"]] = $var_brand["brand_name"];
|
||
}
|
||
}
|
||
|
||
//获取类型
|
||
if($cat_ids){
|
||
$rs_cat = $mdlOmeGoodsType->getList("type_id,name",array("type_id|in"=>$cat_ids));
|
||
$rl_type_id_name = array();
|
||
foreach ($rs_cat as $var_cat){
|
||
$rl_type_id_name[$var_cat["type_id"]] = $var_cat["name"];
|
||
}
|
||
}
|
||
|
||
//获取bm_id和规格、品牌、类型
|
||
$rl_bm_id_info = array();
|
||
foreach ($rs_material_ext as $item_material_ext){
|
||
$rl_bm_id_info[$item_material_ext["bm_id"]] = array(
|
||
"specifications" => $item_material_ext["specifications"],
|
||
"brand_name" => $rl_brand_id_name[$item_material_ext["brand_id"]],
|
||
"type_name" => $rl_type_id_name[$item_material_ext["cat_id"]],
|
||
);
|
||
}
|
||
|
||
foreach ($rs_material as &$item_material){
|
||
$item_material["specifications"] = "-";
|
||
$item_material["brand_name"] = "-";
|
||
$item_material["type_name"] = "-";
|
||
if($rl_bm_id_info[$item_material["bm_id"]]["specifications"]){
|
||
$item_material["specifications"] = $rl_bm_id_info[$item_material["bm_id"]]["specifications"];
|
||
}
|
||
if($rl_bm_id_info[$item_material["bm_id"]]["brand_name"]){
|
||
$item_material["brand_name"] = $rl_bm_id_info[$item_material["bm_id"]]["brand_name"];
|
||
}
|
||
if($rl_bm_id_info[$item_material["bm_id"]]["type_name"]){
|
||
$item_material["type_name"] = $rl_bm_id_info[$item_material["bm_id"]]["type_name"];
|
||
}
|
||
}
|
||
unset($item_material);
|
||
|
||
return $rs_material;
|
||
}
|
||
|
||
/**
|
||
* 查询条件转换
|
||
*
|
||
* @param Array $params 查询条件参数
|
||
* @return String
|
||
*/
|
||
function get_filter($params=array())
|
||
{
|
||
$sql_filter = " where mbm.visibled=1";
|
||
|
||
if(!empty($params)){
|
||
switch ($params["search_key"]){
|
||
case "material_name":
|
||
$sql_filter = $sql_filter." and mbm.material_name like '".$params['search_value']."%'";
|
||
break;
|
||
case "material_bn":
|
||
$sql_filter = $sql_filter." and mbm.material_bn like '".$params['search_value']."%'";
|
||
break;
|
||
case "brand_name":
|
||
$sql_join = " left join sdb_material_basic_material_ext as mbme on mbm.bm_id=mbme.bm_id";
|
||
$sql_filter = $sql_join.$sql_filter." and mbme.brand_id=".intval($params['search_value']);
|
||
break;
|
||
case "type_name":
|
||
$sql_join = " left join sdb_material_basic_material_ext as mbme on mbm.bm_id=mbme.bm_id";
|
||
$sql_filter = $sql_join.$sql_filter." and mbme.cat_id=".intval($params['search_value']);
|
||
break;
|
||
}
|
||
}
|
||
|
||
return $sql_filter;
|
||
}
|
||
|
||
/*
|
||
* 导出模板
|
||
*/
|
||
function exportTemplate()
|
||
{
|
||
header("Content-Type: text/csv");
|
||
|
||
$filename = "供应商货品模板.csv";
|
||
$encoded_filename = urlencode($filename);
|
||
$encoded_filename = str_replace("+", "%20", $encoded_filename);
|
||
|
||
$ua = $_SERVER["HTTP_USER_AGENT"];
|
||
if (preg_match("/MSIE/", $ua)) {
|
||
header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
|
||
} else if (preg_match("/Firefox/", $ua)) {
|
||
header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');
|
||
} else {
|
||
header('Content-Disposition: attachment; filename="' . $filename . '"');
|
||
}
|
||
|
||
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
|
||
header('Expires:0');
|
||
header('Pragma:public');
|
||
|
||
//模板
|
||
$supGoodsObj = app::get('purchase')->model('supplier_goods');
|
||
$title = $supGoodsObj->exportTemplate();
|
||
|
||
echo '"'.implode('","',$title).'"';
|
||
}
|
||
}
|
||
?>
|