def verify_cf(request): """ Verifica che il codice fiscale sia conforme ai dati inseriti nel form, altrimenti mostra quali dati sono errati :request: request contenente i dati del cittadino :return: dic con True/False """ try: fiscal_code = request.POST.get('fiscalNumber').upper() belfiore_code = request.POST.get('placeOfBirth') if request.POST.get('placeOfBirth') else request.POST.get( 'nationOfBirth') verify_fiscal_code = { 'familyName': fiscal_code[0:3] == codicefiscale.encode_surname(request.POST.get('familyName')), 'name': fiscal_code[3:6] == codicefiscale.encode_surname(request.POST.get('name')), 'gender': codicefiscale.decode(fiscal_code)['sex'] == request.POST.get('gender'), 'dateOfBirth': codicefiscale.decode(fiscal_code)['birthdate'] == datetime.datetime.strptime( request.POST.get('dateOfBirth'), '%d/%m/%Y'), 'belfiore_code': codicefiscale.decode(fiscal_code)['birthplace']['code'] == belfiore_code } if belfiore_code == 'Z998': verify_fiscal_code['status_code'] = StatusCode.BAD_REQUEST.value return verify_fiscal_code calculated_cf = codicefiscale.encode(request.POST.get('familyName'), request.POST.get('name'), request.POST.get('gender'), request.POST.get('dateOfBirth'), belfiore_code ) if fiscal_code == calculated_cf.upper(): verify_fiscal_code = { 'status_code': StatusCode.OK.value, 'familyName': True, 'name': True, 'gender': True, 'dateOfBirth': True, 'belfiore_code': True, } else: verify_fiscal_code['status_code'] = StatusCode.ERROR.value except Exception as e: LOG.error("Exception: {}".format(str(e)), extra=set_client_ip()) verify_fiscal_code = { 'status_code': StatusCode.EXC.value, } return verify_fiscal_code
def decode_fiscal_number(request): """ Estrae i dati a partire dal codice fiscale :return: JsonResponse con statusCode e dati (in caso di successo) """ cf = request.GET.get('CF').upper() try: isvalid = codicefiscale.is_valid(cf) or codicefiscale.is_omocode(cf) decode_cf = codicefiscale.decode(cf) if isvalid: am = AddressMunicipality.objects.filter( code__iexact=decode_cf['birthplace']['code']).first() if am: nation_code = 'Z000' else: nation_code = decode_cf['birthplace']['code'] return JsonResponse({ 'statusCode': StatusCode.OK.value, 'codeOfNation': nation_code, 'placeOfBirth': '', 'countyOfBirth': '', 'dateOfBirth': decode_cf['birthdate'].strftime('%d/%m/%Y'), 'gender': decode_cf['sex'] }) StatusCode_city, city = get_city_id( decode_cf['birthplace']['code'], decode_cf['birthdate'].strftime('%Y-%m-%d')) if StatusCode_city == 200: return JsonResponse({ 'statusCode': StatusCode.OK.value, 'codeOfNation': nation_code, 'placeOfBirth': decode_cf['birthplace']['code'], 'countyOfBirth': city, 'dateOfBirth': decode_cf['birthdate'].strftime('%d/%m/%Y'), 'gender': decode_cf['sex'] }) except Exception as e: LOG.warning("Exception: {}".format(str(e)), extra=set_client_ip(request)) return JsonResponse({'statusCode': StatusCode.EXC.value}) return JsonResponse({'statusCode': StatusCode.ERROR.value})
def test_decode_invalid_syntax(self): # invalid surname with self.assertRaises(ValueError): codicefiscale.decode('CC0FBA85X03L219P') # invalid name with self.assertRaises(ValueError): codicefiscale.decode('CCCFB085X03L219P') # invalid date-year with self.assertRaises(ValueError): codicefiscale.decode('CCCFBA8XD03L219S') # invalid date-month with self.assertRaises(ValueError): codicefiscale.decode('CCCFBA85X03L219P') # invalid date-day with self.assertRaises(ValueError): codicefiscale.decode('CCCFBA85D00L219P')
def shibboleth_login(request, flag): meta = request.META user, created = User.objects.get_or_create(username=meta["eppn"]) if created: user.set_unusable_password() if user.email == '' and "mail" in meta: user.email = meta["mail"] if user.first_name == '' and "givenName" in meta: user.first_name = str(meta["givenName"]).capitalize() if user.last_name == '' and "sn" in meta: user.last_name = str(meta["sn"]).capitalize() user.save() if flag: if 'unimorecodicefiscale' in meta: if user.profile.cf == '': user.profile.cf = meta['unimorecodicefiscale'] cf = '' try: cf = codicefiscale.decode(meta['unimorecodicefiscale']) if user.profile.data_nascita is None and cf != '': user.profile.data_nascita = cf['birthdate'] if user.profile.luogo_nascita is None and cf != '': #luogo_nascita = cf['birthplace']['name'].lower().capitalize() #luogo_nascita = luogo_nascita.replace('(soppresso)', '').strip() luogo_nascita_code = cf['birthplace']['code'] user.profile.luogo_nascita = Comune.objects.filter( codice_catastale=luogo_nascita_code)[0] if user.profile.sesso is None and cf != '': user.profile.sesso = cf['sex'] except: pass if user.profile.qualifica is None: pass user.save() user.backend = 'django.contrib.auth.backends.ModelBackend' login(request, user) request.GET.urlencode() return HttpResponseRedirect(get_success_url(request))
def clean_fiscalNumber(self): fiscalNumber = self.cleaned_data.get('fiscalNumber').upper() message = "Il codice fiscale inserito non è valido" try: isvalid = codicefiscale.is_valid(fiscalNumber) or codicefiscale.is_omocode(fiscalNumber) birth_date = codicefiscale.decode(fiscalNumber)['birthdate'] if isvalid and calculate_age(birth_date) < 18: isvalid = False message = "Il codice fiscale inserito deve appartenere ad una persona maggiorenne" if isvalid and fiscalNumber in get_all_operator_cf(): isvalid = False message = "Il codice fiscale inserito non deve appartenere ad un operatore/admin" except Exception as e: LOG.warning("Warning: {}".format(str(e)), extra=set_client_ip()) isvalid = False if not isvalid: raise ValidationError(message) return
def post(self): """ EU Digital COVID certificate Mobile QrCode """ content = request.json if g.status == 200: if 'token_GP' in content: try: username = g.response['user']['userId'] name_data = g.response['user']['firstName'] surname_data = g.response['user']['lastName'] cf = codicefiscale.decode(g.response['user']['codFis']) birthdate_data = cf['birthdate'] _result, expiry, msg = checkGP( name_data, surname_data, birthdate_data.strftime("%Y-%m-%d"), content['token_GP']) if _result: user = UserAccess.query.filter_by( username=username).first() if user is not None: user.greenpass = True user.GP_expire = expiry db.session.commit() else: u = UserAccess(username=username, persId=None, grpId=g.response['user']['grpId'], stuId=None, matId=None, matricola=None, cdsId=None, GP_expire=expiry, greenpass=True) db.session.add(u) db.session.commit() return returnMessage(msg, 1, "#00AA00", 3), 200 else: return returnMessage(msg, 1, "#AA0000", 3), 500 except: if (content['token_GP'].isdecimal()): print( "GreenPass Token: GP sgualcito o non riconosciuto") return returnMessage( "\n\n\u274C\u274C Certificazione Verde non leggibile! \u274C\u274C", 1, "#AA0000", 3), 500 else: try: base64_bytes = content['token_GP'].encode('utf-8') message_bytes = base64.b64decode(base64_bytes) token_string = message_bytes.decode('utf-8') t = token_string.split(":") if (3 <= len(t) <= 4): print( "GreenPass Token: Scansione QR-Universitario (capra)" ) return returnMessage( "\n\n\u274C\u274C Non utilizzare il QR-Code universitario! \u274C\u274C", 1, "#AA0000", 3), 500 else: print("Unexpected error:") print("Title: " + sys.exc_info()[0].__name__) print("Description: " + traceback.format_exc()) print("GreenPass Token: " + content['token_GP']) print("Username: "******"\n\n\u274C\u274C Token non valido!! \u274C\u274C", 1, "#AA0000", 3), 500 except: print("Unexpected error:") print("Title: " + sys.exc_info()[0].__name__) print("Description: " + traceback.format_exc()) print("GreenPass Token: " + content['token_GP']) print("Username: "******"\n\n\u274C\u274C Token non valido \u274C\u274C", 1, "#AA0000", 3), 500 else: msg = 'Error payload' return returnMessage(msg, 1, "#AA0000", 3), 500 else: return {'errMsg': 'Wrong username/pass'}, g.status
def check(username, content, msg): try: headers = { 'Content-Type': "application/json", "Authorization": "Basic " + Config.USER_ROOT } info_request = requests.request("GET", url + "anagrafica-service-v2/utenti/" + username, headers=headers, timeout=5) _info = info_request.json() _info = _info[0] if info_request.status_code == 200: x = codicefiscale.decode(_info['codFis']) date = x['birthdate'] info = username + ":" + _info['nome'] + ":" + _info[ 'cognome'] + ":" + date.strftime("%Y-%m-%d") message_bytes = info.encode('ascii') base64_bytes = base64.b64encode(message_bytes) base64_message = base64_bytes.decode('ascii') u = Scan(id_tablet=content['id_tablet'], time_stamp=datetime.now(), username=username, result=msg, scan_by=g.response['user']['userId']) db.session.add(u) db.session.commit() return returnMessage( "\n\n\u2734\u2734 NON AUTORIZZATO \u2734\u2734\n\n" + msg, 1, "#0703FC", 3, base64_message, u.id), 501 except: user = OtherUser.query.filter_by(username=username).first() if user is not None: info = username + ":" + user.nome + ":" + user.cognome + ":" + user.birthdate.strftime( "%Y-%m-%d") message_bytes = info.encode('ascii') base64_bytes = base64.b64encode(message_bytes) base64_message = base64_bytes.decode('ascii') u = Scan(id_tablet=content['id_tablet'], time_stamp=datetime.now(), username=username, result=msg, scan_by=g.response['user']['userId']) db.session.add(u) db.session.commit() return returnMessage( "\n\n\u2734\u2734 NON AUTORIZZATO \u2734\u2734\n\n" + msg, 1, "#0703FC", 3, base64_message, u.id), 501 else: message_bytes = username.encode('ascii') base64_bytes = base64.b64encode(message_bytes) base64_message = base64_bytes.decode('ascii') u = Scan(id_tablet=content['id_tablet'], time_stamp=datetime.now(), username=username, result=msg, scan_by=g.response['user']['userId']) db.session.add(u) db.session.commit() print("Description: " + traceback.format_exc()) return returnMessage( "\n\n\u2734\u2734 NON AUTORIZZATO \u2734\u2734\n\n" + msg, 1, "#0703FC", 3, base64_message, u.id), 502
def test_decode_omocodia(self): data = [ { 'input': 'CCCFBA85D03L219P', 'result': { 'sex': 'M', 'birthdate': '03/04/1985', 'birthplace': 'Torino' }, }, { 'input': 'CCCFBA85D03L21VE', 'result': { 'sex': 'M', 'birthdate': '03/04/1985', 'birthplace': 'Torino' }, }, { 'input': 'CCCFBA85D03L2MVP', 'result': { 'sex': 'M', 'birthdate': '03/04/1985', 'birthplace': 'Torino' }, }, { 'input': 'CCCFBA85D03LNMVE', 'result': { 'sex': 'M', 'birthdate': '03/04/1985', 'birthplace': 'Torino' }, }, { 'input': 'CCCFBA85D0PLNMVA', 'result': { 'sex': 'M', 'birthdate': '03/04/1985', 'birthplace': 'Torino' }, }, { 'input': 'CCCFBA85DLPLNMVL', 'result': { 'sex': 'M', 'birthdate': '03/04/1985', 'birthplace': 'Torino' }, }, { 'input': 'CCCFBA8RDLPLNMVX', 'result': { 'sex': 'M', 'birthdate': '03/04/1985', 'birthplace': 'Torino' }, }, { 'input': 'CCCFBAURDLPLNMVU', 'result': { 'sex': 'M', 'birthdate': '03/04/1985', 'birthplace': 'Torino' }, }, ] codes = [obj['input'] for obj in data] for obj in data: # with self.subTest(obj=obj): code = obj['input'] result = obj['result'] obj_decoded = codicefiscale.decode(code) sex = obj_decoded.get('sex') self.assertFalse(sex is None) self.assertEqual(sex, result['sex']) birthdate = obj_decoded.get('birthdate') self.assertFalse(birthdate is None) self.assertEqual( birthdate, datetime.strptime(result['birthdate'], '%d/%m/%Y')) birthplace = obj_decoded.get('birthplace') self.assertFalse(birthplace is None) self.assertEqual(birthplace['name'].upper(), result['birthplace'].upper()) omocodes = obj_decoded.get('omocodes', []) self.assertEqual(128, len(omocodes)) self.assertEqual(omocodes, codes)
def test_decode(self): data = [ { 'input': 'THDSDA95P08Z330H', 'result': { 'sex': 'M', 'birthdate': '08/09/1995', 'birthplace': 'Marocco' }, }, { 'input': 'BLSLGS84C22Z145O', 'result': { 'sex': 'M', 'birthdate': '22/03/1984', 'birthplace': 'Lettonia' }, }, { 'input': 'BRNGNN71B26L219T', 'result': { 'sex': 'M', 'birthdate': '26/02/1971', 'birthplace': 'Torino' }, }, { 'input': 'CCCFBA85D03L219P', 'result': { 'sex': 'M', 'birthdate': '03/04/1985', 'birthplace': 'Torino' }, }, { 'input': 'GMBLSN84A05G674H', 'result': { 'sex': 'M', 'birthdate': '05/01/1984', 'birthplace': 'Pinerolo' }, }, { 'input': 'MRTMRA83T56A269B', 'result': { 'sex': 'F', 'birthdate': '16/12/1983', 'birthplace': 'Anagni' }, }, { 'input': 'PNLMHL79R27I158P', 'result': { 'sex': 'M', 'birthdate': '27/10/1979', 'birthplace': 'San Severo' }, }, { 'input': 'QTRDRA71P13G388J', 'result': { 'sex': 'M', 'birthdate': '13/09/1971', 'birthplace': 'Pavia' }, }, { 'input': 'TKKYKU87B68L219F', 'result': { 'sex': 'F', 'birthdate': '28/02/1987', 'birthplace': 'Torino' }, }, { 'input': 'RSSMRA68A01H501Y', 'result': { 'sex': 'M', 'birthdate': '01/01/1968', 'birthplace': 'Roma' }, }, ] for obj in data: # with self.subTest(obj=obj): result = obj['result'] obj_decoded = codicefiscale.decode(obj['input']) # print(obj_decoded) sex = obj_decoded.get('sex') self.assertFalse(sex is None) self.assertEqual(sex, result['sex']) birthdate = obj_decoded.get('birthdate') self.assertFalse(birthdate is None) self.assertEqual( birthdate, datetime.strptime(result['birthdate'], '%d/%m/%Y')) birthplace = obj_decoded.get('birthplace') self.assertFalse(birthplace is None) self.assertEqual(birthplace['name'].upper(), result['birthplace'].upper())
def clean(self): data = self.cleaned_data # controllo codice fiscale richiedente if data.get('so_cod_fis'): codice_fiscale = data.get('so_cod_fis').upper() if not codicefiscale.is_valid(codice_fiscale): raise forms.ValidationError('Codice fiscale del richiedente non corretto') dt_nascita=data.get('so_nasc_dt') str_dtnascita = str(dt_nascita.day) + '/' + str(dt_nascita.month) + '/' + str(dt_nascita.year) dati_decodecf = codicefiscale.decode(codice_fiscale) #if dati_decodecf['birthplace']['name'] != data.get('so_nasc_com').upper(): # raise forms.ValidationError('Luogo di nascita non coerente con quello ricavato dal codice fiscale del richiedente.') # cf_calcolato = codicefiscale.encode(surname=data.get('so_cognome'), name=data.get('so_nome'), sex=data.get('so_sesso'), birthdate=str_dtnascita, birthplace=data.get('so_nasc_com')) #if (cf_calcolato != codice_fiscale) and (codice_fiscale not in codicefiscale.decode(cf_calcolato)['omocodes']): # alert_msg = 'Codice fiscale del richiedente non coerente con i dati anagrafici indicati' # raise forms.ValidationError(alert_msg) data['so_cod_fis'] = codice_fiscale if data.get('pr_codfiscale'): codice_fiscale = data.get('pr_codfiscale').upper() if not codicefiscale.is_valid(codice_fiscale): raise forms.ValidationError('Codice fiscale del minore non corretto') dt_nascita=data.get('pr_nasc_dt') str_dtnascita = str(dt_nascita.day) + '/' + str(dt_nascita.month) + '/' + str(dt_nascita.year) dati_decodecf = codicefiscale.decode(codice_fiscale) # if dati_decodecf['birthplace']['name'] != data.get('pr_nasc_com').upper(): # raise forms.ValidationError('Luogo di nascita non coerente con quello ricavato dal codice fiscale del minore.') #cf_calcolato= build_cf(data.get('pr_cognome'), data.get('pr_nome'), datetime.datetime(dt_nascita.year, dt_nascita.month, dt_nascita.day), data.get('pr_sesso'), comune_cf) cf_calcolato = codicefiscale.encode(surname=data.get('pr_cognome'), name=data.get('pr_nome'), sex=data.get('pr_sesso'), birthdate=str_dtnascita, birthplace=data.get('pr_nasc_com')) #print("CF calcolato:"+cf_calcolato) #if (cf_calcolato != codice_fiscale) and (codice_fiscale not in codicefiscale.decode(cf_calcolato)['omocodes']): # raise forms.ValidationError('Codice fiscale del minore non coerente con i dati anagrafici') # controllo presenza domanda con stesso codice fiscale alunno domande_alunno = Domande.objects.filter(pr_codfiscale=codice_fiscale, pr_stato__gte=0, pr_stato__lt=5) if domande_alunno.count() > 1: if not self.instance.pk: # siamo in inserimento raise forms.ValidationError( 'Già presente in archivio una richiesta di buoni Miur per minore con cod.fiscale:' + codice_fiscale) elif self.instance.pk != domande_alunno[0].id: # in fase di modifica raise forms.ValidationError( 'Già presente in archivio una richiesta di buoni Miur per minore con cod.fiscale:' + codice_fiscale) # controllo valid. data di nascita if data.get('pr_nasc_dt'): if data.get('pr_nasc_dt') < datetime.date(2013, 1, 1): raise forms.ValidationError("Anno di nascita minimo 2013") elif data.get('pr_nasc_dt') >= date.today(): raise forms.ValidationError("Ammesse solo date passate per data nascita") # controllo presenza tutti i campi IBAN per riscossione banca if data.get('so_risc_diretta') == 'N': if not data.get('so_banca_iban'): raise forms.ValidationError("Indicare l'IBAN dell'intestatario") if data.get('pr_tipo_asilo')=='P' and (not data.get('pr_num_tot_ricevute') or not data.get('pr_importo_tot_ricevute')): raise forms.ValidationError("Indicare il numero delle ricevute di spesa da allegare con il loro importo complessivo.") # controlli sui dati domicilio per non residenti if data.get('so_flag_residente') == 0: if not (data.get('so_domicilio')): raise forms.ValidationError("Obbligatorio, per in non residenti, indicare il domicilio") if not data.get('pr_data_richiesta'): data['pr_data_richiesta'] = timezone.now #controllo su spesa mensile if data.get('pr_fascia_asilo') == 'N': if data.get('pr_spesa_mese') <= 168: raise forms.ValidationError("Si accettano solo domande con spesa mensile superiore a 168 euro.") else: if data.get('pr_spesa_mese') <= 120: raise forms.ValidationError("Si accettano solo domande con spesa mensile superiore a 120 euro.") data['so_cognome'] = data.get('so_cognome').upper() data['so_nome'] = data.get('so_nome').upper() data['so_nasc_com'] = data.get('so_nasc_com').upper() data['pr_cognome'] = data.get('pr_cognome').upper() data['pr_nome'] = data.get('pr_nome').upper() data['pr_nasc_com'] = data.get('pr_nasc_com').upper() data['so_flag_residente'] = data.get('so_flag_residente') data['pr_stato'] = 0 if data.get('pr_fascia_asilo')=='N': # controlli per fascia nido # obbligatori tutti i dati della DSU if not (data.get('pr_prot_isee_inps') and data.get('pr_data_isee_inps') and data.get('pr_isee')): raise forms.ValidationError("Riempire tutti i campi dell'attestazione DSU" ) #controllo protocollo INPS currdata = timezone.now() curranno = currdata.strftime("%Y") protdsu=data.get('pr_prot_isee_inps').upper() prefix = 'INPS-ISEE-' prima_parte_curranno = prefix + curranno + '-' prima_parte_annoprec = prefix + str(int(curranno)-1) + '-' if ((protdsu[0:15] != prima_parte_curranno) and (protdsu[0:15] != prima_parte_annoprec)) or (protdsu[24:27] != '-00') or (protdsu == prefix + curranno +'-XXXXXXXXX-00'): #or (protdsu == 'INPS-ISEE-' + curranno + '-XXXXXXXXX-00') raise forms.ValidationError('Inserire un numero protocollo DSU nel formato INPS-ISEE-anno-XXXXXXXXX-00 con anno '+ str(int(curranno)-1) + ' oppure ' + curranno) data['pr_prot_isee_inps'] = protdsu # controlli sulla data DSU datadsu=data.get('pr_data_isee_inps') if datadsu < datetime.date(int(curranno)-1, 1, 1): raise forms.ValidationError("Ammesse solo date dal I gennaio " + str(int(curranno)-1)) elif datadsu > datetime.date.today(): raise forms.ValidationError("Ammesse solo date passate") if data.get('pr_tipo_asilo') == 'C': #svuota i campi delle ricevute se l'asilo è pubblico data['pr_num_tot_ricevute'] = None data['pr_importo_tot_ricevute'] = None return data
def create_racconto(request): # Controllo se c'è un concorso attivo idEvent = id_active_event() permissions = get_permission(request.user.email) if idEvent is not None: # Calcolo informazioni del concorso da passare alla template is_submittable = is_active_event_submittible( ) # Controllo se è possibile fare invio racconto titolo_concorso = events.objects.all().get(pk=idEvent).eventName # Controllo se l'autore ha già sottomesso il racconto # in questo caso mostrerà il form solo in lettura # CASO RACCONTO INVIATO if is_submitted_in_active_event(request.user.email): # print("RACCONTO INVIATO") racconto_inviato = racconti.objects.filter( idEvent=id_active_event(), idUser=request.user.email)[0] # Costruisco il form da inviare per mostrare i dati del racconto form = raccontiModelForm() form.fields["title"] = forms.CharField( label="Titolo del racconto", max_length=128, initial=racconto_inviato.title, disabled=True) form.fields["content"] = forms.CharField( widget=forms.Textarea(attrs={ 'rows': 20, 'maxlength': MAX_NUM_CHAR }), label="Testo del racconto ANONIMO (massimo " + str(MAX_NUM_CHAR) + " caratteri)", initial=racconto_inviato.content, disabled=True) form.fields["coAuthors"] = forms.CharField( widget=forms.Textarea(attrs={ 'rows': 10, 'maxlength': 8000 }), label="Coautori in caso di testo collettivo (nome, cognome" " e indirizzo email istituzionale)", required=False, initial=racconto_inviato.coAuthors, disabled=True) form.fields["contacts"] = forms.CharField( label="Recapito telefonico", max_length=128, initial=racconto_inviato.contacts, disabled=True) form.fields["publishingPermission"] = forms.ChoiceField( widget=forms.CheckboxInput(), # .RadioSelect(), initial=racconto_inviato.publishingPermission, choices=[(True, 'Si'), (False, 'No')], label= 'Autorizzo la Biblioteca di Ateneo alla pubblicazione del mio racconto', required=False, disabled=True) # form.fields["visioneregolamento"] = forms.ChoiceField(widget=forms.RadioSelect(), # initial=True, choices=[(True, 'Si'), (False, 'No')], # label='Dichiaro di aver preso visione del regolamento del concorso e di accettare le condizioni <a href="https://www.biblio.unimib.it/it/terza-missione/concorso-letterario" target="_blank">LINK</a>', # required=False, disabled=True) # form.fields["visioneinformativa"] = forms.ChoiceField(widget=forms.RadioSelect(), # initial=True, choices=[(True, 'Si'), (False, 'No')], # label="Dichiaro di aver preso visione dell'informativa privacy all'indirizzo <a href = 'https://www.unimib.it/sites/default/files/allegati/informativa_eventi_e_iniziative.pdf' target = '_blank' >LINK</a>", # required=False, disabled=True) context = { 'form': form, 'idEvent': idEvent, 'titolo_concorso': titolo_concorso, 'is_submitted_in_active_event': True, 'is_submittable': is_submittable, 'MAX_NUM_CHAR': None, 'is_not_valid_user': False } context.update(permissions) return render(request, 'create_racconto.html', context) # Controllo se il periodo delle sottomissioni è attivo # (l'autore non ha inviato nessun racconto) # CASO RACCONTO INVIABILE elif is_submittable: # print("RACCONTO INVIABILE") # if this is a POST request we need to process the form data if request.method == 'POST': # create a form instance and populate it with data from the request: form = raccontiModelForm(request.POST) # check whether it's valid: if form.is_valid(): # Estrazione dati da Esse3 user = studente_email(request.user.email) if user is not None: # l'utente è di tipo @campus.unimib.it authorSurname = user["cognome"] authorForename = user["nome"] authorBirthDate = codicefiscale.decode( user["codFis"])["birthdate"] authorStatus = "Studente" authorDetail = user["tipoCorsoDes"] + " " + user[ "cdsDes"] + " " + user["cdsCod"] else: # l'utente è di tipo @unimib.it user = dipendente_email(request.user.email) if user is None: # Si tratta ad esempio di una casella di struttura print("is_not_valid_user") return render( request, 'create_racconto.html', { 'idEvent': idEvent, 'is_not_valid_user': True, 'titolo_concorso': titolo_concorso, }) authorSurname = user["cognome"] authorForename = user["nome"] authorBirthDate = codicefiscale.decode( user["codFis"])["birthdate"] # print(authorBirthDate, type(authorBirthDate)) authorStatus = user["dsTipoRuolo"] authorDetail = user["dsTipoRuolo"] # Racconto da salvare racconto = racconti( counter=get_counter(), idUser=request.user.email, idEvent=events.objects.get(pk=id_active_event()), title=form.cleaned_data["title"], content=form.cleaned_data["content"], submissionDate=datetime.now(), publishingPermission=eval( form.cleaned_data["publishingPermission"]), contacts=form.cleaned_data["contacts"], coAuthors=form.cleaned_data["coAuthors"], authorSurname=authorSurname, authorForename=authorForename, authorBirthDate=authorBirthDate, authorStatus=authorStatus, authorDetail=authorDetail) racconto.save() # LOG operazione insert_log( username=request.user.email, operationDate=datetime.now(), roleUser="******", type="Inserimento racconto", description= "Inserimento racconto con id = {idRacconto} per il concorso con id = {id}" .format(id=id_active_event(), idRacconto=racconto.pk), ) #Invio email di notifica all'utente subject = "[Notifica invio racconto concorso - {concorso}]".format( concorso=events.objects.all().get( pk=idEvent).eventName) body = "Il racconto da te inviato è stato memorizzato.<br><br><br><br>Questo messaggio è una notifica automatica, qualunque risposta verrà ignorata." subject = subject.encode("utf8").decode() body = body.encode("utf8").decode() emailsender(subject, body, [request.user.email], [], []) return HttpResponseRedirect(reverse('create_racconto')) # if a GET (or any other method) we'll create a blank form else: form = raccontiModelForm() # Controllo che il racconto non sia più inviabile # in questo caso mostro il form vuoto in sola lettura # (l'autore non ha inviato nessun racconto) # CASO RACCONTO NON INVIATO E NON INVIABILE # elif not is_submittable: # print("RACCONTO NON INVIABILE") form = raccontiModelForm() form.fields["title"] = forms.CharField(label="Titolo del racconto", max_length=128, disabled=True) form.fields["content"] = forms.CharField( widget=forms.Textarea(attrs={ 'rows': 20, 'maxlength': MAX_NUM_CHAR }), label="Testo del racconto ANONIMO (massimo " + str(MAX_NUM_CHAR) + " caratteri)", disabled=True) form.fields["coAuthors"] = forms.CharField( widget=forms.Textarea(attrs={ 'rows': 10, 'maxlength': 8000 }), label="Coautori in caso di testo collettivo (nome, cognome" " e indirizzo email istituzionale)", required=False, disabled=True) form.fields["contacts"] = forms.CharField( label="Recapito telefonico", max_length=128, disabled=True) form.fields["publishingPermission"] = forms.ChoiceField( widget=forms.CheckboxInput(), # .RadioSelect(), choices=[(True, 'Si'), (False, 'No')], label= 'Autorizzo la Biblioteca di Ateneo alla pubblicazione del mio racconto', required=False, disabled=True) # form.fields["visioneregolamento"] = forms.ChoiceField(widget=forms.RadioSelect(), # initial=True, choices=[(True, 'Si'), (False, 'No')], # label='Dichiaro di aver preso visione del regolamento del concorso e di accettare le condizioni <a href="https://www.biblio.unimib.it/it/terza-missione/concorso-letterario" target="_blank">LINK</a>', # required=False, disabled=True) # form.fields["visioneinformativa"] = forms.ChoiceField(widget=forms.RadioSelect(), # initial=True, choices=[(True, 'Si'), (False, 'No')], # label="Dichiaro di aver preso visione dell'informativa privacy all'indirizzo <a href = 'https://www.unimib.it/sites/default/files/allegati/informativa_eventi_e_iniziative.pdf' target = '_blank' >LINK</a>", # required=False, disabled=True) context = { 'form': form, 'idEvent': idEvent, 'titolo_concorso': titolo_concorso, 'is_submitted_in_active_event': False, 'is_submittable': is_submittable, 'MAX_NUM_CHAR': None, 'is_not_valid_user': False } context.update(permissions) return render(request, 'create_racconto.html', context) else: form = raccontiModelForm() context = { 'form': form, 'idEvent': idEvent, 'titolo_concorso': titolo_concorso, 'is_submitted_in_active_event': False, 'is_submittable': is_submittable, 'MAX_NUM_CHAR': MAX_NUM_CHAR, 'is_not_valid_user': False } context.update(permissions) return render(request, 'create_racconto.html', context) else: context = {'idEvent': idEvent, 'is_not_valid_user': False} context.update(permissions) return render(request, 'create_racconto.html', context)