PHPize Online / SQLize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
Copy Clear
Copy Format Clear
<?php $text = ' public function upsert(Request $request): Repair { $this->checkPermissions('repairs:upsert'); $data = $request->validate([ 'type' => ['required', new Enum(RepairType::class)], 'is_type_set_manually' => 'required|boolean', 'car_id' => 'required|bail|uuid', 'car_number' => 'required|string|min:1|max:16', 'car_type' => 'required|string|min:1|max:64', 'passport_id' => 'required|bail|uuid', 'owner_id' => 'required|bail|uuid', 'branch_id' => 'required|bail|uuid', 'branch_code' => 'required|string|max:16', 'location' => 'nullable', 'contracts' => 'nullable', 'status' => ['nullable', new Enum(RepairStatus::class)], 'status_note' => 'nullable|string|max:128', 'date' => 'nullable|date_format:Y-m-d', ]); $location = $data['location'] ?? []; /** @var ?Repair $model */ $model = Repair::where('car_id', '=', $data['car_id']) ->whereNotIn('status', RepairStatus::CLOSING_STATUSES) ->first(); if ($model === null) { /** * Если нет активного ремонта с таким же вагоном, то проверяем, * есть ли закрытый ремонт, с таким же вагоном * и датой создания больше даты начала рейса в дислокации. * Если он есть, игноирруем данные. * * @link https://smopp.atlassian.net/browse/NDD-418 */ $locationStartAt = trim($location['start_at'] ?? ''); if ($locationStartAt !== '') { /** @var ?Repair $existingClosed */ $existingClosed = Repair::where('car_id', '=', $data['car_id']) ->whereIn('status', RepairStatus::CLOSING_STATUSES) ->where('created_at', '>', $locationStartAt) ->first(); if ($existingClosed !== null) { return $existingClosed; } } // Новый ремонт $model = new Repair(); $model->date = $data['date'] ?? Carbon::now(); $model->status = $data['status'] ?? RepairStatus::Potential; } else { // Существующий ремонт, не обновляем тип, филиал unset( $data['type'], $data['is_type_set_manually'], $data['branch_id'], $data['branch_code'], ); } $attributes = $data; unset($attributes['location'], $attributes['status']); $model->forceFill($attributes); // Выбор статуса ремонта $model->setNextStatus($location); abort_if(!$model->save(), 500, 'Unable to upsert repair'); return $model; }';
Show:  
Copy Clear