pdv.backend/app/Http/Requests/App/PriceUpdateRequest.php
Juan Felipe Zapata Moreno 9a78d92dbf feat(inventory): movimientos masivos y costeo unitario
- Habilita entradas, salidas y traspasos masivos con validación.
- Implementa cálculo de costo promedio ponderado y campo de costo unitario.
- Agrega filtro por almacén y ajusta manejo de costos nulos.
2026-02-06 16:03:09 -06:00

60 lines
1.8 KiB
PHP

<?php namespace App\Http\Requests\App;
use Illuminate\Foundation\Http\FormRequest;
class PriceUpdateRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
*/
public function rules(): array
{
return [
'cost' => ['nullable', 'numeric', 'min:0'],
'retail_price' => ['nullable', 'numeric', 'min:0'],
'tax' => ['nullable', 'numeric', 'min:0', 'max:100'],
];
}
public function messages(): array
{
return [
'cost.numeric' => 'El costo debe ser un número.',
'cost.min' => 'El costo no puede ser negativo.',
'retail_price.numeric' => 'El precio de venta debe ser un número.',
'retail_price.min' => 'El precio de venta no puede ser negativo.',
'retail_price.gt' => 'El precio de venta debe ser mayor que el costo.',
'tax.numeric' => 'El impuesto debe ser un número.',
'tax.min' => 'El impuesto no puede ser negativo.',
'tax.max' => 'El impuesto no puede exceder el 100%.',
];
}
/**
* Validación condicional: retail_price > cost solo si cost > 0
*/
public function withValidator($validator)
{
$validator->after(function ($validator) {
$cost = $this->input('cost');
$retailPrice = $this->input('retail_price');
if ($cost !== null && $cost > 0 && $retailPrice !== null && $retailPrice <= $cost) {
$validator->errors()->add(
'retail_price',
'El precio de venta debe ser mayor que el costo.'
);
}
});
}
}