from rest_framework import generics from .models import GlpiTickets from .serializers import GlpiTicketAESerializer, GlpiTicketBSSerializer, GlpiTicketHSSerializer, GlpiTicketAASerializer, GlpiTicketCOSerializer, GlpiTicketCRSerializer from datetime import datetime, timedelta from bs4 import BeautifulSoup from html import unescape from django.utils.timezone import make_aware def extract_information_bs(content): content = unescape(content) # Unescape HTML entities soup = BeautifulSoup(content, "html.parser") rows = soup.find_all('tr') # Initialize variables to hold the extracted data matricule = None fonction = None structure = None date_sortie = None heure_sortie = None motif = None # Iterate through each row in the table and extract the data for index, row in enumerate(rows): columns = row.find_all('td') if len(columns) == 2: # Ensure there are exactly 2 columns key = columns[0].get_text(strip=True).replace(" :", "").strip() value = columns[1].get_text(strip=True) if key.startswith("Matricule"): matricule = value elif key.startswith("Fonction"): fonction = value elif key.startswith("Structure"): structure = value elif key.startswith("Est autorisé (e) de sortir le"): date_sortie = value elif key.startswith("A"): heure_sortie = value elif key.startswith("Pour affaire Personnelle"): motif = value return matricule, fonction, structure, date_sortie, heure_sortie, motif def extract_information_aa(content): soup = BeautifulSoup(content, "html.parser") def extract_field(field_name): field = soup.find(string=lambda text: field_name in text) if field: parts = field.split(':', 1) if len(parts) > 1: return parts[1].strip() return None matricule = extract_field("Matricule") fonction = extract_field("Fonction") structure = extract_field("Structure") date_absence = extract_field("la journée du") commentaire = extract_field("Commentaire") return matricule, fonction, structure, date_absence, commentaire def extract_information_hs(content): soup = BeautifulSoup(content, "html.parser") def extract_field(field_name): field = soup.find(string=lambda text: field_name in text) if field: parts = field.split(':', 1) if len(parts) > 1: return parts[1].strip() return None matricule = extract_field("matricule") fonction = extract_field("fonction") structure = extract_field("structure") date_requisition = extract_field("Date de réquisition") motif_requisition = extract_field("motif de la réquisition") heure_debut = extract_field("Heure de début") heure_fin = extract_field("Heure de fin") lieu_travail = extract_field("Lieu de travail") return matricule, fonction, structure, date_requisition, motif_requisition, heure_debut, heure_fin, lieu_travail def extract_information_ae(content): content = unescape(content) # Unescape HTML entities soup = BeautifulSoup(content, "html.parser") # Extract the text and split by line breaks (
) text_lines = soup.get_text(separator="\n").splitlines() # Initialize variables to hold the extracted data matricule = None fonction = None structure = None date_reprise = None commentaire = None # Iterate through each line and extract the data for line in text_lines: line = line.strip() if line.startswith("Matricule"): matricule = line.replace("Matricule :", "").strip() elif line.startswith("Fonction"): fonction = line.replace("Fonction :", "").strip() elif line.startswith("Structure"): structure = line.replace("Structure :", "").strip() elif line.startswith("Est autorisé (e) de reprendre à :"): date_reprise = line.replace("Est autorisé (e) de reprendre à :", "").strip() elif line.startswith("Commentaire :"): commentaire = line.replace("Commentaire :", "").strip() return matricule, fonction, structure, date_reprise, commentaire def extract_information_cr(content): content = unescape(content) # Unescape HTML entities soup = BeautifulSoup(content, "html.parser") # Extract the text and split by line breaks (
) text_lines = soup.get_text(separator="\n").splitlines() # Initialize variables to hold the extracted data matricule = None fonction = None structure = None de = None a = None commentaire = None # Iterate through each line and extract the data for line in text_lines: line = line.strip() if line.startswith("matricule"): matricule = line.replace("matricule :", "").strip() elif line.startswith("Fonction"): fonction = line.replace("Fonction :", "").strip() elif line.startswith("Structure"): structure = line.replace("Structure :", "").strip() elif line.startswith("De"): de = line.replace("De :", "").strip() elif line.startswith("A :"): a = line.replace("A :", "").strip() elif line.startswith("commentaire"): commentaire = line.replace("commentaire :", "").strip() return matricule, fonction, structure, de, a, commentaire class AEListView(generics.ListAPIView): serializer_class = GlpiTicketAESerializer def get_queryset(self): # Define the cutoff date (use make_aware if the field is timezone-aware) cutoff_date = make_aware(datetime(2024, 8, 24)) #cutoff_date = make_aware(datetime.now() - timedelta(days=3)) # Get the base queryset and filter with correct syntax for date_creation queryset = GlpiTickets.objects.filter(itilcategories_id=16, date_creation__gte=cutoff_date).order_by('id') return queryset class BSListView(generics.ListAPIView): serializer_class = GlpiTicketBSSerializer def get_queryset(self): # Define the cutoff date (use make_aware if the field is timezone-aware) cutoff_date = make_aware(datetime(2024, 8, 24)) #cutoff_date = make_aware(datetime.now() - timedelta(days=3)) # Get the base queryset and filter with correct syntax for date_creation queryset = GlpiTickets.objects.filter(itilcategories_id=12, date_creation__gte=cutoff_date).order_by('id') return queryset class HSListView(generics.ListAPIView): serializer_class = GlpiTicketHSSerializer def get_queryset(self): # Define the cutoff date (use make_aware if the field is timezone-aware) cutoff_date = make_aware(datetime(2024, 8, 24)) #cutoff_date = make_aware(datetime.now() - timedelta(days=3)) # Get the base queryset and filter with correct syntax for date_creation queryset = GlpiTickets.objects.filter(itilcategories_id=36, date_creation__gte=cutoff_date).order_by('id') return queryset class AAListView(generics.ListAPIView): serializer_class = GlpiTicketAASerializer def get_queryset(self): # Define the cutoff date (use make_aware if the field is timezone-aware) cutoff_date = make_aware(datetime(2024, 8, 24)) #cutoff_date = make_aware(datetime.now() - timedelta(days=3)) # Get the base queryset and filter with correct syntax for date_creation queryset = GlpiTickets.objects.filter(itilcategories_id=15, date_creation__gte=cutoff_date).order_by('id') return queryset class CRListView(generics.ListAPIView): serializer_class = GlpiTicketCRSerializer def get_queryset(self): # Define the cutoff date (use make_aware if the field is timezone-aware) cutoff_date = make_aware(datetime(2024, 8, 24)) #cutoff_date = make_aware(datetime.now() - timedelta(days=3)) # Get the base queryset and filter with correct syntax for date_creation queryset = GlpiTickets.objects.filter(itilcategories_id=38, date_creation__gte=cutoff_date).order_by('id') return queryset class COListView(generics.ListAPIView): queryset = GlpiTickets.objects.filter(itilcategories_id=14, validations__status=3).order_by('-id') serializer_class = GlpiTicketCOSerializer