From 0318213144056ae1d54b5278120c79d1f221eafc Mon Sep 17 00:00:00 2001 From: lizandrogd <77708265+lizandrogd@users.noreply.github.com> Date: Mon, 19 Jan 2026 20:21:31 -0500 Subject: [PATCH] up --- app/Models/OrdenProduccion.php | 21 +++++++- .../OrdenProduccionAutoProductoTest.php | 52 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 tests/Feature/OrdenProduccionAutoProductoTest.php diff --git a/app/Models/OrdenProduccion.php b/app/Models/OrdenProduccion.php index 96c926f..3ead951 100644 --- a/app/Models/OrdenProduccion.php +++ b/app/Models/OrdenProduccion.php @@ -90,10 +90,29 @@ class OrdenProduccion extends Model 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'] + [ + '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 diff --git a/tests/Feature/OrdenProduccionAutoProductoTest.php b/tests/Feature/OrdenProduccionAutoProductoTest.php new file mode 100644 index 0000000..83cdcf3 --- /dev/null +++ b/tests/Feature/OrdenProduccionAutoProductoTest.php @@ -0,0 +1,52 @@ + 'Test Model', + 'referencia' => 'REF-T', + 'cantidad_total' => 10, + 'fecha_inicio' => now()->toDateString(), + 'fecha_entrega_estimada' => now()->addDays(7)->toDateString(), + 'estado' => 'en_acabados', + ]); + + // Crear traslado a bodega para que al finalizar se cree inventario y producto + TrasladoPrenda::create([ + 'orden_produccion_id' => $op->id, + 'referencia_type' => OrdenProduccion::class, + 'referencia_id' => $op->id, + 'origen' => 'acabados', + 'destino' => 'bodega', + 'cantidad_enviada' => 10, + 'cantidad_recibida' => 10, + 'fecha_envio' => now(), + 'fecha_recepcion' => now(), + 'estado' => 'recibido', + ]); + + $op->avanzarEstado(); // debe pasar a finalizada y crear inventario/producto + + $op->refresh(); + + $this->assertEquals('finalizada', $op->estado); + $this->assertNotNull($op->producto_id); + + $producto = \App\Models\Producto::find($op->producto_id); + + $this->assertNotNull($producto); + $this->assertNotEmpty($producto->codigo_barras); + } +}