up
This commit is contained in:
@@ -13,71 +13,36 @@ class CreateOjalPresilla extends CreateRecord
|
|||||||
|
|
||||||
protected function handleRecordCreation(array $data): \Illuminate\Database\Eloquent\Model
|
protected function handleRecordCreation(array $data): \Illuminate\Database\Eloquent\Model
|
||||||
{
|
{
|
||||||
$distribuciones = $data['distribuciones'] ?? [];
|
$tipo = $data['tipo'];
|
||||||
$tipo = $data['tipo'] ?? 'accesorio';
|
|
||||||
$ordenProduccionId = $data['orden_produccion_id'];
|
|
||||||
$cantidadTotal = $data['cantidad_enviada'];
|
|
||||||
$terminada = $data['terminada'] ?? false;
|
|
||||||
|
|
||||||
// Validar que haya al menos una distribución
|
|
||||||
if (empty($distribuciones)) {
|
|
||||||
throw \Illuminate\Validation\ValidationException::withMessages([
|
|
||||||
'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);
|
|
||||||
|
|
||||||
try {
|
// Determinar en qué tabla guardar según el tipo
|
||||||
foreach ($distribuciones as $distribucion) {
|
if ($tipo === 'Ojal') {
|
||||||
$registro = \App\Models\Ojal::create([
|
$registro = \App\Models\Ojal::create([
|
||||||
'proveedor_id' => $distribucion['proveedor_id'],
|
'proveedor_id' => $data['proveedor_id'],
|
||||||
'orden_produccion_id' => $ordenProduccionId,
|
'orden_produccion_id' => $data['orden_produccion_id'],
|
||||||
'tipo' => $tipo,
|
'tipo' => $tipo,
|
||||||
'fecha_envio' => now(),
|
'fecha_envio' => now(),
|
||||||
'cantidad_enviada' => $distribucion['cantidad'],
|
'cantidad_enviada' => $data['cantidad_enviada'],
|
||||||
'terminada' => $terminada,
|
'terminada' => $data['terminada'] ?? false,
|
||||||
]);
|
]);
|
||||||
|
} else {
|
||||||
if (!$primerRegistro) {
|
$registro = \App\Models\Prensilla::create([
|
||||||
$primerRegistro = $registro;
|
'proveedor_id' => $data['proveedor_id'],
|
||||||
}
|
'orden_produccion_id' => $data['orden_produccion_id'],
|
||||||
}
|
'tipo' => $tipo,
|
||||||
} catch (\Exception $e) {
|
'fecha_envio' => now(),
|
||||||
throw \Illuminate\Validation\ValidationException::withMessages([
|
'cantidad_enviada' => $data['cantidad_enviada'],
|
||||||
'distribuciones' => 'Error al crear registros: ' . $e->getMessage()
|
'terminada' => $data['terminada'] ?? false,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notificación de éxito
|
|
||||||
\Filament\Notifications\Notification::make()
|
\Filament\Notifications\Notification::make()
|
||||||
->title('Registros creados exitosamente')
|
->title('Registro creado exitosamente')
|
||||||
->body("Se crearon {$cantidadRegistros} registro(s) de {$tipo} para {$sumaDistribucion} unidades.")
|
->body("Se creó el registro de {$tipo}")
|
||||||
->success()
|
->success()
|
||||||
->send();
|
->send();
|
||||||
|
|
||||||
// Retornar el primer registro para que Filament no falle
|
return $registro;
|
||||||
return $primerRegistro;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getRedirectUrl(): string
|
protected function getRedirectUrl(): string
|
||||||
|
|||||||
@@ -17,4 +17,17 @@ class ListOjalPresillas extends ListRecords
|
|||||||
->label('Crear'),
|
->label('Crear'),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getTableQuery(): ?\Illuminate\Database\Eloquent\Builder
|
||||||
|
{
|
||||||
|
// Combinar registros de ojales y prensillas
|
||||||
|
$ojales = \App\Models\Ojal::query()
|
||||||
|
->selectRaw("id, 'ojales' as table_name, proveedor_id, orden_produccion_id, tipo, fecha_envio, cantidad_enviada, fecha_recepcion, cantidad_recibida, terminada, created_at, updated_at");
|
||||||
|
|
||||||
|
$prensillas = \App\Models\Prensilla::query()
|
||||||
|
->selectRaw("id, 'prensillas' as table_name, proveedor_id, orden_produccion_id, tipo, fecha_envio, cantidad_enviada, fecha_recepcion, cantidad_recibida, terminada, created_at, updated_at");
|
||||||
|
|
||||||
|
// Unir ambas queries y ordenar por fecha de creación
|
||||||
|
return $ojales->union($prensillas)->orderByDesc('created_at');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user