aboutsummaryrefslogtreecommitdiffstats
path: root/server
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 /server
parentDocument support (diff)
downloadscout-subs-ccc5d1f1b2cb4b5e2a95b97bbd1a5760ce585f08.tar.gz
scout-subs-ccc5d1f1b2cb4b5e2a95b97bbd1a5760ce585f08.zip
Document custom field
Diffstat (limited to '')
-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
8 files changed, 278 insertions, 60 deletions
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: