This commit is contained in:
bcomsugi 2024-07-23 05:13:19 +07:00
parent 1b879b7a4b
commit e2121465e1
2 changed files with 61 additions and 15 deletions

View File

@ -237,16 +237,20 @@ def main():
def iteminventoryquery():
# g=ItemInventoryQuery(MaxReturned=2)
g=ItemInventoryQuery(MaxReturned = 200, OwnerID=0)#, IncludeRetElement="DataExtRet") #put OwnerID=0 to get DataExtRet
g=ItemInventoryQuery(MaxReturned = 3, IncludeRetElement=["DataExtRet", "Name"]) #put OwnerID=0 to get DataExtRet
# print("before g.all")
# print(f'{g.all() = }')
# print("after g.all")
# print("")
# pprint.pprint(g.filter(["FullName", "Name", "sublevel"]).all())
# print(f'{g.filter("fullname") = }')
# print(g.filter(["Fullname", "Name"]).count())
print(f'{g = }')
print("before")
print(g.filter([ "Name", "QuantityOnHand", "QUantityOnSalesOrder", "QuantityonOrder"]).first())
print(g.filter(["DataExtRet"]).all())
pprint.pprint(g.returnRet())
# print(g.filter(["DataExtRet"]).all())
def customerquery():
g= CustomerQuery(MaxReturned=3, IncludeRetElement=["fullname", "name", "CompanyName", "BillAddressBlock", "ShipAddressBlock"])

View File

@ -36,8 +36,9 @@ class baseQBQuery:
self.statusCode = -1
self.statusMessage = ""
self.statusSeverity = ""
self.statusOk = False
@timing
# @timing
def create_QBXML(self):
version = "13.0"
dataDict = { ### Header for qmxml with version attribute
@ -71,7 +72,7 @@ class baseQBQuery:
print(self.QBXML)
return self.QBXML
@timing
# @timing
def connect_to_quickbooks(self, qbxml_query=None):
# Connect to Quickbooks
sessionManager = win32com.client.Dispatch("QBXMLRP2.RequestProcessor")
@ -86,7 +87,8 @@ class baseQBQuery:
sessionManager.EndSession(ticket) # Close the company file
sessionManager.CloseConnection() # Close the connection
# print(f'{self.response_string = }')
self.isDataOK()
self.statusOk = self.isDataOK()
return self.statusOk
return self.response_string
def isDataOK(self):
@ -94,7 +96,7 @@ class baseQBQuery:
# QBXML = ET.fromstring(self.response_string)
# print(xmltodict.parse(self.response_string))
self.varDict = xmltodict.parse(self.response_string)
# pprint.pprint(self.varDict)
pprint.pprint(self.varDict)
self.listOfDict.varDict = self.varDict
self.listOfDict.filterKey = ["@statusCode"]
self.statusCode = self.listOfDict.firstValue().get('@statusCode',None)
@ -102,7 +104,13 @@ class baseQBQuery:
self.statusMessage = self.listOfDict.firstValue().get('@statusMessage',None)
self.listOfDict.filterKey = ["@statusSeverity"]
self.statusSeverity = self.listOfDict.firstValue().get('@statusSeverity')
self.listOfDict.filterKey = [self.retName]
if self.listOfDict.firstValue().get(self.retName,None)==None:
return False
print(f'{self.statusCode = }, {self.statusMessage = }, {self.statusSeverity = }')
varDict = self.varDict['QBXML']['QBXMLMsgsRs'][self.__class__.__name__+"Rs"]
return True
# isStatusOK=None
# for _ in self.find_listOfDict("FullName", ): ###berhasil
@ -131,15 +139,18 @@ class baseQBQuery:
# # print(self.find_firstListOfDict("FullName"))
# # print(self.find_allListOfDict("FullName"))
def returnRet(self, varDict):
def returnRet(self, varDict:dict = None):
if varDict== None:
varDict=self.varDict
# pprint.pprint(self.varDict)
print(f'{varDict = }')
# print(f'{varDict = }')
varDict = varDict['QBXML']['QBXMLMsgsRs'][self.__class__.__name__+"Rs"]
print(f'{varDict = }')
# print(f'{varDict = }')
for idx, key in enumerate(varDict):
# print(idx, key, len(varDict))
if "Ret" in key:
if self.retName in key:
return varDict[key]
return None
@ -152,12 +163,27 @@ class baseQBQuery:
return True
if self.QBDict:
self.create_QBXML()
self.connect_to_quickbooks()
return True
if self.connect_to_quickbooks():
return True
return False
def __repr__(self) -> str:
self.all()
# print(f'{self.returnRet() = }')
return self.response_string
# def __str__(self) -> str:
# print("repr")
# print(self.returnRet())
# return "abc"
def filter(self, key=None):
print(f'{key = }')
print(f'{self.statusOk = }')
if not self.runCheck():
print("not runcheck")
return self.ListOfDict(["abc"], self.varDict, self.retName, self.statusOk)
return []
if isinstance(key, str):
key = [key]
@ -194,7 +220,7 @@ class baseQBQuery:
class ListOfDict:
def __init__(self, key, var, retName) -> None:
def __init__(self, key, var, retName, statusOk:bool = True) -> None:
# print(f'{key =}, {var =}')
# self.first = self.find_firstListOfDict(key)
if key:
@ -203,6 +229,7 @@ class baseQBQuery:
self.filterKey = [retName]
# print(f"{self.filterKey = }")
self.varDict = var
self.statusOk = statusOk
# print("listofDict")
def __repr__(self) -> str:
@ -219,6 +246,9 @@ class baseQBQuery:
return _dct
def all(self, var:dict=None, dataRetList:list=None):
print(f'{self.statusOk = }')
if not self.statusOk:
return []
_lst = [x for x in self.find_listOfDict(var, dataRetList)]
# _lst = [x[self.filterKey] for x in self.find_listOfDict(var, dataRetList)]
# if _lst:
@ -227,13 +257,19 @@ class baseQBQuery:
# return []
def allOnlyValue(self, var:dict=None, dataRetList:list=None):
if not self.statusOk:
return []
_lst = [x for x in self.find_listOfDict(var, dataRetList)]
return _lst
def first(self, var:dict=None, dataRetList:list=None):
if not self.statusOk:
return []
return next(self.find_listOfDict( var, dataRetList), None)
def firstValue(self, var:dict=None, dataRetList:list=None):
if not self.statusOk:
return []
# return self.first(var, dataRetList)[self.filterKey]
_val=self.first(var, dataRetList)
# print(f'{_val = }')
@ -244,12 +280,16 @@ class baseQBQuery:
return []
def last(self, var:dict=None, dataRetList:list=None):
if not self.statusOk:
return []
# *_, last = self.find_listOfDict( var, dataRetList)
_val= self.all(var, dataRetList)
if _val:return _val[-1]
else: return []
def lastValue(self, var:dict=None, dataRetList:list=None):
if not self.statusOk:
return []
_val=self.last(var, dataRetList)
# print(f"lastValue {_val =}")
if _val:
@ -259,6 +299,8 @@ class baseQBQuery:
return []
def count(self, var:dict=None, dataRetList:list=None):
if not self.statusOk:
return 0
# print(len(self.all()))
return len(self.all())