'Camisa A', 'referencia' => 'CAM-A', 'cantidad_total' => 100, 'fecha_inicio' => now(), 'fecha_entrega_estimada' => now()->addDays(7), 'estado' => 'en_confeccion', ]); // Crear proveedor/taller/tintorería para usar en los pasos // Crear proveedor compatible con migraciones actuales $proveedor = \App\Models\Proveedor::create([ 'nombre' => 'Proveedor Test', 'nit' => '123456789', 'categoria' => 'talleres', ]); // Paso 1: Confección - envía 100, llegan 95, 2 defectuosas $conf = Confeccion::create([ 'proveedor_id' => $proveedor->id, 'orden_produccion_id' => $op->id, 'fecha_envio' => now(), 'cantidad_enviada' => 100, 'fecha_recepcion' => now(), 'cantidad_recibida' => 95, 'prendas_defectuosas' => 2, 'valor_por_prenda' => 1000, ]); $this->assertDatabaseHas('traslados_prenda', [ 'referencia_type' => Confeccion::class, 'referencia_id' => $conf->id, 'origen' => 'confeccion', 'destino' => 'tintoreria', 'cantidad_enviada' => 100, 'cantidad_recibida' => 95, 'prendas_defectuosas' => 2, 'residual' => 3, ]); $op->refresh(); $this->assertEquals('en_tintoreria', $op->estado); // Paso 2: Tintorería - envía 95, llegan 94, perdida 1 $tint = Tintoreria::create([ 'proveedor_id' => $proveedor->id, 'orden_produccion_id' => $op->id, 'tipo_proceso' => 'Tinte', 'fecha_envio' => now(), 'cantidad_enviada' => 95, 'fecha_recepcion' => now(), 'cantidad_recibida' => 94, 'perdidas' => 1, ]); $this->assertDatabaseHas('traslados_prenda', [ 'referencia_type' => Tintoreria::class, 'referencia_id' => $tint->id, 'origen' => 'tintoreria', 'destino' => 'acabados', 'cantidad_enviada' => 95, 'cantidad_recibida' => 94, 'prendas_defectuosas' => 1, 'residual' => 0, ]); $op->refresh(); // Puede ser que no haya procesos de acabado definidos y la OP ya esté finalizada; $this->assertTrue(in_array($op->estado, ['en_acabados', 'finalizada']), "Estado inesperado de OP: {$op->estado}"); // Paso 3: Acabados - envía 94, llegan 94 $acab = ProcesoAcabado::create([ 'orden_produccion_id' => $op->id, 'tipo_proceso' => 'Acabado', 'proveedor_id' => $proveedor->id, 'cantidad_enviada' => 94, 'fecha_envio' => now(), 'fecha_recepcion' => now(), 'cantidad_recibida' => 94, ]); $this->assertDatabaseHas('traslados_prenda', [ 'referencia_type' => ProcesoAcabado::class, 'referencia_id' => $acab->id, 'origen' => 'acabados', 'destino' => 'bodega', 'cantidad_enviada' => 94, 'cantidad_recibida' => 94, 'residual' => 0, ]); $op->refresh(); $this->assertEquals('finalizada', $op->estado); // Inventario creado $this->assertDatabaseHas('inventario_prendas', [ 'orden_produccion_id' => $op->id, 'cantidad_terminada' => 94, 'cantidad_disponible' => 94, 'estado' => 'en_bodega', ]); } }