Skip to content

Commit

Permalink
Implemented exam report sending
Browse files Browse the repository at this point in the history
  • Loading branch information
vcardoneit committed Nov 14, 2023
1 parent 8f21a5b commit 8a7e1c4
Show file tree
Hide file tree
Showing 7 changed files with 103 additions and 2 deletions.
18 changes: 18 additions & 0 deletions donazioni/migrations/0003_donazioni_referto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.2.5 on 2023-11-14 09:10

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('donazioni', '0002_remove_donazioni_quantitativo'),
]

operations = [
migrations.AddField(
model_name='donazioni',
name='referto',
field=models.FileField(blank=True, null=True, upload_to='referti/'),
),
]
1 change: 1 addition & 0 deletions donazioni/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ class donazioni(models.Model):
donatore = models.ForeignKey(donatori, on_delete=models.CASCADE)
data = models.DateField(null=True)
tipo = models.CharField(max_length=255)
referto = models.FileField(upload_to='referti/', blank=True, null=True)
6 changes: 6 additions & 0 deletions donazioni/templates/donazioni.html
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ <h1 class="modal-title fs-5" id="staticBackdropLabel">Aggiungi donazione</h1>
{% endif %}
<th scope="col" class="text-center">Data</th>
<th scope="col" class="text-center">Tipo</th>
<th scope="col" class="text-center">Referto</th>
</tr>
</thead>
<tbody>
Expand All @@ -99,6 +100,11 @@ <h1 class="modal-title fs-5" id="staticBackdropLabel">Aggiungi donazione</h1>
{% endif %}
<td>{{ donazione.data|date:"d/m/Y" }}</td>
<td>{{ donazione.tipo }}</td>
{% if donazione.referto %}
<td><a href="donazioni/download/{{ donazione.id }}">Scarica</a></td>
{% else %}
<td>Non disponibile</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
Expand Down
6 changes: 5 additions & 1 deletion donazioni/templates/modificaDonazione.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<div class="container p-3" style="background-color: rgba(219, 219, 219, 0.459);">
<h2 align="center">Modifica Donazione</h2>
<h4 align="center">ID Numero {{ donazione.id }}</h4>
<form method="post" action="{% url 'salva_donazione' %}">
<form method="post" action="{% url 'salva_donazione' %}" enctype="multipart/form-data">
{% csrf_token %}
<input type="hidden" id="donazioneMod" name="donazioneMod" value="{{ donazione.id }}">
<div class="mb-3">
Expand All @@ -27,6 +27,10 @@ <h4 align="center">ID Numero {{ donazione.id }}</h4>
<label for="data" class="form-label">Data</label>
<input type="date" class="form-control" name="data" value="{{ donazione.data|date:'Y-m-d' }}" id="data" required>
</div>
<div class="mb-3">
<label for="referto" class="form-label">Referto</label>
<input class="form-control shadow-none" type="file" name="referto" accept="application/pdf">
</div>

<div class="d-grid gap-2 d-md-flex justify-content-md-end">
<button type="submit" class="btn text-white btn-lg" style="background-color: #137935">Salva</button>
Expand Down
18 changes: 18 additions & 0 deletions donazioni/templates/referto.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{% autoescape off %}
Gentile {{ donazione.donatore.nome }} {{ donazione.donatore.cognome }},
<br><br>
Ti informiamo che il referto dell'esame relativo alla donazione effettuata il {{ donazione.data|date:"d/m/Y" }} è ora disponibile per essere scaricato nella tua area riservata!
<br>Accedi con le tue credenziali e visita lo storico delle donazioni per scaricare il referto!
<br><br>
<a href="https://jupiter.criavola.it/">Accedi alla tua area riservata</a>
<br><br>
<b>Attenzione! Il file verrà cancellato automaticamente dopo 28 giorni.</b>
<br><br>
Per qualsiasi dubbio e per prenotare la tua prossima donazione visita la nostra pagina web dedicata alla donazione del sangue! <a href="https://criavola.it/donazione-sangue">Donazione Sangue</a>
<br><br>
<b>Informativa sulla Privacy - come previsto ai sensi dell’art. 13 del Regolamento UE 679/2016.</b>
<br>
Si precisa che le informazioni contenute in questo messaggio sono riservate e ad uso esclusivo del destinatario.
Qualora questo messaggio Le fosse pervenuto per errore, La preghiamo di eliminarlo senza copiarlo e di non inoltrarlo a terzi, dandocene gentilmente comunicazione.
Grazie per la collaborazione.
{% endautoescape %}
1 change: 1 addition & 0 deletions donazioni/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
path('donazioni/storico/', views.storico, name="storico_donazioni"),
path('donazioni/modifica/', views.modifica, name="modifica_donazione"),
path('donazioni/aggiungi/', views.aggiungi, name="aggiungi_donazione"),
path('donazioni/download/<int:dId>/', views.download, name="download_esame"),
]
55 changes: 54 additions & 1 deletion donazioni/views.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
import csv
import os
from django.shortcuts import redirect, render
from django.http import HttpResponse
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from donatori.models import donatori as mDonatori
from django.shortcuts import get_object_or_404
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils.html import strip_tags
from datetime import datetime
from .models import donazioni as mDonazioni


Expand All @@ -13,8 +20,26 @@ def salva(request):
donazioneMod = request.POST.get('donazioneMod')
lDonazioni = mDonazioni.objects.get(id=donazioneMod)
lDonazioni.donatore = mDonatori.objects.get(pk=request.POST.get('tessera'))
lDonazioni.data = request.POST.get('data')
lDonazioni.data = datetime.strptime(request.POST.get('data'), '%Y-%m-%d')
lDonazioni.tipo = request.POST.get('tipodonazione')

if 'referto' in request.FILES:
referto = request.FILES["referto"]
lDonazioni.referto = InMemoryUploadedFile(referto, None, "Referto " + lDonazioni.donatore.nome + " " + lDonazioni.donatore.cognome + " " + request.POST.get('data') + ".pdf", referto.file, referto.size, referto.charset)

html_message = render_to_string("referto.html", {'donazione': lDonazioni})
plain_message = strip_tags(html_message)

message = EmailMultiAlternatives(
subject="Referto dell'esame relativo alla donazione ora disponibile!",
body=plain_message,
from_email=os.getenv("DEFAULT_FROM_EMAIL"),
to=[lDonazioni.donatore.email]
)

message.attach_alternative(html_message, "text/html")
message.send()

lDonazioni.save()
messages.success(request, "Scheda donazione salvata con successo!")
return redirect('donazioni')
Expand Down Expand Up @@ -96,3 +121,31 @@ def esporta(request):
return response
else:
return ("/")


@login_required
def download(request, dId):
if request.user.is_staff:
donazione = get_object_or_404(mDonazioni, id=dId)
donatore = get_object_or_404(mDonatori, tessera=donazione.donatore.tessera)
try:
response = HttpResponse(donazione.referto.file, content_type='application/octet-stream')
response['Content-Disposition'] = 'attachment; filename={}'.format("Referto " + donatore.nome + " " + donatore.cognome + " " + donazione.data.strftime("%d-%m-%Y") + ".pdf")
return response
except Exception:
messages.warning(request, "File non trovato, potrebbe essere scaduto o non disponibile.")
return redirect("donazioni")
else:
donatore = get_object_or_404(mDonatori, email=request.user.email)
donazione = get_object_or_404(mDonazioni, id=dId)
if (donazione.donatore.tessera & donatore.tessera):
try:
response = HttpResponse(donazione.referto.file, content_type='application/octet-stream')
response['Content-Disposition'] = 'attachment; filename={}'.format("Referto " + donatore.nome + " " + donatore.cognome + " " + donazione.data.strftime("%d-%m-%Y") + ".pdf")
return response
except Exception:
messages.warning(request, "File non trovato, potrebbe essere scaduto o non disponibile.")
return redirect("donazioni")
else:
messages.warning(request, "Non hai il permesso per accedere a questo file!")
return redirect("donazioni")

0 comments on commit 8a7e1c4

Please sign in to comment.