model('monthly_report');
// $billObj = app::get('finance')->model('bill');
// $arObj = app::get('finance')->model('ar');
// $time = $this->get_init_time();
// $time = $time['time'];
// $data = array(
// 'monthly_date'=>'期初',
// 'begin_time'=>'0',
// 'end_time'=>$time,
// 'status'=>'0',
// );
// if($mrObj->save($data)){
// //将期初数据存入KV,以便以后查询
// $ar_money = $this->get_ar_money('0',$time);
// $br_money = $this->get_br_money('0',$time);
// $total_money = ($ar_money - $br_money);
// $kv_data = array('monthly_id'=>
// $data['monthly_id'],'ar_money'=>$ar_money,'br_money'=>$br_money,'total_money'=>$total_money,'is_delete'=>'false');
// app::get('finance')->setConf('monthly_report_money',$kv_data);
// return 'true';
// }else{
// return 'false';
// }
// }
/*
**获取本期应收金额
**@params $time_from 开始时间,没有开始时间,请传'0'
**@params $time_to 结束时间
**@return 应收金额
*/
// public function get_ar_money($time_from,$time_to){
// $arObj = app::get('finance')->model('ar');
// $rs = $arObj->getList('sum(money) as money',array('trade_time|than'=>$time_from,'trade_time|sthan'=>$time_to));
// if(empty($rs['money'])) return '0';
// return $rs[0]['money'];
// }
/*
**获取本期实收金额
**@params $time_from 开始时间,没有开始时间,请传'0'
**@params $time_to 结束时间
**@return 实收金额
*/
// public function get_br_money($time_from,$time_to){
// $arObj = app::get('finance')->model('bill');
// $rs = $arObj->getList('sum(money) as money',array('trade_time|than'=>$time_from,'trade_time|sthan'=>$time_to));
// if(empty($rs['money'])) return 0;
// return $rs[0]['money'];
// }
/*
**通过时间判断所在账期月结状态
**@params $time 账单完成时间
**@return 月结状态未启用(0) 未结算(1) 已结算(2)
*/
public function get_monthly_report_status_by_time($time){
$arObj = app::get('finance')->model('monthly_report');
$rs = $arObj->getList('status',array('begin_time|sthan'=>$time,'end_time|than'=>$time));
if(empty($rs)){
return '1';
}
return $rs[0]['status'];
}
/*插入月末结账数据,从期初时间开始计算到当前时间范围内的月份*/
function save_monthly_report($now_time){
$mrObj = app::get('finance')->model('monthly_report');
$last_row_data = $mrObj->db->select("select end_time from sdb_finance_monthly_report order by end_time DESC limit 0,1");
$start_time = $last_row_data[0]['end_time'];
#var_dump($start_time);
if(!$start_time) return ;
#echo date('Y-m-d H:i:s',$start_time);
$months = self::dateMonths($start_time,time());
for($i=0;$i<=$months;$i++){
$start_month = self::get_next_month($start_time,$i);
$next_month = self::get_next_month($start_time,$i+1);
$sdf = array();
$sdf['monthly_date'] = date('Y',$start_month)."年".date('m',$start_month)."月";
$sdf['begin_time'] = $start_month;
$sdf['end_time'] = $next_month;
$sdf['status'] = 1;
#echo date('Y-m-d H:i:s',$sdf['begin_time']).'--'.date('Y-m-d H:i:s',$sdf['end_time'])."
";
$mrObj->save($sdf);
}
}
/*计算两个时间间隔相册的月份数
*@params $d1,$d2为时间戳
*/
static function dateMonths($d1,$d2)
{
$m1 = date("m",$d1);
$m2 = date("m",$d2);
$y1 = date("Y",$d1);
$y2 = date("Y",$d2);
$months = ($y2-$y1)*12+($m2-$m1);
return $months;
}
/*获取时间间隔月份明细时间戳
*@params $time起始时间戳 $months偏移量
*/
static function get_next_month($time,$months){
return strtotime("+{$months} month", $time);
}
/*
**获取初始化设置数组
**@return array('flag'=>'true/false 字符串','time'=>'时间戳')
*/
public function get_init_time(){
$data = array();
$kv_data = app::get('finance')->getConf('finance_setting_init_time');
$data['flag'] = $kv_data['flag'] === 'true' ? $kv_data['flag'] : 'false';
$time = strtotime($kv_data['year'].'-'.$kv_data['month'].'-'.$kv_data['day'].' 00:00:00');
$data['time'] = $time;
return $data;
}
/**
* 根据时间获取账期ID
*
* @param String $shop_id
* @param String $time
*/
public function getMonthlyReportIdByTime($shop_id,$time)
{
if(!isset($this->monthly_report[$shop_id]))
{
$mdlMonthlyReport = app::get('finance')->model('monthly_report');
$this->monthly_report[$shop_id] = $mdlMonthlyReport->getList('monthly_id,begin_time,end_time',array('shop_id'=>$shop_id,'status|lthan'=>2));
}
$monthly_id = 0;
foreach ($this->monthly_report[$shop_id] as $v)
{
if($v['begin_time'] <= $time and $v['end_time'] >= $time )
{
return $v['monthly_id'];
}
}
return $monthly_id;
}
public static function getMonthlyStatus($monthly_status=0)
{
$status = array(0=>'未关账',1=>'已关账');
return isset($status[$monthly_status]) ? $status[$monthly_status] : '未关账';
}
public static function getAll($key='monthly_id')
{
$mdlMonthlyReport = app::get('finance')->model('monthly_report');
$list = $mdlMonthlyReport->getList('monthly_id,begin_time,end_time,shop_id,status,monthly_date',array());
return $list ? array_column($list,null,$key) : array();
}
public static function updateMonthlyAmount($filter = array())
{
!$filter and $filter['status'] = 1;
$mdlMonthlyReport = app::get('finance')->model('monthly_report');
$monthly_list = $mdlMonthlyReport->getList('monthly_id',$filter);
if($monthly_list)
{
$monthly_list = array_column($monthly_list,'monthly_id');
$monthly_amount = array();
$bill_list = $mdlMonthlyReport->db->select('select sum(money) as amount,monthly_id,bill_type from sdb_finance_bill where monthly_id in ('.implode(',', $monthly_list).') and charge_status = 1 group by monthly_id,bill_type ');
if($bill_list)
{
foreach ($bill_list as $v) {
if($v['bill_type'])
{
$monthly_amount[$v['monthly_id']]['bill_out_amount'] = $v['amount'];
}
else
{
$monthly_amount[$v['monthly_id']]['bill_in_amount'] = $v['amount'];
}
}
}
$ar_list = $mdlMonthlyReport->db->select('select sum(money) as amount,monthly_id,ar_type from sdb_finance_ar where monthly_id in ('.implode(',', $monthly_list).') and charge_status = 1 group by monthly_id,ar_type');
if($ar_list)
{
foreach ($ar_list as $v) {
if($v['ar_type'])
{
$monthly_amount[$v['monthly_id']]['ar_out_amount'] = $v['amount'];
}
else
{
$monthly_amount[$v['monthly_id']]['ar_in_amount'] = $v['amount'];
}
}
}
foreach ($monthly_list as $monthly_id) {
$data = array();
$data['bill_in_amount'] = isset($monthly_amount[$monthly_id]['bill_in_amount']) ? $monthly_amount[$monthly_id]['bill_in_amount'] : 0;
$data['bill_out_amount'] = isset($monthly_amount[$monthly_id]['bill_out_amount']) ? $monthly_amount[$monthly_id]['bill_out_amount'] : 0;
$data['ar_in_amount'] = isset($monthly_amount[$monthly_id]['ar_in_amount']) ? $monthly_amount[$monthly_id]['ar_in_amount'] : 0;
$data['ar_out_amount'] = isset($monthly_amount[$monthly_id]['ar_out_amount']) ? $monthly_amount[$monthly_id]['ar_out_amount'] : 0;
$mdlMonthlyReport->update($data,array('monthly_id'=>$monthly_id));
}
}
return $monthly_list;
}
}