up
This commit is contained in:
@@ -19,36 +19,60 @@ class CreateOjalPresilla extends CreateRecord
|
||||
$cantidadTotal = $data['cantidad_enviada'];
|
||||
$terminada = $data['terminada'] ?? false;
|
||||
|
||||
// Validar que las distribuciones sumen la cantidad total
|
||||
$sumaDistribucion = array_sum(array_column($distribuciones, 'cantidad'));
|
||||
if ($sumaDistribucion != $cantidadTotal) {
|
||||
// Validar que haya al menos una distribución
|
||||
if (empty($distribuciones)) {
|
||||
throw \Illuminate\Validation\ValidationException::withMessages([
|
||||
'distribuciones' => "La suma de las distribuciones ({$sumaDistribucion}) debe ser igual a la cantidad total ({$cantidadTotal})."
|
||||
'distribuciones' => 'Debes agregar al menos un proveedor con su cantidad.'
|
||||
]);
|
||||
}
|
||||
|
||||
// Validar que las distribuciones no excedan la cantidad total
|
||||
$sumaDistribucion = array_sum(array_column($distribuciones, 'cantidad'));
|
||||
if ($sumaDistribucion > $cantidadTotal) {
|
||||
throw \Illuminate\Validation\ValidationException::withMessages([
|
||||
'distribuciones' => "La suma de las distribuciones ({$sumaDistribucion}) excede la cantidad total disponible ({$cantidadTotal})."
|
||||
]);
|
||||
}
|
||||
|
||||
// Advertir si no se distribuye todo (pero permitirlo)
|
||||
if ($sumaDistribucion < $cantidadTotal) {
|
||||
$diferencia = $cantidadTotal - $sumaDistribucion;
|
||||
\Filament\Notifications\Notification::make()
|
||||
->warning()
|
||||
->title('Distribución parcial')
|
||||
->body("Se distribuirán {$sumaDistribucion} de {$cantidadTotal} unidades. Quedarán {$diferencia} sin asignar.")
|
||||
->send();
|
||||
}
|
||||
|
||||
// Crear un registro por cada proveedor
|
||||
$primerRegistro = null;
|
||||
$cantidadRegistros = count($distribuciones);
|
||||
foreach ($distribuciones as $distribucion) {
|
||||
$registro = \App\Models\Ojal::create([
|
||||
'proveedor_id' => $distribucion['proveedor_id'],
|
||||
'orden_produccion_id' => $ordenProduccionId,
|
||||
'tipo' => $tipo,
|
||||
'fecha_envio' => now(),
|
||||
'cantidad_enviada' => $distribucion['cantidad'],
|
||||
'terminada' => $terminada,
|
||||
]);
|
||||
|
||||
if (!$primerRegistro) {
|
||||
$primerRegistro = $registro;
|
||||
|
||||
try {
|
||||
foreach ($distribuciones as $distribucion) {
|
||||
$registro = \App\Models\Ojal::create([
|
||||
'proveedor_id' => $distribucion['proveedor_id'],
|
||||
'orden_produccion_id' => $ordenProduccionId,
|
||||
'tipo' => $tipo,
|
||||
'fecha_envio' => now(),
|
||||
'cantidad_enviada' => $distribucion['cantidad'],
|
||||
'terminada' => $terminada,
|
||||
]);
|
||||
|
||||
if (!$primerRegistro) {
|
||||
$primerRegistro = $registro;
|
||||
}
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
throw \Illuminate\Validation\ValidationException::withMessages([
|
||||
'distribuciones' => 'Error al crear registros: ' . $e->getMessage()
|
||||
]);
|
||||
}
|
||||
|
||||
// Notificación de éxito
|
||||
\Filament\Notifications\Notification::make()
|
||||
->title('Registros creados exitosamente')
|
||||
->body("Se crearon {$cantidadRegistros} registro(s) para los proveedores.")
|
||||
->body("Se crearon {$cantidadRegistros} registro(s) de {$tipo} para {$sumaDistribucion} unidades.")
|
||||
->success()
|
||||
->send();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user