<?php

namespace app\adminapi\controller;

use app\common\model\auth\Admin;
use app\common\model\cost_project\CostApprovedProject;
use app\common\model\cost_project\CostProject;
use app\common\model\cost_project\CostProjectPerson;
use app\common\model\DataReception;
use app\common\model\dept\Dept;
use app\common\model\ProjectCommission;
use app\common\model\task\TaskAllocation;
use app\common\model\TaskHandlingThreeLevelReview;
use app\common\model\zjzx_finance\ZjzxInvoice;
use app\common\model\zjzx_finance\ZjzxRefund;
use app\common\model\zjzx_finance\ZjzxSettlement;
use think\facade\Db;

class CostConsultationReportController extends  BaseAdminController
{
    // 造价报表控制器

    // 造价合同台账
    public function cost_approved_project_list()
    {
		$params = $this->request->get();
	    $page_no = !empty($params['page_no']) ? $params['page_no'] : 1;
	    $page_size = !empty($params['page_size']) ? $params['page_size'] : 15;
		$where = [];
		if(!empty($params['contract_name'])){
			$contract_ids1 = CostApprovedProject::where('contract_name','like','%'.$params['contract_name'].'%')->column('id');
			$where[] = ['contract_id','in',$contract_ids1];
		}
	    if(!empty($params['contract_num'])){
		    $contract_ids2 = CostApprovedProject::where('contract_num','like','%'.$params['contract_num'].'%')->column('id');
		    $where[] = ['contract_id','in',$contract_ids2];
	    }
	    if(!empty($params['part_a'])){
		    $contract_ids3 = CostApprovedProject::where('part_a','like','%'.$params['part_a'].'%')->column('id');
		    $where[] = ['contract_id','in',$contract_ids3];
	    }
        $lists = CostProject::field('id,contract_id')->where($where)->page($page_no, $page_size)->order('id desc')->select()->each(function($data){
			$contract = CostApprovedProject::field('contract_name,contract_num,contract_type,part_a,part_b,create_time,start_date,end_date,project_money,money')
				->where('id',$data['contract_id'])->findOrEmpty();
			$data['contract_name'] = $contract['contract_name'];
			$data['contract_num'] = $contract['contract_num'];
			$data['contract_type'] = $contract->contract_type_text;
			$data['part_a'] = $contract['part_a'];
			$data['part_b'] = $contract['part_b'];
			$data['create_time'] = $contract['create_time'];
			$data['start_date'] = $contract['start_date'];
			$data['end_date'] = $contract['end_date'];
			$data['project_money'] = $contract['project_money'];
			$data['sign_money'] = $contract['money'];
			//开票金额
	        $data['total_invoice_amount'] = ZjzxInvoice::where('project_id',$data['id'])->sum('apply_amount');
			//到账金额
	        $data['total_refund_amount'] = ZjzxRefund::where('project_id',$data['id'])->sum('amount');
			//结算金额
	        $data['total_settlement_amount'] = ZjzxSettlement::where('project_id',$data['id'])->sum('amount');
			//应收账款
	        $data['total_collection_amount'] = $contract['money'] - $data['total_refund_amount'];
			unset($data['contract_id'],$data['id']);
        })->toArray();
		$count = CostProject::where($where)->count();
        return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
    }

    // 造价项目信息汇总
    public function cost_project_report()
    {
	    $params = $this->request->get();
	    $page_no = !empty($params['page_no']) ? $params['page_no'] : 1;
	    $page_size = !empty($params['page_size']) ? $params['page_size'] : 15;
	    $where = [];
	    if(!empty($params['contract_name'])){
		    $contract_ids1 = CostApprovedProject::where('contract_name','like','%'.$params['contract_name'].'%')->column('id');
		    $where[] = ['contract_id','in',$contract_ids1];
	    }
	    if(!empty($params['project_name'])){
		    $where[] = ['project_name','like','%'.$params['project_name'].'%'];
	    }
	    $lists = CostProject::field('id,contract_id,project_num,project_name,starting,endtime,types,invest')
		    ->where($where)->page($page_no, $page_size)->order('id desc')->select()->each(function($data){
			    $contract = CostApprovedProject::field('contract_name')->where('id',$data['contract_id'])->findOrEmpty();
			    $data['contract_name'] = $contract['contract_name'];
			    $data['types'] = $data->types_text;
			    //开票金额
			    $data['total_invoice_amount'] = ZjzxInvoice::where('project_id',$data['id'])->sum('apply_amount');
			    //到账金额
			    $data['total_refund_amount'] = ZjzxRefund::where('project_id',$data['id'])->sum('amount');
				//提成金额
			    $data['total_commission_amount'] = ProjectCommission::where('project_id',$data['id'])->sum('bczfze');
	    })->toArray();
	    $count = CostProject::where($where)->count();
        return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
    }

    // 项目全过程跟踪表
    public function project_trace()
    {
	    $params = $this->request->get();
	    $page_no = !empty($params['page_no']) ? $params['page_no'] : 1;
	    $page_size = !empty($params['page_size']) ? $params['page_size'] : 15;
	    $where = [];
	    if(!empty($params['contract_name'])){
		    $contract_ids1 = CostApprovedProject::where('contract_name','like','%'.$params['contract_name'].'%')->column('id');
		    $where[] = ['contract_id','in',$contract_ids1];
	    }
	    if(!empty($params['project_name'])){
		    $where[] = ['project_name','like','%'.$params['project_name'].'%'];
	    }
	    $lists = CostProject::field('id,contract_id,project_num,project_name,depar')
		    ->where($where)->page($page_no, $page_size)->order('id desc')->select()->each(function($data){
			    $contract = CostApprovedProject::field('contract_name,project_director')->where('id',$data['contract_id'])->findOrEmpty();
				$dept = Dept::field('name')->where('id', $data['depar'])->findOrEmpty();
			    $data['contract_name'] = $contract['contract_name'];
			    $data['project_director'] = $contract['project_director'];
				$data['dept_name'] = $dept['name'];
				//任务分配状态
			    $task_allocation_status = TaskAllocation::where('cost_project_id', $data['id'])->count();
				$data['task_allocation_status'] = $task_allocation_status > 0 ? 1 : 0;
				//任务办理状态
			    $task_handling_three_level_review_status = TaskHandlingThreeLevelReview::where('project_id', $data['id'])->count();
                $data['task_handling_three_level_review_status'] = $task_handling_three_level_review_status > 0 ? 1 : 0;
				//资料归档状态
			    $data_reception_status = DataReception::where('project_id', $data['id'])->count();
			    $data['data_reception_status'] = $data_reception_status > 0 ? 1 : 0;
			    //开票金额
			    $data['total_invoice_amount'] = ZjzxInvoice::where('project_id',$data['id'])->sum('apply_amount');
			    //到账金额
			    $data['total_refund_amount'] = ZjzxRefund::where('project_id',$data['id'])->sum('amount');
			    //提成金额
			    $data['total_commission_amount'] = ProjectCommission::where('project_id',$data['id'])->sum('bczfze');
		    })->toArray();
	    $count = CostProject::where($where)->count();
	    return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
    }

    /**
     * 项目开票收款汇总表
     */
    public function project_invoice_receipt()
    {
	    $params = $this->request->get();
	    $page_no = !empty($params['page_no']) ? $params['page_no'] : 1;
	    $page_size = !empty($params['page_size']) ? $params['page_size'] : 15;
	    $where = [];
	    if(!empty($params['contract_name'])){
		    $contract_ids1 = CostApprovedProject::where('contract_name','like','%'.$params['contract_name'].'%')->column('id');
		    $where[] = ['contract_id','in',$contract_ids1];
	    }
	    if(!empty($params['project_name'])){
		    $where[] = ['project_name','like','%'.$params['project_name'].'%'];
	    }
	    $lists = CostProject::field('id,contract_id,project_num,project_name,depar')
		    ->where($where)->page($page_no, $page_size)->order('id desc')->select()->each(function($data){
			    $contract = CostApprovedProject::field('contract_name,project_director')->where('id',$data['contract_id'])->findOrEmpty();
			    $dept = Dept::field('name')->where('id', $data['depar'])->findOrEmpty();
			    $data['contract_name'] = $contract['contract_name'];
			    $data['project_director'] = $contract['project_director'];
			    $data['dept_name'] = $dept['name'];
			    //开票金额
			    $data['total_invoice_amount'] = ZjzxInvoice::where('project_id',$data['id'])->sum('apply_amount');
			    //到账金额
			    $data['total_refund_amount'] = ZjzxRefund::where('project_id',$data['id'])->sum('amount');
		    })->toArray();
	    $count = CostProject::where($where)->count();
	    return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
    }

    /**
     * 项目部门分布

     */
    public function distribution_project_departments()
    {
        $page_no = $this->request->param('page_no', 1);
        $page_size = $this->request->param('page_size', 15);
        $query = (new CostProject);
        $count = $query->count();
        $lists = $query->page($page_no, $page_size)->select()->each(function ($item) {
            $item['start_date'] = date('Y-m-d', $item['start_date']);
            $item['end_date'] = date('Y-m-d', $item['end_date']);
            if ($item['depar'] > 0) {
                $item['depar'] = Dept::where('id', $item['depar'])->value('name');
            }
            return $item;
        });
        return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
    }

    /**
     * 项目人员分布
     */
    public function distribution_project_personnel()
    {
        $page_no = $this->request->param('page_no', 1);
        $page_size = $this->request->param('page_size', 15);
        $query = (new CostProjectPerson);
        $count = $query->count();
        $lists = $query->page($page_no, $page_size)->select()->each(function ($item) {
            $CostProject = (new CostProject)->where('id', $item['cost_project_id'])->field('depar,project_name')->find();
            $item['project_name'] = $CostProject['project_name'];
            $item['name'] = (new Admin)->where('id', $item['uid'])->value('name');

            if ($CostProject['depar'] > 0) {
                $item['depar'] = Dept::where('id', $CostProject['depar'])->value('name');
            }

            return $item;
        });
        return $this->success('成功', compact('count', 'lists', 'page_no', 'page_size'));
    }
	
	//项目提成统计
	public function project_commission_statistics(){
		$params = $this->request->get();
		$page_no = !empty($params['page_no']) ? $params['page_no'] : 1;
		$page_size = !empty($params['page_size']) ? $params['page_size'] : 15;
		$where = [];
		if(!empty($params['project_name'])){
			$where[] = ['project_name','like','%'.$params['project_name'].'%'];
		}
//		if(!empty($params['date'])){
//
//		}
	}
}