user()->can('repuve.records.search'); } public function rules(): array { return [ 'folio' => ['nullable', 'string', 'max:50'], 'niv' => ['nullable', 'string', 'max:50'], 'numero_serie' => ['nullable', 'string', 'max:50'], 'fecha_desde' => ['nullable', 'date', 'date_format:Y-m-d'], 'fecha_hasta' => ['nullable', 'date', 'date_format:Y-m-d', 'after_or_equal:fecha_desde'], ]; } public function messages(): array { return [ 'folio.string' => 'El folio debe ser una cadena de texto', 'niv.string' => 'El NIV debe ser una cadena de texto', 'numero_serie.string' => 'El número de serie debe ser una cadena de texto', 'fecha_desde.date' => 'La fecha desde debe ser una fecha válida', 'fecha_desde.date_format' => 'La fecha desde debe tener el formato Y-m-d', 'fecha_hasta.date' => 'La fecha hasta debe ser una fecha válida', 'fecha_hasta.after_or_equal' => 'La fecha hasta debe ser posterior o igual a la fecha desde', ]; } public function withValidator($validator) { $validator->after(function ($validator) { if (!$this->filled('folio') && !$this->filled('niv') && !$this->filled('numero_serie') && !$this->filled('fecha_desde')) { $validator->errors()->add( 'search', 'Debe proporcionar al menos un criterio de búsqueda (folio, niv o fecha_desde)' ); } }); } }