Files
OMS/app/purchase/controller/admin/supplier/goods.php
2025-12-28 23:13:25 +08:00

413 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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).'"';
}
}
?>