"""CSV Utilities.""" import csv HEADERS = [ 'Label ID', 'Label Name', 'Company', "Company's Country Name", 'Country Code', 'Assigned To', 'Owner', 'Checks Payable Name', 'Tax form Received', 'Tax ID', 'Foreign Tax ID', 'Tax Name', 'Tax ID Type', 'Recurring Payment Threshold', 'US or Foreign', 'City', 'Street', 'Encoding Costs (recoup fees)', 'Payout Currency Code', 'Admin Fees', 'DPD Publishing', 'Gross', 'Label Share Net Receipts', 'Actual Net No Pub', 'Actual Net', 'Actual Net (In Payout Currency)', 'Admin Fees (In USD)', 'Publishing (In USD)', 'Gross (In USD)', 'Label Share Net Receipts (In USD)', 'Actual Net No Pub (In USD)', 'Actual Net (In USD)', 'Treaty Rate', 'Amount Withheld', 'Amount Withheld No Pub', 'Monthly/Quarterly' ] # Map country codes from the DB country table with IRS country codes MAP_COUNTRY_CODES = { 'AD': 'AN', 'AI': 'AV', 'AQ': 'AY', 'AS': 'AQ', 'AT': 'AU', 'AU': 'AS', 'AW': 'AA', 'AZ': 'AJ', 'BA': 'BK', 'BD': 'BG', 'BF': 'UV', 'BG': 'BU', 'BH': 'BA', 'BI': 'BY', 'BJ': 'BN', 'BM': 'BD', 'BN': 'BX', 'BO': 'BL', 'BS': 'BF', 'BW': 'BC', 'BY': 'BO', 'BZ': 'BH', 'CC': 'CK', 'CF': 'CT', 'CH': 'SZ', 'CI': 'IV', 'CK': 'CW', 'CL': 'CI', 'CN': 'CH', 'CR': 'CS', 'CS': 'MJ', 'CX': 'KT', 'CZ': 'EZ', 'DE': 'GM', 'DK': 'DA', 'DM': 'DO', 'DO': 'DR', 'DZ': 'AG', 'EE': 'EN', 'EH': 'WI', 'ES': 'SP', 'GA': 'GB', 'GB': 'UK', 'GD': 'GJ', 'GG': 'GK', 'GM': 'GA', 'GN': 'GV', 'GQ': 'EK', 'GS': 'SX', 'GU': 'GQ', 'GW': 'PU', 'HN': 'HO', 'HT': 'HA', 'IE': 'EI', 'IL': 'IS', 'IQ': 'IZ', 'IS': 'IC', 'JP': 'JA', 'KH': 'CB', 'KI': 'KR', 'KM': 'CN', 'KN': 'SC', 'KP': 'KN', 'KR': 'KS', 'KW': 'KU', 'KY': 'CJ', 'LB': 'LE', 'LC': 'ST', 'LI': 'LS', 'LK': 'CE', 'LR': 'LI', 'LS': 'LT', 'LT': 'LH', 'LV': 'LG', 'MA': 'MO', 'MC': 'MN', 'MG': 'MA', 'MH': 'RM', 'MN': 'MG', 'MP': 'CQ', 'MS': 'MH', 'MU': 'MP', 'MW': 'MI', 'NA': 'WA', 'NE': 'NG', 'NG': 'NI', 'NI': 'NU', 'NU': 'NE', 'OM': 'MU', 'PA': 'PM', 'PF': 'FP', 'PG': 'PP', 'PH': 'RP', 'PM': 'SB', 'PN': 'PC', 'PR': 'RQ', 'PT': 'PO', 'PW': 'PS', 'PY': 'PA', 'SB': 'BP', 'SC': 'SE', 'SD': 'SU', 'SE': 'SW', 'SG': 'SN', 'SJ': 'JN', 'SK': 'LO', 'SN': 'SG', 'SR': 'NS', 'ST': 'TP', 'SV': 'ES', 'SZ': 'WZ', 'TC': 'TK', 'TD': 'CD', 'TF': 'FS', 'TG': 'TO', 'TJ': 'TI', 'TK': 'TL', 'TL': 'TT', 'TM': 'TX', 'TN': 'TS', 'TO': 'TN', 'TR': 'TU', 'TT': 'TD', 'UA': 'UP', 'VA': 'VT', 'VG': 'VI', 'VN': 'VM', 'VU': 'NH', 'YE': 'YM', 'ZA': 'SF', 'ZM': 'ZA', 'ZW': 'ZI', 'CD': 'CG' } def write_tax_report(output_dir, data, filename): """Write the tax report to CSV.""" file_path = f'{output_dir}/{filename}' map_country_codes_keys = list(MAP_COUNTRY_CODES.keys()) with open(file_path, 'w') as out: csv_out = csv.writer(out) csv_out.writerow(HEADERS) for row in data: row_list = list(row) if (row_list[4] in map_country_codes_keys): row_list[4] = MAP_COUNTRY_CODES[row_list[4]] csv_out.writerow(row_list)