| [4cc9c2c] | 1 | #!/usr/bin/python |
|---|
| 2 | |
|---|
| 3 | import collections |
|---|
| 4 | import csv |
|---|
| 5 | import re |
|---|
| 6 | import sys |
|---|
| 7 | |
|---|
| 8 | columns = ['blank1', 'account', 'budget', 'current', 'ytd', 'cumulative', 'unexpended', 'commitment', 'uncommitted', 'blank2', 'blank3', ] |
|---|
| 9 | output_cols = ['category', 'account', 'amount', ] |
|---|
| 10 | |
|---|
| 11 | re_account = re.compile(r" ?(?P<num>\d+) - (?P<name>.*)") |
|---|
| 12 | |
|---|
| 13 | def import_sap_summary(summary_fd, account_fd, output_fd): |
|---|
| 14 | account_reader = csv.DictReader(account_fd, dialect='excel-tab') |
|---|
| 15 | account_map = {} |
|---|
| 16 | cat_totals = collections.defaultdict(float) |
|---|
| 17 | for row in account_reader: |
|---|
| 18 | account_map[row['account']] = row['category'] |
|---|
| 19 | reader = csv.DictReader(summary_fd, dialect='excel-tab', fieldnames=columns, restkey='extras') |
|---|
| 20 | writer = csv.writer(output_fd, ) |
|---|
| 21 | for row in reader: |
|---|
| 22 | account = row['account'] |
|---|
| 23 | match = re_account.match(account) |
|---|
| 24 | if match: |
|---|
| 25 | account_num, account_name = match.groups() |
|---|
| 26 | if account_name in account_map: |
|---|
| 27 | cat_totals[account_map[account_name]] += float(row['ytd'].strip()) |
|---|
| 28 | #writer.writerow((account_map[account_name], account, row['ytd'].strip())) |
|---|
| 29 | #print "Good row '%s'" % (account, ) |
|---|
| 30 | else: |
|---|
| 31 | amount = float(row['ytd'].strip()) |
|---|
| 32 | if amount != 0.0: |
|---|
| 33 | print "%s\t%s\t%f" % ("Misc", account_name, amount) |
|---|
| 34 | else: |
|---|
| 35 | print "Ignoring row '%s'" % (account, ) |
|---|
| 36 | if 'extras' in row: print >>sys.stderr, row |
|---|
| 37 | if 'blank3' not in row: print >>sys.stderr, row |
|---|
| 38 | writer.writerow(['category','amount']) |
|---|
| 39 | for key, val in cat_totals.items(): |
|---|
| 40 | writer.writerow((key, val)) |
|---|
| 41 | |
|---|
| 42 | if __name__ == '__main__': |
|---|
| 43 | summary_fd = open(sys.argv[1], 'r') |
|---|
| 44 | account_fd = open(sys.argv[2], 'r') |
|---|
| 45 | output_fd = open(sys.argv[3], 'w') |
|---|
| 46 | import_sap_summary(summary_fd, account_fd, output_fd) |
|---|