Il primo modulo

Panoramica

Il presente capitolo ti aiuterà a creare il primo modulo Odoo per poi distribuirlo nel progetto Odoo.sh desiderato.

Il tutorial richiede che tu abbia creato un progetto su Odoo.sh e la conoscenza dell’URL dell’archivio Github.

Verrà spiegato l’utilizzo base di Git e Github.

Si formulano le seguenti ipotesi:

  • ~/src è la cartella dove sono memorizzate tutti gli archivi Git collegati ai tuoi progetti Odoo;

  • odoo è l’utente Github;

  • odoo-addons è l’archivio Github;

  • feature-1 è il nome del ramo di sviluppo;

  • master è il nome del ramo di produzione;

  • my_module è il nome del modulo.

Sostituisci i valori elencati con valori a tua scelta.

Creare il ramo di sviluppo

Da Odoo.sh

Nella vista con i rami:

  • fai clic su + accanto alla fase di sviluppo;

  • scegli il ramo master nel campo Fork;

  • scrivi feature-1 nel campo To.

    pic1 pic2

Una volta che il build è stato creato, puoi accedere all’editor e caricare la cartella ~/src/user per accedere al codice del ramo di sviluppo.

../../../_images/firstmodule-development-editor.png ../../../_images/firstmodule-development-editor-interface.png

Dal computer

Clona l’archivio Github sul tuo computer:

$ mkdir ~/src
$ cd ~/src
$ git clone https://github.com/odoo/odoo-addons.git
$ cd ~/src/odoo-addons

Crea un nuovo ramo:

$ git checkout -b feature-1 master

Creare la struttura del modulo

Eseguire lo scaffolding del modulo

Anche se non è necessario, lo scaffolding evita il fastidio di dover configurare la struttura di base dei moduli Odoo. È possibile eseguire lo scaffolding di un nuovo modulo utilizzando l’eseguibile odoo-bin.

Dall’editor Odoo.sh, in un terminale:

$ odoo-bin scaffold my_module ~/src/user/

Oppure dal computer, se hai installato Odoo:

$ ./odoo-bin scaffold my_module ~/src/odoo-addons/

Se non vuoi installare Odoo sul tuo computer, è possibile scaricare il seguente modello di struttura del modulo dove potrai sostituire ogni occorrenza di my_module con un nome a tua scelta.

Verrà creata la seguente struttura:

my_module
├── __init__.py
├── __manifest__.py
├── controllers
│   ├── __init__.py
│   └── controllers.py
├── demo
│   └── demo.xml
├── models
│   ├── __init__.py
│   └── models.py
├── security
│   └── ir.model.access.csv
└── views
    ├── templates.xml
    └── views.xml

Avvertimento

Non utilizzare caratteri speciali diversi dal trattino basso ( _ ) o il segno meno (-) per il nome del modulo. Il nome viene utilizzato per le classi Python del tuo modulo e hanno nomi con caratteri speciali diversi dal trattino basso che non è valido in Python.

Elimina i commenti dal contenuto dei file:

  • models/models.py, un esempio di modello con i rispettivi campi;

  • views/views.xml, un albero e una vista modulo con i menu che li aprono;

  • demo/demo.xml, record demo per il modello di esempio in alto;

  • controllers/controllers.py, un esempio di controller che implementa alcuni percorsi;

  • views/templates.xml, due esempi di viste qweb utilizzate dai percorsi del controller di cui sopra;

  • __manifest__.py, il manifesto del tuo modulo che include il titolo, la descrizione e i file dati da caricare. Devi solo eliminare i commenti dal file con i dati relativi alla lista di controllo degli accessi:

    # 'security/ir.model.access.csv',
    

Manuale

Se vuoi creare la struttura dei moduli manualmente, puoi seguire il tutorial Server framework 101 per comprendere la struttura di un modulo e il contenuto di ogni file.

Eseguire il push del ramo di sviluppo

Fissa le modifiche di cui eseguire il commit

$ git add my_module

Esegui il commit delle modifiche

$ git commit -m "My first module"

Esegui il push delle modifiche nell’archivio remoto

Da un terminale dell’editor Odoo.sh:

$ git push https HEAD:feature-1

Il comando in alto viene spiegato nella sezione Eseguire il commit e applicare le modifiche del capitolo sull” Editor online che include la spiegazione riguardo i campi da riempire come nome utente e password e cosa fare se si utilizza l’autenticazione a due fattori.

Oppure dal terminale del computer:

$ git push -u origin feature-1

È necessario specificare -u origin feature-1 solo per il primo push. Da questo momento, per applicare le modifiche future dal tuo computer, puoi utilizzare semplicemente

$ git push

Testare il proprio modulo

Il ramo dovrebbe apparire nei rami di sviluppo del tuo progetto.

../../../_images/firstmodule-test-branch.png

Nella vista rami del tuo progetto, puoi fare clic sul nome del ramo nel pannello di navigazione a sinistra per accedere alla cronologia.

../../../_images/firstmodule-test-branch-history.png

Qui è possibile visualizzare i cambiamenti appena applicatim compresi i commenti configurati. Una volta che il database è pronto, è possibile accedervi facendo clic sul pulsante Collegati.

../../../_images/firstmodule-test-database.png

Se il tuo progetto Odoo.sh è configurato per l’installazione automatica del modulo, lo visualizzerai direttamente tra le app del database. Altrimenti, sarà disponibile tra le app da installare.

In seguito, puoi giocare con il modulo, creare nuovi record e provare funzionalità e pulsanti.

Testare con i dati di produzione

È necessario avere a disposizione un database di produzione per questa fase. È possibile crearne uno.

Una volta testato il modulo in un build di sviluppo con dati demo, se sei pronto puoi testarlo con i dati di produzione utilizzando un ramo di staging.

Le tue opzioni:

  • rendere il ramo di sviluppo un ramo di staging, trascinandolo e rilasciandolo nel titolo della sezione staging;

    ../../../_images/firstmodule-test-devtostaging.png
  • unire il ramo con un ramo di staging esistente, trascinandolo e rilasciandolo nel ramo di staging desiderato.

    ../../../_images/firstmodule-test-devinstaging.png

Inoltre, puoi anche utilizzare il comando git merge per unire i rami.

Questo porterà alla creazione di un nuovo build di staging che duplicherà il database di produzione e lo farà funzionare utilizzando un server aggiornato con le ultime modifiche del ramo.

../../../_images/firstmodule-test-mergedinstaging.png

Una volta che il database è pronto, puoi eseguire l’accesso utilizzando il pulsante Collegati.

Installare il modulo

Il tuo modulo non verrà installato automaticamente, è necessario installarlo dal menu delle app. In realtà, lo scopo del build di staging è testare il comportamento delle modifiche perché applicate alla produzione e nella tua produzione non vuoi che un modulo venga installato automaticamente ma su richiesta.

Il tuo modulo potrebbe non apparire direttamente tra le app da installare e per questo è necessario prima aggiornare l’elenco:

  • attivare la modalità sviluppatore;

  • nel menu delle app, fai clic sul pulsante Aggiorna elenco app;

  • nella finestra di dialogo che appare, fai clic sul pulsante Aggiorna;

    ../../../_images/firstmodule-test-updateappslist.png

In seguito, il modulo apparirà nell’elenco di app disponibili.

../../../_images/firstmodule-test-mymoduleinapps.png

Distribuire in produzione

Una volta testato il modulo con i dati di produzione in un ramo di staging e constatato il corretto funzionamento, puoi unire il tuo ramo a quello di produzione.

Trascina e rilascia il ramo di staging nel ramo di produzione.

../../../_images/firstmodule-test-mergeinproduction.png

Inoltre, puoi anche utilizzare il comando git merge per unire i rami.

L’azione unirà le ultime modifiche al ramo di staging nel ramo di produzione e aggiornerà il server di produzione con le ultime modifiche.

../../../_images/firstmodule-test-mergedinproduction.png

Una volta che il database è pronto, puoi eseguire l’accesso utilizzando il pulsante Collegati.

Installare il modulo

Il tuo modulo non verrà installato automaticamente, devi installarlo manualmente come spiegato nella sezione in alto riguardo l’installazione del modulo in database di staging.

Aggiungere una modifica

La sezione spiega come aggiungere una modifica al modulo aggiungendo un nuovo campo in un modello e distribuirlo.

Dall’edito di Odoo.sh,
  • sfoglia la cartella del modulo ~/src/user/my_module;

  • in seguito, apri il file models/models.py.

Oppure, dal computer:
  • utilizza il browser di file a tua scelta per sfogliare la cartella del modulo ~/src/odoo-addons/my_module;

  • in seguito, apri il file models/models.py utilizzando l’editor a tua scelta come Atom, Sublime Text, PyCharm, vim, …

In seguito, dopo il campo descrizione

description = fields.Text()

Aggiungi un campo Data/Ora

start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())

In seguito, apri il file views/views.xml.

Dopo

<field name="value2"/>

Aggiungi

<field name="start_datetime"/>

Queste modifiche alterano la struttura del database aggiungendo una colonna in una tabella e modificando la vista memorizzata nel database.

Al fine di applicare le modifiche a database come il tuo database di produzione, è necessario aggiornare il modulo.

Se vuoi che l’aggiornamento venga eseguito automaticamente dalla piattaforma Odoo.sh quando applichi le modifiche, è necessario aumentare la versione del modulo nel manifesto corrispondente.

Apri il modulo del manifesto __manifest__.py.

Sostituisci

'version': '0.1',

con

'version': '0.2',

La piattaforma individuerà l’aggiornamento della versione e attiverà l’aggiornamento del modulo a seguito della distribuzione della nuova revisione.

Sfoglia la cartella Git.

In seguito, da un terminale Odoo.sh:

$ cd ~/src/user/

Oppure dal terminale del computer:

$ cd ~/src/odoo-addons/

In seguito, fissa le modifiche di cui eseguire il commit

$ git add my_module

Esegui il commit delle modifiche

$ git commit -m "[ADD] my_module: add the start_datetime field to the model my_module.my_module"

Applica le modifiche:

Da un terminale Odoo.sh:

$ git push https HEAD:feature-1

Oppure dal terminale del computer:

$ git push

La piattaforma creerà un nuovo build per il ramo feature-1.

../../../_images/firstmodule-test-addachange-build.png

Una volta testate le modifiche è possibile unirle nel ramo di produzione, ad esempio trascinando e rilasciando il ramo nel ramo di produzione tramite l’interfaccia Odoo.sh. Man mano che aumenti la versione del modulo nel manifesto, la piattaforma aggiornerà automaticamente il modulo e il tuo nuovo campo sarà subito disponibile. Altrimenti, puoi aggiornare manualmente il modulo dall’elenco delle app.

Utilizzare una libreria Python esterna

Se vuoi utilizzare una libreria Python esterna, non installata per impostazione predefinita, puoi definire un file requirements.txt che elenca le librerie esterna da cui dipendono i tuoi moduli.

Nota

  • Non è possibile installare o aggiornare pacchetti di sistema su un database Odoo.sh (ad es. pacchetti apt). Tuttavia, in condizioni specifiche, i pacchetti possono essere valutati per l’installazione. Questo si applica anche a moduli Python che richiedono pacchetti di sistema per la compilazione e moduli Odoo di terze parti.

  • Le estensioni PostgreSQL non sono supportate su Odoo.sh.

  • Per maggiori informazioni, consulta le FAQ.

La piattaforma utilizzerà il file per installare automaticamente le librerie Python di cui il tuo progetto ha bisogno.

La funzionalità viene spiegata nella seguente sezione utilizzando la `libreria Unidecode<https://pypi.python.org/pypi/Unidecode>`_ nel tuo modulo.

Crea un file requirements.txt nella cartella radice del registro

Dall’editor di Odoo.sh, crea e apri il file ~/src/user/requirements.txt.

Oppure, dal tuo computer, crea e apri il file ~/src/odoo-addons/requirements.txt.

Aggiungi

unidecode

In seguito, utilizza la libreria nel modulo per eliminare accenti dai caratteri nel campo nome del modello ad esempio.

Apri il file models/models.py.

Prima

from odoo import models, fields, api

Aggiungi

from unidecode import unidecode

Dopo

start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())

Aggiungi

@api.model
def create(self, values):
    if 'name' in values:
        values['name'] = unidecode(values['name'])
    return super(my_module, self).create(values)

def write(self, values):
    if 'name' in values:
        values['name'] = unidecode(values['name'])
    return super(my_module, self).write(values)

L’aggiunta di una dipendenza Python richiede una versione del modulo più grande per far sì che la piattaforma possa installarlo.

Modifica il manifesto del modulo __manifest__.py

Sostituisci

'version': '0.2',

con

'version': '0.3',

Fissa ed esegui il commit delle modifiche:

$ git add requirements.txt
$ git add my_module
$ git commit -m "[IMP] my_module: automatically remove special chars in my_module.my_module name field"

In seguito, applica le modifiche:

In un terminale Odoo.sh:

$ git push https HEAD:feature-1

Nel terminale del tuo computer:

$ git push