コード例 #1
0
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
コード例 #2
0
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})
コード例 #3
0
ファイル: tests.py プロジェクト: canepa/python-codicefiscale
    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')
コード例 #4
0
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))
コード例 #5
0
ファイル: forms.py プロジェクト: valeriopaolini/rao-pubblico
    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
コード例 #6
0
    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
コード例 #7
0
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
コード例 #8
0
ファイル: tests.py プロジェクト: canepa/python-codicefiscale
    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)
コード例 #9
0
ファイル: tests.py プロジェクト: canepa/python-codicefiscale
    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())
コード例 #10
0
    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
コード例 #11
0
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 &egrave; stato memorizzato.<br><br><br><br>Questo messaggio &egrave; una notifica automatica, qualunque risposta verr&agrave; 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)