aboutsummaryrefslogtreecommitdiffstats
path: root/accounts/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'accounts/views.py')
-rw-r--r--accounts/views.py371
1 files changed, 1 insertions, 370 deletions
diff --git a/accounts/views.py b/accounts/views.py
index 145fa9e..a76ba8d 100644
--- a/accounts/views.py
+++ b/accounts/views.py
@@ -376,61 +376,9 @@ def personal(request):
def personal_wrapper(request, errors):
context = {}
ok_message = ""
- personal_active = "active"
- medic_active = ""
- settings_active = ""
- # additional user information
- usercode = UserCode.objects.filter(user=request.user)[0]
- # medical info
- medic = usercode.medic
- # values for multiple choice box
- # TODO remove multiple choice
- branca_default = ""
- branca_castorini = ""
- branca_lupetti = ""
- branca_esploratori = ""
- branca_pionieri = ""
- branca_rover = ""
-
- # variables for validation
- validation_dic = {}
- required_fields = ["first_name", "last_name", "email", "parent_name", "via", "cap", "country", "nationality", "phone", "avs_number", "emer_name", "emer_relative", "cell_phone", "address", "health_care", "injuries", "rc", "medic_name", "medic_phone", "medic_address"]
- personal_fields = ["first_name", "last_name", "email", "parent_name", "via", "cap", "country", "nationality", "phone", "avs_number"]
- medic_fields = ["emer_name", "emer_relative", "cell_phone", "address", "health_care", "injuries", "rc", "medic_name", "medic_phone", "medic_address"]
if request.method == "POST":
- # requested download
- if request.POST['action'] == "download_vac":
- if medic.vac_certificate != None:
- filename = os.path.basename(medic.vac_certificate.name)
- filename = filename[filename.find("_")+1:]
- if filename.rfind('.') != -1:
- filename = filename[:filename.rfind('.')]
- filename = filename + ".jpg"
-
- # encode in JPEG
- im = Image.open(medic.vac_certificate.file)
- im_io = BytesIO()
- im.save(im_io, 'JPEG', quality=90)
- im_io.seek(0)
- return FileResponse(im_io, as_attachment=True, filename=filename)
-
- elif request.POST['action'] == "download_health":
- if medic.health_care_certificate != None:
- filename = os.path.basename(medic.health_care_certificate.name)
- filename = filename[filename.find("_")+1:]
- if filename.rfind('.') != -1:
- filename = filename[:filename.rfind('.')]
- filename = filename + ".jpg"
-
- # encode in JPEG
- im = Image.open(medic.health_care_certificate.file)
- im_io = BytesIO()
- im.save(im_io, 'JPEG', quality=90)
- im_io.seek(0)
- return FileResponse(im_io, as_attachment=True, filename=filename)
-
- elif request.POST['action'] == "password":
+ if request.POST['action'] == "password":
# get form object
if request.user.has_usable_password():
form2 = PasswordChangeForm(data=request.POST, user=request.user)
@@ -441,11 +389,7 @@ def personal_wrapper(request, errors):
if form2.is_valid():
form2.save()
ok_message = "Password modificata con successo"
- personal_active = ""
- settings_active = "active"
else:
- personal_active = ""
- settings_active = "active"
for field in form2.errors.as_data().values():
for err in field:
if err.code == "password_mismatch":
@@ -461,296 +405,14 @@ def personal_wrapper(request, errors):
elif err.code == "password_incorrect":
errors.append("La password attuale è incorretta")
- else:
- # set all attributes
- request.user.first_name = request.POST["first_name"]
- request.user.last_name = request.POST["last_name"]
- request.user.email = request.POST["email"]
- request.user.save()
- usercode.parent_name = request.POST["parent_name"]
- usercode.via = request.POST["via"]
- usercode.cap = request.POST["cap"]
- usercode.country = request.POST["country"]
- usercode.nationality = request.POST["nationality"]
- usercode.born_date = dateparser.parse(request.POST["birth_date"])
- usercode.home_phone = request.POST["home_phone"]
- usercode.phone = request.POST["phone"]
- usercode.school = request.POST["school"]
- usercode.avs_number = request.POST["avs_number"]
-
- if request.POST["year"].isdigit():
- usercode.year = request.POST["year"]
- else:
- errors.append("L'anno scolastico deve essere un numero")
-
- usercode.save()
-
- medic.emer_name = request.POST["emer_name"]
- medic.emer_relative = request.POST["emer_relative"]
- medic.cell_phone = request.POST["cell_phone"]
- medic.address = request.POST["address"]
- medic.emer_phone = request.POST["emer_phone"]
- medic.health_care = request.POST["health_care"]
- medic.injuries = request.POST["injuries"]
- medic.rc = request.POST["rc"]
- medic.rega = "rega" in request.POST
- medic.medic_name = request.POST["medic_name"]
- medic.medic_phone = request.POST["medic_phone"]
- medic.medic_address = request.POST["medic_address"]
- medic.sickness = request.POST["sickness"]
- medic.vaccine = request.POST["vaccine"]
- medic.tetanus_date = dateparser.parse(request.POST["tetanus_date"])
- medic.allergy = request.POST["allergy"]
- medic.drugs_bool = "drugs_bool" in request.POST
- medic.drugs = request.POST["drugs"]
- medic.misc_bool = "misc_bool" in request.POST
- medic.misc = request.POST["misc"]
- medic.save()
-
- missing_fields = False
- missing_personal_field = False
-
- if request.POST["birth_date"] == "" or request.POST["birth_date"] == "01 Gennaio 1970" or request.POST["birth_date"] == "None":
- validation_dic["birth_date"] = 'class="datepicker validate invalid" required="" aria-required="true"'
- missing_fields = True
- missing_personal_field = True
- else:
- validation_dic["birth_date"] = 'class="datepicker validate" required="" aria-required="true"'
-
- for i in required_fields:
- if request.POST[i] == "":
- missing_fields = True
- if i in personal_fields:
- missing_personal_field = True
- validation_dic[i] = 'class="validate invalid" required="" aria-required="true"'
- else:
- validation_dic[i] = 'class="validate" required="" aria-required="true"'
-
- if missing_fields:
- errors.append("Alcuni campi richiesti non sono stati compilati")
- if not missing_personal_field:
- personal_active = ""
- medic_active = "active"
-
- # if "branca" in request.POST:
- # if request.POST["branca"] != "":
- # request.user.groups.clear()
- # request.user.groups.add(
- # Group.objects.get(name=request.POST["branca"]))
-
- # check if user uploaded a file
- if "vac_certificate" in request.FILES:
- files = request.FILES.getlist('vac_certificate')
- name = files[0].name
- try:
- # if multiple files concatenate pictures
- im = Image.new("RGB", (0, 0), (255, 255, 255))
- for f in files:
- if f.name.endswith(".pdf") or f.name.endswith(".PDF"):
- images = convert_from_bytes(f.read())
- for i in images:
- dst = Image.new('RGB', (max(im.width, i.width), im.height + i.height), (255, 255, 255))
- dst.paste(im, (0, 0))
- dst.paste(i, (0, im.height))
- im = dst
- else:
- i = Image.open(f)
- dst = Image.new('RGB', (max(im.width, i.width), im.height + i.height), (255, 255, 255))
- dst.paste(im, (0, 0))
- dst.paste(i, (0, im.height))
- im = dst
-
- im_io = BytesIO()
- # resize image if larger than max value
- if im.height > 16383:
- im = im.resize((round(im.width/im.height*16383), 16383))
- # compress image in WEBP
- im.save(im_io, 'WEBP', quality=50, method=4)
- medic.vac_certificate.save(
- request.user.username+"_"+name, im_io)
- medic.save()
- except UnidentifiedImageError:
- errors.append("Il certificato delle vaccinazioni non è un immagine valida")
- except PDFPageCountError:
- errors.append("Il certificato delle vaccinazioni non è un pdf valido")
- except PDFSyntaxError:
- errors.append("Il certificato delle vaccinazioni non è un pdf valido")
- except IOError:
- errors.append("Il certificato delle vaccinazioni è un immagine troppo grande")
-
- if "health_care_certificate" in request.FILES:
- files = request.FILES.getlist('health_care_certificate')
- name = files[0].name
- try:
- # if multiple files concatenate pictures
- im = Image.new("RGB", (0, 0), (255, 255, 255))
- for f in files:
- if f.name.endswith(".pdf") or f.name.endswith(".PDF"):
- images = convert_from_bytes(f.read())
- for i in images:
- dst = Image.new('RGB', (max(im.width, i.width), im.height + i.height), (255, 255, 255))
- dst.paste(im, (0, 0))
- dst.paste(i, (0, im.height))
- im = dst
- else:
- i = Image.open(f)
- dst = Image.new('RGB', (max(im.width, i.width), im.height + i.height), (255, 255, 255))
- dst.paste(im, (0, 0))
- dst.paste(i, (0, im.height))
- im = dst
-
- im_io = BytesIO()
- # resize image if larger than max value
- if im.height > 16383:
- im = im.resize((round(im.width/im.height*16383), 16383))
- # compress image in WEBP
- im.save(im_io, 'WEBP', quality=50, method=4)
- medic.health_care_certificate.save(
- request.user.username+"_"+name, im_io)
- medic.save()
- except UnidentifiedImageError:
- errors.append("La tessera della cassa malati non è un immagine valida")
- except PDFPageCountError:
- errors.append("La tessera della cassa malati non è un pdf valido")
- except PDFSyntaxError:
- errors.append("La tessera della cassa malati non è un pdf valido")
- except IOError:
- errors.append("La tessera della cassa malati è un immagine troppo grande")
-
- # user requested file delete
- if request.POST["delete_vac"] == 'vac':
- medic.vac_certificate = None
- medic.save()
-
- if request.POST["delete_health"] == 'health':
- medic.health_care_certificate = None
- medic.save()
-
- # if there wasn't any error redirect to clear POST
- if len(errors) == 0:
- return HttpResponseRedirect(request.get_full_path())
-
- else:
- # no post, create empty validation
- validation_dic["birth_date"] = 'class="datepicker validate" required="" aria-required="true"'
- for i in required_fields:
- validation_dic[i] = 'class="validate" required="" aria-required="true"'
-
- # check if user is in a group and set multiple choice to that
- if len(request.user.groups.values_list('name', flat=True)) == 0:
- branca_default = "selected"
- else:
- parent_group = request.user.groups.values_list('name', flat=True)[0]
- if parent_group == "diga":
- branca_castorini = "selected"
- elif parent_group == "muta":
- branca_lupetti = "selected"
- elif parent_group == "reparto":
- branca_esploratori = "selected"
- elif parent_group == "posto":
- branca_pionieri = "selected"
- elif parent_group == "clan":
- branca_rover = "selected"
- else:
- branca_default = "selected"
-
- # set checkbox status
- rega = ""
- if medic.rega:
- rega = "checked='checked'"
- drugs = ""
- if medic.drugs_bool:
- drugs = "checked='checked'"
- misc = ""
- if medic.misc_bool:
- misc = "checked='checked'"
-
- # set file name for uploaded files
- if (medic.vac_certificate != None):
- vac_name = os.path.basename(medic.vac_certificate.name)
- vac_name = vac_name[vac_name.find("_")+1:]
- else:
- vac_name = ''
-
- if (medic.health_care_certificate != None):
- card_name = os.path.basename(medic.health_care_certificate.name)
- card_name = card_name[card_name.find("_")+1:]
- else:
- card_name = ''
-
- # check if user is connected with midata
- midata_user = (usercode.midata_id > 0)
- midata_disable = ""
-
- # get user info from midata
- if midata_user:
- midata_disable = " readonly disabled"
- if not copy_from_midata(request, usercode):
- return HttpResponseRedirect(request.get_full_path())
-
usable_password = request.user.has_usable_password()
- # check if user has saved the form
- home_tooltip = False
- if "saved" in request.GET:
- # show tooltip only if user is not approved and there are no errors
- home_tooltip = (not request.user.has_perm("client.approved")) and (len(errors) == 0)
-
# fill context
context = {
- 'validation_dic': validation_dic,
- 'first_name': request.user.first_name,
- 'last_name': request.user.last_name,
'email': request.user.email,
- 'parent_name': usercode.parent_name,
- 'via': usercode.via,
- 'cap': usercode.cap,
- 'country': usercode.country,
- 'nationality': usercode.nationality,
- 'birth_date': usercode.born_date,
- 'home_phone': usercode.home_phone,
- 'phone': usercode.phone,
- 'school': usercode.school,
- 'year': usercode.year,
- 'avs_number': usercode.avs_number,
- 'branca_default': branca_default,
- 'branca_castorini': branca_castorini,
- 'branca_lupetti': branca_lupetti,
- 'branca_esploratori': branca_esploratori,
- 'branca_pionieri': branca_pionieri,
- 'branca_rover': branca_rover,
- 'emer_name': medic.emer_name,
- 'emer_relative': medic.emer_relative,
- 'cell_phone': medic.cell_phone,
- 'address': medic.address,
- 'emer_phone': medic.emer_phone,
- 'health_care': medic.health_care,
- 'injuries': medic.injuries,
- 'rc': medic.rc,
- 'rega_check': rega,
- 'medic_name': medic.medic_name,
- 'medic_phone': medic.medic_phone,
- 'medic_address': medic.medic_address,
- 'sickness': medic.sickness,
- 'vaccine': medic.vaccine,
- 'tetanus_date': medic.tetanus_date,
- 'allergy': medic.allergy,
- 'drugs_check': drugs,
- 'drugs': medic.drugs,
- 'misc_check': misc,
- 'misc': medic.misc,
- 'health_care_certificate': card_name,
- 'vac_certificate': vac_name,
'errors': errors,
'ok_message': ok_message,
- 'midata_user': midata_user,
- 'midata_disable': midata_disable,
'usable_password': usable_password,
- 'personal_active': personal_active,
- 'medic_active': medic_active,
- 'settings_active': settings_active,
- 'midata_enabled': MIDATA_ENABLED,
- 'home_tooltip': home_tooltip,
}
return render(request, 'accounts/index.html', context)
@@ -832,37 +494,6 @@ def edit(request, code):
im_io.seek(0)
return FileResponse(im_io, as_attachment=True, filename=filename)
- elif request.POST['action'] == "password":
- # get form object
- if request.user.has_usable_password():
- form2 = PasswordChangeForm(data=request.POST, user=request.user)
- else:
- form2 = SetPasswordForm(data=request.POST, user=request.user)
-
- # if form is valid and terms were accepted save user
- if form2.is_valid():
- form2.save()
- ok_message = "Password modificata con successo"
- personal_active = ""
- settings_active = "active"
- else:
- personal_active = ""
- settings_active = "active"
- for field in form2.errors.as_data().values():
- for err in field:
- if err.code == "password_mismatch":
- errors.append("Le due password non sono uguali")
- elif err.code == "password_too_similar":
- errors.append("La password è troppo simile all'username")
- elif err.code == "password_too_short":
- errors.append("La password è troppo corta")
- elif err.code == "password_too_common":
- errors.append("La password è troppo comune")
- elif err.code == "password_entirely_numeric":
- errors.append("La password deve contenere lettere")
- elif err.code == "password_incorrect":
- errors.append("La password attuale è incorretta")
-
elif request.POST['action'] == "delete_uc":
confirm_name = request.POST['del_name']
correct_name = usercode.first_name + " " + usercode.last_name