示例#1
0
def write_csv(trans, file_name):

    print(file_name)
    with codecs.open(file_name, 'w', encoding='utf-8') as f:
        print('Date,Amount,Payer,Payee', file=f)
        for t in trans:
            print('"%s","%s","%s","%s"' % (format_tran_date_for_qif(t.date), t.amount, t.payer, t.payee), file=f)
示例#2
0
def export(csv, slow):

    global WAIT_DELAY
    print('Use "export.py --help" to see all command line options')
    if slow:
        WAIT_DELAY = 25

    if not os.path.exists(export_path):
        os.makedirs(export_path)

    t_db = db.init_db()
    if not t_db:
        print('Error initialising database')
        return

    creds = get_credentials()
    driver = login(creds)
    if not driver:
        print('Error logging in')
        return

    trans = []

    i = 1
    while True:

        page_trans = fetch_transactions(driver)
        trans += page_trans

        page_count = len(page_trans)
        if page_count == 0:
            break

        print('Got %s transactions, from %s to %s' %
              (page_count, format_tran_date_for_qif(page_trans[0].date),
               format_tran_date_for_qif(page_trans[-1].date)))
        print('Opening next page...')

        try:
            nextButton = get_next_btn(driver)
            if not nextButton.is_displayed():
                break
            nextButton.click()
            time.sleep(WAIT_DELAY)
        except NoSuchElementException, err:
            break
示例#3
0
def write_csv(trans, file_name):

    print(file_name)
    with codecs.open(file_name, 'w', encoding='utf-8') as f:
        print('Date,Amount,Payer,Payee', file=f)
        for t in trans:
            print(
                '"%s","%s","%s","%s"' %
                (format_tran_date_for_qif(t.date), t.amount, t.payer, t.payee),
                file=f)
示例#4
0
def write_qif(trans, file_name):

    print(file_name)
    with codecs.open(file_name, 'w', encoding='utf-8') as f:

        # Write header
        print('!Account', file=f)
        print('NQIF Account', file=f)
        print('TCCard', file=f)
        print('^', file=f)
        print('!Type:CCard', file=f)

        for t in trans:
            print('C', file=f) # status - uncleared
            print('D' + format_tran_date_for_qif(t.date), file=f) # date
            print('T' + t.amount, file=f) # amount
            print('M' + t.payer, file=f)
            print('P' + t.payee + t.memo, file=f)
            print('^', file=f) # end of record
示例#5
0
def write_qif(trans, file_name):

    print(file_name)
    with codecs.open(file_name, "w", encoding="utf-8") as f:

        # Write header
        print("!Account", file=f)
        print("NQIF Account", file=f)
        print("TCCard", file=f)
        print("^", file=f)
        print("!Type:CCard", file=f)

        for t in trans:
            print("C", file=f)  # status - uncleared
            print("D" + format_tran_date_for_qif(t.date), file=f)  # date
            print("T" + t.amount, file=f)  # amount
            print("M" + t.payer, file=f)
            print("P" + t.payee + t.memo, file=f)
            print("^", file=f)  # end of record
示例#6
0
def write_qif(trans, file_name):

    print(file_name)
    with codecs.open(file_name, 'w', encoding='utf-8') as f:

        # Write header
        print('!Account', file=f)
        print('NQIF Account', file=f)
        print('TCCard', file=f)
        print('^', file=f)
        print('!Type:CCard', file=f)

        for t in trans:
            print('C', file=f)  # status - uncleared
            print('D' + format_tran_date_for_qif(t.date), file=f)  # date
            print('T' + t.amount, file=f)  # amount
            print('M' + t.payer, file=f)
            print('P' + t.payee + t.memo, file=f)
            print('^', file=f)  # end of record
示例#7
0
def export(csv, statements):

    if not os.path.exists(export_path):
        os.makedirs(export_path)

    t_db = db.init_db()
    if not t_db:
        print('Error initialising database')
        return

    creds = get_credentials()
    if not creds:
        return

    br = login(creds)
    if not br:
        return

    text = br.response().read()
    #log_file('login.html', text)

    br = open_transactions_page(br)
    if not br:
        return

    trans = []

    i = 1
    while True:
        text = br.response().read()

        #log_file('step%s.html' % i, text)
        #i += 1

        q = PyQuery(text)

        page_trans = fetchTransactions(text)
        trans += page_trans

        nextButton = q('div[name="transactionsPagingLinks"] a[name="nextButton"]')
        isNextVisible = len(nextButton) != 0
        if not isNextVisible:
            break

        page_count = len(page_trans)
        if page_count == 0:
            break;

        print('Got %s transactions, from %s to %s' % (page_count,
                                                      format_tran_date_for_qif(page_trans[0].date),
                                                      format_tran_date_for_qif(page_trans[-1].date)))
        print('Opening next page...')

        next_url = nextButton[0].attrib['href']
        br.open(next_url)

        #if len(trans) > 60:
        #    break

    new_trans = db.get_only_new_transactions(trans)
    print('Total of %s new transactions obtained' % len(new_trans))

    if len(new_trans) != 0:

        print('Saving transactions...')
        db.save_transactions(new_trans)

        s_d = reduce(lambda t1, t2: t1 if t1.date < t2.date else t2, new_trans).date
        e_d = reduce(lambda t1, t2: t1 if t1.date > t2.date else t2, new_trans).date

        if csv:
            file_name = get_file_name(export_path, s_d, e_d, 'csv')
            write_csv(new_trans, file_name)
        else:
            file_name = get_file_name(export_path, s_d, e_d, 'qif')
            write_qif(new_trans, file_name)

    if statements:
        br = open_statements_page(br)
        if not br:
            return

        text = br.response().read()
        q = PyQuery(text)

        for row in q('a[class="s_downloads"]'):
            statement_date = datetime.strptime(row.text, '%d %b %Y').strftime('%Y-%m-%d')
            statement_name = '28 Degrees Statement ' + statement_date + '.pdf'
            statement_path = os.path.join(export_path, statement_name)

            if not os.path.exists(statement_path):
                print('Retrieving statement ' + row.text + ' and saving to ' + statement_path)
                br.retrieve(row.attrib['href'], statement_path)
示例#8
0
def export(csv, statements):

    if not os.path.exists(export_path):
        os.makedirs(export_path)

    t_db = db.init_db()
    if not t_db:
        print('Error initialising database')
        return

    creds = get_credentials()
    if not creds:
        return

    br = login(creds)
    if not br:
        return

    text = br.response().read()
    qq = PyQuery(text)
    statLink = qq('li[id="cardsonline.statements"] a')
    #log_file('login.html', text)

    br = open_transactions_page(br)
    if not br:
        return

    trans = []

    i = 1
    while True:
        text = br.response().read()

        #log_file('step%s.html' % i, text)
        #i += 1

        q = PyQuery(text)

        page_trans = fetchTransactions(text)
        trans += page_trans

        nextButton = q(
            'div[name="transactionsPagingLinks"] a[name="nextButton"]')
        isNextVisible = len(nextButton) != 0
        if not isNextVisible:
            break

        page_count = len(page_trans)
        if page_count == 0:
            break

        print('Got %s transactions, from %s to %s' %
              (page_count, format_tran_date_for_qif(page_trans[0].date),
               format_tran_date_for_qif(page_trans[-1].date)))
        print('Opening next page...')

        next_url = nextButton[0].attrib['href']
        br.open(next_url)

        #if len(trans) > 60:
        #    break

    new_trans = db.get_only_new_transactions(trans)
    print('Total of %s new transactions obtained' % len(new_trans))

    if len(new_trans) != 0:

        print('Saving transactions...')
        db.save_transactions(new_trans)

        s_d = reduce(lambda t1, t2: t1
                     if t1.date < t2.date else t2, new_trans).date
        e_d = reduce(lambda t1, t2: t1
                     if t1.date > t2.date else t2, new_trans).date

        if csv:
            file_name = get_file_name(export_path, s_d, e_d, 'csv')
            write_csv(new_trans, file_name)
        else:
            file_name = get_file_name(export_path, s_d, e_d, 'qif')
            write_qif(new_trans, file_name)

    if statements:

        if len(statLink) == 0:
            print('Unable to find link to statements page')
            return

        br.open(statLink[0].attrib['href'])
        text = br.response().read()
        q = PyQuery(text)

        for row in q('a[class="s_downloads"]'):
            statement_date = datetime.strptime(row.text,
                                               '%d %b %Y').strftime('%Y-%m-%d')
            statement_name = '28 Degrees Statement ' + statement_date + '.pdf'
            statement_path = os.path.join(export_path, statement_name)

            if not os.path.exists(statement_path):
                print('Retrieving statement ' + row.text + ' and saving to ' +
                      statement_path)
                br.retrieve(row.attrib['href'], statement_path)