mirror of
https://github.com/bcomsugi/Quickbooks-API.git
synced 2026-01-10 02:02:38 +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():
|
def iteminventoryquery():
|
||||||
# g=ItemInventoryQuery(MaxReturned=2)
|
# 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("before g.all")
|
||||||
# print(f'{g.all() = }')
|
# print(f'{g.all() = }')
|
||||||
# print("after g.all")
|
# print("after g.all")
|
||||||
# print("")
|
# print("")
|
||||||
# pprint.pprint(g.filter(["FullName", "Name", "sublevel"]).all())
|
# pprint.pprint(g.filter(["FullName", "Name", "sublevel"]).all())
|
||||||
# print(f'{g.filter("fullname") = }')
|
# 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():
|
def customerquery():
|
||||||
g= CustomerQuery(MaxReturned=3, IncludeRetElement=["fullname", "name", "CompanyName", "BillAddressBlock", "ShipAddressBlock"])
|
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.listOfDict = self.ListOfDict(None, self.varDict, self.retName)
|
||||||
self.statusCode = -1
|
self.statusCode = -1
|
||||||
self.statusMessage = ""
|
self.statusMessage = ""
|
||||||
self.statusSeverity = ""
|
self.statusSeverity = ""
|
||||||
|
self.statusOk = False
|
||||||
|
|
||||||
@timing
|
# @timing
|
||||||
def create_QBXML(self):
|
def create_QBXML(self):
|
||||||
version = "13.0"
|
version = "13.0"
|
||||||
dataDict = { ### Header for qmxml with version attribute
|
dataDict = { ### Header for qmxml with version attribute
|
||||||
@ -71,7 +72,7 @@ class baseQBQuery:
|
|||||||
print(self.QBXML)
|
print(self.QBXML)
|
||||||
return self.QBXML
|
return self.QBXML
|
||||||
|
|
||||||
@timing
|
# @timing
|
||||||
def connect_to_quickbooks(self, qbxml_query=None):
|
def connect_to_quickbooks(self, qbxml_query=None):
|
||||||
# Connect to Quickbooks
|
# Connect to Quickbooks
|
||||||
sessionManager = win32com.client.Dispatch("QBXMLRP2.RequestProcessor")
|
sessionManager = win32com.client.Dispatch("QBXMLRP2.RequestProcessor")
|
||||||
@ -86,7 +87,8 @@ class baseQBQuery:
|
|||||||
sessionManager.EndSession(ticket) # Close the company file
|
sessionManager.EndSession(ticket) # Close the company file
|
||||||
sessionManager.CloseConnection() # Close the connection
|
sessionManager.CloseConnection() # Close the connection
|
||||||
# print(f'{self.response_string = }')
|
# print(f'{self.response_string = }')
|
||||||
self.isDataOK()
|
self.statusOk = self.isDataOK()
|
||||||
|
return self.statusOk
|
||||||
return self.response_string
|
return self.response_string
|
||||||
|
|
||||||
def isDataOK(self):
|
def isDataOK(self):
|
||||||
@ -94,7 +96,7 @@ class baseQBQuery:
|
|||||||
# QBXML = ET.fromstring(self.response_string)
|
# QBXML = ET.fromstring(self.response_string)
|
||||||
# print(xmltodict.parse(self.response_string))
|
# print(xmltodict.parse(self.response_string))
|
||||||
self.varDict = 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.varDict = self.varDict
|
||||||
self.listOfDict.filterKey = ["@statusCode"]
|
self.listOfDict.filterKey = ["@statusCode"]
|
||||||
self.statusCode = self.listOfDict.firstValue().get('@statusCode',None)
|
self.statusCode = self.listOfDict.firstValue().get('@statusCode',None)
|
||||||
@ -102,7 +104,13 @@ class baseQBQuery:
|
|||||||
self.statusMessage = self.listOfDict.firstValue().get('@statusMessage',None)
|
self.statusMessage = self.listOfDict.firstValue().get('@statusMessage',None)
|
||||||
self.listOfDict.filterKey = ["@statusSeverity"]
|
self.listOfDict.filterKey = ["@statusSeverity"]
|
||||||
self.statusSeverity = self.listOfDict.firstValue().get('@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 = }')
|
print(f'{self.statusCode = }, {self.statusMessage = }, {self.statusSeverity = }')
|
||||||
|
varDict = self.varDict['QBXML']['QBXMLMsgsRs'][self.__class__.__name__+"Rs"]
|
||||||
|
return True
|
||||||
# isStatusOK=None
|
# isStatusOK=None
|
||||||
|
|
||||||
# for _ in self.find_listOfDict("FullName", ): ###berhasil
|
# for _ in self.find_listOfDict("FullName", ): ###berhasil
|
||||||
@ -131,15 +139,18 @@ class baseQBQuery:
|
|||||||
# # print(self.find_firstListOfDict("FullName"))
|
# # print(self.find_firstListOfDict("FullName"))
|
||||||
# # print(self.find_allListOfDict("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)
|
# pprint.pprint(self.varDict)
|
||||||
print(f'{varDict = }')
|
|
||||||
|
# print(f'{varDict = }')
|
||||||
varDict = varDict['QBXML']['QBXMLMsgsRs'][self.__class__.__name__+"Rs"]
|
varDict = varDict['QBXML']['QBXMLMsgsRs'][self.__class__.__name__+"Rs"]
|
||||||
print(f'{varDict = }')
|
# print(f'{varDict = }')
|
||||||
|
|
||||||
for idx, key in enumerate(varDict):
|
for idx, key in enumerate(varDict):
|
||||||
# print(idx, key, len(varDict))
|
# print(idx, key, len(varDict))
|
||||||
if "Ret" in key:
|
if self.retName in key:
|
||||||
return varDict[key]
|
return varDict[key]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@ -152,12 +163,27 @@ class baseQBQuery:
|
|||||||
return True
|
return True
|
||||||
if self.QBDict:
|
if self.QBDict:
|
||||||
self.create_QBXML()
|
self.create_QBXML()
|
||||||
self.connect_to_quickbooks()
|
if self.connect_to_quickbooks():
|
||||||
return True
|
return True
|
||||||
return False
|
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):
|
def filter(self, key=None):
|
||||||
|
print(f'{key = }')
|
||||||
|
print(f'{self.statusOk = }')
|
||||||
if not self.runCheck():
|
if not self.runCheck():
|
||||||
|
print("not runcheck")
|
||||||
|
return self.ListOfDict(["abc"], self.varDict, self.retName, self.statusOk)
|
||||||
return []
|
return []
|
||||||
if isinstance(key, str):
|
if isinstance(key, str):
|
||||||
key = [key]
|
key = [key]
|
||||||
@ -194,7 +220,7 @@ class baseQBQuery:
|
|||||||
|
|
||||||
|
|
||||||
class ListOfDict:
|
class ListOfDict:
|
||||||
def __init__(self, key, var, retName) -> None:
|
def __init__(self, key, var, retName, statusOk:bool = True) -> None:
|
||||||
# print(f'{key =}, {var =}')
|
# print(f'{key =}, {var =}')
|
||||||
# self.first = self.find_firstListOfDict(key)
|
# self.first = self.find_firstListOfDict(key)
|
||||||
if key:
|
if key:
|
||||||
@ -203,6 +229,7 @@ class baseQBQuery:
|
|||||||
self.filterKey = [retName]
|
self.filterKey = [retName]
|
||||||
# print(f"{self.filterKey = }")
|
# print(f"{self.filterKey = }")
|
||||||
self.varDict = var
|
self.varDict = var
|
||||||
|
self.statusOk = statusOk
|
||||||
# print("listofDict")
|
# print("listofDict")
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
@ -219,6 +246,9 @@ class baseQBQuery:
|
|||||||
return _dct
|
return _dct
|
||||||
|
|
||||||
def all(self, var:dict=None, dataRetList:list=None):
|
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 for x in self.find_listOfDict(var, dataRetList)]
|
||||||
# _lst = [x[self.filterKey] for x in self.find_listOfDict(var, dataRetList)]
|
# _lst = [x[self.filterKey] for x in self.find_listOfDict(var, dataRetList)]
|
||||||
# if _lst:
|
# if _lst:
|
||||||
@ -227,13 +257,19 @@ class baseQBQuery:
|
|||||||
# return []
|
# return []
|
||||||
|
|
||||||
def allOnlyValue(self, var:dict=None, dataRetList:list=None):
|
def allOnlyValue(self, var:dict=None, dataRetList:list=None):
|
||||||
|
if not self.statusOk:
|
||||||
|
return []
|
||||||
_lst = [x for x in self.find_listOfDict(var, dataRetList)]
|
_lst = [x for x in self.find_listOfDict(var, dataRetList)]
|
||||||
return _lst
|
return _lst
|
||||||
|
|
||||||
def first(self, var:dict=None, dataRetList:list=None):
|
def first(self, var:dict=None, dataRetList:list=None):
|
||||||
|
if not self.statusOk:
|
||||||
|
return []
|
||||||
return next(self.find_listOfDict( var, dataRetList), None)
|
return next(self.find_listOfDict( var, dataRetList), None)
|
||||||
|
|
||||||
def firstValue(self, var:dict=None, dataRetList:list=None):
|
def firstValue(self, var:dict=None, dataRetList:list=None):
|
||||||
|
if not self.statusOk:
|
||||||
|
return []
|
||||||
# return self.first(var, dataRetList)[self.filterKey]
|
# return self.first(var, dataRetList)[self.filterKey]
|
||||||
_val=self.first(var, dataRetList)
|
_val=self.first(var, dataRetList)
|
||||||
# print(f'{_val = }')
|
# print(f'{_val = }')
|
||||||
@ -244,12 +280,16 @@ class baseQBQuery:
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
def last(self, var:dict=None, dataRetList:list=None):
|
def last(self, var:dict=None, dataRetList:list=None):
|
||||||
|
if not self.statusOk:
|
||||||
|
return []
|
||||||
# *_, last = self.find_listOfDict( var, dataRetList)
|
# *_, last = self.find_listOfDict( var, dataRetList)
|
||||||
_val= self.all(var, dataRetList)
|
_val= self.all(var, dataRetList)
|
||||||
if _val:return _val[-1]
|
if _val:return _val[-1]
|
||||||
else: return []
|
else: return []
|
||||||
|
|
||||||
def lastValue(self, var:dict=None, dataRetList:list=None):
|
def lastValue(self, var:dict=None, dataRetList:list=None):
|
||||||
|
if not self.statusOk:
|
||||||
|
return []
|
||||||
_val=self.last(var, dataRetList)
|
_val=self.last(var, dataRetList)
|
||||||
# print(f"lastValue {_val =}")
|
# print(f"lastValue {_val =}")
|
||||||
if _val:
|
if _val:
|
||||||
@ -259,6 +299,8 @@ class baseQBQuery:
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
def count(self, var:dict=None, dataRetList:list=None):
|
def count(self, var:dict=None, dataRetList:list=None):
|
||||||
|
if not self.statusOk:
|
||||||
|
return 0
|
||||||
# print(len(self.all()))
|
# print(len(self.all()))
|
||||||
return len(self.all())
|
return len(self.all())
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user