Exemplo n.º 1
0
    def parse_record(self, line):
        """Parse a single record."""
        # Extract check_no/id
        description = line[1]
        del line[1]

        # Get check_no from description
        line.insert(1, self.extract_check_no(description))

        # Get memo and payee from description
        tt = self.extract_description(description)
        line.insert(2, tt[0])
        line.insert(3, tt[1])
        # line.insert(2, self.extract_description(description))

        # Account id
        if not self.statement.account_id:
            self.statement.account_id = line[0]

        # Currency
        if not self.statement.currency:
            self.statement.currency = line[7]

        # Cleanup parts
        line[6] = fix_amount_string(line[6])
        line[2] = clean_multiple_whitespaces(line[2])
        line[3] = clean_multiple_whitespaces(line[3])

        # Create statement and fixup missing parts
        stmtline = super(EasybankGiroCsvParser, self).parse_record(line)
        stmtline.trntype = 'DEBIT' if stmtline.amount < 0 else 'CREDIT'
        stmtline.id = generate_transaction_id(stmtline)

        return stmtline
Exemplo n.º 2
0
    def parse_record(self, line):
        """Parse a single record."""
        # Skip header line
        if self.cur_record == 1:
            return None

        # Skip lines without amount
        if line[7] == "0,00":
            return None

        # Account id
        if not self.statement.account_id:
            self.statement.account_id = line[0]

        # Currency
        if not self.statement.currency:
            self.statement.currency = line[6]

        # Cleanup parts
        line[7] = fix_amount_string(line[7])
        line[9] = clean_multiple_whitespaces(", ".join(line[9:]))

        # Create statement and fixup missing parts
        stmtline = super(LivebankCsvParser, self).parse_record(line)
        stmtline.trntype = 'DEBIT' if stmtline.amount < 0 else 'CREDIT'
        stmtline.id = generate_transaction_id(stmtline)

        return stmtline
Exemplo n.º 3
0
    def parse_record(self, line):
        """Parse a single record."""
        # Split the description into two parts and save it to the line list.
        parts = line[1].split('|')

        # 3 parts: Description, foreign language, transaction id
        # 2 parts: Description, transaction id
        if len(parts) == 3:
            line[1] = "{} ({})".format(parts[0], parts[1])
        else:
            line[1] = parts[0]
        line.insert(2, parts[-1])

        # Account id
        if not self.statement.account_id:
            self.statement.account_id = line[0]

        # Currency
        if not self.statement.currency:
            self.statement.currency = line[6]

        # Cleanup amount
        line[5] = fix_amount_string(line[5])
        line[1] = clean_multiple_whitespaces(line[1])

        # Create statement and fixup missing parts
        stmtline = super(EasybankCreditCardCsvParser, self).parse_record(line)
        stmtline.trntype = 'DEBIT' if stmtline.amount < 0 else 'CREDIT'

        return stmtline
Exemplo n.º 4
0
    def parse_record(self, line):
        """Parse a single record."""
        # Skip header line
        if self.cur_record == 1:
            return None

        # Skip lines without amount
        if line[7] == "0,00":
            return None

        # Account id
        if not self.statement.account_id:
            self.statement.account_id = line[0]

        # Currency
        if not self.statement.currency:
            self.statement.currency = line[6]

        # Cleanup parts
        line[7] = fix_amount_string(line[7])
        line[9] = clean_multiple_whitespaces(", ".join(line[9:]))

        # Create statement and fixup missing parts
        stmtline = super(LivebankCsvParser, self).parse_record(line)
        stmtline.trntype = 'DEBIT' if stmtline.amount < 0 else 'CREDIT'
        stmtline.id = generate_transaction_id(stmtline)

        return stmtline
Exemplo n.º 5
0
    def parse_record(self, line):
        """Parse a single record."""
        # Currency
        if not self.statement.currency:
            self.statement.currency = line[4]

        # Cleanup parts
        line[3] = fix_amount_string(line[3])
        line[1] = clean_multiple_whitespaces(line[1])

        # Create statement and fixup missing parts
        stmtline = super(RaiffeisenCsvParser, self).parse_record(line)
        stmtline.trntype = 'DEBIT' if stmtline.amount < 0 else 'CREDIT'
        stmtline.id = generate_transaction_id(stmtline)

        return stmtline
Exemplo n.º 6
0
    def parse_record(self, line):
        """Parse a single record."""
        # Currency
        if not self.statement.currency:
            self.statement.currency = line[4]

        # Cleanup parts
        line[3] = fix_amount_string(line[3])
        line[1] = clean_multiple_whitespaces(line[1])

        # Create statement and fixup missing parts
        stmtline = super(RaiffeisenCsvParser, self).parse_record(line)
        stmtline.trntype = 'DEBIT' if stmtline.amount < 0 else 'CREDIT'
        stmtline.id = generate_transaction_id(stmtline)

        return stmtline
Exemplo n.º 7
0
    def parse_record(self, line):
        """Parse a single record."""
        # Skip header line
        if self.cur_record == 1:
            return None

        # Currency
        if not self.statement.currency:
            self.statement.currency = line[3]

        # Cleanup parts
        line[2] = fix_amount_string(line[2])
        line[10] = clean_multiple_whitespaces(line[10])

        # Create statement and fixup missing parts
        stmtline = super(OberbankCsvParser, self).parse_record(line)
        stmtline.trntype = 'DEBIT' if stmtline.amount < 0 else 'CREDIT'
        stmtline.id = generate_transaction_id(stmtline)

        return stmtline
Exemplo n.º 8
0
    def parse_record(self, line):
        """Parse a single record."""
        # Skip header line
        if self.cur_record == 1:
            return None

        # Currency
        if not self.statement.currency:
            self.statement.currency = line[3]

        # Cleanup parts
        line[2] = fix_amount_string(line[2])
        line[10] = clean_multiple_whitespaces(line[10])

        # Create statement and fixup missing parts
        stmtline = super(OberbankCsvParser, self).parse_record(line)
        stmtline.trntype = 'DEBIT' if stmtline.amount < 0 else 'CREDIT'
        stmtline.id = generate_transaction_id(stmtline)

        return stmtline
 def test_string_with_spaces(self):
     self.assertEqual(clean_multiple_whitespaces("       "), "")
Exemplo n.º 10
0
 def test_empty_string(self):
     self.assertEqual(clean_multiple_whitespaces(""), "")
Exemplo n.º 11
0
 def test_mixed_tabs_and_spaces(self):
     self.assertEqual(clean_multiple_whitespaces(" This	is  a test  "),
            self.expected)
Exemplo n.º 12
0
 def test_just_spaces(self):
     self.assertEqual(clean_multiple_whitespaces("This    is  a test"),
            self.expected)
Exemplo n.º 13
0
 def test_mixed_tabs_and_spaces(self):
     self.assertEqual(clean_multiple_whitespaces(" This	is  a test  "),
                      self.expected)
Exemplo n.º 14
0
 def test_empty_string(self):
     self.assertEqual(clean_multiple_whitespaces(""), "")
Exemplo n.º 15
0
 def test_string_with_spaces(self):
     self.assertEqual(clean_multiple_whitespaces("       "), "")
Exemplo n.º 16
0
 def test_just_spaces(self):
     self.assertEqual(clean_multiple_whitespaces("This    is  a test"),
                      self.expected)
Exemplo n.º 17
0
    def parse_record(self, line):
        """Parse a single record."""
        # Skip header line
        if self.cur_record == 1:
            return None

        # Fix German number format prior to parsing
        line[5] = format(fix_amount_string(line[5]))  # German number format

        # Create statement
        # Parse line elements using the mappings defined above
        #   (call parse_record() from parent class)
        stmtline = super(BankAustriaCsvParser, self).parse_record(line)

        stmtline.id = generate_transaction_id(stmtline)

        # manual date_user conversion as date_user has wrong format
        # TODO remove me when the following patch was released (v0.6.2?)
        # https://github.com/kedder/ofxstatement/commit/38af84d525f5c47c7fab67c02b36c32dcfc805b3
        stmtline.date_user = datetime.strptime(line[1], self.date_format)

        stmtline.trntype = 'DEBIT' if stmtline.amount < 0 else 'CREDIT'

        # Account id
        # if not self.statement.account_id:
        #     self.statement.account_id = line[9]

        # Currency
        if not self.statement.currency:
            self.statement.currency = line[4]

        # .payee is imported as "Description" in GnuCash
        # .memo is imported as "Notes" in GnuCash
        #
        # When .payee is empty, GnuCash
        # imports .memo to "Description" and keeps "Notes" empty, see
        # https://github.com/archont00/ofxstatement-unicreditcz/blob/master/src/ofxstatement/plugins/unicreditcz.py#L100

        # Fixup Memo, Payee, and TRXTYPE
        if line[2].startswith('POS'):
            stmtline.trntype = 'POS'
            stmtline.memo = self.parsePosAtm(line[2])

        elif line[2].startswith('ATM'):
            stmtline.trntype = 'ATM'
            stmtline.memo = self.parsePosAtm(line[2])

        elif line[2].startswith('AUTOMAT') or line[2].startswith('BANKOMAT'):
            # > AUTOMAT   00011942 K1   14.01. 13:47     O
            # > BANKOMAT  00021241 K4   08.03. 09:43     O
            stmtline.trntype = 'ATM'
            # TODO stmtline.memo = self.parsePosAtm(line[2]) ?
            stmtline.memo = line[2]

        elif line[2].startswith('ABHEBUNG AUTOMAT'):
            # > ABHEBUNG AUTOMAT NR. 14547 AM 31.01. UM 15.53 UHR Fil.ABC BANKCARD 2    # noqa: E501
            # TODO stmtline.memo = self.parsePosAtm(line[2]) ?
            stmtline.trntype = 'ATM'
            stmtline.memo = line[2]

        elif line[2].startswith('EINZAHLUNG'):
            # > EINZAHLUNG AUTOMAT NR. 55145 AM 31.01. / 15.55 UHR Fil.ABC BANKCARD 2 EIGENERLAG    # noqa: E501
            stmtline.memo = line[2]

        elif line[2].startswith('Lastschrift JustinCase'):
            # > Lastschrift JustinCase MRefAT123123123123123123JIC Entgelt für Bank Austria 0,69 enth‰lt 20% Ust., das sind EUR 0,12.   # noqa: E501
            stmtline.memo = line[2]

        elif line[6].startswith('SEPA-AUFTRAGSBESTÄTIGUNG'):
            if not stmtline.memo:
                stmtline.memo = self.parseDocument(line[6])

        elif (line[6].startswith('GUTSCHRIFT') or line[6].startswith('SEPA') or
                line[6].startswith('ÜBERWEISUNG')):
            # Auftraggebername holds the information we want
            stmtline.payee = line[8]
            if not stmtline.memo:
                stmtline.memo = self.parseDocument(line[6])

        else:
            stmtline.memo = line[2]

        # Simple cleanup
        stmtline.payee = clean_multiple_whitespaces(stmtline.payee)
        stmtline.memo = clean_multiple_whitespaces(stmtline.memo)

        # Add Internal Note, if exists
        if line[3]:
            # Add trailing whitespace if memo exists
            if stmtline.memo:
                stmtline.memo = stmtline.memo + ' '
            stmtline.memo = stmtline.memo + '(NOTE: )' + line[3]

        return stmtline