From 5bd350aece8e691f1f760811ff4e253b04924992 Mon Sep 17 00:00:00 2001 From: Ambulance Clerc Date: Mon, 2 May 2022 14:40:10 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20export=20pdf=20des=20heures=20suppl?= =?UTF-8?q?=C3=A9metnaires?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Reskreen/settings.py | 2 + collabs/admin.py | 2 +- collabs/list_pdf_export.py | 15 +++++ collabs/migrations_dev/__init__.py | 0 collabs/models.py | 20 ++++--- collabs/templates/pdf_template.html | 58 +++++++++++++++++++ collabs/templatetags/replace_collabs.py | 7 +++ collabs/urls.py | 4 +- collabs/views.py | 9 +++ requirements.txt | 27 +++++++++ .../collabs/Collabs_hour/change_list.html | 6 +- templates/admin/collabs/pdf_template.html | 54 +++++++++++++++++ 12 files changed, 193 insertions(+), 11 deletions(-) create mode 100644 collabs/list_pdf_export.py delete mode 100644 collabs/migrations_dev/__init__.py create mode 100644 collabs/templates/pdf_template.html create mode 100644 collabs/templatetags/replace_collabs.py create mode 100644 templates/admin/collabs/pdf_template.html diff --git a/Reskreen/settings.py b/Reskreen/settings.py index e26e9c3..7cb31af 100644 --- a/Reskreen/settings.py +++ b/Reskreen/settings.py @@ -133,6 +133,8 @@ USE_I18N = True USE_TZ = False +DATE_FORMAT = "d.m.Y" +USE_L10N = False # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/4.0/howto/static-files/ diff --git a/collabs/admin.py b/collabs/admin.py index 0418c25..8925c95 100644 --- a/collabs/admin.py +++ b/collabs/admin.py @@ -2,6 +2,7 @@ from django.contrib import admin from rangefilter.filters import DateRangeFilter from django.contrib.auth.models import User from django.db.models import Q +from django.shortcuts import render from collabs.models import * @@ -37,7 +38,6 @@ class Collabs_hour_Admin(admin.ModelAdmin): list_editable = ['bNoticed'] list_filter = [('dtDate', DateRangeFilter), ('user', admin.RelatedOnlyFieldListFilter),'sBases','type'] - search_fields = ['userName'] readonly_fields = ["userName"] diff --git a/collabs/list_pdf_export.py b/collabs/list_pdf_export.py new file mode 100644 index 0000000..fba4a89 --- /dev/null +++ b/collabs/list_pdf_export.py @@ -0,0 +1,15 @@ +from django.http import HttpResponse +from django.template.loader import get_template +from xhtml2pdf import pisa + + +def render_to_pdf(template_src, context_dict={}): + template = get_template(template_src) + html = template.render(context_dict) + response = HttpResponse(content_type='application/pdf') + pdf_status = pisa.CreatePDF(html, dest=response) + + if pdf_status.err: + return HttpResponse('Some errors were encountered
' + html + '
') + + return response \ No newline at end of file diff --git a/collabs/migrations_dev/__init__.py b/collabs/migrations_dev/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/collabs/models.py b/collabs/models.py index 3b45fda..779cb14 100644 --- a/collabs/models.py +++ b/collabs/models.py @@ -10,6 +10,11 @@ from django.contrib import admin #test +BASES_CHOICES = [ + ('1', 'Monthey'), + ('2', 'Uvrier'), + ] + class Collabs_hour_types(models.Model): @@ -27,10 +32,7 @@ class Collabs_hour_types(models.Model): class Collabs_hour(models.Model): - BASES_CHOICES = [ - ('1', 'Monthey'), - ('2', 'Uvrier'), - ] + userName = models.CharField("Auteur", max_length=100) user = models.ForeignKey(settings.AUTH_USER_MODEL, limit_choices_to={'groups__name': "Intervenants"}, verbose_name="Collaborateur", on_delete=models.DO_NOTHING) @@ -50,18 +52,17 @@ class Collabs_hour(models.Model): def get_total_hour_by_user(self): #objs = Collabs_hour.objects.filter(user_id=self.user_id,dtCreated__year=self.dtCreated.year, dtCreated__month=self.dtCreated.month) objs = Collabs_hour.objects.filter(user_id=self.user_id, dtDate__year=self.dtDate.year , dtDate__month=self.dtDate.month) - print(f"user {self.user} dtCreated__year {self.dtDate.year} dtCreated__month {self.dtDate.month}") + # print(f"user {self.user} dtCreated__year {self.dtDate.year} dtCreated__month {self.dtDate.month}") #print( Collabs_hour.objects.all()) total = 0.0 for object in objs: total += object.nHour + object.nMinutes/60 - print(f"hour = {object.nHour} minutes = {object.nMinutes} = {object.nMinutes/60}") + # print(f"hour = {object.nHour} minutes = {object.nMinutes} = {object.nMinutes/60}") + - print(total) - print(objs) if total > 0.0: hours = int(total) minutes = (total*60) % 60 @@ -74,6 +75,9 @@ class Collabs_hour(models.Model): return ret_string + def get_bases_name(self): + return BASES_CHOICES[int(self.sBases)-1][1] + @admin.display(description='Présence de remarques', boolean=True) def has_remarques(self): ret = False diff --git a/collabs/templates/pdf_template.html b/collabs/templates/pdf_template.html new file mode 100644 index 0000000..9a6bd77 --- /dev/null +++ b/collabs/templates/pdf_template.html @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + {%for data in record%} + + + + + + + + + + {%endfor%} +
DateHeuresMinutesCollaborateurTypesTotal du mois
{{forloop.counter}} {{data.dtDate}} {{data.nHour}} {{data.nMinutes}} {{data.user}} ({{data.get_bases_name}}) {{data.type}} {{data.get_total_hour_by_user}}
+ + \ No newline at end of file diff --git a/collabs/templatetags/replace_collabs.py b/collabs/templatetags/replace_collabs.py new file mode 100644 index 0000000..9ae0856 --- /dev/null +++ b/collabs/templatetags/replace_collabs.py @@ -0,0 +1,7 @@ +from django import template + +register = template.Library() + +@register.filter +def replace_collabs(value): + return value.replace("/admin/collabs/collabs_hour/","") \ No newline at end of file diff --git a/collabs/urls.py b/collabs/urls.py index eeb7809..41e5830 100644 --- a/collabs/urls.py +++ b/collabs/urls.py @@ -1,11 +1,13 @@ from django.urls import path + from . import views app_name = "collabs" urlpatterns = [ - path('export//', views.ExportView.as_view(), name='detail'), + #path('export//', views.ExportView.as_view(), name='detail'), + path('print_pdf', views.ExportPdfView, name='print_pdf'), ] diff --git a/collabs/views.py b/collabs/views.py index fa7dbfe..30a8d34 100644 --- a/collabs/views.py +++ b/collabs/views.py @@ -7,10 +7,19 @@ from django.urls import reverse from django.views import generic from collabs.models import * +from collabs.list_pdf_export import render_to_pdf +from datetime import datetime # Create your views here. +def ExportPdfView(request): + start = request.GET['dtDate__range__gte'] + template_name = "pdf_template.html" + records = Collabs_hour.objects.filter(dtDate__range=[start,request.GET['dtDate__range__lte']]) + return render_to_pdf(template_name,{"record": records}) + + class ExportView(generic.ListView): model = Collabs_hour template_name = 'collabs_hour/detail.html' diff --git a/requirements.txt b/requirements.txt index f664fb5..89906cc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,22 +1,49 @@ +arabic-reshaper==2.1.3 asgiref==3.4.1 +asn1crypto==1.5.1 Brotli==1.0.9 +certifi==2021.10.8 cffi==1.15.0 +charset-normalizer==2.0.12 +click==8.1.3 +colorama==0.4.4 +cryptography==37.0.1 cssselect2==0.4.1 Django==4.0 django-admin-rangefilter==0.8.3 django-baton==2.2.3 django-jazzmin==2.4.8 fonttools==4.29.1 +future==0.18.2 html5lib==1.1 +idna==3.3 +lxml==4.8.0 mysqlclient==2.1.0 +oscrypto==1.3.0 Pillow==9.0.1 pycparser==2.21 pydyf==0.1.2 +pyHanko==0.13.1 +pyhanko-certvalidator==0.19.5 +PyPDF3==1.0.6 pyphen==0.12.0 +python-bidi==0.4.2 +pytz==2022.1 +pytz-deprecation-shim==0.1.0.post0 +PyYAML==6.0 +qrcode==7.3.1 +reportlab==3.6.9 +requests==2.27.1 six==1.16.0 sqlparse==0.4.2 +svglib==1.2.1 tinycss2==1.1.1 +tqdm==4.64.0 tzdata==2021.5 +tzlocal==4.2 +uritools==4.0.0 +urllib3==1.26.9 weasyprint==54.1 webencodings==0.5.1 +xhtml2pdf==0.2.7 zopfli==0.1.9 diff --git a/templates/admin/collabs/Collabs_hour/change_list.html b/templates/admin/collabs/Collabs_hour/change_list.html index 39d3764..5846024 100644 --- a/templates/admin/collabs/Collabs_hour/change_list.html +++ b/templates/admin/collabs/Collabs_hour/change_list.html @@ -44,10 +44,14 @@ {% block object-tools-items %} {% change_list_object_tools %} {% endblock %} + + {% load replace_collabs %}
  • - Export + Export +
  • + {% endblock %} {% if cl.formset and cl.formset.errors %}

    diff --git a/templates/admin/collabs/pdf_template.html b/templates/admin/collabs/pdf_template.html new file mode 100644 index 0000000..5663bda --- /dev/null +++ b/templates/admin/collabs/pdf_template.html @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + {%for data in record%} + + + + + + + + + + {%endfor%} +
    DateHeuresMinutesCollaborateurTypesTotal du mois
    {{forloop.counter}} {{data.date}} {{data.hours}} {{data.minutes}} {{data.user}} ({{data.bases}}) {{data.types}} {{data.total}}
    + + \ No newline at end of file