This commit is contained in:
Lizandro Guarnizo
2026-01-29 17:14:05 -05:00
parent f9f5455cd5
commit 35f56cbbe0
7 changed files with 299 additions and 82 deletions
+31 -5
View File
@@ -60,20 +60,46 @@ class Recepcion extends Model
$rec->fecha_recepcion = now();
}
// Validación: no permitir sobrepasar la cantidad enviada en la referencia (considerando defectuosos)
// Validación: no permitir sobrepasar la cantidad enviada en la referencia (considerando cobros)
if ($rec->referencia) {
$referencia = $rec->referencia;
$enviada = (int) ($referencia->cantidad_enviada ?? 0);
// ya recibido efectivo (cantidad - defectuosos)
// Ya recibido efectivo (cantidad - defectuosos) - arreglos permiten re-recepción
$yaRecibido = (int) \App\Models\Recepcion::where('referencia_type', get_class($referencia))
->where('referencia_id', $referencia->id)
->sum(\DB::raw('cantidad - COALESCE(prendas_defectuosas, 0)'));
// Los arreglos se restan porque permiten re-recepción cuando regresen
$arreglos = 0;
if (method_exists($referencia, 'ajustes')) {
$arreglos = (int) $referencia->ajustes()->where('tipo', 'arreglo')->sum('cantidad');
}
// Los cobros NO permiten más recepciones (son prendas que no llegaron)
$cobros = 0;
if (method_exists($referencia, 'cobros')) {
$cobros = (int) $referencia->cobros()->sum('cantidad');
}
$efectivo = $rec->cantidad - $rec->prendas_defectuosas;
if (($yaRecibido + $efectivo) > $enviada) {
throw ValidationException::withMessages(['cantidad' => "La recepción excede la cantidad pendiente (faltan: " . max(0, $enviada - $yaRecibido) . ")."]);
$yaRecibidoNeto = $yaRecibido - $arreglos;
$maxPermitido = $enviada - $cobros;
if (($yaRecibidoNeto + $efectivo) > $maxPermitido) {
$disponible = max(0, $maxPermitido - $yaRecibidoNeto);
throw ValidationException::withMessages([
'cantidad' => "La recepción excede lo permitido.
📊 Resumen:
Enviadas: {$enviada}
Ya recibidas (neto): {$yaRecibidoNeto}
Cobros registrados: {$cobros}
Arreglos (permiten re-recepción): {$arreglos}
Disponible para recibir: {$disponible}
➡️ Solo puedes recibir {$disponible} prendas más."
]);
}
}