From 2b7e1ee461ce3bbed62e70e13d9fc240aa996863 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Thu, 29 Jan 2026 21:01:49 -0500 Subject: [PATCH] Update TintoreriaResource.php --- app/Filament/Resources/TintoreriaResource.php | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/app/Filament/Resources/TintoreriaResource.php b/app/Filament/Resources/TintoreriaResource.php index 6112dda..4f17a6f 100644 --- a/app/Filament/Resources/TintoreriaResource.php +++ b/app/Filament/Resources/TintoreriaResource.php @@ -50,28 +50,49 @@ class TintoreriaResource extends Resource Select::make('orden_produccion_id') ->label('Orden de Producción') - ->options(fn () => \App\Models\OrdenProduccion::whereRaw('( - select coalesce(sum(cantidad_recibida),0) from confeccions where confeccions.orden_produccion_id = orden_produccions.id - ) - ( - select coalesce(sum(cantidad_enviada),0) from tintorerias where tintorerias.orden_produccion_id = orden_produccions.id and tintorerias.fecha_recepcion is null - ) > 0')->pluck('numero_orden', 'id')->toArray()) + ->options(fn () => \App\Models\OrdenProduccion::whereHas('ojales', function ($query) { + $query->where('terminada', true); + })->get()->mapWithKeys(function ($op) { + // Calcular cantidad disponible de ojales terminados + $cantidadOjalesTerminados = \App\Models\Ojal::where('orden_produccion_id', $op->id) + ->where('terminada', true) + ->sum('cantidad_enviada'); + + // Calcular cantidad ya enviada a tintorería + $enviadasEnTint = \App\Models\Tintoreria::where('orden_produccion_id', $op->id) + ->whereNull('fecha_recepcion') + ->sum('cantidad_enviada'); + + // Calcular disponible + $disponible = $cantidadOjalesTerminados - $enviadasEnTint; + + if ($disponible > 0) { + return [$op->id => "{$op->numero_orden} (Disponible: {$disponible})"]; + } + return []; + })->filter()) ->searchable() ->preload() ->reactive() ->required() ->afterStateUpdated(function ($state, $set) { if ($state) { - $totalRecibido = \App\Models\Confeccion::where('orden_produccion_id', $state)->sum('cantidad_recibida'); + // Calcular cantidad disponible de ojales terminados + $cantidadOjalesTerminados = \App\Models\Ojal::where('orden_produccion_id', $state) + ->where('terminada', true) + ->sum('cantidad_enviada'); + $enviadasEnTint = \App\Models\Tintoreria::where('orden_produccion_id', $state) ->whereNull('fecha_recepcion') ->sum('cantidad_enviada'); - $pending = max(0, (int)$totalRecibido - (int)$enviadasEnTint); + $pending = max(0, (int)$cantidadOjalesTerminados - (int)$enviadasEnTint); $set('cantidad_enviada', $pending ?: 0); $set('fecha_envio', now()->toDateString()); } - }), + }) + ->helperText('Solo se muestran órdenes con ojales/prensillas terminados'), TextInput::make('tipo_proceso') ->label('Tipo de proceso')