mirror of
https://github.com/bcomsugi/Quickbooks-API.git
synced 2026-01-10 10:12:40 +07:00
Compare commits
2 Commits
a23432157f
...
92352a2dc1
| Author | SHA1 | Date | |
|---|---|---|---|
| 92352a2dc1 | |||
| ab9847c4d3 |
15
QBClasses.py
15
QBClasses.py
@ -1,7 +1,7 @@
|
|||||||
from server import baseQBQuery, timing
|
from server import baseQBQuery, timing
|
||||||
import pprint
|
import pprint
|
||||||
import timeit
|
# import timeit
|
||||||
import xml.dom.minidom
|
# import xml.dom.minidom
|
||||||
from utils import timing, cleanIncludeRetElements, makeAList
|
from utils import timing, cleanIncludeRetElements, makeAList
|
||||||
import json
|
import json
|
||||||
from typing import Union
|
from typing import Union
|
||||||
@ -241,8 +241,9 @@ def LineAdd(lineAdd:Union[list, dict])->dict:
|
|||||||
dct = xmltodict.parse(txt)
|
dct = xmltodict.parse(txt)
|
||||||
print(f'{dct = }')
|
print(f'{dct = }')
|
||||||
|
|
||||||
x=[{'ItemRef_FullName': 'Sugiarto', 'ItemRef_ListID':1234, 'Desc':"lorem"}, {'ItemRef_FullName': 'Sugiarto', 'ItemRef_ListID':1234, 'Desc':"lorem"}]
|
# x=[{'ItemRef_FullName': 'Sugiarto', 'ItemRef_ListID':1234, 'Desc':"lorem"}, {'ItemRef_FullName': 'Sugiarto', 'ItemRef_ListID':1234, 'Desc':"lorem"}]
|
||||||
LineAdd(x)
|
# LineAdd(x)
|
||||||
|
|
||||||
# print(cleanIncludeRetElements(['ActiveOnly', 'NonZero', 'All'], "nonzero", 'ActiveOnly'))
|
# print(cleanIncludeRetElements(['ActiveOnly', 'NonZero', 'All'], "nonzero", 'ActiveOnly'))
|
||||||
|
|
||||||
class InvoiceAdd(baseQBQuery):
|
class InvoiceAdd(baseQBQuery):
|
||||||
@ -643,7 +644,7 @@ class SalesOrderAdd(baseQBQuery):
|
|||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
# self.includeRetElements_allowed = ['TxnID', 'TimeCreated', 'TimeModified', 'EditSequence', 'TxnNumber', 'CustomerRef', 'ClassRef', 'ARAccontRef', 'TemplateRef']
|
# self.includeRetElements_allowed = ['TxnID', 'TimeCreated', 'TimeModified', 'EditSequence', 'TxnNumber', 'CustomerRef', 'ClassRef', 'ARAccontRef', 'TemplateRef']
|
||||||
self.onError = "stopOnError"
|
self.onError = "stopOnError"
|
||||||
self.retName = 'SalesOrderAddRet'
|
self.retName = 'SalesOrderRet'
|
||||||
|
|
||||||
self.defaultFilterKey = "TxnID"
|
self.defaultFilterKey = "TxnID"
|
||||||
self.className = "SalesOrderAdd"
|
self.className = "SalesOrderAdd"
|
||||||
@ -654,7 +655,11 @@ class SalesOrderAdd(baseQBQuery):
|
|||||||
|
|
||||||
self.QBDict[self.classNameRq]={}
|
self.QBDict[self.classNameRq]={}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.isRequiredFieldSatisfied = False
|
self.isRequiredFieldSatisfied = False
|
||||||
|
if 'requestID' in kwargs:
|
||||||
|
self.QBDict[self.classNameRq]={'@requestID':kwargs.get('requestID', '1')}
|
||||||
self.QBDict[self.classNameRq][self.__class__.__name__]={'@defMacro':'MACROTYPE'}
|
self.QBDict[self.classNameRq][self.__class__.__name__]={'@defMacro':'MACROTYPE'}
|
||||||
if 'CustomerRef_ListID' in kwargs:
|
if 'CustomerRef_ListID' in kwargs:
|
||||||
if 'CustomerRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
|
if 'CustomerRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
|
||||||
|
|||||||
19
addSO.py
19
addSO.py
@ -23,17 +23,23 @@ def addSO(data:dict)->bool:
|
|||||||
UnitOfMeasure=SOLine.get('UnitOfMeasure', None)
|
UnitOfMeasure=SOLine.get('UnitOfMeasure', None)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
data = {'CustomerRef_FullName': '999 HPL', 'RefNumber':'Ref12345'}
|
data = {'requestID': '345', 'CustomerRef_FullName': '999 HPL', 'RefNumber':'Ref12345', 'TxnDate': "2024-09-01"}
|
||||||
lineAdd = [{'ItemRef_FullName':'TACO:AA:TH-006AA', 'Quantity':5, 'Rate':1200}, {'ItemRef_FullName':'TACO:J_FC:TH-807J','Other1':"my reftoother1", 'Quantity':1, 'Rate':5500}]
|
# data = { 'CustomerRef_FullName': '999 HPL', 'RefNumber':'Ref12345', 'TxnDate': "2024-09-01"}
|
||||||
|
includeRetElement = ['TxnID', 'EditSequence', 'CustomerRef', 'TemplateRef', 'TxnDate', 'RefNumber', 'TotalAmount', 'SalesOrderLineRet']
|
||||||
|
data['IncludeRetElement'] = includeRetElement
|
||||||
|
lineAdd = [{'ItemRef_FullName':'TACO:AA:TH-006AA', 'Quantity':5, 'Rate':1200}, {'ItemRef_FullName':'TACO:J_FC_NT:TH-807J','Other1':"my reftoother1", 'Quantity':1, 'Rate':5500}]
|
||||||
|
lineAdd = [{'ItemRef_FullName':'TACO:AA:TH-006AA', 'Quantity':5, 'Rate':1200}, {'ItemRef_FullName':'TACO:J_FC_NT:TH-807J','Other1':"my reftoother1", 'Quantity':1, }]
|
||||||
# lineAdd = {'ItemRef_FullName':'Item123', 'Quantity':5, 'Rate':1200}#, {'ItemRef_FullName':'Item23A', 'Quantity':1, 'Rate':5500}
|
# lineAdd = {'ItemRef_FullName':'Item123', 'Quantity':5, 'Rate':1200}#, {'ItemRef_FullName':'Item23A', 'Quantity':1, 'Rate':5500}
|
||||||
data['SalesOrderLineAdd']=lineAdd
|
data['SalesOrderLineAdd']=lineAdd
|
||||||
print("")
|
print("")
|
||||||
print('this is the format to ADD SO or INV')
|
print('this is the format to ADD SO or INV')
|
||||||
pprint(data)
|
pprint(data, sort_dicts=False)
|
||||||
print("")
|
print("")
|
||||||
soAdd = SalesOrderAdd(**data)
|
soAdd = SalesOrderAdd(**data)
|
||||||
# print(f'{soAdd = }')
|
print(f'{soAdd = }')
|
||||||
print(soAdd.__repr__)
|
print(f'{soAdd.__repr__ = }')
|
||||||
|
print(f'{soAdd.all() = }')
|
||||||
|
pprint(soAdd.to_json())
|
||||||
|
|
||||||
def test_preparedata():
|
def test_preparedata():
|
||||||
print("Test Preparedata")
|
print("Test Preparedata")
|
||||||
@ -43,7 +49,8 @@ def test_preparedata():
|
|||||||
'''
|
'''
|
||||||
prepareData(data)
|
prepareData(data)
|
||||||
if __name__=='__main__':
|
if __name__=='__main__':
|
||||||
test_preparedata()
|
# test_preparedata()
|
||||||
|
main()
|
||||||
# data={'root':data}
|
# data={'root':data}
|
||||||
# print(f'{data = }')
|
# print(f'{data = }')
|
||||||
# QBXML = xmltodict.unparse(data, pretty=True).replace("</?qbxml>", "")#.replace(f'version="{version}"', f'version="{version}"?')
|
# QBXML = xmltodict.unparse(data, pretty=True).replace("</?qbxml>", "")#.replace(f'version="{version}"', f'version="{version}"?')
|
||||||
|
|||||||
13
server.py
13
server.py
@ -5,6 +5,7 @@ import win32com.client
|
|||||||
import xml.dom.minidom as minidom
|
import xml.dom.minidom as minidom
|
||||||
from time import time
|
from time import time
|
||||||
from utils import cleanIncludeRetElements
|
from utils import cleanIncludeRetElements
|
||||||
|
import json
|
||||||
|
|
||||||
def timing(f):
|
def timing(f):
|
||||||
# @wraps(f)
|
# @wraps(f)
|
||||||
@ -36,6 +37,7 @@ class baseQBQuery:
|
|||||||
self.class_debug = False
|
self.class_debug = False
|
||||||
### end ### variable to be replace with other class init value
|
### end ### variable to be replace with other class init value
|
||||||
self.listOfDict = self.ListOfDict(None, self.varDict, self.retName, False)
|
self.listOfDict = self.ListOfDict(None, self.varDict, self.retName, False)
|
||||||
|
self.requestID = None
|
||||||
self.statusCode = -1
|
self.statusCode = -1
|
||||||
self.statusMessage = ""
|
self.statusMessage = ""
|
||||||
self.statusSeverity = ""
|
self.statusSeverity = ""
|
||||||
@ -113,6 +115,8 @@ class baseQBQuery:
|
|||||||
if self.class_debug:
|
if self.class_debug:
|
||||||
pprint.pprint("isDataOK", self.varDict)
|
pprint.pprint("isDataOK", self.varDict)
|
||||||
self.listOfDict.varDict = self.varDict
|
self.listOfDict.varDict = self.varDict
|
||||||
|
self.listOfDict.filterKey = ["@requestID"]
|
||||||
|
self.requestID = self.listOfDict.firstValue().get('@requestID',None)
|
||||||
self.listOfDict.filterKey = ["@statusCode"]
|
self.listOfDict.filterKey = ["@statusCode"]
|
||||||
self.statusCode = self.listOfDict.firstValue().get('@statusCode',None)
|
self.statusCode = self.listOfDict.firstValue().get('@statusCode',None)
|
||||||
self.listOfDict.filterKey = ["@statusMessage"]
|
self.listOfDict.filterKey = ["@statusMessage"]
|
||||||
@ -231,13 +235,20 @@ class baseQBQuery:
|
|||||||
if not self.runCheck():
|
if not self.runCheck():
|
||||||
return None
|
return None
|
||||||
# return self.ListOfDict(None, self.varDict, self.retName).firstValue()
|
# return self.ListOfDict(None, self.varDict, self.retName).firstValue()
|
||||||
return self.ListOfDict(None, self.varDict, self.retName, self.includeRetElements_allowed, self.statusOk).firstValue()[self.retName]
|
temp = self.ListOfDict(None, self.varDict, self.retName, self.includeRetElements_allowed, self.statusOk).firstValue()[self.retName]
|
||||||
|
if self.requestID:
|
||||||
|
temp['requestID']=self.requestID
|
||||||
|
# print(f'{temp = }')
|
||||||
|
return temp
|
||||||
|
# return self.ListOfDict(None, self.varDict, self.retName, self.includeRetElements_allowed, self.statusOk).firstValue()[self.retName]
|
||||||
### dont use this way
|
### dont use this way
|
||||||
self.listOfDict.varDict = self.varDict
|
self.listOfDict.varDict = self.varDict
|
||||||
self.listOfDict.filterKey = self.retName
|
self.listOfDict.filterKey = self.retName
|
||||||
return self.listOfDict
|
return self.listOfDict
|
||||||
###
|
###
|
||||||
|
|
||||||
|
def to_json(self) -> str:
|
||||||
|
return json.dumps(self.all(), indent = 2)
|
||||||
|
|
||||||
|
|
||||||
class ListOfDict:
|
class ListOfDict:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user