87 lines
3.0 KiB
PHP
87 lines
3.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Requests\App;
|
|
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
|
|
class InventoryImportRequest 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 [
|
|
'file' => [
|
|
'required',
|
|
'file',
|
|
'mimes:xlsx,xls,csv',
|
|
'max:10240', // 10MB máximo
|
|
],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Get custom messages for validator errors.
|
|
*/
|
|
public function messages(): array
|
|
{
|
|
return [
|
|
'file.required' => 'Debe seleccionar un archivo para importar.',
|
|
'file.file' => 'El archivo no es válido.',
|
|
'file.mimes' => 'El archivo debe ser de tipo Excel (.xlsx, .xls) o CSV (.csv).',
|
|
'file.max' => 'El archivo no debe superar los 10MB.',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Reglas de validación para cada fila del Excel
|
|
*/
|
|
public static function rowRules(): array
|
|
{
|
|
return [
|
|
'nombre' => ['required', 'string', 'max:100'],
|
|
'sku' => ['nullable', 'string', 'max:50', 'unique:inventories,sku'],
|
|
'categoria' => ['nullable', 'string', 'max:100'],
|
|
'stock' => ['required', 'integer', 'min:0'],
|
|
'costo' => ['required', 'numeric', 'min:0'],
|
|
'precio_venta' => ['required', 'numeric', 'min:0'],
|
|
'impuesto' => ['nullable', 'numeric', 'min:0', 'max:100'],
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Mensajes personalizados de validación para las filas del Excel
|
|
*/
|
|
public static function rowMessages(): array
|
|
{
|
|
return [
|
|
'nombre.required' => 'El nombre del producto es requerido.',
|
|
'nombre.max' => 'El nombre no debe exceder los 100 caracteres.',
|
|
'sku.unique' => 'El SKU ya existe en el sistema.',
|
|
'sku.max' => 'El SKU no debe exceder los 50 caracteres.',
|
|
'stock.required' => 'El stock es requerido.',
|
|
'stock.integer' => 'El stock debe ser un número entero.',
|
|
'stock.min' => 'El stock no puede ser negativo.',
|
|
'costo.required' => 'El costo es requerido.',
|
|
'costo.numeric' => 'El costo debe ser un número.',
|
|
'costo.min' => 'El costo no puede ser negativo.',
|
|
'precio_venta.required' => 'El precio de venta es requerido.',
|
|
'precio_venta.numeric' => 'El precio de venta debe ser un número.',
|
|
'precio_venta.min' => 'El precio de venta no puede ser negativo.',
|
|
'precio_venta.gt' => 'El precio de venta debe ser mayor que el costo.',
|
|
'impuesto.numeric' => 'El impuesto debe ser un número.',
|
|
'impuesto.min' => 'El impuesto no puede ser negativo.',
|
|
'impuesto.max' => 'El impuesto no puede exceder el 100%.',
|
|
];
|
|
}
|
|
}
|