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

@@ -1,4 +1,6 @@
from django.http import HttpResponse
import json
from django.http import HttpResponse, JsonResponse
from django.http import FileResponse
from django.shortcuts import render
from django.views import generic
@@ -18,30 +20,92 @@ from mycaldav.settings import *
from mycaldav.export_team_pdf import *
from comm_op.models import comm_opMessage
class caldav_item:
def __init__(self):
self.uuid = ""
self.name = ""
self.desc = ""
self.key = ""
self.done = False
self.href = "#"
self.str_start_date = ""
self.str_end_date = ""
from rest_framework.response import Response
from rest_framework import status
from rest_framework.decorators import api_view
from mycaldav.models import CalDavItemSerializer, _caldav_item
import logging
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):
o_caldav = cls_caldav(url=caldav_cfg["task"])
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:
myClient = cls_caldav_client()
myClient.init_task_management()
return HttpResponse(template.render(context,request))
response = formatResponseArray(o_caldav)
return Response(response["data"], status=response["status"])
@xframe_options_exempt
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)
return view_vhc_caldav(request)
@xframe_options_exempt
@api_view(['GET'])
def view_vhc_caldav(request):
o_caldav = cls_caldav(url=caldav_cfg["vhc"])
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))
o_caldav = cls_caldav(url=caldav_cfg["vhc"])
o_caldav.get_caldav_data(periode=2)
@xframe_options_exempt
response = formatResponseArray(o_caldav)
return Response(response["data"], status=response["status"])
@api_view(['GET'])
def view_rh_caldav(request):
o_caldav = cls_caldav(url=caldav_cfg["rh"])
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):
o_caldav = cls_caldav(url=caldav_cfg["road"])
o_caldav.get_caldav_data(periode=2)
template = loader.get_template("road/road_view.html")
context = {'latest_task_list': o_caldav.items[::-1]}
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_op_caldav(request):
o_items = comm_opMessage.objects.filter(bDone=False, dtStart__lte= datetime.today() + timedelta(days=1))
all_items = []
for item in o_items:
temp_item = caldav_item()
temp_item.uuid = item.uuid
temp_item = _caldav_item()
temp_item.uuid = f"{item.uuid}"
temp_item.name = item.sTitle
temp_item.desc = item.sDesc
temp_item.key = item.sKey
@@ -104,11 +170,20 @@ def view_op_caldav(request):
temp_item.str_end_date = None
all_items.append(temp_item)
template = loader.get_template("op/op_view.html")
context = {'latest_task_list': all_items}
return HttpResponse(template.render(context, request))
try:
serializer = CalDavItemSerializer(data=all_items, many=True)
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):
#Change timezone
myclient = cls_caldav_client()
@@ -122,17 +197,25 @@ def view_team_caldav(request):
template = loader.get_template("team/team_view.html")
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')}
return HttpResponse(template.render(context, request))
response = formatResponseArray(o_caldav)
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):
o_caldav = cls_caldav(url=caldav_cfg["manif"])
o_caldav.get_caldav_data(periode=1)
template = loader.get_template("manif/manif_view.html")
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
def view_team_pdf_caldav(request):