Files
OMS/app/console/model/interface/iostocksearchs.php
2025-12-28 23:13:25 +08:00

383 lines
15 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.
*/
class console_mdl_interface_iostocksearchs extends dbeav_model{
/**
* count
* @param mixed $filter filter
* @return mixed 返回值
*/
public function count($filter = null)
{
$prefix = kernel::database()->prefix;
$app_ome = app::get('ome');
// 获取货品库存
$mdl_branch_product = $app_ome->model('branch_product');
$mdl_iostock = $app_ome->model('iostock');
//$sql = sprintf("SELECT COUNT(iostock_id) AS _count
//FROM (SELECT iostock_id
//FROM %s AS iostock
//WHERE 1 = 1
//AND %s
//GROUP BY iostock.bn, iostock.branch_id) AS _iostock", $mdl_iostock->table_name(true), $this->_filter($filter));
$sql = sprintf("SELECT COUNT(iostock.iostock_id) as _count FROM
(
SELECT (iostock.iostock_id) FROM %s AS iostock,%s AS a,%s AS branch_product
WHERE 1 = 1 AND iostock.bn = a.material_bn AND a.bm_id = branch_product.product_id AND branch_product.branch_id = iostock.branch_id
AND %s
GROUP BY iostock.bn, iostock.branch_id) as iostock", $mdl_iostock->table_name(true), 'sdb_material_basic_material', $mdl_branch_product->table_name(true), $this->_filter($filter)
);
$row = $mdl_iostock->db->select($sql);
return intval($row[0]['_count']);
}
public function details($bn, $branch_id, $filter = array())
{
$prefix = kernel::database()->prefix;
$app_ome = app::get('ome');
$mdl_iostock = $app_ome->model('iostock');
// 库存类型
$types = $this->get_branch_types();
$sql = sprintf("SELECT a.bm_id AS product_id, a.material_bn AS bn, iostock.iostock_bn, iostock.original_bn, iostock.iostock_price, iostock.nums,
iostock.type_id, iostock.create_time, branch_product.branch_id
FROM %s AS iostock,%smaterial_basic_material AS a,%some_branch_product AS branch_product
WHERE iostock.bn = '%s'
AND iostock.bn = a.material_bn
AND a.bm_id = branch_product.product_id AND branch_product.branch_id = iostock.branch_id
AND iostock.branch_id = %s
AND %s ", $mdl_iostock->table_name(true), $prefix, $prefix, $bn, $branch_id, $this->_filter($filter).' ORDER BY create_time DESC ');
$row = kernel::database()->select($sql);
foreach($row as $key => $r)
{
$row[$key]['create_time'] = date("Y-m-d H:i:s", $r['create_time']);
$row[$key]['type_name'] = $types[$r['type_id']];
}
return $row;
}
public function getlistbase($cols='*', $filter=array(), $offset=0, $limit=-1, $orderType=null){
return parent::getList($cols, $filter, $offset, $limit, $orderType);
}
public function getlist($cols='*', $filter=array(), $offset=0, $limit=-1, $orderType=null)
{
$prefix = kernel::database()->prefix;
$app_ome = app::get('ome');
$basicMStockFreezeLib = kernel::single('material_basic_material_stock_freeze');
// 获取库存列表
$branchs = $this->get_branch_list();
// 获取货品库存
$mdl_branch_product = $app_ome->model('branch_product');
$mdl_iostock = $app_ome->model('iostock');
if(!$cols)
$cols = $this->defaultCols;
if(!empty($this->appendCols))
$cols.=','.$this->appendCols;
if($this->use_meta)
$meta_info = $this->prepare_select($cols);
$orderType = $orderType ? $orderType : $this->defaultOrder;
$sql = sprintf("SELECT branch_product.branch_id, branch_product.product_id,
a.material_name AS name, a.material_bn AS bn, branch_product.store, branch_product.store_freeze
FROM %s AS iostock, %s AS a, %s AS branch_product
WHERE 1 = 1
AND iostock.bn = a.material_bn
AND a.bm_id = branch_product.product_id AND branch_product.branch_id = iostock.branch_id
AND %s
GROUP BY iostock.bn, iostock.branch_id", $mdl_iostock->table_name(true), 'sdb_material_basic_material', $mdl_branch_product->table_name(true), $this->_filter($filter));
$branch_info = $this->db->selectLimit($sql, $limit, $offset);
$arr = array();
foreach($branch_info as $key => $branch)
{
//获取仓库级的预占
$branch['store_freeze'] = $basicMStockFreezeLib->getBranchFreeze($branch['product_id'], $branch['branch_id']);
$arr[$key]['bn'] = $branch['bn'];
$arr[$key]['goods_name'] = $branch['name'];
$arr[$key]['store'] = $branch['store'] - $branch['store_freeze'];
$arr[$key]['store_name'] = $branchs[$branch['branch_id']];
$arr[$key]['store_freeze'] = $branch['store_freeze'];
$arr[$key]['stores'] = $branch['store'];
$arr[$key]['time_to'] = $filter['time_to'];
$arr[$key]['time_from'] = $filter['time_from'];
$arr[$key]['bn_branch'] = sprintf("%s*$**%s", $branch['branch_id'], $branch['bn']);
}
return $arr;
}
/**
* 获取库存列表
*
* @return array
*/
public function get_branch_list()
{
$_branchs = app::get('ome')->model('branch')->getlist('branch_id, name');
$branchs = array();
foreach ($_branchs as $value)
{
$branchs[$value['branch_id']] = $value['name'];
}
return $branchs;
}
/**
* 获取库存列表
*
* @return array
*/
public function get_branch_types()
{
$_types = app::get('ome')->model('iostock_type')->getlist('type_id, type_name');
$types = array();
foreach ($_types as $value)
{
$types[$value['type_id']] = $value['type_name'];
}
return $types;
}
public function _filter($filter,$tableAlias=null,$baseWhere=null){
$_SESSION['fil'] = $filter;
$where = array(1);
if(isset($filter['time_from']) && $filter['time_from']){
$where[] = 'iostock.create_time >='.strtotime($filter['time_from']);
}
if(isset($filter['time_to']) && $filter['time_to']){
$where[] = 'iostock.create_time <'.(strtotime($filter['time_to'])+86400);
}
if(isset($filter['bn'])){
$where[] = ' iostock.bn like \'%' . $filter['bn'] . '%\' ';
}
if(isset($filter['goods_name'])){
$where[] = ' a.material_name like \'%' . $filter['goods_name'] . '%\' ';
}
if(isset($filter['store_name'])){
if(is_array($filter['store_name']))
$where[] = ' iostock.branch_id in (' . implode($filter['store_name'],' ,').')';
else $where[] = ' iostock.branch_id =' . $filter['store_name'];
}
//可用库存的查询
if(isset($filter['_store_search'])){
$var = ($filter['_store_search'] == 'between' ? array($filter['store_from'],$filter['store_to']) : $filter['store']);
$where[] = $this->getMultiFilter('(branch_product.store-CAST(branch_product.store_freeze AS SIGNED))',$filter['_store_search'],$var);
}
//实际库存的查询
if(isset($filter['_stores_search'])){
$var = ($filter['_stores_search'] == 'between' ? array($filter['stores_from'],$filter['stores_to']) : $filter['stores']);
$where[] = $this->getMultiFilter('branch_product.store',$filter['_stores_search'],$var);
}
return implode(' AND ', $where);
}
/**
* 解析搜索类型
*
* */
function getMultiFilter($col,$type,$var){
$FilterArray= array('than'=>' > '.$var,
'lthan'=>' < '.$var,
'nequal'=>' = \''.$var.'\'',
'noequal'=>' <> \''.$var.'\'',
'tequal'=>' = \''.$var.'\'',
'sthan'=>' <= '.$var,
'bthan'=>' >= '.$var,
'has'=>' like \'%'.$var.'%\'',
'head'=>' like \''.$var.'%\'',
'foot'=>' like \'%'.$var.'\'',
'nohas'=>' not like \'%'.$var.'%\'',
'between'=>" {$col}>=".$var[0].' and '." {$col}<".$var[1],
'in' =>" in ('".implode("','",(array)$var)."') ",
'notin' =>" not in ('".implode("','",(array)$var)."') ",
);
return $type == 'between' ? $FilterArray[$type] : $col . $FilterArray[$type];
}
/**
* 获取ExportDataByCustom
* @param mixed $fields fields
* @param mixed $filter filter
* @param mixed $has_detail has_detail
* @param mixed $curr_sheet curr_sheet
* @param mixed $start start
* @param mixed $end end
* @param mixed $op_id ID
* @return mixed 返回结果
*/
public function getExportDataByCustom($fields, $filter, $has_detail, $curr_sheet, $start, $end, $op_id){
$cols = $this->_columns();
$colTitle = $this->getTitle($cols);
if($curr_sheet == 1){
$title = array();
foreach($colTitle as $titlek => $aTitle ){
if($titlek=='bn_branch'){
continue;
}
$title[$titlek] = $aTitle;
}
$data['content']['main'][] = implode(',',$title);
}
if(!$list = $this->getList('*',$filter,$start,$end))return false;
foreach( $list as $line => $row ){
$rowRow = array();
foreach( $colTitle as $k => $v ){
if($k=='bn_branch'){
continue;
}
$rowRow[$k] = kernel::single('ome_func')->csv_filter($row[$k]);
}
$data['content']['main'][] = implode(',',$rowRow);
}
return $data;
}
/**/
function getTitle(&$cols){
$title = array();
foreach( $cols as $col => $val ){
if( !$val['deny_export'] )
$title[$col] = mb_convert_encoding($val['label'], 'GBK', 'UTF-8').'('.$col.')';
}
return $title;
}
function export_csv($data,$exportType){
$rs = '';
if( is_array( $data ) ){
$data = (array)$data;
if( empty( $data['title'] ) && empty( $data['contents'] ) ){
$rs = implode( "\n", $data );
}else{
$rs = $data['title']."\n".implode("\n",(array)$data['contents']);
}
}else{
$rs = (string)$data;
}
return $rs;
}
/**
* 获取_schema
* @return mixed 返回结果
*/
public function get_schema(){
$schema = array (
'columns' => array (
'bn' => array (
'type' => 'varchar(50)',
'required' => true,
'default' => 0,
'label' => '货号',
'width' => 150,
'searchtype' => 'has',
'filtertype' => 'normal',
'filterdefault' => true,
'editable' => false,
'order' =>1,
'in_list' => true,
'default_in_list' => true,
),
'goods_name' => array (
'type' => 'varchar(100)',
'label' => '货品名称',
'width' => 260,
'editable' => false,
'order' =>2,
'filtertype' => 'normal',
'filterdefault' => true,
'in_list' => true,
'default_in_list' => true,
),
'store_name' => array (
'type' => 'table:branch@ome',
'label' => '仓库名称',
'width' => 110,
'order' =>3,
'editable' => false,
'filtertype' => 'normal',
'filterdefault' => true,
'in_list' => true,
'default_in_list' => true,
),
'store_freeze' => array (
'type' => 'int(10)',
'label' => '冻结库存',
'width' => 75,
'order' =>4,
'in_list' =>true,
'default_in_list' => true,
),
'store' => array (
'type' => 'number',
'required' => true,
'default' => 0,
'label' => '可用库存',
'filtertype' => 'number',
'filterdefault' => true,
'width' => 100,
'order' =>5,
'in_list' =>true,
'default_in_list' => true,
),
'stores' => array (
'type' => 'number',
'default' => 0,
'required' => true,
'label' => '实际库存',
'filtertype' => 'number',
'filterdefault' => true,
'width' => 110,
'order' =>6,
'in_list' =>true,
'default_in_list' => true,
),
'bn_branch' => array (
'type' => 'varchar(100)',
'label' => '货品仓库',
'width' => 110,
'editable' => false,
'in_list' => false,
'default_in_list' => false,
),
),
'idColumn' => 'bn_branch',
'in_list' => array (
0 => 'bn',
1 => 'goods_name',
2 => 'store_name',
3 => 'store_freeze',
4 => 'store',
5 => 'stores',
//6 => 'bn_branch',
),
'default_in_list' => array (
0 => 'bn',
1 => 'goods_name',
2 => 'store_name',
3 => 'store_freeze',
4 => 'store',
5 => 'stores',
//6 => 'bn_branch',
),
);
return $schema;
}
}