HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/ipsremont-demo/app/Http/Requests/Repair/UpdateRequest.php
<?php

namespace App\Http\Requests\Repair;

use App\Models\Repair\Repair;
use Illuminate\Validation\Rule;

/**
 * @property $status
 * @property $category_id
 * @property $work_description
 * @property $closed_at
 * @property $error_code
 */
class UpdateRequest extends CreateRequest
{

    /**
     * @return array
     */
    public function rules(): array
    {
        $rules = parent::rules();
        unset($rules['order_id']);

        $rules['status'] = ['required', 'string'];
        $rules['category_id'] = [Rule::requiredIf(fn() => $this->status === Repair::STATUS_COMPLETED && empty($this->custom_price)), 'integer', 'between:1,4', 'nullable'];
        $rules['work_description'] = ['required_if:status,==,completed', 'string', 'nullable'];
        $rules['closed_at'] = ['required_if:status,==,completed', 'date_format:Y-m-d', 'nullable'];
        $rules['error_code'] = ['required_if:status,==,completed', 'integer', 'nullable'];
        $rules['error_category'] = ['required_if:status,==,completed', 'integer', 'nullable'];
        $rules['custom_price'] = ['regex:/^\d{1,7}(?:(?:\.|,)\d{1,2})?$/', 'nullable', 'min:0', 'not_in:0'];

        $rules['parts'] = ['array', 'required'];
        $rules['parts.*.repair_id'] = ['integer', 'required'];
        $rules['parts.*.vendor_code'] = ['required_with:parts.*.amount', 'required_with:parts.*.price', 'string', 'nullable'];
        $rules['parts.*.amount'] = ['required_with:parts.*.vendor_code', 'required_with:parts.*.price', 'integer', 'nullable'];
        $rules['parts.*.price'] = ['required_with:parts.*.amount', 'required_with:parts.*.vendor_code', 'regex:/^\d{1,7}(?:(?:\.|,)\d{1,2})?$/', 'nullable', 'min:0', 'not_in:0'];

        return $rules;
    }

    protected function prepareForValidation()
    {
        parent::prepareForValidation();

        $isCompleted = $this->status == Repair::STATUS_COMPLETED;
        $this->merge([
            'category_id' => $isCompleted ? $this->category_id : null,
            'work_description' => $isCompleted ? $this->work_description : null,
            'closed_at' => $isCompleted ? $this->dateFromJs($this->closed_at) : null,
            'error_code' => $isCompleted ? $this->error_code : null,
        ]);
    }

}