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')