Exemple #1
0
    def clean(self):
        data = self.cleaned_data
        #controllo codice fiscale bimbo
        codfiscale = data.get('codfis_bimbo').upper()

        if not codicefiscale.is_valid(codfiscale):
            raise forms.ValidationError(
                'Codice fiscale del minore non corretto')
        #ricerca di domande per questo bimbo
        recs = Domande.objects.filter(pr_codfiscale=codfiscale,
                                      pr_stato__lte=2)
        if recs.count(
        ) > 0:  #esiste un'altra preform con lo stesso cidfis minore e stato non annullato
            #and not self.instance.pk
            raise forms.ValidationError(
                "Presente già  un'altra domanda per il minore con cod.fiscale "
                + codfiscale + '.')

        data['codfis_bimbo'] = codfiscale

        #controllo codice fiscale richiedente
        codfiscale = data.get('codice_fiscale').upper()
        if not codicefiscale.is_valid(codfiscale):
            raise forms.ValidationError(
                'Codice fiscale del richiedente non corretto')

        data['codice_fiscale'] = codfiscale.upper()
        data['email'] = data.get('email').upper()

        self.cleaned_data = data
        if self.errors:
            print(self.errors)

        return self.cleaned_data
Exemple #2
0
def is_correct(root: T.Any, info: T.Any, **args: T.Dict[T.Text, T.Any]) -> bool:
    cf = args.get("cf")
    if cf:
        try:
            return codicefiscale.is_valid(cf)
        except ValueError:
            return False
    raise ValueError("Missing argument.")
Exemple #3
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})
Exemple #4
0
    def clean_fiscalNumber(self):
        fiscalNumber = self.cleaned_data.get('fiscalNumber').upper()
        try:
            isvalid = codicefiscale.is_valid(fiscalNumber) or codicefiscale.is_omocode(fiscalNumber)
        except Exception as e:
            LOG.warning("Warning: {}".format(str(e)), extra=set_client_ip())
            isvalid = False

        if not isvalid:
            raise ValidationError("Il codice fiscale inserito non è valido")
        return
Exemple #5
0
    def test_is_valid(self):

        self.assertTrue(codicefiscale.is_valid('CCCFBA85D03L219P'))
        self.assertTrue(codicefiscale.is_valid('CCC FBA 85 D03 L219 P'))
        self.assertTrue(codicefiscale.is_valid('CCC-FBA-85-D03-L219-P'))

        self.assertFalse(
            codicefiscale.is_valid('CCCFBA85D03L219PP'))  # too long
        self.assertFalse(
            codicefiscale.is_valid('CCCFBA85D03L219B'))  # wrong CIN
        self.assertFalse(
            codicefiscale.is_valid('CCCFBA85D03L219'))  # too short
        self.assertFalse(
            codicefiscale.is_valid('CCCFBA85D00L219'))  # wrong birthdate day
        self.assertFalse(
            codicefiscale.is_valid('CCCFBA85D99L219'))  # wrong birthdate day
    def test_valid_fake_users(self):
        """
        Generated users should have valid attributes according to
        https://www.agid.gov.it/sites/default/files/repository_files/regole_tecniche/tabella_attributi_idp_v1_0.pdf
        """

        for name, info in self.provider.all().items():
            attrs = info['attrs']

            user_fiscal_code = re.sub(r'^TINIT-', '', attrs['fiscalNumber'])
            self.assertTrue(
                fiscalcode.is_valid(user_fiscal_code),
                "{} is not a valid Italian fiscal code".format(
                    user_fiscal_code))
Exemple #7
0
    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
Exemple #8
0

def clean_fiscal_code(s):
    return "".join(s.split()).upper()


INFO_MESSAGE = (
    "- Per ricominciare digita /ricomincia",
    "- Per cancellarti digita /cancella",
    "- Se vuoi più informazioni o vuoi segnalare un errore digita /info",
)


@bot.message_handler(
    func=lambda message: message.text
    and codicefiscale.is_valid(clean_fiscal_code(message.text))
)
def fiscal_code_message(message):
    fiscal_code = clean_fiscal_code(message.text)
    telegram_id = str(message.from_user.id)

    with db.transaction() as t:
        user = db.user.by_telegram_id(t, telegram_id)
        if user:
            subscription = db.subscription.last_by_user(t, user["id"])
            if (
                subscription
                and subscription["ulss_id"]
                and not subscription["fiscal_code"]
            ):
                # We do a sync check for locations right after. To avoid
Exemple #9
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