pdv.backend/app/Http/Requests/App/UnitEquivalenceStoreRequest.php

66 lines
2.3 KiB
PHP

<?php
namespace App\Http\Requests\App;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;
class UnitEquivalenceStoreRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
return [
'unit_of_measure_id' => [
'required',
'exists:units_of_measurement,id',
Rule::unique('unit_equivalences')->where(function ($query) {
return $query->where('inventory_id', $this->route('inventory')->id);
}),
],
'conversion_factor' => ['required', 'numeric', 'min:0.001'],
'retail_price' => ['nullable', 'numeric', 'min:0'],
'is_active' => ['boolean'],
];
}
public function withValidator($validator): void
{
$validator->after(function ($validator) {
$inventory = $this->route('inventory');
if ($inventory->track_serials) {
$validator->errors()->add(
'unit_of_measure_id',
'No se pueden crear equivalencias para productos con rastreo de seriales.'
);
}
if ($this->unit_of_measure_id == $inventory->unit_of_measure_id) {
$validator->errors()->add(
'unit_of_measure_id',
'No se puede crear una equivalencia con la unidad base del producto.'
);
}
});
}
public function messages(): array
{
return [
'unit_of_measure_id.required' => 'La unidad de medida es obligatoria.',
'unit_of_measure_id.exists' => 'La unidad de medida seleccionada no existe.',
'unit_of_measure_id.unique' => 'Ya existe una equivalencia para esta unidad en este producto.',
'conversion_factor.required' => 'El factor de conversión es obligatorio.',
'conversion_factor.numeric' => 'El factor de conversión debe ser un número.',
'conversion_factor.min' => 'El factor de conversión debe ser mayor a 0.',
'retail_price.numeric' => 'El precio de venta debe ser un número.',
'retail_price.min' => 'El precio de venta no puede ser negativo.',
];
}
}