Csv To Iif Converter <Desktop>

def reformat_date(date_str): # Supports YYYY-MM-DD or DD/MM/YYYY for fmt in ('%Y-%m-%d', '%d/%m/%Y', '%m/%d/%Y'): try: dt = datetime.strptime(date_str, fmt) return dt.strftime('%m/%d/%Y') except ValueError: continue raise ValueError(f"Date date_str not recognized")

"csv_columns": ["Date", "Description", "Amount", "Account"], "iif_targets": "DATE": "Date", "MEMO": "Description", "AMOUNT": "Amount", "ACCNT": "Account" , "transaction_group_key": ["Date", "Reference"] csv to iif converter

import csv import re from datetime import datetime from collections import defaultdict def parse_csv_to_transactions(csv_file, mapping): transactions = defaultdict(list) with open(csv_file, 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: txn_id = row[mapping['group_key']] txn = 'date': reformat_date(row[mapping['date_col']]), 'memo': row[mapping['memo_col']], 'amount': float(row[mapping['amount_col']]), 'account': row[mapping['account_col']] '%m/%d/%Y'): try: dt = datetime.strptime(date_str

transactions[txn_id].append(txn) return transactions "iif_targets": "DATE": "Date"

converter: input_encoding: utf-8 output_encoding: utf-16 transaction_grouping: "Reference_Number" columns: - csv: "Posting Date" iif: "DATE" transform: "date_to_us" - csv: "Transaction Amount" iif: "AMOUNT" transform: "sign_by_account_type" - csv: "Bank Account" iif: "ACCNT" lookup: "bank_to_qb_accounts.csv"

def generate_iif(transactions, output_file): with open(output_file, 'w', encoding='utf-16') as f: # IIF prefers UTF-16 f.write("!TRNS\tTRNSTYPE\tDATE\tACCNT\tAMOUNT\tMEMO\tNAME\n") f.write("!SPL\tTRNSTYPE\tDATE\tACCNT\tAMOUNT\tMEMO\t\n")