Beispiel #1
0
def yodlee_memo(row, grid):
    memo = fromCSVCol(row, grid, 'Memo')  # sometimes None
    cat = fromCSVCol(row, grid, 'Category')
    cls = fromCSVCol(row, grid, 'Classification')
    if len(memo) > 0:
        return "%s - %s - %s" % ( memo, cat, cls)
    return "%s - %s" % ( cat, cls )
Beispiel #2
0
def yodlee_memo(row, grid):
    memo = fromCSVCol(row, grid, 'Memo')  # sometimes None
    cat = fromCSVCol(row, grid, 'Category')
    cls = fromCSVCol(row, grid, 'Classification')
    if len(memo) > 0:
        return "%s - %s - %s" % (memo, cat, cls)
    return "%s - %s" % (cat, cls)
Beispiel #3
0
def yodlee_dscr(row, grid):
    " use user description for payee 1st, the original description"
    od = fromCSVCol(row, grid, 'Original Description')
    ud = fromCSVCol(row, grid, 'User Description')
    if len(ud) > 0:
        return "%s - %s" % (od, ud)
    return od
Beispiel #4
0
def yodlee_dscr(row, grid):
    " use user description for payee 1st, the original description"
    od = fromCSVCol(row, grid, 'Original Description')
    ud = fromCSVCol(row, grid, 'User Description')
    if len(ud) > 0:
        return "%s - %s" % (od, ud)
    return od
Beispiel #5
0
def msmoney_memo(row, grid):
    memo = fromCSVCol(row, grid, 'Memo')  # sometimes None
    cat = fromCSVCol(row, grid, 'Category')
    cls = fromCSVCol(row, grid, 'Projects')
    if len(memo) > 0:
        return "%s - %s - %s" % (memo, cat, cls)
    return "%s - %s" % (cat, cls)
Beispiel #6
0
def msmoney_memo(row, grid):
    memo = fromCSVCol(row, grid, 'Memo')  # sometimes None
    cat = fromCSVCol(row, grid, 'Category')
    cls = fromCSVCol(row, grid, 'Projects')
    if len(memo) > 0:
        return "%s - %s - %s" % ( memo, cat, cls )
    return "%s - %s" % (cat, cls)
Beispiel #7
0
def get_payee(row, grid):
    name = fromCSVCol(row, grid, 'Name')
    transaction_type = fromCSVCol(row, grid, 'Type')

    if name:
        return name
    else:
        return transaction_type
Beispiel #8
0
def tmobilepl_amount(row, grid):
    amount = fromCSVCol(row, grid, 'Kwota').split(' ')[0]
    currency = fromCSVCol(row, grid, 'Kwota').split(' ')[1]
    memo = fromCSVCol(row, grid, 'Tytuł płatności')
    match = search('Kurs wymiany: (?P<currate>[0-9.]+)', memo)
    if match:
        currate = match.group('currate')
        amount = float(amount) * float(currate)
    return amount
Beispiel #9
0
def get_amount(row, grid):
    amount = fromCSVCol(row, grid, 'Kwota')

    if not amount and is_multiline(row, grid):
        amount = fromCSVCol(row, grid, 'Użytkownik')

    amount_normalized = amount.replace(',', '.')

    return str(amount_normalized)
Beispiel #10
0
def tmobilepl_amount(row, grid):
    amount = fromCSVCol(row, grid, 'Kwota').split(' ')[0]
    currency = fromCSVCol(row, grid, 'Kwota').split(' ')[1]
    memo = fromCSVCol(row, grid, 'Tytuł płatności')
    match = search('Kurs wymiany: (?P<currate>[0-9.]+)', memo)
    if match:
        currate = match.group('currate')
        amount = float(amount) * float(currate)
    return amount
Beispiel #11
0
def get_amount(row, grid):
    amount = fromCSVCol(row, grid, 'Kwota')

    if not amount and is_multiline(row, grid):
        amount = fromCSVCol(row, grid, 'Użytkownik')

    amount_normalized = amount.replace(',', '.')

    return amount_normalized
Beispiel #12
0
def get_category(row, grid):
    currency = fromCSVCol(row, grid, 'Currency')
    transaction_type = fromCSVCol(row, grid, 'Type')
    payee = fromCSVCol(row, grid, 'Name')

    if transaction_types[transaction_type]['has_own_acc']:
        category_format = "{transaction_type}: {currency}"
    else:
        category_format = "Imbalance-{currency}"
    return category_format.format(**locals())
Beispiel #13
0
def is_main_transaction_type(row, grid):
    transaction_type = fromCSVCol(row, grid, 'Type')

    if transaction_type in transaction_types:
        return transaction_types[transaction_type]['is_main_trans']
    else:
        raise Exception('Unknown transaction type')
Beispiel #14
0
def get_memo(row, grid):
    transaction_type = fromCSVCol(row, grid, 'Type')

    auction_site = (' | ' + fromCSVCol(row, grid, 'Auction Site')) \
        if grid.HasColumn('Auction Site') and fromCSVCol(row, grid, 'Auction Site') else ''
    item_title = (' | ' + fromCSVCol(row, grid, 'Item Title')) \
        if grid.HasColumn('Item Title') and fromCSVCol(row, grid, 'Item Title') else ''
    item_id = (' | Item ID: ' + fromCSVCol(row, grid, 'Item ID')) \
        if grid.HasColumn('Item ID') and fromCSVCol(row, grid, 'Item ID') else ''

    return '{}{}{}{}'.format(transaction_type, auction_site, item_title, item_id)
Beispiel #15
0
def get_all_participants_and_amounts(row, grid):
    participants = []

    starting_column_index = splitwise['_params']['participants_columns_start_index']

    for column_index in range(starting_column_index, grid.GetNumberCols()):
        column_id = grid.GetColLabelValue(column_index)
        column_value = float(fromCSVCol(row, grid, column_id))

        if column_value == 0:
            continue
        else:
            participants.append((column_id, column_value))

    return participants
Beispiel #16
0
        return 'UBS'


def ubs_toDescription(desc1, desc2, desc3):
    return ' / '.join([_f for _f in [desc1, desc2, desc3] if _f])


ubs = {
    '_params': {
        'delimiter': ';',
        'skip_last': 1
    },
    'OFX': {
        'skip': lambda row, grid: False,
        'BANKID': lambda row, grid: 'UBS',
        'ACCTID': lambda row, grid: fromCSVCol(row, grid, 'Description'),
        'DTPOSTED': lambda row, grid: ubs_fromUStoOFXDate(fromCSVCol(row, grid, 'Value date')),
        'TRNAMT': lambda row, grid: ubs_toAmount(fromCSVCol(row, grid, 'Debit'), fromCSVCol(row, grid, 'Credit')),
        'FITID': lambda row, grid: row,
        'PAYEE': lambda row, grid: ubs_toPayee(fromCSVCol(row, grid, 'Entered by'), fromCSVCol(row, grid, 'Recipient')),
        'MEMO': lambda row, grid: ubs_toDescription(fromCSVCol(row, grid, 'Description 1'),
                                                    fromCSVCol(row, grid, 'Description 2'),
                                                    fromCSVCol(row, grid, 'Description 3')),
        'CURDEF': lambda row, grid: fromCSVCol(row, grid, 'Ccy.'),
        'CHECKNUM': lambda row, grid: ''
    },
    'QIF': {
        'split': lambda row, grid: False,
        'Account': lambda row, grid: 'UBS',
        'AccountDscr': lambda row, grid: fromCSVCol(row, grid, 'Description'),
        'Date': lambda row, grid: ubs_toQIFDate(fromCSVCol(row, grid, 'Value date')),
Beispiel #17
0
def is_multiline(row, grid):
    return not fromCSVCol(row, grid, 'Data księgowania')
Beispiel #18
0
def toOFXDate(row, grid, iteration):
    date = fromCSVCol(row, grid, 'Date')
    return datetime.strptime(date, '%Y-%m-%d').strftime('%Y%m%d')
Beispiel #19
0
def get_payee(row, grid):
    return fromCSVCol(row, grid, 'Description')
Beispiel #20
0
def has_owner_paid_and_spent(row, grid):
    return has_owner_paid(row, grid) and float(fromCSVCol(row, grid, 'Cost')) - float(
        fromCSVCol(row, grid, get_owners_column_name())) > 0
Beispiel #21
0
def is_owner_involved(row, grid):
    return float(fromCSVCol(row, grid, get_owners_column_name())) != 0
Beispiel #22
0
def is_payment_transaction(row, grid):
    return fromCSVCol(row, grid, 'Category') == 'Payment'
Beispiel #23
0
    memo = fromCSVCol(row, grid, 'Tytuł płatności')
    match = search('Kurs wymiany: (?P<currate>[0-9.]+)', memo)
    if match:
        currate = match.group('currate')
        amount = float(amount) * float(currate)
    return amount


tmobilepl = {
    'OFX': {
        'skip':
        lambda row, grid: False,
        'BANKID':
        lambda row, grid: "T-Mobile",
        'ACCTID':
        lambda row, grid: fromCSVCol(row, grid, 'Rachunek'),
        'DTPOSTED':
        lambda row, grid: fromEUtoOFXDate(fromCSVCol(row, grid, 'Data')),
        'TRNAMT':
        lambda row, grid: tmobilepl_amount(row, grid),
        'FITID':
        lambda row, grid: '',
        'PAYEE':
        lambda row, grid: fromCSVCol(row, grid, 'Nazwa odbiorcy/nadawcy'),
        'MEMO':
        lambda row, grid: fromCSVCol(row, grid, 'Tytuł płatności'),
        'CURDEF':
        lambda row, grid: fromCSVCol(row, grid, 'Kwota').split(' ')[1],
        'CHECKNUM':
        lambda row, grid: ''
    },
Beispiel #24
0
def getPayee(row, grid):
    fromUsername = fromCSVCol(row, grid, 'from_full_name')
    toUsername = fromCSVCol(row, grid, 'to_full_name')
    return '"%s" to "%s"' % (fromUsername, toUsername)


venmo = {
    'OFX': {
        'skip':
        lambda row, grid: False,
        'BANKID':
        lambda row, grid: "Venmo",
        'ACCTID':
        lambda row, grid: "Venmo",
        'DTPOSTED':
        lambda row, grid: toOFXDate(fromCSVCol(row, grid, 'created_at')),
        'TRNAMT':
        lambda row, grid: fromCSVCol(row, grid, 'amount'),
        'FITID':
        lambda row, grid: fromCSVCol(row, grid, 'transaction_id'),
        'PAYEE':
        lambda row, grid: getPayee(row, grid),
        'MEMO':
        lambda row, grid: fromCSVCol(row, grid, 'note'),
        'CURDEF':
        lambda row, grid: 'USD',
        'CHECKNUM':
        lambda row, grid: ''
    },
}
Beispiel #25
0
def getPayee(row, grid):
    fromUsername = fromCSVCol(row, grid, 'from_full_name')
    toUsername = fromCSVCol(row, grid, 'to_full_name')
    return '"%s" to "%s"' % (fromUsername, toUsername)
Beispiel #26
0
paypal = {

    '_params': {
        'delimiter': '\t',
        'skip_initial_space': True,
        'encoding': "UTF-8-sig",
        'row_substitution': {},
        'date_format': '%d-%m-%Y%H:%M:%S',
        'decimal_point_symbol': ',',
        'thousands_separator_symbol': ' '
    },

    'OFX': {
        'skip': lambda row, grid: False,
        'BANKID': lambda row, grid: "PayPal",
        'ACCTID': lambda row, grid: 'PayPal ' + fromCSVCol(row, grid, 'Currency'),
        'DTPOSTED': lambda row, grid: toOFXDate(row, grid),
        'TRNAMT': lambda row, grid: get_amount(row, grid),
        'FITID': lambda row, grid: fromCSVCol(row, grid, 'Transaction ID'),
        'PAYEE': lambda row, grid: get_payee(row, grid),
        'MEMO': lambda row, grid: get_memo(row, grid),
        'CURDEF': lambda row, grid: fromCSVCol(row, grid, 'Currency'),
        'CHECKNUM': lambda row, grid: ''
    },
    'QIF': {
        'skip': lambda row, grid: should_skip_row(row, grid),
        'split': lambda row, grid: False,
        'Account': lambda row, grid: 'PayPal ' + fromCSVCol(get_row_to_return(row, grid), grid, 'Currency'),
        'AccountDscr': lambda row, grid: '',
        'Date': lambda row, grid: fromCSVCol(get_row_to_return(row, grid), grid, 'Date'),
        'Payee': lambda row, grid: get_payee(get_row_to_return(row, grid), grid),
Beispiel #27
0
from csv2ofx.ofx import toOFXDate
from csv2ofx.csvutils import fromCSVCol

cu = {
    'OFX': {
        'skip':
        lambda row, grid: False,
        'BANKID':
        lambda row, grid: 'Credit Union',
        'ACCTID':
        lambda row, grid: 'My Account',
        'DTPOSTED':
        lambda row, grid: toOFXDate(fromCSVCol(row, grid, 'Date')),
        'TRNAMT':
        lambda row, grid: fromCSVCol(row, grid, 'Amount').replace('$', ''),
        'FITID':
        lambda row, grid: row,
        'PAYEE':
        lambda row, grid: fromCSVCol(row, grid, 'Description'),
        'MEMO':
        lambda row, grid: fromCSVCol(row, grid, 'Comments'),
        'CURDEF':
        lambda row, grid: 'USD',
        'CHECKNUM':
        lambda row, grid: fromCSVCol(row, grid, 'Check Number')
    },
    'QIF': {
        'split': lambda row, grid: False,
        'Account': lambda row, grid: 'Credit Union',
        'AccountDscr': lambda row, grid: 'Credit Union Account',
        'Date': lambda row, grid: fromCSVCol(row, grid, 'Date'),
Beispiel #28
0
def getAmount(row, grid):
    return fromCSVCol(row, grid, 'Amount').replace('$', '')
Beispiel #29
0
def getPayee(row, grid):
    me = "me"
    them = fromCSVCol(row, grid, 'Name')
    payee, receiver = (them, me) if isReceived(row, grid) else (me, them)
    return '{payee} to {receiver}'.format(**locals())
Beispiel #30
0

def getPayee(row, grid):
    me = "me"
    them = fromCSVCol(row, grid, 'Name')
    payee, receiver = (them, me) if isReceived(row, grid) else (me, them)
    return '{payee} to {receiver}'.format(**locals())


def getAmount(row, grid):
    return fromCSVCol(row, grid, 'Amount').replace('$', '')


def isReceived(row, grid):
    return True if float(getAmount(row, grid)) > 0 else False


squarecash = {
    'OFX': {
        'skip': lambda row, grid: False,
        'BANKID': lambda row, grid: "Square Cash",
        'ACCTID': lambda row, grid: "Square Cash",
        'DTPOSTED': lambda row, grid: toOFXDate(fromCSVCol(row, grid, 'Date')),
        'TRNAMT': lambda row, grid: getAmount(row, grid),
        'FITID': lambda row, grid: fromCSVCol(row, grid, 'Transaction ID'),
        'PAYEE': lambda row, grid: getPayee(row, grid),
        'MEMO': lambda row, grid: fromCSVCol(row, grid, 'Notes'),
        'CURDEF': lambda row, grid: fromCSVCol(row, grid, 'Currency'),
        'CHECKNUM': lambda row, grid: ''
    },
}
Beispiel #31
0
def is_total_balance_summary(row, grid):
    return fromCSVCol(row, grid, 'Description') == 'Total balance'
Beispiel #32
0
from csv2ofx.csvutils import fromCSVCol


def msmoney_memo(row, grid):
    memo = fromCSVCol(row, grid, 'Memo')  # sometimes None
    cat = fromCSVCol(row, grid, 'Category')
    cls = fromCSVCol(row, grid, 'Projects')
    if len(memo) > 0:
        return "%s - %s - %s" % ( memo, cat, cls )
    return "%s - %s" % (cat, cls)


msmoneyrep = {

    'OFX': {
        'skip': lambda row, grid: fromCSVCol(row, grid, 'Split Type') == 'Split',
        'BANKID': lambda row, grid: fromCSVCol(row, grid, 'Account Name').split(' - ')[0],
        'ACCTID': lambda row, grid: fromCSVCol(row, grid, 'Account Name').split(' - ')[-1],
        'DTPOSTED': lambda row, grid: toOFXDate(fromCSVCol(row, grid, 'Date')),
        'TRNAMT': lambda row, grid: fromCSVCol(row, grid, 'Amount'),
        'FITID': lambda row, grid: fromCSVCol(row, grid, 'Num'),
        'PAYEE': lambda row, grid: fromCSVCol(row, grid, 'Payee'),
        'MEMO': lambda row, grid: msmoney_memo(row, grid),
        'CURDEF': lambda row, grid: fromCSVCol(row, grid, 'Currency'),
        'CHECKNUM': lambda row, grid: fromCSVCol(row, grid, 'Num')
    },
    'QIF': {
        'split': lambda row, grid: fromCSVCol(row, grid, 'Date') == '',
        # split should be determined by absence of date and other fields.
        'Account': lambda row, grid: fromCSVCol(row, grid, 'Account'),
        'AccountDscr': lambda row, grid: fromCSVCol(row, grid, 'Account'),
Beispiel #33
0
def does_owner_send_payment(row, grid):
    return is_payment_transaction(row, grid) and float(fromCSVCol(row, grid, get_owners_column_name())) > 0
Beispiel #34
0
from csv2ofx.csvutils import fromCSVCol

abnamro = {
    '_params': {
        'delimiter': '\t',
        'has_header': False,
    },
    'OFX': {
        'skip': lambda row, grid: False,
        'multiline': lambda row, grid: False,
        'BANKID': lambda row, grid: 'ABN Amro',
        'ACCTID': lambda row, grid: fromCSVCol(row, grid, 0),
        'DTPOSTED': lambda row, grid: fromCSVCol(row, grid, 2),
        'TRNAMT': lambda row, grid: fromCSVCol(row, grid, 6).replace(",", "."),
        'FITID': lambda row, grid: '',
        'PAYEE': lambda row, grid: fromCSVCol(row, grid, 7),
        'MEMO': lambda row, grid: fromCSVCol(row, grid, 7),
        'CURDEF': lambda row, grid: fromCSVCol(row, grid, 1),
        'CHECKNUM': lambda row, grid: '',
    },
    'QIF': {
        'split': lambda row, grid: False,
        'Account': lambda row, grid: fromCSVCol(row, grid, 0),
        'AccountDscr': lambda row, grid: '',
        # TODO: date should be in mm/dd/YYYY or mm/dd/YY, is now YYYYMMDD
        'Date': lambda row, grid: fromCSVCol(row, grid, 2),
        'Payee': lambda row, grid: '',
        'Memo': lambda row, grid: fromCSVCol(row, grid, 7),
        'Category': lambda row, grid: '',
        'Class': lambda row, grid: '',
        'Amount': lambda row, grid: fromCSVCol(row, grid, 6).replace(",", "."),
Beispiel #35
0
def does_owner_owe(row, grid):
    if is_payment_transaction(row, grid):
        return float(fromCSVCol(row, grid, get_owners_column_name())) > 0
    else:
        return float(fromCSVCol(row, grid, get_owners_column_name())) < 0
Beispiel #36
0
def toOFXDate(row, grid):
    date = fromCSVCol(row, grid, 'Date')
    time = fromCSVCol(row, grid, 'Time')
    # timezone = fromCSVCol(row, grid, 'Time Zone') if grid.HasColumn('Time Zone') else fromCSVCol(row, grid, 'TimeZone')
    # TODO: timezone is not detected by strptime
    return datetime.strptime(date + time, paypal['_params']['date_format']).strftime('%Y%m%d')
Beispiel #37
0
def get_memo(row, grid):
    return fromCSVCol(row, grid, 'Category')
Beispiel #38
0
def get_amount(row, grid):
    if grid.HasColumn('Net'):
        return fromCSVCol(row, grid, 'Net').replace(paypal['_params']['decimal_point_symbol'], '.').replace(
            paypal['_params']['thousands_separator_symbol'], '').replace(u'\xa0', '')
    else:
        return fromCSVCol(row, grid, 'Amount')
Beispiel #39
0
def get_all_transaction_splits(row, grid):
    splits = []

    # add main transaction entry

    if does_owner_owe(row, grid) and not is_payment_transaction(row, grid):
        main_id = find_who_paid(row, grid)[0] + ' ' + fromCSVCol(row, grid, 'Currency')
        main_value = float(fromCSVCol(row, grid, get_owners_column_name())) * -1
    elif does_owner_receive_payment(row, grid):
        main_id = find_who_paid(row, grid)[0] + ' ' + fromCSVCol(row, grid, 'Currency')
        main_value = float(fromCSVCol(row, grid, get_owners_column_name())) * -1
    elif does_owner_send_payment(row, grid):
        main_id = find_who_paid(row, grid)[0] + ' ' + fromCSVCol(row, grid, 'Currency')
        main_value = float(fromCSVCol(row, grid, get_owners_column_name()))
    else:
        main_id = 'Splitwise ' + fromCSVCol(row, grid, 'Currency')
        main_value = float(fromCSVCol(row, grid, 'Cost'))

    splits.append((main_id, main_value))

    # add splits
    for participant_and_amount in get_all_participants_and_amounts(row, grid):
        if participant_and_amount[0] == get_owners_column_name():
            if has_owner_paid_and_spent(row, grid):
                split_value = round(participant_and_amount[1] - main_value, 2)
                split_id = 'Imbalance-' + fromCSVCol(row, grid, 'Currency')
            elif does_owner_owe(row, grid) and not is_payment_transaction(row, grid):
                split_value = participant_and_amount[1] * -1
                split_id = 'Imbalance-' + fromCSVCol(row, grid, 'Currency')
            elif is_payment_transaction(row, grid):
                if does_owner_send_payment(row, grid):
                    continue  # already included in main transaction

                split_value = participant_and_amount[1] * -1
                split_id = 'Splitwise ' + fromCSVCol(row, grid, 'Currency')
            else:
                continue
        elif does_owner_owe(row, grid) and not is_payment_transaction(row, grid):
            continue
        elif does_owner_receive_payment(row, grid):
            continue
        elif does_owner_send_payment(row, grid):
            split_id = participant_and_amount[0] + ' ' + fromCSVCol(row, grid, 'Currency')
            split_value = participant_and_amount[1] * -1
        else:
            split_id = participant_and_amount[0] + ' ' + fromCSVCol(row, grid, 'Currency')
            split_value = participant_and_amount[1]

        splits.append((split_id, split_value))

    return splits
Beispiel #40
0
def are_rows_same_transaction(first, second, grid):
    if grid.HasColumn('Time Zone'):
        return fromCSVCol(first, grid, 'Date') == fromCSVCol(second, grid, 'Date') \
               and fromCSVCol(first, grid, 'Time') == fromCSVCol(second, grid, 'Time') \
               and fromCSVCol(first, grid, 'Time Zone') == fromCSVCol(second, grid, 'Time Zone') \
               and fromCSVCol(first, grid, 'Currency') == fromCSVCol(second, grid, 'Currency')
    else:
        return fromCSVCol(first, grid, 'Date') == fromCSVCol(second, grid, 'Date') \
               and fromCSVCol(first, grid, 'Time') == fromCSVCol(second, grid, 'Time') \
               and fromCSVCol(first, grid, 'TimeZone') == fromCSVCol(second, grid, 'TimeZone') \
               and fromCSVCol(first, grid, 'Currency') == fromCSVCol(second, grid, 'Currency')
Beispiel #41
0
    return od


def yodlee_memo(row, grid):
    memo = fromCSVCol(row, grid, 'Memo')  # sometimes None
    cat = fromCSVCol(row, grid, 'Category')
    cls = fromCSVCol(row, grid, 'Classification')
    if len(memo) > 0:
        return "%s - %s - %s" % ( memo, cat, cls)
    return "%s - %s" % ( cat, cls )


yodlee = {

    'OFX': {
        'skip': lambda row, grid: fromCSVCol(row, grid, 'Split Type') == 'Split',
        'BANKID': lambda row, grid: fromCSVCol(row, grid, 'Account Name').split(' - ')[0],
        'ACCTID': lambda row, grid: fromCSVCol(row, grid, 'Account Name').split(' - ')[-1],
        'DTPOSTED': lambda row, grid: toOFXDate(fromCSVCol(row, grid, 'Date')),
        'TRNAMT': lambda row, grid: fromCSVCol(row, grid, 'Amount'),
        'FITID': lambda row, grid: fromCSVCol(row, grid, 'Transaction Id'),
        'PAYEE': lambda row, grid: yodlee_dscr(row, grid),
        'MEMO': lambda row, grid: yodlee_memo(row, grid),
        'CURDEF': lambda row, grid: fromCSVCol(row, grid, 'Currency'),
        'CHECKNUM': lambda row, grid: fromCSVCol(row, grid, 'Transaction Id')
    },
    'QIF': {
        'split': lambda row, grid: fromCSVCol(row, grid, 'Split Type') == 'Split',
        'Account': lambda row, grid: fromCSVCol(row, grid, 'Account Name'),
        'AccountDscr': lambda row, grid: ' '.join(fromCSVCol(row, grid, 'Account Name').split('-')[1:]),
        'Date': lambda row, grid: fromCSVCol(row, grid, 'Date'),
Beispiel #42
0
# Export CSV for both groups *and* friends, as each CSV will contain unique transactions
# Set your owners name

splitwise = {

    '_params': {
        'delimiter': ',',
        'skip_initial_space': True,
        'has_multiple_transactions_per_line': True,
        'encoding': "UTF-8",
        'owners_name': 'Dawid Wróbel',
        'participants_columns_start_index': 5
    },

    'QIF': {
        'skip': lambda row, grid: should_skip_row(row, grid),
        'extra_row_iterations_to_do': lambda row, grid: get_extra_iterations_to_do(row, grid),
        'split': lambda row, grid, iteration: iteration > 0,
        'Account': lambda row, grid, iteration: get_account(row, grid),
        'AccountDscr': lambda row, grid, iteration: '',
        'Date': lambda row, grid, iteration: fromCSVCol(row, grid, 'Date'),
        'Payee': lambda row, grid, iteration: get_payee(row, grid),
        'Memo': lambda row, grid, iteration: get_memo(row, grid),
        'Category': lambda row, grid, iteration: get_category(row, grid, iteration),
        'Class': lambda row, grid, iteration: '',
        'Amount': lambda row, grid, iteration: float(get_amount(row, grid, iteration)) * -1,
        'Number': lambda row, grid, iteration: ''
    }
}
Beispiel #43
0

raiffeisenpolbank_ccard = {
    '_params': {
        'delimiter': ';',
        'encoding': 'windows-1250',
    },
    'OFX': {
        'skip':
        lambda row, grid: False,
        'multiline':
        lambda row, grid: is_multiline(row, grid),
        'BANKID':
        lambda row, grid: "Raiffeisen Polbank",
        'ACCTID':
        lambda row, grid: fromCSVCol(row, grid, 'Numer karty')
        if not is_multiline(row, grid) else '',
        'DTPOSTED':
        lambda row, grid: fromEUtoOFXDate(
            fromCSVCol(row, grid, 'Data transakcji'))
        if not is_multiline(row, grid) else '',
        'TRNAMT':
        lambda row, grid: invert_value(get_amount(row, grid)),
        'FITID':
        lambda row, grid: '',
        'PAYEE':
        lambda row, grid: fromCSVCol(row, grid, 'Miejsce transakcji')
        if not is_multiline(row, grid) else '',
        'MEMO':
        lambda row, grid: fromCSVCol(row, grid, 'Numer karty')
        if is_multiline(row, grid) else '',
Beispiel #44
0
def is_settling_transaction(row, grid):
    return fromCSVCol(row, grid, 'Description') == 'Settle all balances'
Beispiel #45
0
def ubs_toDescription(desc1, desc2, desc3):
    return ' / '.join(filter(None, [desc1, desc2, desc3]))


ubs = {
    '_params': {
        'delimiter': ';',
        'skip_last': 1
    },
    'OFX': {
        'skip':
        lambda row, grid: False,
        'BANKID':
        lambda row, grid: 'UBS',
        'ACCTID':
        lambda row, grid: fromCSVCol(row, grid, 'Description'),
        'DTPOSTED':
        lambda row, grid: ubs_fromUStoOFXDate(
            fromCSVCol(row, grid, 'Value date')),
        'TRNAMT':
        lambda row, grid: ubs_toAmount(fromCSVCol(row, grid, 'Debit'),
                                       fromCSVCol(row, grid, 'Credit')),
        'FITID':
        lambda row, grid: row,
        'PAYEE':
        lambda row, grid: ubs_toPayee(fromCSVCol(row, grid, 'Entered by'),
                                      fromCSVCol(row, grid, 'Recipient')),
        'MEMO':
        lambda row, grid: ubs_toDescription(
            fromCSVCol(row, grid, 'Description 1'),
            fromCSVCol(row, grid, 'Description 2'),
Beispiel #46
0
from csv2ofx.csvutils import fromCSVCol


def msmoney_memo(row, grid):
    memo = fromCSVCol(row, grid, 'Memo')  # sometimes None
    cat = fromCSVCol(row, grid, 'Category')
    cls = fromCSVCol(row, grid, 'Projects')
    if len(memo) > 0:
        return "%s - %s - %s" % (memo, cat, cls)
    return "%s - %s" % (cat, cls)


msmoneyrep = {
    'OFX': {
        'skip':
        lambda row, grid: fromCSVCol(row, grid, 'Split Type') == 'Split',
        'BANKID':
        lambda row, grid: fromCSVCol(row, grid, 'Account Name').split(' - ')[0
                                                                             ],
        'ACCTID':
        lambda row, grid: fromCSVCol(row, grid, 'Account Name').split(' - ')[-1
                                                                             ],
        'DTPOSTED':
        lambda row, grid: toOFXDate(fromCSVCol(row, grid, 'Date')),
        'TRNAMT':
        lambda row, grid: fromCSVCol(row, grid, 'Amount'),
        'FITID':
        lambda row, grid: fromCSVCol(row, grid, 'Num'),
        'PAYEE':
        lambda row, grid: fromCSVCol(row, grid, 'Payee'),
        'MEMO':
Beispiel #47
0
def should_skip_row(row, grid):
    return fromCSVCol(row, grid, 'Type') in ignored_transaction_types
Beispiel #48
0
    return od


def yodlee_memo(row, grid):
    memo = fromCSVCol(row, grid, 'Memo')  # sometimes None
    cat = fromCSVCol(row, grid, 'Category')
    cls = fromCSVCol(row, grid, 'Classification')
    if len(memo) > 0:
        return "%s - %s - %s" % (memo, cat, cls)
    return "%s - %s" % (cat, cls)


yodlee = {
    'OFX': {
        'skip':
        lambda row, grid: fromCSVCol(row, grid, 'Split Type') == 'Split',
        'BANKID':
        lambda row, grid: fromCSVCol(row, grid, 'Account Name').split(' - ')[0
                                                                             ],
        'ACCTID':
        lambda row, grid: fromCSVCol(row, grid, 'Account Name').split(' - ')[-1
                                                                             ],
        'DTPOSTED':
        lambda row, grid: toOFXDate(fromCSVCol(row, grid, 'Date')),
        'TRNAMT':
        lambda row, grid: fromCSVCol(row, grid, 'Amount'),
        'FITID':
        lambda row, grid: fromCSVCol(row, grid, 'Transaction Id'),
        'PAYEE':
        lambda row, grid: yodlee_dscr(row, grid),
        'MEMO':