import requests from requests_oauthlib import OAuth2Session import json import sys import webbrowser from config import * #from cachehandler import CacheHandler #from authhandler import AuthHandler #from api import OpenbravoToBanqupAPI from datetime import timedelta, date def extract_invoice(document): url = ob_api_url+"Invoice?_where=documentNo='"+document+"'&_noActiveFilter=false" payload = {} headers = { 'Authorization': 'Basic '+userpass_b64 } response = requests.request("GET", url, headers=headers, data=payload) #extracts invoice header print(response.text) invoice = json.loads(response.text) #print (invoice['response']['data'][0]['businessPartner']) uuid = invoice['response']['data'][0]['id'] uuid = uuid[:8]+'-'+uuid[8:12]+'-'+uuid[12:16]+'-'+uuid[16:20]+'-'+uuid[20:32] #print(uuid) lastCalculatedOnDate = invoice['response']['data'][0]['lastCalculatedOnDate'] daysTillDue = invoice['response']['data'][0]['daysTillDue'] dueDate = date(int(lastCalculatedOnDate[0:4]), int(lastCalculatedOnDate[5:7]), int(lastCalculatedOnDate[8:10])) + timedelta(days=daysTillDue) businessPartner=invoice['response']['data'][0]['businessPartner'] summedLineAmount=invoice['response']['data'][0]['summedLineAmount'] totalTaxAmount=invoice['response']['data'][0]['grandTotalAmount']-summedLineAmount url = ob_api_url+"InvoiceLine?_where=invoice='"+invoice['response']['data'][0]['id']+"'&_noActiveFilter=false&_sortBy=lineNo" response = requests.request("GET", url, headers=headers, data=payload) #extracts invoice lines #print(response.text) lines = json.loads(response.text)['response']['data'] lines_json = json.dumps(lines) #print(lines_json) lines = json.loads(lines_json) #print(lines) lines_output = '[' first_line = True for key in lines: #print (key) linetemp_json = json.dumps(key) #print(linetemp_json) linetemp = json.loads(linetemp_json) #print(linetemp) if linetemp['product'] != None: if not first_line: lines_output = lines_output+',' first_line = False url = ob_api_url+"Product?_where=id='"+linetemp['product']+"'&_noActiveFilter=false" response = requests.request("GET", url, headers=headers, data=payload) #extracts product from master product = json.loads(response.text)['response']['data'][0]['searchKey'] if product != comment_product: lines_output = lines_output + '{"service_name": "'+product+'","service_description": "'+linetemp['product$_identifier']+'","service_quantity": '+str(linetemp['invoicedQuantity'])+',"service_price": '+str(linetemp['unitPrice'])+',"service_vat": '+gst_rate+'}' else: lines_output = lines_output + '{"service_name": "'+product+'","service_description": "'+linetemp['description']+'","service_quantity": '+str(linetemp['invoicedQuantity'])+',"service_price": '+str(linetemp['unitPrice'])+',"service_vat": '+gst_rate+'}' lines_output = lines_output+']' #print(lines_output) ubloutput = xml_header+'\n'+'\n' ubloutput = ubloutput+indentation+CustomizationID+'\n' ubloutput = ubloutput+indentation+ProfileID+'\n' ubloutput = ubloutput+indentation+InvoiceTypeCode+'\n' ubloutput = ubloutput+indentation+''+invoice['response']['data'][0]['documentNo']+''+'\n' ubloutput = ubloutput+indentation+''+uuid+''+'\n' ubloutput = ubloutput+indentation+''+invoice['response']['data'][0]['invoiceDate']+''+'\n' ubloutput = ubloutput+indentation+''+invoice['response']['data'][0]['currency$_identifier']+''+'\n' ubloutput = ubloutput+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+PeppolID+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+'5790000436071'+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+SupplierAddress+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+SupplierPostalCode+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+indentation+''+CountryID+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+invoice['response']['data'][0]['client$_identifier']+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+SupplierUEN+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+GSTRegNo+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+indentation+'GST'+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+''+'\n' ubloutput = ubloutput+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'XXXXXXXXXXXXXXXXX'+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+'5790000436071'+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+invoice['response']['data'][0]['partnerAddress$_identifier']+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+indentation+''+CountryID+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+invoice['response']['data'][0]['businessPartner$_identifier']+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+''+'\n' ubloutput = ubloutput+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+''+f"{totalTaxAmount:.2f}"+''+'\n' ubloutput = ubloutput+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+f"{summedLineAmount:.2f}"+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+f"{totalTaxAmount:.2f}"+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+'SR'+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+gst_rate+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+indentation+'GST'+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+''+'\n' ubloutput = ubloutput+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+''+f"{summedLineAmount:.2f}"+''+f"{summedLineAmount:.2f}"+''+f"{invoice['response']['data'][0]['grandTotalAmount']:.2f}"+''+f"{invoice['response']['data'][0]['grandTotalAmount']:.2f}"+''+'\n' ubloutput = ubloutput+indentation+''+'\n' url = ob_api_url+"InvoiceLine?_where=invoice='"+invoice['response']['data'][0]['id']+"'&_noActiveFilter=false&_sortBy=lineNo" response = requests.request("GET", url, headers=headers, data=payload) #extracts invoice lines #print(response.text) lines = json.loads(response.text)['response']['data'] lines_json = json.dumps(lines) #print(lines_json) lines = json.loads(lines_json) #print(lines) lines_output = '[' first_line = True for key in lines: #print (key) linetemp_json = json.dumps(key) #print(linetemp_json) linetemp = json.loads(linetemp_json) print(linetemp) if linetemp['product'] != None: if not first_line: lines_output = lines_output+',' first_line = False url = ob_api_url+"Product?_where=id='"+linetemp['product']+"'&_noActiveFilter=false" response = requests.request("GET", url, headers=headers, data=payload) #extracts product from master product = json.loads(response.text)['response']['data'][0]['searchKey'] if product != comment_product: lines_output = lines_output + '{"service_name": "'+product+'","service_description": "'+linetemp['product$_identifier']+'","service_quantity": '+str(linetemp['invoicedQuantity'])+',"service_price": '+str(linetemp['unitPrice'])+',"service_vat": '+gst_rate+'}' ubloutput = ubloutput+indentation+indentation+''+str(linetemp['lineNo'])+''+'\n' ubloutput = ubloutput+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+linetemp['product$_identifier']+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+'SR'+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+indentation+'GST'+'\n' ubloutput = ubloutput+indentation+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+''+str(linetemp['invoicedQuantity'])+''+'\n' ubloutput = ubloutput+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+indentation+''+str(linetemp['unitPrice'])+''+'\n' ubloutput = ubloutput+indentation+indentation+''+'\n' ubloutput = ubloutput+indentation+indentation+''+str(linetemp['lineNetAmount'])+''+'\n' else: lines_output = lines_output + '{"service_name": "'+product+'","service_description": "'+linetemp['description']+'","service_quantity": '+str(linetemp['invoicedQuantity'])+',"service_price": '+str(linetemp['unitPrice'])+',"service_vat": '+gst_rate+'}' lines_output = lines_output+']' ubloutput = ubloutput+indentation+''+'\n' print(ubloutput) payload = json.dumps({ "sales_invoice_number": invoice['response']['data'][0]['documentNo'], "sales_invoice_date": invoice['response']['data'][0]['invoiceDate']+"T00:00:00Z", "sales_invoice_due_date": str(dueDate)+"T00:00:00Z", "currency_code": invoice['response']['data'][0]['currency$_identifier'], "invoice_lines": json.loads(lines_output, strict=False), "po_number": "NA", "buyer_reference": "NA", "customer_reference": "NA", "supplier_reference": "NA", "contract_number": "NA" }) print(payload) if __name__ == '__main__': extract_invoice(str(sys.argv[1]))