mirror of
https://github.com/bcomsugi/dasaproject.git
synced 2026-01-10 16:52:38 +07:00
ad get-iteminventory-fullname path
This commit is contained in:
parent
9840a2000a
commit
68b4edfe3d
@ -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,23 +125,34 @@ 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)
|
||||||
for dt in data:
|
if 'DataExtRet' in self.IncludeRetElement:
|
||||||
# print(dt.find('FullName').text, )
|
for dt in data:
|
||||||
for dtextret in dt.findall('DataExtRet'):
|
# print(dt.find('FullName').text, )
|
||||||
|
for dtextret in dt.findall('DataExtRet'):
|
||||||
|
|
||||||
if dtextret.findtext('DataExtName')=='NameFromTaco':
|
if dtextret.findtext('DataExtName')=='NameFromTaco':
|
||||||
FullName.append(dt.find('FullName').text.strip())
|
FullName.append(dt.find('FullName').text.strip())
|
||||||
NameFromTaco.append(dtextret.findtext('DataExtValue').strip())
|
NameFromTaco.append(dtextret.findtext('DataExtValue').strip())
|
||||||
# print(f"{dt.find('FullName').text}->{dtextret.find('DataExtName').text} : {dtextret.findtext('DataExtValue')}")
|
# print(f"{dt.find('FullName').text}->{dtextret.find('DataExtName').text} : {dtextret.findtext('DataExtValue')}")
|
||||||
# print()
|
# print()
|
||||||
if len(FullName)>0 and len(NameFromTaco)>0 and len(FullName) == len(NameFromTaco):
|
if len(FullName)>0 and len(NameFromTaco)>0 and len(FullName) == len(NameFromTaco):
|
||||||
# print(f'ItemInventoryQuery->exact len:{len(FullName)}')
|
# print(f'ItemInventoryQuery->exact len:{len(FullName)}')
|
||||||
return {'FullName': FullName, 'NameFromTaco': NameFromTaco}
|
return {'FullName': FullName, 'NameFromTaco': NameFromTaco}
|
||||||
|
else:
|
||||||
|
print(f'ItemInventoryQuery->Not Exact Len:Fullname={len(FullName)}; NameFromTaco={len(NameFromTaco)}')
|
||||||
|
return {}
|
||||||
else:
|
else:
|
||||||
print(f'ItemInventoryQuery->Not Exact Len:Fullname={len(FullName)}; NameFromTaco={len(NameFromTaco)}')
|
fullnames = tree.findall(".//FullName")
|
||||||
return {}
|
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())
|
||||||
|
|||||||
@ -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
1
list
Normal 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
13
main.py
@ -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"
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user