Files
OMS/app/tgstockcost/lib/taog/branchproduct.php
2025-12-28 23:13:25 +08:00

702 lines
30 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.
*/
/**
* 仓库货品数据类
*
* @date 2012-08-15
* @version hanbingshu sanow@126.com
*/
class tgstockcost_taog_branchproduct extends tgstockcost_common_branchproduct implements tgstockcost_interface_branch
{
/**
* 期初
*
* @param unknown $date
* @param unknown $branch_product 仓库商品
* @return unknown
*/
private function get_dailystock_data($date,$branch_product)
{
$data = array();
$dailystockModel = app::get('ome')->model('dailystock');
$db = $dailystockModel->db;
$sql = 'SELECT * FROM ' . $dailystockModel->table_name(1) . ' WHERE 1 ';
$filter = array();
$filter[] = 'stock_date="'.$date.'"';
if ($branch_product) {
$branch_product_filter = array();
foreach ($branch_product as $key => $value) {
$branch_product_filter[] = 'branch_id=' . $value['branch_id'] . ' AND product_id=' . $value['product_id'];
}
if ($branch_product_filter) {
$filter[] = '((' . implode(') OR (' , $branch_product_filter) . '))';
}
unset($branch_product_filter);
}
$sql .= ' AND ' . implode(' AND ', $filter);
$data = $db->select($sql);
return $data;
}
/**
* 获取出入库明细
*
* @param Int $start_time 开始时间
* @param Int $end_time 结束时间
* @param Array $branch_product 仓库商品
* @param Int $io 出入库类型
* @return void
* @author
**/
private function get_iostock_data($start_time,$end_time,$branch_product,$io,$type_id = NULL)
{
$data = array();
$stockcost_common_iostockrecord = kernel::single("tgstockcost_taog_iostockrecord");
$io_type = $stockcost_common_iostockrecord->get_type_id($io);
$iostockModel = app::get('ome')->model('iostock');
$db = $iostockModel->db;
$sql = 'SELECT SUM(nums) AS nums,SUM(inventory_cost) AS inventory_cost,branch_id,bn FROM ' . $iostockModel->table_name(1) . ' WHERE 1 ';
$filter = array();
$filter[] = 'create_time>=' . $start_time;
$filter[] = 'create_time<' . $end_time;
if ($type_id) {
$filter[] = 'type_id='.$type_id;
}
$filter[] = 'type_id in(' . implode(',',(array) $io_type ) . ')';
if ($branch_product) {
$branch_product_filter = array();
foreach ($branch_product as $key => $value) {
$branch_product_filter[] = 'branch_id=' . $value['branch_id'] . ' AND bn=' . $db->quote($value['bn']);
}
if ($branch_product_filter) {
$filter[] = '((' . implode(') OR (' , $branch_product_filter) . '))';
}
unset($branch_product_filter);
}
$sql .= ' AND ' . implode(' AND ',$filter) . ' GROUP BY branch_id,bn';
$data = $db->select($sql);
return $data;
}
/**
* 进销存成本统计count方法
* @todo重写与stock_getList中stockFilter保持一致
*
* @param array $filter
* @return int
*/
function stock_count($filter=array())
{
$branch_product = app::get("ome")->model("branch_product");
//sql
$sql = "select count(*) AS _count FROM sdb_ome_branch_product AS obp LEFT JOIN sdb_material_basic_material AS op ON obp.product_id=op.bm_id
LEFT JOIN sdb_material_basic_material_ext AS g ON op.bm_id=g.bm_id
WHERE op.visibled=1 AND ". $this->stockFilter($filter);
return $branch_product->db->count($sql);
}
// 进销存FINDER
public function stock_getList($cols='*', $filter=array(), $offset=0, $limit=-1, $orderType=null)
{
if(empty($filter['time_from']) || empty($filter['time_to'])) return false;
$now = mktime(0,0,0,date('m'),date('d'),date('Y'));
$branch_product = app::get("ome")->model("branch_product");
$sql = "select obp.store,obp.unit_cost,obp.inventory_cost,obp.branch_id,obp.product_id, op.material_bn AS bn,op.material_name AS name,
op.bm_id, g.specifications, g.brand_id, g.cat_id
FROM sdb_ome_branch_product AS obp LEFT JOIN sdb_material_basic_material AS op ON obp.product_id=op.bm_id
LEFT JOIN sdb_material_basic_material_ext AS g ON op.bm_id=g.bm_id
WHERE op.visibled=1 AND ".$this->stockFilter($filter);
$data = $branch_product->db->selectLimit($sql,$limit,$offset);
if (!$data) return array();
//商品品牌
$brandList = array();
$oBrand = app::get('ome')->model('brand');
$tempData = $oBrand->getList('brand_id, brand_name', '', 0, -1);
foreach ($tempData as $key => $val)
{
$brandList[$val['brand_id']] = $val['brand_name'];
}
//商品类型
$goodsTypeList = array();
$oType = app::get('ome')->model('goods_type');
$tempData = $oType->getList('type_id, name', '', 0, -1);
foreach ($tempData as $key => $val)
{
$goodsTypeList[$val['type_id']] = $val['name'];
}
unset($tempData, $oBrand, $oType);
$branch_product = array(); $dailystock_cols = array(); $iostock_cols = array();
//format
foreach ($data as $key => $value)
{
//基础物料扩展信息
$data[$key]['spec_info'] = $value['specifications'];
$data[$key]['type_name'] = $goodsTypeList[$value['cat_id']];
$data[$key]['brand_name'] = $brandList[$value['brand_id']];
$data[$key]['product_bn'] = $value['bn'];
$data[$key]['product_name'] = $value['name'];
//branch_product
$bp_key = $value['branch_id'] .'-'. $value['product_id'];
$branch_product[$bp_key] = array(
'branch_id' => $value['branch_id'],
'bn' => $value['bn'],
'product_id' => $value['product_id'],
);
$data[$key]['start_nums'] = &$dailystock_cols[$value['branch_id']][$value['product_id']]['start_nums']; # 期初数
$data[$key]['start_unit_cost'] = &$dailystock_cols[$value['branch_id']][$value['product_id']]['start_unit_cost']; # 期初单位成本
$data[$key]['start_inventory_cost'] = &$dailystock_cols[$value['branch_id']][$value['product_id']]['start_inventory_cost']; # 期初商品成本
$data[$key]['store'] = &$dailystock_cols[$value['branch_id']][$value['product_id']]['store']; # 结存数
$data[$key]['inventory_cost'] = &$dailystock_cols[$value['branch_id']][$value['product_id']]['inventory_cost']; # 结存商品成本
$data[$key]['unit_cost'] = &$dailystock_cols[$value['branch_id']][$value['product_id']]['unit_cost']; # 结存单位成本
$data[$key]['in_nums'] = &$iostock_cols[$value['branch_id']][$value['bn']]['in_nums']; # 入库数
$data[$key]['in_unit_cost'] = &$iostock_cols[$value['branch_id']][$value['bn']]['in_unit_cost']; # 入库单位成本
$data[$key]['in_inventory_cost'] = &$iostock_cols[$value['branch_id']][$value['bn']]['in_inventory_cost']; # 入库商品成本
$data[$key]['out_nums'] = &$iostock_cols[$value['branch_id']][$value['bn']]['out_nums']; # 出库数
$data[$key]['sale_out_nums'] = &$iostock_cols[$value['branch_id']][$value['bn']]['sale_out_nums']; # 销售出库数
$data[$key]['out_unit_cost'] = &$iostock_cols[$value['branch_id']][$value['bn']]['out_unit_cost']; # 出库单位成本
$data[$key]['out_inventory_cost'] = &$iostock_cols[$value['branch_id']][$value['bn']]['out_inventory_cost']; # 出库商品成本
$dailystock_cols[$value['branch_id']][$value['product_id']]['start_nums'] = 0;
$dailystock_cols[$value['branch_id']][$value['product_id']]['start_unit_cost'] = 0;
$dailystock_cols[$value['branch_id']][$value['product_id']]['start_inventory_cost'] = 0;
if ($now>strtotime($filter['time_to'])) {
$dailystock_cols[$value['branch_id']][$value['product_id']]['store'] = 0;
$dailystock_cols[$value['branch_id']][$value['product_id']]['inventory_cost'] = 0;
$dailystock_cols[$value['branch_id']][$value['product_id']]['unit_cost'] = 0;
} else {
$dailystock_cols[$value['branch_id']][$value['product_id']]['store'] = $value['store'];
$dailystock_cols[$value['branch_id']][$value['product_id']]['inventory_cost'] = $value['inventory_cost'];
$dailystock_cols[$value['branch_id']][$value['product_id']]['unit_cost'] = $value['unit_cost'];
}
$iostock_cols[$value['branch_id']][$value['bn']]['in_nums'] = 0;
$iostock_cols[$value['branch_id']][$value['bn']]['in_unit_cost'] = 0;
$iostock_cols[$value['branch_id']][$value['bn']]['in_inventory_cost'] = 0;
$iostock_cols[$value['branch_id']][$value['bn']]['out_nums'] = 0;
$iostock_cols[$value['branch_id']][$value['bn']]['sale_out_nums'] = 0;
$iostock_cols[$value['branch_id']][$value['bn']]['out_unit_cost'] = 0;
$iostock_cols[$value['branch_id']][$value['bn']]['out_inventory_cost'] = 0;
}
// 期初
$start_data = $this->get_dailystock_data(date('Y-m-d',(strtotime($filter['time_from'])-86400)),$branch_product);
foreach ((array) $start_data as $key => $value) {
$dailystock_cols[$value['branch_id']][$value['product_id']]['start_nums'] = $value['stock_num'];
$dailystock_cols[$value['branch_id']][$value['product_id']]['start_unit_cost'] = $value['unit_cost'];
$dailystock_cols[$value['branch_id']][$value['product_id']]['start_inventory_cost'] = $value['inventory_cost'];
}
unset($start_data);
// 期末
// if (strtotime($filter['time_to'])<strtotime(date('Y-m-d'))) {
$end_data = $this->get_dailystock_data(date('Y-m-d',(strtotime($filter['time_to'])) ),$branch_product);
foreach ((array) $end_data as $key => $value) {
$dailystock_cols[$value['branch_id']][$value['product_id']]['store'] = $value['stock_num'];
$dailystock_cols[$value['branch_id']][$value['product_id']]['unit_cost'] = $value['unit_cost'];
$dailystock_cols[$value['branch_id']][$value['product_id']]['inventory_cost'] = $value['inventory_cost'];
}
unset($end_data);
// }
// 入库明细
$istock_data = $this->get_iostock_data(strtotime($filter['time_from']),(strtotime($filter['time_to'])+86400),$branch_product,1);
foreach ((array) $istock_data as $key => $value) {
$iostock_cols[$value['branch_id']][$value['bn']]['in_nums'] = $value['nums'];
$iostock_cols[$value['branch_id']][$value['bn']]['in_unit_cost'] = $value['nums'] ? bcdiv($value['inventory_cost'], $value['nums'],2) : 0;
$iostock_cols[$value['branch_id']][$value['bn']]['in_inventory_cost'] = $value['inventory_cost'];
}
unset($istock_data);
// 出库明细
$ostock_data = $this->get_iostock_data(strtotime($filter['time_from']),(strtotime($filter['time_to'])+86400),$branch_product,0);
foreach ((array) $ostock_data as $key => $value) {
$iostock_cols[$value['branch_id']][$value['bn']]['out_nums'] = $value['nums'];
$iostock_cols[$value['branch_id']][$value['bn']]['out_unit_cost'] = $value['nums'] ? bcdiv($value['inventory_cost'], $value['nums'],2) : 0;
$iostock_cols[$value['branch_id']][$value['bn']]['out_inventory_cost'] = $value['inventory_cost'];
}
unset($ostock_data);
// 销售出库
$sale_ostock_data = $this->get_iostock_data(strtotime($filter['time_from']),(strtotime($filter['time_to'])+86400),$branch_product,0,3);
foreach ((array) $sale_ostock_data as $key => $value) {
$iostock_cols[$value['branch_id']][$value['bn']]['sale_out_nums'] = $value['nums'];
}
unset($sale_ostock_data);
return $data;
}
/**
* 获取指定时间范围内货品出入库数据
*
* @params $from_time开始时间 2012-07-03,$to_time结束时间 2012-07-25,$product_id货品ID,$branch_id仓库ID
* @return array() 出库数量,单位成本,库存成本等
*/
public function get_out_stock($from_time,$to_time,$product_bn = '',$branch_id = '',$io_type,$is_all = false)
{
$from_time = strtotime($from_time);
$stockcost_install_time = app::get("ome")->getConf("tgstockcost_install_time");
if($from_time<$stockcost_install_time) $from_time = $stockcost_install_time;
$to_time = strtotime($to_time)+(24*3600-1);
$iostock_mdl = app::get("ome")->model("iostock");
$stockcost_common_iostockrecord = kernel::single("tgstockcost_taog_iostockrecord");
$iostock_type_arr = $stockcost_common_iostockrecord->get_type_id($io_type);//出库类型ID数组
$where = 'and 1';
if(!empty($product_bn)){
$where .=' and oio.bn = "'.$product_bn.'"';
}
if(!empty($branch_id)){
$where .=' and oio.branch_id = '.$branch_id;
}
$sql = "select a.bm_id AS product_id, oio.branch_id,oio.bn,sum(oio.nums) as nums,sum(oio.inventory_cost) as inventory_cost
from sdb_ome_iostock oio
left join sdb_material_basic_material a on oio.bn = a.material_bn
where oio.create_time>".intval($from_time)." and oio.create_time<".intval($to_time)."
and oio.type_id in (".implode(',',$iostock_type_arr).") ".$where." group by oio.branch_id,oio.bn order by null";
$out_data = $iostock_mdl->db->select($sql);
foreach ($out_data as $key => $value) {
$out_data[$key]['nums'] = $value['nums']?$value['nums']:'0';
if($out_data[$key]['nums']){
$out_data[$key]['unit_cost'] = strval(round($value['inventory_cost']/$value['nums'],2));
}else{
$out_data[$key]['unit_cost'] = '0';
}
$out_data[$key]['inventory_cost'] = $value['inventory_cost']?$value['inventory_cost']:'0';
$out_data[$key]['product_bn'] = $value['bn'];
$out_data[$key]['product_id'] = $value['product_id'];
$out_data[$key]['branch_id'] = $value['branch_id'];
}
if($is_all){
return $out_data;
}
return $out_data[0];
}
function get_export_href($params)
{
$res = '';
$stockcost_install_time = app::get("ome")->getConf("tgstockcost_install_time");
if(!$_POST['time_from'])$_POST['time_from'] = date("Y-m-d",$stockcost_install_time);
if(!$_POST['time_to'])$_POST['time_to'] = date("Y-m-d",time());
foreach((array)$_POST as $k=>$v){
if($k!='_DTYPE_DATE'){
$res .='&'.$k.'='.$v;
}
}
return 'index.php?app=tgstockcost&ctl=stocksummary&act=index&action=export'.$res;
}
function fgetlist_csv(&$data,$filter,$offset,$exportType=1,$pass_data=false)
{
$filter = array_merge($filter,$_GET);
$this->charset = kernel::single('base_charset');
@ini_set('memory_limit','64M');
$limit = 100;
$list = $this->getproductIostock($filter,$offset*$limit,$limit);
if(!$list) return false;
$csv_title = $this->io_title();
if( !$data['title'] ){
$title = array();
foreach( $csv_title as $k => $v ){
$title[] = $this->charset->utf2local($v);
}
$data['title']['branch_product'] = '"'.implode('","',$title).'"';
}
foreach($list['main'] as $k=>$aFilter)
{
foreach ($this->oSchema['csv']['main'] as $kk => $v) {
$iostockRow[$kk] = $this->charset->utf2local($aFilter[$v]);
}
$data['content']['branch_product'][] = '"'.implode('","',$iostockRow).'"';
}
return true;
}
function exportName(&$data){
$data['name'] = $_POST['time_from'].'到'.$_POST['time_to'].'进销存统计';
}
function export_csv($data)
{
$output = array();
foreach( $data['title'] as $k => $val ){
$output[] = $val."\n".implode("\n",(array) $data['content'][$k]);
}
echo implode("\n",$output);
}
function io_title($filter=null,$ioType='csv')
{
switch( $ioType ){
case 'csv':
default:
$this->oSchema['csv']['main'] = array(
'*:货号' =>'product_bn',
'*:名称' =>'product_name',
//'*:商品编号' =>'goods_bn',//销售物料编号已弃用
'*:商品类型' =>'type_name',
'*:品牌' =>'brand_name',
'*:规格' =>'spec_info',
'*:单位' =>'unit',
'*:期初数量' =>'start_nums',
'*:期初单位成本' =>'start_unit_cost',
'*:期初商品成本' =>'start_inventory_cost',
'*:入库数量' =>'in_nums',
'*:入库平均成本' =>'in_unit_cost',
'*:入库商品成本' =>'in_inventory_cost',
'*:出库数量' =>'out_nums',
'*:出库单位成本' =>'out_unit_cost',
'*:出库商品成本' =>'out_inventory_cost',
'*:结存数量' =>'store',
'*:结存单位成本' =>'unit_cost',
'*:结存商品成本' =>'inventory_cost',
'*:仓库' =>'branch_id',
'*:销售出库数量'=>'sale_out_nums'
);
if ($_GET['act'] == 'sellstorage' && $_GET['ctl'] == 'stocksummary' && $_GET['app'] == 'tgstockcost') {
$cost_cols = array('start_unit_cost','start_inventory_cost','in_unit_cost','in_inventory_cost','out_unit_cost','','out_inventory_cost','unit_cost','inventory_cost');
foreach ($this->oSchema['csv']['main'] as $key => $value) {
if (in_array($value, $cost_cols)) {
unset($this->oSchema['csv']['main'][$key]);
}
}
}
}
$this->ioTitle[$ioType][$filter] = array_keys( $this->oSchema[$ioType]['main'] );
return $this->ioTitle[$ioType][$filter];
}
function getproductIostock($filter,$offset,$limit)
{
$productIostock = app::get('tgstockcost')->model('branch_product');
$Obranch = app::get('ome')->model('branch');
$list = $productIostock->getList("*",$filter,$offset,$limit);
foreach($list as $list_k=>$list_v)
{
$list['main'][] = array(
'product_bn'=>$list_v['product_bn'],
'product_name'=>$list_v['product_name'],
//'goods_bn'=>$list_v['goods_bn'],//销售物料编码_已弃用
'type_name'=> ($list_v['type_name'] ? $list_v['type_name'] : '-'),
'brand_name'=>$list_v['brand_name'] ? $list_v['brand_name'] : '-',
'spec_info'=>$list_v['spec_info'] ? $list_v['spec_info'] : '-',
'unit'=>$list_v['unit'] ? $list_v['unit'] : '-',
'start_nums'=>$list_v['start_nums']?$list_v['start_nums']:0,
'start_unit_cost'=>$list_v['start_unit_cost']?$list_v['start_unit_cost']:0,
'start_inventory_cost'=>$list_v['start_inventory_cost']?$list_v['start_inventory_cost']:0,
'in_nums'=>$list_v['in_nums']?$list_v['in_nums']:0,
'in_unit_cost'=>$list_v['in_unit_cost']?$list_v['in_unit_cost']:0,
'in_inventory_cost'=>$list_v['in_inventory_cost']?$list_v['in_inventory_cost']:0,
'out_nums'=>$list_v['out_nums']?$list_v['out_nums']:0,
'out_unit_cost'=>$list_v['out_unit_cost']?$list_v['out_unit_cost']:0,
'out_inventory_cost'=>$list_v['out_inventory_cost']?$list_v['out_inventory_cost']:0,
'store'=>$list_v['store']?$list_v['store']:0,
'unit_cost'=>$list_v['unit_cost']?$list_v['unit_cost']:0,
'inventory_cost'=>$list_v['inventory_cost']?$list_v['inventory_cost']:0,
'branch_id'=>$Obranch->Get_name($list_v['branch_id']),
'sale_out_nums'=>$list_v['sale_out_nums']?$list_v['sale_out_nums']:0,
);
}
return $list;
}
private function getProductFilter($filter = array())
{
$where = array('1');
$branch_product = app::get("ome")->model("branch_product");
//品牌
if(isset($filter['brand']) && $filter['brand'] ){
$where[] = " g.brand_id=".intval($filter['brand']);
}
//商品类型
if(isset($filter['type_id']) && $filter['type_id']){
$where[] = ' g.cat_id='.$filter['type_id'];
}
//货号
if(isset($filter['product_bn']) && $filter['product_bn']){
$where[] = " op.material_bn=".$branch_product->db->quote($filter['product_bn']);
}
//货品名称
if(isset($filter['product_name']) && $filter['product_name']){
$where[] = " op.material_name like '".trim($filter['product_name'])."%'";
}
//仓库
if(isset($filter['branch_id']) && $filter['branch_id']){
$where[] = " obp.branch_id=".intval($filter['branch_id']);
}else{
$Obranch = app::get('ome')->model('branch');
$branchs = $Obranch->getList('branch_id');
$branchs_id = array();
foreach ($branchs as $v) {
$branchs_id[] = $v['branch_id'];
}
$where[] = " obp.branch_id IN ('".implode("','",$branchs_id)."')";
unset($branchs_id);
}
return implode(' AND ', $where);
}
/**
*
*
* @param String $date
* @param Array $branch_product 仓库商品
* @return void
* @author
**/
private function get_dailystock_data_total($date,$branch_id,$product_ids = array())
{
$data = array();
// dailystock表记的是期初
$dailystockModel = app::get('ome')->model('dailystock');
$db = $dailystockModel->db;
// 只查可视的货品
$sql = 'SELECT SUM(d.stock_num) AS stock_num,SUM(d.inventory_cost) AS inventory_cost
FROM sdb_ome_dailystock AS d
LEFT JOIN sdb_material_basic_material AS a ON(d.product_id=a.bm_id)
WHERE a.visibled=1';
$filter = array();
$filter[] = 'd.stock_date="'.$date.'"';
$filter[] = 'd.branch_id="'.$branch_id.'"';
if ($product_ids && is_array($product_ids)) {
$filter[] = 'd.product_id in(' . implode(',',$product_ids) . ')';
}
$sql .= ' AND ' . implode(' AND ', $filter);
$data = $db->selectrow($sql);
return $data;
}
private function get_iostock_data_total($start_time,$end_time,$branch_id,$product_bns,$io)
{
$data = array();
$stockcost_common_iostockrecord = kernel::single("tgstockcost_taog_iostockrecord");
$io_type = $stockcost_common_iostockrecord->get_type_id($io);
$iostockModel = app::get('ome')->model('iostock');
$db = $iostockModel->db;
$sql = 'SELECT SUM(io.nums) AS nums,SUM(io.inventory_cost) AS inventory_cost
FROM ' . $iostockModel->table_name(1) . ' as io
LEFT JOIN sdb_material_basic_material as a on(io.bn=a.material_bn)
WHERE 1 AND a.visibled=1';
$filter = array();
$filter[] = 'io.create_time>=' . $start_time;
$filter[] = 'io.create_time<' . $end_time;
$filter[] = 'io.type_id in(' . implode(',',(array) $io_type ) . ')';
$filter[] = 'io.branch_id='.$branch_id;
if ($product_bns && is_array($product_bns)) {
$filter[] = 'io.bn in("' . implode('","',$product_bns) . '")';
}
$sql .= ' AND ' . implode(' AND ',$filter);
$data = $db->selectrow($sql);
return $data;
}
//进销存表统计总数据
public function getTotalCostInfo($filter=array(), $offset=0, $limit=-1, $orderType=null)
{
$total_start_nums = $total_start_inventory_cost = $total_in_nums = $total_in_inventory_cost = $total_out_nums = $total_out_inventory_cost = $total_store = $total_inventory_cost = 0;
$product_filter = $this->getProductFilter($filter);
$db = kernel::database();
$product_ids = array(); $product_bns = array();
if ($product_filter && $product_filter != '1'){
$sql = "SELECT op.material_bn AS bn,op.bm_id AS product_id FROM sdb_ome_branch_product AS obp LEFT JOIN sdb_material_basic_material AS op
ON obp.product_id=op.bm_id LEFT JOIN sdb_material_basic_material_ext AS g ON op.bm_id=g.bm_id WHERE ". $product_filter;
$productList = $db->select($sql);
if (!$productList) {
return array();
}
foreach ($productList as $key => $value) {
if($value['product_id']) {
$product_ids[] = $value['product_id'];
$product_bns[] = $value['bn'];
}
}
}
// 期初
$start_dailystock = $this->get_dailystock_data_total(date('Y-m-d',(strtotime($filter['time_from'])-86400)),$filter['branch_id'],$product_ids);
$total_start_nums = (int) $start_dailystock['stock_num'];
$total_start_inventory_cost = (float) $start_dailystock['inventory_cost'];
// 期末
$now = mktime(0,0,0,date('m'),date('d'),date('Y'));
if ($now>strtotime($filter['time_to'])) {
$end_dailystock = $this->get_dailystock_data_total(date('Y-m-d',(strtotime($filter['time_to']))),$filter['branch_id'],$product_ids);
} else {
$sql = 'SELECT SUM(store) AS stock_num, SUM(inventory_cost) AS inventory_cost FROM sdb_ome_branch_product WHERE branch_id='.$filter['branch_id'];
if ($product_ids) {
$sql .= ' AND product_id in(' . implode(',',$product_ids) . ')';
}
$end_dailystock = $db->selectrow($sql);
}
$total_store = (int) $end_dailystock['stock_num'];
$total_inventory_cost = (float) $end_dailystock['inventory_cost'];
// 入库
$in_stock = $this->get_iostock_data_total(strtotime($filter['time_from']),(strtotime($filter['time_to'])+86400),$filter['branch_id'],$product_bns,1);
$total_in_nums = (int) $in_stock['nums'];
$total_in_inventory_cost = (float) $in_stock['inventory_cost'];
// 出库
$out_stock = $this->get_iostock_data_total(strtotime($filter['time_from']),(strtotime($filter['time_to'])+86400),$filter['branch_id'],$product_bns,0);
$total_out_nums = (int) $out_stock['nums'];
$total_out_inventory_cost = (float) $out_stock['inventory_cost'];
$branch_product_cost['total_start_nums'] = $total_start_nums;
$branch_product_cost['total_start_inventory_cost'] =$total_start_inventory_cost;
$branch_product_cost['total_in_nums'] = $total_in_nums;
$branch_product_cost['total_in_inventory_cost'] = $total_in_inventory_cost;
$branch_product_cost['total_out_nums']= $total_out_nums;
$branch_product_cost['total_out_inventory_cost'] =$total_out_inventory_cost;
$branch_product_cost['total_store'] = $total_store;
$branch_product_cost['total_inventory_cost'] = $total_inventory_cost;
return $branch_product_cost;
}
//进销存统计过滤条件
public function stockFilter($filter = array())
{
$branch_product = app::get("ome")->model("branch_product");
$where = array(1);
//仓库
if(isset($filter['branch_id']) && $filter['branch_id']){
$where[] = " obp.branch_id=".intval($filter['branch_id']);
}else{
$Obranch = app::get('ome')->model('branch');
$branchs = $Obranch->getList('branch_id');
$branchIds = array();
foreach ($branchs as $v)
{
$branch_id = $v['branch_id'];
$branchIds[$branch_id] = $branch_id;
}
$where[] = " obp.branch_id IN (".implode(',',$branchIds).")";
unset($branchIds);
}
//货号
if(isset($filter['product_bn']) && $filter['product_bn']){
$where[] = " op.material_bn=".$branch_product->db->quote($filter['product_bn']);
}
//货品名称
if(isset($filter['product_name']) && $filter['product_name']){
$where[] = " op.material_name like '".trim($filter['product_name'])."%'";
}
//基础物料品牌
if(isset($filter['brand']) && $filter['brand']){
$where[] = ' g.brand_id = '.$filter['brand'];
}
//基础物料类型
if(isset($filter['type_id']) && $filter['type_id']){
$where[] = ' g.cat_id = '.$filter['type_id'];
}
return implode(' AND ', $where);
}
}