<?php namespace App\Admin\Extensions; use App\Command\Log; use Illuminate\Support\Facades\DB; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; use App\Models\CovenantReceivePayment as ModelCovenantReceivePayment; use App\Models\LawyerCost as ModelLawyerCost; use App\Models\Lawyer as ModelLawyer; class lawyerCommissionExportExten implements FromCollection, WithHeadings { private $row; private $data; private $headings; /** * TaskDataExcelExpoter constructor. * @param array $param 筛选条件 * @param array $data 数据 * @param array $headings 表头 */ public function __construct($param = [], $data = [], $headings = []) { $param = json_decode(json_encode($param), true); $year = $param['search']['year'] ?? date("Y"); $nowyear = date("Y"); $monthNum = ($year && $year < $nowyear) ? 12 : date('m'); //表头设定 $tmp = []; $tmp['title'] = '项目名称'; for ($i = 1; $i <= $monthNum; $i++) { $tmp[$i] = $i . '月'; } $tmp['total'] = '合计'; $header = $tmp; $headings = [$header]; $data = $this->getList($param); $this->headings = $headings; $this->data = $data; } public function headings(): array { return $this->headings; } public function collection() { return collect($this->data); } // 获取列表数据 public function getList($param) { $param = json_decode(json_encode($param), true); $lnum = $param['search']['number'] ?? ''; //律师编号 $year = $param['search']['year'] ?? date("Y"); $data = []; $nowyear = date("Y"); $monthNum = ($year && $year < $nowyear) ? 12 : date('m'); $lawyer_id = $commission_rate = $ticket_ratio = 0; if ($lnum) { $larwerObj = ModelLawyer::where('number', $lnum)->first(); $lawyer_id = $larwerObj->id; $commission_rate = $larwerObj->commission_rate; $ticket_ratio = $larwerObj->ticket_ratio; } $fieldTotal = 0; $list = ModelLawyerCost::CommissioniTEM; foreach ($list as $key => $val) { $tmp = []; $tmp['title'] = $val['name']; //项目名称 for ($i = 1; $i <= $monthNum; $i++) { $tmp[$i] = 0; } //总计 $tmp['total'] = 0; for ($i = 1; $i <= $monthNum; $i++) { $tmp[$i] = '0.00'; $condition = ['year' => $year, 'month' => $i, 'number' => $lnum]; //创收收款 $receiveMoeny = ModelCovenantReceivePayment::getReceivedMoney($lawyer_id, $year, $i); if ($val['field'] == 'received_money') { $tmp[$i] = ModelCovenantReceivePayment::getReceivedMoney($lawyer_id, $year, $i); } //提成比例 if ($val['field'] == 'commission_rate') { $tmp[$i] = strval($commission_rate * 1) . '%'; } //可提成金额 if ($val['field'] == 'royalty_amount') { $royalty_amount = $receiveMoeny * ($commission_rate / 100); $tmp[$i] = sprintf('%.2f', $royalty_amount); } //已支付款项 if ($val['field'] == 'paid_amount') { $paid_amount = ModelLawyerCost::getPaidAmount($lawyer_id, $year, $i); $tmp[$i] = sprintf('%.2f', $paid_amount); } //基本工资 if ($val['field'] == 'basic_salary') { $basic_salary = ModelLawyerCost::where($condition)->sum('basic_salary'); $tmp[$i] = $basic_salary; $fieldTotal += $basic_salary; } //专项附加 if ($val['field'] == 'special_additional') { $special_additional = ModelLawyerCost::where($condition)->sum('special_additional'); $tmp[$i] = $special_additional; $fieldTotal += $special_additional; } //社保 if ($val['field'] == 'social') { $social_person_fee = ModelLawyerCost::where($condition)->sum('social_person_fee'); $social_company_fee = ModelLawyerCost::where($condition)->sum('social_company_fee'); $tmp[$i] = sprintf("%.2f", ($social_person_fee + $social_company_fee)); } //社保个人部分 if ($val['field'] == 'social_person_fee') { $social_person_fee = ModelLawyerCost::where($condition)->sum('social_person_fee'); $tmp[$i] = $social_person_fee; } //社保企业部分 if ($val['field'] == 'social_company_fee') { $social_company_fee = ModelLawyerCost::where($condition)->sum('social_company_fee'); $tmp[$i] = $social_company_fee; } //公积金 if ($val['field'] == 'accumulation_fund') { $person_fee = ModelLawyerCost::where($condition)->sum('accumulation_fund_person_fee'); $company_fee = ModelLawyerCost::where($condition)->sum('accumulation_fund_company_fee'); $tmp[$i] = sprintf("%.2f", ($person_fee + $company_fee)); } //公积金个人部分 if ($val['field'] == 'accumulation_fund_person_fee') { $person_fee = ModelLawyerCost::where($condition)->sum('accumulation_fund_person_fee'); $tmp[$i] = sprintf("%.2f", $person_fee); } //公积金企业部分 if ($val['field'] == 'accumulation_fund_company_fee') { $company_fee = ModelLawyerCost::where($condition)->sum('accumulation_fund_company_fee'); $tmp[$i] = sprintf("%.2f", $company_fee); } //律所年检费 if ($val['field'] == 'annual_inspection_fee') { $annual_inspection_fee = ModelLawyerCost::where($condition)->sum('annual_inspection_fee'); $tmp[$i] = $annual_inspection_fee; } //律所年金 if ($val['field'] == 'annuity') { $annuity = ModelLawyerCost::where($condition)->sum('annuity'); $tmp[$i] = $annuity; } //办公室租赁成本 if ($val['field'] == 'office_rental_fee') { $office_rental_fee = ModelLawyerCost::where($condition)->sum('office_rental_fee'); $tmp[$i] = $office_rental_fee; } //助理律师成本 if ($val['field'] == 'assistant_fee') { $assistant_fee = ModelLawyerCost::where($condition)->sum('assistant_fee'); $tmp[$i] = $assistant_fee; } //预支款 if ($val['field'] == 'advance_fee') { $advance_fee = ModelLawyerCost::where($condition)->sum('advance_fee'); $tmp[$i] = $advance_fee; } //预留结案费 if ($val['field'] == 'reserved_closing_fee') { $reserved_closing_fee = $receiveMoeny * ($commission_rate / 100) * 0.05; $tmp[$i] = sprintf('%.2f', $reserved_closing_fee); } //贴票金额 if ($val['field'] == 'posting_tickets_money') { $tickets_money = ModelLawyerCost::getPostingTicketsMoney($lawyer_id, $year, $commission_rate, $ticket_ratio, $i); $tmp[$i] = sprintf('%.2f', $tickets_money); } //提成留底 if ($val['field'] == 'commission_retention') { $tmp[$i] = '4万'; } //可支付提成结算金额 if ($val['field'] == 'payable_commission_amount') { $royalty_amount = $receiveMoeny * ($commission_rate / 100); $paid_amount = ModelLawyerCost::getPaidAmount($lawyer_id, $year, $i); $payable_money = $royalty_amount - $paid_amount; $tmp[$i] = $payable_money; } //个人所得税 if ($val['field'] == 'personal_income_tax') { $personal_income_tax = ModelLawyerCost::where($condition)->sum('personal_income_tax'); $tmp[$i] = $personal_income_tax; } //总计 if (!in_array($val['field'], ['commission_rate', 'commission_retention'])) { $tmp['total'] += $tmp[$i]; } } $data[$key] = $tmp; } //转成字符串导出 foreach ($data as $kk => &$vv) { if (isset($vv[1])) { $vv[1] = (string)$vv[1]; } if (isset($vv[2])) { $vv[2] = (string)$vv[2]; } if (isset($vv[3])) { $vv[3] = (string)$vv[3]; } if (isset($vv[4])) { $vv[4] = (string)$vv[4]; } if (isset($vv[5])) { $vv[5] = (string)$vv[5]; } if (isset($vv[6])) { $vv[6] = (string)$vv[6]; } if (isset($vv[7])) { $vv[7] = (string)$vv[7]; } if (isset($vv[8])) { $vv[8] = (string)$vv[8]; } if (isset($vv[9])) { $vv[9] = (string)$vv[9]; } if (isset($vv[10])) { $vv[10] = (string)$vv[10]; } if (isset($vv[11])) { $vv[11] = (string)$vv[11]; } if (isset($vv[12])) { $vv[12] = (string)$vv[12]; } if (isset($vv['total'])) { $vv['total'] = (string)$vv['total']; } } return $data; } }