Update TintoreriaResource.php

This commit is contained in:
Lizandro Guarnizo
2026-01-29 21:01:49 -05:00
parent cc8cc59c08
commit 2b7e1ee461
+29 -8
View File
@@ -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')