Diferencia entre revisiones de «Odoo»

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda
Línea 95: Línea 95:
=== Fields ===
=== Fields ===


Les "columnes" del model són els fields. Estos poden ser de dades normals com Integer, boolean, date, char... o especials como many2one, one2many, related...
Les "columnes" del model són els fields. Estos poden ser de dades normals com Integer, Float, Boolean, date, char... o especials como many2one, one2many, related...


Hi ha uns fields reservats:  
Hi ha uns fields reservats:  

Revisión del 09:32 24 sep 2015

A partir de la versió 8, OpenERP passa a anomenar-se Odoo.

Les novetats que ens interessen més són la possibilitat de crear una web per als clients i les noves funcions de l'API.

Instal·lar Odoo

El servidor Odoo

El servidor Odoo s'arranca simplement amb el comandament:

$ odoo.py

Tal vegada es necessita ficar la ruta on està instal·lat.

Pot ser que estiga configurat el servici en l'arranc del sistema operatiu. No obstant, si volem depurar, cal parar el servici i arrancar de manera manual.

En el cas d'un Odoo instal·lat en Debian amb els paquets, si fer un ps -aux, vorem que el comandament que té Odoo és:

/usr/bin/python /usr/bin/odoo.py --config /etc/odoo/openerp-server.conf --logfile /var/log/odoo/odoo-server.log

Per reiniciar-lo de manera manual:

$ sudo systemctl restart odoo

El servici Odoo proporciona accés als clients via RPC, Odoo proporciona per defecte un client web.

Arquitectura

L’OpenObject facilita diversos components que permeten construir l’aplicació:

Arquitectura MVC
Cliente Servidor OpenERP/Odoo
  • La capa ORM (Object Relational Mapping) entre els objectes Python i la base de dades PostgreSQL. El dissenyador-programador no efectua el disseny de la base de dades; únicament dissenya classes, per les quals la capa ORM d’OpenObject n’efectuarà el mapat sobre el SGBD PostgreSQL.
  • Una arquitectura MVC (model-vista-controlador) en la qual el model resideix en les dades de les classes dissenyades amb Python, la vista resideix en els formularis, llistes, calendaris, gràfics… definits en fitxers XML i el controlador resideix en els mètodes definits en les classes que proporcionen la lògica de negoci.
  • Odoo és un ERP amb una arquitectura de Tenencia Múltiple. És A dir, té una base de dades i un servidor comú per a tots els clients. El contrari sería tindre un servidor o base de dades per client o virtualitzar.
  • Un sistema de fluxos de treball o workflows.
  • Dissenyadors d’informes.
  • Facilitats de traducció de l’aplicació a diversos idiomes.

El servidor Odoo proporciona un accés a la base de dades emb ORM. El servidor necessita tindre instal·lats mòduls, ja que comença buit.

Per altra banda, el client es comunica amb el servidor en XML-RPC, els clients web per JSON-RPC. El client sols té que mostrar el que dona el servidor o demanar correctament les dades. Per tant, un client pot ser molt simple i fer-se en qualsevol llenguatge de programació. Odoo proporciona un client web encara que es pot fer un client en qualsevol plateforma.

Les dades estan guardades en una base de dades relacional. Gràcies a l'ORM, no cal fer consultes SQL dirèctament. ORM proporciona una serie de mètodes per a treballar de manera més ràpida i segura. En compte de parlar de taules es parla de models. Aquest són mapejats per l'ORM en taules. No obstant, un model té més que dades en una taula. Un model es comporta con un objecte al tindre camps funcionals, restriccions i camps relacionals que deixen la normalització de la base de dades en mans d'Odoo.

L'accés del client a les dades es fa fent ús d'un servici. Aquest pot ser WSGI. WSGI és una solució estàndar per a fer servidors i clients HTTP en Python. En el cas d'Odoo, aquest té el OpenERP Web Project, que és el servidor web.

Un altre concepte dins d'Odoo són els Business Objects quasi tot en Odoo és un Business Object, és persistent gràcies a ORM i es troba estructurat en el directori /modules.

Odoo proporciona els anomenats Wizards, que es comporten com un assistent per introduir dades d'una manera més fàcil per a l'usuari.

El client web és fàcil de desenvolupar gràcies al Widgets o Window GaDGETS. Aquests proporcionen un comportament i visualització correctes per a cada tipus de dades. Per exemple: si el camp és per definir una data, mostrarà un calendari. Alguns tenen diferents visualitzacions en funció del tipus de vista i se'n poden definir Widgets personalitzats.

Tal com es pot observar, són molts els components d’OpenObject a conèixer per poder adequar l’Odoo a les necessitats de l’organització, en cas que les funcionalitats que aporta l’Odoo, tot i ser moltes, no siguin suficients.

Els mòduls

Tant el servidor com els clients són mòduls. Tots estàn guardats en una base de dades. Tot els que es puga fer per modificar Odoo es fa en mòduls.

Composició d'un mòdul

Els mòduls d'Odoo amplien o modifiquen parts de Model-Vista-Controlador. D'aquesta manera, un mòdul pot tindre:

  • Objectes de negoci: Són la part del model, estan definits en classes de Python segons una sintaxy pròpia de l'ORM d'Odoo.
  • Fitxers de dades: Són fitxers XML que poden definir dades, vistes o configuracions.
  • Controladors web: Gestionen les peticions dels navegadors web.
  • Dades estàtiques: Imatges, CSS, o javascript utilitzats per l'interficie web.

Estructura de fitxers d'un mòdul

Tots el mòduls estan en un directori definit en l'opció --addons-path o el fitxer de configuració. Poden ser més d'un directori.

Un mòdul de python es declara en un fitxer de manifest que dona informació sobre el mòdul, el que fa el mòduls dels que depen i cóm s'ha d'instal·lar o actualitzar. [1]

Un mòdul es un paquet de Python que necessita un __init__.py per a instanciar tots els fitxers python.

Creació de mòduls

Per ajudar al programador, Odoo conté un comandament per crear mòduls buits. Aquest crea l'estructura de fitxers necessaria per començar a treballar:

$ odoo.py scaffold <module name> <where to put it>
https://www.odoo.com/documentation/8.0/reference/cmdline.html#scaffolding

ORM

Odoo mapeja els seus objectes en una base de dades amb ORM, evitant la majoria de consultes SQL. D'aquesta manera el desenvolupament dels mòduls és molt ràpid i evitem errades de programació.

Els models són creats com classes de python que extenen la classe model que conté els camps i mètodes útils per a fer anar l'ORM.

Els models, al heretat de model, necessiten donar valor a algunes variables, com ara _name

És en aquest punt on més diferència trobem amb OpenERP 7, per tant, cal tindre cura de no fer cas totalment de tutorials o ajuda per al 7

Odoo considera que un model és la referència a una o més taules en la base de dades. Un model no és una fila en la taula, és tota la taula.

Fields

Les "columnes" del model són els fields. Estos poden ser de dades normals com Integer, Float, Boolean, date, char... o especials como many2one, one2many, related...

Hi ha uns fields reservats:

  • id (Id) the unique identifier for a record in its model
  • create_date (Datetime) creation date of the record
  • create_uid (Many2one) user who created the record
  • write_date (Datetime) last modification date of the record
  • write_uid (Many2one) user who last modified the record

Els fields es declaren amb un constructor:

from openerp import models, fields

class LessMinimalModel(models.Model):
    _name = 'test.model2'

    name = fields.Char()

Tenen uns atributs comuns:

  • string (unicode, default: field's name) The label of the field in UI (visible by users).
  • required (bool, default: False) If True, the field can not be empty, it must either have a default value or always be given a value when creating a record.
  • help (unicode, default: ) Long-form, provides a help tooltip to users in the UI.
  • index (bool, default: False) Requests that Odoo create a database index on the column

I algunes, sobretot les especials, tenen atributs particulars.

Enllaços

https://www.odoo.com/documentation/8.0/

https://www.odoo.com/documentation/8.0/howtos/backend.html