From 7520372f7aae022313b7e094e63d469e0c9f8f8c Mon Sep 17 00:00:00 2001 From: Ladebeze66 Date: Thu, 3 Apr 2025 09:04:52 +0200 Subject: [PATCH] prefiltrage --- .../attachments/144792_image003.png | Bin 5417 -> 0 bytes .../attachments/144794_image004.jpg | Bin 63295 -> 0 bytes .../attachments/144796_image.png | Bin 45686 -> 0 bytes output/ticket_T11067/attachments_info.json | 23 - output/ticket_T11067/messages.json | 103 --- output/ticket_T11067/ticket_info.json | 146 --- retrieve_ticket.py | 12 +- .../ticket_manager2.cpython-312.pyc | Bin 26945 -> 15801 bytes utils/ticket_manager2.py | 842 +++++------------- 9 files changed, 225 insertions(+), 901 deletions(-) delete mode 100644 output/ticket_T11067/attachments/144792_image003.png delete mode 100644 output/ticket_T11067/attachments/144794_image004.jpg delete mode 100644 output/ticket_T11067/attachments/144796_image.png delete mode 100644 output/ticket_T11067/attachments_info.json delete mode 100644 output/ticket_T11067/messages.json delete mode 100644 output/ticket_T11067/ticket_info.json diff --git a/output/ticket_T11067/attachments/144792_image003.png b/output/ticket_T11067/attachments/144792_image003.png deleted file mode 100644 index 121eaf87b825740fe5c0bc1488eb92efe74bca69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5417 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 Tq=>^300000NkvXXu0mjfcXxH7 diff --git a/output/ticket_T11067/attachments/144794_image004.jpg b/output/ticket_T11067/attachments/144794_image004.jpg deleted file mode 100644 index 5c3401dd8163530d10573858f1b2d50a548fd1a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63295 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 CMUbEX diff --git a/output/ticket_T11067/attachments/144796_image.png b/output/ticket_T11067/attachments/144796_image.png deleted file mode 100644 index db688c6b338df272efcb51837bda35b39d8d3d53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45686 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", - "subject": false, - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ] - }, - { - "id": 227733, - "body": "", - "date": "2025-03-18 14:19:29", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "\"Romuald GRUSON\" ", - "subject": false, - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ] - }, - { - "id": 227732, - "body": "", - "date": "2025-03-18 14:19:29", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "\"Romuald GRUSON\" ", - "subject": false, - "parent_id": false - }, - { - "id": 227731, - "body": "Bonjour,\n\nEffectivement, il y a une anomalie lors du changement du nom d'un poste de production. Les mises à jour déployées ce soir et demain devraient vous permettre d’effectuer cette modification.\n\nPour cela, il faut éditer le nom du poste de production d’enrobée, l’enregistrer dans la fiche générale, puis cliquer sur la petite flèche à droite du nom et le modifier.\n\nJe reste à votre entière disposition pour toute information complémentaire.", - "date": "2025-03-18 14:18:51", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "support@cbao.fr", - "subject": "Re: [T11067] - changement nom centrale d'enrobage", - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ], - "body_original": "

Bonjour,

Effectivement, il y a une anomalie lors du changement du nom d'un poste de production. Les mises à jour déployées ce soir et demain devraient vous permettre d’effectuer cette modification.

\n

Pour cela, il faut éditer le nom du poste de production d’enrobée, l’enregistrer dans la fiche générale, puis cliquer sur la petite flèche à droite du nom et le modifier.

\"image.png\"


Je reste à votre entière disposition pour toute information complémentaire.

Cordialement,

---

Support technique
 

\n

\"CBAO

\n

Afin d'assurer une meilleure traçabilité et vous garantir une prise en charge optimale, nous vous invitons à envoyer vos demandes d'assistance technique à support@cbao.fr
L'objectif du Support Technique est de vous aider : si vous rencontrez une difficulté, ou pour nous soumettre une ou des suggestions d'amélioration de nos logiciels ou de nos méthodes. Notre service est ouvert du lundi au vendredi de 9h à 12h et de 14h à 18h. Dès réception, un technicien prendra en charge votre demande et au besoin vous rappellera.

Confidentialité : Ce courriel contient des informations confidentielles exclusivement réservées au destinataire mentionné. Si vous deviez recevoir cet e-mail par erreur, merci d’en avertir immédiatement l’expéditeur et de le supprimer de votre système informatique. Au cas où vous ne seriez pas destinataire de ce message, veuillez noter que sa divulgation, sa copie ou tout acte en rapport avec la communication du contenu des informations est strictement interdit.

" - }, - { - "id": 227730, - "body": "", - "date": "2025-03-18 13:42:15", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "\"Romuald GRUSON\" ", - "subject": false, - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ] - }, - { - "id": 227728, - "body": "", - "date": "2025-03-18 13:42:04", - "author_id": [ - 32165, - "Romuald GRUSON" - ], - "email_from": "\"Romuald GRUSON\" ", - "subject": false, - "parent_id": false - }, - { - "id": 227725, - "body": "", - "date": "2025-03-18 13:18:31", - "author_id": [ - 5144, - "CONSEIL DEPARTEMENTAL DU MORBIHAN (56), Dominique CARVAL" - ], - "email_from": "CARVAL Dominique ", - "subject": "changement nom centrale d'enrobage", - "parent_id": [ - 227724, - "[T11067] changement nom centrale d'enrobage" - ], - "body_original": "

\r\n\r\n

\r\n
\r\n

Bonjour,\r\n

\r\n

 

\r\n

3 centrales d’enrobage ont changé de nom.

\r\n

 

\r\n

Comment faire ce changement sur BRG-LAB ?

\r\n

 

\r\n

(ici ARMOR ENROBÉS devient BREIZH ENROBÉS sur 3 sites)

\r\n

 

\r\n

\r\n

 

\r\n

Bonne réception

\r\n

 

\r\n

\"cid:image004.png@01D8D425.0F95E5B0\"

\r\n

 

\r\n

Dominique CARVAL

\r\n

 

\r\n

Responsable du pôle Laboratoire Routier

\r\n

Direction des Infrastructures et des mobilités (DIM)

\r\n

Service d’Appui aux Politiques d’Aménagement / Pôle Laboratoire Routier (SAPA/PLR)

\r\n

115, rue du commerce – 56000 VANNES

\r\n

 

\r\n

tél : 02 97 54 71 14 - mobile : 06 98 32 88 30 –\r\ndominique.carval@morbihan.fr\r\n 

\r\n

 

\r\n

 

\r\n

 

\r\n
\r\n
\r\n
Droit à la déconnexion : Si vous recevez ce message en dehors de vos heures de travail ou pendant vos congés, vous n’êtes pas tenu de répondre immédiatement, sauf en cas d’urgence exceptionnelle.\r\n
\r\nCe message électronique et tous les fichiers attachés qu'il contient peuvent être confidentiels, contenir des données personnelles ou sensibles et être soumis au secret professionnel. Il est destiné exclusivement à l'usage du ou des destinataires. Si vous recevez\r\n ce message par erreur et/ou si vous n'êtes pas le destinataire désigné de ce message, le département du Morbihan vous remercie d'avertir immédiatement l'expéditeur et de le détruire ainsi que toutes les pièces jointes s'y rattachant. La publication, l'usage,\r\n la distribution, l'impression ou la copie non autorisée de ce message et des attachements qu'il contient sont strictement interdits. Tout message électronique est susceptible d'altération.
\r\n\r\n" - } -] \ No newline at end of file diff --git a/output/ticket_T11067/ticket_info.json b/output/ticket_T11067/ticket_info.json deleted file mode 100644 index dc6afbe..0000000 --- a/output/ticket_T11067/ticket_info.json +++ /dev/null @@ -1,146 +0,0 @@ -{ - "id": 11046, - "active": true, - "name": "changement nom centrale d'enrobage", - "description": "


", - "sequence": 10, - "stage_id": [ - 8, - "Clôturé" - ], - "kanban_state": "normal", - "create_date": "2025-03-18 13:22:27", - "write_date": "2025-04-02 07:16:48", - "date_start": "2025-03-18 13:22:28", - "date_end": false, - "date_assign": "2025-03-18 13:42:04", - "date_deadline": "2025-04-02", - "date_last_stage_update": "2025-04-02 07:16:48", - "project_id": [ - 3, - "Demandes" - ], - "notes": false, - "planned_hours": 0.0, - "user_id": [ - 32, - "Romuald GRUSON" - ], - "partner_id": [ - 5144, - "CONSEIL DEPARTEMENTAL DU MORBIHAN (56), Dominique CARVAL" - ], - "company_id": [ - 1, - "CBAO S.A.R.L." - ], - "color": 0, - "displayed_image_id": false, - "parent_id": false, - "child_ids": [], - "email_from": "CARVAL Dominique ", - "email_cc": "", - "working_hours_open": 0.0, - "working_hours_close": 0.0, - "working_days_open": 0.0, - "working_days_close": 0.0, - "website_message_ids": [ - 227731, - 227725 - ], - "remaining_hours": 0.0, - "effective_hours": 0.0, - "total_hours_spent": 0.0, - "progress": 0.0, - "subtask_effective_hours": 0.0, - "timesheet_ids": [], - "priority": "0", - "code": "T11067", - "milestone_id": false, - "sale_line_id": false, - "sale_order_id": false, - "billable_type": "no", - "activity_ids": [], - "message_follower_ids": [ - 89590, - 89592, - 89593 - ], - "message_ids": [ - 228803, - 227733, - 227732, - 227731, - 227730, - 227728, - 227726, - 227725, - 227724 - ], - "message_main_attachment_id": [ - 144792, - "image003.png" - ], - "failed_message_ids": [], - "rating_ids": [], - "rating_last_value": 0.0, - "access_token": "3295983b-a3aa-4d8c-817d-2332829ca264", - "create_uid": [ - 1, - "OdooBot" - ], - "write_uid": [ - 32, - "Romuald GRUSON" - ], - "x_CBAO_windows_maj_ID": false, - "x_CBAO_version_signalement": false, - "x_CBAO_version_correction": false, - "x_CBAO_DateCorrection": false, - "x_CBAO_Scoring_Facilite": 0, - "x_CBAO_Scoring_Importance": 0, - "x_CBAO_Scoring_Urgence": 0, - "x_CBAO_Scoring_Incidence": 0, - "x_CBAO_Scoring_Resultat": 0, - "x_CBAO_InformationsSup": false, - "kanban_state_label": "En cours", - "subtask_planned_hours": 0.0, - "manager_id": [ - 22, - "Fabien LAFAY" - ], - "user_email": "romuald@mail.cbao.fr", - "attachment_ids": [], - "legend_blocked": "Bloqué", - "legend_done": "Prêt pour la prochaine étape", - "legend_normal": "En cours", - "subtask_project_id": [ - 3, - "Demandes" - ], - "subtask_count": 0, - "analytic_account_active": true, - "allow_timesheets": true, - "use_milestones": false, - "show_time_control": "start", - "is_project_map_empty": true, - "activity_state": false, - "activity_user_id": false, - "activity_type_id": false, - "activity_date_deadline": false, - "activity_summary": false, - "message_is_follower": false, - "message_unread": false, - "message_unread_counter": 0, - "message_needaction": false, - "message_needaction_counter": 0, - "message_has_error": false, - "message_has_error_counter": 0, - "message_attachment_count": 3, - "rating_last_feedback": false, - "rating_count": 0, - "access_url": "/my/task/11046", - "access_warning": "", - "display_name": "[T11067] changement nom centrale d'enrobage", - "__last_update": "2025-04-02 07:16:48" -} \ No newline at end of file diff --git a/retrieve_ticket.py b/retrieve_ticket.py index b78a1dd..aa09cb6 100755 --- a/retrieve_ticket.py +++ b/retrieve_ticket.py @@ -124,16 +124,16 @@ def main(): sys.exit(1) print(f"Extraction terminée avec succès") - print(f"- Informations du ticket: {result['files']['ticket_info']}") - print(f"- Messages: {result['files']['messages']}") - print(f"- Pièces jointes: {result['files']['attachments_info']}") - print(f"- Dossier des pièces jointes: {result['files']['attachments_dir']}") + print(f"- Informations du ticket: {result['ticket_info']}") + print(f"- Messages: {result['messages_file']}") + print(f"- Données complètes: {result['ticket_data_file']}") + print(f"- Pièces jointes: {len(result['attachments'])} fichiers") # Afficher un résumé print(f"\nRésumé du ticket {args.ticket_code}:") print(f"- Nom: {ticket.get('name', 'N/A')}") - print(f"- Messages: {len(result['messages'])}") - print(f"- Pièces jointes: {len(result['attachments'])}") + print(f"- Description: {ticket.get('description', 'N/A')[:100]}...") + print(f"- Étape: {ticket.get('stage_id', ['N/A'])[1] if isinstance(ticket.get('stage_id'), (list, tuple)) else 'N/A'}") if __name__ == "__main__": main() \ No newline at end of file diff --git a/utils/__pycache__/ticket_manager2.cpython-312.pyc b/utils/__pycache__/ticket_manager2.cpython-312.pyc index 1ecec1950c08cd6ca656622629bf9121d666bc8e..e6c38186acb8ae46b610cf42c7ebafbf482db2b1 100644 GIT binary patch literal 15801 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 LYo!>)ulxT1G+xs2 literal 26945 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 bool: - """ - Établit la connexion au serveur Odoo. - - Returns: - True si la connexion réussit, False sinon - """ try: - # Point d'entrée pour le login login_url = f"{self.url}/web/session/authenticate" - - # Données pour la requête de login login_data = { "jsonrpc": "2.0", "params": { @@ -52,70 +33,35 @@ class TicketManager: "password": self.api_key } } - - # Effectuer la requête response = requests.post(login_url, json=login_data) response.raise_for_status() - - # Extraire les résultats + result = response.json() if result.get("error"): print(f"Erreur de connexion: {result['error']['message']}") return False - - # Récupérer l'ID utilisateur et la session + self.uid = result.get("result", {}).get("uid") self.session_id = response.cookies.get("session_id") - if not self.uid: print("Erreur: Impossible de récupérer l'ID utilisateur") return False - + print(f"Connecté avec succès à {self.url} (User ID: {self.uid})") return True - except Exception as e: print(f"Erreur de connexion: {str(e)}") return False - - def _ensure_connection(self) -> bool: - """ - Vérifie que la connexion est établie, tente de se reconnecter si nécessaire. - - Returns: - True si la connexion est disponible, False sinon - """ - if not self.uid or not self.session_id: - return self.login() - return True - + def _rpc_call(self, endpoint: str, params: Dict[str, Any]) -> Dict[str, Any]: - """ - Effectue un appel RPC vers le serveur Odoo. - - Args: - endpoint: Point d'entrée de l'API (/web/dataset/call_kw, etc.) - params: Paramètres de la requête - - Returns: - Résultat de la requête - """ - if not self._ensure_connection(): + if not self.uid and not self.login(): return {"error": "Non connecté"} - + try: - # Préparer la requête full_url = f"{self.url}{endpoint}" headers = {"Content-Type": "application/json"} - - # Données de la requête - data = { - "jsonrpc": "2.0", - "method": "call", - "params": params - } - - # Effectuer la requête + data = {"jsonrpc": "2.0", "method": "call", "params": params} + response = requests.post( full_url, json=data, @@ -123,231 +69,165 @@ class TicketManager: cookies={"session_id": self.session_id} if self.session_id else None ) response.raise_for_status() - - # Traiter la réponse result = response.json() if result.get("error"): return {"error": result["error"]["message"]} - return result.get("result", {}) - except Exception as e: return {"error": str(e)} - - def search_read(self, model: str, domain: List, fields: List[str], limit: int = 0) -> List[Dict[str, Any]]: - """ - Recherche et lit des enregistrements selon un domaine. - - Args: - model: Nom du modèle - domain: Domaine de recherche - fields: Champs à récupérer - limit: Nombre max de résultats (0 pour illimité) - - Returns: - Liste des enregistrements trouvés - """ + + def search_read(self, model: str, domain: List, fields: List[str], order: Optional[str] = None, limit: Optional[int] = None) -> List[Dict[str, Any]]: params = { "model": model, "method": "search_read", "args": [domain, fields], - "kwargs": {"limit": limit} - } - - result = self._rpc_call("/web/dataset/call_kw", params) - if isinstance(result, dict) and "error" in result: - print(f"Erreur lors de la recherche: {result['error']}") - return [] - - return result if isinstance(result, list) else [] - - def read(self, model: str, ids: List[int], fields: List[str]) -> List[Dict[str, Any]]: - """ - Lit des enregistrements par leurs IDs. - - Args: - model: Nom du modèle - ids: Liste des IDs à lire - fields: Champs à récupérer - - Returns: - Liste des enregistrements lus - """ - params = { - "model": model, - "method": "read", - "args": [ids, fields], "kwargs": {} } + if order is not None: + params["kwargs"]["order"] = order + if limit is not None: + params["kwargs"]["limit"] = limit + result = self._rpc_call("/web/dataset/call_kw", params) - if isinstance(result, dict) and "error" in result: - print(f"Erreur lors de la lecture: {result['error']}") - return [] - return result if isinstance(result, list) else [] - - def get_ticket_by_code(self, ticket_code: str) -> Dict[str, Any]: - """ - Récupère un ticket par son code. - - Args: - ticket_code: Code du ticket à récupérer - - Returns: - Données du ticket ou dictionnaire vide si non trouvé - """ - # Rechercher l'ID du ticket par son code - tickets = self.search_read( - model=self.model_name, - domain=[("code", "=", ticket_code)], - fields=["id"], - limit=1 - ) - - if not tickets: - print(f"Aucun ticket trouvé avec le code {ticket_code}") - return {} - - # Récupérer toutes les données du ticket - ticket_id = tickets[0]["id"] - return self.get_ticket_by_id(ticket_id) - - def get_ticket_by_id(self, ticket_id: int) -> Dict[str, Any]: - """ - Récupère un ticket par son ID. - - Args: - ticket_id: ID du ticket à récupérer - - Returns: - Données du ticket ou dictionnaire vide si non trouvé - """ - # Récupérer les champs disponibles pour le modèle - fields_info = self._get_model_fields(self.model_name) - - # Lire les données du ticket - tickets = self.read( - model=self.model_name, - ids=[ticket_id], - fields=fields_info - ) - - if not tickets: - print(f"Aucun ticket trouvé avec l'ID {ticket_id}") - return {} - - return tickets[0] - - def _get_model_fields(self, model_name: str) -> List[str]: - """ - Récupère la liste des champs disponibles pour un modèle. - - Args: - model_name: Nom du modèle - - Returns: - Liste des noms de champs - """ - params = { - "model": model_name, - "method": "fields_get", - "args": [], - "kwargs": {"attributes": ["name", "type"]} - } - + + def read(self, model: str, ids: List[int], fields: List[str]) -> List[Dict[str, Any]]: + params = {"model": model, "method": "read", "args": [ids, fields], "kwargs": {}} result = self._rpc_call("/web/dataset/call_kw", params) - if "error" in result: - print(f"Erreur lors de la récupération des champs: {result['error']}") - return [] - - # Filtrer les types de champs problématiques - invalid_types = ["many2many", "binary"] - valid_fields = [ - field for field, info in result.items() - if info.get("type") not in invalid_types + return result if isinstance(result, list) else [] + + def get_ticket_by_code(self, ticket_code: str) -> Dict[str, Any]: + tickets = self.search_read(self.model_name, [("code", "=", ticket_code)], ["id"]) + if not tickets: + return {} + return self.get_ticket_by_id(tickets[0]["id"]) + + def get_ticket_by_id(self, ticket_id: int) -> Dict[str, Any]: + ticket_fields = [ + "id", "name", "description", "stage_id", "user_id", "partner_id", + "create_date", "write_date", "date_deadline", "priority", + "tag_ids", "code", "project_id", "kanban_state", "color", + "active", "company_id", "display_name" ] - - return valid_fields - + tickets = self.read(self.model_name, [ticket_id], ticket_fields) + return tickets[0] if tickets else {} + def get_ticket_messages(self, ticket_id: int) -> List[Dict[str, Any]]: + messages = self.search_read( + "mail.message", + [ + ("res_id", "=", ticket_id), + ("model", "=", self.model_name), + ("message_type", "in", ["comment", "notification", "email"]) + ], + ["id", "body", "date", "author_id", "email_from", "message_type", "parent_id", "subtype_id", "tracking_value_ids"], + order="date asc" + ) + return self._clean_messages(messages) + + def _clean_messages(self, messages: List[Dict[str, Any]]) -> List[Dict[str, Any]]: + cleaned_messages = [] + for message in messages: + if message.get("body"): + body = message["body"] + body = unescape(body) + # Stocker la version HTML + message["body_html"] = body + # Créer une version texte nettoyée + body_text = re.sub(r'.*?', '', body, flags=re.DOTALL) + body_text = re.sub(r'.*?', '', body_text, flags=re.DOTALL) + body_text = re.sub(r'<[^>]+>', ' ', body_text) + body_text = re.sub(r'\s+', ' ', body_text).strip() + message["body_text"] = body_text + + # Organiser les messages en fils de discussion + if message.get("parent_id"): + parent_id = message["parent_id"][0] if isinstance(message["parent_id"], (list, tuple)) else message["parent_id"] + message["parent_id"] = parent_id + + cleaned_messages.append(message) + return cleaned_messages + + def get_ticket_attachments(self, ticket_id: int) -> List[Dict[str, Any]]: """ - Récupère les messages d'un ticket. + Récupère les pièces jointes associées à un ticket. Args: ticket_id: ID du ticket Returns: - Liste des messages du ticket + Liste des pièces jointes avec leurs métadonnées. """ - # D'abord récupérer les IDs des messages - ticket = self.read( - model=self.model_name, - ids=[ticket_id], - fields=["message_ids"] - ) - - if not ticket or "message_ids" not in ticket[0]: - print(f"Impossible de récupérer les messages pour le ticket {ticket_id}") - return [] - - message_ids = ticket[0]["message_ids"] - - # Récupérer les détails des messages - messages = self.read( - model="mail.message", - ids=message_ids, - fields=["id", "body", "date", "author_id", "email_from", "subject", "parent_id"] - ) - - return messages - - def get_ticket_attachments(self, ticket_id: int, download_path: Optional[str] = None) -> List[Dict[str, Any]]: - """ - Récupère les pièces jointes d'un ticket, avec option de téléchargement. - - Args: - ticket_id: ID du ticket - download_path: Chemin où télécharger les pièces jointes (optionnel) - - Returns: - Liste des informations sur les pièces jointes - """ - # Rechercher les pièces jointes liées au ticket attachments = self.search_read( - model="ir.attachment", - domain=[("res_model", "=", self.model_name), ("res_id", "=", ticket_id)], - fields=["id", "name", "mimetype", "create_date", "datas"] + "ir.attachment", + [ + ("res_id", "=", ticket_id), + ("res_model", "=", self.model_name) + ], + ["id", "name", "mimetype", "file_size", "create_date", "create_uid", "datas", "description"] ) - - if not attachments: - print(f"Aucune pièce jointe trouvée pour le ticket {ticket_id}") - return [] - - if download_path: - # Créer le répertoire si nécessaire - os.makedirs(download_path, exist_ok=True) - - # Télécharger chaque pièce jointe - for attachment in attachments: - if "datas" in attachment and attachment["datas"]: - # Déchiffrer les données base64 - binary_data = base64.b64decode(attachment["datas"]) - - # Nettoyer le nom de fichier - safe_name = attachment["name"].replace("/", "_").replace("\\", "_") - file_path = os.path.join(download_path, f"{attachment['id']}_{safe_name}") - - # Sauvegarder le fichier - with open(file_path, "wb") as f: - f.write(binary_data) - - # Remplacer les données binaires par le chemin du fichier - attachment["file_path"] = file_path - del attachment["datas"] - return attachments - + + def download_attachment(self, attachment: Dict[str, Any], output_dir: str) -> str: + """ + Télécharge et sauvegarde une pièce jointe dans le répertoire spécifié. + + Args: + attachment: Dictionnaire contenant les métadonnées de la pièce jointe + output_dir: Répertoire où sauvegarder la pièce jointe + + Returns: + Chemin du fichier sauvegardé + """ + if not attachment.get("datas"): + return "" + + # Créer le dossier attachments s'il n'existe pas + attachments_dir = os.path.join(output_dir, "attachments") + os.makedirs(attachments_dir, exist_ok=True) + + # Construire un nom de fichier sécurisé + filename = re.sub(r'[^\w\.-]', '_', attachment["name"]) + file_path = os.path.join(attachments_dir, filename) + + # Décoder et sauvegarder le contenu + try: + file_content = base64.b64decode(attachment["datas"]) + with open(file_path, "wb") as f: + f.write(file_content) + return file_path + except Exception as e: + print(f"Erreur lors du téléchargement de la pièce jointe {attachment['name']}: {str(e)}") + return "" + + def organize_messages_by_thread(self, messages: List[Dict[str, Any]]) -> List[Dict[str, Any]]: + """ + Organise les messages en fils de discussion. + + Args: + messages: Liste des messages à organiser + + Returns: + Liste des messages racines avec leurs réponses imbriquées. + """ + # Créer un dictionnaire pour stocker tous les messages par ID + messages_by_id = {msg["id"]: {**msg, "replies": []} for msg in messages} + + # Identifier les messages racines et ajouter les réponses aux parents + root_messages = [] + for msg_id, msg in messages_by_id.items(): + if not msg.get("parent_id") or msg["parent_id"] == 0: + root_messages.append(msg) + else: + parent_id = msg["parent_id"] + if parent_id in messages_by_id: + messages_by_id[parent_id]["replies"].append(msg) + + # Trier les messages racines par date + root_messages.sort(key=lambda m: m.get("date", "")) + return root_messages + def extract_ticket_data(self, ticket_id: int, output_dir: str) -> Dict[str, Any]: """ Extrait toutes les données d'un ticket, y compris messages et pièces jointes. @@ -357,377 +237,93 @@ class TicketManager: output_dir: Répertoire de sortie Returns: - Dictionnaire avec toutes les données du ticket + Dictionnaire contenant les chemins des fichiers créés. """ - # Créer le répertoire de sortie os.makedirs(output_dir, exist_ok=True) - - # Récupérer les données du ticket ticket = self.get_ticket_by_id(ticket_id) + if not ticket: return {"error": f"Ticket {ticket_id} non trouvé"} - - # Sauvegarder les données du ticket - ticket_path = os.path.join(output_dir, "ticket_info.json") - with open(ticket_path, "w", encoding="utf-8") as f: - json.dump(ticket, f, indent=2, ensure_ascii=False) - - # Récupérer et sauvegarder les messages + + # Récupération des messages associés au ticket messages = self.get_ticket_messages(ticket_id) - # Nettoyer le contenu HTML des messages - cleaned_messages = self._clean_messages(messages) + # Organisation des messages en fils de discussion + thread_messages = self.organize_messages_by_thread(messages) + # Récupération des pièces jointes + attachments = self.get_ticket_attachments(ticket_id) + attachment_files = [] + + # Téléchargement des pièces jointes + for attachment in attachments: + file_path = self.download_attachment(attachment, output_dir) + if file_path: + # Supprimer les données binaires avant de sauvegarder dans le JSON + attachment_info = {k: v for k, v in attachment.items() if k != "datas"} + attachment_info["local_path"] = file_path + attachment_files.append(attachment_info) + + # Constitution des données complètes du ticket + ticket_data = { + **ticket, + "messages": messages, + "threads": thread_messages, + "attachments": attachment_files + } + + # Sauvegarde des données du ticket dans un fichier JSON + ticket_path = os.path.join(output_dir, "ticket_data.json") + with open(ticket_path, "w", encoding="utf-8") as f: + json.dump(ticket_data, f, indent=2, ensure_ascii=False) + + # Sauvegarder séparément les messages pour compatibilité messages_path = os.path.join(output_dir, "messages.json") with open(messages_path, "w", encoding="utf-8") as f: - json.dump(cleaned_messages, f, indent=2, ensure_ascii=False) + json.dump({"ticket": ticket, "messages": messages}, f, indent=2, ensure_ascii=False) - # Récupérer et sauvegarder les pièces jointes - attachments_dir = os.path.join(output_dir, "attachments") - attachments = self.get_ticket_attachments(ticket_id, attachments_dir) - attachments_path = os.path.join(output_dir, "attachments_info.json") - with open(attachments_path, "w", encoding="utf-8") as f: - json.dump(attachments, f, indent=2, ensure_ascii=False) + # Journal d'extraction pour référence + log_path = os.path.join(output_dir, "extraction_log.txt") + with open(log_path, "w", encoding="utf-8") as f: + f.write(f"Extraction du ticket {ticket_id} le {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") + f.write(f"Nom du ticket: {ticket.get('name', 'N/A')}\n") + f.write(f"Nombre de messages: {len(messages)}\n") + f.write(f"Nombre de pièces jointes: {len(attachments)}\n") - # Compiler toutes les informations - result = { - "ticket": ticket, - "messages": cleaned_messages, - "attachments": [ - {k: v for k, v in a.items() if k != "datas"} - for a in attachments - ], - "files": { - "ticket_info": ticket_path, - "messages": messages_path, - "attachments_info": attachments_path, - "attachments_dir": attachments_dir - } + print(f"Données complètes sauvegardées dans {ticket_path}") + print(f"Pièces jointes ({len(attachment_files)}) sauvegardées dans {os.path.join(output_dir, 'attachments')}") + + # Retourner un dictionnaire contenant les informations du ticket + return { + "ticket_info": ticket, + "messages_file": messages_path, + "ticket_data_file": ticket_path, + "attachments": attachment_files, + "log_file": log_path } - - return result - - def _clean_messages(self, messages: List[Dict[str, Any]]) -> List[Dict[str, Any]]: - """ - Nettoie le contenu HTML des messages et filtre les messages indésirables. - - Args: - messages: Liste des messages à nettoyer - - Returns: - Liste des messages nettoyés - """ - import re - from html import unescape - - # Restauration du contenu original du premier message - original_content = None - for message in messages: - if message.get("body") and isinstance(message.get("body"), str) and not message.get("author_id", [0])[0] == 2: - if original_content is None and "body_original" in message: - # Récupérer le corps original du message initial (généralement la demande client) - body_original = message["body_original"] - - # Extraire le contenu de la question initiale - if body_original: - # Suppression des balises d'image avec leurs attributs - content = re.sub(r']*?>', '', body_original) - - # Supprimer les balises de style et script - content = re.sub(r']*?>.*?', '', content, flags=re.DOTALL) - content = re.sub(r']*?>.*?', '', content, flags=re.DOTALL) - - # Supprimer les attributs de style des balises - content = re.sub(r' style="[^"]*"', '', content) - content = re.sub(r' id="[^"]*"', '', content) - content = re.sub(r' class="[^"]*"', '', content) - content = re.sub(r' width="[^"]*"', '', content) - content = re.sub(r' height="[^"]*"', '', content) - content = re.sub(r' border="[^"]*"', '', content) - - # Remplacer les balises

,

,
par des sauts de ligne - content = re.sub(r'<(?:p|div)[^>]*?>', '\n', content) - content = re.sub(r'', '\n', content) - content = re.sub(r']*?>', '\n', content) - - # Remplacer les listes - content = re.sub(r']*?>', '\n- ', content) - content = re.sub(r'', '', content) - - # Remplacer les liens par leur texte et URL - def replace_link(match): - link_text = re.sub(r'<[^>]*?>', '', match.group(2)) - href = re.search(r'href="([^"]*)"', match.group(1)) - if href and href.group(1) != link_text: - return f"{link_text} ({href.group(1)})" - return link_text - - content = re.sub(r']*?)>(.*?)', replace_link, content) - - # Supprimer toutes les autres balises HTML - content = re.sub(r'<[^>]*?>', '', content) - - # Convertir les entités HTML en caractères correspondants - content = unescape(content) - - # Supprimer les signatures et autres textes communs des emails - signatures = [ - r'Droit à la déconnexion.*', - r'Ce message électronique et tous les fichiers attachés.*', - r'Direction des Infrastructures.*', - r'Service d\'Appui aux Politiques d\'Aménagement.*', - r'tél :.*', - r'mobile :.*', - ] - - for sig_pattern in signatures: - content = re.sub(sig_pattern, '', content, flags=re.DOTALL | re.IGNORECASE) - - # Supprimer les espaces et sauts de ligne multiples - content = re.sub(r'\n\s*\n', '\n\n', content) - content = re.sub(r' +', ' ', content) - - # Supprimer les espaces en début et fin de chaîne - content = content.strip() - - original_content = content - message["body"] = content - break # On arrête après avoir traité le premier message client - - cleaned_messages = [] - - for message in messages: - # Ignorer les messages d'OdooBot - if message.get("author_id") and message["author_id"][0] == 2 and message["author_id"][1] == "OdooBot": - continue - - # Ignorer les messages vides sans contenu - if not message.get("body"): - # Vérifier si c'est un message qui ne contient aucune information utile - if not message.get("subject") and not message.get("email_from"): - continue - - cleaned_message = message.copy() - - # Nettoyer le contenu du message si existe - if "body" in cleaned_message and cleaned_message["body"]: - # Vérifier que body est une chaîne de caractères - if isinstance(cleaned_message["body"], str): - # Conserver le corps original pour référence - cleaned_message["body_original"] = message["body"] - - # Supprimer les balises HTML - body = cleaned_message["body"] - - # Si ce n'est pas le premier message et qu'on n'a pas déjà nettoyé - if body != original_content: - # Supprimer les balises d'image avec leurs attributs - body = re.sub(r']*?>', '', body) - - # Supprimer les balises de style et script - body = re.sub(r']*?>.*?', '', body, flags=re.DOTALL) - body = re.sub(r']*?>.*?', '', body, flags=re.DOTALL) - - # Supprimer les attributs de style des balises - body = re.sub(r' style="[^"]*"', '', body) - body = re.sub(r' id="[^"]*"', '', body) - body = re.sub(r' class="[^"]*"', '', body) - body = re.sub(r' width="[^"]*"', '', body) - body = re.sub(r' height="[^"]*"', '', body) - body = re.sub(r' border="[^"]*"', '', body) - - # Remplacer les balises

,

,
par des sauts de ligne - body = re.sub(r'<(?:p|div)[^>]*?>', '\n', body) - body = re.sub(r'', '\n', body) - body = re.sub(r']*?>', '\n', body) - - # Remplacer les listes - body = re.sub(r']*?>', '\n- ', body) - body = re.sub(r'', '', body) - - # Remplacer les liens par leur texte et URL - def replace_link(match): - link_text = re.sub(r'<[^>]*?>', '', match.group(2)) - href = re.search(r'href="([^"]*)"', match.group(1)) - if href and href.group(1) != link_text: - return f"{link_text} ({href.group(1)})" - return link_text - - body = re.sub(r']*?)>(.*?)', replace_link, body) - - # Supprimer toutes les autres balises HTML - body = re.sub(r'<[^>]*?>', '', body) - - # Convertir les entités HTML en caractères correspondants - body = unescape(body) - - # Supprimer les parties de signature standard et de footer - signatures = [ - r'---\s*\n.*Support technique.*', - r'Afin d\'assurer une meilleure traçabilité.*', - r'Confidentialité :.*', - r'Ce message électronique et tous les fichiers attachés.*', - r'Droit à la déconnexion :.*', - r'L\'objectif du Support Technique est de vous aider.*', - r'.*www\.cbao\.fr.*', - r'.*tél.*\+33.*', - r'.*\@.*\.fr.*', - r' 60: - signature_section = False - - # Filtrer les lignes qui contiennent probablement une signature - if not signature_section: - filtered_lines.append(line) - - body = '\n'.join(filtered_lines) - - # Supprimer les espaces et sauts de ligne multiples - body = re.sub(r'\n\s*\n', '\n\n', body) - body = re.sub(r' +', ' ', body) - - # Supprimer les espaces en début et fin de chaîne - body = body.strip() - - cleaned_message["body"] = body - - cleaned_messages.append(cleaned_message) - - return cleaned_messages if __name__ == "__main__": import sys - import argparse - - parser = argparse.ArgumentParser(description="Extraction de tickets Odoo") - parser.add_argument("ticket_code", help="Code du ticket à extraire (ex: T0167)") - parser.add_argument("--config", default="config.json", help="Chemin vers le fichier de configuration") - parser.add_argument("--output-dir", help="Répertoire de sortie (par défaut: output/ticket_CODE)") - parser.add_argument("--verbose", "-v", action="store_true", help="Afficher plus d'informations") - parser.add_argument("--keep-html", action="store_true", help="Conserver le contenu HTML dans les messages") - parser.add_argument("--no-original", action="store_true", help="Ne pas conserver le corps de message original") - args = parser.parse_args() - - # Charger la configuration - try: - with open(args.config, "r", encoding="utf-8") as f: - config = json.load(f) - - if args.verbose: - print(f"Configuration chargée depuis {args.config}") - except Exception as e: - print(f"Erreur lors du chargement de la configuration: {e}") + + if len(sys.argv) < 2: + print("Usage: python retrieve_ticket.py ") sys.exit(1) - - # Extraire les informations de connexion - odoo_config = config.get("odoo", {}) - url = odoo_config.get("url") - db = odoo_config.get("db") - username = odoo_config.get("username") - api_key = odoo_config.get("api_key") - - if not all([url, db, username, api_key]): - print("Informations de connexion Odoo manquantes dans le fichier de configuration") - sys.exit(1) - - # Définir le répertoire de sortie - output_dir = args.output_dir or os.path.join(config.get("output_dir", "output"), f"ticket_{args.ticket_code}") - - # Créer et connecter le gestionnaire de tickets - ticket_manager = TicketManager(url, db, username, api_key) - - # Personnaliser le nettoyage des messages HTML si demandé - if args.keep_html: - # Remplacer la méthode de nettoyage par une qui ne fait rien - ticket_manager._clean_messages = lambda messages: [ - {**msg, "body_original": msg["body"] if isinstance(msg.get("body"), str) else msg.get("body")} - for msg in messages - ] - elif args.no_original: - # Modifier la méthode pour ne pas conserver le corps original - original_clean_method = ticket_manager._clean_messages - ticket_manager._clean_messages = lambda messages: [ - {k: v for k, v in msg.items() if k != "body_original"} - for msg in original_clean_method(messages) - ] - - if not ticket_manager.login(): - print("Échec de la connexion à Odoo") - sys.exit(1) - - # Récupérer le ticket - if args.verbose: - print(f"Recherche du ticket {args.ticket_code}...") - - ticket = ticket_manager.get_ticket_by_code(args.ticket_code) - - if not ticket: - print(f"Ticket {args.ticket_code} non trouvé") - sys.exit(1) - - if args.verbose: - print(f"Ticket {args.ticket_code} trouvé (ID: {ticket.get('id')})") - print(f"Extraction des données vers {output_dir}...") - - # Extraire et sauvegarder toutes les données - result = ticket_manager.extract_ticket_data(ticket["id"], output_dir) - - if "error" in result: - print(f"Erreur: {result['error']}") - sys.exit(1) - - print(f"Extraction terminée avec succès") - print(f"- Informations du ticket: {result['files']['ticket_info']}") - print(f"- Messages: {result['files']['messages']}") - print(f"- Pièces jointes: {result['files']['attachments_info']}") - print(f"- Dossier des pièces jointes: {result['files']['attachments_dir']}") - - # Afficher un résumé - print(f"\nRésumé du ticket {args.ticket_code}:") - print(f"- Nom: {ticket.get('name', 'N/A')}") - print(f"- Messages: {len(result['messages'])}") - print(f"- Pièces jointes: {len(result['attachments'])}") \ No newline at end of file + + ticket_code = sys.argv[1] + output_dir = f"output/ticket_{ticket_code}" + + config = { + "url": "https://odoo.example.com", + "db": "your_db_name", + "username": "your_username", + "api_key": "your_api_key" + } + + manager = TicketManager(config["url"], config["db"], config["username"], config["api_key"]) + if manager.login(): + ticket = manager.get_ticket_by_code(ticket_code) + if ticket: + result = manager.extract_ticket_data(ticket["id"], output_dir) + print(f"Extraction terminée. Données disponibles dans {output_dir}") + else: + print(f"Ticket avec code {ticket_code} non trouvé.")