# 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: ```bash 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) ```sql -- 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 ```sql -- 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 ```bash # 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