From 8c4cdc81f993bcf4d088d2356a45da8d883bdf01 Mon Sep 17 00:00:00 2001 From: Andrea Lepori Date: Sun, 2 Jan 2022 21:00:12 +0100 Subject: login/register with midata --- client/migrations/0010_auto_20220102_1933.py | 23 + client/models.py | 2 + client/templates/client/index.html | 730 +++++++++++++-------------- client/views.py | 196 +++---- 4 files changed, 480 insertions(+), 471 deletions(-) create mode 100644 client/migrations/0010_auto_20220102_1933.py (limited to 'client') diff --git a/client/migrations/0010_auto_20220102_1933.py b/client/migrations/0010_auto_20220102_1933.py new file mode 100644 index 0000000..45d6f08 --- /dev/null +++ b/client/migrations/0010_auto_20220102_1933.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1.4 on 2022-01-02 18:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('client', '0009_merge_20210723_1805'), + ] + + operations = [ + migrations.AddField( + model_name='usercode', + name='midata_id', + field=models.IntegerField(default=0), + ), + migrations.AddField( + model_name='usercode', + name='midata_token', + field=models.CharField(default='', max_length=1024), + ), + ] diff --git a/client/models.py b/client/models.py index db31194..b94806b 100644 --- a/client/models.py +++ b/client/models.py @@ -113,6 +113,8 @@ class UserCode(models.Model): school = models.CharField(default="", max_length=250) year = models.IntegerField(default=0) avs_number = models.CharField(default="", max_length=250) + midata_id = models.IntegerField(default=0) + midata_token = models.CharField(default="", max_length=1024) class GroupSettings(models.Model): group = models.ForeignKey(Group, default=None, on_delete=models.CASCADE) diff --git a/client/templates/client/index.html b/client/templates/client/index.html index ae3392f..e31ce34 100644 --- a/client/templates/client/index.html +++ b/client/templates/client/index.html @@ -16,400 +16,388 @@ -{% if user.is_authenticated %} - {% if user.is_staff or perms.client.approved %} - + + + + + {% endfor %} + {% endif %} +
+ + add + +
{% else %}
-

Se hai già un account clicca login in alto a destra. Altrimenti clicca registrazione

+

Il tuo utente non è ancora stato approvato.

+
+ {% if user_code %} +

Per approvare l'utente invia il seguente codice al capo branca:

+

{{user_code}}

+ {% else %} +

Per approvare l'utente inserire prima i propri dati personali e medici cliccando il proprio nome in alto a destra. Torna in seguito su questa pagina per i prossimi passaggi.

+

Per approvare l'utente inserire prima i propri dati personali e medici cliccando l'icona person in alto. Torna in seguito su questa pagina per i prossimi passaggi.

+ {% endif %}

@@ -419,7 +407,6 @@ {% block script %} $(document).ready(function(){ - {% if user.is_authenticated %} {% if user.is_staff or perms.client.approved %} $('.collapsible').collapsible(); $('.tap-target').tapTarget(); @@ -428,22 +415,19 @@ $(document).ready(function(){ $('.tap-target').tapTarget('open'); {% endif %} {% endif %} - {% endif %} lazyload(); }); -{% if user.is_authenticated %} - {% if user.is_staff or perms.client.approved %} - $('*').click(function(event) { - if (this === event.target) { - $('.tap-target').tapTarget('close'); - } - }); - function send(id) { - var form = document.getElementById('form') - var action = document.getElementById('action') - action.setAttribute('value', id); - form.submit() - } - {% endif %} +{% if user.is_staff or perms.client.approved %} + $('*').click(function(event) { + if (this === event.target) { + $('.tap-target').tapTarget('close'); + } + }); + function send(id) { + var form = document.getElementById('form') + var action = document.getElementById('action') + action.setAttribute('value', id); + form.submit() + } {% endif %} {% endblock %} diff --git a/client/views.py b/client/views.py index bc0b071..41bb3dd 100644 --- a/client/views.py +++ b/client/views.py @@ -12,109 +12,109 @@ from datetime import datetime import pytz from random import randint +@login_required() def index(request): context = {} group_view = False - # check if user is logged - if (request.user.is_authenticated): - if not (request.user.is_staff or request.user.has_perm("client.approved")): - # generate code if user has no code - users = UserCode.objects.filter(user=request.user) - code = None - if (len(users) == 0): - while (True): - code = randint(100000, 999999) - if len(UserCode.objects.filter(code=code)) == 0: - break - medic = MedicalData() - medic.save() - userCode = UserCode(user=request.user, code=code, medic=medic) - userCode.save() - - user_code = None - usercode = UserCode.objects.filter(user=request.user)[0] - if request.user.first_name != "" and request.user.last_name != "" and request.user.email != "" and usercode.phone != "": - user_code = "U" + str(usercode.code) - context = {"user_code": user_code} - else: - # get user group - groups = request.user.groups.all() - - # check if any group has enabled RO documents - if request.user.is_staff or len(groups.filter(name="capi")) == 0: - # if user is staff then not needed - gr = [] - elif request.user.has_perm("client.staff"): - gr = GroupSettings.objects.filter(group__in=groups).filter(view_documents=True).filter(~Q(group=groups[0])) - else: - gr = GroupSettings.objects.filter(group__in=groups).filter(view_documents=True) - - group_view = len(gr) != 0 - - # user action - if request.method == "POST": - # get document id - document = Document.objects.get(id=request.POST["action"][1:]) - - # check if document is valid to modify - if document.user != request.user: - return - - if document.status == "ok" or document.status == "archive": - return - - # execute action - if request.POST["action"][0] == 'f': - # generate approve pdf - template = get_template('client/approve_doc_pdf.html') - context = {'doc': document} - html = template.render(context) - pdf = pdfkit.from_string(html, False) - result = BytesIO(pdf) - result.seek(0) - return FileResponse(result, filename=document.document_type.name+".pdf") - elif request.POST["action"][0] == 'a': - # sign autosign doc - if document.status == "autosign": - document.status = "ok" - document.save() - return HttpResponseRedirect("/") - elif request.POST["action"][0] == 'd': - # delete doc - document.delete() - return HttpResponseRedirect("/") - elif request.POST["action"][0] == 'e': - # edit doc generate context and render edit page - document_type = document.document_type - context = { - 'doctype': document_type, - } - context['doc'] = document - context['personal_data'] = document_type.personal_data - context['medical_data'] = document_type.medical_data - context['custom_data'] = document_type.custom_data - context['keys'] = KeyVal.objects.filter(container=document) - context['custom_message'] = document_type.custom_message - context['custom_message_text'] = document_type.custom_message_text - return edit_wrapper(request, context) - - # show only docs of the user and non archived - documents = Document.objects.filter( - Q(user=request.user) & ~Q(status='archive')).select_related("personal_data", "medical_data", "document_type", "user") - - vac_file = ["/server/media/", "/vac_certificate/doc"] - health_file = ["/server/media/", "/health_care_certificate/doc"] - sign_doc_file = ["/server/media/", "/signed_doc/doc"] - + if not (request.user.is_staff or request.user.has_perm("client.approved")): + # generate code if user has no code + users = UserCode.objects.filter(user=request.user) + code = None + if (len(users) == 0): + while (True): + code = randint(100000, 999999) + if len(UserCode.objects.filter(code=code)) == 0: + break + medic = MedicalData() + medic.save() + userCode = UserCode(user=request.user, code=code, medic=medic) + userCode.save() + + user_code = None + usercode = UserCode.objects.filter(user=request.user)[0] + if request.user.first_name != "" and request.user.last_name != "" and request.user.email != "" and usercode.phone != "": + user_code = "U" + str(usercode.code) + context = {"user_code": user_code} + return render(request, 'client/index.html', context) + + # get user group + groups = request.user.groups.all() + + # check if any group has enabled RO documents + if request.user.is_staff or len(groups.filter(name="capi")) == 0: + # if user is staff then not needed + gr = [] + elif request.user.has_perm("client.staff"): + gr = GroupSettings.objects.filter(group__in=groups).filter(view_documents=True).filter(~Q(group=groups[0])) + else: + gr = GroupSettings.objects.filter(group__in=groups).filter(view_documents=True) + + group_view = len(gr) != 0 + + # user action + if request.method == "POST": + # get document id + document = Document.objects.get(id=request.POST["action"][1:]) + + # check if document is valid to modify + if document.user != request.user: + return + + if document.status == "ok" or document.status == "archive": + return + + # execute action + if request.POST["action"][0] == 'f': + # generate approve pdf + template = get_template('client/approve_doc_pdf.html') + context = {'doc': document} + html = template.render(context) + pdf = pdfkit.from_string(html, False) + result = BytesIO(pdf) + result.seek(0) + return FileResponse(result, filename=document.document_type.name+".pdf") + elif request.POST["action"][0] == 'a': + # sign autosign doc + if document.status == "autosign": + document.status = "ok" + document.save() + return HttpResponseRedirect("/") + elif request.POST["action"][0] == 'd': + # delete doc + document.delete() + return HttpResponseRedirect("/") + elif request.POST["action"][0] == 'e': + # edit doc generate context and render edit page + document_type = document.document_type context = { - "docs": documents, - "base_group": groups[0].name, - "empty": len(documents) == 0, - "group_view": group_view, - "vac_file": vac_file, - "health_file": health_file, - "sign_doc_file": sign_doc_file + 'doctype': document_type, } + context['doc'] = document + context['personal_data'] = document_type.personal_data + context['medical_data'] = document_type.medical_data + context['custom_data'] = document_type.custom_data + context['keys'] = KeyVal.objects.filter(container=document) + context['custom_message'] = document_type.custom_message + context['custom_message_text'] = document_type.custom_message_text + return edit_wrapper(request, context) + + # show only docs of the user and non archived + documents = Document.objects.filter( + Q(user=request.user) & ~Q(status='archive')).select_related("personal_data", "medical_data", "document_type", "user") + + vac_file = ["/server/media/", "/vac_certificate/doc"] + health_file = ["/server/media/", "/health_care_certificate/doc"] + sign_doc_file = ["/server/media/", "/signed_doc/doc"] + + context = { + "docs": documents, + "base_group": groups[0].name, + "empty": len(documents) == 0, + "group_view": group_view, + "vac_file": vac_file, + "health_file": health_file, + "sign_doc_file": sign_doc_file + } return render(request, 'client/index.html', context) -- cgit v1.2.1