From 68b4edfe3de8220f24eba4cc7824d2d348f88699 Mon Sep 17 00:00:00 2001 From: bcomsugi Date: Sun, 21 Jul 2024 13:18:13 +0700 Subject: [PATCH] ad get-iteminventory-fullname path --- ItemInventoryQuery.py | 87 +++++++++++++++++++++++++++++---------- SO_to_Inv/invoiceadd.py | 2 +- list | 1 + main.py | 13 ++++++ qbgeneralsummaryreport.py | 2 +- 5 files changed, 81 insertions(+), 24 deletions(-) create mode 100644 list diff --git a/ItemInventoryQuery.py b/ItemInventoryQuery.py index 439e99f..c1ebc05 100644 --- a/ItemInventoryQuery.py +++ b/ItemInventoryQuery.py @@ -4,6 +4,7 @@ import pandas as pd from datetime import date, datetime import timeit import os +import json class ItemInventoryQuery: def __init__(self, *args, **kwargs) -> None: @@ -57,7 +58,7 @@ class ItemInventoryQuery: QBXMLMsgsRq.tail = "\n" QBXMLMsgsRq.text = "\n " ItemInventoryQueryRq = self.create_sub_element(ET, QBXMLMsgsRq, "ItemInventoryQueryRq","\n " ) - + # print(f'{self.MaxReturned = }') if self.MaxReturned is not None: MaxReturned = self.create_sub_element(ET, ItemInventoryQueryRq, "MaxReturned", self.MaxReturned, 4) @@ -124,23 +125,34 @@ class ItemInventoryQuery: data = tree.findall(".//ItemInventoryRet") NameFromTaco = [] FullName = [] - # print(f'get_data->response_string:{response_string}') + print(f'get_data->response_string:{response_string}') # print(data) - for dt in data: - # print(dt.find('FullName').text, ) - for dtextret in dt.findall('DataExtRet'): - - if dtextret.findtext('DataExtName')=='NameFromTaco': - FullName.append(dt.find('FullName').text.strip()) - NameFromTaco.append(dtextret.findtext('DataExtValue').strip()) - # print(f"{dt.find('FullName').text}->{dtextret.find('DataExtName').text} : {dtextret.findtext('DataExtValue')}") - # print() - if len(FullName)>0 and len(NameFromTaco)>0 and len(FullName) == len(NameFromTaco): - # print(f'ItemInventoryQuery->exact len:{len(FullName)}') - return {'FullName': FullName, 'NameFromTaco': NameFromTaco} + if 'DataExtRet' in self.IncludeRetElement: + for dt in data: + # print(dt.find('FullName').text, ) + for dtextret in dt.findall('DataExtRet'): + + if dtextret.findtext('DataExtName')=='NameFromTaco': + FullName.append(dt.find('FullName').text.strip()) + NameFromTaco.append(dtextret.findtext('DataExtValue').strip()) + # print(f"{dt.find('FullName').text}->{dtextret.find('DataExtName').text} : {dtextret.findtext('DataExtValue')}") + # print() + if len(FullName)>0 and len(NameFromTaco)>0 and len(FullName) == len(NameFromTaco): + # print(f'ItemInventoryQuery->exact len:{len(FullName)}') + return {'FullName': FullName, 'NameFromTaco': NameFromTaco} + else: + print(f'ItemInventoryQuery->Not Exact Len:Fullname={len(FullName)}; NameFromTaco={len(NameFromTaco)}') + return {} else: - print(f'ItemInventoryQuery->Not Exact Len:Fullname={len(FullName)}; NameFromTaco={len(NameFromTaco)}') - return {} + fullnames = tree.findall(".//FullName") + for fullname in fullnames: + if len(fullname.text.split(":"))==3: + FullName.append(fullname.text) + # print(fullname.text.strip(), type(fullname)) + if len(FullName)>0: + return {'FullName': FullName} + else: + return {} def to_excel(self, filename:str=''): start = timeit.default_timer() # print(f'to_excel filename:{self.filename}') @@ -172,27 +184,58 @@ class ItemInventoryQuery: print("The difference of time is :", timeit.default_timer() - start) return True, f"It takes {format(timeit.default_timer() - start, '.2f')} seconds to update {filename}" + def to_json(self): + start = timeit.default_timer() + js_data=None + # print(self.create_QBXML()) + response_string = self.connect_to_quickbooks(self.create_QBXML()) + + ret, msg = self.status_ok(response_string) + if ret: + df = pd.DataFrame.from_dict(self.get_data(response_string)) + print(df) + if len(df)>0: + js_data = json.dumps(df.to_dict("list")) + 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 + start = timeit.default_timer() if __name__ == "__main__": + print('start ItemIventoryQuery') # ini= ItemInventoryQuery(IncludeRetElement='FullName', OwnerID = "0") for x in range(0, 1): # ini= ItemInventoryQuery(IncludeRetElement=['FullName', 'DataExtRet'] , OwnerID = str(x), MaxReturned=None) # ini= ItemInventoryQuery( OwnerID = str(x), MaxReturned="10", NameRangeFilter=["TSHT:TS WOODGRAIN:TS-252", "TSHT:TS WOODGRAIN:TS-252"]) # ini= ItemInventoryQuery( OwnerID = str(x), MaxReturned="10", NameRangeFilter=["TSHT:TS LUXURY:TS-L-252", "TSHT:TS LUXURY:TS-L-252"]) # ini= ItemInventoryQuery( OwnerID = str(x), MaxReturned="10") - ini= ItemInventoryQuery( OwnerID ="0", MaxReturned=None) + # ini= ItemInventoryQuery( OwnerID ="0", MaxReturned=None, IncludeRetElement=['FullName', 'DataExtRet']) + ini= ItemInventoryQuery( IncludeRetElement=['FullName']) # ini= ItemInventoryQuery( OwnerID = str(x)) # ini.to_excel('ItemInventory\ItemInventory_FromQB.xlsx') + # print(f'{ini.create_QBXML() = }') + qbxml = ini.create_QBXML() + status, msg = ini.to_json() + print(f'{msg = }') itu = ini.connect_to_quickbooks(ini.create_QBXML()) # print(itu) ret, msg = ini.status_ok(itu) if ret: print("YEAH") - df = pd.DataFrame.from_dict(ini.get_data(itu)) - print(df) - df.to_excel('ItemInventory\ItemInventory_FromQB.xlsx', index=False) - modtime = datetime.fromtimestamp(os.path.getmtime('ItemInventory\ItemInventory_FromQB.xlsx')) - print(f"modified Time:{modtime}") + # df = pd.DataFrame.from_dict(ini.get_data(itu)) + + # dfdict = df.to_dict('list') + + # print(json.dumps(dfdict)) + # print(df.to_json(orient="values")) + # print(f'{dfdict = }') + # print(df) + # df.to_excel('ItemInventory\ItemInventory_FromQB.xlsx', index=False) + # modtime = datetime.fromtimestamp(os.path.getmtime('ItemInventory\ItemInventory_FromQB.xlsx')) + # print(f"modified Time:{modtime}") break # print(ini.status_ok(itu)) # print(ini.create_QBXML()) diff --git a/SO_to_Inv/invoiceadd.py b/SO_to_Inv/invoiceadd.py index 9b5650b..6ad6212 100644 --- a/SO_to_Inv/invoiceadd.py +++ b/SO_to_Inv/invoiceadd.py @@ -411,7 +411,7 @@ if __name__ == '__main__': print(ini.create_QBXML()) response_string = ini.connect_to_quickbooks(ini.create_QBXML()) open_sales_orders = ini.get_open_so(response_string) - print(open_sales_orders) + print(f'{open_sales_orders = }') print(ini.get_open_sales_order(open_sales_orders)) print("The time difference is :", timeit.default_timer() - starttime) \ No newline at end of file diff --git a/list b/list new file mode 100644 index 0000000..0cd36dd --- /dev/null +++ b/list @@ -0,0 +1 @@ +{"FullName":{"0":"ECO:0:ECO-001","1":"ECO:0:ECO-002","2":"ECO:0:ECO-006","3":"ECO:0:ECO-007","4":"ECO:0:ECO-009"}} \ No newline at end of file diff --git a/main.py b/main.py index 8c4e34c..1c39e6c 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,7 @@ from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates from fastapi import FastAPI, Request, UploadFile, Body +from typing import Union # from icecream import install # import icecream # install() @@ -57,6 +58,18 @@ async def renew_iteminventory(): else: return {'Info': f"NOT Saved", 'Status':'ERROR', 'msg':msg} + +@app.get('/get-iteminventory-fullname') +async def get_iteminventory_fullname(maxreturned:Union[int, None] = None): + item_inv = ItemInventoryQuery( IncludeRetElement=['FullName'], MaxReturned=maxreturned) #MaxReturned=None means get ALL items + QBXML = item_inv.create_QBXML() + itu = item_inv.connect_to_quickbooks(item_inv.create_QBXML()) + status, data = item_inv.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" diff --git a/qbgeneralsummaryreport.py b/qbgeneralsummaryreport.py index 1a93ec1..ce6af47 100644 --- a/qbgeneralsummaryreport.py +++ b/qbgeneralsummaryreport.py @@ -70,7 +70,7 @@ class GeneralSummaryReportQuery: # print(enumfodnc.qbFileOpenDoNotCare) sessionManager = win32com.client.Dispatch("QBXMLRP2.RequestProcessor") sessionManager.OpenConnection('', 'DASA2') - ticket = sessionManager.BeginSession("z:\\DBW Bogor.qbw", 2) + ticket = sessionManager.BeginSession("q:\\DBW Bogor.qbw", 2) # Send query and receive response response_string = sessionManager.ProcessRequest(ticket, qbxml_query)