|
|
@@ -12,49 +12,53 @@ use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
class ExpenseClaimsService extends Service
|
|
|
{
|
|
|
- public function expenseClaimsList($data,$user){
|
|
|
+ public function expenseClaimsList($data, $user)
|
|
|
+ {
|
|
|
$model = $this->expenseClaimsSetCommon($data, $user);
|
|
|
- $list = $this->limit($model,'',$data);
|
|
|
+ $list = $this->limit($model, '', $data);
|
|
|
$list = $this->fillData($list);
|
|
|
|
|
|
return [true, $list];
|
|
|
}
|
|
|
|
|
|
- public function expenseClaimsSetCommon($data,$user, $field = []){
|
|
|
- if(empty($field)) $field = ExpenseClaims::$field;
|
|
|
+ public function expenseClaimsSetCommon($data, $user, $field = [])
|
|
|
+ {
|
|
|
+ if (empty($field)) $field = ExpenseClaims::$field;
|
|
|
|
|
|
- $model = ExpenseClaims::Clear($user,$data);
|
|
|
- $model = $model->where('del_time',0)
|
|
|
+ $model = ExpenseClaims::Clear($user, $data);
|
|
|
+ $model = $model->where('del_time', 0)
|
|
|
->select($field)
|
|
|
->orderby('id', 'desc');
|
|
|
- if(! empty($data['month'])) $model->where('month', $data['month']);
|
|
|
- if(! empty($data['code'])) $model->where('code', 'LIKE', '%'.$data['code'].'%');
|
|
|
- if(! empty($data['time'][0]) && ! empty($data['time'][1])) {
|
|
|
+ if (!empty($data['month'])) $model->where('month', $data['month']);
|
|
|
+ if (!empty($data['code'])) $model->where('code', 'LIKE', '%' . $data['code'] . '%');
|
|
|
+ if (!empty($data['time'][0]) && !empty($data['time'][1])) {
|
|
|
$return = $this->changeDateToTimeStampAboutRange($data['time']);
|
|
|
- $model->where('month','>=',$return[0]);
|
|
|
- $model->where('month','<=',$return[1]);
|
|
|
+ $model->where('month', '>=', $return[0]);
|
|
|
+ $model->where('month', '<=', $return[1]);
|
|
|
}
|
|
|
|
|
|
return $model;
|
|
|
}
|
|
|
|
|
|
- public function fillData($data){
|
|
|
- if(empty($data['data'])) return $data;
|
|
|
+ public function fillData($data)
|
|
|
+ {
|
|
|
+ if (empty($data['data'])) return $data;
|
|
|
|
|
|
- $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'],'crt_id')));
|
|
|
+ $emp = (new EmployeeService())->getEmployeeMap(array_unique(array_column($data['data'], 'crt_id')));
|
|
|
|
|
|
- foreach ($data['data'] as $key => $value){
|
|
|
- $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
|
|
|
+ foreach ($data['data'] as $key => $value) {
|
|
|
+ $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s', $value['crt_time']) : '';
|
|
|
$data['data'][$key]['crt_name'] = $emp[$value['crt_id']] ?? '';
|
|
|
- $data['data'][$key]['month'] = $value['month'] ? date('Y-m',$value['month']) : '';
|
|
|
+ $data['data'][$key]['month'] = $value['month'] ? date('Y-m', $value['month']) : '';
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
- public function expenseClaimsAdd($data,$user){
|
|
|
- list($status,$msg) = $this->expenseClaimsRule($data, $user);
|
|
|
- if(! $status) return [$status, $msg];
|
|
|
+ public function expenseClaimsAdd($data, $user)
|
|
|
+ {
|
|
|
+ list($status, $msg) = $this->expenseClaimsRule($data, $user);
|
|
|
+ if (!$status) return [$status, $msg];
|
|
|
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
@@ -72,9 +76,9 @@ class ExpenseClaimsService extends Service
|
|
|
list($old, $new) = $this->saveDetail($model->id, time(), $data, $user);
|
|
|
|
|
|
DB::commit();
|
|
|
- }catch (\Exception $exception){
|
|
|
+ } catch (\Exception $exception) {
|
|
|
DB::rollBack();
|
|
|
- return [false, $exception->getLine()."_".$exception->getMessage()];
|
|
|
+ return [false, $exception->getLine() . "_" . $exception->getMessage()];
|
|
|
}
|
|
|
|
|
|
return [true, ['file' => ['old' => $old, 'new' => $new]]];
|
|
|
@@ -91,20 +95,21 @@ class ExpenseClaimsService extends Service
|
|
|
foreach ($data['details'] as $value) {
|
|
|
$unit[] = [
|
|
|
'expense_claims_id' => $id,
|
|
|
- 'item_id' => $value['item_id'] ?? 0,
|
|
|
- 'employee_id' => $value['employee_id'] ?? "",
|
|
|
- 'fee_id' => $value['fee_id'] ?? 0,
|
|
|
- 'amount' => $value['amount'] ?? 0,
|
|
|
- 'remark' => $value['remark'] ?? "",
|
|
|
- 'claim_date' => strtotime($value['claim_date']),
|
|
|
- 'entrust_type' => $value['entrust_type'] ?? 0,
|
|
|
- 'expense_type' => $value['expense_type'] ?? 0,
|
|
|
- 'voucher_no' => $value['voucher_no'] ?? "",
|
|
|
- 'file_url' => $value['file_url'] ?? "",
|
|
|
- 'file_name' => $value['file_name'] ?? "",
|
|
|
- 'top_depart_id' => $data['top_depart_id'] ?? 0,
|
|
|
- 'crt_time' => $time,
|
|
|
- 'crt_id' => $user['id'],
|
|
|
+ 'item_id' => $value['item_id'] ?? 0,
|
|
|
+ 'employee_id' => $value['employee_id'] ?? "",
|
|
|
+ 'fee_id' => $value['fee_id'] ?? 0,
|
|
|
+ 'amount' => $value['amount'] ?? 0,
|
|
|
+ 'remark' => $value['remark'] ?? "",
|
|
|
+ 'claim_date' => strtotime($value['claim_date']),
|
|
|
+ 'entrust_type' => $value['entrust_type'] ?? 0,
|
|
|
+ 'expense_type' => $value['expense_type'] ?? 0,
|
|
|
+ 'voucher_no' => $value['voucher_no'] ?? "",
|
|
|
+ 'file_url' => $value['file_url'] ?? "",
|
|
|
+ 'file_name' => $value['file_name'] ?? "",
|
|
|
+ 'top_depart_id' => $data['top_depart_id'] ?? 0,
|
|
|
+ 'crt_time' => $time,
|
|
|
+ 'crt_id' => $user['id'],
|
|
|
+ 'r_id' => $value['r_id'] ?? 0,
|
|
|
];
|
|
|
|
|
|
$currentUrl = $value['file_url'] ?? "";
|
|
|
@@ -123,25 +128,26 @@ class ExpenseClaimsService extends Service
|
|
|
return [array_keys($oldFilesMap), $new];
|
|
|
}
|
|
|
|
|
|
- private function expenseClaimsRule(&$data, $user, $is_add = true){
|
|
|
+ private function expenseClaimsRule(&$data, $user, $is_add = true)
|
|
|
+ {
|
|
|
$data['top_depart_id'] = $user['top_depart_id'];
|
|
|
if (empty($data['month'])) return [false, '月份不能为空'];
|
|
|
$data['month'] = $this->changeDateToDate($data['month']);
|
|
|
|
|
|
//归档
|
|
|
list($status, $msg) = ArchiveService::isArchive($data['month'], $user);
|
|
|
- if(! $status) return [false, $msg];
|
|
|
+ if (!$status) return [false, $msg];
|
|
|
|
|
|
$monthStart = $data['month'];
|
|
|
// 获取该月最后一秒:下个月 1 号减去 1 秒
|
|
|
$monthEnd = strtotime('+1 month', $monthStart) - 1;
|
|
|
- if(empty($data['details'])) return [false, '费用项目单详情不能为空'];
|
|
|
+ if (empty($data['details'])) return [false, '费用项目单详情不能为空'];
|
|
|
foreach ($data['details'] as $index => $item) {
|
|
|
- if(empty($item['item_id'])) return [false, "第" . ($index + 1) . "行项目不能为空"];
|
|
|
- if(empty($item['fee_id'])) return [false, "第" . ($index + 1) . "行费用类型不能为空"];
|
|
|
- if(! isset($item['amount'])) return [false, "第" . ($index + 1) . "行费用金额不存在"];
|
|
|
+ if (empty($item['item_id'])) return [false, "第" . ($index + 1) . "行项目不能为空"];
|
|
|
+ if (empty($item['fee_id'])) return [false, "第" . ($index + 1) . "行费用类型不能为空"];
|
|
|
+ if (!isset($item['amount'])) return [false, "第" . ($index + 1) . "行费用金额不存在"];
|
|
|
$res = $this->checkNumber($item['amount'], 2, 'non-negative');
|
|
|
- if (! $res['valid']) return [false, "第" . ($index + 1) . "行费用金额" . $res['error']];
|
|
|
+ if (!$res['valid']) return [false, "第" . ($index + 1) . "行费用金额" . $res['error']];
|
|
|
|
|
|
if (!isset($item['claim_date'])) return [false, "第" . ($index + 1) . "行项费用产生日期缺失"];
|
|
|
// 将报销日期转换为时间戳
|
|
|
@@ -160,100 +166,104 @@ class ExpenseClaimsService extends Service
|
|
|
$query->where('id', '<>', $data['id']);
|
|
|
}
|
|
|
|
|
|
- if ($query->exists()) return [false, date("Y-m", $monthStart) . '已存在费用项目单'];
|
|
|
+ if ($query->exists()) return [false, date("Y-m", $monthStart) . '已存在费用项目单'];
|
|
|
|
|
|
- return [true,""];
|
|
|
+ return [true, ""];
|
|
|
}
|
|
|
|
|
|
- public function expenseClaimsEdit($data,$user){
|
|
|
- list($status,$msg) = $this->expenseClaimsRule($data, $user, false);
|
|
|
- if(!$status) return [$status,$msg];
|
|
|
+ public function expenseClaimsEdit($data, $user)
|
|
|
+ {
|
|
|
+ list($status, $msg) = $this->expenseClaimsRule($data, $user, false);
|
|
|
+ if (!$status) return [$status, $msg];
|
|
|
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
- $model = ExpenseClaims::where('id',$data['id'])->first();
|
|
|
+ $model = ExpenseClaims::where('id', $data['id'])->first();
|
|
|
// $model->month = $data['month'];
|
|
|
// $model->crt_id = $user['id'];
|
|
|
// $model->save();
|
|
|
|
|
|
$time = time();
|
|
|
- $old = ExpenseClaimsDetails::where('del_time',0)
|
|
|
+ $old = ExpenseClaimsDetails::where('del_time', 0)
|
|
|
->where('expense_claims_id', $model->id)
|
|
|
- ->where('file_url','<>','')
|
|
|
+ ->where('file_url', '<>', '')
|
|
|
->pluck('file_url')
|
|
|
->all();
|
|
|
- ExpenseClaimsDetails::where('del_time',0)
|
|
|
+ ExpenseClaimsDetails::where('del_time', 0)
|
|
|
->where('expense_claims_id', $model->id)
|
|
|
->update(['del_time' => $time]);
|
|
|
|
|
|
list($old, $new) = $this->saveDetail($model->id, $time, $data, $user, $old);
|
|
|
|
|
|
DB::commit();
|
|
|
- }catch (\Exception $exception){
|
|
|
+ } catch (\Exception $exception) {
|
|
|
DB::rollBack();
|
|
|
- return [false,$exception->getMessage()];
|
|
|
+ return [false, $exception->getMessage()];
|
|
|
}
|
|
|
|
|
|
return [true, ['file' => ['old' => $old, 'new' => $new]]];
|
|
|
}
|
|
|
|
|
|
- public function expenseClaimsDel($data, $user){
|
|
|
- if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
|
|
|
+ public function expenseClaimsDel($data, $user)
|
|
|
+ {
|
|
|
+ if ($this->isEmpty($data, 'id')) return [false, '请选择数据!'];
|
|
|
|
|
|
try {
|
|
|
DB::beginTransaction();
|
|
|
$time = time();
|
|
|
|
|
|
- $month = ExpenseClaims::where('del_time',0)
|
|
|
- ->whereIn('id',$data['id'])
|
|
|
+ $month = ExpenseClaims::where('del_time', 0)
|
|
|
+ ->whereIn('id', $data['id'])
|
|
|
->pluck('month')
|
|
|
->toArray();
|
|
|
|
|
|
//归档
|
|
|
list($status, $msg) = ArchiveService::isArchive($month, $user);
|
|
|
- if(! $status) return [false, $msg];
|
|
|
+ if (!$status) return [false, $msg];
|
|
|
|
|
|
- ExpenseClaims::where('del_time',0)
|
|
|
- ->whereIn('id',$data['id'])
|
|
|
+ ExpenseClaims::where('del_time', 0)
|
|
|
+ ->whereIn('id', $data['id'])
|
|
|
->update(['del_time' => $time]);
|
|
|
|
|
|
- $old = ExpenseClaimsDetails::where('del_time',0)
|
|
|
+ $old = ExpenseClaimsDetails::where('del_time', 0)
|
|
|
->where('expense_claims_id', $data['id'])
|
|
|
- ->where('file_url','<>','')
|
|
|
+ ->where('file_url', '<>', '')
|
|
|
->pluck('file_url')
|
|
|
->all();
|
|
|
|
|
|
- ExpenseClaimsDetails::where('del_time',0)
|
|
|
+ ExpenseClaimsDetails::where('del_time', 0)
|
|
|
->whereIn('expense_claims_id', $data['id'])
|
|
|
->update(['del_time' => $time]);
|
|
|
|
|
|
DB::commit();
|
|
|
- }catch (\Exception $exception){
|
|
|
+ } catch (\Exception $exception) {
|
|
|
DB::rollBack();
|
|
|
- return [false,$exception->getMessage()];
|
|
|
+ return [false, $exception->getMessage()];
|
|
|
}
|
|
|
|
|
|
return [true, ['file' => ['old' => $old]]];
|
|
|
}
|
|
|
|
|
|
- public function expenseClaimsDetail($data, $user){
|
|
|
- if($this->isEmpty($data,'id')) return [false,'请选择数据!'];
|
|
|
- $customer = ExpenseClaims::where('del_time',0)
|
|
|
- ->where('id',$data['id'])
|
|
|
+ public function expenseClaimsDetail($data, $user)
|
|
|
+ {
|
|
|
+ if ($this->isEmpty($data, 'id')) return [false, '请选择数据!'];
|
|
|
+ $customer = ExpenseClaims::where('del_time', 0)
|
|
|
+ ->where('id', $data['id'])
|
|
|
->first();
|
|
|
- if(empty($customer)) return [false,'单据不存在或已被删除'];
|
|
|
+ if (empty($customer)) return [false, '单据不存在或已被删除'];
|
|
|
$customer = $customer->toArray();
|
|
|
- $customer['crt_name'] = Employee::where('id',$customer['crt_id'])->value('title');
|
|
|
- $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s",$customer['crt_time']): '';
|
|
|
+ $customer['crt_name'] = Employee::where('id', $customer['crt_id'])->value('title');
|
|
|
+ $customer['crt_time'] = $customer['crt_time'] ? date("Y-m-d H:i:s", $customer['crt_time']) : '';
|
|
|
$customer['month'] = $this->UtcTime($customer['month']);
|
|
|
- $details = $this->getDetail($data,$user);
|
|
|
+ $details = $this->getDetail($data, $user);
|
|
|
$customer["details"] = $details;
|
|
|
|
|
|
return [true, $customer];
|
|
|
}
|
|
|
|
|
|
- private function getDetail($data,$user){
|
|
|
- $data = ExpenseClaimsDetails::where('del_time',0)
|
|
|
+ private function getDetail($data, $user)
|
|
|
+ {
|
|
|
+ $data = ExpenseClaimsDetails::where('del_time', 0)
|
|
|
->where('expense_claims_id', $data['id'])
|
|
|
->get()->toArray();
|
|
|
$item_ids = collect($data)->pluck('item_id')->unique()->values()->all();
|
|
|
@@ -261,31 +271,32 @@ class ExpenseClaimsService extends Service
|
|
|
$fee_ids = collect($data)->pluck('fee_id')->unique()->values()->all();
|
|
|
|
|
|
$item = Item::TopClear($user, $data);
|
|
|
- $item_key_list = $item->whereIn('id',$item_ids)->pluck('title','id');
|
|
|
+ $item_key_list = $item->whereIn('id', $item_ids)->pluck('title', 'id');
|
|
|
|
|
|
$item = Employee::TopClear($user, $data);
|
|
|
- $employee_key_list = $item->whereIn('id',$employee_ids)->pluck('title','id');
|
|
|
+ $employee_key_list = $item->whereIn('id', $employee_ids)->pluck('title', 'id');
|
|
|
|
|
|
$item = Fee::TopClear($user, $data);
|
|
|
- $fee_key_list = $item->whereIn('id',$fee_ids)->pluck('title','id');
|
|
|
+ $fee_key_list = $item->whereIn('id', $fee_ids)->pluck('title', 'id');
|
|
|
|
|
|
$fileUploadService = new FileUploadService();
|
|
|
foreach ($data as &$v) {
|
|
|
// 1. 假设数据库里的 claim_date 是 Unix 时间戳(整数)
|
|
|
// 2. createFromTimestamp 第二个参数设为 'UTC' 确保时间轴对齐
|
|
|
// 3. toIso8601ZuluString() 会自动生成 T 和 Z 以及 .000 毫秒
|
|
|
- $v['claim_date'] = $this->UtcTime( $v['claim_date']);
|
|
|
+ $v['claim_date'] = $this->UtcTime($v['claim_date']);
|
|
|
$v['item_title'] = $item_key_list[$v['item_id']] ?? "";
|
|
|
$v['employee_title'] = $employee_key_list[$v['employee_id']] ?? "";
|
|
|
$v['fee_title'] = $fee_key_list[$v['fee_id']] ?? "";
|
|
|
- if(! empty($v['file_url'])) $v['file_url_show'] = $fileUploadService->getFileShow($v['file_url']);
|
|
|
+ if (!empty($v['file_url'])) $v['file_url_show'] = $fileUploadService->getFileShow($v['file_url']);
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
|
}
|
|
|
|
|
|
- private function UtcTime($time){
|
|
|
- return Carbon::createFromTimestamp($time, 'UTC')
|
|
|
+ private function UtcTime($time)
|
|
|
+ {
|
|
|
+ return Carbon::createFromTimestamp($time, 'UTC')
|
|
|
->toIso8601ZuluString();
|
|
|
}
|
|
|
|
|
|
@@ -306,7 +317,7 @@ class ExpenseClaimsService extends Service
|
|
|
|
|
|
// 提取主表信息
|
|
|
$mainInfo = [
|
|
|
- 'code' => $main['code'],
|
|
|
+ 'code' => $main['code'],
|
|
|
'month' => $main['month'] ? date('Y-m', $main['month']) : '',
|
|
|
];
|
|
|
|
|
|
@@ -352,18 +363,18 @@ class ExpenseClaimsService extends Service
|
|
|
|
|
|
// 4. 组装明细行字段 (key 要与模板配置中的 export 对应)
|
|
|
$res[$item->expense_claims_id][] = [
|
|
|
- 'employee_number' => $tmpEmp ? $tmpEmp->number : '',
|
|
|
- 'employee_title' => $tmpEmp ? $tmpEmp->title : '',
|
|
|
- 'item_code' => $tmpItem ? $tmpItem->code : '',
|
|
|
- 'item_title' => $tmpItem ? $tmpItem->title : '',
|
|
|
- 'fee_code' => $tmpFee ? $tmpFee->code : '',
|
|
|
- 'fee_title' => $tmpFee ? $tmpFee->title : '',
|
|
|
- 'amount' => $item->amount,
|
|
|
- 'claim_date' => $item->claim_date ? date('Y-m-d', $item->claim_date) : '',
|
|
|
- 'voucher_no' => $item->voucher_no,
|
|
|
- 'remark' => $item->remark,
|
|
|
- 'entrust_type_title' => ExpenseClaimsDetails::State_Type[$item->entrust_type] ?? '',
|
|
|
- 'expense_type_title' => ExpenseClaimsDetails::State_Type_2[$item->expense_type] ?? '',
|
|
|
+ 'employee_number' => $tmpEmp ? $tmpEmp->number : '',
|
|
|
+ 'employee_title' => $tmpEmp ? $tmpEmp->title : '',
|
|
|
+ 'item_code' => $tmpItem ? $tmpItem->code : '',
|
|
|
+ 'item_title' => $tmpItem ? $tmpItem->title : '',
|
|
|
+ 'fee_code' => $tmpFee ? $tmpFee->code : '',
|
|
|
+ 'fee_title' => $tmpFee ? $tmpFee->title : '',
|
|
|
+ 'amount' => $item->amount,
|
|
|
+ 'claim_date' => $item->claim_date ? date('Y-m-d', $item->claim_date) : '',
|
|
|
+ 'voucher_no' => $item->voucher_no,
|
|
|
+ 'remark' => $item->remark,
|
|
|
+ 'entrust_type_title' => ExpenseClaimsDetails::State_Type[$item->entrust_type] ?? '',
|
|
|
+ 'expense_type_title' => ExpenseClaimsDetails::State_Type_2[$item->expense_type] ?? '',
|
|
|
];
|
|
|
}
|
|
|
return $res;
|