From 708c1a5bc5444079384b3c81516362512e13db81 Mon Sep 17 00:00:00 2001 From: Ambulance Clerc Date: Thu, 22 Sep 2022 18:33:57 +0200 Subject: [PATCH] ajout de system impression team_pdf --- mycaldav/export_team_pdf.py | 112 +++++++++++++++++++++ mycaldav/models.py | 64 ++++++++---- mycaldav/settings.py | 8 ++ mycaldav/templates/team/logo_clerc_200.png | Bin 0 -> 17270 bytes mycaldav/templates/team/team_pdf.html | 30 ++++++ mycaldav/templates/team/team_view.html | 32 ++++++ mycaldav/urls.py | 3 +- mycaldav/views.py | 37 +++++-- requirements.txt | 1 + 9 files changed, 259 insertions(+), 28 deletions(-) create mode 100644 mycaldav/export_team_pdf.py create mode 100644 mycaldav/settings.py create mode 100644 mycaldav/templates/team/logo_clerc_200.png create mode 100644 mycaldav/templates/team/team_pdf.html create mode 100644 mycaldav/templates/team/team_view.html diff --git a/mycaldav/export_team_pdf.py b/mycaldav/export_team_pdf.py new file mode 100644 index 0000000..881577c --- /dev/null +++ b/mycaldav/export_team_pdf.py @@ -0,0 +1,112 @@ +from fpdf import FPDF + +import caldav as cal +from datetime import datetime, timedelta, time, date + +# Create your views here. + +from mycaldav.models import * +from mycaldav.settings import * + +RED = (220, 50, 50) +BLACK = (0, 0, 0) + + + + +class PDF(FPDF): + o_caldav = None + start = None + end = None + def init_date(self,date): + self.today = date.date() # dt = datetime.strptime(day, '%d/%m/%Y') + self.start = self.today - timedelta(days=self.today.weekday()) + self.end = self.start + timedelta(days=6) + + def lines(self): + self.rect(5.0, 5.0, 200.0,287.0) + self.rect(8.0, 8.0, 194.0,282.0) + + def header(self): + self.set_xy(0, 10) + #self.image('logo_clerc_200.png', 10, 6, 200) + self.set_font('Arial', 'B', 8) + self.set_text_color(*BLACK) + self.cell(w=0, align='R', txt="Ambulance Clerc SA", border=0) + self.set_xy(0, 10) + self.set_font('Arial', 'B', 16) + self.set_text_color(*RED) + self.cell(w=0,h=5, align='C', txt="Planning hebdomadaire", border=0, ln=1) + self.set_font('Arial', 'B', 12) + self.set_text_color(*BLACK) + self.cell(w=0,h=5, align='C', txt=f"du {self.start.strftime('%d.%m.%Y')} au {self.end.strftime('%d.%m.%Y')}", border=0) + self.ln() + tmp_x = self.get_x() + tmp_y = self.get_y() + self.line(tmp_x,tmp_y,tmp_x + 210,tmp_y) + def draw_week(self): + self.set_font('Arial', '', 10) + + + self.ln() + days_fr = ["Lundi","Mardi","Mercredi","Jeudi", "Vendredi", "Samedi", "Dimanche"] + for d in range(7): + tmp_x = self.get_x() + tmp_y = self.get_y() + max_y = tmp_y + dt = self.start + timedelta(days=d) + self.o_caldav.get_caldav_data(periode=1, date=dt) + self.o_caldav.sort_array_by_key(reverse=True) + self.cell(w=50, h=5, align="L", txt=f"{days_fr[d]} {dt.strftime('%d.%m.%Y')}", ln=0) + self.cell(w=60, h=5, align="L", txt=f"Jour", ln=1, border="B") + for item in self.o_caldav.day: + self.set_fill_color(255,143,0) + if item.team_transfert: + item.key += " Transfert" + self.cell(w=50, h=5, align="R", txt=f"{item.key}", ln=0, fill=item.team_transfert) + self.set_fill_color(255, 241, 118) + self.cell(w=30, h=5, align="L", txt=f"{item.team_1}", ln=0, fill=item.team_1_chef) + self.cell(w=30, h=5, align="L", txt=f"{item.team_2}", ln=0, fill=item.team_2_chef) + self.ln() + max_y = self.get_y() + self.set_xy(tmp_x, tmp_y) + self.cell(w=115, h=5, align="L", txt=f"", ln=0) + self.cell(w=75, h=5, align="L", txt=f"Nuit", ln=1, border="B") + for item in self.o_caldav.night: + print(f"If NUIT [{item.str_start_date}]<> [{dt.strftime('%d.%m')}]") + if item.str_start_date != dt.strftime('%d.%m'): + print("pass") + continue + + self.set_fill_color(255,143,0) + if item.team_transfert: + item.key += " Transfert" + self.cell(w=115, h=5, align="L", txt=f"", ln=0) + self.cell(w=15, h=5, align="R", txt=f"{item.key}", ln=0, fill=item.team_transfert) + self.set_fill_color(255, 241, 118) + self.cell(w=30, h=5, align="L", txt=f"{item.team_1}", ln=0, fill=item.team_1_chef) + self.cell(w=30, h=5, align="L", txt=f"{item.team_2}", ln=0, fill=item.team_2_chef) + self.ln() + tmp_y = self.get_y() + if tmp_y > max_y: + max_y = tmp_y + self.set_xy(tmp_x,max_y) + self.ln() + + + + + + + +def render_pdf(caldav_object, date=None): + pdf = PDF(orientation='P', unit='mm', format='A4') + pdf.o_caldav = caldav_object + pdf.init_date(date) + pdf.set_margins(4,2,4) + pdf.add_page() + pdf.set_font('Arial', 'B', 12) + pdf.draw_week() + + + return pdf.output('test.pdf', 'F') \ No newline at end of file diff --git a/mycaldav/models.py b/mycaldav/models.py index cdf39cd..4b5e3e5 100644 --- a/mycaldav/models.py +++ b/mycaldav/models.py @@ -13,6 +13,7 @@ import ssl from icalendar import Calendar, Event import recurring_ical_events import caldav +from mycaldav.settings import * # Create your models here. class cls_caldav(): @@ -35,7 +36,13 @@ class cls_caldav(): def sort_array(self): self.items.sort(key=lambda x: x.dtstamp, reverse=False) - def get_caldav_data(self,periode=1,calendar=None): + def sort_array_by_key(self,reverse=False): + self.items.sort(key=lambda x: x.key, reverse=reverse) + self.day.sort(key=lambda x: x.key, reverse=reverse) + self.night.sort(key=lambda x: x.key, reverse=reverse) + + + def get_caldav_data(self,periode=1,calendar=None, date=None): ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE @@ -46,15 +53,24 @@ class cls_caldav(): self.data = o_url.read() o_url.close() - now = f"{datetime.now().day}.{datetime.now().month}.{datetime.now().year}" - tomorow = datetime.now() + timedelta(days=1) - today = (datetime.now().year,datetime.now().month,datetime.now().day) + if date is None: + date = datetime.now() + + today = (date.year,date.month,date.day) + events = None if periode == 1: events = recurring_ical_events.of(Calendar.from_ical(self.data)).at(today) elif periode == 2: + tomorow = date + timedelta(days=1) events = recurring_ical_events.of(Calendar.from_ical(self.data)).between(today,tomorow) + elif periode == 7: + endweek = date + timedelta(days=6) + events = recurring_ical_events.of(Calendar.from_ical(self.data)).between(today,endweek) + + self.parse_data(events) + def parse_data(self, events): for event in events: item = _caldav_item() @@ -63,7 +79,20 @@ class cls_caldav(): if "-" in item.name: arr = item.name.split("-") item.key = arr[0] + if "$" in item.key: + item.team_transfert = True + item.key = item.key.replace("$","") item.name = arr[1] + if "&" in item.name: + arr = item.name.split("&") + item.team_1 = arr[0] + if "#" in item.team_1: + item.team_1_chef = True + item.team_1 = item.team_1.replace("#","") + item.team_2 = arr[1] + if "#" in item.team_2: + item.team_2_chef = True + item.team_2 = item.team_2.replace("#", "") if "DESCRIPTION" in event.keys(): item.desc = event["DESCRIPTION"] @@ -90,9 +119,9 @@ class cls_caldav(): start = datetime.combine(start, datetime.min.time()) print("convert Date to datetime") print(start) - if start < datetime.combine(datetime.today(), time(19,0)): + if int(start.strftime("%H")) < 19: self.day.append(item) - if start >= datetime.combine(datetime.today(), time(19,0)): + if int(start.strftime("%H")) >= 19: self.night.append(item) @@ -107,7 +136,7 @@ class cls_caldav_client(): caldav_user = 'AA01593' #agenda@ambulance-clerc.ch caldav_password = "Agendamc144" - caldav_agenda_config_url = "https://sync.infomaniak.com/calendars/AA01593/29d5c8d0-9b86-4d45-bc2b-13585a2e78f8?export" + caldav_agenda_config_url = caldav_cfg["task_config"] @@ -119,8 +148,9 @@ class cls_caldav_client(): print(f"name: {cal.name}({cal.url})") self.a_task = self.data.calendar(name="Tâche") + self.a_team = self.data.calendar(name="Équipage_test") - + def init_task_management(self): if datetime.today().day == 1 and datetime.today().hour == 1: try: with open(os.path.join("mycaldav", "last_sync_config.bin"), "rb") as file: @@ -133,19 +163,12 @@ class cls_caldav_client(): if array["year"] == datetime.now().year: print("pas de copy, sync déjà fait") else: - self.get_caldav_data(self.a_task) + self.copy_caldav_data(self.a_task) else: - self.get_caldav_data(self.a_task) + self.copy_caldav_data(self.a_task) self.clear_all_events_by_Date(self.a_task) - - - - - - - def add_event_in_calandar(self, calandar): my_event = calandar.save_event( dtstart=datetime(2022, 6, 30, 12), @@ -154,7 +177,7 @@ class cls_caldav_client(): ) - def get_caldav_data(self, calandar=None): + def copy_caldav_data(self, calandar=None): ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE @@ -217,6 +240,11 @@ class _caldav_item(): done = False href = "" uiid = "" + team_1 = "" + team_2 = "" + team_1_chef = False + team_2_chef = False + team_transfert = False def format_str_date(self): self.str_start_date = datetime.strptime(self.dtstart,"%d.%m.%Y %H:%M").strftime("%d.%m") diff --git a/mycaldav/settings.py b/mycaldav/settings.py new file mode 100644 index 0000000..3645758 --- /dev/null +++ b/mycaldav/settings.py @@ -0,0 +1,8 @@ +caldav_cfg = {} #définition du dictionnaire de donnée avec URL des agendas +caldav_cfg["task"] = "https://sync.infomaniak.com/calendars/AA01593/a4835de4-b3cd-46ca-8f48-3dacd3a2b46e?export" +caldav_cfg["task_config"] = "https://sync.infomaniak.com/calendars/AA01593/29d5c8d0-9b86-4d45-bc2b-13585a2e78f8?export" +caldav_cfg["vhc"] = "https://sync.infomaniak.com/calendars/AA01593/4f7b4591-a4c4-4443-9f78-01df068f58b8?export" +caldav_cfg["rh"] = "https://sync.infomaniak.com/calendars/AA01593/c9916d31-c25b-4b0b-8673-81e2164b6f10?export" +caldav_cfg["road"] = "https://sync.infomaniak.com/calendars/AA01593/d608fcce-2f30-42f0-816c-b5524a0672fe?export" +caldav_cfg["raod"] = "https://sync.infomaniak.com/calendars/AA01593/73f3c787-abe1-4cd0-bf2a-c44dbc7015b9?export" +caldav_cfg["team"] = "https://sync.infomaniak.com/calendars/AA01593/2d61a30c-16b9-4e4a-aab4-aabcbca6961f?export" diff --git a/mycaldav/templates/team/logo_clerc_200.png b/mycaldav/templates/team/logo_clerc_200.png new file mode 100644 index 0000000000000000000000000000000000000000..990b17a152bd1a8118c9a7ddd76f7fcdd843ce99 GIT binary patch literal 17270 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 U=Q8k{8Bh}co2#G8I;Vst08U+ErvLx| literal 0 HcmV?d00001 diff --git a/mycaldav/templates/team/team_pdf.html b/mycaldav/templates/team/team_pdf.html new file mode 100644 index 0000000..2ae13e4 --- /dev/null +++ b/mycaldav/templates/team/team_pdf.html @@ -0,0 +1,30 @@ +{% if latest_task_list %} + + {% for task in latest_task_list %} + + + + + + {% endfor %} + + + + + {% for task in night_task_list %} + + + + {% endfor %} +
+ {{task.key}} + + {{ task.team_1 }}  + {{ task.team_2 }} +
 
Nuit
{{task.key}} + {{ task.team_1 }}  + {{ task.team_2 }} +
+{% else %} +

Aucune information opérationnelle

+{% endif %} \ No newline at end of file diff --git a/mycaldav/templates/team/team_view.html b/mycaldav/templates/team/team_view.html new file mode 100644 index 0000000..d90f83d --- /dev/null +++ b/mycaldav/templates/team/team_view.html @@ -0,0 +1,32 @@ +{% if latest_task_list %} + + {% for task in latest_task_list %} + + + + + + {% endfor %} + + + + + {% for task in night_task_list %} + {% if task.str_start_date == today %} + + + + {% endif %} + {% endfor %} +
+ {{task.key}} + + {{ task.team_1 }}  + {{ task.team_2 }} +
 
Nuit
{{task.key}} + {{ task.team_1 }}  + {{ task.team_2 }} +
+{% else %} +

Aucune information opérationnelle

+{% endif %} \ No newline at end of file diff --git a/mycaldav/urls.py b/mycaldav/urls.py index 6a72b94..77d2d98 100644 --- a/mycaldav/urls.py +++ b/mycaldav/urls.py @@ -11,7 +11,8 @@ urlpatterns = [ path('rh', views.view_rh_caldav, name='view_rh_caldav'), path('road', views.view_road_caldav, name='view_road_caldav'), path('op', views.view_op_caldav, name='view_op_caldav'), - path('dayly', views.view_dayly_caldav, name='view_dayly_caldav'), + path('team', views.view_team_caldav, name='view_team_caldav'), + path('team_pdf', views.view_team_pdf_caldav, name='view_team_pdf_caldav'), ] diff --git a/mycaldav/views.py b/mycaldav/views.py index 0203ee5..408a453 100644 --- a/mycaldav/views.py +++ b/mycaldav/views.py @@ -1,29 +1,35 @@ from django.http import HttpResponse +from django.http import FileResponse from django.shortcuts import render from django.views import generic from django.template import loader from django.views.decorators.clickjacking import xframe_options_exempt import caldav as cal + from datetime import datetime, timedelta, time # Create your views here. from mycaldav.models import * +from mycaldav.settings import * +from mycaldav.export_team_pdf import * + @xframe_options_exempt def view_task_caldav(request): - o_caldav = cls_caldav(url="https://sync.infomaniak.com/calendars/AA01593/a4835de4-b3cd-46ca-8f48-3dacd3a2b46e?export") + 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 and datetime.today().hour == 1: myClient = cls_caldav_client() + myClient.init_task_management() return HttpResponse(template.render(context,request)) @xframe_options_exempt def view_vhc_caldav(request): - o_caldav = cls_caldav(url="https://sync.infomaniak.com/calendars/AA01593/4f7b4591-a4c4-4443-9f78-01df068f58b8?export") + 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} @@ -31,7 +37,7 @@ def view_vhc_caldav(request): @xframe_options_exempt def view_rh_caldav(request): - o_caldav = cls_caldav(url="https://sync.infomaniak.com/calendars/AA01593/c9916d31-c25b-4b0b-8673-81e2164b6f10?export") + 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} @@ -39,24 +45,37 @@ def view_rh_caldav(request): @xframe_options_exempt def view_road_caldav(request): - o_caldav = cls_caldav(url="https://sync.infomaniak.com/calendars/AA01593/d608fcce-2f30-42f0-816c-b5524a0672fe?export") + 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} return HttpResponse(template.render(context, request)) @xframe_options_exempt def view_op_caldav(request): - o_caldav = cls_caldav(url="https://sync.infomaniak.com/calendars/AA01593/73f3c787-abe1-4cd0-bf2a-c44dbc7015b9?export") + o_caldav = cls_caldav(url=caldav_cfg["op"]) o_caldav.get_caldav_data(periode=1) template = loader.get_template("op/op_view.html") context = {'latest_task_list': o_caldav.items} return HttpResponse(template.render(context, request)) @xframe_options_exempt -def view_dayly_caldav(request): - ret = "" +def view_team_caldav(request): + o_caldav = cls_caldav(url=caldav_cfg["team"]) + o_caldav.get_caldav_data(periode=1) + 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')} + return HttpResponse(template.render(context, request)) + +def view_team_pdf_caldav(request): + o_caldav = cls_caldav(url=caldav_cfg["team"]) + if not "dt" in request.GET.keys(): + start = datetime.today() + else: + start = datetime.strptime(request.GET['dt'], "%d.%m.%Y") + myClient = cls_caldav_client() + #render_pdf(o_caldav, start) + return FileResponse(open('test.pdf', 'rb'), as_attachment=False, content_type='application/pdf') - - return HttpResponse(ret) diff --git a/requirements.txt b/requirements.txt index ba2c237..420119f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,6 +23,7 @@ idna==3.3 lxml==4.8.0 mysqlclient==2.1.0 oscrypto==1.3.0 +pdfkit==1.0.0 Pillow==9.0.1 pycparser==2.21 pydyf==0.1.2