This commit is contained in:
Lizandro Guarnizo
2026-02-04 16:35:34 -05:00
parent cb7bc1229b
commit f37b2fe8d0
9 changed files with 598 additions and 105 deletions
+51
View File
@@ -83,7 +83,58 @@ class OrdenProduccion extends Model
return $this->belongsTo(\App\Models\Producto::class, 'producto_id');
}
/**
* Verifica si ambos procesos (ojales y prensillas) están completos para una cantidad específica
*
* @param int $cantidad Cantidad de prendas a verificar
* @return array ['completo' => bool, 'ojales_terminados' => int, 'prensillas_terminadas' => int, 'minimo' => int]
*/
public function verificarProcesosCom
pletos(int $cantidad = null): array
{
$cantidadVerificar = $cantidad ?? $this->cantidad_total;
// Cantidad de ojales terminados
$ojalesTerminados = $this->ojales()
->where('terminada', true)
->sum('cantidad_enviada');
// Cantidad de prensillas terminadas
$prensillasTerminadas = $this->prensillas()
->where('terminada', true)
->sum('cantidad_enviada');
// El mínimo entre ambos procesos
$minimoCompleto = min($ojalesTerminados, $prensillasTerminadas);
// Están completos si el mínimo cubre la cantidad requerida
$completo = $minimoCompleto >= $cantidadVerificar;
return [
'completo' => $completo,
'ojales_terminados' => $ojalesTerminados,
'prensillas_terminadas' => $prensillasTerminadas,
'minimo_completo' => $minimoCompleto,
'cantidad_requerida' => $cantidadVerificar,
'faltante_ojales' => max(0, $cantidadVerificar - $ojalesTerminados),
'faltante_prensillas' => max(0, $cantidadVerificar - $prensillasTerminadas),
];
}
/**
* Obtiene la cantidad disponible para enviar a tintorería
* (solo las prendas que tienen ambos procesos completos)
*/
public function getCantidadDisponibleParaTintoreria(): int
{
$verificacion = $this->verificarProcesosCompletos();
// Ya enviadas a tintorería
$enviadasTintoreria = $this->tintorerias()->sum('cantidad_enviada');
return max(0, $verificacion['minimo_completo'] - $enviadasTintoreria);
}
protected static function booted()
{