Files
comi-odoo-ticketing/setup.py

126 lines
3.7 KiB
Python

# -*- coding: utf-8 -*-
from setuphelpers import *
import xmlrpc.client
import pickle
import os
from configparser import ConfigParser
import requests
import json
# Configuration
url = 'https://odoo.comitari.fr'
db = 'comitari'
state_file = 'tickets_state.pkl'
api_key = "182534f9e754ce1016e86b86b4b5b47199659a6f"
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {api_key}',
}
# Endpoint URL
endpoint = f'{url}/jsonrpc'
# Payload pour récupérer tous les tickets
payload = {
'jsonrpc': '2.0',
'method': 'call',
'params': {
'model': 'helpdesk.ticket',
'method': 'search_read',
'args': [[], ['id', 'write_date']],
},
'id': 1,
}
def install():
plugin_inifile = makepath(WAPT.private_dir, "rocket.ini")
if not isfile(plugin_inifile):
filecopyto("rocket.ini", WAPT.private_dir)
def audit():
try:
# Récupération de l'état actuel de tous les tickets
response = requests.post(endpoint, json=payload, headers=headers)
response.raise_for_status() # Vérifie si la requête a réussi
response_data = response.json()
# Vérifie si 'result' est présent dans la réponse
if 'result' in response_data:
tickets = response_data['result']
else:
print("Erreur: La clé 'result' n'est pas présente dans la réponse.")
print("Réponse complète:", response_data)
tickets = []
except requests.exceptions.RequestException as e:
print(f"Erreur lors de la requête: {e}")
tickets = []
# Vérification si un état précédent existe
if os.path.exists(state_file):
with open(state_file, 'rb') as f:
previous_tickets_state = pickle.load(f)
else:
previous_tickets_state = {}
# Comparaison et affichage des résultats
tickets_updated = []
for ticket in tickets:
ticket_id = ticket['id']
ticket_write_date = ticket['write_date']
if ticket_id in previous_tickets_state:
if ticket_write_date != previous_tickets_state[ticket_id]:
tickets_updated.auppend(ticket_id)
else:
tickets_updated.append(ticket_id)
if tickets_updated:
message = f"Les tickets suivants ont été mis à jour depuis la dernière vérification : {tickets_updated}"
send_to_rocket(message)
else:
message = "Aucun ticket n'a été mis à jour depuis la dernière vérification."
send_to_rocket(message)
# Sauvegarde de l'état actuel pour la prochaine exécution
current_tickets_state = {ticket['id']: ticket['write_date'] for ticket in tickets}
with open(state_file, 'wb') as f:
pickle.dump(current_tickets_state, f)
return "OK"
def send_to_rocket(message_text, attachments=None):
"""
Envoie un message à Rocket.Chat via un webhook.
:param message_text: Texte du message à envoyer
:param attachments: Liste de pièces jointes (facultatif)
"""
smtp_inifile = makepath(WAPT.private_dir, "rocket.ini")
conf_wapt = ConfigParser()
conf_wapt.read(smtp_inifile)
webhook_url = conf_wapt.get("rocket", "url")
# Construire le message
message = {
'text': message_text
}
if attachments:
message['attachments'] = attachments
# Envoyer la requête POST
response = requests.post(webhook_url, data=json.dumps(message), headers={'Content-Type': 'application/json'})
# Vérifier la réponse
if response.status_code == 200:
print('Message envoyé avec succès.')
else:
print(f'Échec de l\'envoi du message. Statut de la réponse : {response.status_code}')
print(f'Erreur : {response.text}')