# 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 `/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.