<?php

namespace App\Admin\Controllers;

use App\Models\CovenantReceivePayment as ModelsCovenantReceivePayment;
use App\Models\Covenant as ModelsCovenant;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use App\Admin\Repositories\CovenantReceivePaymentCollect;
use Carbon\Carbon;
use Dcat\Admin\Support\Helper;
use App\Admin\Extensions\CovenantReceivePaymentExportExten;
use App\Admin\Actions\CovenantReceivePaymentExcel;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;

class CovenantReceivePaymentController extends AdminController
{
    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new CovenantReceivePaymentCollect(), function (Grid $grid) {
            // 获取筛选条件
            $params = [];
            $params['lnum'] = $_GET['lnum'] ?? '';
            $params['lname'] = $_GET['lname'] ?? '';
            $params['cnum'] = $_GET['cnum'] ?? '';
            $params['ctype'] = $_GET['ctype'] ?? '';
            $params['principal'] = $_GET['principal'] ?? '';
            $received_at = $invoiced_at = [];
            $received_at['start'] = $_GET['received_at']['start'] ?? '';
            $received_at['end'] = $_GET['received_at']['end'] ?? '';
            $invoiced_at['start'] = $_GET['invoiced_at']['start'] ?? '';
            $invoiced_at['end'] = $_GET['invoiced_at']['end'] ?? '';
            //已收款
            $receivedMoney = ModelsCovenantReceivePayment::getTotalReceivedAmount($params, $received_at, $invoiced_at);
            //开票金额
            $invoicedMoney = ModelsCovenantReceivePayment::getTotalInvoicedMoney($params, $received_at, $invoiced_at);
            //已收款未开票
            $receiptNoinvoice = ($receivedMoney - $invoicedMoney) > 0 ? number_format($receivedMoney - $invoicedMoney, 2) : 0;
            //已开票未收款
            $invoiceNoreceipt = ($invoicedMoney - $receivedMoney) > 0 ? number_format($invoicedMoney - $receivedMoney, 2) : 0;
            // 添加一行表头数据
            // $grid->header(function () use ($invoicedMoney, $receivedMoney, $receiptNoinvoice, $invoiceNoreceipt) {
            //     return '<div class="row" style="text-align:center;">' .
            //         '<div class="col-md-7" >合计</div>' .
            //         '<div class="col-md-1">' . $invoicedMoney . '</div>' .
            //         '<div class="col-md-1">' . $receivedMoney . '</div>' .
            //         '<div class="col-md-1">' . $receiptNoinvoice . '</div>' .
            //         '<div class="col-md-2">' . $invoiceNoreceipt . '</div>' .
            //         '</div>';
            // });
            $grid->header(function () use ($invoicedMoney, $receivedMoney, $receiptNoinvoice, $invoiceNoreceipt) {
                return '<div class="table-responsive table-wrapper complex-container table-middle mt-1 table-collapse ">
        <table class="table custom-data-table data-table" id="grid-table" border=0>
            <thead>
                        <tr>
                                    <th width="90"></th>
                                    <th width="90"></th>
                                    <th width="90">合计</th>
                                    <th width="90"></th>
                                    <th width="90"></th>
                                    <th width="90">' . number_format($invoicedMoney, 2) . '</th>
                                    <th width="90">' . number_format($receivedMoney, 2) . '</th>
                                    <th width="90">' . $receiptNoinvoice . '</th>
                                    <th width="90"> ' . $invoiceNoreceipt . '</th>
                            </tr>
            </thead>

            
            <tbody>
                                    </tbody>
        </table>
    </div>';
            });
            //$grid->column('id')->sortable();
            //$grid->column('lnum', '律师编号')->width(90);
            $grid->column('lname', '律师姓名')->width(90);
            $grid->column('covenant_num', '合同编号')->width(90);
            $grid->column('covenant_name', '合同名称')->width(90);
            $grid->column('covenant_type', '合同类型')->width(90);
            $grid->column('principal', '委托人')->width(90);
            $grid->column('invoice_amount', '开票金额')->width(90);
            $grid->column('receipt_money', '已收款')->width(90);
            $grid->column('receipt_noinvoice', '已收款未开票')->width(90);
            $grid->column('invoice_noreceipt', '已开票未收款')->width(90);
            //$grid->column('updated_at')->sortable();

            $grid->disableCreateButton();
            $grid->disableRowSelector();
            $grid->disableActions();

            $grid->filter(function (Grid\Filter $filter) {
                // 更改为 panel 布局
                $filter->panel();
                //$filter->like('lnum', '律师编号')->width(3);
                $filter->like('lname', '律师名称')->width(3);
                // $filter->like('cnum', '合同编号')->width(3);
                // $filter->equal('ctype', '合同类型')->select(ModelsCovenant::CTYPE)->width(3);
                // $filter->like('principal', '委托人')->width(3);
                // $filter->between('received_at', '收款日期')->date()->width(4);
                // $filter->between('invoiced_at', '开票日期')->date()->width(4);
            });

            // 添加导出按钮
            $grid->tools(function (Grid\Tools $tools) use ($grid) {
                // 获取筛选参数
                $params = [];
                $params['lnum'] = request()->input('lnum', '');
                $params['lname'] = request()->input('lname', '');
                $params['cnum'] = request()->input('cnum', '');
                $params['ctype'] = request()->input('ctype', '');
                $params['principal'] = request()->input('principal', '');
                
                $received_at = [];
                $received_at['start'] = request()->input('received_at.start') ? request()->input('received_at.start') . "-01" : '';
                $received_at['end'] = request()->input('received_at.end') ? request()->input('received_at.end') . "-31" : '';
                
                $invoiced_at = [];
                $invoiced_at['start'] = request()->input('invoiced_at.start') ? request()->input('invoiced_at.start') . "-01" : '';
                $invoiced_at['end'] = request()->input('invoiced_at.end') ? request()->input('invoiced_at.end') . "-31" : '';

                // 导出按钮参数
                $param = [
                    'search' => $params,
                    'received_at' => $received_at,
                    'invoiced_at' => $invoiced_at,
                ];

                $filename = '开票付款汇总'.date('YmdHis',time());;
                $tools->append(new CovenantReceivePaymentExcel($param, $filename, '导出'));
            });
            

        });
    }

    /**
     * 导出
     *
     * @param Request $request
     * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
     */
    public function export(Request $request)
    {
        $filename = $request->get('filename');
        $param = json_decode($request->get('param'), true);
        
        //获取筛选参数
        $received_at = $invoiced_at = [];
        $received_at['start'] = isset($_GET['received_at']['start']) && $_GET['received_at']['start'] ? $_GET['received_at']['start'] . "-01" : '';
        $received_at['end'] = isset($_GET['received_at']['end']) && $_GET['received_at']['end'] ? $_GET['received_at']['end'] . "-31" : '';
        $invoiced_at['start'] = isset($_GET['invoiced_at']['start']) && $_GET['invoiced_at']['start'] ? $_GET['invoiced_at']['start'] . "-01" : '';
        $invoiced_at['end'] = isset($_GET['invoiced_at']['end']) && $_GET['invoiced_at']['end'] ? $_GET['invoiced_at']['end'] . "-31" : '';
        
        $param['received_at'] = $received_at;
        $param['invoiced_at'] = $invoiced_at;

        // 检查是否有输出缓冲区
        while (ob_get_level()) {
            ob_end_clean();
        }

        return Excel::download(new CovenantReceivePaymentExportExten($param), $filename . '.xlsx');
    }
}