# Referencia Odoo Community Edition 18.0

**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:

1. **Validar modelos de datos** - Comparar nuestras tablas con los modelos Odoo
2. **Revisar lógica de negocio** - Workflows, estados, validaciones
3. **Consultar patrones** - RBAC, multi-company, computed fields
4. **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

```bash
# 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

```bash
# 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

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

```bash
# 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

```python
# 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

```python
@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

```python
@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

```python
# 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

- [Odoo Documentation](https://www.odoo.com/documentation/18.0/)
- [Odoo GitHub](https://github.com/odoo/odoo)
- [Odoo ORM Reference](https://www.odoo.com/documentation/18.0/developer/reference/backend/orm.html)
