diff --git a/app/Filament/Resources/ProcesoAcabadoResource.php b/app/Filament/Resources/ProcesoAcabadoResource.php index a94ef45..fb303df 100644 --- a/app/Filament/Resources/ProcesoAcabadoResource.php +++ b/app/Filament/Resources/ProcesoAcabadoResource.php @@ -42,7 +42,16 @@ class ProcesoAcabadoResource extends Resource ->label('Orden de Producción') ->relationship('ordenProduccion', 'numero_orden') ->searchable() - ->required(), + ->reactive() + ->required() + ->afterStateUpdated(function ($state, $set) { + if ($state) { + // Sumar lo recibido en Tintorería para esta OP + $sumTint = \App\Models\Tintoreria::where('orden_produccion_id', $state)->sum('cantidad_recibida'); + $set('cantidad_enviada', $sumTint ?: 0); + $set('fecha_envio', now()->toDateString()); + } + }), TextInput::make('tipo_proceso') ->label('Tipo de proceso') @@ -61,13 +70,16 @@ class ProcesoAcabadoResource extends Resource TextInput::make('cantidad_enviada') ->numeric() - ->required(), + ->required() + ->reactive() + ->helperText(fn ($get) => 'Sugerido: ' . (\App\Models\Tintoreria::where('orden_produccion_id', $get('orden_produccion_id'))->sum('cantidad_recibida') ?: 0)), TextInput::make('cantidad_recibida') ->numeric(), DatePicker::make('fecha_envio') - ->required(), + ->required() + ->default(now()), DatePicker::make('fecha_recepcion'), diff --git a/app/Models/ProcesoAcabado.php b/app/Models/ProcesoAcabado.php index 28aa7f8..bb21533 100644 --- a/app/Models/ProcesoAcabado.php +++ b/app/Models/ProcesoAcabado.php @@ -32,6 +32,23 @@ class ProcesoAcabado extends Model /* Lógica de negocio */ protected static function booted() { + static::saving(function ($acabado) { + // Fecha de envío por defecto + if (! $acabado->fecha_envio) { + $acabado->fecha_envio = now(); + } + + // Validación: cantidad_enviada no puede exceder lo enviado desde Tintorería (cantidad recibida allí) + if ($acabado->cantidad_enviada !== null && $acabado->orden_produccion_id) { + $sumTint = \App\Models\Tintoreria::where('orden_produccion_id', $acabado->orden_produccion_id)->sum('cantidad_recibida'); + if ($sumTint && $acabado->cantidad_enviada > $sumTint) { + throw \Illuminate\Validation\ValidationException::withMessages([ + 'cantidad_enviada' => 'La cantidad enviada no puede exceder lo recibido en Tintorería (' . $sumTint . ').', + ]); + } + } + }); + $createTrasladoFn = function ($acabado) { if ($acabado->cantidad_recibida !== null) { // Evitar duplicados