ad get-iteminventory-fullname path

This commit is contained in:
bcomsugi 2024-07-21 13:18:13 +07:00
parent 9840a2000a
commit 68b4edfe3d
5 changed files with 81 additions and 24 deletions

View File

@ -4,6 +4,7 @@ import pandas as pd
from datetime import date, datetime from datetime import date, datetime
import timeit import timeit
import os import os
import json
class ItemInventoryQuery: class ItemInventoryQuery:
def __init__(self, *args, **kwargs) -> None: def __init__(self, *args, **kwargs) -> None:
@ -57,7 +58,7 @@ class ItemInventoryQuery:
QBXMLMsgsRq.tail = "\n" QBXMLMsgsRq.tail = "\n"
QBXMLMsgsRq.text = "\n " QBXMLMsgsRq.text = "\n "
ItemInventoryQueryRq = self.create_sub_element(ET, QBXMLMsgsRq, "ItemInventoryQueryRq","\n " ) ItemInventoryQueryRq = self.create_sub_element(ET, QBXMLMsgsRq, "ItemInventoryQueryRq","\n " )
# print(f'{self.MaxReturned = }')
if self.MaxReturned is not None: if self.MaxReturned is not None:
MaxReturned = self.create_sub_element(ET, ItemInventoryQueryRq, "MaxReturned", self.MaxReturned, 4) MaxReturned = self.create_sub_element(ET, ItemInventoryQueryRq, "MaxReturned", self.MaxReturned, 4)
@ -124,8 +125,9 @@ class ItemInventoryQuery:
data = tree.findall(".//ItemInventoryRet") data = tree.findall(".//ItemInventoryRet")
NameFromTaco = [] NameFromTaco = []
FullName = [] FullName = []
# print(f'get_data->response_string:{response_string}') print(f'get_data->response_string:{response_string}')
# print(data) # print(data)
if 'DataExtRet' in self.IncludeRetElement:
for dt in data: for dt in data:
# print(dt.find('FullName').text, ) # print(dt.find('FullName').text, )
for dtextret in dt.findall('DataExtRet'): for dtextret in dt.findall('DataExtRet'):
@ -141,6 +143,16 @@ class ItemInventoryQuery:
else: else:
print(f'ItemInventoryQuery->Not Exact Len:Fullname={len(FullName)}; NameFromTaco={len(NameFromTaco)}') print(f'ItemInventoryQuery->Not Exact Len:Fullname={len(FullName)}; NameFromTaco={len(NameFromTaco)}')
return {} return {}
else:
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=''): def to_excel(self, filename:str=''):
start = timeit.default_timer() start = timeit.default_timer()
# print(f'to_excel filename:{self.filename}') # print(f'to_excel filename:{self.filename}')
@ -172,27 +184,58 @@ class ItemInventoryQuery:
print("The difference of time is :", timeit.default_timer() - start) 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}" 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() start = timeit.default_timer()
if __name__ == "__main__": if __name__ == "__main__":
print('start ItemIventoryQuery')
# ini= ItemInventoryQuery(IncludeRetElement='FullName', OwnerID = "0") # ini= ItemInventoryQuery(IncludeRetElement='FullName', OwnerID = "0")
for x in range(0, 1): for x in range(0, 1):
# ini= ItemInventoryQuery(IncludeRetElement=['FullName', 'DataExtRet'] , OwnerID = str(x), MaxReturned=None) # 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 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", NameRangeFilter=["TSHT:TS LUXURY:TS-L-252", "TSHT:TS LUXURY:TS-L-252"])
# ini= ItemInventoryQuery( OwnerID = str(x), MaxReturned="10") # 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= ItemInventoryQuery( OwnerID = str(x))
# ini.to_excel('ItemInventory\ItemInventory_FromQB.xlsx') # 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()) itu = ini.connect_to_quickbooks(ini.create_QBXML())
# print(itu) # print(itu)
ret, msg = ini.status_ok(itu) ret, msg = ini.status_ok(itu)
if ret: if ret:
print("YEAH") print("YEAH")
df = pd.DataFrame.from_dict(ini.get_data(itu)) # df = pd.DataFrame.from_dict(ini.get_data(itu))
print(df)
df.to_excel('ItemInventory\ItemInventory_FromQB.xlsx', index=False) # dfdict = df.to_dict('list')
modtime = datetime.fromtimestamp(os.path.getmtime('ItemInventory\ItemInventory_FromQB.xlsx'))
print(f"modified Time:{modtime}") # 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 break
# print(ini.status_ok(itu)) # print(ini.status_ok(itu))
# print(ini.create_QBXML()) # print(ini.create_QBXML())

View File

@ -411,7 +411,7 @@ if __name__ == '__main__':
print(ini.create_QBXML()) print(ini.create_QBXML())
response_string = ini.connect_to_quickbooks(ini.create_QBXML()) response_string = ini.connect_to_quickbooks(ini.create_QBXML())
open_sales_orders = ini.get_open_so(response_string) 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(ini.get_open_sales_order(open_sales_orders))
print("The time difference is :", timeit.default_timer() - starttime) print("The time difference is :", timeit.default_timer() - starttime)

1
list Normal file
View File

@ -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"}}

13
main.py
View File

@ -1,6 +1,7 @@
from fastapi.responses import HTMLResponse from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
from fastapi import FastAPI, Request, UploadFile, Body from fastapi import FastAPI, Request, UploadFile, Body
from typing import Union
# from icecream import install # from icecream import install
# import icecream # import icecream
# install() # install()
@ -57,6 +58,18 @@ async def renew_iteminventory():
else: else:
return {'Info': f"NOT Saved", 'Status':'ERROR', 'msg':msg} 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/") @app.post("/upload-file/")
async def create_upload_file(uploaded_file: UploadFile): async def create_upload_file(uploaded_file: UploadFile):
base_file_location = f"DN_Excel_files" base_file_location = f"DN_Excel_files"

View File

@ -70,7 +70,7 @@ class GeneralSummaryReportQuery:
# print(enumfodnc.qbFileOpenDoNotCare) # print(enumfodnc.qbFileOpenDoNotCare)
sessionManager = win32com.client.Dispatch("QBXMLRP2.RequestProcessor") sessionManager = win32com.client.Dispatch("QBXMLRP2.RequestProcessor")
sessionManager.OpenConnection('', 'DASA2') sessionManager.OpenConnection('', 'DASA2')
ticket = sessionManager.BeginSession("z:\\DBW Bogor.qbw", 2) ticket = sessionManager.BeginSession("q:\\DBW Bogor.qbw", 2)
# Send query and receive response # Send query and receive response
response_string = sessionManager.ProcessRequest(ticket, qbxml_query) response_string = sessionManager.ProcessRequest(ticket, qbxml_query)