예제 #1
0
 def _entity_id_document(ent, ent_key, offset, total_ent_list):
     sent = clean_text(ent[0])
     if (get_cc_module('es', 'dni').is_valid(sent) or
             get_cc_module('es', 'cif').is_valid(sent) or
             get_cc_module('es', 'nie').is_valid(sent)):
         total_ent_list.append((ent[0], ent_key, ent[1], str(ent[2] + offset), str(ent[3] + offset)))
     else:
         logger.debug("Invalid data ID document {}.{}".format(sent, ent[0]))
예제 #2
0
파일: party.py 프로젝트: lapillaga/party
    def transition_check(self):
        Party = Pool().get('party.party')

        parties_succeed = []
        parties_failed = []
        parties = Party.browse(Transaction().context.get('active_ids'))
        for party in parties:
            for identifier in party.identifiers:
                if identifier.type != 'eu_vat':
                    continue
                eu_vat = get_cc_module('eu', 'vat')
                try:
                    if not eu_vat.check_vies(identifier.code)['valid']:
                        parties_failed.append(party.id)
                    else:
                        parties_succeed.append(party.id)
                except Exception as e:
                    if hasattr(e, 'faultstring') \
                            and hasattr(e.faultstring, 'find'):
                        if e.faultstring.find('INVALID_INPUT'):
                            parties_failed.append(party.id)
                            continue
                        if e.faultstring.find('SERVICE_UNAVAILABLE') \
                                or e.faultstring.find('MS_UNAVAILABLE') \
                                or e.faultstring.find('TIMEOUT') \
                                or e.faultstring.find('SERVER_BUSY'):
                            raise VIESUnavailable(
                                gettext('party.msg_vies_unavailable')) from e
                    raise
        self.result.parties_succeed = parties_succeed
        self.result.parties_failed = parties_failed
        return 'result'
예제 #3
0
파일: party.py 프로젝트: lapillaga/party
    def __register__(cls, module_name):
        pool = Pool()
        Party = pool.get('party.party')
        cursor = Transaction().connection.cursor()
        party = Party.__table__()

        super().__register__(module_name)

        party_h = Party.__table_handler__(module_name)
        if (party_h.column_exist('vat_number')
                and party_h.column_exist('vat_country')):
            identifiers = []
            cursor.execute(*party.select(party.id,
                                         party.vat_number,
                                         party.vat_country,
                                         where=(party.vat_number != Null)
                                         | (party.vat_country != Null)))
            for party_id, number, country in cursor.fetchall():
                code = (country or '') + (number or '')
                if not code:
                    continue
                for type in Party.tax_identifier_types():
                    module = get_cc_module(*type.split('_', 1))
                    if module.is_valid(code):
                        break
                else:
                    type = None
                identifiers.append(cls(party=party_id, code=code, type=type))
            cls.save(identifiers)
            party_h.drop_column('vat_number')
            party_h.drop_column('vat_country')
예제 #4
0
def validate_cuit(cuit_to_validate):
    try:
        validator = stdnum.get_cc_module('ar', 'cuit')
        return validator.validate(cuit_to_validate)
    except (InvalidChecksum, InvalidFormat):
        raise ValidationError(_('El CUIT ingresado no es correcto'))
    except InvalidLength as err:
        raise ValidationError(_(str(err)))
예제 #5
0
파일: party.py 프로젝트: lapillaga/party
 def on_change_with_code(self):
     if self.type and '_' in self.type:
         module = get_cc_module(*self.type.split('_', 1))
         if module:
             try:
                 return module.compact(self.code)
             except stdnum.exceptions.ValidationError:
                 pass
     return self.code
예제 #6
0
 def set_vsf_tax_identifier(self, code):
     pool = Pool()
     Party = pool.get('party.party')
     for type in Party.tax_identifier_types():
         module = get_cc_module(*type.split('_', 1))
         if module and module.is_valid(code):
             self.type = type
             self.code = code
             break
     else:
         raise BadRequest(
             gettext('web_shop_vue_storefront.msg_invalid_tax_identifier',
                     code=code))
예제 #7
0
파일: party.py 프로젝트: lapillaga/party
 def check_code(self):
     if self.type and '_' in self.type:
         module = get_cc_module(*self.type.split('_', 1))
         if module:
             if not module.is_valid(self.code):
                 if self.party and self.party.id > 0:
                     party = self.party.rec_name
                 else:
                     party = ''
                 raise InvalidIdentifierCode(
                     gettext('party.msg_invalid_code',
                             type=self.type_string,
                             code=self.code,
                             party=party))
예제 #8
0
파일: pattern.py 프로젝트: ElevenPaths/FARO
 def validate(self, ent):
     if (get_cc_module('es', 'dni').is_valid(ent)
             or get_cc_module('es', 'cif').is_valid(ent)
             or get_cc_module('es', 'nie').is_valid(ent)):
         return True
     return False
예제 #9
0
from events.helpers.models import AuditUserTime, SaveReversionMixin, ActiveManager
from events.constants import (
    CAN_CLOSE_SPONSORING_CODENAME, CAN_SET_APPROVED_INVOICE_CODENAME,
    CAN_SET_COMPLETE_PAYMENT_CODENAME, CAN_SET_PARTIAL_PAYMENT_CODENAME,
    CAN_SET_SPONSORS_ENABLED_CODENAME, CAN_VIEW_EVENT_ORGANIZERS_CODENAME,
    CAN_VIEW_EXPENSES_CODENAME, CAN_VIEW_ORGANIZERS_CODENAME,
    CAN_VIEW_SPONSORS_CODENAME, CAN_VIEW_PROVIDERS_CODENAME, IMAGE_FORMATS,
    SPONSOR_STATE_CHECKED, SPONSOR_STATE_CLOSED, SPONSOR_STATE_COMPLETELY_PAID,
    SPONSOR_STATE_INVOICED, SPONSOR_STATE_PARTIALLY_PAID,
    SPONSOR_STATE_UNBILLED)

from members.models import DEFAULT_MAX_LEN, LONG_MAX_LEN

User = get_user_model()
validation_module = stdnum.get_cc_module('ar', 'cbu')


def validate_cuit(cuit_to_validate):
    try:
        validator = stdnum.get_cc_module('ar', 'cuit')
        return validator.validate(cuit_to_validate)
    except (InvalidChecksum, InvalidFormat):
        raise ValidationError(_('El CUIT ingresado no es correcto'))
    except InvalidLength as err:
        raise ValidationError(_(str(err)))


def lower_non_spaces(text):
    return text.lower().replace(' ', '')
예제 #10
0
파일: pattern.py 프로젝트: ElevenPaths/FARO
 def validate(self, ent):
     return get_cc_module('es', 'ccc').is_valid(ent) or get_cc_module(
         'es', 'iban').is_valid(ent)
예제 #11
0
    def _get_kpis(self, sent_list):
        """ Extract KPIs from document """

        # full_text is used for proximity detection
        full_text = "".join(sent_list)

        total_ent_list = []

        # Flag to indicate that a sign entity is expected (if True)
        next_person_has_signed = False
        person_signed_idx = 0

        offset = 0

        for sent in sent_list:
            # extract entities (ML)
            if self.ml_ner is not None:
                ent_list_ner = self.ml_ner.get_model_entities(sent)

                for ent in ent_list_ner:
                    # storing as entity/label pair

                    new_ent = [ent[0], ent[1], "NER",
                               str(int(ent[2]) + offset),
                               str(int(ent[3]) + offset)]

                    total_ent_list.append(new_ent)

            # extract entities (Regex)
            ent_list_regex = self.regex_ner.regex_detection(
                sent, full_text, offset)

            for ent_key in ent_list_regex.keys():
                for ent in ent_list_regex[ent_key]:
                    # We treat differently common corporative/personal emails
                    if ent_key == "Email":
                        if not self.corp_email_class.is_not_corp_email(
                                ent[0]):
                            total_ent_list.append((
                                ent[0], "Corp_Email",
                                ent[1], str(ent[2] + offset),
                                str(ent[3] + offset)))

                        else:
                            total_ent_list.append((ent[0], "Email",
                                                   ent[1],
                                                   str(ent[2] + offset),
                                                   str(ent[3] + offset)))

                    elif ent_key == "SIGNATURE":
                        next_person_has_signed = True
                        person_signed_idx = int(ent[3]) + offset

                    elif ent_key == "CreditCard":
                        sent = clean_text(ent[0])
                        try:
                            if validate(sent):
                                logger.debug(
                                    "Credit card accepted {}.{}".format(
                                        sent, ent[0]))

                                total_ent_list.append((ent[0], "FinancialData",
                                                       ent[1],
                                                       str(ent[2] + offset),
                                                       str(ent[3] + offset)))

                        except (InvalidChecksum, InvalidFormat):
                            logger.debug("Wrong credit card {}.{}.".format(
                                sent, ent[0]))

                    elif ent_key in ["FinancialData", "DNI_SPAIN"]:
                        sent = clean_text(ent[0])

                        if (get_cc_module('es', 'dni').is_valid(sent) or
                            get_cc_module('es', 'ccc').is_valid(sent) or
                            get_cc_module('es', 'cif').is_valid(sent) or
                            get_cc_module('es', 'iban').is_valid(sent) or
                                get_cc_module('es', 'nie').is_valid(sent)):

                            total_ent_list.append((ent[0], ent_key, ent[1],
                                                   str(ent[2] + offset),
                                                   str(ent[3] + offset)))
                        else:
                            logger.debug("Invalid data {}.{}".format(
                                sent, ent[0]))

                    else:
                        total_ent_list.append((ent[0], ent_key, ent[1],
                                               str(ent[2] + offset),
                                               str(ent[3] + offset)))

            if next_person_has_signed:
                min_itx_signed = self.signature_max_distance
                id_min_itx = -1

                for i in range(len(total_ent_list)):
                    _ent = total_ent_list[i]

                    if _ent[1] == "PER":
                        if int(_ent[3]) > person_signed_idx:
                            if (int(_ent[3]) - person_signed_idx <
                                    min_itx_signed):
                                min_itx_signed = (int(_ent[3]) -
                                                  person_signed_idx)
                                id_min_itx = i
                                next_person_has_signed = False

                if id_min_itx != -1:
                    _ent = total_ent_list[id_min_itx]

                    total_ent_list.append((_ent[0], "SIGNATURE", _ent[2],
                                           _ent[3], _ent[4]))

            # detection of custom words
            custom_list = self.custom_detector.search_custom_words(sent)
            for _ent in custom_list:
                total_ent_list.append((_ent[0], _ent[1], _ent[0],
                                       str(_ent[2] + offset),
                                       str(_ent[3] + offset)))

            offset += len(sent)

        if next_person_has_signed:
            min_itx_signed = self.signature_max_distance
            id_min_itx = -1

            for i in range(len(total_ent_list)):
                ent = total_ent_list[i]
                if ent[1] == "PER":
                    if int(ent[3]) > person_signed_idx:
                        if int(ent[3]) - person_signed_idx < min_itx_signed:
                            min_itx_signed = int(ent[3]) - person_signed_idx
                            id_min_itx = i
                            next_person_has_signed = False

            if id_min_itx != -1:
                ent = total_ent_list[id_min_itx]

                total_ent_list.append((ent[0], "SIGNATURE", ent[2],
                                       ent[3], ent[4]))

        return total_ent_list
예제 #12
0
 def _entity_financial_data(ent, ent_key, offset, total_ent_list):
     sent = clean_text(ent[0])
     if get_cc_module('es', 'ccc').is_valid(sent) or get_cc_module('es', 'iban').is_valid(sent):
         total_ent_list.append((ent[0], ent_key, ent[1], str(ent[2] + offset), str(ent[3] + offset)))
     else:
         logger.debug("Invalid financial data {}.{}".format(sent, ent[0]))