<?php
/**
 * Class depa_mans model
 */
class depa_mansMod extends mod{
	function __construct(){
		$e = require(mvc::$cfg['ROOT'].'mod/element/depa_mans.php');
		parent::__construct($e);
    }
	/**
	 * Method 列表数据
	 * @param string $where 查询sql条件
	 * @param int $page 页码(从1开始)
	 * @param int $pagesize 分页大小
	 * @param string $sidx 排序字段(单个)
	 * @param string $sord 排序方式 asc|desc
	 * @param string $orderby 排序sql(可多个)[优先]
	 * @return array 数据集
	 */
	public function list($where='',$page=0,$pagesize=0,$sidx='',$sord='asc',$orderby=''){
		$sql = $this->e['view'];
		if(trim($where)!='') {
			if(strtolower(substr(trim($where),0,3))!=='and') $where = ' AND ' . $where;
			$sql .= $where;
		}
		if($sidx=='' && $orderby=="") $orderby =  $this->e['order']; //默认排序
		if($orderby!=''){
			$sql.= sprintf(' ORDER BY %s', $orderby);
		}else if($sidx!=''){
			$sql.= sprintf(' ORDER BY %s %s',$sidx,$sord);
		}
		if($page>0 && $pagesize>0){
			$pages = $this->dbRead->PageLimit($sql,$page,$pagesize);
			$sql .= $pages['limit'];
		}
		$rows = $this->dbRead->Table($sql);
		$footerData=[];
		$data = [
			'page'=> $pages['page'],
			'total'=> $pages['total'],
			'records' => $pages['records'],
			"userdata"=> $footerData,
			'rows' => $rows
		];
		return $data;
	}
	public function report($cycle){
		$sql = sprintf("SELECT dm_depa,dm_depa_text,dm_qty FROM `depa_mans` WHERE dm_cycle=%s",$cycle);
		$table = $this->dbRead->Table($sql);
		if(empty($table)) 
			return false;
		$qtyArr = [];
		$totalQty = 0;
		//人数
		foreach($table as $k=>$row){
			$qtyArr[$row['dm_depa']]['qty'] = $row['dm_qty'];
			$qtyArr[$row['dm_depa']]['depa_text'] = $row['dm_depa_text'];
			$totalQty = $totalQty + ($row['dm_qty']*1);
		}
		//销售费用
		$sql = sprintf("SELECT o_name,v_object_1,SUM(v_j-v_d) money FROM `voucher` v 
		JOIN view_subject ON s_code LIKE('6601%%') AND v_subject=s_id
		JOIN `object` ON o_id=v_object_1
		WHERE v_cycle =%s
		GROUP BY v_object_1",$cycle);
		$table = $this->dbRead->Table($sql);
		foreach($table as $k=>$row){
			$qtyArr[$row['v_object_1']]['depa_text'] = $row['o_name'];
			$qtyArr[$row['v_object_1']]['salesMoney'] = $row['money'];
		}
		
		//管理费用
		$sql = sprintf("SELECT o_name,v_object_1,SUM(v_j-v_d) money FROM `voucher` v
		LEFT OUTER JOIN `object` ON o_id=v_object_1
		WHERE v_cycle =%s
		AND EXISTS(SELECT 1 FROM view_subject WHERE s_id = v.v_subject AND s_code LIKE('6602%%'))
		GROUP BY v_object_1 ORDER BY v_object_1",$cycle);
		$table = $this->dbRead->Table($sql);
		$noneManageMoney = 0;
		foreach($table as $k=>$row){
			if(empty($row['v_object_1'])){
				$noneManageMoney=$row['money'];
			}else{
				$qtyArr[$row['v_object_1']]['depa_text'] = $row['o_name'];
				$qtyArr[$row['v_object_1']]['manageMoney'] = $row['money'];
			}
		}
		$averageManage = round($noneManageMoney/$totalQty,2); //按人头 平均管理费用
		$assignedManage=0;//已分配的金额
		$keyHasQty=0;
		foreach($qtyArr as $k=>$v){
			if(!isset($qtyArr[$k]['manageMoney']))
				$qtyArr[$k]['manageMoney'] = 0;
			if(is_numeric($qtyArr[$k]['qty'])){
				$value = round($qtyArr[$k]['qty'] * $averageManage,2);
				$qtyArr[$k]['assignedManageMoney'] = $qtyArr[$k]['assignedManageMoney'] + $value;
				$assignedManage += $value;
				$keyHasQty = $k;
			}else{
				$qtyArr[$k]['assignedManageMoney'] = 0;
			}
			if(!isset($qtyArr[$k]['qty']))
				$qtyArr[$k]['qty'] = 0;
			if(!isset($qtyArr[$k]['salesMoney']))
				$qtyArr[$k]['salesMoney'] = 0;
			$qtyArr[$k]['company'] = $this->compnay($qtyArr[$k]['depa_text']);
		}
		$end = round($noneManageMoney-$assignedManage,2);
		$qtyArr[$keyHasQty]['assignedManageMoney'] += $end; //最后一个有人数的部门分摊管理费用尾数
		foreach($qtyArr as $k=>$v){
			$qtyArr[$k]['averageManage'] = $averageManage;
			$qtyArr[$k]['totalManageMoney'] = round($qtyArr[$k]['manageMoney'] + $qtyArr[$k]['assignedManageMoney'],2);
			$qtyArr[$k]['money'] =  round($qtyArr[$k]['salesMoney'] + $qtyArr[$k]['totalManageMoney'],2);
		}
		$data =[];
		foreach($qtyArr as $k=>$v){
			if(strpos($v['company'],"跑街")===false)
				$data[] = $v;
		}
		foreach($qtyArr as $k=>$v){
			if(strpos($v['company'],"跑街")!==false)
				$data[] = $v;
		}
		return $data;
	}

	public function compnay($depa_text){
		if($depa_text=='跑街分公司'){
			return "跑街";
		}else{
			return "宜配";
		}
	}

	public function import($cycle,$rows){
		$this->deleteRows("dm_cycle=".$cycle);
		$this->addRow($rows);
	}
}

