1 of 25

Creació de mòduls

2 of 25

OpenObject

  • Framework OpenObject
  • Tipus RAD (Rapid Application Development)
  • Capa ORM (Object Relational Mapping)
    • No cal dissenyar la base de dades.
  • Arquitectura MVC (Model vista controlador).
  • Fluxos de treball o Workflows.
  • Dissenyador d’informes.
  • Facilitat de traducció.

3 of 25

Model, Vista, Controlador

  • Model són les classes dissenyades amb Python
  • La vista està al client web i està definida en fitxers XML
  • El controlador són els mètodes definits en els fitxers Python.

4 of 25

La base de dades

  • No hi ha un disseny explícit de la base de dades.
  • És el resultat del mapatge del disseny de classes de l’ERP cap el SGBD PostgreSQL.
  • No facilita cap disseny entitat-relació ni tampoc cap diagrama del model relacional.
  • No obstant, cal conèixer els models més importants.

5 of 25

Noms dels models

Odoo possibilita recuperar el nom del model que defineix la informació d’un formulari i el nom dels ‘fields’ corresponents a cada camp del formulari.

6 of 25

Models vs Taules

  • El nom de les classes i atributs sempre és en minúscula.
  • S’utilitza el punt per a definir una certa jerarquia
  • En la base de dades, el punt es canvia per un guió baix

7 of 25

Observant una taula

\d res_partner

8 of 25

Per a veure el nom de la classe

Cal activar el mode desenvolupador

9 of 25

Estructura dels mòduls

10 of 25

Crear un mòdul nou

  • Afegir un directori en addons-path
  • Crear un subdirectori en el directori de addons personalitzats.
  • Crear el __init__.py per a l'importació d'arxius.
  • Crear el __odoo__.py que és el que defineix el mòdul.
  • Crear arxius de Python que continguen objectes
  • Crear .xml que contenen dades de mòduls com ara vistes, entrades de menú o dades de demostració
  • Opcionalment crear informes.

11 of 25

__init__.py

  • Arxiu d'importació de Python.
  • Un mòdul d'Odoo és també un mòdul ordinari de Python.
  • L'arxiu ha d'importar tots els altres arxius python o submòduls.

import openacademy

12 of 25

__odoo__.py

Diccionari Python literal, és responsable de:

  • Determinar els arxius XML que es va a analitzar durant la inicialització del servidor
  • Determinar les dependències del mòdul creat.
  • Declarar metadades addicionals

13 of 25

__odoo__.py

{� 'name' : "OpenAcademy",� 'version' : "1.0",� 'author' : "Odoo SA",� 'category' : "Tools",� 'depends' : ['mail'],� 'data' : [� 'openacademy_view.xml',� 'openacademy_data.xml',� 'report/module_report.xml',� 'wizard/module_wizard.xml',� ],� 'demo' : ['openacademy_demo.xml'],� 'installable': True,�}

14 of 25

Models

  • Tots els recursos Odoo són Models: factures, socis….
  • Les metadades també són Models: menús, accions, informes ...
  • Els noms dels models són jeràrquics, com en els exemples següents:

account.transfer: una transferència de diners�account.invoice: una factura�account.invoice.line: una línia de factura

  • En general, la primera paraula és el nom del mòdul.
  • Els Models es declaren en python com a subclasse de models.Model
  • El ORM d'Odoo es construeix sobre PostgreSQL.
  • Però és perillós per escriure o llegir directament a la base de dades PostgreSQL.
  • L’ORM facilita la gestió de les dades

15 of 25

Fitxers XML

  • Inicialització i declaració de dades de demostració.
  • Declaració de vistes.
  • Declaració dels informes.

16 of 25

El primer mòdul

Creació d’un mòdul molt simple amb un poc de tot per poder començar a treballar. Més endavant es veurà cada part per separat i en detall.

17 of 25

Depuració Odoo

  • Per treballar més còmode cal iniciar manualment odoo
  • root: service odoo stop

odoo -u mòdul -d empresa

  • Si no es fa, podem mirar el /var/log/odoo/odoo-server.log

18 of 25

Empresa de proves

En Odoo, cada empresa té una base de dades.

Podem crear una base de dades en la interfície web o per terminal:

$ odoo -d demodb

En l’empresa de proves, afegirem les dades d’exemple.

19 of 25

Creació d’un mòdul buit

  • Creem un directori per al nostre mòdul
  • Executem:

odoo scaffold <module name> <where to put it>

odoo scaffold openacademy ./modules

  • Indiquem a Odoo el nostre directori addons-path:

odoo -d demo3 --addons-path="/var/lib/odoo/modules,./addons" --save

(Este comandament està fet des de la ruta d’instal·lació d’Odoo)

  • Actualitzem la llista de mòduls i instal·lem el nou

odoo -d empresa -u modul

Analitzem els fitxers resultants

20 of 25

Creació del model

Podem afegir al .py del nostre mòdul buit un model paregut a este:

from openerp import models, fields, api��class Course(models.Model):� _name = 'openacademy.course'�� name = fields.Char(string="Title", required=True)� description = fields.Text()

21 of 25

Observar el resultat

22 of 25

Els permisos

id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink

access_prova_prova,prova.prova,model_prova_prova,,1,0,0,0

23 of 25

El menú

En un fitxer xml:

<?xml version="1.0" encoding="UTF-8"?>�<openerp>� <data>� <record model="ir.actions.act_window" id="course_list_action">� <field name="name">Courses</field>� <field name="res_model">openacademy.course</field>� <field name="view_type">form</field>� <field name="view_mode">tree,form</field>� <field name="help" type="html">� <p class="oe_view_nocontent_create">Create the first course</p>� </field>� </record>� <menuitem id="main_openacademy_menu" name="Open Academy"/>� <menuitem id="openacademy_menu" name="Open Academy" parent="main_openacademy_menu"/>� <menuitem id="courses_menu" name="Courses" parent="openacademy_menu" action="course_list_action"/>

</data>�</openerp>

24 of 25

Dades d’exemple

<record model="openacademy.course" id="course0">� <field name="name">Course 0</field>� <field name="description">Course 0's description��Can have multiple lines� </field>� </record>� <record model="openacademy.course" id="course1">� <field name="name">Course 1</field>� <!-- no description for this one -->� </record>� <record model="openacademy.course" id="course2">� <field name="name">Course 2</field>� <field name="description">Course 2's description</field>� </record>

25 of 25

Exercici