mirror of
https://github.com/bcomsugi/Quickbooks-API.git
synced 2026-01-09 09:42:40 +07:00
update
This commit is contained in:
parent
1b879b7a4b
commit
e2121465e1
10
QBClasses.py
10
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"])
|
||||
|
||||
66
server.py
66
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())
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user