Apuntes DAM

Chuleta de Sistemas de Gestión Empresarial

ERP y CRM, implantación, Odoo por dentro, su ORM, vistas, seguridad y BI en una hoja.

Ponte a prueba con un simulacro

Conceptos

ERPIntegra los procesos de la empresa sobre una base de datos común
CRMRelación con clientes: oportunidades, embudo y seguimiento
MóduloÁrea funcional: ventas, compras, inventario, contabilidad, RR. HH.
On-premise · SaaSServidores propios · alquilado en la nube
Software libre · propietarioOdoo Community, Dolibarr · SAP, Microsoft Dynamics
Parametrizar · personalizarConfigurar lo que trae · programar lo que falta
Tema: Sistemas ERP-CRM

Implantación

1. AnálisisProcesos actuales, requisitos y alcance
2. SelecciónComparar soluciones, costes y proveedor
3. InstalaciónServidor, base de datos (PostgreSQL) y módulos
4. MigraciónLimpiar e importar clientes, productos, saldos
5. Formación y pruebasUsuarios clave y pruebas con datos reales
6. Arranque y soporteBig bang o por fases, mantenimiento y copias
Tema: Implantación de un ERP-CRM

Odoo desde la consola

odoo-bin -c odoo.confArrancar con un fichero de configuración
-d mibd -i moduloInstalar un módulo en la base mibd
-u moduloActualizar tras cambiar código o vistas
--dev=allRecarga automática y mensajes de depuración
odoo-bin scaffold modulo addons/Generar el esqueleto de un módulo
addons_pathCarpetas donde busca módulos
?debug=1Modo desarrollador en el navegador
Tema: Implantación de un ERP-CRM

Estructura de un módulo

# __manifest__.py{    "name": "Biblioteca",    "version": "17.0.1.0.0",    "depends": ["base", "mail"],    "data": [        "security/ir.model.access.csv",        "views/libro_views.xml",        "views/menus.xml",    ],    "application": True,}# __init__.py → from . import models# models/__init__.py → from . import libro
Tema: Desarrollo de Componentes ERP

Modelo y ORM

from odoo import api, fields, modelsfrom odoo.exceptions import ValidationError class Libro(models.Model):    _name = "biblioteca.libro"    _description = "Libro"    name = fields.Char("Título", required=True)    precio = fields.Float()    autor_id = fields.Many2one("res.partner", string="Autor")    copia_ids = fields.One2many("biblioteca.copia", "libro_id")    total = fields.Float(compute="_compute_total", store=True)     @api.depends("copia_ids", "precio")    def _compute_total(self):        for r in self:            r.total = r.precio * len(r.copia_ids)     @api.constrains("precio")    def _check_precio(self):        if any(r.precio < 0 for r in self):            raise ValidationError("El precio no puede ser negativo")
Tema: Desarrollo de Componentes ERP

Métodos del ORM

env["modelo"].search([("precio", ">", 10)])Buscar con un dominio
search_count · read_groupContar · agrupar
create({…}) · write({…}) · unlink()Crear · modificar · borrar
browse(ids) · mapped("campo") · filtered(lambda r: …)Trabajar con recordsets
['|', (a), (b)]Dominio con O (notación polaca)
_inherit = "res.partner"Extender un modelo existente
Tema: Desarrollo de Componentes ERP

Vistas XML

<record id="libro_list" model="ir.ui.view">  <field name="model">biblioteca.libro</field>  <field name="arch" type="xml">    <list>      <field name="name"/><field name="autor_id"/><field name="precio"/>    </list>  </field></record><record id="libro_action" model="ir.actions.act_window">  <field name="res_model">biblioteca.libro</field>  <field name="view_mode">list,form</field></record><menuitem id="libro_menu" name="Libros" action="libro_action"/>

Heredar una vista: inherit_id y <xpath expr="//field[@name='email']" position="after">. En versiones anteriores a la 17, <tree> en lugar de <list>.

Tema: Adaptación de un ERP-CRM

Seguridad

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlinkaccess_libro_user,libro user,model_biblioteca_libro,base.group_user,1,1,1,0

Grupos (res.groups) dan permisos por modelo; las reglas de registro (ir.rule) filtran qué filas ve cada usuario.

Tema: Adaptación de un ERP-CRM

BI y análisis

KPIIndicador clave: ventas por mes, margen, rotación de stock
Vistas pivot y graphTablas dinámicas y gráficos dentro de Odoo
ETLExtraer, transformar y cargar datos en un almacén
Data warehouseDatos históricos preparados para analizar
Cuadro de mandoResumen visual de los KPI para decidir
XML-RPC / JSON-RPCAPI externa de Odoo: execute_kw(db, uid, pwd, modelo, método, args)
Tema: Gestión de la Información y BI

Chuletas de otras asignaturas