Untitled
unknown
plain_text
2 years ago
6.6 kB
4
Indexable
import json def invoiceConversion(invoice_dict): if invoice_dict['tax-amount'] == "": tax_amount = 0.000 else: tax_amount = round(float(invoice_dict['tax-amount']),3) svb_vchr_line = [{ "VOUCHER_LINE_NUM": invoice_line['line-num'], "DESCR": invoice_line['description'], "MERCHANDISE_AMT": round(float(invoice_line['total']), 3), "UNIT_PRICE": round(float(invoice_line['price']), 3), "CUSTOM_DATE_C1": invoice_line['prepaid-start-date'][0:10] if invoice_line['prepaid-start-date'] else "", "CUSTOM_DATE_C2": invoice_line['prepaid-end-date'][0:10] if invoice_line['prepaid-end-date'] else "", **({ "BUSINESS_UNIT_GL": invoice_line['account']['segment-1'], "ACCOUNT": invoice_line['account']['segment-2'], "PRODUCT": invoice_line['account']['segment-5'], "DEPTID": invoice_line['account']['segment-3'], "PROJECT_ID": invoice_line['account']['segment-4'], } if 'account' in invoice_line else { "BUSINESS_UNIT_GL": invoice_line['account-allocations'][1]['account-allocation'][1]['account']['segment-1'], "ACCOUNT": invoice_line['account-allocations'][1]['account-allocation'][1]['account']['segment-2'], "PRODUCT": invoice_line['account-allocations'][1]['account-allocation'][1]['account']['segment-5'], "DEPTID": invoice_line['account-allocations'][1]['account-allocation'][1]['account']['segment-3'], "PROJECT_ID": invoice_line['account-allocations'][1]['account-allocation'][1]['account']['segment-4'], }), "FIELDVAL3_0": invoice_line['project-activity-id'][0:15] if invoice_line['project-activity-id'] else "", "SVB_ACCTG_TOTAL": invoice_line['accounting-total'], "SVB_ACCTG_CURRENCY": invoice_line['accounting-total-currency']['code'] if invoice_line['accounting-total-currency'] else "", "SVB_DATE_1_0": invoice_line['custom-fields']['service-period-start-date'][1:10] if invoice_line['custom-fields']['service-period-start-date'] else "", "SVB_DATE_2_0": invoice_line['custom-fields']['service-period-end-date'][1:10] if invoice_line['custom-fields']['service-period-end-date'] else "", "USER_VCHR_DATE": invoice_line['tax-supply-date'], "CUSTOM_C100_B1": invoice_line['tax-code']['code'] if 'tax-code' in invoice_line else "", "CUSTOM_C100_B2": invoice_line['tax-rate'], "CUSTOM_C100_B3": invoice_line['tax-amount'], "CUSTOM_C100_B4": invoice_line['tax-description'], "CUSTOM_DATE_B": invoice_line['in-service-date'][0:10] if invoice_line['in-service-date'] else "", "CUSTOM_C1_B": "Y" if invoice_line['prepaid--fixed-asset'] != '' else "N", **({"SVB_VCHR_DIST": { "DISTRIB_LINE_NUM": account_allocation['id'], "BUSINESS_UNIT_GL_0": account_allocation['account']['segment-1'], "ACCOUNT_0": account_allocation['account']['segment-2'], "DEPTID_0": account_allocation['account']['segment-3'], "MERCHANDISE_AMT_0": account_allocation['amount'], "PO_ID_1": invoice_line['order-header-num'], "LINE_NBR": invoice_line['order-line-num'], "PRODUCT_0": account_allocation['account']['segment-5'], "AFFILIATE_0": account_allocation['account']['segment-6'], "PROJECT_ID_0": account_allocation['account']['segment-4'] } for account_allocation in invoice_line['account-allocations']['account-allocation'] } if 'account-allocation' in invoice_line['account-allocations'] else {}) } for invoice_line in invoice_dict['invoice-lines'] ] result = { "BUSINESS_UNIT": invoice_dict['ap-business-unit']['name'] if invoice_dict['ap-business-unit'] else "", "VOUCHER_ID": "C"+str(invoice_dict['id']), "VENDOR_ID": invoice_dict['supplier']['number'], "VCHR_BLD_KEY_C1": 1, "VCHR_BLD_KEY_C2": 1, "VCHR_BLD_KEY_N2": 1, "INVOICE_ID": invoice_dict['invoice-number'], "INVOICE_DT": invoice_dict['invoice-date'][0:10], "ADDRESS_SEQ_NUM": invoice_dict['supplier']['primary-contact']['id'], "REMIT_ADDR_SEQ_NUM": invoice_dict['remit-to-address']['remit-to-code'] if 'remit-to-address' in invoice_dict else "", "OPRID": invoice_dict['created-by']['login'][0:10], "GROSS_AMT": round(float(invoice_dict['shipping-amount']), 3)+round(float(invoice_dict['handling-amount']), 3)+tax_amount+round(float(invoice_dict['misc-amount']), 3), "SALETX_AMT": tax_amount, "FREIGHT_AMT": round(float(invoice_dict['shipping-amount']),3)+round(float(invoice_dict['handling-amount']),3), "MISC_AMT": round(float(invoice_dict['misc-amount']),3), "PYMNT_TERMS_CD": invoice_dict['payment-term']['code'].replace(" ", "") if 'payment-term' in invoice_dict else "", "ENTERED_DT": invoice_dict['created-at'][0:10], "TXN_CURRENCY_CD": invoice_dict['currency']['code'], "DESCR254_MIXED": invoice_dict['fas-comments'], "INV_RECPT_DT": invoice_dict['invoice-received-date'][0:10] if invoice_dict['invoice-received-date'] else "", "LC_ID": invoice_dict['fas-location']['name'] if invoice_dict['fas-location'] else "", "SVB_SOURCE": "COUPA", "SVB_SRC_UNIQUE_ID": invoice_dict['id'], "VCHR_PROCESS_FLG": "N", "FIELDVAL5": invoice_dict['supplier-note'], "SVB_VCHR_LINE": svb_vchr_line } return result def getBusinessAndInvoiceId(response): result = {} errorInConversion = {} json_load = json.loads(response, strict=False) for i in json_load: try: payload = invoiceConversion(i) if i['ap-business-unit']: result[i['id']] = {"business_id": i['ap-business-unit']['name'], "payload": payload} else: errorInConversion[i['id']] = "Business Unit Not Found" except Exception as err: print(err.__str__, dir(err)) errorInConversion[i['id']] = f"Exception Error: {str(err)}" return result, errorInConversion def getError(response): result = {"error": ""} error = json.loads(response)['CIFault']['IBResponse'] try: for i in error: if i['type'] == 'Message': result['message'] = error['DefaultMessage'] except Exception as err: result['error'] = str(err) return result
Editor is loading...