Fecha de clonación: 2025-12-05
Versión: 18.0
Fuente: https://github.com/odoo/odoo
Propósito
Este repositorio sirve como referencia de lógica de negocio para el desarrollo del ERP Suite.
NO se ejecutará Odoo, solo se usará para:
- Validar modelos de datos - Comparar nuestras tablas con los modelos Odoo
- Revisar lógica de negocio - Workflows, estados, validaciones
- Consultar patrones - RBAC, multi-company, computed fields
- Verificar constraints - Reglas de negocio probadas
Estructura Relevante
odoo-18.0/
├── odoo/addons/base/ # Módulo base (usuarios, companies, partners)
│ ├── models/
│ │ ├── res_users.py # Usuarios y autenticación
│ │ ├── res_company.py # Empresas/multi-company
│ │ ├── res_partner.py # Partners (clientes/proveedores)
│ │ ├── res_currency.py # Monedas y tasas de cambio
│ │ ├── res_country.py # Países y estados
│ │ ├── ir_rule.py # Record Rules (RLS)
│ │ └── ir_model.py # Permisos por modelo
│ └── security/
│ ├── ir.model.access.csv # Permisos CRUD
│ └── base_groups.xml # Grupos/roles base
│
├── addons/
│ ├── account/ # Contabilidad
│ ├── stock/ # Inventario
│ ├── purchase/ # Compras
│ ├── sale/ # Ventas
│ ├── crm/ # CRM
│ ├── hr/ # Recursos Humanos
│ ├── project/ # Proyectos
│ ├── mail/ # Mensajería/Notificaciones
│ ├── portal/ # Portal usuarios externos
│ ├── analytic/ # Contabilidad analítica
│ └── auth_signup/ # Registro de usuarios
Mapeo Odoo → ERP Suite
| Módulo Odoo |
Módulo ERP Suite |
Archivos Clave |
| base (res.users) |
MGN-001 Auth |
res_users.py, ir_rule.py |
| base (res.company) |
MGN-002 |
res_company.py |
| base (res.partner) |
MGN-003 Catalogs |
res_partner.py, res_country.py |
| account |
MGN-010 Financial |
account_move.py, account_account.py |
| stock |
MGN-011 Inventory |
stock_move.py, stock_quant.py |
| purchase |
MGN-012 Purchasing |
purchase_order.py |
| sale |
- |
sale_order.py |
| crm |
MGN-013 CRM |
crm_lead.py |
| hr |
- |
hr_employee.py |
| project |
- |
project.py, project_task.py |
| mail |
MGN-008 Notifications |
mail_message.py, mail_thread.py |
| portal |
- |
portal_mixin.py |
| analytic |
- |
analytic_account.py |
Cómo Usar Esta Referencia
1. Consultar Modelo de Datos
# Ver campos de usuarios
cat odoo-18.0/odoo/addons/base/models/res_users.py
# Ver campos de partners
cat odoo-18.0/odoo/addons/base/models/res_partner.py
2. Ver Permisos y Grupos
# Permisos CRUD por modelo
cat odoo-18.0/odoo/addons/base/security/ir.model.access.csv
# Definición de grupos
cat odoo-18.0/odoo/addons/base/security/base_groups.xml
3. Revisar Lógica de Negocio
# Workflow de órdenes de compra
cat odoo-18.0/addons/purchase/models/purchase_order.py
# Movimientos de inventario
cat odoo-18.0/addons/stock/models/stock_move.py
4. Ver Record Rules (RLS)
# Reglas de seguridad
grep -r "ir.rule" odoo-18.0/odoo/addons/base/security/
Archivos Más Consultados
Para MGN-001 Auth / MGN-002 Users / MGN-003 RBAC
| Archivo |
Propósito |
odoo/addons/base/models/res_users.py |
Modelo de usuarios, autenticación |
odoo/addons/base/models/ir_rule.py |
Record Rules (equivalente a RLS) |
odoo/addons/base/security/ir.model.access.csv |
Permisos CRUD |
odoo/addons/base/security/base_groups.xml |
Grupos y roles |
addons/auth_signup/models/res_users.py |
Registro de usuarios |
Para MGN-004 Tenants
| Archivo |
Propósito |
odoo/addons/base/models/res_company.py |
Multi-company (≈ multi-tenant) |
odoo/addons/base/models/ir_rule.py |
Filtrado por company_id |
Para Módulos de Negocio
| Archivo |
Propósito |
addons/account/models/account_move.py |
Asientos contables |
addons/stock/models/stock_move.py |
Movimientos de inventario |
addons/purchase/models/purchase_order.py |
Órdenes de compra |
addons/sale/models/sale_order.py |
Órdenes de venta |
Patrones Importantes a Estudiar
1. Estados y Transiciones
# En purchase_order.py
state = fields.Selection([
('draft', 'RFQ'),
('sent', 'RFQ Sent'),
('to approve', 'To Approve'),
('purchase', 'Purchase Order'),
('done', 'Locked'),
('cancel', 'Cancelled')
], string='Status', default='draft')
2. Computed Fields
@api.depends('order_line.price_total')
def _amount_all(self):
for order in self:
order.amount_total = sum(order.order_line.mapped('price_total'))
3. Constraints
@api.constrains('date_start', 'date_end')
def _check_dates(self):
if self.date_start > self.date_end:
raise ValidationError("End date must be after start date")
4. Multi-Company Filter
# En ir.rule XML
<record id="sale_order_company_rule" model="ir.rule">
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
</record>
Notas
- Tamaño: ~1.2GB (incluye todos los addons)
- Licencia: LGPL-3.0
- NO ejecutar: Solo referencia, no instalar dependencias Python
Enlaces Útiles