up
This commit is contained in:
@@ -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."
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user