pdv.backend/app/Http/Requests/App/InventoryTransferRequest.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

65 lines
2.5 KiB
PHP

<?php
namespace App\Http\Requests\App;
use Illuminate\Foundation\Http\FormRequest;
class InventoryTransferRequest extends FormRequest
{
public function authorize(): bool
{
return true;
}
public function rules(): array
{
// Si tiene "products" array, es traspaso múltiple
if ($this->has('products')) {
return [
'warehouse_from_id' => 'required|exists:warehouses,id',
'warehouse_to_id' => 'required|exists:warehouses,id|different:warehouse_from_id',
'notes' => 'nullable|string|max:1000',
// Validación del array de productos
'products' => 'required|array|min:1',
'products.*.inventory_id' => 'required|exists:inventories,id',
'products.*.quantity' => 'required|integer|min:1',
];
}
// Traspaso único (formato original)
return [
'inventory_id' => 'required|exists:inventories,id',
'warehouse_from_id' => 'required|exists:warehouses,id',
'warehouse_to_id' => 'required|exists:warehouses,id|different:warehouse_from_id',
'quantity' => 'required|integer|min:1',
'notes' => 'nullable|string|max:1000',
];
}
public function messages(): array
{
return [
// Mensajes para traspaso único
'inventory_id.required' => 'El producto es requerido',
'inventory_id.exists' => 'El producto no existe',
// Mensajes para traspaso múltiple
'products.required' => 'Debe incluir al menos un producto',
'products.*.inventory_id.required' => 'El producto es requerido',
'products.*.inventory_id.exists' => 'El producto no existe',
'products.*.quantity.required' => 'La cantidad es requerida',
'products.*.quantity.min' => 'La cantidad debe ser al menos 1',
// Mensajes comunes
'warehouse_from_id.required' => 'El almacén origen es requerido',
'warehouse_from_id.exists' => 'El almacén origen no existe',
'warehouse_to_id.required' => 'El almacén destino es requerido',
'warehouse_to_id.exists' => 'El almacén destino no existe',
'warehouse_to_id.different' => 'El almacén destino debe ser diferente al origen',
'quantity.required' => 'La cantidad es requerida',
'quantity.min' => 'La cantidad debe ser al menos 1',
];
}
}