Ne jamais exécuter le générateur de code dans un environnement de production, il y a création de dépendance circulaire pouvant causer de la frustration à nettoyer tous les dommages. D'ailleurs, il est nécessaire d'exécuter en mode développement, avec l'argument `--dev all`.
L'objectif du générateur de code est de :
- utilisation du générateur via l'interface web;
- créer un nouveau module;
- modifier un module existant;
- exécuter les tests.
Ce générateur de code, pour ERPLibre, a tout avantage d'être sous licence AGPLv3 et nécessite d'être dans une communauté active de logiciels libres puisqu'il sera plus efficace d'accéder à du code pour l'auto-apprentissage. Le libre permet :
- (Utiliser) L'utilisation de module sans restriction;
- (Copier) Copier des modules pour faciliter leur maintenance et leur pérennité;
- (Étudier) De comprendre le comportement des fonctionnalités;
- (Modifier) Modifier un module existant pour l'améliorer et pouvoir le redistribuer à la communauté;
1. [A Template generates a Template or a Code_Generator.](#crer-votre-premier-code_generator), le chef d'orchestre qui permet de gérer plusieurs générateur de code.
2. Un Code_Generator génère un module, c'est un moule à module généré.
3. Un Template lit un module pour générer un Code_Generator.
Warning, be careful to your code, always commit after a manipulation, because the mode enable_sync_code erase data, only the git will save you!
<!-- [fr] -->
Attention pour ne pas écraser votre code, toujours commiter après une manipulation, l'utilisation du mode enable_sync_code peut effacer des données. Seul git vous sauvera!
<!-- [en] -->
## Manual generator with web interface
<!-- [fr] -->
## Générateur de module avec l'interface web
<!-- [en] -->
TODO
<!-- [ignore] -->
At root path of ERPLibre git project, run:
<!-- [fr] -->
Niveau intermédiaire.
Pour utiliser le générateur de code, il faut ouvrir l'interface web qui permet la configuration du logiciel à générer. Un des choix suivants :
Générateur de code de base :
<!-- [common] -->
```bash
make addons_install_code_generator_basic
make run_code_generator
```
<!-- [fr] -->
Générateur de code avec fonctionnalités avancées :
<!-- [common] -->
```bash
make addons_install_code_generator_featured
make run_code_generator
```
<!-- [fr] -->
Générateur de code avec fonctionnalités complètes :
<!-- [common] -->
```bash
make addons_install_code_generator_full
make run_code_generator
```
Ouvrir le navigateur sur [http://localhost:8069](http://localhost:8069). Utilisateur `test` et mot de passe `test`. Une fois connecté, ouvrir sur [http://localhost:8069/web?debug=](http://localhost:8069/web?debug=) pour activer le déverminage.
Ouvrir l'application `Code Generator` et créer un `Module`. Remplir les champs requis et générer avec `Action/Generate code`.
Aller dans le module «Code generator» et créer un module «test».
- Sur l'onglet «Information», activer «Enable Sync Code»
- Sur l'onglet «Cron»
- Ajouter un cron
- Choisir le «Modèle» : «Contact»
- Choisir unité de temps en «Minutes» dans «Exécuter tous les»
- Modifier «Nombre d'appel» à -1 pour exécution sans arrêt.
- Activer «Force nextcall» pour permettre que l'interval soit basé sur le moment d'installation du module
- Ajouter le code :
<!-- [common] -->
```python
log("Coucou")
```
<!-- [en] -->
TODO
<!-- [fr] -->
Générer le module avec «Action/Générer code».
Tester :
<!-- [common] -->
```bash
make db_restore_erplibre_base_db_test_module_test
make run_test
```
<!-- [en] -->
TODO
<!-- [fr] -->
Avec les outils développeur, aller regarder les logs dans l'application «Configuration»/Technique/«Structure de base de donnée»/Historisation. Des informations dans le temps apparaîtront avec le mot «Coucou».
Aller dans le module «Code generator» et créer un module «test».
- Sur l'onglet «Information», activer «Enable Sync Code»
- Sur l'onglet «Technical Data»
- Activer «Application»
- Ajouter la dépendance du geo_engine «Geospatial support for System»
- Sur l'onglet «Elements»/«Models»
- Ajouter un modèle «test»
- Ajouter un champs de type «geo_». Le «geo_point» fonctionne bien. Si vous ajoutez plusieurs géométrie, tel que «geo_point», «geo_line» et «geo_polygon», il faut ajouter le champs «type» avec les valeurs du nom des champs choisis en option de sélection, exemple `[('geo_point', 'Geo Point'),('geo_polygon', 'Geo Polygon')]`
- Ajouter le champs optionnel «html_text» de type «html» pour pouvoir afficher du texte dessus.
- Appuyer sur le bouton «Controllers»
- Ajouter le modèle du module actuel, «test»
- Appuyer «Generate»
- Appuyer sur le bouton «Views»
- Désactiver «Enable all feature»
- Dans l'onglet «Website»
- Activer «Enable website leaflet feature»
- Activer «Enable geoengine feature»
- Appuyer «Generate»
Générer le module avec «Action/Générer code».
Tester sur :
<!-- [common] -->
```bash
make db_restore_erplibre_base_db_test_module_test
make run_test
```
<!-- [en] -->
TODO
<!-- [fr] -->
Ajouter les permissions d'utilisation, dans l'application «Configuration», «Gérer les droits d'accès». Sur votre utilisateur, ajouter «Geoengine Admin».
Aller sur l'application «test», créer un «geo_point».
Aller sur la page du site web, ajouter le snippet «Leaflet». Chercher le point qui a été ajouté sur la carte du monde.
Aller dans le module «Code generator» et créer un module «test».
- Sur l'onglet «Information», activer «Enable Sync Code»
- Sur l'onglet «Technical Data», activer «Website theme».
- Appuyer sur le bouton «Views»
- Aller à l'onglet «theme_website»
- Mettre les couleurs désirés
- Appuyer «Generate»
Générer le module avec «Action/Générer code».
Ce module doit être installé manuellement pour l'instant.
<!-- [common] -->
```bash
make db_restore_erplibre_base_db_test
./script/addons/install_addons.sh test website
make run_test
```
<!-- [en] -->
TODO
<!-- [fr] -->
Aller dans l'interface web, Application «Configuration», «Paramètres Généraux»/«Site Web»/«Choisissez un thème». Installer le thème «TEST». Puis aller la page du site web, les couleurs sont dans «Personnaliser»/«Personnaliser le thème».
<!-- [en] -->
### Extract data to module
<!-- [fr] -->
### Extraire les données vers un module
<!-- [en] -->
TODO
<!-- [fr] -->
L'exemple est avec le helpdesk. Installer le module helpdesk_mgmt :
Aller dans le module «Code generator», menu «Databases»/«Databases» et créer un connecteur vers une base de donnée.
À compléter...
<!-- [en] -->
### Migrate from website to model with PDF data
<!-- [fr] -->
### Migrer d'un site web vers un modèle de donnée avec des données format PDF
<!-- [en] -->
TODO
<!-- [fr] -->
En progression, ce n'est pas encore supporté via l'interface web.
Cette technique permet d'aller lire du Javascript sur un site web pour lire ensuite le HTML, c'est à dire la vue, et en comprendre l'information pour créer un modèle.
Pour des références techniques, voir module :
- code_generator_demo_converter_js
- business_plan_import_pdf
Attention, il faut mettre à jour les variables, dans les fichiers hook.py qui permettront d'extraire des données sur le site web à copier. Aucun exemple public n'est accessible pour le moment.
Continue the example, you generated the template `code_generator_template_demo_website_snippet`, this will overwrite `code_generator_demo_website_snippet`:
<!-- [fr] -->
Pour continuer avec l'exemple, généré le template `code_generator_template_demo_website_snippet`, ceci va écraser `code_generator_demo_website_snippet`:
Continue the example, you generated the template `code_generator_template_demo_website_snippet`, this will overwrite `code_generator_demo_website_snippet`:
<!-- [fr] -->
Pour continuer avec l'exemple, généré le template `code_generator_template_demo_website_snippet`, ceci va écraser `code_generator_demo_website_snippet`:
Now, you can test it! Note, you cannot install a generated module with is code_generator associated, because duplicated
models!
<!-- [fr] -->
Maintenant, vous pouvez le tester! Pour info, on ne peut pas installer un module généré avec son générateur de code associé, puisqu'il y a une duplication des modèles!
Il est maintenant possible de modifier les paramètres via l'interface manuelle pour ce module, puis le regénérer en effaçant la BD. Ajouter un modèle et une vue.
Ensuite, modifier la valeur `enable_sync_template` à `True`, `enable_template_wizard_view` à `True`, `template_model_name` avec un modèle existant, dans le fichier template, de l'exemple `code_generator_template_demo_website_snippet`.
# Synchroniser les champs du `Code_Generator` du module
<!-- [en] -->
This reduce time of programming a `Code_Generator` with sync module field with `Template`.
You need a `Template`, a `Code_Generator` with his `Module`. Install the `Module` first in clean database and install `Template`,
this will generate the `Code_Generator`, use `enable_sync_template` at True.
Example:
<!-- [fr] -->
Ceci va permettre de réduire le temps de programmation d'un `Code_Generator` avec la synchronisation des champs de module avec `Template`.
On a besoin d'un `Template`, un `Code_Generator` accompagné de son module. Installer le module en premier dans une base de donnée nettoyé et installer le `Template`, ceci va générer le `Code_Generator`, utiliser `enable_sync_template` à la valeur `True`.
Une bonne manière de tester un générateur de code est de valider qu'il génère le même code, il ne devient pas nécessaire de tester les fonctionnalités, puisque le comportement est la génération.