diff --git a/QBClasses.py b/QBClasses.py index b40569f..27ca116 100644 --- a/QBClasses.py +++ b/QBClasses.py @@ -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"]) diff --git a/server.py b/server.py index 433c84a..d71b5d0 100644 --- a/server.py +++ b/server.py @@ -35,9 +35,10 @@ class baseQBQuery: self.listOfDict = self.ListOfDict(None, self.varDict, self.retName) self.statusCode = -1 self.statusMessage = "" - self.statusSeverity = "" + 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())