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

76 lines
3.3 KiB
PHP

<?php namespace App\Http\Requests\App;
use Illuminate\Foundation\Http\FormRequest;
class CatalogItemStoreRequest 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 [
// Campos de Inventory
'name' => ['required', 'string', 'max:100'],
'sku' => ['nullable', 'string', 'max:50', 'unique:inventories,sku'],
'barcode' => ['nullable', 'string', 'unique:inventories,barcode'],
'category_id' => ['required', 'exists:categories,id'],
'stock' => ['nullable', 'integer', 'min:0'],
'type' => ['nullable', 'string', 'in:product,service,laundry'],
'description' => ['nullable', 'string'],
'is_stockable' => ['nullable', 'boolean'],
'track_serials' => ['nullable', 'boolean'],
'attributes' => ['nullable', 'array'],
// Campos de Price
'cost' => ['required', 'numeric', 'min:0'],
'retail_price' => ['required', 'numeric', 'min:0', 'gt:cost'],
'tax' => ['nullable', 'numeric', 'min:0', 'max:100'],
];
}
public function messages(): array
{
return [
// Mensajes de Inventory
'name.required' => 'El nombre es obligatorio.',
'name.string' => 'El nombre debe ser una cadena de texto.',
'name.max' => 'El nombre no debe exceder los 100 caracteres.',
'sku.string' => 'El SKU debe ser una cadena de texto.',
'sku.max' => 'El SKU no debe exceder los 50 caracteres.',
'sku.unique' => 'El SKU ya está en uso.',
'barcode.string' => 'El código de barras debe ser una cadena de texto.',
'barcode.unique' => 'El código de barras ya está registrado en otro producto.',
'category_id.required' => 'La categoría es obligatoria.',
'category_id.exists' => 'La categoría seleccionada no es válida.',
'stock.min' => 'El stock no puede ser negativo.',
'type.in' => 'El tipo debe ser uno de los siguientes: product, service, laundry.',
'is_stockable.boolean' => 'El campo "es stockeable" debe ser verdadero o falso.',
'track_serials.boolean' => 'El campo "rastrear números de serie" debe ser verdadero o falso.',
'attributes.array' => 'Los atributos deben ser un arreglo.',
// Mensajes de Price
'cost.required' => 'El costo es obligatorio.',
'cost.numeric' => 'El costo debe ser un número.',
'cost.min' => 'El costo no puede ser negativo.',
'retail_price.required' => 'El precio de venta es obligatorio.',
'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%.',
];
}
}