diff --git a/app/Filament/Resources/OrdenProduccionResource.php b/app/Filament/Resources/OrdenProduccionResource.php index 704993a..076aa8b 100644 --- a/app/Filament/Resources/OrdenProduccionResource.php +++ b/app/Filament/Resources/OrdenProduccionResource.php @@ -125,9 +125,6 @@ class OrdenProduccionResource extends Resource TextColumn::make('prenda_modelo') ->searchable(), - TextColumn::make('referencia') - ->searchable(), - TextColumn::make('cantidad_total') ->label('Cantidad'), diff --git a/app/Models/OrdenProduccion.php b/app/Models/OrdenProduccion.php index d4484ae..1cf1272 100644 --- a/app/Models/OrdenProduccion.php +++ b/app/Models/OrdenProduccion.php @@ -58,95 +58,7 @@ class OrdenProduccion extends Model return $this->belongsTo(\App\Models\Producto::class, 'producto_id'); } - // Total realizado: suma de cantidad_terminada en inventarios asociados - public function getRealizadoAttribute() - { - return (int) $this->inventarioPrenda()->sum('cantidad_terminada'); - } - // Faltantes = cantidad_total - realizado - public function getFaltantesAttribute() - { - return max(0, (int)$this->cantidad_total - $this->realizado); - } - - public function avanzarEstado(): void - { - $flujo = [ - 'en_corte', - 'en_confeccion', - 'en_tintoreria', - 'en_acabados', - 'finalizada', - ]; - - $actual = array_search($this->estado, $flujo, true); - - if ($actual !== false && isset($flujo[$actual + 1])) { - $this->update([ - 'estado' => $flujo[$actual + 1], - ]); - - // Si la orden llega a finalizada, crear entrada en inventario con lo que haya ingresado - if ($this->estado === 'finalizada') { - // Sumar procesos de acabados recibidos para determinar cantidad terminada - $cantidad = \App\Models\ProcesoAcabado::where('orden_produccion_id', $this->id) - ->whereNotNull('fecha_recepcion') - ->sum('cantidad_recibida'); - - // Crear inventario solo si hay traslados a bodega con cantidad - if ($cantidad > 0 && !\App\Models\InventarioPrenda::where('orden_produccion_id', $this->id)->exists()) { - // Determinar producto asociado: preferir producto_id en la OP, sino crear/buscar por prenda_modelo - $productoId = $this->producto_id; - - if (! $productoId) { - $nombre = $this->prenda_modelo ?? $this->referencia ?? null; - if ($nombre) { - // Generar código de barras único por defecto para productos creados automáticamente - $codigo = 'AUTOP-' . $this->id . '-' . time(); - $codigo = substr($codigo, 0, 50); - - // Asegurar unicidad - while (\App\Models\Producto::where('codigo_barras', $codigo)->exists()) { - $codigo .= '-' . rand(0, 9); - $codigo = substr($codigo, 0, 50); - } - - $producto = \App\Models\Producto::firstOrCreate( - ['nombre' => $nombre], - [ - 'descripcion' => 'Creado automáticamente desde OrdenProduccion #' . $this->id, - 'stock' => 0, - 'estado' => true, - 'precio_compra' => 0, - 'precio_venta' => 0, - 'unidad_medida' => 'unidad', - 'codigo_barras' => $codigo, - ] - ); - - $productoId = $producto->id; - - // Guardar vínculo en la OP para futuras referencias - $this->producto_id = $productoId; - $this->save(); - } - } - - \App\Models\InventarioPrenda::create([ - 'orden_produccion_id' => $this->id, - 'cantidad_terminada' => $cantidad, - 'cantidad_disponible' => $cantidad, - 'fecha_ingreso' => now(), - 'estado' => 'en_bodega', - 'producto_id' => $productoId ?? null, - ]); - - // Si se creó inventario, también actualizar stock del producto asociado (handler en InventarioPrenda lo hará) - } - } - } - } protected static function booted() { @@ -357,5 +269,5 @@ class OrdenProduccion extends Model } } } - } } + } } diff --git a/app/Models/ProcesoAcabado.php b/app/Models/ProcesoAcabado.php index 75a2c77..f249773 100644 --- a/app/Models/ProcesoAcabado.php +++ b/app/Models/ProcesoAcabado.php @@ -80,15 +80,8 @@ class ProcesoAcabado extends Model ->exists(); if (!$pendientes) { - $op = $acabado->ordenProduccion; - if ($op) { - $realizado = (int) $op->inventarioPrenda()->sum('cantidad_terminada'); - if ($realizado >= (int) ($op->cantidad_total ?? 0)) { - $op->update([ - 'estado' => 'finalizada', - ]); - } - } + // Intentar finalizar la OP solo si está completada según la lógica centralizada + $acabado->ordenProduccion?->tryFinalize(); } } };