141 lines
4.9 KiB
Markdown
141 lines
4.9 KiB
Markdown
# comi-odoo-ticketing
|
|
|
|
Script WAPT de surveillance des tickets Odoo Helpdesk Comitari.
|
|
|
|
Le projet interroge Odoo via JSON-RPC, compare la date de modification des tickets avec un etat local JSON, puis envoie un message Rocket.Chat via webhook quand des tickets ont change depuis la derniere verification.
|
|
|
|
## Contenu du depot
|
|
|
|
| Fichier | Role |
|
|
| --- | --- |
|
|
| `setup.py` | Script WAPT principal. Contient les fonctions `install()`, `audit()` et `send_to_rocket()`. |
|
|
| `WAPT/control` | Metadata minimale du paquet WAPT. |
|
|
| `ticketing.ini.example` | Modele de configuration avec placeholders, copie dans le repertoire prive WAPT sous le nom `ticketing.ini`. |
|
|
| `tests/test_ticketing.py` | Tests unitaires de la logique de comparaison et de persistance d'etat. |
|
|
| `.env` | Variables d'environnement locales pour pointer vers l'installation Python/WAPT Windows. |
|
|
| `TRAVAIL.md` | Journal de travail maintenu par Codex. |
|
|
|
|
## Fonctionnement
|
|
|
|
1. `install()` copie `ticketing.ini.example` vers `WAPT.private_dir/ticketing.ini` si le fichier cible n'existe pas encore.
|
|
2. Le fichier copie doit etre renseigne sur la machine cible avec l'URL Odoo, la cle API et le webhook Rocket.Chat.
|
|
3. `audit()` appelle l'endpoint JSON-RPC Odoo configure dans `ticketing.ini`.
|
|
4. La methode Odoo appelee est `helpdesk.ticket.search_read`, avec les champs `id` et `write_date`.
|
|
5. Le script charge l'ancien etat depuis `tickets_state.json`.
|
|
6. Chaque ticket nouveau ou dont `write_date` a change est ajoute a la liste des tickets mis a jour.
|
|
7. Un message est envoye dans Rocket.Chat via le webhook configure dans le fichier INI prive.
|
|
8. Le nouvel etat est sauvegarde dans `WAPT.private_dir/tickets_state.json`.
|
|
|
|
## Prerequis
|
|
|
|
- Environnement WAPT avec `setuphelpers`.
|
|
- Python compatible avec l'environnement WAPT cible.
|
|
- Acces reseau vers Odoo Comitari.
|
|
- Acces reseau vers Rocket.Chat Comitari.
|
|
- Dependances Python :
|
|
- `requests`
|
|
- modules standard : `json`, `os`, `shutil`, `configparser`
|
|
|
|
## Configuration
|
|
|
|
La configuration sensible est centralisee dans la copie privee `WAPT.private_dir/ticketing.ini`. Le depot ne versionne que `ticketing.ini.example`, avec des placeholders :
|
|
|
|
```ini
|
|
[rocket]
|
|
webhook_url = CHANGE_ME_ROCKET_CHAT_WEBHOOK_URL
|
|
|
|
[odoo]
|
|
url = https://CHANGE_ME_ODOO_HOST
|
|
database = CHANGE_ME_ODOO_DATABASE
|
|
username = CHANGE_ME_ODOO_USERNAME
|
|
api_key = CHANGE_ME_ODOO_API_KEY
|
|
model = helpdesk.ticket
|
|
|
|
[http]
|
|
timeout = 30
|
|
```
|
|
|
|
Au deploiement, `install()` copie ce modele vers `WAPT.private_dir/ticketing.ini` uniquement si le fichier n'existe pas deja. Il faut ensuite renseigner le fichier prive sur la machine cible. Les mises a jour du paquet n'ecrasent donc pas une configuration deja remplie.
|
|
|
|
Si une valeur obligatoire est absente ou conserve un placeholder `CHANGE_ME...`, l'audit echoue explicitement avec un message indiquant la cle a renseigner.
|
|
|
|
Important : ne pas renseigner de vrais secrets dans `ticketing.ini.example`. Le fichier local `ticketing.ini` est ignore par Git.
|
|
|
|
## Execution
|
|
|
|
Dans un paquet WAPT, l'execution attendue passe par les hooks WAPT :
|
|
|
|
```python
|
|
install()
|
|
audit()
|
|
```
|
|
|
|
Hors WAPT, le script ne peut pas etre lance tel quel sans fournir les objets et chemins attendus par `setuphelpers`, notamment `WAPT.private_dir`.
|
|
|
|
## Etat local
|
|
|
|
`tickets_state.json` est stocke dans `WAPT.private_dir` et contient un dictionnaire JSON au format :
|
|
|
|
```json
|
|
{
|
|
"ticket_id": "write_date"
|
|
}
|
|
```
|
|
|
|
Le runtime lit et ecrit ce fichier dans `WAPT.private_dir`. Il n'est pas versionne dans le depot.
|
|
|
|
La cle API est utilisee comme mot de passe d'API Odoo pour authentifier `username`. Il est aussi possible de renseigner `uid` dans la section `[odoo]` pour eviter l'appel d'authentification.
|
|
|
|
## Protocole Odoo
|
|
|
|
Le script utilise l'endpoint configure sous la forme `<odoo.url>/jsonrpc` avec le protocole JSON-RPC Odoo standard.
|
|
|
|
Authentification :
|
|
|
|
```json
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"method": "call",
|
|
"params": {
|
|
"service": "common",
|
|
"method": "authenticate",
|
|
"args": ["database", "username", "api_key", {}]
|
|
},
|
|
"id": 1
|
|
}
|
|
```
|
|
|
|
Lecture des tickets :
|
|
|
|
```json
|
|
{
|
|
"jsonrpc": "2.0",
|
|
"method": "call",
|
|
"params": {
|
|
"service": "object",
|
|
"method": "execute_kw",
|
|
"args": ["database", "uid", "api_key", "helpdesk.ticket", "search_read", [[]], {"fields": ["id", "write_date"]}]
|
|
},
|
|
"id": 1
|
|
}
|
|
```
|
|
|
|
## Tests
|
|
|
|
Les tests unitaires peuvent etre executes hors WAPT :
|
|
|
|
```bash
|
|
python3 -m unittest discover -s tests
|
|
```
|
|
|
|
## Points d'attention connus
|
|
|
|
- Les secrets doivent etre renseignes uniquement dans la copie privee `WAPT.private_dir/ticketing.ini`.
|
|
- Les secrets deja presents dans l'historique Git doivent etre regeneres cote Odoo et Rocket.Chat.
|
|
|
|
## Prochaines ameliorations recommandees
|
|
|
|
1. Confirmer en environnement cible que l'utilisateur Odoo configure a bien acces au modele `helpdesk.ticket`.
|
|
2. Completer les metadonnees `WAPT/control` selon les conventions internes Comitari.
|
|
3. Ajouter un test d'integration manuel ou automatise sur une instance Odoo de recette.
|