addons-cm/website_sale_aplicoop/migrations/18.0.1.0.2_supplier_pricing.md
2026-02-11 15:32:11 +01:00

3.6 KiB

Migración de Base de Datos - Sistema de Márgenes Inteligentes

📝 Resumen

Se agregan tres campos nuevos a la base de datos:

  1. res_partner.supplier_type → Selection (5 opciones)
  2. product_category.margin_percent → Float (default: 20.0)
  3. product_template.default_supplier_id → Many2one a res.partner

🗃️ Scripts de Migración

Opción 1: Migración Automática (Recomendado)

Odoo genera automáticamente las columnas al actualizar el módulo:

cd /home/snt/Documentos/lab/odoo/kidekoop/odoo-addons
python -m odoo -d odoo -u website_sale_aplicoop

Opción 2: Migración Manual (para producción)

-- Agregamos columna supplier_type a res_partner
ALTER TABLE res_partner
ADD COLUMN IF NOT EXISTS supplier_type VARCHAR(50)
DEFAULT 'non_supplier';

-- Agregamos columna margin_percent a product_category
ALTER TABLE product_category
ADD COLUMN IF NOT EXISTS margin_percent NUMERIC(5,2)
DEFAULT 20.0;

-- Agregamos columna default_supplier_id a product_template
ALTER TABLE product_template
ADD COLUMN IF NOT EXISTS default_supplier_id INTEGER REFERENCES res_partner(id);

-- Crear índice para búsquedas rápidas
CREATE INDEX IF NOT EXISTS idx_res_partner_supplier_type
ON res_partner(supplier_type);

Validación Post-Migración

-- Verificar que las columnas existan
SELECT column_name, data_type, column_default
FROM information_schema.columns
WHERE table_name = 'res_partner'
  AND column_name = 'supplier_type';

SELECT column_name, data_type, column_default
FROM information_schema.columns
WHERE table_name = 'product_category'
  AND column_name = 'margin_percent';

SELECT column_name, data_type, column_default
FROM information_schema.columns
WHERE table_name = 'product_template'
  AND column_name = 'default_supplier_id';

🔄 Compatibilidad Backward

  • Sin pérdida de datos: Solo se agregan campos nuevos
  • Valores por defecto: Todos tienen valores por defecto
  • No requiere desinstalación: Se puede actualizar sobre instalación existente
  • Reversible: Los campos se pueden eliminar sin afectar otros

📊 Impacto en Base de Datos

Tabla Cambios Tamaño (aprox.)
res_partner +1 columna VARCHAR(50) +50 bytes por fila
product_category +1 columna NUMERIC(5,2) +8 bytes por fila
product_template +1 columna INTEGER (FK) +8 bytes por fila

Total: ~66 bytes por producto existente (negligible)

🚀 Procedimiento de Actualización

# 1. Backup de la BD
pg_dump odoo > backup_2025_12_16.sql

# 2. Actualizar código
cd /home/snt/Documentos/lab/odoo/kidekoop/odoo-addons
git add -A
git commit -m "feat: add supplier pricing system with margins"

# 3. Actualizar módulo
python -m odoo -d odoo -u website_sale_aplicoop --stop-after-init

# 4. Ejecutar tests
python -m pytest website_sale_aplicoop/tests/test_supplier_pricing.py -v

# 5. Validar en UI (opcional)
python -m odoo -d odoo -p 8069 --xmlrpc
# Ir a http://localhost:8069
# Contactos → ver supplier_type
# Productos → Categorías → ver margin_percent

⚠️ Notas Importantes

  1. Margen mínimo: Se valida en Python, no en BD
  2. Compatibilidad: Los campos son opcionales (valores por defecto)
  3. Performance: El campo supplier_type es indexed para búsquedas rápidas
  4. Extensibilidad: Se pueden agregar más tipos de proveedor sin modificar BD

📋 Checklist Post-Migración

  • Campos creados correctamente
  • Valores por defecto aplicados
  • Índices creados
  • Tests pasen
  • UI muestra campos nuevos
  • Datos existentes intactos
  • Backup realizado