diff --git a/app/Filament/Resources/TintoreriaResource.php b/app/Filament/Resources/TintoreriaResource.php index a4d5523..5c9f2d9 100644 --- a/app/Filament/Resources/TintoreriaResource.php +++ b/app/Filament/Resources/TintoreriaResource.php @@ -35,7 +35,7 @@ class TintoreriaResource extends Resource public static function form(Form $form): Form { return $form->schema([ - Section::make('Proceso de Tintorería') + Section::make('Datos iniciales') ->schema([ Select::make('proveedor_id') ->label('Tintorería') @@ -46,7 +46,6 @@ class TintoreriaResource extends Resource ) ->searchable() ->preload() - ->required(), Select::make('orden_produccion_id') @@ -54,28 +53,51 @@ class TintoreriaResource extends Resource ->relationship('ordenProduccion', 'numero_orden') ->searchable() ->preload() - - ->required(), + ->reactive() + ->required() + ->afterStateUpdated(function ($state, $set) { + if ($state) { + $sum = \App\Models\Confeccion::where('orden_produccion_id', $state)->sum('cantidad_recibida'); + $set('cantidad_enviada', $sum ?: 0); + $set('fecha_envio', now()->toDateString()); + } + }), TextInput::make('tipo_proceso') ->label('Tipo de proceso') ->required(), DatePicker::make('fecha_envio') - ->required(), + ->required() + ->default(now()), TextInput::make('cantidad_enviada') ->numeric() - ->required(), + ->required() + ->reactive() + ->helperText(fn ($get) => 'Sugerido: ' . (\App\Models\Confeccion::where('orden_produccion_id', $get('orden_produccion_id'))->sum('cantidad_recibida') ?: 0)), + ]) + ->columns(2), + Section::make('Recepción') + ->schema([ DatePicker::make('fecha_recepcion'), TextInput::make('cantidad_recibida') - ->numeric(), + ->numeric() + ->reactive() + ->afterStateUpdated(function ($state, $set, $get) { + $cantidad_enviada = $get('cantidad_enviada') ?? 0; + $cantidad_recibida = $state ?? 0; + $perdidas = $cantidad_enviada - $cantidad_recibida; + if ($perdidas < 0) $perdidas = 0; + $set('perdidas', $perdidas); + }), TextInput::make('perdidas') - ->disabled() - ->dehydrated(false), + ->numeric() + ->readOnly() + ->default(0), Textarea::make('observaciones') ->columnSpanFull(), diff --git a/app/Models/Tintoreria.php b/app/Models/Tintoreria.php index b46834b..71c9f36 100644 --- a/app/Models/Tintoreria.php +++ b/app/Models/Tintoreria.php @@ -33,9 +33,25 @@ class Tintoreria extends Model protected static function booted() { static::saving(function ($tintoreria) { + // Fecha de envío por defecto + if (! $tintoreria->fecha_envio) { + $tintoreria->fecha_envio = now(); + } + + // Validación: cantidad_enviada no puede exceder la suma de confecciones recibidas de la OP + if ($tintoreria->cantidad_enviada !== null && $tintoreria->orden_produccion_id) { + $sum = \App\Models\Confeccion::where('orden_produccion_id', $tintoreria->orden_produccion_id)->sum('cantidad_recibida'); + if ($sum && $tintoreria->cantidad_enviada > $sum) { + throw \Illuminate\Validation\ValidationException::withMessages([ + 'cantidad_enviada' => 'La cantidad enviada no puede exceder la cantidad recibida en Confección (' . $sum . ').', + ]); + } + } + if ($tintoreria->cantidad_recibida !== null) { $tintoreria->perdidas = $tintoreria->cantidad_enviada - $tintoreria->cantidad_recibida; + if ($tintoreria->perdidas < 0) $tintoreria->perdidas = 0; } });