main
Jing Li 2024-05-01 14:21:22 +08:00
parent 655c2fa1d8
commit 13f12b9dae
2 changed files with 50 additions and 22 deletions

View File

@ -64,25 +64,24 @@ class OvertimeApplyService extends BaseService
if (! isset($data['store_id']) && isset($data['employee_id'])) {
$data['store_id'] = Employee::where('id', $data['employee_id'])->value('store_id');
}
if (isset($data['datetime_range'])) {
$time = explode(',', $data['datetime_range']);
$start = Carbon::createFromTimestamp(data_get($time, 0))->startOfMinute();
$end = Carbon::createFromTimestamp(data_get($time, 1))->startOfMinute();
$data['start_at'] = $start;
$data['end_at'] = $end;
$data['date'] = $start->format('Y-m-d');
if (isset($data['start_at']) && isset($data['duration'])) {
$data['end_at'] = Carbon::createFromFormat('Y-m-d H:i', $data['start_at'])
->addMinutes($data['duration'] * 60)
->rawFormat('Y-m-d H:i');
} elseif (isset($data['datetime_range'])) {
$timestamps = explode(',', $data['datetime_range']);
$start = Carbon::createFromTimestamp($timestamps[0]);
$end = Carbon::createFromTimestamp($timestamps[1]);
$data['start_at'] = $start->toDateTimeString();
$data['end_at'] = $end->toDateTimeString();
}
if (isset($data['start_at']) && isset($data['end_at'])) {
$start = $data['start_at'];
if (! $start instanceof Carbon) {
$start = Carbon::parse($start)->startOfMinute();
}
$end = $data['end_at'];
if (! $end instanceof Carbon) {
$end = Carbon::parse($end)->startOfMinute();
}
$start = Carbon::createFromFormat('Y-m-d H:i', $data['start_at']);
$end = Carbon::createFromFormat('Y-m-d H:i', $data['end_at']);
$data['date'] = $start->toDateString();
$data['hours'] = $start->diffInHours($end);
}
@ -91,12 +90,11 @@ class OvertimeApplyService extends BaseService
public function validate($data, $model = null)
{
// todo 验证申请时间是否重复
$createRules = [
'employee_id' => ['required'],
'date' => ['required', 'date'],
'start_at' => ['required', 'date'],
'end_at' => ['required', 'date'],
'date' => ['required', 'date_format:Y-m-d'],
'start_at' => ['required', 'date_format:Y-m-d H:i'],
'end_at' => ['required', 'date_format:Y-m-d H:i'],
];
$updateRules = [];
$validator = Validator::make($data, $model ? $updateRules : $createRules, []);

View File

@ -36,6 +36,21 @@ class OvertimeController extends Controller
public function store(Request $request, OvertimeApplyService $service)
{
$request->validate(
rules: [
// 'date' => ['bail', 'required', 'date_format:Y-m-d'],
'start_at' => ['bail', 'required', 'date_format:Y-m-d H:i'],
'duration' => ['bail', 'required', 'int', 'min:1'],
'reason' => ['bail', 'nullable', 'string', 'max:255'],
],
attributes: [
'date' => '日期',
'start_at' => '开始时间',
'duration' => '加班时长',
'reason' => '加班事由',
],
);
$user = $this->guard()->user();
$data = $request->all();
$data['employee_id'] = $user->id;
@ -43,7 +58,7 @@ class OvertimeController extends Controller
try {
DB::beginTransaction();
if (!$service->store($data)) {
throw new RuntimeException($result);
throw new RuntimeException($service->getError());
}
$model = $service->getCurrentModel();
$workflow = WorkFlowService::make();
@ -55,12 +70,27 @@ class OvertimeController extends Controller
return response()->noContent();
} catch (\Exception $e) {
DB::rollBack();
throw new RuntimeException($e->getMessage());
throw tap($e, fn ($e) => report($e));
}
}
public function update($id, Request $request, OvertimeApplyService $service)
{
$request->validate(
rules: [
// 'date' => ['bail', 'required', 'date_format:Y-m-d'],
'start_at' => ['bail', 'required', 'date_format:Y-m-d H:i'],
'duration' => ['bail', 'required', 'int', 'min:1'],
'reason' => ['bail', 'nullable', 'string', 'max:255'],
],
attributes: [
'date' => '日期',
'start_at' => '开始时间',
'duration' => '加班时长',
'reason' => '加班事由',
],
);
$user = $this->guard()->user();
$model = OvertimeApply::where('employee_id', $user->id)->findOrFail($id);