diff options
Diffstat (limited to 'accounts/views.py')
-rw-r--r-- | accounts/views.py | 371 |
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 |