Compare commits

...

2 Commits

Author SHA1 Message Date
92352a2dc1 240901 2024-09-02 02:54:52 +07:00
ab9847c4d3 240901 2024-09-01 22:24:02 +07:00
3 changed files with 35 additions and 12 deletions

View File

@ -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__]:

View File

@ -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}"?')

View File

@ -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: