Passage en mode API pour les views caldav

This commit is contained in:
Ambulance Clerc
2023-12-18 17:48:43 +01:00
parent b9c93b53a9
commit 58cb2e6655
2 changed files with 177 additions and 66 deletions

View File

@@ -85,7 +85,7 @@ class cls_caldav():
for event in events: for event in events:
item = _caldav_item() item = _caldav_item()
item.name = event["SUMMARY"] item.name = event["SUMMARY"]
item.uiid = event["UID"] item.uuid = f"{event['UID']}"
if Key_separator in item.name: if Key_separator in item.name:
arr = item.name.split(Key_separator) arr = item.name.split(Key_separator)
item.key = arr[0] item.key = arr[0]
@@ -107,13 +107,15 @@ class cls_caldav():
item.team_2_chef = True item.team_2_chef = True
item.team_2 = item.team_2.replace("#", "") item.team_2 = item.team_2.replace("#", "")
if "DESCRIPTION" in event.keys(): if "DESCRIPTION" in event.keys():
item.desc = event["DESCRIPTION"] item.desc = f"{event['DESCRIPTION']}"
if "#" in item.desc:
item.done = True
if "#Fait" in item.desc: if "#Fait" in item.desc:
item.done = True
item.desc = item.desc.replace("#Fait", "") item.desc = item.desc.replace("#Fait", "")
if '{href=' in item.desc: if '{href=' in item.desc:
temp_str = item.desc.split('{href=')[1] temp_str = item.desc.split('{href=')[1]
temp_str = temp_str.split('}')[0] temp_str = temp_str.split('}')[0]
@@ -395,25 +397,30 @@ class cls_caldav_client():
class _caldav_item(): class _caldav_item():
key = "" def __init__(self, key="", name="", desc="", dtstart=None, str_start_date="",
name = "" str_start_time="", dtend=None, str_end_date="", str_end_time="",
desc = "" dtstamp=None, done=False, href="", uuid="", team_1="",
dtstart = None team_2="", team_1_chef=False, team_2_chef=False,
str_start_date = "" team_transfert=False, team_manif=False):
str_start_time = "" self.key = key
dtend = None self.name = name
str_end_date = "" self.desc = desc
str_end_time = "" self.dtstart = dtstart
dtstamp = None self.str_start_date = str_start_date
done = False self.str_start_time = str_start_time
href = "" self.dtend = dtend
uiid = "" self.str_end_date = str_end_date
team_1 = "" self.str_end_time = str_end_time
team_2 = "" self.dtstamp = dtstamp
team_1_chef = False self.done = done
team_2_chef = False self.href = href
team_transfert = False self.uuid = uuid
team_manif = False self.team_1 = team_1
self.team_2 = team_2
self.team_1_chef = team_1_chef
self.team_2_chef = team_2_chef
self.team_transfert = team_transfert
self.team_manif = team_manif
def format_str_date(self): def format_str_date(self):
self.str_start_date = datetime.strptime(self.dtstart,"%d.%m.%Y %H:%M").strftime("%d.%m") self.str_start_date = datetime.strptime(self.dtstart,"%d.%m.%Y %H:%M").strftime("%d.%m")
@@ -424,3 +431,24 @@ class _caldav_item():
from rest_framework import serializers
class CalDavItemSerializer(serializers.Serializer):
key = serializers.CharField()
name = serializers.CharField()
desc = serializers.CharField(allow_blank=True)
dtstart = serializers.CharField()
str_start_date = serializers.CharField()
str_start_time = serializers.CharField()
dtend = serializers.CharField()
str_end_date = serializers.CharField()
str_end_time = serializers.CharField()
done = serializers.BooleanField()
href = serializers.CharField(allow_blank=True)
uuid = serializers.CharField()
team_1 = serializers.CharField(allow_blank=True)
team_2 = serializers.CharField(allow_blank=True)
team_1_chef = serializers.BooleanField()
team_2_chef = serializers.BooleanField()
team_transfert = serializers.BooleanField()
team_manif = serializers.BooleanField()

View File

@@ -1,4 +1,6 @@
from django.http import HttpResponse import json
from django.http import HttpResponse, JsonResponse
from django.http import FileResponse from django.http import FileResponse
from django.shortcuts import render from django.shortcuts import render
from django.views import generic from django.views import generic
@@ -18,30 +20,92 @@ from mycaldav.settings import *
from mycaldav.export_team_pdf import * from mycaldav.export_team_pdf import *
from comm_op.models import comm_opMessage from comm_op.models import comm_opMessage
class caldav_item:
def __init__(self): from rest_framework.response import Response
self.uuid = "" from rest_framework import status
self.name = "" from rest_framework.decorators import api_view
self.desc = ""
self.key = "" from mycaldav.models import CalDavItemSerializer, _caldav_item
self.done = False
self.href = "#" import logging
self.str_start_date = ""
self.str_end_date = "" logger = logging.getLogger(__name__)
def to_json(caldav_items):
items_as_dicts = [
{
'key': item.key,
'name': item.name,
'desc': item.desc,
'str_start_date': item.str_start_date,
'str_start_time': item.str_start_time,
'str_end_date': item.str_end_date,
'str_end_time': item.str_end_time,
'done': item.done,
'href': item.href,
'uuid': item.uuid,
'team_1': item.team_1,
'team_2': item.team_2,
'team_1_chef': item.team_1_chef,
'team_2_chef': item.team_2_chef,
'team_transfert': item.team_transfert,
'team_manif': item.team_manif,
}
for item in caldav_items
]
return items_as_dicts
def serialize_item(caldav_items):
json_data = to_json(caldav_items)
return json.dumps(json_data)
@xframe_options_exempt def formatResponseArray(o_caldav, inverted=False):
print(o_caldav.items)
try:
if inverted:
o_caldav.items.reverse()
o_caldav.day.reverse()
o_caldav.night.reverse()
# Serialize data
serializer_items = CalDavItemSerializer(data=[item.__dict__ for item in o_caldav.items], many=True)
serializer_day = CalDavItemSerializer(data=[item.__dict__ for item in o_caldav.day], many=True)
serializer_night = CalDavItemSerializer(data=[item.__dict__ for item in o_caldav.night], many=True)
# Check validation and print errors
validate_and_log(serializer_items, "items")
validate_and_log(serializer_day, "day")
validate_and_log(serializer_night, "night")
response_data = {
"items": serializer_items.data,
"day": serializer_day.data,
"night": serializer_night.data,
}
response_status = status.HTTP_200_OK
except Exception as e:
logger.error(f"An error occurred: {e}")
response_data = {"error": "An error occurred while processing the request."}
response_status = status.HTTP_500_INTERNAL_SERVER_ERROR
return {"data":response_data, "status": response_status}
def validate_and_log(serializer, label):
if not serializer.is_valid():
print(f"Validation Error {label}: {serializer.errors}")
@api_view(['GET'])
def view_task_caldav(request): def view_task_caldav(request):
o_caldav = cls_caldav(url=caldav_cfg["task"]) o_caldav = cls_caldav(url=caldav_cfg["task"])
o_caldav.get_caldav_data() o_caldav.get_caldav_data()
template = loader.get_template("task/task.html")
context = {'latest_task_list':o_caldav.day, 'night_task_list': o_caldav.night}
if (datetime.today().day == 1) or 2==1: if (datetime.today().day == 1) or 2==1:
myClient = cls_caldav_client() myClient = cls_caldav_client()
myClient.init_task_management() myClient.init_task_management()
return HttpResponse(template.render(context,request))
response = formatResponseArray(o_caldav)
return Response(response["data"], status=response["status"])
@xframe_options_exempt @xframe_options_exempt
def view_task_edit_caldav(request, uuid): def view_task_edit_caldav(request, uuid):
@@ -64,36 +128,38 @@ def view_vhc_edit_caldav(request, uuid):
myClient.mark_as_done_task(calandar=myClient.a_vhc,uuid=uuid) myClient.mark_as_done_task(calandar=myClient.a_vhc,uuid=uuid)
return view_vhc_caldav(request) return view_vhc_caldav(request)
@xframe_options_exempt @api_view(['GET'])
def view_vhc_caldav(request): def view_vhc_caldav(request):
o_caldav = cls_caldav(url=caldav_cfg["vhc"]) o_caldav = cls_caldav(url=caldav_cfg["vhc"])
o_caldav.get_caldav_data(periode=2) o_caldav.get_caldav_data(periode=2)
template = loader.get_template("vhc/vhc_view.html")
context = {'latest_task_list': o_caldav.items}
return HttpResponse(template.render(context, request))
@xframe_options_exempt response = formatResponseArray(o_caldav)
return Response(response["data"], status=response["status"])
@api_view(['GET'])
def view_rh_caldav(request): def view_rh_caldav(request):
o_caldav = cls_caldav(url=caldav_cfg["rh"]) o_caldav = cls_caldav(url=caldav_cfg["rh"])
o_caldav.get_caldav_data(periode=2) o_caldav.get_caldav_data(periode=2)
template = loader.get_template("rh/rh_view.html")
context = {'latest_task_list': o_caldav.items[::-1], 'today': datetime.today().strftime('%d.%m')}
return HttpResponse(template.render(context, request))
@xframe_options_exempt response = formatResponseArray(o_caldav,inverted=True)
return Response(response["data"], status=response["status"])
@api_view(['GET'])
def view_road_caldav(request): def view_road_caldav(request):
o_caldav = cls_caldav(url=caldav_cfg["road"]) o_caldav = cls_caldav(url=caldav_cfg["road"])
o_caldav.get_caldav_data(periode=2) o_caldav.get_caldav_data(periode=2)
template = loader.get_template("road/road_view.html") response = formatResponseArray(o_caldav, inverted=True)
context = {'latest_task_list': o_caldav.items[::-1]} return Response(response["data"], status=response["status"])
return HttpResponse(template.render(context, request))
@xframe_options_exempt @api_view(['GET'])
def view_op_caldav(request): def view_op_caldav(request):
o_items = comm_opMessage.objects.filter(bDone=False, dtStart__lte= datetime.today() + timedelta(days=1)) o_items = comm_opMessage.objects.filter(bDone=False, dtStart__lte= datetime.today() + timedelta(days=1))
all_items = [] all_items = []
for item in o_items: for item in o_items:
temp_item = caldav_item() temp_item = _caldav_item()
temp_item.uuid = item.uuid temp_item.uuid = f"{item.uuid}"
temp_item.name = item.sTitle temp_item.name = item.sTitle
temp_item.desc = item.sDesc temp_item.desc = item.sDesc
temp_item.key = item.sKey temp_item.key = item.sKey
@@ -104,11 +170,20 @@ def view_op_caldav(request):
temp_item.str_end_date = None temp_item.str_end_date = None
all_items.append(temp_item) all_items.append(temp_item)
template = loader.get_template("op/op_view.html") try:
context = {'latest_task_list': all_items} serializer = CalDavItemSerializer(data=all_items, many=True)
return HttpResponse(template.render(context, request)) if serializer.is_valid():
print("Serialized Data:", serializer.data)
else:
print("Validation Error:", serializer.errors)
@xframe_options_exempt except Exception as e:
logger.error(f"An error occurred: {e}")
return Response({"error": "An error occurred while processing the request."},
status=status.HTTP_500_INTERNAL_SERVER_ERROR)
return Response(serializer.data)
@api_view(['GET'])
def view_team_caldav(request): def view_team_caldav(request):
#Change timezone #Change timezone
myclient = cls_caldav_client() myclient = cls_caldav_client()
@@ -122,17 +197,25 @@ def view_team_caldav(request):
template = loader.get_template("team/team_view.html") template = loader.get_template("team/team_view.html")
o_caldav.sort_array_by_key(True) o_caldav.sort_array_by_key(True)
context = {'latest_task_list': o_caldav.day, 'night_task_list': o_caldav.night, 'today': datetime.today().strftime('%d.%m'),'yesterday': (datetime.today() + timedelta(days=-1)).strftime('%d.%m'),'tomorow': (datetime.today() + timedelta(days=+1)).strftime('%d.%m')} response = formatResponseArray(o_caldav)
return HttpResponse(template.render(context, request)) additional_data = {
'today': datetime.today().strftime('%d.%m'),
'yesterday': (datetime.today() + timedelta(days=-1)).strftime('%d.%m'),
'tomorrow': (datetime.today() + timedelta(days=1)).strftime('%d.%m')
}
response["data"].update(additional_data)
return Response(response["data"], status=response["status"])
@xframe_options_exempt
@api_view(['GET'])
def view_manif_caldav(request): def view_manif_caldav(request):
o_caldav = cls_caldav(url=caldav_cfg["manif"]) o_caldav = cls_caldav(url=caldav_cfg["manif"])
o_caldav.get_caldav_data(periode=1) o_caldav.get_caldav_data(periode=1)
template = loader.get_template("manif/manif_view.html")
o_caldav.sort_array_by_key(True) o_caldav.sort_array_by_key(True)
context = {'latest_task_list': o_caldav.items, 'night_task_list': o_caldav.night, 'today': datetime.today().strftime('%d.%m')}
return HttpResponse(template.render(context, request)) response = formatResponseArray(o_caldav)
return Response(response["data"], status=response["status"])
@xframe_options_exempt @xframe_options_exempt
def view_team_pdf_caldav(request): def view_team_pdf_caldav(request):