- Configure workspace Git repository with comprehensive .gitignore - Add Odoo as submodule for ERP reference code - Include documentation: SETUP.md, GIT-STRUCTURE.md - Add gitignore templates for projects (backend, frontend, database) - Structure supports independent repos per project/subproject level Workspace includes: - core/ - Reusable patterns, modules, orchestration system - projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.) - knowledge-base/ - Reference code and patterns (includes Odoo submodule) - devtools/ - Development tools and templates - customers/ - Client implementations template 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
203 lines
5.9 KiB
Markdown
203 lines
5.9 KiB
Markdown
# 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)
|