diff options
author | Andrea Lepori <alepori@student.ethz.ch> | 2021-07-23 18:07:47 +0200 |
---|---|---|
committer | Andrea Lepori <alepori@student.ethz.ch> | 2021-07-23 18:07:59 +0200 |
commit | c5789583a04c435acb460bae050f9387e67527cb (patch) | |
tree | eaa73777353a9669be5c57269cee67e1e35bdf07 /client | |
parent | export csv of users or document types (diff) | |
parent | add notification if user of group capi views document (diff) | |
download | scout-subs-0.3.tar.gz scout-subs-0.3.zip |
Merge branch 'dev'0.3
Diffstat (limited to 'client')
-rw-r--r-- | client/migrations/0007_groupsettings.py | 23 | ||||
-rw-r--r-- | client/migrations/0009_merge_20210723_1805.py | 14 | ||||
-rw-r--r-- | client/models.py | 234 | ||||
-rw-r--r-- | client/templates/client/index.html | 12 | ||||
-rw-r--r-- | client/views.py | 17 |
5 files changed, 184 insertions, 116 deletions
diff --git a/client/migrations/0007_groupsettings.py b/client/migrations/0007_groupsettings.py new file mode 100644 index 0000000..b5a23fa --- /dev/null +++ b/client/migrations/0007_groupsettings.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1.2 on 2021-03-17 20:06 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('auth', '0012_alter_user_first_name_max_length'), + ('client', '0006_documenttype_max_instances'), + ] + + operations = [ + migrations.CreateModel( + name='GroupSettings', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('view_documents', models.BooleanField(default=False)), + ('group', models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='auth.group')), + ], + ), + ] diff --git a/client/migrations/0009_merge_20210723_1805.py b/client/migrations/0009_merge_20210723_1805.py new file mode 100644 index 0000000..014ac28 --- /dev/null +++ b/client/migrations/0009_merge_20210723_1805.py @@ -0,0 +1,14 @@ +# Generated by Django 3.1.4 on 2021-07-23 16:05 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('client', '0007_groupsettings'), + ('client', '0008_usercode_avs_number'), + ] + + operations = [ + ] diff --git a/client/models.py b/client/models.py index 3d4e63d..db31194 100644 --- a/client/models.py +++ b/client/models.py @@ -1,115 +1,119 @@ -from django.db import models -from django.contrib.auth.models import User, Group -from datetime import datetime - -# Create your models here. - - -class DocumentType(models.Model): - enabled = models.BooleanField(default=False) - auto_sign = models.BooleanField(default=False) - group_private = models.BooleanField(default=False) - group = models.ForeignKey(Group, default=None, on_delete=models.CASCADE) - custom_group = models.BooleanField(default=False) - 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) - staff_only = models.BooleanField(default=False) - max_instances = models.IntegerField(default=0) - name = models.CharField(default="", max_length=250) - - -class PersonalData(models.Model): - parent_name = models.CharField(default="", max_length=250) - via = models.CharField(default="", max_length=250) - cap = models.CharField(default="", max_length=250) - country = models.CharField(default="", max_length=250) - nationality = models.CharField(default="", max_length=250) - born_date = models.DateField(null=True, default=datetime.fromtimestamp(0)) - home_phone = models.CharField(default="", max_length=250) - phone = models.CharField(default="", max_length=250) - email = models.CharField(default="", max_length=250) - school = models.CharField(default="", max_length=250) - year = models.IntegerField(default=0) - avs_number = models.CharField(default="", max_length=250) - - -class MedicalData(models.Model): - emer_name = models.CharField(default="", max_length=250) - emer_relative = models.CharField(default="", max_length=250) - cell_phone = models.CharField(default="", max_length=250) - address = models.CharField(default="", max_length=250) - emer_phone = models.CharField(default="", max_length=250) - health_care = models.CharField(default="", max_length=250) - injuries = models.CharField(default="", max_length=250) - rc = models.CharField(default="", max_length=250) - rega = models.BooleanField(default=False) - medic_name = models.CharField(default="", max_length=250) - medic_phone = models.CharField(default="", max_length=250) - medic_address = models.CharField(default="", max_length=250) - sickness = models.CharField(default="", max_length=250) - vaccine = models.CharField(default="", max_length=250) - tetanus_date = models.DateField(null=True, default=datetime.fromtimestamp(0)) - allergy = models.CharField(default="", max_length=250) - drugs_bool = models.BooleanField(default=False) - drugs = models.CharField(default="", max_length=250) - misc_bool = models.BooleanField(default=False) - misc = models.CharField(default="", max_length=250) - vac_certificate = models.FileField(upload_to='documents/', null=True) - health_care_certificate = models.FileField(default=None, upload_to='documents/', null=True) - - -class Document(models.Model): - user = models.ForeignKey(User, default=None, on_delete=models.CASCADE) - group = models.ForeignKey(Group, default=None, on_delete=models.CASCADE) - code = models.IntegerField(default=0) - compilation_date = models.DateTimeField(auto_now_add=True) - status = models.CharField(default="", max_length=50) - document_type = models.ForeignKey( - DocumentType, default=None, on_delete=models.PROTECT) - - personal_data = models.ForeignKey( - PersonalData, default=None, on_delete=models.PROTECT, null=True) - - medical_data = models.ForeignKey( - MedicalData, default=None, on_delete=models.SET_NULL, null=True) - - signed_doc = models.FileField(default=None, upload_to='documents/', null=True) - - class Meta: - permissions = [ - ("approved", "The user is approved"), - ("staff", "The user is staff of the non primary group") - ] - - -class KeyVal(models.Model): - container = models.ForeignKey( - Document, db_index=True, on_delete=models.CASCADE) - key = models.CharField(max_length=240, db_index=True) - value = models.CharField(max_length=240, db_index=True) - - -class Keys(models.Model): - container = models.ForeignKey( - DocumentType, db_index=True, on_delete=models.CASCADE) - key = models.CharField(max_length=240, db_index=True) - - -class UserCode(models.Model): - user = models.ForeignKey(User, default=None, on_delete=models.CASCADE) - medic = models.ForeignKey(MedicalData, default=None, on_delete=models.PROTECT) - code = models.IntegerField(default=0) - parent_name = models.CharField(default="", max_length=250) - via = models.CharField(default="", max_length=250) - cap = models.CharField(default="", max_length=250) - country = models.CharField(default="", max_length=250) - nationality = models.CharField(default="", max_length=250) - born_date = models.DateField(null=True, default=datetime.fromtimestamp(0)) - home_phone = models.CharField(default="", max_length=250) - phone = models.CharField(default="", max_length=250) - school = models.CharField(default="", max_length=250) - year = models.IntegerField(default=0) - avs_number = models.CharField(default="", max_length=250)
\ No newline at end of file +from django.db import models
+from django.contrib.auth.models import User, Group
+from datetime import datetime
+
+# Create your models here.
+
+
+class DocumentType(models.Model):
+ enabled = models.BooleanField(default=False)
+ auto_sign = models.BooleanField(default=False)
+ group_private = models.BooleanField(default=False)
+ group = models.ForeignKey(Group, default=None, on_delete=models.CASCADE)
+ custom_group = models.BooleanField(default=False)
+ 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)
+ staff_only = models.BooleanField(default=False)
+ max_instances = models.IntegerField(default=0)
+ name = models.CharField(default="", max_length=250)
+
+
+class PersonalData(models.Model):
+ parent_name = models.CharField(default="", max_length=250)
+ via = models.CharField(default="", max_length=250)
+ cap = models.CharField(default="", max_length=250)
+ country = models.CharField(default="", max_length=250)
+ nationality = models.CharField(default="", max_length=250)
+ born_date = models.DateField(null=True, default=datetime.fromtimestamp(0))
+ home_phone = models.CharField(default="", max_length=250)
+ phone = models.CharField(default="", max_length=250)
+ email = models.CharField(default="", max_length=250)
+ school = models.CharField(default="", max_length=250)
+ year = models.IntegerField(default=0)
+ avs_number = models.CharField(default="", max_length=250)
+
+
+class MedicalData(models.Model):
+ emer_name = models.CharField(default="", max_length=250)
+ emer_relative = models.CharField(default="", max_length=250)
+ cell_phone = models.CharField(default="", max_length=250)
+ address = models.CharField(default="", max_length=250)
+ emer_phone = models.CharField(default="", max_length=250)
+ health_care = models.CharField(default="", max_length=250)
+ injuries = models.CharField(default="", max_length=250)
+ rc = models.CharField(default="", max_length=250)
+ rega = models.BooleanField(default=False)
+ medic_name = models.CharField(default="", max_length=250)
+ medic_phone = models.CharField(default="", max_length=250)
+ medic_address = models.CharField(default="", max_length=250)
+ sickness = models.CharField(default="", max_length=250)
+ vaccine = models.CharField(default="", max_length=250)
+ tetanus_date = models.DateField(null=True, default=datetime.fromtimestamp(0))
+ allergy = models.CharField(default="", max_length=250)
+ drugs_bool = models.BooleanField(default=False)
+ drugs = models.CharField(default="", max_length=250)
+ misc_bool = models.BooleanField(default=False)
+ misc = models.CharField(default="", max_length=250)
+ vac_certificate = models.FileField(upload_to='documents/', null=True)
+ health_care_certificate = models.FileField(default=None, upload_to='documents/', null=True)
+
+
+class Document(models.Model):
+ user = models.ForeignKey(User, default=None, on_delete=models.CASCADE)
+ group = models.ForeignKey(Group, default=None, on_delete=models.CASCADE)
+ code = models.IntegerField(default=0)
+ compilation_date = models.DateTimeField(auto_now_add=True)
+ status = models.CharField(default="", max_length=50)
+ document_type = models.ForeignKey(
+ DocumentType, default=None, on_delete=models.PROTECT)
+
+ personal_data = models.ForeignKey(
+ PersonalData, default=None, on_delete=models.PROTECT, null=True)
+
+ medical_data = models.ForeignKey(
+ MedicalData, default=None, on_delete=models.SET_NULL, null=True)
+
+ signed_doc = models.FileField(default=None, upload_to='documents/', null=True)
+
+ class Meta:
+ permissions = [
+ ("approved", "The user is approved"),
+ ("staff", "The user is staff of the non primary group")
+ ]
+
+
+class KeyVal(models.Model):
+ container = models.ForeignKey(
+ Document, db_index=True, on_delete=models.CASCADE)
+ key = models.CharField(max_length=240, db_index=True)
+ value = models.CharField(max_length=240, db_index=True)
+
+
+class Keys(models.Model):
+ container = models.ForeignKey(
+ DocumentType, db_index=True, on_delete=models.CASCADE)
+ key = models.CharField(max_length=240, db_index=True)
+
+
+class UserCode(models.Model):
+ user = models.ForeignKey(User, default=None, on_delete=models.CASCADE)
+ medic = models.ForeignKey(MedicalData, default=None, on_delete=models.PROTECT)
+ code = models.IntegerField(default=0)
+ parent_name = models.CharField(default="", max_length=250)
+ via = models.CharField(default="", max_length=250)
+ cap = models.CharField(default="", max_length=250)
+ country = models.CharField(default="", max_length=250)
+ nationality = models.CharField(default="", max_length=250)
+ born_date = models.DateField(null=True, default=datetime.fromtimestamp(0))
+ home_phone = models.CharField(default="", max_length=250)
+ phone = models.CharField(default="", max_length=250)
+ school = models.CharField(default="", max_length=250)
+ year = models.IntegerField(default=0)
+ avs_number = models.CharField(default="", max_length=250)
+
+class GroupSettings(models.Model):
+ group = models.ForeignKey(Group, default=None, on_delete=models.CASCADE)
+ view_documents = models.BooleanField(default=False)
diff --git a/client/templates/client/index.html b/client/templates/client/index.html index 7f0edec..1fc6c73 100644 --- a/client/templates/client/index.html +++ b/client/templates/client/index.html @@ -17,6 +17,18 @@ {% if user.is_authenticated %} {% if user.is_staff or perms.client.approved %} + <div id="modal_capi" class="modal"> + <div class="modal-content"> + <h4>Attenzione</h4> + <p>Il tuo capo branca verrĂ notificato dell'accesso alla pagina dei documenti.<br> + Sei sicuro di voler continuare? + </p> + </div> + <div class="modal-footer"> + <a style="color:red" href="#!" class="modal-close waves-effect waves-green btn-flat">Annulla</a> + <a href="{% url 'doclistro' %}" class="modal-close waves-effect waves-green btn-flat">Continua</a> + </div> + </div> {% if not empty %} <ul class="collapsible"> {% for doc in docs %} diff --git a/client/views.py b/client/views.py index 6f8efb3..73a252a 100644 --- a/client/views.py +++ b/client/views.py @@ -1,6 +1,6 @@ from random import randint from django.contrib.auth.models import Group, Permission, User -from client.models import UserCode, Keys, DocumentType, Document, PersonalData, KeyVal, MedicalData +from client.models import GroupSettings, UserCode, Keys, DocumentType, Document, PersonalData, KeyVal, MedicalData from django.db.models import Q from django.http import HttpResponseRedirect, FileResponse, HttpResponse from django.contrib.auth.decorators import login_required @@ -17,6 +17,7 @@ import pytz 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")): @@ -39,6 +40,19 @@ def index(request): user_code = "U" + str(usercode.code) context = {"user_code": user_code} else: + # get user group + group = request.user.groups.values_list('name', flat=True)[0] + + # get group settings + settings = GroupSettings.objects.filter(group__name=group) + + # check if settings exists + if len(settings) == 0: + group_view = False + else: + # set settings value + group_view = settings[0].view_documents + # user action if request.method == "POST": # get document id @@ -123,6 +137,7 @@ def index(request): context = { "docs": out, "empty": len(out) == 0, + "group_view": group_view, } return render(request, 'client/index.html', context) |