<?php

namespace App\Admin\Controllers;

use App\Admin\Repositories\Lawyer;
use App\Models\Lawyer as ModelLawyer;
use App\Models\LawyerCost as ModelLawyerCost;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Admin;
use Dcat\Admin\Http\Controllers\AdminController;
use Illuminate\Support\Facades\DB;
use App\Models\CovenantReceivePayment as ModelCovenantReceivePayment;

class LawyerCommissionController extends AdminController
{
    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new Lawyer(), function (Grid $grid) {
            $year = $grid->model()->filter()->input('year') ?? date('Y');
            //$grid->column('id')->sortable();
            //$grid->column('number', '律师编号');
            $grid->column('name', '律师姓名');
            $grid->column('received_money', '创收已收款')->display(function ($val) use ($year) {
                $money = self::getReceivedMoney($year, $this->id);
                return $money;
            });
            $grid->column('commission_rate', '提成比例 %');
            $grid->column('paid_amount', '已支付款项')->display(function ($val) use ($year) {
                $paid_amount =  self::getPaidAmount($year, $this->id);
                return sprintf('%.2f', $paid_amount);
            });
            $grid->column('posting_tickets_money', '贴票金额')->display(function () use ($year) {
                $tickets_money = ModelLawyerCost::getAllPostingTicketsMoney($this->id, $year);
                return $tickets_money;
            });
            $grid->column('commission_retention', '预留结案费')->display(function () use ($year) {
                $received_money = ModelCovenantReceivePayment::getReceivedMoney($this->id, $year); //创收已收款
                $commission_rate = $this->commission_rate; //提成比例
                $result = $received_money * ($commission_rate / 100) * 0.05;
                return sprintf('%.2f', $result);
            });
            $grid->column('payable_amount', '可支付提成结算金额')->display(function () use ($year) {
                $received_money = ModelCovenantReceivePayment::getReceivedMoney($this->id, $year); //创收已收款
                $paid_amount =  ModelLawyerCost::getPaidAmount($this->id, $year); //已支付款项
                $commission_rate = $this->commission_rate; //提成比例
                $result = $received_money * ($commission_rate / 100) - $paid_amount;
                return sprintf('%.2f', $result);
            });
            $grid->column('personal_income_tax', '个人所得税')->display(function ($val) use ($year) {
                $amount =  self::getPersonalIncomeTax($year, $this->id);
                return sprintf('%.2f', $amount);
            });

            // $grid->column('created_at');
            // $grid->column('updated_at')->sortable();
            $grid->disableCreateButton();
            $grid->disableViewButton();
            $grid->disableEditButton();
            $grid->disableDeleteButton();
            $grid->disableRowSelector();

            $grid->filter(function (Grid\Filter $filter) {
                // 更改为 panel 布局
                $filter->panel();
                //$filter->like('number', '律师编号')->width(3);
                $filter->like('name', '律师姓名')->width(3);
                $filter->like('year', '年份')->width(3)->default(date("Y"))->ignore();
            });

            $grid->actions(function (Grid\Displayers\Actions $actions) {
                //查看
                if (Admin::user()->can('lawyer-commission-collect-view')) {
                    $actions->append('<a href="/lawyer-commission-collect?no=' . $this->number . '" alt="查看" target="_blank"><i class="feather icon-eye"> 查看 </i></a>');
                }
            });
        });
    }
    //创收已收款
    public static function getReceivedMoney($year, $lawyer_id)
    {
        $money = ModelCovenantReceivePayment::where(['lawyer_id' => $lawyer_id, 'rtype' => 1])
            ->where('received_at', 'like', $year . '%')
            ->sum('received_amount');
        return $money;
    }
    //已支付款项
    public static function getPaidAmount($year, $lawyer_id)
    {
        $paid_amount = 0;
        $list = ModelLawyerCost::where(['lawyer_id' => $lawyer_id, 'year' => $year])->get();
        if ($list->toArray()) {
            $basic_salary = $special_additional = $social_company_fee = $accumulation_fund_company_fee = 0;
            $annual_inspection_fee = $annuity = $office_rental_fee = $assistant_fee = 0;
            foreach ($list as $item) {
                $basic_salary += $item->basic_salary;
                $special_additional += $item->special_additional;
                $social_company_fee += $item->social_company_fee;
                $accumulation_fund_company_fee += $item->accumulation_fund_company_fee;
                $annual_inspection_fee += $item->annual_inspection_fee;
                $annuity += $item->annuity;
                $office_rental_fee += $item->office_rental_fee;
                $assistant_fee += $item->assistant_fee;
            }
            $paid_amount = $basic_salary + $special_additional + $social_company_fee + $accumulation_fund_company_fee + $annual_inspection_fee + $annuity + $office_rental_fee + $assistant_fee;
        }
        return $paid_amount;
    }
    //个人所得税
    public static function getPersonalIncomeTax($year, $lawyer_id)
    {
        $amount = 0;
        $list = ModelLawyerCost::where(['lawyer_id' => $lawyer_id, 'year' => $year])->get();
        if ($list->toArray()) {
            $personal_income_tax = 0;
            foreach ($list as $item) {
                $amount += $item->personal_income_tax;
            }
        }
        return $amount;
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new Lawyer(), function (Show $show) {
            $show->field('id');
            $show->field('number');
            $show->field('name');
            $show->field('sex');
            $show->field('identity_card');
            $show->field('phone');
            $show->field('bank_account');
            $show->field('sign_at');
            $show->field('commission_rate');
            $show->field('settlement_period');
            $show->field('created_at');
            $show->field('updated_at');
        });
    }
}