Files
OMS/app/omeanalysts/model/ome/store.php
2026-01-04 19:08:31 +08:00

239 lines
8.9 KiB
PHP

<?php
/**
* Copyright 2012-2026 ShopeX (https://www.shopex.cn)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
class omeanalysts_mdl_ome_store extends dbeav_model{
/**
* 获取_outstock
* @param mixed $filter filter
* @return mixed 返回结果
*/
public function get_outstock($filter=null) {
$sql = 'SELECT SUM(number) AS outstock FROM '.
kernel::database()->prefix.'ome_delivery_items as I LEFT JOIN '.
kernel::database()->prefix.'ome_delivery as D ON I.delivery_id=D.delivery_id '.
'WHERE D.process=\'true\' and '.$this->d_filter($filter);
$row = $this->db->select($sql);
return intval($row[0]['outstock']);
}
/**
* 获取_store
* @param mixed $filter filter
* @return mixed 返回结果
*/
public function get_store($filter=null) {
$sql = 'SELECT sum(B.store) as store,sum(B.store_freeze) AS store_freeze,sum(B.arrive_store) as arrive_store FROM '.
kernel::database()->prefix.'material_basic_material AS P LEFT JOIN '.
kernel::database()->prefix.'ome_branch_product AS B ON P.bm_id=B.product_id '.
'WHERE '.$this->_filter($filter);
$row = $this->db->select($sql);
return $row[0];
}
/**
* 获取_value
* @param mixed $filter filter
* @return mixed 返回结果
*/
public function get_value($filter=null) {
if($filter['type_id']){
$baseWhere = ' and branch_id='.$filter['type_id'];
}
$sql = 'SELECT I.product_id,sum(I.num) as num,sum(I.num*I.price) as price FROM '.
kernel::database()->prefix.'purchase_po AS O LEFT JOIN '.
kernel::database()->prefix.'purchase_po_items AS I ON O.po_id=I.po_id '.
'WHERE 1 '.$baseWhere.' group by I.product_id';
$rows = $this->db->select($sql);
$store_value = 0;
foreach($rows as $row){
$sql = "SELECT sum(store) as store FROM sdb_ome_branch_product WHERE product_id=".intval($row['product_id']).
$baseWhere.' group by product_id';
$product = $this->db->select($sql);
$store_value += $row['num']?number_format(($product[0]['store']*($row['price']/$row['num'])),2,",",""):0;
}
return $store_value;
}
/**
* count
* @param mixed $filter filter
* @return mixed 返回值
*/
public function count($filter=null) {
$sql = 'SELECT count(*) AS _count FROM '.
kernel::database()->prefix.'sdb_material_basic_material AS P LEFT JOIN '.
kernel::database()->prefix.'ome_branch_product AS B ON P.bm_id=B.product_id '.
'WHERE '.$this->_filter($filter);
$row = $this->db->select($sql);
return intval($row[0]['_count']);
}
public function getList($cols='*', $filter=array(), $offset=0, $limit=-1,$orderType=null) {
$sql = 'SELECT P.bm_id,P.material_bn AS bn,P.material_name AS name,sum(B.store) as store,sum(B.store_freeze) as store_freeze,1 as arrive_store FROM '.
kernel::database()->prefix.'material_basic_material AS P LEFT JOIN '.
kernel::database()->prefix.'ome_branch_product AS B ON P.bm_id=B.product_id '.
'WHERE '.$this->_filter($filter).' group by bm_id';
if($orderType)$sql.=' ORDER BY '.(is_array($orderType)?implode($orderType,' '):$orderType);
$rows = $this->db->selectLimit($sql,$limit,$offset);
$this->tidy_data($rows,$cols);
if($filter['type_id']){
$baseWhere = ' and branch_id='.$filter['type_id'];
}
foreach($rows as $key=>$val){
$sql = 'SELECT sum(num) as num,sum(num*price) as price FROM '.
kernel::database()->prefix.'purchase_po AS O LEFT JOIN '.
kernel::database()->prefix.'purchase_po_items AS I ON O.po_id=I.po_id '.
'where product_id='.$val['product_id'].$baseWhere.' group by product_id';
$row = $this->db->select($sql);
$rows[$key]['value'] = isset($row[0]['num'])?$val['store']*($row[0]['price']/$row[0]['num']):0;
$sql2 = 'SELECT SUM(arrive_store) AS total FROM sdb_ome_branch_product WHERE product_id ='.$val['product_id'];
$count = $this->db->selectrow($sql2);
$rows[$key]['arrive_store'] = $count['total'];
}
return $rows;
}
/**
* _filter
* @param mixed $filter filter
* @param mixed $tableAlias tableAlias
* @param mixed $baseWhere baseWhere
* @return mixed 返回值
*/
public function _filter($filter,$tableAlias=null,$baseWhere=null){
$where = array(1);
if (isset($filter['type_id']) && $filter['type_id']){
$where[] = " B.branch_id=".$filter['type_id'];
}
return implode(' AND ', $where);
}
/**
* d_filter
* @param mixed $filter filter
* @param mixed $tableAlias tableAlias
* @param mixed $baseWhere baseWhere
* @return mixed 返回值
*/
public function d_filter($filter,$tableAlias=null,$baseWhere=null) {
$where = array(1);
if (isset($filter['time_from']) && $filter['time_from']) {
$where[] = " D.delivery_time >=".strtotime($filter['time_from']);
}
if (isset($filter['time_to']) && $filter['time_to']) {
$where[] = " D.delivery_time <".(strtotime($filter['time_to'])+86400);
}
if (isset($filter['type_id']) && $filter['type_id']){
$where[] = ' D.branch_id =\''.$filter['type_id'].'\'';
}
return implode(' and ', $where);
}
/**
* 获取_schema
* @return mixed 返回结果
*/
public function get_schema(){
$schema = array (
'columns' => array(
'bn' => array (
'type' => 'varchar(30)',
'label' => '基础物料编码',
'width' => 85,
'filtertype' => 'normal',
'filterdefault' => true,
'editable' => false,
),
'name' => array (
'type' => 'varchar(200)',
'required' => true,
'default' => '',
'label' => '基础物料名称',
'width' => 160,
'filtertype' => 'normal',
'filterdefault' => true,
'editable' => false,
),
'brand_name' => array (
'type' => 'table:brand@ome',
'label' => '品牌',
'width' => 100,
'is_title' => true,
'required' => true,
'comment' => '品牌名称',
'editable' => false,
'filtertype' => 'normal',
'filterdefault' => true,
),
'store' => array (
'type' => 'number',
'editable' => false,
'comment' => '库存(各仓库 的库存总和)',
'label' => '库存量',
'default' => 0,
'width' => 65,
'label' => '库存',
),
'store_freeze' => array (
'type' => 'number',
'label' => '预占库存量',
'width' => 90,
'editable' => false,
'default' => 0,
),
'arrive_store' => array (
'type' => 'number',
'label' => '在途库存量',
'width' => 90,
'editable' => false,
'default' => 0,
),
'value' => array(
'type' => 'money',
'label' => '库存价值',
'width' => 90,
'editable' => false,
'orderby' => false,
),
),
'idColumn' => 'bn',
'in_list' => array(
0 => 'bn',
1 => 'name',
2 => 'brand_name',
3 => 'store',
4 => 'store_freeze',
5 => 'arrive_store',
6 => 'value',
),
'default_in_list' => array(
0 => 'bn',
1 => 'name',
2 => 'brand_name',
3 => 'store',
4 => 'store_freeze',
5 => 'arrive_store',
6 => 'value',
),
);
return $schema;
}
}