Je eerste module

Overzicht

Dit hoofdstuk helpt je bij het maken van jouw eerste Odoo-module en het implementeren ervan in jouw Odoo.sh-project.

Deze tutorial vereist :ref:`je hebt een project aangemaakt op Odoo.sh<odoosh-gettingstarted-create> `, en je kent de URL van je Github-repository.

Het basisgebruik van Git en Github wordt jeitgelegd.

De onderstaande aannames zijn gemaakt:

  • ~/src is de map waar de Git-repository’s staan die verband houden met jouw Odoo-projecten,

  • odoo is de Github-gebruiker,

  • odoo-addons is de Github-repository,

  • feature-1 is de naam van een ontwikkelingstak,

  • master is de naam van de productietak,

  • mijn_module is de naam van de module.

Vervang deze door de waarden van jouw keuze.

Maak de ontwikkelingstak

Van Odoo.sh

In de takkenweergave:

  • druk op de + knop naast de ontwikkelingsfase,

  • kies de vestiging master in de Fork selectie,

  • typ feature-1 in de invoer To.

    |foto1| |foto2|

Zodra de build is gemaakt, hebt je toegang tot de editor en bladert je naar de map ~/src/user om toegang te krijgen tot de code van jouw ontwikkelingstak.

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

Vanaf je computer

Kloon jouw Github-repository op jouw computer:

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

Maak een nieuwe tak aan:

$ git checkout -b feature-1 master

Maak de modulestructuur

Het steigeren van de module

Hoewel dit niet noodzakelijk is, vermijden steigers de verveling van het instellen van de basisstructuur van de Odoo-module. Je kunt een nieuwe module bouwen met behulp van het uitvoerbare bestand odoo-bin.

Vanuit de Odoo.sh-editor, in een terminal:

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

Of, vanaf jouw computer, als je een installatie van Odoo heeft:

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

Als je geen moeite wilt doen om Odoo op jouw computer te installeren, kunt je ook dit modulestructuursjabloon downloaden waarin je elke keer dat mijn_module voorkomt, vervangt door de naam van jouw keuze.

De onderstaande structuur wordt gegenereerd:

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

Waarschuwing

Gebruik geen andere speciale tekens dan het onderstrepingsteken ( _ ) voor jouw modulenaam, zelfs geen koppelteken ( - ). Deze naam wordt gebruikt voor de Python-klassen van jouw module, en het hebben van een klassennaam met andere speciale tekens dan het onderstrepingsteken is niet geldig in Python.

Verwijder commentaar op de inhoud van de bestanden:

  • models/models.py, een voorbeeld van een model met zijn velden,

  • views/views.xml, een boomstructuur en een formulierweergave, waarbij de menu’s deze openen,

  • demo/demo.xml, demorecords voor het bovenstaande voorbeeldmodel,

  • controllers/controllers.py, een voorbeeld van een controller die bepaalde routes implementeert,

  • views/templates.xml, twee voorbeeld qweb-weergaven gebruikt door de bovenstaande controllerroutes,

  • __manifest__.py, het manifest van jouw module, inclusief bijvoorbeeld de titel, beschrijving en te laden gegevensbestanden. Je hoeft alleen maar het commentaar op het gegevensbestand van de toegangscontrolelijst te verwijderen:

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

Handmatig

If you want to create your module structure manually, you can follow the Getting started tutorial to understand the structure of a module and the content of each file.

Push de ontwikkelingstak

Breng de veranderingen in kaart die moeten worden doorgevoerd

$ git add my_module

Leg jouw wijzigingen vast

$ git commit -m "My first module"

Push jouw wijzigingen naar jouw externe opslagplaats

Vanaf een Odoo.sh-editorterminal:

$ git push https HEAD:feature-1

Het bovenstaande commando wordt uitgelegd in de sectie :ref:`Commit &amp; Push jouw wijzigingen<odoosh-gettingstarted-online-editor-push> ` van de :ref:`Online-editor<odoosh-gettingstarted-online-editor> ` hoofdstuk. Het bevat uitleg over het feit dat je wordt gevraagd jouw gebruikersnaam en wachtwoord in te voeren en wat je moet doen als je tweefactorauthenticatie gebruikt.

Of vanaf jouw computerterminal:

$ git push -u origin feature-1

Je hoeft alleen voor de eerste push -je origin feature-1 op te geven. Vanaf dat moment kunt je eenvoudigweg jouw toekomstige wijzigingen vanaf jouw computer pushen

$ git push

Test jouw module

Jouw vertakking zou moeten verschijnen in jouw ontwikkelingsvertakkingen in jouw project.

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

In de filiaalweergave van jouw project kunt je op de naam van jouw filiaal in het linkernavigatiepaneel klikken om toegang te krijgen tot de geschiedenis ervan.

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

Hier kunt je de wijzigingen zien die je zojuist heeft doorgevoerd, inclusief de opmerking die je heeft ingesteld. Zodra de database klaar is, kunt je deze openen door op de knop Verbinden te klikken.

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

Als jouw Odoo.sh-project is geconfigureerd om jouw module automatisch te installeren, zult je deze direct zien tussen de database-apps. Anders is het beschikbaar in de apps om te installeren.

Vervolgens kunt je met jouw module spelen, nieuwe records maken en jouw functies en knoppen testen.

Test met de productiegegevens

Voor deze stap heeft je een productiedatabase nodig. Je kunt het aanmaken als je het nog niet hebt.

Nadat je jouw module in een ontwikkelingsbuild met de demogegevens hebt getest en denkt dat deze gereed is, kunt je deze testen met de productiegegevens met behulp van een staging-branch.

Je kan of:

  • Maak van jouw ontwikkelingsbranch een staging-branch, door deze naar de sectietitel staging te slepen en neer te zetten.

    ../../../_images/firstmodule-test-devtostaging.png
  • Voeg het samen in een bestaande staging branch, door het naar de gegeven staging branch te slepen en neer te zetten.

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

Je kunt ook het git merge commando gebruiken om je branches samen te voegen.

Hierdoor wordt een nieuwe staging-build gemaakt, die de productiedatabase dupliceert en laat draaien op een server die is bijgewerkt met de laatste wijzigingen van jouw branche.

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

Zodra de database klaar is, kunt je deze openen via de knop Verbinden.

Installeer jouw module

Jouw module wordt niet automatisch geïnstalleerd, je moet deze installeren vanuit het apps-menu. Het doel van de staging-build is inderdaad om het gedrag van jouw wijzigingen te testen zoals het zou zijn op jouw productie, en op jouw productie wilt je niet dat jouw module automatisch wordt geïnstalleerd, maar op aanvraag.

Het kan zijn dat jouw module ook niet direct in jouw apps verschijnt om te installeren, je moet eerst jouw lijst met apps bijwerken:

  • Activeer de :ref:`ontwikkelaarsmodus<developer-mode> `

  • klik in het apps-menu op de knop Apps-lijst bijwerken,

  • in het dialoogvenster dat verschijnt, klikt je op de knop Bijwerken.

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

Jouw module verschijnt dan in de lijst met beschikbare apps.

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

Implementeren in productie

Zodra je jouw module in een faseringsvertakking met jouw productiegegevens hebt getest en denkt dat deze klaar is voor productie, kunt je jouw vertakking samenvoegen in de productievertakking.

Sleep jouw staging branch naar de productie branch en zet deze daar neer.

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

Je kunt ook het git merge commando gebruiken om je branches samen te voegen.

Hierdoor worden de laatste wijzigingen van jouw faseringsvertakking samengevoegd met de productievertakking, en wordt jouw productieserver bijgewerkt met deze laatste wijzigingen.

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

Zodra de database klaar is, kunt je deze openen via de knop Verbinden.

Installeer jouw module

Jouw module wordt niet automatisch geïnstalleerd, je moet deze handmatig installeren, zoals uitgelegd in de :ref:`bovenstaande sectie over het installeren van jouw module in staging-databases<odoosh-gettingstarted-firstmodule-productiondata-install> `.

Voeg een wijziging toe

In deze sectie wordt uitgelegd hoe je een wijziging in jouw module kunt aanbrengen door een nieuw veld in een model toe te voegen en dit te implementeren.

Van de Odoo.sh-editor,
  • blader naar jouw modulemap ~/src/user/my_module,

  • open vervolgens het bestand models/models.py.

Of, vanaf jouw computer,
  • gebruik de bestandsbrowser van jouw keuze om naar jouw modulemap ~/src/odoo-addons/my_module te bladeren,

  • open vervolgens het bestand models/models.py met de editor van jouw keuze, zoals Atom, Sublime Text, PyCharm, vim, …

Vervolgens na het beschrijvingsveld

description = fields.Text()

Voeg een datum/tijd-veld toe

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

Open vervolgens het bestand views/views.xml.

Na

<field name="value2"/>

Toevoegen

<field name="start_datetime"/>

Deze wijzigingen veranderen de databasestructuur door een kolom aan een tabel toe te voegen, en wijzigen een weergave die in de database is opgeslagen.

Om te kunnen worden toegepast in bestaande databases, zoals jouw productiedatabase, vereisen deze wijzigingen dat de module wordt bijgewerkt.

Als je wilt dat de update automatisch wordt uitgevoerd door het Odoo.sh-platform wanneer je jouw wijzigingen doorvoert, verhoogt je jouw moduleversie in het manifest.

Open het modulemanifest __manifest__.py.

Vervangen

'version': '0.1',

met

'version': '0.2',

Het platform zal de versiewijziging detecteren en de update van de module activeren bij de implementatie van de nieuwe revisie.

Blader naar jouw Git-map.

Vervolgens vanaf een Odoo.sh-terminal:

$ cd ~/src/user/

Of vanaf jouw computerterminal:

$ cd ~/src/odoo-addons/

Zorg er vervolgens voor dat jouw wijzigingen worden doorgevoerd

$ git add my_module

Leg jouw wijzigingen vast

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

Push jouw wijzigingen:

Vanaf een Odoo.sh-terminal:

$ git push https HEAD:feature-1

Of vanaf jouw computerterminal:

$ git push

Het platform maakt dan een nieuwe build voor de branche feature-1.

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

Nadat je jouw wijzigingen heeft getest, kunt je jouw wijzigingen in de productietak samenvoegen, bijvoorbeeld door de vertakking naar de productietak in de Odoo.sh-interface te slepen en neer te zetten. Naarmate je de moduleversie in het manifest hebt verhoogd, zal het platform de module automatisch bijwerken en is jouw nieuwe veld direct beschikbaar. Anders kunt je de module handmatig bijwerken in de lijst met apps.

Gebruik een externe Python-bibliotheek

Als je een externe Python-bibliotheek wilt gebruiken die niet standaard is geïnstalleerd, kunt je een requirements.txt-bestand definiëren met de externe bibliotheken waarvan jouw modules afhankelijk zijn.

Notitie

  • Het is niet mogelijk om systeempakketten op een Odoo.sh-database te installeren of te upgraden (bijvoorbeeld apt-pakketten). Onder specifieke omstandigheden kunnen pakketten echter in aanmerking komen voor installatie. Dit geldt ook voor Python-modules die systeempakketten vereisen voor hun compilatie, en ODOO-modules van derden.

  • PostgreSQL-extensies worden niet ondersteund op Odoo.sh.

  • Raadpleeg voor meer informatie onze FAQ.

Het platform gebruikt dit bestand om automatisch de Python-bibliotheken te installeren die jouw project nodig heeft.

De functie wordt in deze sectie uitgelegd door gebruik te maken van de Unidecode-bibliotheek in jouw module.

Maak een bestand requirements.txt in de hoofdmap van jouw repository

Maak en open vanuit de Odoo.sh-editor het bestand ~/src/user/requirements.txt.

Of maak en open vanaf jouw computer het bestand ~/src/odoo-addons/requirements.txt.

Toevoegen

unidecode

Gebruik dan de bibliotheek in jouw module om bijvoorbeeld accenten te verwijderen uit tekens in het naamveld van jouw model.

Open het bestand models/models.py.

Eerder

from odoo import models, fields, api

Toevoegen

from unidecode import unidecode

Na

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

Toevoegen

@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)

Voor het toevoegen van een Python-afhankelijkheid is een uitbreiding van de moduleversie vereist voordat het platform deze kan installeren.

Bewerk het modulemanifest __manifest__.py

Vervangen

'version': '0.2',

met

'version': '0.3',

Voer jouw wijzigingen jeit en voer deze door:

$ 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"

Push vervolgens jouw wijzigingen:

In een Odoo.sh-terminal:

$ git push https HEAD:feature-1

In jouw computerterminal:

$ git push