From ccc5d1f1b2cb4b5e2a95b97bbd1a5760ce585f08 Mon Sep 17 00:00:00 2001 From: Andrea Lepori Date: Sat, 20 Jun 2020 15:55:28 +0200 Subject: Document custom field --- client/migrations/0013_auto_20200620_1113.py | 19 ++++++ client/migrations/0014_auto_20200620_1506.py | 23 +++++++ client/models.py | 4 +- client/templates/client/doc_create.html | 95 ++++++++++++++++++++++++---- client/templates/client/index.html | 55 +++++++++++----- client/views.py | 77 +++++++++++++++------- 6 files changed, 220 insertions(+), 53 deletions(-) create mode 100644 client/migrations/0013_auto_20200620_1113.py create mode 100644 client/migrations/0014_auto_20200620_1506.py (limited to 'client') diff --git a/client/migrations/0013_auto_20200620_1113.py b/client/migrations/0013_auto_20200620_1113.py new file mode 100644 index 0000000..d05a33d --- /dev/null +++ b/client/migrations/0013_auto_20200620_1113.py @@ -0,0 +1,19 @@ +# Generated by Django 3.0.7 on 2020-06-20 09:13 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('client', '0012_document_group'), + ] + + operations = [ + migrations.AlterField( + model_name='document', + name='personal_data', + field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.PROTECT, to='client.PersonalData'), + ), + ] diff --git a/client/migrations/0014_auto_20200620_1506.py b/client/migrations/0014_auto_20200620_1506.py new file mode 100644 index 0000000..d0abc9c --- /dev/null +++ b/client/migrations/0014_auto_20200620_1506.py @@ -0,0 +1,23 @@ +# Generated by Django 3.0.7 on 2020-06-20 13:06 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('client', '0013_auto_20200620_1113'), + ] + + operations = [ + migrations.AddField( + model_name='documenttype', + name='custom_message', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='documenttype', + name='custom_message_text', + field=models.CharField(default='', max_length=250), + ), + ] diff --git a/client/models.py b/client/models.py index 01d5f4c..e7142ac 100644 --- a/client/models.py +++ b/client/models.py @@ -12,6 +12,8 @@ class DocumentType(models.Model): personal_data = models.BooleanField(default=False) medical_data = models.BooleanField(default=False) custom_data = models.BooleanField(default=False) + custom_message = models.BooleanField(default=False) + custom_message_text = models.CharField(default="", max_length=250) name = models.CharField(default="", max_length=250) @@ -36,7 +38,7 @@ class Document(models.Model): DocumentType, default=None, on_delete=models.PROTECT) personal_data = models.ForeignKey( - PersonalData, default=None, on_delete=models.PROTECT) + PersonalData, default=None, on_delete=models.PROTECT, null=True) class Meta: permissions = [ diff --git a/client/templates/client/doc_create.html b/client/templates/client/doc_create.html index a52518f..550eb54 100644 --- a/client/templates/client/doc_create.html +++ b/client/templates/client/doc_create.html @@ -4,7 +4,7 @@ {% block nav %} Home - Crea Doc + Crea Documento {% endblock %} {% block content %} @@ -14,20 +14,78 @@
{% csrf_token %} -
-
- - + + {% if not next %} +
+
+ + +
-
- + + navigate_beforeIndietro + + Avanti + navigate_next + + {% else %} + +
+
+ + +
+
+ {% if personal_data %} + + {% endif %} + {% if medical_data %} + + {% endif %} + {% if custom_message %} + + {% endif %} + {% if custom_data %} + {% for key in keys %} +
+
+ + +
+
+ {% endfor %} + {% endif %} + + {% endif %}
@@ -38,5 +96,14 @@ {% block script %} $(document).ready(function(){ $('select').formSelect(); + {% if error %} + M.toast({html: '{{ error_text}}', classes: 'orange'}) + {% endif %} }); +function send(id) { + var form = document.getElementById('form') + var action = document.getElementById('action') + action.setAttribute('value', id); + form.submit() +} {% endblock %} \ No newline at end of file diff --git a/client/templates/client/index.html b/client/templates/client/index.html index 2b19f30..96179b2 100644 --- a/client/templates/client/index.html +++ b/client/templates/client/index.html @@ -15,34 +15,56 @@ {% if user.is_authenticated %} {% if user.is_staff or perms.client.approved %} -
- {% csrf_token %} + {% if not empty %} -
+ {% endif %}
- + add
@@ -75,6 +97,7 @@ {% block script %} $(document).ready(function(){ + $('.collapsible').collapsible(); $('.tap-target').tapTarget(); {% if empty %} $('.tap-target').tapTarget('open'); diff --git a/client/views.py b/client/views.py index 78ca7d1..f70d930 100644 --- a/client/views.py +++ b/client/views.py @@ -1,7 +1,8 @@ from random import randint from django.contrib.auth.models import Group, Permission, User -from client.models import UserCode, Keys, DocumentType, Document, PersonalData +from client.models import UserCode, Keys, DocumentType, Document, PersonalData, KeyVal from django.db.models import Q +from django.http import HttpResponseRedirect from django.shortcuts import render @@ -21,10 +22,10 @@ def index(request): userCode = UserCode(user=request.user, code=code) userCode.save() - documents = Document.objects.filter(user=request.user) + documents = Document.objects.filter(Q(user=request.user) & ~Q(status='archive')) out = [] for i in documents: - out.append(i) + out.append([i, KeyVal.objects.filter(container=i)]) context = { "docs": out, "empty": len(out) == 0, @@ -51,31 +52,63 @@ def create(request): parent_group = request.user.groups.values_list('name', flat=True)[ 0] group = Group.objects.get(name=parent_group) - public_types = DocumentType.objects.filter( - Q(group_private=False) | Q(group=group)) + doctypes = DocumentType.objects.filter( + (Q(group_private=False) | Q(group=group)) & Q(enabled=True)) out = [] - for doc in public_types: - out.append(doc) + for doc in doctypes: + if len(Document.objects.filter(Q(user=request.user) & Q(document_type=doc))) == 0: + out.append(doc) context = {'docs': out} if request.method == "POST": - usercode = UserCode.objects.filter(user=request.user)[0] - code = 0 - status = 0 - document_type = DocumentType.objects.get( - id=request.POST["doctype"]) - personal_data = PersonalData(parent_name=usercode.parent_name, via=usercode.via, cap=usercode.cap, country=usercode.country, - nationality=usercode.nationality, born_date=usercode.born_date, home_phone=usercode.home_phone, phone=usercode.phone) - personal_data.save() + if request.POST["action"] == "details": + if "doctype" not in request.POST.keys(): + context['error'] = True + context['error_text'] = "Seleziona un documento" + else: + context['next'] = True + document_type = DocumentType.objects.get( + id=request.POST["doctype"]) + context['doctype'] = document_type + context['personal_data'] = document_type.personal_data + context['medical_data'] = document_type.medical_data + context['custom_data'] = document_type.custom_data + keys = Keys.objects.filter(container=document_type) + out_keys = [] + for i in keys: + out_keys.append([i, ""]) + context['keys'] = out_keys + context['custom_message'] = document_type.custom_message + context['custom_message_text'] = document_type.custom_message_text + elif request.POST["action"] == "save": + usercode = UserCode.objects.filter(user=request.user)[0] + code = 0 + status = "wait" + personal_data = None + document_type = DocumentType.objects.get( + id=request.POST["doctype"]) + keys = [] + if document_type.personal_data: + personal_data = PersonalData(parent_name=usercode.parent_name, via=usercode.via, cap=usercode.cap, country=usercode.country, + nationality=usercode.nationality, born_date=usercode.born_date, home_phone=usercode.home_phone, phone=usercode.phone) + personal_data.save() - while (True): - code = randint(100000, 999999) - if len(Document.objects.filter(code=code)) == 0: - break + while (True): + code = randint(100000, 999999) + if len(Document.objects.filter(code=code)) == 0: + break + + document = Document( + user=request.user, group=group, code=code, status=status, document_type=document_type, personal_data=personal_data) + document.save() + + for i in request.POST.keys(): + if i == "doctype" or i=="csrfmiddlewaretoken" or i=="action": + continue + key = KeyVal(container=document, key=Keys.objects.get(id=i).key, value=request.POST[i]) + key.save() - document = Document( - user=request.user, group=group, code=code, status=status, document_type=document_type, personal_data=personal_data) - document.save() + return HttpResponseRedirect('/') return render(request, 'client/doc_create.html', context) else: -- cgit v1.2.1