예제 #1
0
def validate(number):
    """Check if the number provided is a valid RUC number. This checks the
    length, formatting, check digit and check sum."""
    number = compact(number)
    if len(number) != 13:
        raise InvalidLength()
    if not isdigits(number):
        raise InvalidFormat()
    if (number[:2] < '01' or number[:2] > '24') and (number[:2] not in ('30', '50')):
        raise InvalidComponent()  # invalid province code
    if number[2] < '6':
        # 0..5 = natural RUC: CI plus establishment number
        if number[-3:] == '000':
            raise InvalidComponent()  # establishment number wrong
        ci.validate(number[:10])
    elif number[2] == '6':
        # 6 = public RUC
        if number[-4:] == '0000':
            raise InvalidComponent()  # establishment number wrong
        if _checksum(number[:9], (3, 2, 7, 6, 5, 4, 3, 2, 1)) != 0:
            raise InvalidChecksum()
    elif number[2] == '9':
        # 9 = juridical RUC
        if number[-3:] == '000':
            raise InvalidComponent()  # establishment number wrong
        if _checksum(number[:10], (4, 3, 2, 7, 6, 5, 4, 3, 2, 1)) != 0:
            raise InvalidChecksum()
    else:
        raise InvalidComponent()  # third digit wrong
    return number
예제 #2
0
    def do_check_vat(self):
        fiscal = self.property_account_position_id
        persona = fiscal.persona_id.code
        identificacion = fiscal.identificacion_id.code

        if identificacion == 'F':
            if not self.vat == '9999999999999':
                raise UserError(
                    _(
                        "El consumidor final debe tener trece números " \
                        "nueve como indentificación: 999999999999"
                    )
                )
        if identificacion == 'R':
            try:
                ruc.validate(self.vat)
            except:
                raise UserError(_("Número de RUC incorrecto."))
        elif identificacion == 'C':
            try:
                ci.validate(self.vat)
            except:
                raise UserError(_("Número de cédula incorrecta"))
예제 #3
0
def _validate_natural(number):
    """Check if the number is a valid natural RUC (CI plus establishment)."""
    if number[-3:] == '000':
        raise InvalidComponent()  # establishment number wrong
    ci.validate(number[:10])
    return number
예제 #4
0
    def sri_check_vat_from_ui_pos(self, cr, uid, partner, context=None):
        log_error = False

        if partner.get('property_account_position_id', False):
            property_account_id = partner.get('property_account_position_id',
                                              False)
            fiscal = self.pool.get('account.fiscal.position').browse(
                cr, uid, [int(property_account_id)], context=context)
            partner['do_check_vat'] = True

        if partner['do_check_vat']:

            persona = fiscal.persona_id.code
            identificacion = fiscal.identificacion_id.code
            if partner['vat'] and fiscal:
                try:
                    if identificacion == 'R':
                        # Verificación de tipo de contribuyente
                        if persona == '6' and partner['vat'][2:3] < '6':
                            pass
                        elif persona == '9' and partner['vat'][
                                2:3] == '6' and fiscal.es_publica:
                            pass
                        elif persona == '9' and partner['vat'][
                                2:3] == '9' and not fiscal.es_publica:
                            pass
                        else:
                            return (_(
                                "El numero de R.U.C. o C.I. no concuerda con el tipo de "
                                "contribuyente, por favor verifique que el numero sea correcto "
                                "en la página www.sri.gob.ec"))
                        # Verificación del documento
                        ruc.validate(partner['vat'])
                    elif identificacion == 'C':
                        ci.validate(partner['vat'])
                except InvalidChecksum:
                    return (_(
                        "El numero de R.U.C. o C.I. no concuerda con el proceso de validacion "
                        "del S.R.I., por favor verifique que el numero sea correcto en la "
                        "página www.sri.gob.ec"))
                except InvalidComponent:
                    if identificacion == 'R':
                        return (_(
                            "El numero de R.U.C. contiene errores, por favor verifique que "
                            "los dos primeros dígitos se encuentren entre 01 y 24, que el tercer"
                            "tercero digito no sea mayor que 5 y que el número de establecimiento sea"
                            "válido."))
                    elif identificacion == 'C':
                        return (_(
                            "El numero de C.I. contiene errores, por favor verifique que "
                            "los dos primeros dígitos se encuentren entre 01 y 24, que el tercer"
                            "tercero digito no sea mayor que 5."))
                except InvalidLength:
                    if identificacion == 'R':
                        return (_(
                            "El numero de R.U.C. debe tener 13 digitos, por favor verifique la "
                            "información ingresada."))
                    elif identificacion == 'C':
                        return (_(
                            "El numero de C.I. debe tener 10 digitos, por favor verifique la "
                            "información ingresada."))
                except InvalidFormat:
                    return (_(
                        "El numero de R.U.C. o C.I. tiene caracteres no válidos, por favor "
                        "verfique que la información ingresada sea correcta."))
        else:
            return log_error