Skip to content

Commit

Permalink
Implemented: Authorization management
Browse files Browse the repository at this point in the history
  • Loading branch information
vcardoneit committed Nov 15, 2023
1 parent 8a7e1c4 commit bd3720e
Show file tree
Hide file tree
Showing 12 changed files with 210 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 4.2.5 on 2023-11-14 16:42

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('donatori', '0009_donatori_privacy_a_donatori_privacy_b_and_more'),
]

operations = [
migrations.AddField(
model_name='donatori',
name='autorizzazione',
field=models.ImageField(null=True, upload_to='autorizzazioni/'),
),
migrations.AddField(
model_name='donatori',
name='modReferti',
field=models.CharField(default='', max_length=255),
),
]
2 changes: 2 additions & 0 deletions donatori/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ class donatori(models.Model):
privacy_a = models.BooleanField(default=False)
privacy_b = models.BooleanField(default=False)
privacy_c = models.BooleanField(default=False)
modReferti = models.CharField(max_length=255, default='')
autorizzazione = models.ImageField(upload_to='autorizzazioni/', blank=True, null=True)

def save(self, *args, **kwargs):
if not self.qrverify:
Expand Down
15 changes: 15 additions & 0 deletions donatori/templates/donatori.html
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,13 @@ <h1 class="modal-title fs-5" id="staticBackdropLabel">Aggiungi Donatore</h1>
<label for="email" class="form-label">Email *</label>
<input type="email" class="form-control shadow-none" name="email" id="email" required>
</div>
<div class="mb-3">
<label for="modref" class="form-label">Modalità invio referti *</label>
<select class="form-control shadow-none" name="modref" id="modref" required>
<option value="Cartacea">Cartacea</option>
<option value="Digitale">Digitale</option>
</select>
</div>
<div class="mb-3 form-check">
<input class="form-check-input shadow-none" type="checkbox" value="True" name="privacy_a" id="privacy_a" required>
<label class="form-check-label" for="privacy_a">Consenso privacy obbligatorio *</label>
Expand Down Expand Up @@ -143,6 +150,8 @@ <h1 class="modal-title fs-5" id="staticBackdropLabel">Aggiungi Donatore</h1>
<th scope="col" class="text-center">Comune</th>
<th scope="col" class="text-center">Telefono</th>
<th scope="col" class="text-center">Email</th>
<th scope="col" class="text-center">Invio referti</th>
<th scope="col" class="text-center">Autorizzazione</th>
</tr>
</thead>
<tbody>
Expand All @@ -160,6 +169,12 @@ <h1 class="modal-title fs-5" id="staticBackdropLabel">Aggiungi Donatore</h1>
<td>{{ donatore.comune }}</td>
<td>{{ donatore.tel }}</td>
<td>{{ donatore.email }}</td>
<td>{{ donatore.modReferti }}</td>
{% if donatore.autorizzazione %}
<td><a href="/autorizzazione/download/{{ donatore.tessera }}">Scarica</a></td>
{% else %}
<td>Non disponibile</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
Expand Down
7 changes: 7 additions & 0 deletions donatori/templates/modifica.html
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,13 @@ <h4 align="center">Tessera numero {{ donatore.tessera }}</h4>
<label for="email" class="form-label">Email *</label>
<input type="email" class="form-control shadow-none" name="email" value="{{ donatore.email }}" id="email" required>
</div>
<div class="mb-3">
<label for="modref" class="form-label">Modalità invio referti *</label>
<select class="form-control shadow-none" name="modref" id="modref" required>
<option value="Cartacea" {% if donatore.modReferti == "Cartacea" %}selected{% endif %}>Cartacea</option>
<option value="Digitale" {% if donatore.modReferti == "Digitale" %}selected{% endif %}>Digitale</option>
</select>
</div>
<div class="mb-3 form-check">
<input class="form-check-input shadow-none" type="checkbox" value="True" name="privacy_a" id="privacy_a" {% if donatore.privacy_a == True %}checked{% endif %} required>
<label class="form-check-label" for="privacy_a">Consenso privacy obbligatorio *</label>
Expand Down
2 changes: 2 additions & 0 deletions donatori/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ def aggiungi(request):
lDonatori.comune = request.POST.get('comune')
lDonatori.tel = request.POST.get('telefono')
lDonatori.email = email
lDonatori.modReferti = request.POST.get('modref')

if 'privacy_a' in request.POST:
lDonatori.privacy_a = request.POST.get('privacy_a')
Expand Down Expand Up @@ -122,6 +123,7 @@ def salva(request):
lDonatori.comune = request.POST.get('comune')
lDonatori.tel = request.POST.get('telefono')
lDonatori.email = request.POST.get('email')
lDonatori.modReferti = request.POST.get('modref')

if 'privacy_a' in request.POST:
lDonatori.privacy_a = request.POST.get('privacy_a')
Expand Down
6 changes: 4 additions & 2 deletions donazioni/templates/donazioni.html
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,9 @@ <h1 class="modal-title fs-5" id="staticBackdropLabel">Aggiungi donazione</h1>
<tr>
{% if request.user.is_staff %}
<th scope="col" class="text-center">ID Donazione</th>
<th scope="col" class="text-center">Tessera Donatore</th>
<th scope="col" class="text-center">Nome</th>
<th scope="col" class="text-center">Cognome</th>
<th scope="col" class="text-center">Tessera Donatore</th>
{% endif %}
<th scope="col" class="text-center">Data</th>
<th scope="col" class="text-center">Tipo</th>
Expand All @@ -94,14 +94,16 @@ <h1 class="modal-title fs-5" id="staticBackdropLabel">Aggiungi donazione</h1>
<tr class="text-center">
{% if request.user.is_staff %}
<td>{{ donazione.id }}</td>
<td>{{ donazione.donatore_id }}</td>
<td>{{ donazione.donatore.nome }}</td>
<td>{{ donazione.donatore.cognome }}</td>
<td>{{ donazione.donatore_id }}</td>
{% 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>
{% elif donazione.donatore.modReferti == "Cartacea" %}
<td>Modalità Cartacea</td>
{% else %}
<td>Non disponibile</td>
{% endif %}
Expand Down
2 changes: 2 additions & 0 deletions donazioni/templates/modificaDonazione.html
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,12 @@ <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>
{% if not donazione.donatore.modReferti == "Cartacea" %}
<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>
{% endif %}

<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
Binary file added main/static/autoreferti.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
57 changes: 57 additions & 0 deletions main/templates/autorizzazione.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
{% extends "base.html" %}

{% block head %}
<title>Autorizzazione | Jupiter</title>
{% endblock head %}

{% block content %}
<div class="container p-3" style="background-color: rgba(219, 219, 219, 0.459);">
<h2 align="center">Autorizzazione</h2>
<p align="center">Compilando il modulo, ci autorizzi a ritirare i referti degli esami effettuati durante la donazione per conto tuo e a inviarteli secondo la modalità da te scelta.</p>
<form method="post" action="{% url 'autorizza' %}" enctype="multipart/form-data">
{% csrf_token %}
<div class="mb-3">
<label for="nomecompleto" class="form-label">Nome completo</label>
<input type="text" class="form-control" name="nomecompleto" id="nomecompleto" value="{{ donatore.nome }} {{ donatore.cognome }}" required>
</div>
<div class="mb-3">
<label for="luogodinascita" class="form-label">Luogo di nascita</label>
<input type="text" class="form-control" name="luogodinascita" id="luogodinascita" required>
</div>
<div class="mb-3">
<label for="datadinascita" class="form-label">Data di nascita</label>
<input type="date" class="form-control" name="datadinascita" id="datadinascita" value="{{ donatore.datadinascita|date:'Y-m-d' }}" required>
</div>
<div class="mb-3">
<label for="luogodiresidenza" class="form-label">Luogo di residenza</label>
<input type="text" class="form-control" name="luogodiresidenza" id="luogodiresidenza" value="{{ donatore.comune }}" required>
</div>
<div class="mb-3">
<label for="indirizzodiresidenza" class="form-label">Indirizzo di residenza</label>
<input type="text" class="form-control" name="indirizzodiresidenza" id="indirizzodiresidenza" value="{{ donatore.indirizzo }}" required>
</div>

<h4 align="center">Documento di riconoscimento</h4>
<div class="mb-3">
<label for="numdocumento" class="form-label">Numero Carta di Identità</label>
<input type="text" class="form-control" name="numdocumento" id="numdocumento" required>
</div>
<div class="mb-3">
<label for="rilasciodoc" class="form-label">Rilasciato da</label>
<input type="text" class="form-control" name="rilasciodoc" id="rilasciodoc" required>
</div>
<div class="mb-3">
<label for="datrilasciodoc" class="form-label">Data rilascio</label>
<input type="date" class="form-control" name="datrilasciodoc" id="datrilasciodoc" required>
</div>
<div class="mb-3">
<label for="scadoc" class="form-label">Scadenza documento</label>
<input type="date" class="form-control" name="scadoc" id="scadoc" required>
</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"><b>Autorizza</b></button>
</div>
</form>
</div>
{% endblock content %}
7 changes: 7 additions & 0 deletions main/templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,13 @@
{% endif %}

{% if not request.user.is_staff %}
{% if not donatore.autorizzazione %}
<div class="row justify-content-center pe-3 ps-3">
<div class="col-md-4">
<div class="alert alert-danger" role="alert"><h3>Attenzione!</h3>Se vuoi continuare a ricevere i referti degli esami nella modalità da te scelta, clicca su "Invia subito" e invia l'autorizzazione!<br><a class="text-decoration-none"href="/autorizzazione">Invia subito</a></div>
</div>
</div>
{% endif %}
<div class="container col-md-5">
<div class="row">
<div class="col p-4 rounded-2" style="background-color: #dfdfdf;line-height: 2">
Expand Down
3 changes: 3 additions & 0 deletions main/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,7 @@
urlpatterns = [
path('', views.index, name="index"),
path('tessera/', views.tessera, name="tessera"),
path('autorizzazione/', views.autorizzazione, name="autorizzazione"),
path('autorizzazione/download/<int:dId>/', views.autdownload, name="autdownload"),
path('autorizza/', views.autorizza, name="autorizza"),
]
88 changes: 88 additions & 0 deletions main/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
from donatori.models import donatori as mDonatori
from donazioni.models import donazioni as mDonazioni
from PIL import Image, ImageDraw, ImageFont
from django.contrib import messages
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.shortcuts import get_object_or_404
from datetime import datetime
from io import BytesIO


Expand Down Expand Up @@ -77,3 +81,87 @@ def tessera(request):
response = HttpResponse(image_buffer.getvalue(), content_type="image/png", headers={"Content-Disposition": f'attachment; filename={nt}'})

return response


@login_required
def autorizzazione(request):
if request.user.is_staff or mDonatori.objects.get(email=request.user.email).autorizzazione:
return redirect("/")
else:
donatore = mDonatori.objects.get(email=request.user.username)
return render(request, "autorizzazione.html", {"donatore": donatore})


@login_required
def autorizza(request):
if request.user.is_staff or mDonatori.objects.get(email=request.user.email).autorizzazione:
return redirect("/")
else:
img = Image.open(os.path.join(BASE_DIR, 'main/static', 'autoreferti.png'))

draw = ImageDraw.Draw(img)

text_color = (0, 0, 0)
font_size = 64
font = ImageFont.truetype("./arial.ttf", font_size)

text = request.POST.get('nomecompleto')
text_position = (676, 993)
draw.text(text_position, text, fill=text_color, font=font)

text = request.POST.get('luogodinascita')
text_position = (1656, 993)
draw.text(text_position, text, fill=text_color, font=font)

text = datetime.strptime(request.POST.get('datadinascita'), '%Y-%m-%d').strftime('%d/%m/%Y')
text_position = (220, 1120)
draw.text(text_position, text, fill=text_color, font=font)

text = request.POST.get('luogodiresidenza')
text_position = (1350, 1120)
draw.text(text_position, text, fill=text_color, font=font)

text = request.POST.get('indirizzodiresidenza')
text_position = (530, 1240)
draw.text(text_position, text, fill=text_color, font=font)

text = request.POST.get('numdocumento')
text_position = (715, 1555)
draw.text(text_position, text, fill=text_color, font=font)

text = request.POST.get('rilasciodoc')
text_position = (1590, 1555)
draw.text(text_position, text, fill=text_color, font=font)

text = datetime.strptime(request.POST.get('datrilasciodoc'), '%Y-%m-%d').strftime('%d/%m/%Y')
text_position = (210, 1680)
draw.text(text_position, text, fill=text_color, font=font)

text = datetime.strptime(request.POST.get('scadoc'), '%Y-%m-%d').strftime('%d/%m/%Y')
text_position = (1055, 1680)
draw.text(text_position, text, fill=text_color, font=font)

image_buffer = BytesIO()
img.save(image_buffer, format="png")
image_buffer.seek(0)

lDonatori = mDonatori.objects.get(email=request.user.email)
lDonatori.autorizzazione = InMemoryUploadedFile(image_buffer, None, "Autorizzazione " + lDonatori.nome + " " + lDonatori.cognome + ".png", 'image/png', image_buffer.tell(), None)
lDonatori.save()

return redirect("/")


@login_required
def autdownload(request, dId):
if request.user.is_staff:
donatore = get_object_or_404(mDonatori, tessera=dId)
try:
response = HttpResponse(donatore.autorizzazione.file, content_type='image/png')
response['Content-Disposition'] = 'attachment; filename={}'.format("Autorizzazione " + donatore.nome + " " + donatore.cognome + ".png")
return response
except Exception:
messages.warning(request, "File non trovato!")
return redirect("donatori")
else:
return redirect("/")

0 comments on commit bd3720e

Please sign in to comment.