Both sides previous revision Previous revision Next revision | Previous revision |
development:odoo_dev_intro [2022/07/06 18:10] – [Les champs] aziz | development:odoo_dev_intro [2022/11/13 15:18] (current) – aziz |
---|
Reste à répondre à la question : où doit-on créer ces fichiers ? | Reste à répondre à la question : où doit-on créer ces fichiers ? |
| |
Dans le dossier ''extra-addons''. Dans la suite de commande suivantes nous allons : | Dans le dossier ''extra-addons''. |
| |
| Dans la suite de commandes suivante nous allons : |
| |
* créer un dossier ''monmodule'' dans le dossier ''extra-addons'' | * créer un dossier ''monmodule'' dans le dossier ''extra-addons'' |
$ touch __manifest__.py | $ touch __manifest__.py |
$ echo "{'name':'Mon Module',}" | tee __manifest__.py | $ echo "{'name':'Mon Module',}" | tee __manifest__.py |
| $ docker-compose down && docker-compose up -d |
</cli> | </cli> |
| |
En se loggant sur l'application, la page d'accueil par défaut sur laquelle nous atterrissons est la vue consacrées au applications disponibles. | En se loggant sur l'application, la page d'accueil par défaut sur laquelle nous atterrissons est la vue consacrées aux applications disponibles. |
| |
Nous pouvons filtrer ((Filtrer signifie taper un mot sur la barre de recherche suivi d'Enter. Nous pouvons filtrer sur le nom mais aussi sur d'autres champs comme la catégorie ou l'état. Ces notions relèvent du fonctionnel de l'application Odoo et sont abordés sur un autre support)) pour n'afficher que les modules qui correspondent au module minimal que nous venons de créer. | Nous pouvons filtrer ((Filtrer signifie taper un mot sur la barre de recherche suivi d'Enter. Nous pouvons filtrer sur le nom mais aussi sur d'autres champs comme la catégorie ou l'état. Ces notions relèvent du fonctionnel de l'application Odoo et sont abordés sur un autre support)) pour n'afficher que les modules qui correspondent au module minimal que nous venons de créer. |
| |
===== Créer un modèle ===== | ===== Créer un modèle ===== |
Pour créer notre premier modèle nous devons créer un fichier python que nous allons importer dans le ''%%__init__.py%%''. | Nous créons notre premier modèle dans un nouveau fichier python. |
| |
<cli> | <cli> |
$ cd ~/service.odoo/extra-addons/monmodule | $ cd ~/service.odoo/extra-addons/monmodule |
$ touch models.py | $ touch models.py |
$ echo 'from . import models' >> __init__.py | |
$ editor models.py | $ editor models.py |
</cli> | </cli> |
Le nom de la table dans la base de données (model name) est défini par la valeur de l'attribut spécial ''_name''. | Le nom de la table dans la base de données (model name) est défini par la valeur de l'attribut spécial ''_name''. |
| |
| Pour que le nouveau fichier ''models.py'' soit chargé et évalué par l'interpréteur Python, nous devons le répertorier dans le fichier ''%%__init__.py%%'' du module, comme suit : |
| |
<cli> | <cli> |
| $ cd ~/service.odoo/extra-addons/monmodule |
| $ echo "from . import models" | tee -a __init__.py |
$ cat __init__.py | $ cat __init__.py |
from . import models | from . import models |
* À la ligne 01 l'application nous informe que la pression sur le bouton ''Install'' a bien été enregistrée et appelle la méthode correspondante ''module.button_immediate_install''. | * À la ligne 01 l'application nous informe que la pression sur le bouton ''Install'' a bien été enregistrée et appelle la méthode correspondante ''module.button_immediate_install''. |
* À la ligne 12 l'application nous informe que Odoo charge notre module ''Loading module monmodule'' | * À la ligne 12 l'application nous informe que Odoo charge notre module ''Loading module monmodule'' |
* À la ligne 13 l'application émet un WARNING sur l'absence de l'attribut ''_description'' pour le model ''elo.prof'' que nous nous apprêtons à créer | * À la ligne 13 l'application émet un WARNING sur l'absence de l'attribut ''_description'' pour le model ''elo.prof'' que nous nous apprêtons à créer grâce aux instructions du fichiers ''models.py'' de notre module. |
* À la ligne 14 l'application nous informe qu'elle est sur le point de créer les tables de base de données | * À la ligne 14 l'application nous informe qu'elle est sur le point de créer les tables de base de données |
* Enfin, à la dernière ligne l'application émet un WARNING sur l'absence de règles d'accès sur la tables ''elo.prof'' que nous venons de créer. ((Les règles d'accès seront abordées plus loin dans ce tuto)) | * Enfin, à la dernière ligne l'application émet un WARNING sur l'absence de règles d'accès sur la tables ''elo.prof'' que nous venons de créer. ((Les règles d'accès seront abordées plus loin dans ce tuto)) |
Comment vérifier que notre modèle a bien été crée par Odoo dans la base de données ? | Comment vérifier que notre modèle a bien été crée par Odoo dans la base de données ? |
==== Activer le mode développeur dans Odoo ==== | ==== Activer le mode développeur dans Odoo ==== |
Même si cette page de [[https://www.odoo.com/documentation/15.0/fr/applications/general/developer_mode.html|référence du site Odoo]] présente plusieurs façon d'activer le mode développeur dans l'interface web de Odoo, nous vous recommandons d'installer l'extension **Odoo Debug** disponible pour [[https://addons.mozilla.org/fr/firefox/addon/odoo-debug/|Firefox]] et pour [[https://chrome.google.com/webstore/detail/odoo-debug/hmdmhilocobgohohpdpolmibjklfgkbi?hl=fr|Chrome]] | Même si cette page de [[https://www.odoo.com/documentation/15.0/fr/applications/general/developer_mode.html|référence du site Odoo]] présente plusieurs façons d'activer le mode développeur dans l'interface web de Odoo, nous vous recommandons d'installer l'extension **Odoo Debug** disponible pour [[https://addons.mozilla.org/fr/firefox/addon/odoo-debug/|Firefox]] et pour [[https://chrome.google.com/webstore/detail/odoo-debug/hmdmhilocobgohohpdpolmibjklfgkbi?hl=fr|Chrome]] |
| |
En activant le mode développeur, vous avez accès à des menus et des fonctionnalités supplémentaires qui vous aideront à mieux introspecter votre installation Odoo. | En activant le mode développeur, vous avez accès à des menus et des fonctionnalités supplémentaires qui vous aideront à mieux introspecter votre installation Odoo. |
</code> | </code> |
| |
Les champs des modèles sont définis comme des attributs. Ici, nous en créons deux, le champs ''name'' et ''bio'' qui sont respectivement de type ''Char'' et ''Text'' ((Pour une liste complete des types de champs référez vous à [[https://www.odoo.com/documentation/15.0/fr/developer/reference/backend/orm.html#fields|Odoo ORM]])). | Les champs des modèles sont définis comme des attributs. Ici, nous en créons deux, les champs ''name'' et ''bio'' qui sont respectivement de type ''Char'' et ''Text'' ((Pour une liste complete des types de champs référez vous à [[https://www.odoo.com/documentation/15.0/fr/developer/reference/backend/orm.html#fields|Odoo ORM]])). |
| |
Les champs sont des instances de classes du module ''fields'' que nous avons importé à la première ligne en plus du module ''models''. | Les champs sont des instances de classes du module ''fields'' que nous avons importé à la première ligne en plus du module ''models''. |
| |
{{ :development:module_upgrade.png?direct |}} | {{ :development:module_upgrade.png?direct |}} |
| |
| Et voici donc ce qui apparaîtera dans votre terminal après avoir appuyé sur le bouton. |
| |
| |
odoo | .... INFO base odoo.addons.base.models.ir_module: ALLOW access to module.button_immediate_upgrade on ['monmodule'] to user admin #2 via 172.17.0.1 | odoo | .... INFO base odoo.addons.base.models.ir_module: ALLOW access to module.button_immediate_upgrade on ['monmodule'] to user admin #2 via 172.17.0.1 |
odoo | .... INFO base odoo.addons.base.models.ir_module: ALLOW access to module.button_upgrade on ['monmodule'] to user admin #2 via 172.17.0.1 | odoo | .... INFO base odoo.addons.base.models.ir_module: ALLOW access to module.button_upgrade on ['monmodule'] to user admin #2 via 172.17.0.1 |
odoo | .... INFO base odoo.addons.base.models.ir_module: ALLOW access to module.update_list on ['monmodule'] to user admin #2 via 172.17.0.1 | .... |
odoo | .... INFO base odoo.addons.base.models.ir_module: ALLOW access to module.button_install on [] to user admin #2 via 172.17.0.1 | |
odoo | .... INFO base odoo.modules.loading: loading 1 modules... | odoo | .... INFO base odoo.modules.loading: loading 1 modules... |
odoo | .... INFO base odoo.modules.loading: 1 modules loaded in 0.03s, 0 queries (+0 extra) | .... |
odoo | .... INFO base odoo.modules.loading: updating modules list | |
odoo | .... INFO base odoo.addons.base.models.ir_module: ALLOW access to module.update_list on [] to user __system__ #1 via 172.17.0.1 | |
odoo | .... INFO base odoo.modules.loading: loading 9 modules... | |
odoo | .... INFO base odoo.modules.loading: Loading module monmodule (2/9) | odoo | .... INFO base odoo.modules.loading: Loading module monmodule (2/9) |
odoo | .... INFO base odoo.modules.registry: module monmodule: creating or updating database tables | odoo | .... INFO base odoo.modules.registry: module monmodule: creating or updating database tables |
odoo | .... INFO base odoo.modules.loading: Module monmodule loaded in 1.15s, 39 queries | .... |
odoo | .... INFO base odoo.modules.loading: 9 modules loaded in 1.19s, 39 queries (+0 extra) | |
odoo | .... WARNING base odoo.modules.loading: The model elo.prof has no access rules, consider adding one. E.g. access_elo_prof,access_elo_prof,model_elo_prof,base.group_user,1,0,0,0 | odoo | .... WARNING base odoo.modules.loading: The model elo.prof has no access rules, consider adding one. E.g. access_elo_prof,access_elo_prof,model_elo_prof,base.group_user,1,0,0,0 |
odoo | .... INFO base odoo.modules.registry: verifying fields for every extended model | odoo | .... INFO base odoo.modules.registry: verifying fields for every extended model |
odoo | .... INFO base odoo.modules.loading: Modules loaded. | odoo | .... INFO base odoo.modules.loading: Modules loaded. |
| |
| Le **WARNING** sur l'absence de description du modèle a disparu mais le WARNING sur l'absence de règles d'accès (**access rules**) est toujours présent. |
| |
| Nous verrons comment le traiter dans la partie suivante. |
| |
| Mais avant cela nous allons examiner notre modèle dans Odoo et dans Postgresql pour voir nos modifications. |
| |
| {{ :development:elo_prof_model_upgraded_1.png?direct |}} |
| |
| |
| <cli> |
| $ docker exec odoo_db psql -U postgres -d base -c '\d+ elo_prof' |
| Table "public.elo_prof" |
| Column | Type | Collation | Nullable | Default | Storage | Stats target | Description |
| -------------+-----------------------------+-----------+----------+--------------------------------------+----------+--------------+----------------- |
| id | integer | | not null | nextval('elo_prof_id_seq'::regclass) | plain | | |
| create_uid | integer | | | | plain | | Created by |
| create_date | timestamp without time zone | | | | plain | | Created on |
| write_uid | integer | | | | plain | | Last Updated by |
| write_date | timestamp without time zone | | | | plain | | Last Updated on |
| name | character varying | | | | extended | | Professor Name |
| bio | text | | | | extended | | Short Bio |
| Indexes: |
| "elo_prof_pkey" PRIMARY KEY, btree (id) |
| Foreign-key constraints: |
| "elo_prof_create_uid_fkey" FOREIGN KEY (create_uid) REFERENCES res_users(id) ON DELETE SET NULL |
| "elo_prof_write_uid_fkey" FOREIGN KEY (write_uid) REFERENCES res_users(id) ON DELETE SET NULL |
| |
| $ |
| </cli> |
| |
| Sur les deux représentations du modèle ''elo.prof'' nous pouvons voir que les champs ''name'' et ''bio'' ont été correctement ajoutés. |
| |
| ===== Les droits d'accès ===== |
| Les droits d'accès sont le mécanisme utilisé pour définir les autorisations sur les modèles. |
| |
| Grâce aux droits d'accès nous pouvons dire si tel groupe d'utilisateurs a le droit de lecture, de modification, de création ou d'effacement sur les enregistrements d'un modèle. |
| |
| C'est un des nombreux mécanismes utilisables dans Odoo pour gérer les droits d'accès sur les modèles. |
| |
| Pour implémenter les droits d'accès nous devons d'abord les déclarer dans le manifeste de notre module. |
| |
| Nous allons donc éditer le fichier ''%%__manifest__.py%%'' ainsi : |
| |
| <code python __manifest__.py> |
| { |
| 'name':'Mon Module', |
| 'data': [ |
| 'ir.model.access.csv', |
| ], |
| } |
| </code> |
| |
| Nous avons ajouté au manifest une nouvelle clé ''data'' dont la valeur est une liste dont chaque élément est le nom d'un fichier qui est supposé contenir de la data. |
| |
| Le nom de ce fichier correspond à un des modèles préchargés dans Odoo et dont Odoo se sert pour son fonctionnement interne. |
| |
| Le modèle ''ir.model.access'' est le modèle qu'utilise Odoo pour conserver les droits d'accès sur les autres modèles. |
| |
| Nous allons donc créer le ''ir.model.access.csv'' |
| |
| <cli> |
| $ cd ~/service.odoo/extra-addons/monmodule |
| $ touch ir.model.access.csv |
| </cli> |
| |
| Et nous allons le remplir avec le contenu suivant : |
| |
| <code csv ir.model.access.csv> |
| id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink |
| access_elo_prof,access_elo_prof,model_elo_prof,base.group_user,1,1,1,1 |
| </code> |
| |
| |
| |id|name|model_id:id|group_id:id|perm_read|perm_write|perm_create|perm_unlink| |
| |access_elo_prof|access_elo_prof|model_elo_prof|base.group_user|1|1|1|1| |
| |
| |
===== Les vues ===== | ===== Les vues ===== |
===== Les règles d'accès ===== | |
| |