Aplicoop desde el repo de kidekoop
This commit is contained in:
parent
69917d1ec2
commit
7cff89e418
93 changed files with 313992 additions and 0 deletions
36
website_sale_aplicoop/migrations/18.0.1.0.0/post-migrate.py
Normal file
36
website_sale_aplicoop/migrations/18.0.1.0.0/post-migrate.py
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
"""Fill pickup_day and pickup_date for existing group orders."""
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
||||
def migrate(cr, version):
|
||||
"""
|
||||
Fill pickup_day and pickup_date for existing group orders.
|
||||
|
||||
This ensures that existing group orders show delivery information.
|
||||
"""
|
||||
from odoo import api, SUPERUSER_ID
|
||||
|
||||
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||
|
||||
# Get all group orders that don't have pickup_day set
|
||||
group_orders = env['group.order'].search([('pickup_day', '=', False)])
|
||||
|
||||
if not group_orders:
|
||||
return
|
||||
|
||||
# Set default values: Friday (4) and one week from now
|
||||
today = datetime.now().date()
|
||||
|
||||
# Find Friday of next week (day 4)
|
||||
days_until_friday = (4 - today.weekday()) % 7 # 4 = Friday
|
||||
if days_until_friday == 0:
|
||||
days_until_friday = 7
|
||||
friday = today + timedelta(days=days_until_friday)
|
||||
|
||||
for order in group_orders:
|
||||
order.write({
|
||||
'pickup_day': 4, # Friday
|
||||
'pickup_date': friday,
|
||||
'delivery_notice': 'Home delivery available.',
|
||||
})
|
||||
30
website_sale_aplicoop/migrations/18.0.1.0.2/post-migrate.py
Normal file
30
website_sale_aplicoop/migrations/18.0.1.0.2/post-migrate.py
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Copyright 2025 Criptomart
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
|
||||
|
||||
from odoo import api, SUPERUSER_ID
|
||||
|
||||
|
||||
def migrate(cr, version):
|
||||
"""Migración para agregar soporte multicompañía.
|
||||
|
||||
- Asignar company_id a los registros existentes de group.order
|
||||
- Usar la compañía por defecto del sistema
|
||||
"""
|
||||
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||
|
||||
# Obtener la compañía por defecto
|
||||
default_company = env['res.company'].search([], limit=1)
|
||||
|
||||
if default_company:
|
||||
# Actualizar todos los registros de group.order que no tengan company_id
|
||||
cr.execute(
|
||||
"""
|
||||
UPDATE group_order
|
||||
SET company_id = %s
|
||||
WHERE company_id IS NULL
|
||||
""",
|
||||
(default_company.id,)
|
||||
)
|
||||
|
||||
cr.commit()
|
||||
print(f"✓ Asignado company_id={default_company.id} a group.order")
|
||||
120
website_sale_aplicoop/migrations/18.0.1.0.2_supplier_pricing.md
Normal file
120
website_sale_aplicoop/migrations/18.0.1.0.2_supplier_pricing.md
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
# 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue