aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrea Lepori <alepori@student.ethz.ch>2020-06-20 15:55:28 +0200
committerAndrea Lepori <alepori@student.ethz.ch>2020-06-20 15:55:28 +0200
commitccc5d1f1b2cb4b5e2a95b97bbd1a5760ce585f08 (patch)
tree6912e8d96bce8bdf7782c7877a7a0928560c7a1a
parentDocument support (diff)
downloadscout-subs-ccc5d1f1b2cb4b5e2a95b97bbd1a5760ce585f08.tar.gz
scout-subs-ccc5d1f1b2cb4b5e2a95b97bbd1a5760ce585f08.zip
Document custom field
-rw-r--r--client/migrations/0013_auto_20200620_1113.py19
-rw-r--r--client/migrations/0014_auto_20200620_1506.py23
-rw-r--r--client/models.py4
-rw-r--r--client/templates/client/doc_create.html95
-rw-r--r--client/templates/client/index.html55
-rw-r--r--client/views.py77
-rw-r--r--server/templates/server/approve_doc.html43
-rw-r--r--server/templates/server/approve_user.html51
-rw-r--r--server/templates/server/doc_edit.html19
-rw-r--r--server/templates/server/doc_list.html65
-rw-r--r--server/templates/server/doc_type.html52
-rw-r--r--server/templates/server/index.html2
-rw-r--r--server/urls.py1
-rw-r--r--server/views.py105
14 files changed, 498 insertions, 113 deletions
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 %}
<a style="margin-left: 10px;" href="{% url 'index' %}" class="breadcrumb">Home</a>
- <a href="#!" class="breadcrumb hide-on-med-and-down">Crea Doc</a>
+ <a href="#!" class="breadcrumb hide-on-med-and-down">Crea Documento</a>
{% endblock %}
{% block content %}
@@ -14,20 +14,78 @@
<div class="row">
<form id="form" action="{% url 'create'%}" method="post" class="col s12">
{% csrf_token %}
- <div class="row">
- <div class="input-field col s12">
- <select name="doctype">
- <option value="" disabled selected>Scegli</option>
- {% for doctype in docs%}
- <option value="{{doctype.id}}">{{doctype.name}}</option>
- {% endfor %}
- </select>
- <label>Documento</label>
+ <input type="hidden" name="action" id="action">
+ {% if not next %}
+ <div class="row">
+ <div class="input-field col s12">
+ <select name="doctype">
+ <option value="" disabled selected>Scegli</option>
+ {% for doctype in docs%}
+ <option value="{{doctype.id}}">{{doctype.name}}</option>
+ {% endfor %}
+ </select>
+ <label>Documento</label>
+ </div>
</div>
- </div>
- <button class="btn waves-effect waves-light" type="submit" name="action">Invia
- <i class="material-icons right">send</i>
- </button>
+ <a class="btn waves-effect waves-light" onclick="window.history.back();" >
+ <i class="material-icons left">navigate_before</i>Indietro
+ </a>
+ <a class="btn waves-effect waves-light" onclick="send('details')" >Avanti
+ <i class="material-icons right">navigate_next</i>
+ </a>
+ {% else %}
+ <input type="hidden" name="doctype" value="{{doctype.id}}">
+ <div class="row">
+ <div class="input-field col s12">
+ <select>
+ <option disabled selected>{{doctype.name}}</option>
+ </select>
+ <label>Documento</label>
+ </div>
+ </div>
+ {% if personal_data %}
+ <div class="row">
+ <div class="col s12">
+ <a style="pointer-events: none; cursor: default;" class="btn red lighten-1"> Il documento conterr&aacute le informazioni personali, prego verificare che siano corrette e aggiornate</a>
+ </div>
+ </div>
+ {% endif %}
+ {% if medical_data %}
+ <div class="row">
+ <div class="col s12">
+ <a style="pointer-events: none; cursor: default;" class="btn red lighten-1"> Il documento conterr&aacute le informazioni mediche, prego verificare che siano corrette e aggiornate</a>
+ </div>
+ </div>
+ {% endif %}
+ {% if custom_message %}
+ <div class="row">
+ <div class="col s12">
+ <a style="pointer-events: none; cursor: default;" class="btn red lighten-1">{{custom_message_text}}</a>
+ </div>
+ </div>
+ {% endif %}
+ {% if custom_data %}
+ {% for key in keys %}
+ <div class="row">
+ <div class="input-field col s12">
+ <input value="{{key.1}}" name="{{key.0.id}}" id="{{key.0.id}}" type="text" class="validate">
+ <label for="{{key.0.id}}">{{key.0.key}}</label>
+ </div>
+ </div>
+ {% endfor %}
+ {% endif %}
+ <div class="row">
+ <div class="col s12">
+ <br>
+ <a class="btn waves-effect waves-light" onclick="window.history.back();" >
+ <i class="material-icons left">navigate_before</i>Indietro
+ </a>
+ <a class="btn waves-effect waves-light" onclick="send('save')" >Crea
+ <i class="material-icons right">create</i>
+ </a>
+ </div>
+ </div>
+ {% endif %}
</form>
</div>
</div>
@@ -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 @@
</div>
{% if user.is_authenticated %}
{% if user.is_staff or perms.client.approved %}
- <form id="selection" action="{% url 'doctype' %}" method="post">
- {% csrf_token %}
+ {% if not empty %}
<ul class="collapsible">
{% for doc in docs %}
<li>
<div class="collapsible-header">
- <label>
- <input name={{doc.id}} type="checkbox" class="filled-in"/>
- <span></span>
- </label>
- {% if doc.enabled %}
- <i class="material-icons">visibility_on</i>
- {% else %}
- <i class="material-icons">visibility_off</i>
+ {% if doc.0.status == "wait" %}
+ <i class="material-icons">timelapse</i>
+ {% elif doc.0.status == "ok" %}
+ <i class="material-icons">check</i>
{% endif %}
- {{doc.document_type.name}}
+ {{doc.0.document_type.name}}
+ <span class="badge" data-badge-caption="">{{doc.0.compilation_date}}</span></div>
</div>
<div class="collapsible-body"><span>
- {% for key in keys %}
- {{key}}<br>
- {% endfor %}
+ {% if doc.0.status == "wait" %}
+ <a class="waves-effect waves-light btn red lighten-1" href="{%url 'server'%}"><i class="material-icons left">file_download</i> Scarica documento per approvazione</a>
+ <a class="waves-effect waves-light btn red lighten-1" href="{%url 'server'%}"><i class="material-icons left">delete</i> Elimina documento</a>
+ <a class="waves-effect waves-light btn red lighten-1" href="{%url 'server'%}"><i class="material-icons left">edit</i> Modifica documento</a>
+ <br>
+ <br>
+ {% endif %}
+ {% if doc.0.document_type.personal_data %}
+ <i class="material-icons">person</i>
+ {% endif %}
+ {% if doc.0.document_type.medical_data %}
+ <i class="material-icons">healing</i>
+ {% endif %}
+ {% if doc.0.document_type.custom_data %}
+ <i class="material-icons">add_circle_outline</i>
+ {% endif %}
+ {% if doc.0.document_type.custom_data %}
+ <br>
+ <table class="striped">
+ <tbody>
+ {% for key in doc.1 %}
+ <tr>
+ <td>{{key.key}}</td>
+ <td>{{key.value}}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ {% endif %}
</span></div>
</li>
{% endfor %}
</ul>
- </form>
+ {% endif %}
<div class="fixed-action-btn">
- <a id="add" class="btn-floating btn-large red lightend-1" href="{% url 'create'%}">
+ <a id="add" class="btn-floating btn-large red lighten-1" href="{% url 'create'%}">
<i class="large material-icons">add</i>
</a>
</div>
@@ -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:
diff --git a/server/templates/server/approve_doc.html b/server/templates/server/approve_doc.html
new file mode 100644
index 0000000..82ecf2a
--- /dev/null
+++ b/server/templates/server/approve_doc.html
@@ -0,0 +1,43 @@
+{% extends 'registration/base.html' %}
+
+{% block title %}Admin - Approva Utente{% endblock %}
+
+{% block nav %}
+ <a style="margin-left: 10px;" href="{% url 'index' %}" class="breadcrumb">Home</a>
+ <a href="{% url 'server'%}" class="breadcrumb hide-on-med-and-down">Admin</a>
+ <a href="{% url 'docapprove'%}" class="breadcrumb hide-on-med-and-down">Approva Documento</a>
+{% endblock %}
+
+{% block content %}
+
+{% if not empty %}
+ <div class="row">
+ <div class="col l4 offset-l4 m8 offset-m2 s12">
+ <div class="card">
+ <ul class="collection">
+ {% for i in messages %}
+ <li class="collection-item">{{ i }}</li>
+ {% endfor %}
+ </ul>
+ </div>
+ </div>
+ </div>
+{% endif %}
+
+<div class="row">
+ <div class="col l4 offset-l4 m8 offset-m2 s12">
+ <div class="card">
+ <form id="form" action="{% url 'docapprove'%}" method="post">
+ {% csrf_token %}
+ <div class="card-content">
+ <p>Inserire un codice per riga</p>
+ <textarea name="codes" class="materialize-textarea"></textarea>
+ </div>
+ <div class="card-action">
+ <a href="#" onclick="document.getElementById('form').submit()">Invia</a>
+ </div>
+ </form>
+ </div>
+ </div>
+</div>
+{% endblock %} \ No newline at end of file
diff --git a/server/templates/server/approve_user.html b/server/templates/server/approve_user.html
index 126c0b9..9d4b36c 100644
--- a/server/templates/server/approve_user.html
+++ b/server/templates/server/approve_user.html
@@ -3,24 +3,41 @@
{% block title %}Admin - Approva Utente{% endblock %}
{% block nav %}
- <a style="margin-left: 10px;" href="{% url 'index' %}" class="breadcrumb">Home</a>
- <a href="{% url 'server'%}" class="breadcrumb hide-on-med-and-down">Admin</a>
- <a href="#!" class="breadcrumb hide-on-med-and-down">Approva Utente</a>
+ <a style="margin-left: 10px;" href="{% url 'index' %}" class="breadcrumb">Home</a>
+ <a href="{% url 'server'%}" class="breadcrumb hide-on-med-and-down">Admin</a>
+ <a href="{% url 'uapprove'%}" class="breadcrumb hide-on-med-and-down">Approva Utente</a>
{% endblock %}
{% block content %}
-<p>Inserire un codice per riga</p>
-<ul class="collection">
-{% for i in messages %}
- <li class="collection-item">{{ i }}</li>
-{% endfor %}
-</ul>
-<form action="{% url 'uapprove'%}" method="post">
- {% csrf_token %}
- <textarea name="codes" class="materialize-textarea"></textarea>
- <br><br>
- <button type="submit" class="btn waves-effect waves-light">Invia
- <i class="material-icons right">send</i>
- </button>
-</form>
+
+{% if not empty %}
+ <div class="row">
+ <div class="col l4 offset-l4 m8 offset-m2 s12">
+ <div class="card">
+ <ul class="collection">
+ {% for i in messages %}
+ <li class="collection-item">{{ i }}</li>
+ {% endfor %}
+ </ul>
+ </div>
+ </div>
+ </div>
+{% endif %}
+
+<div class="row">
+ <div class="col l4 offset-l4 m8 offset-m2 s12">
+ <div class="card">
+ <form id="form" action="{% url 'uapprove'%}" method="post">
+ {% csrf_token %}
+ <div class="card-content">
+ <p>Inserire un codice per riga</p>
+ <textarea name="codes" class="materialize-textarea"></textarea>
+ </div>
+ <div class="card-action">
+ <a href="#" onclick="document.getElementById('form').submit()">Invia</a>
+ </div>
+ </form>
+ </div>
+ </div>
+</div>
{% endblock %} \ No newline at end of file
diff --git a/server/templates/server/doc_edit.html b/server/templates/server/doc_edit.html
index cca0607..8b01c35 100644
--- a/server/templates/server/doc_edit.html
+++ b/server/templates/server/doc_edit.html
@@ -41,31 +41,44 @@
</div>
</div>
<div class="row">
- <div class="input-field col s3">
+ <div class="input-field col s2">
<label>
<input name="personal_data" type="checkbox" class="filled-in" {{personal_check}}/>
<span>Dati personali</span>
</label>
</div>
- <div class="input-field col s3">
+ <div class="input-field col s2">
<label>
<input name="medical_data" type="checkbox" class="filled-in" {{medical_check}} />
<span>Dati medici</span>
</label>
</div>
- <div class="input-field col s3">
+ <div class="input-field col s4">
<label>
<input name="custom_data" type="checkbox" class="filled-in" {{custom_check}}/>
<span>Parametri personalizzati</span>
</label>
</div>
+ <div class="input-field col s4">
+ <label>
+ <input name="custom_message" type="checkbox" class="filled-in" {{custom_message_check}}/>
+ <span>Messaggio personalizzato</span>
+ </label>
+ </div>
</div>
+ <br>
<div class="row">
<div class="input-field col s12">
<textarea name="custom" id="textarea" class="materialize-textarea"></textarea>
<label for="textarea">Lista parametri personalizzati, uno per riga</label>
</div>
</div>
+ <div class="row">
+ <div class="input-field col s12">
+ <textarea name="custom_message_text" id="textarea" class="materialize-textarea"></textarea>
+ <label for="textarea">Messaggio personalizzato</label>
+ </div>
+ </div>
<div class="fixed-action-btn">
<a class="btn-floating btn-large red lighten-1" onclick="document.getElementById('form').submit()">
<i class="large material-icons">save</i>
diff --git a/server/templates/server/doc_list.html b/server/templates/server/doc_list.html
index cf98010..c5978b1 100644
--- a/server/templates/server/doc_list.html
+++ b/server/templates/server/doc_list.html
@@ -7,10 +7,12 @@
<div class="nav-wrapper red lighten-1">
<a style="margin-left: 10px;" href="{% url 'index' %}" class="breadcrumb">Home</a>
<a href="{% url 'server'%}" class="breadcrumb hide-on-med-and-down">Admin</a>
- <a href="{% url 'doctype' %}" class="breadcrumb hide-on-med-and-down">Documenti</a>
+ <a href="{% url 'doclist' %}" class="breadcrumb hide-on-med-and-down">Documenti</a>
<ul class="right">
{% if user.is_staff %}
- <li><a onclick="document.getElementById('selection').submit()">Elimina selezionati</a></li>
+ <li><a onclick="send('archive')">Archivia selezionati</a></li>
+ <li><a onclick="send('approve')">Approva selezionati</a></li>
+ <li><a onclick="send('delete')">Elimina selezionati</a></li>
<li><a href="{% url 'server' %}">Pannello Admin</a></li>
{% endif %}
{% if user.is_authenticated %}
@@ -30,41 +32,70 @@
{% endblock %}
{% block content %}
-<form id="selection" action="{% url 'doctype' %}" method="post">
+<form id="selection" action="{% url 'doclist' %}" method="post">
{% csrf_token %}
+<input type="hidden" name="action" id="action">
<ul class="collapsible">
{% for doc in docs %}
<li>
<div class="collapsible-header">
<label>
- <input name={{doc.id}} type="checkbox" class="filled-in"/>
+ <input name={{doc.0.id}} type="checkbox" class="filled-in"/>
<span></span>
</label>
- {% if doc.enabled %}
- <i class="material-icons">visibility_on</i>
- {% else %}
- <i class="material-icons">visibility_off</i>
+ {% if doc.0.status == "wait" %}
+ <i class="material-icons">timelapse</i>
+ {% elif doc.0.status == "ok" %}
+ <i class="material-icons">check</i>
+ {% elif doc.0.status == "archive" %}
+ <i class="material-icons">archive</i>
{% endif %}
- {{doc.document_type.name}}
+ {{doc.0.document_type.name}}
+ <span class="badge" data-badge-caption="">{{doc.0.user.username}}</span></div>
</div>
<div class="collapsible-body"><span>
- {% for key in keys %}
- {{key}}<br>
- {% endfor %}
+ {{doc.0.code}} <br>
+ {{doc.0.compilation_date}}<br>
+ {% if doc.0.document_type.personal_data %}
+ <i class="material-icons">person</i>
+ {% endif %}
+ {% if doc.0.document_type.medical_data %}
+ <i class="material-icons">healing</i>
+ {% endif %}
+ {% if doc.0.document_type.custom_message %}
+ <i class="material-icons">message</i>
+ {% endif %}
+ {% if doc.0.document_type.custom_data %}
+ <i class="material-icons">add_circle_outline</i>
+ {% endif %}
+ {% if doc.0.document_type.custom_data %}
+ <br>
+ <table class="striped">
+ <tbody>
+ {% for key in doc.1 %}
+ <tr>
+ <td>{{key.key}}</td>
+ <td>{{key.value}}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+ {% endif %}
</span></div>
</li>
{% endfor %}
</ul>
</form>
-<div class="fixed-action-btn">
- <a class="btn-floating btn-large red lightend-1" href="{% url 'docedit'%}">
- <i class="large material-icons">add</i>
- </a>
-</div>
{% endblock %}
{%block script%}
$(document).ready(function(){
$('.collapsible').collapsible();
});
+function send(id) {
+ var form = document.getElementById('selection')
+ var action = document.getElementById('action')
+ action.setAttribute('value', id);
+ form.submit()
+}
{% endblock %} \ No newline at end of file
diff --git a/server/templates/server/doc_type.html b/server/templates/server/doc_type.html
index 75bb79a..fecfc9d 100644
--- a/server/templates/server/doc_type.html
+++ b/server/templates/server/doc_type.html
@@ -10,7 +10,8 @@
<a href="{% url 'doctype' %}" class="breadcrumb hide-on-med-and-down">Tipo Doc</a>
<ul class="right">
{% if user.is_staff %}
- <li><a onclick="document.getElementById('selection').submit()">Elimina selezionati</a></li>
+ <li><a onclick="send('hide')">Nascondi/mostra selezionati</a></li>
+ <li><a onclick="send('delete')">Elimina selezionati</a></li>
<li><a href="{% url 'server' %}">Pannello Admin</a></li>
{% endif %}
{% if user.is_authenticated %}
@@ -32,32 +33,56 @@
{% block content %}
<form id="selection" action="{% url 'doctype' %}" method="post">
{% csrf_token %}
+<input type="hidden" name="action" id="action">
<ul class="collapsible">
{% for doctype in docs %}
<li>
<div class="collapsible-header">
<label>
- <input name={{doctype.id}} type="checkbox" class="filled-in"/>
+ <input name={{doctype.0.id}} type="checkbox" class="filled-in"/>
<span></span>
</label>
- {% if doctype.enabled %}
- <i class="material-icons">visibility_on</i>
- {% else %}
+ {% if not doctype.0.enabled %}
<i class="material-icons">visibility_off</i>
{% endif %}
- {{doctype.name}}
+ {% if not doctype.0.group_private %}
+ <i class="material-icons">public</i>
+ {% endif %}
+ {{doctype.0.name}}
+ <span class="new badge red lighten-1" data-badge-caption="">{{doctype.2}}</span></div>
</div>
<div class="collapsible-body"><span>
- {% for key in keys %}
- {{key}}<br>
- {% endfor %}
+ {% if doctype.0.personal_data %}
+ <i class="material-icons">person</i>
+ {% endif %}
+ {% if doctype.0.medical_data %}
+ <i class="material-icons">healing</i>
+ {% endif %}
+ {% if doctype.0.custom_data %}
+ <i class="material-icons">add_circle_outline</i>
+ {% endif %}
+ {% if doctype.0.custom_message %}
+ <i class="material-icons">message</i>
+ {% endif %}
+ {% if doctype.0.custom_data %}
+ <br>
+ <ul class="collection">
+ {% for key in doctype.1 %}
+ <li class="collection-item">{{key.key}}</li>
+ {% endfor %}
+ </ul>
+ {% endif %}
+ {% if doctype.0.custom_message %}
+ <br>
+ {{doctype.0.custom_message_text}}
+ {% endif %}
</span></div>
</li>
{% endfor %}
</ul>
</form>
<div class="fixed-action-btn">
- <a class="btn-floating btn-large red lightend-1" href="{% url 'docedit'%}">
+ <a class="btn-floating btn-large red lighten-1" href="{% url 'docedit'%}">
<i class="large material-icons">add</i>
</a>
</div>
@@ -67,4 +92,11 @@
$(document).ready(function(){
$('.collapsible').collapsible();
});
+
+function send(id) {
+ var form = document.getElementById('selection')
+ var action = document.getElementById('action')
+ action.setAttribute('value', id);
+ form.submit()
+}
{% endblock %} \ No newline at end of file
diff --git a/server/templates/server/index.html b/server/templates/server/index.html
index 4095d4a..d88454f 100644
--- a/server/templates/server/index.html
+++ b/server/templates/server/index.html
@@ -46,7 +46,7 @@
<div class="card-action">
<a href="{% url 'doctype' %}">Lista tipo doc</a>
<a href="{% url 'doclist' %}">Lista documenti</a>
- <a href="{% url 'uapprove' %}">Approva documento</a>
+ <a href="{% url 'docapprove' %}">Approva documento</a>
</div>
</div>
</div>
diff --git a/server/urls.py b/server/urls.py
index de94d50..fb2c2f2 100644
--- a/server/urls.py
+++ b/server/urls.py
@@ -9,4 +9,5 @@ urlpatterns = [
path('doctype', views.doctype, name='doctype'),
path('docedit', views.docedit, name='docedit'),
path('doclist', views.doclist, name='doclist'),
+ path('docapprove', views.docapprove, name='docapprove'),
]
diff --git a/server/views.py b/server/views.py
index aed1fb6..b59dfb8 100644
--- a/server/views.py
+++ b/server/views.py
@@ -1,8 +1,9 @@
from django.shortcuts import render
-from client.models import UserCode, Keys, DocumentType, Document
+from client.models import UserCode, Keys, DocumentType, Document, KeyVal
from django.contrib.auth.models import Group, Permission, User
from django.db.models import Q
from django.http import HttpResponseRedirect
+from django.db.models.deletion import ProtectedError
# Create your views here.
@@ -36,25 +37,27 @@ def index(request):
def uapprove(request):
context = {}
if (request.user.is_staff):
+ data = []
if request.method == "POST":
parent_group = request.user.groups.values_list('name', flat=True)[
0]
group = Group.objects.get(name=parent_group)
permission = Permission.objects.get(codename='approved')
data = request.POST["codes"]
- data += " "
+ data = "".join(data.split())
+ data.replace("\r", "")
data = data.split("\n")
for i in range(len(data)):
if not data[i].startswith("U"):
data[i] = data[i] + " - Formato errato"
- elif not data[i][1:-1].isdigit():
+ elif not data[i][1:].isdigit():
data[i] = data[i] + " - Formato errato"
- elif int(data[i][1:-1]) < 100000 or int(data[i][1:-1]) > 999999:
+ elif int(data[i][1:]) < 100000 or int(data[i][1:]) > 999999:
data[i] = data[i] + " - Formato errato"
- elif len(UserCode.objects.filter(code=data[i][1:-1])) == 0:
+ elif len(UserCode.objects.filter(code=data[i][1:])) == 0:
data[i] = data[i] + " - Invalido"
else:
- user = UserCode.objects.filter(code=data[i][1:-1])[0].user
+ user = UserCode.objects.filter(code=data[i][1:])[0].user
if len(user.groups.values_list('name', flat=True)) == 0:
user.groups.add(group)
user.user_permissions.add(permission)
@@ -62,20 +65,58 @@ def uapprove(request):
else:
if user.groups.values_list('name', flat=True)[0] == parent_group:
user.user_permissions.add(permission)
- data[i] = data[i] + " - Gia` aggiunto"
+ data[i] = data[i] + " - Ok"
else:
user.groups.clear()
user.groups.add(group)
user.user_permissions.add(permission)
data[i] = data[i] + " - Ok, cambio branca"
- context = {'messages': data}
+ context = {
+ 'messages': data,
+ 'empty': len(data) == 0,
+ }
return render(request, 'server/approve_user.html', context)
else:
return render(request, 'client/index.html', context)
+def docapprove(request):
+ context = {}
+ if (request.user.is_staff):
+ data = []
+ if request.method == "POST":
+ data = request.POST["codes"]
+ data = "".join(data.split())
+ data.replace("\r", "")
+ data = data.split("\n")
+ for i in range(len(data)):
+ if not data[i].isdigit():
+ data[i] = data[i] + " - Formato errato"
+ elif int(data[i]) < 100000 or int(data[i]) > 999999:
+ data[i] = data[i] + " - Formato errato"
+ elif len(Document.objects.filter(code=data[i])) == 0:
+ data[i] = data[i] + " - Invalido"
+ else:
+ document = Document.objects.filter(code=data[i])[0]
+ if document.status == 'ok':
+ data[i] = data[i] + " - Gia` approvato"
+ else:
+ document.status = 'ok'
+ document.save()
+ data[i] = data[i] + " - Ok"
+
+ context = {
+ 'messages': data,
+ 'empty': len(data) == 0,
+ }
+
+ return render(request, 'server/approve_doc.html', context)
+ else:
+ return render(request, 'client/index.html', context)
+
+
def ulist(request):
context = {}
if (request.user.is_staff):
@@ -148,10 +189,20 @@ def doctype(request):
for i in request.POST.keys():
if i == "csrfmiddlewaretoken":
continue
+ if i == "action":
+ continue
+
selected.append(DocumentType.objects.get(id=i))
for i in selected:
- i.delete()
+ if request.POST["action"] == 'delete':
+ try:
+ i.delete()
+ except ProtectedError:
+ print("nope")
+ elif request.POST["action"] == 'hide':
+ i.enabled = not i.enabled
+ i.save()
parent_group = request.user.groups.values_list('name', flat=True)[
0]
@@ -160,7 +211,9 @@ def doctype(request):
Q(group_private=False) | Q(group=group))
out = []
for doc in public_types:
- out.append(doc)
+ custom_keys = Keys.objects.filter(container=doc)
+ ref_docs = Document.objects.filter(document_type=doc)
+ out.append([doc, custom_keys, len(ref_docs)])
context = {'docs': out}
return render(request, 'server/doc_type.html', context)
@@ -186,12 +239,14 @@ def docedit(request):
personal_check = 'checked="checked"'
medical_check = ""
custom_check = ""
+ custom_message_check = ""
context = {
"enabled_check": enabled_check,
"private_check": private_check,
"personal_check": personal_check,
"medical_check": medical_check,
"custom_check": custom_check,
+ "custom_message_check": custom_message_check,
}
if request.method == "POST":
enabled = "enabled" in request.POST.keys()
@@ -199,12 +254,14 @@ def docedit(request):
personal_data = "personal_data" in request.POST.keys()
medical_data = "medical_data" in request.POST.keys()
custom_data = "custom_data" in request.POST.keys()
+ custom_message = "custom_message" in request.POST.keys()
+ custom_message_text = request.POST["custom_message_text"]
name = request.POST["name"]
custom = request.POST["custom"]
custom += " "
custom = custom.split("\n")
doctype = DocumentType(
- name=request.POST["name"], enabled=enabled, group_private=group_private, group=group, personal_data=personal_data, medical_data=medical_data, custom_data=custom_data)
+ custom_message=custom_message, custom_message_text=custom_message_text, name=request.POST["name"], enabled=enabled, group_private=group_private, group=group, personal_data=personal_data, medical_data=medical_data, custom_data=custom_data)
doctype.save()
for i in custom:
key = Keys(key=i[:-1], container=doctype)
@@ -219,13 +276,37 @@ def docedit(request):
def doclist(request):
context = {}
if request.user.is_staff:
+ if request.method == "POST":
+ selected = []
+ for i in request.POST.keys():
+ if i == "csrfmiddlewaretoken":
+ continue
+ if i == "action":
+ continue
+
+ selected.append(Document.objects.get(id=i))
+
+ for i in selected:
+ if request.POST["action"] == 'delete':
+ try:
+ i.delete()
+ except ProtectedError:
+ print("nope")
+ elif request.POST["action"] == 'approve':
+ i.status = 'ok'
+ i.save()
+ elif request.POST["action"] == 'archive':
+ i.status = 'archive'
+ i.save()
+
parent_group = request.user.groups.values_list('name', flat=True)[
0]
group = Group.objects.get(name=parent_group)
documents = Document.objects.filter(group=group)
out = []
for i in documents:
- out.append(i)
+ custom_keys = KeyVal.objects.filter(container=i)
+ out.append([i, custom_keys])
context = {"docs": out}
return render(request, 'server/doc_list.html', context)
else: