diff --git a/SO_to_Inv/CustomerQuery.py b/SO_to_Inv/CustomerQuery.py index dcbdf52..124352a 100644 --- a/SO_to_Inv/CustomerQuery.py +++ b/SO_to_Inv/CustomerQuery.py @@ -7,10 +7,11 @@ import pandas as pd from datetime import date import timeit import os +import json class CustomerQuery: def __init__(self, **kwargs) -> None: - # print(f'kwargs:{kwargs}') + print(f'kwargs:{kwargs}') # print(args) self.CustomerPriceLevelNames = [] self.SPPriceLevelNames = [] @@ -20,12 +21,17 @@ class CustomerQuery: # self._df_customer = pd.read_excel(os.path.join(os.getcwd(), self.item_inventory_path, self._filename), usecols=['FullName', 'PriceLevelName', 'Special Cust'],) # print(self._df_customer) # print(type(self._df_customer.loc[(self._df_customer['FullName']=="ECO:0:ECO-002") & (self._df_customer['PriceLevelName']=="T 202202")].values.tolist()[0][2])) + self.MaxReturned = kwargs['MaxReturned'] if 'MaxReturned' in kwargs else None + if isinstance(self.MaxReturned, int): + self.MaxReturned = str(self.MaxReturned) + print(f'{self.MaxReturned=}') self.IncludeRetElement = kwargs['IncludeRetElement'] if 'IncludeRetElement' in kwargs else [] self.TxnDateRangeFilter = kwargs['TxnDateRangeFilter'] if 'TxnDateRangeFilter' in kwargs else None self.FullName = kwargs['FullName'] if 'FullName' in kwargs else None + self.response_string = None - def get_customer_pricelevel_list(self, response_string): - QBXML = ET.fromstring(response_string) + def get_customer_pricelevel_list(self): + QBXML = ET.fromstring(self.response_string) CustomerRets = QBXML.findall('.//CustomerRet') # print(f'CustomerRets:{CustomerRets}') PriceLevelName = None @@ -60,8 +66,12 @@ class CustomerQuery: _df = pd.DataFrame.from_dict(Customer) print(_df) _df.to_excel(os.path.join(os.getcwd(), self.item_inventory_path, self._filename), index=False) - return PriceLevelName, SP_PriceLevelName + CustomerDict = _df.to_dict('records') + return CustomerDict + def create_QBXML(self): + return self.create_customerquery_QBXML() + def create_customerquery_QBXML(self ): root = ET.Element("QBXML") root.tail = "\n" @@ -73,6 +83,9 @@ class CustomerQuery: QBXMLMsgsRq.text = "\n " CustomerQueryRq = self.create_sub_element(ET, QBXMLMsgsRq, "CustomerQueryRq","\n " ) # FullName = self.create_sub_element(ET, CustomerQueryRq, "FullName", self.FullName, 6) + if self.MaxReturned is not None: + print("masuk maxreturn") + MaxReturned = self.create_sub_element(ET, CustomerQueryRq, "MaxReturned", self.MaxReturned, 4) IncludeRetElement = ['FullName', 'PriceLevelRef', 'DataExtRet'] for x in IncludeRetElement: IncludeRetElement = self.create_sub_element(ET, CustomerQueryRq, "IncludeRetElement", x, 4) @@ -83,9 +96,29 @@ class CustomerQuery: qbxml_query = qbxml_query + """""" qbxml_query = qbxml_query + "\n" + mydata print(f'create_customer_QBXML->qbxml_query: {qbxml_query}') - response_string=self.connect_to_quickbooks(qbxml_query) + self.response_string=self.connect_to_quickbooks(qbxml_query) - return response_string + return self.response_string + + def to_json(self): + start = timeit.default_timer() + js_data=None + # print(self.create_QBXML()) + # self.response_string = self.connect_to_quickbooks(self.create_QBXML()) + + # ret, msg = self.status_ok(self.response_string) + ret = True + if ret: + df = pd.DataFrame.from_dict(self.get_customer_pricelevel_list()) + print(df) + if len(df)>0: + js_data = json.dumps(df.to_dict("records")) + else: + False, 'There is no data(df==0)' + else: + return False, msg + print("The difference of time is :", timeit.default_timer() - start) + return True, js_data def create_sub_element(self, ET, parentNode, thisNode, text="\n", whiteSpace = 0, attrib =None): if type(attrib) is not dict: @@ -108,13 +141,13 @@ class CustomerQuery: ticket = sessionManager.BeginSession("", 2) # Send query and receive response - response_string = sessionManager.ProcessRequest(ticket, qbxml_query) + self.response_string = sessionManager.ProcessRequest(ticket, qbxml_query) # Disconnect from Quickbooks sessionManager.EndSession(ticket) # Close the company file sessionManager.CloseConnection() # Close the connection - # print (f'response_string:{response_string}') - return response_string + # print (f'self.response_string:{self.response_string}') + return self.response_string def status_ok(self, QBXML): #for CustomerRs @@ -140,6 +173,8 @@ if __name__ == '__main__': ini=CustomerQuery() iya = ini.create_customerquery_QBXML() # print(iya) - ini.get_customer_pricelevel_list(iya) - - print("The time difference is :", timeit.default_timer() - starttime) \ No newline at end of file + Customer= ini.get_customer_pricelevel_list() + print(f'{Customer = }') + res, jsondt = ini.to_json() + print(f'{jsondt=}') + print("The time difference is :", timeit.default_timer() - starttime) diff --git a/main.py b/main.py index e436a76..5bc6ebb 100644 --- a/main.py +++ b/main.py @@ -16,7 +16,7 @@ import shutil from qbpurchaseorderquery import PurchaseOrderQuery import pdfexcel4DNwithxlrd from ItemInventoryQuery import ItemInventoryQuery -from SO_to_Inv import readSO +from SO_to_Inv import readSO, CustomerQuery import os import pprint @@ -68,6 +68,21 @@ async def get_iteminventory_fullname(maxreturned:Union[int, None] = None): else: return {'Info': f"NOT Saved", 'Status':'ERROR', 'msg':data} + +@app.get('/get-customer-fullname') +async def get_customer_fullname(maxreturned:Union[int, None] = None): + print(f'{maxreturned = }') + # item_inv = CustomerQuery( IncludeRetElement=['FullName'], MaxReturned=maxreturned) #MaxReturned=None means get ALL items + customer = CustomerQuery.CustomerQuery(MaxReturned=maxreturned) + # QBXML = customer.create_QBXML() + itu = customer.create_customerquery_QBXML() + status, data = customer.to_json() + if status: + return data + else: + return {'Info': f"NOT Saved", 'Status':'ERROR', 'msg':data} + + @app.post("/upload-file/") async def create_upload_file(uploaded_file: UploadFile): base_file_location = f"DN_Excel_files"