diff --git a/QBClasses.py b/QBClasses.py
index 46db2ed..3d33ed7 100644
--- a/QBClasses.py
+++ b/QBClasses.py
@@ -4,21 +4,13 @@ import timeit
import xml.dom.minidom
from utils import timing, cleanIncludeRetElements, makeAList
import json
+from typing import Union
-# from functools import wraps
-
-# def cleanIncludeRetElements(includeRetElements_allowed:list, includeRetElements:list):
-# iREs = []
-# # print(f'{includeRetElements_allowed = }\n{includeRetElements = }')
-# if isinstance(includeRetElements, str): #if user put 1 str argument in IncludeRetElements, change it to list
-# includeRetElements = [includeRetElements]
-# for iRE in includeRetElements:
-# for iRE_a in includeRetElements_allowed:
-# if iRE.lower() == iRE_a.lower():
-# iREs.append(iRE_a)
-# break
-# return iREs
-
+ENUM_DateMacro = ['All', 'Today', 'ThisWeek', 'ThisWeekToDate', 'ThisMonth', 'ThisMonthToDate', 'ThisCalendarQuarter', 'ThisCalendarQuarterToDate', 'ThisFiscalQuarter',
+ 'ThisFiscalQuarterToDate', 'ThisCalendarYear', 'ThisCalendarYearToDate', 'ThisFiscalYear', 'ThisFiscalYearToDate', 'Yesterday', 'LastWeek', 'LastWeekToDate', 'LastMonth',
+ 'LastMonthToDate', 'LastCalendarQuarter', 'LastCalendarQuarterToDate', 'LastFiscalQuarter', 'LastFiscalQuarterToDate', 'LastCalendarYear', 'LastCalendarYearToDate',
+ 'LastFiscalYear', 'LastFiscalYearToDate', 'NextWeek', 'NextFourWeeks', 'NextMonth', 'NextCalendarQuarter', 'NextCalendarYear', 'NextFiscalQuarter', 'NextFiscalYear'
+ ]
class ItemInventoryQuery(baseQBQuery):
def __init__(self, *args, **kwargs):
@@ -35,29 +27,31 @@ class ItemInventoryQuery(baseQBQuery):
self.onError = "stopOnError"
self.retName = 'ItemInventoryRet'
self.defaultFilterKey = "ListID"
+ self.className = "ItemInventoryQuery"
+ self.classNameRq:str = self.__class__.__name__ + 'Rq'
if 'debug' in kwargs and isinstance(kwargs['debug'], bool):
self.class_debug=kwargs["debug"]
- self.QBDict[self.__class__.__name__ + "Rq"]={}
+ self.QBDict[self.classNameRq]={}
### End Required Variable. can put ENUM list below this (eg: self.ENUM_GeneralSummaryReportQuery=[])
if 'ListID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ListID"]=kwargs['ListID']
+ self.QBDict[self.classNameRq]["ListID"]=kwargs['ListID']
elif 'FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["FullName"]=kwargs['FullName']
+ self.QBDict[self.classNameRq]["FullName"]=kwargs['FullName']
else:
if 'MaxReturned' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["MaxReturned"]=kwargs['MaxReturned']
+ self.QBDict[self.classNameRq]["MaxReturned"]=kwargs['MaxReturned']
if 'ActiveStatus' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ActiveStatus"]=kwargs['ActiveStatus']
+ self.QBDict[self.classNameRq]["ActiveStatus"]=kwargs['ActiveStatus']
if 'FromModifiedDate' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["FromModifiedDate"]=kwargs['FromModifiedDate']
+ self.QBDict[self.classNameRq]["FromModifiedDate"]=kwargs['FromModifiedDate']
if 'ToModifiedDate' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ToModifiedDate"]=kwargs['ToModifiedDate']
+ self.QBDict[self.classNameRq]["ToModifiedDate"]=kwargs['ToModifiedDate']
if 'MatchCriterion' in kwargs and 'Name' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["NameFilter"]={'MatchCriterion':kwargs['MatchCriterion', 'Name':kwargs['Name']]}
+ self.QBDict[self.classNameRq]["NameFilter"]={'MatchCriterion':kwargs['MatchCriterion', 'Name':kwargs['Name']]}
elif 'FromName' in kwargs or 'ToName' in kwargs: #if or then use {'key1':kwargs.get('key1',""), 'key2':kwargs.get('key2', "")}
- self.QBDict[self.__class__.__name__ + "Rq"]["NameRangeFilter"]={'FromName':kwargs.get('FromName', ""), 'ToName':kwargs.get('ToName', "")}
+ self.QBDict[self.classNameRq]["NameRangeFilter"]={'FromName':kwargs.get('FromName', ""), 'ToName':kwargs.get('ToName', "")}
if 'IncludeRetElement' in kwargs:
IRE = cleanIncludeRetElements(self.includeRetElements_allowed, kwargs["IncludeRetElement"]) # IRE->IncludeRetElements cleaned version
@@ -65,14 +59,15 @@ class ItemInventoryQuery(baseQBQuery):
if len(IRE)>0:
if self.defaultFilterKey not in IRE: # defaultFilterKey is for BaseClass.count() eg: after instantiate, then print obj.count()
IRE.append(self.defaultFilterKey)
- self.QBDict[self.__class__.__name__ + "Rq"]["IncludeRetElement"]=IRE
+ self.QBDict[self.classNameRq]["IncludeRetElement"]=IRE
if 'OwnerID' in kwargs: # usually value=0 to get to DataExtRet (additional data)
- self.QBDict[self.__class__.__name__ + "Rq"]["OwnerID"]=kwargs['OwnerID']
+ self.QBDict[self.classNameRq]["OwnerID"]=kwargs['OwnerID']
- # print(self.__class__.__name__ + "Rq")
+ # print(self.classNameRq)
# print(self.QBDict)
- self.runCheck() ### running the qbxml connection to get data ###
+ if self.__class__.__name__==self.className:
+ self.runCheck() ### running the qbxml connection to get data ###
class GeneralSummaryReportQuery(baseQBQuery):
def __init__(self, *args, **kwargs):
@@ -84,10 +79,12 @@ class GeneralSummaryReportQuery(baseQBQuery):
self.onError = "stopOnError"
self.retName = 'ReportRet'
self.defaultFilterKey = "ListID"
+ self.className = "GeneralSummaryReportQuery"
+ self.classNameRq:str = self.__class__.__name__ + 'Rq'
if 'debug' in kwargs and isinstance(kwargs['debug'], bool):
self.class_debug=kwargs["debug"]
- self.QBDict[self.__class__.__name__ + "Rq"]={} #Required
+ self.QBDict[self.classNameRq]={} #Required
### End Required variable
self.ENUM_GeneralSummaryReportType = ["BalanceSheetByClass", "BalanceSheetPrevYearComp", "BalanceSheetStandard", "BalanceSheetSummary", "CustomerBalanceSummary",
"ExpenseByVendorSummary", "IncomeByCustomerSummary", "InventoryStockStatusByItem", "InventoryStockStatusByVendor", "IncomeTaxSummary",
@@ -99,31 +96,96 @@ class GeneralSummaryReportQuery(baseQBQuery):
if 'GeneralSummaryReportType' in kwargs:
enum=cleanIncludeRetElements(self.ENUM_GeneralSummaryReportType, kwargs['GeneralSummaryReportType'])
print(enum)
- self.QBDict[self.__class__.__name__ + "Rq"]["GeneralSummaryReportType"]=enum[0]
+ self.QBDict[self.classRq]["GeneralSummaryReportType"]=enum[0]
else:
print("Error -> GeneralSummaryReportType is required")
return
- if 'FromReportDate' in kwargs or 'ToReportDate' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ReportPeriod"]={'FromReportDate':kwargs.get('FromReportDate', ""), 'ToReportDate':kwargs.get('ToReportDate', "")}
- elif 'ReportDateMacro' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ReportDateMacro"]=kwargs.get('ReportDateMacro', "")
+ # if 'DisplayReport_ReportPeriod_FromReportDate' in kwargs or 'DisplayReport_ReportPeriod_ToReportDate' in kwargs:
+ # self.QBDict[self.classNameRq]['DisplayReport']={'ReportPeriod':{}}
+ # if 'DisplayReport_ReportPeriod_FromReportDate' in kwargs:
+ # self.QBDict[self.classNameRq]["DisplayReport"]['ReportPeriod']['FromReportDate']=kwargs['DisplayReport_ReportPeriod_FromReportDate']
+ # if 'DisplayReport_ReportPeriod_ToReportDate' in kwargs:
+ # self.QBDict[self.classNameRq]["DisplayReport"]['ReportPeriod']['ToReportDate']=kwargs['DisplayReport_ReportPeriod_ToReportDate']
+ # elif 'DisplayReport_ReportPeriod_ReportDateMacro' in kwargs:
+ # self.QBDict[self.classNameRq]['DisplayReport']={"ReportDateMacro":kwargs['DisplayReport_ReportPeriod_ReportDateMacro']}
+
+ if 'DisplayReport' in kwargs:
+ self.QBDict[self.classNameRq]["DisplayReport"]=kwargs['DisplayReport']
- elif 'FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["FullName"]=kwargs['FullName']
- else:
- if 'MaxReturned' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["MaxReturned"]=kwargs['MaxReturned']
- if 'ActiveStatus' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ActiveStatus"]=kwargs['ActiveStatus']
- if 'FromModifiedDate' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["FromModifiedDate"]=kwargs['FromModifiedDate']
- if 'ToModifiedDate' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ToModifiedDate"]=kwargs['ToModifiedDate']
- if 'MatchCriterion' in kwargs and 'Name' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["NameFilter"]={'MatchCriterion':kwargs['MatchCriterion', 'Name':kwargs['Name']]}
- elif 'FromName' in kwargs or 'ToName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["NameRangeFilter"]={'FromName':kwargs.get('FromName', ""), 'ToName':kwargs.get('ToName', "")}
+ if 'ReportPeriod_FromReportDate' in kwargs or 'ReportPeriod_ToReportDate' in kwargs: #if or then use {'key1':kwargs.get('key1',""), 'key2':kwargs.get('key2', "")}
+ self.QBDict[self.classNameRq]["ReportPeriod"]={'FromReportDate':kwargs.get('ReportPeriod_FromReportDate', None), 'ToReportDate':kwargs.get('ReportPeriod_ToReportDate', None)}
+ elif 'ReportDateMacro' in kwargs:
+ self.QBDict[self.classNameRq]["ReportDateMacro"]=kwargs['ReportDateMacro']
+
+ if 'ReportAccountFilter_AccountTypeFilter' in kwargs:
+ self.QBDict[self.classNameRq]["ReportAccountFilter"]={'AccountTypeFilter':kwargs['ReportAccountFilter_AccountTypeFilter']}
+ elif 'ReportAccountFilter_ListID' in kwargs:
+ self.QBDict[self.classNameRq]["ReportAccountFilter"]={'ListID':kwargs['ReportAccountFilter_ListID']}
+ elif 'ReportAccountFilter_FullName' in kwargs:
+ self.QBDict[self.classNameRq]["ReportAccountFilter"]={'FullName':kwargs['ReportAccountFilter_FullName']}
+ elif 'ReportAccountFilter_ListIDWithChildren' in kwargs:
+ self.QBDict[self.classNameRq]["ReportAccountFilter"]={'ListIDWithChildren':kwargs['ReportAccountFilter_ListIDWithChildren']}
+ elif 'ReportAccountFilter_FullNameWithChildren' in kwargs:
+ self.QBDict[self.classNameRq]["ReportAccountFilter"]={'FullNameWithChildren':kwargs['ReportAccountFilter_FullNameWithChildren']}
+
+ if 'ReportEntityFilter_EntityTypeFilter' in kwargs:
+ self.QBDict[self.classNameRq]["ReportEntityFilter"]={'EntityTypeFilter':kwargs['ReportEntityFilter_EntityTypeFilter']}
+ elif 'ReportEntityFilter_ListID' in kwargs:
+ self.QBDict[self.classNameRq]["ReportEntityFilter"]={'ListID':kwargs['ReportEntityFilter_ListID']}
+ elif 'ReportEntityFilter_FullName' in kwargs:
+ self.QBDict[self.classNameRq]["ReportEntityFilter"]={'FullName':kwargs['ReportEntityFilter_FullName']}
+ elif 'ReportEntityFilter_ListIDWithChildren' in kwargs:
+ self.QBDict[self.classNameRq]["ReportEntityFilter"]={'ListIDWithChildren':kwargs['ReportEntityFilter_ListIDWithChildren']}
+ elif 'ReportEntityFilter_FullNameWithChildren' in kwargs:
+ self.QBDict[self.classNameRq]["ReportEntityFilter"]={'FullNameWithChildren':kwargs['ReportEntityFilter_FullNameWithChildren']}
+
+ if 'ReportItemFilter_ItemTypeFilter' in kwargs:
+ self.QBDict[self.classNameRq]["ReportItemFilter"]={'ItemTypeFilter':kwargs['ReportItemFilter_ItemTypeFilter']}
+ elif 'ReportItemFilter_ListID' in kwargs:
+ self.QBDict[self.classNameRq]["ReportItemFilter"]={'ListID':kwargs['ReportItemFilter_ListID']}
+ elif 'ReportItemFilter_FullName' in kwargs:
+ self.QBDict[self.classNameRq]["ReportItemFilter"]={'FullName':kwargs['ReportItemFilter_FullName']}
+ elif 'ReportItemFilter_ListIDWithChildren' in kwargs:
+ self.QBDict[self.classNameRq]["ReportItemFilter"]={'ListIDWithChildren':kwargs['ReportItemFilter_ListIDWithChildren']}
+ elif 'ReportItemFilter_FullNameWithChildren' in kwargs:
+ self.QBDict[self.classNameRq]["ReportItemFilter"]={'FullNameWithChildren':kwargs['ReportItemFilter_FullNameWithChildren']}
+
+ if 'ReportClassFilter_ListID' in kwargs:
+ self.QBDict[self.classNameRq]["ReportClassFilter"]={'ListID':kwargs['ReportClassFilter_ListID']}
+ elif 'ReportClassFilter_FullName' in kwargs:
+ self.QBDict[self.classNameRq]["ReportClassFilter"]={'FullName':kwargs['ReportClassFilter_FullName']}
+ elif 'ReportClassFilter_ListIDWithChildren' in kwargs:
+ self.QBDict[self.classNameRq]["ReportClassFilter"]={'ListIDWithChildren':kwargs['ReportClassFilter_ListIDWithChildren']}
+ elif 'ReportClassFilter_FullNameWithChildren' in kwargs:
+ self.QBDict[self.classNameRq]["ReportClassFilter"]={'FullNameWithChildren':kwargs['ReportClassFilter_FullNameWithChildren']}
+
+ if 'ReportTxnTypeFilter_ListID' in kwargs:
+ self.QBDict[self.classNameRq]["ReportTxnTypeFilter"]={'TxnTypeFilter':makeAList(kwargs['ReportTxnTypeFilter_ListID'])}
+
+ if 'ReportModifiedDateRangeFilter_FromReportModifiedDate' in kwargs or 'ReportModifiedDateRangeFilter_ToReportModifiedDate' in kwargs: #if or then use {'key1':kwargs.get('key1',""), 'key2':kwargs.get('key2', "")}
+ self.QBDict[self.classNameRq]["ReportModifiedDateRangeFilter"]={'FromReportModifiedDate':kwargs.get('ReportModifiedDateRangeFilter_FromReportModifiedDate', None), 'ToReportModifiedDate':kwargs.get('ReportModifiedDateRangeFilter_ToReportModifiedDate', None)}
+ elif 'ReportModifiedDateRangeMacro' in kwargs:
+ self.QBDict[self.classNameRq]["ReportModifiedDateRangeMacro"]=cleanIncludeRetElements(ENUM_DateMacro, kwargs['ReportModifiedDateRangeMacro'])
+
+ if 'ReportDetailLevelFilter' in kwargs:
+ self.QBDict[self.classNameRq]["ReportDetailLevelFilter"]=cleanIncludeRetElements(['All', 'AllExceptSummary', 'SummaryOnly'], kwargs['ReportDetailLevelFilter'], 'All')
+ if 'ReportPostingStatusFilter' in kwargs:
+ self.QBDict[self.classNameRq]["ReportPostingStatusFilter"]=cleanIncludeRetElements(['Either', 'NonPosting', 'Posting'], kwargs['ReportPostingStatusFilter'])
+ if 'SummarizeColumnsBy' in kwargs:
+ self.ENUM_SummarizeColumnsBy=['Account', 'BalanceSheet', 'Class', 'Customer', 'CustomerType', 'Day', 'Employee', 'FourWeek', 'HalfMonth', 'IncomeStatement', 'ItemDetail', 'ItemType', 'Month', 'Payee',
+ 'PaymentMethod', 'PayrollItemDetail', 'PayrollYtdDetail', 'Quarter', 'SalesRep', 'SalesTaxCode', 'ShipMethod', 'Terms', 'TotalOnly', 'TwoWeek', 'Vendor', 'VendorType', 'Week', 'Year']
+ self.QBDict[self.classNameRq]["SummarizeColumnsBy"]=cleanIncludeRetElements(self.ENUM_SummarizeColumnsBy, kwargs['SummarizeColumnsBy'])
+ if 'IncludeSubColumns' in kwargs:
+ self.QBDict[self.classNameRq]["IncludeSubColumns"]=kwargs['IncludeSubColumns']
+ if 'ReportCalendar' in kwargs:
+ self.QBDict[self.classNameRq]["ReportCalendar"]=cleanIncludeRetElements(['CalendarYear', 'FiscalYear', 'TaxYear'], kwargs['ReportCalendar'], default_val='CalendarYear')
+ if 'ReturnsRows' in kwargs:
+ self.QBDict[self.classNameRq]["ReturnsRows"]=cleanIncludeRetElements(['ActiveOnly', 'NonZero', 'All'], kwargs['ReturnsRows'], default_val='ActiveOnly')
+ if 'ReturnColumns' in kwargs:
+ self.QBDict[self.classNameRq]["ReturnColumns"]=cleanIncludeRetElements(['ActiveOnly', 'NonZero', 'All'], kwargs['ReturnColumns'], default_val='ActiveOnly')
+ if 'ReportBasis' in kwargs:
+ self.QBDict[self.classNameRq]["ReportBasis"]=cleanIncludeRetElements(['Accrual', 'Cash', 'None'], kwargs['ReportBasis'], default_val='None')
if 'IncludeRetElement' in kwargs:
IRE = cleanIncludeRetElements(self.includeRetElements_allowed, kwargs["IncludeRetElement"]) #IRE->IncludeRetElements cleaned version
@@ -131,47 +193,249 @@ class GeneralSummaryReportQuery(baseQBQuery):
if len(IRE)>0:
if self.defaultFilterKey not in IRE: #defaultFilterKey is for BaseClass.count() eg: after instantiate, then print obj.count()
IRE.append(self.defaultFilterKey)
- self.QBDict[self.__class__.__name__ + "Rq"]["IncludeRetElement"]=IRE
+ self.QBDict[self.classNameRq]["IncludeRetElement"]=IRE
- # print(self.__class__.__name__ + "Rq")
+ # print(self.classNameRq)
# print(f'{self.QBDict = }')
- self.runCheck() ### running the qbxml connection to get data ###
-
+ if self.__class__.__name__==self.className:
+ self.runCheck() ### running the qbxml connection to get data ###
+import xmltodict
+def LineAdd(lineAdd:Union[list, dict])->dict:
+ if not(isinstance(lineAdd, list) or isinstance(lineAdd, dict)):
+ raise Exception(f"LineAdd Error. {type(lineAdd)}, should use dictionary or list of dictionary. ")
+ if isinstance(lineAdd, dict): #convert to listofdict
+ lineAdd = [lineAdd]
+ ## process LineAdd dict
+ resultList = []
+ resdict = {}
+ for xLineAdd in lineAdd:
+ resdict={'@defMacro':'MACROTYPE'}
+ resdict['abc']=""
+ # resdict['ItemRef']={}
+ if 'ItemRef_ListID' in xLineAdd and xLineAdd['ItemRef_ListID']:
+ print(":he")
+ if 'ItemRef' in resdict:
+ resdict['ItemRef']['ListID']= xLineAdd['ItemRef_ListID']
+ else:
+ resdict['ItemRef']={'ListID': xLineAdd['ItemRef_ListID']}
+ print(resdict)
+ if 'ItemRef_FullName' in xLineAdd and xLineAdd['ItemRef_FullName']:
+ resdict['ItemRef']['FullName']= xLineAdd['ItemRef_FullName']
+ if 'Desc' in xLineAdd and xLineAdd['Desc']:
+ resdict['Desc']= xLineAdd['Desc']
+
+ resultList.append(resdict)
+ print(f'{resultList = }')
+ xyz=xmltodict.unparse({'root':{'LineAdd':resultList}}, pretty=True)
+ print(xyz)
+ txt = '''
+
+
+
+ 1234
+ Sugiarto
+
+ lorem
+
+ '''
+ dct = xmltodict.parse(txt)
+ print(f'{dct = }')
+x=[{'ItemRef_FullName': 'Sugiarto', 'ItemRef_ListID':1234, 'Desc':"lorem"}, {'ItemRef_FullName': 'Sugiarto', 'ItemRef_ListID':1234, 'Desc':"lorem"}]
+LineAdd(x)
+# print(cleanIncludeRetElements(['ActiveOnly', 'NonZero', 'All'], "nonzero", 'ActiveOnly'))
class InvoiceAdd(baseQBQuery):
def __init__(self, *args, **kwargs):
print(f'{args = }')
print(f'{kwargs = }')
super().__init__(*args, **kwargs)
+ # self.includeRetElements_allowed = ['TxnID', 'TimeCreated', 'TimeModified', 'EditSequence', 'TxnNumber', 'CustomerRef', 'ClassRef', 'ARAccontRef', 'TemplateRef']
+ self.onError = "stopOnError"
self.retName = 'InvoiceAddRet'
- self.reqSubName = self.retName.replace('Ret', '')
- self.QBDict[self.__class__.__name__ + "Rq"]={}
- if 'CustomerFullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ListID"]=kwargs['ListID']
- if 'ListID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ListID"]=kwargs['ListID']
- elif 'FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["FullName"]=kwargs['FullName']
- else:
- if 'MaxReturned' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["MaxReturned"]=kwargs['MaxReturned']
- if 'ActiveStatus' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ActiveStatus"]=kwargs['ActiveStatus']
- if 'FromModifiedDate' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["FromModifiedDate"]=kwargs['FromModifiedDate']
- if 'ToModifiedDate' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ToModifiedDate"]=kwargs['ToModifiedDate']
- if 'MatchCriterion' in kwargs and 'Name' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["NameFilter"]={'MatchCriterion':kwargs['MatchCriterion', 'Name':kwargs['Name']]}
- if 'FromName' in kwargs or 'ToName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["NameRangeFilter"]={'FromName':kwargs.get('FromName', ""), 'ToName':kwargs.get('ToName', "")}
- if 'IncludeRetElement' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["IncludeRetElement"]=kwargs['IncludeRetElement']
- if 'OwnerID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["OwnerID"]=kwargs['OwnerID']
- # print(self.__class__.__name__ + "Rq")
+ self.defaultFilterKey = "TxnID"
+ self.className = "InvoiceAdd"
+ self.classNameRq:str = self.__class__.__name__ + 'Rq'
+ self.reqSubName = self.className
+ if 'debug' in kwargs and isinstance(kwargs['debug'], bool):
+ self.class_debug=kwargs["debug"]
+
+ self.QBDict[self.classNameRq]={}
+
+ self.isRequiredFieldSatisfied = False
+ self.QBDict[self.classNameRq][self.__class__.__name__]={'@defMacro':'MACROTYPE'}
+ if 'CustomerRef_ListID' in kwargs:
+ if 'CustomerRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerRef"]['ListID']= kwargs['CustomerRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerRef"]={'ListID': kwargs['CustomerRef_ListID']}
+ self.isRequiredFieldSatisfied=True
+ if 'CustomerRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerRef"]={'FullName': kwargs['CustomerRef_FullName']}
+ self.isRequiredFieldSatisfied=True
+
+ if not self.isRequiredFieldSatisfied:
+ raise Exception("Need CustomerRef FullName and/or ListID")
+
+ if 'ClassRef_ListID' in kwargs:
+ if 'ClassRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ClassRef"]['ListID']= kwargs['ClassRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ClassRef"]={'ListID': kwargs['ClassRef_ListID']}
+ if 'ClassRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ClassRef"]={'FullName': kwargs['ClassRef_FullName']}
+
+ if 'ARAccountRef_ListID' in kwargs:
+ if 'ARAccountRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ARAccountRef"]['ListID']= kwargs['ARAccountRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ARAccountRef"]={'ListID': kwargs['ARAccountRef_ListID']}
+ if 'ARAccountRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ARAccountRef"]={'FullName': kwargs['ARAccountRef_FullName']}
+
+ if 'TemplateRef_ListID' in kwargs:
+ if 'TemplateRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TemplateRef"]['ListID']= kwargs['TemplateRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TemplateRef"]={'ListID': kwargs['TemplateRef_ListID']}
+ if 'TemplateRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TemplateRef"]={'FullName': kwargs['TemplateRef_FullName']}
+
+ if 'TxnDate' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TxnDate"]=kwargs['TxnDate']
+ if 'RefNumber' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["RefNumber"]=kwargs['RefNumber']
+ if 'BillAddress_Addr1' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr1': kwargs['BillAddress_Addr1']}
+ if 'BillAddress_Addr2' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr2': kwargs['BillAddress_Addr2']}
+ if 'BillAddress_Addr3' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr3': kwargs['BillAddress_Addr3']}
+ if 'BillAddress_Addr4' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr4': kwargs['BillAddress_Addr4']}
+ if 'BillAddress_Addr5' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr5': kwargs['BillAddress_Addr5']}
+ if 'BillAddress_City' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'City': kwargs['BillAddress_City']}
+ if 'BillAddress_State' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'State': kwargs['BillAddress_State']}
+ if 'BillAddress_PostalCode' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'PostalCode': kwargs['BillAddress_PostalCode']}
+ if 'BillAddress_Country' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Country': kwargs['BillAddress_Country']}
+ if 'BillAddress_Note' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Note': kwargs['BillAddress_Note']}
+
+ if 'ShipAddress_Addr1' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr1': kwargs['ShipAddress_Addr1']}
+ if 'ShipAddress_Addr2' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr2': kwargs['ShipAddress_Addr2']}
+ if 'ShipAddress_Addr3' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr3': kwargs['ShipAddress_Addr3']}
+ if 'ShipAddress_Addr4' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr4': kwargs['ShipAddress_Addr4']}
+ if 'ShipAddress_Addr5' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr5': kwargs['ShipAddress_Addr5']}
+ if 'ShipAddress_City' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'City': kwargs['ShipAddress_City']}
+ if 'ShipAddress_State' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'State': kwargs['ShipAddress_State']}
+ if 'ShipAddress_PostalCode' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'PostalCode': kwargs['ShipAddress_PostalCode']}
+ if 'ShipAddress_Country' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Country': kwargs['ShipAddress_Country']}
+ if 'ShipAddress_Note' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Note': kwargs['ShipAddress_Note']}
+
+ if 'IsPending' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["IsPending"]=kwargs['IsPending']
+ if 'IsFinanceCharge' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["IsFinanceCharge"]=kwargs['IsFinanceCharge']
+ if 'PONumber' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["PONumber"]=kwargs['PONumber']
+ if 'TermsRef_ListID' in kwargs:
+ if 'TermsRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TermsRef"]['ListID']= kwargs['TermsRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TermsRef"]={'ListID': kwargs['TermsRef_ListID']}
+ if 'TermsRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TermsRef"]={'FullName': kwargs['TermsRef_FullName']}
+
+ if 'DueDate' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["DueDate"]=kwargs['DueDate']
+ if 'SalesRepRef_ListID' in kwargs:
+ if 'SalesRepRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["SalesRepRef"]['ListID']= kwargs['SalesRepRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["SalesRepRef"]={'ListID': kwargs['SalesRepRef_ListID']}
+ if 'SalesRepRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["SalesRepRef"]={'FullName': kwargs['SalesRepRef_FullName']}
+
+ if 'FOB' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["FOB"]=kwargs['FOB']
+ if 'ShipDate' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipDate"]=kwargs['ShipDate']
+ if 'ShipMethodRef_ListID' in kwargs:
+ if 'ShipMethodRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipMethodRef"]['ListID']= kwargs['ShipMethodRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipMethodRef"]={'ListID': kwargs['ShipMethodRef_ListID']}
+ if 'ShipMethodRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipMethodRef"]={'FullName': kwargs['ShipMethodRef_FullName']}
+
+ if 'ItemSalesTaxRef_ListID' in kwargs:
+ if 'ItemSalesTaxRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ItemSalesTaxRef"]['ListID']= kwargs['ItemSalesTaxRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ItemSalesTaxRef"]={'ListID': kwargs['ItemSalesTaxRef_ListID']}
+ if 'ItemSalesTaxRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ItemSalesTaxRef"]={'FullName': kwargs['ItemSalesTaxRef_FullName']}
+
+ if 'Memo' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["Memo"]=kwargs['Memo']
+ if 'CustomerMsgRef_ListID' in kwargs:
+ if 'CustomerMsgRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerMsgRef"]['ListID']= kwargs['CustomerMsgRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerMsgRef"]={'ListID': kwargs['CustomerMsgRef_ListID']}
+ if 'CustomerMsgRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerMsgRef"]={'FullName': kwargs['CustomerMsgRef_FullName']}
+
+ if 'IsToBePrinted' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["IsToBePrinted"]=kwargs['IsToBePrinted']
+ if 'IsToBeEmailed' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["IsToBeEmailed"]=kwargs['IsToBeEmailed']
+ if 'IsTaxIncluded' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["IsTaxIncluded"]=kwargs['IsTaxIncluded']
+ if 'CustomerSalesTaxCodeRef_ListID' in kwargs:
+ if 'CustomerSalesTaxCodeRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerSalesTaxCodeRef"]['ListID']= kwargs['CustomerSalesTaxCodeRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerSalesTaxCodeRef"]={'ListID': kwargs['CustomerSalesTaxCodeRef_ListID']}
+ if 'CustomerSalesTaxCodeRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerSalesTaxCodeRef"]={'FullName': kwargs['CustomerSalesTaxCodeRef_FullName']}
+
+ if 'Other' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["Other"]=kwargs['Other']
+ if 'ExchangeRate' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ExchangeRate"]=kwargs['ExchangeRate']
+ if 'ExternalGUID' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ExternalGUID"]=kwargs['ExternalGUID']
+ if 'LinkToTxnID' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["LinkToTxnID"]=makeAList(kwargs['LinkToTxnID'])
+
+ if 'SetCredit_CreditTxnID' in kwargs and 'SetCredit_AppliedAmount' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["SetCredit"]={'CreditTxnID':{'@useMacro':"MACROTYPE", '#text':kwargs['SetCredit_CreditTxnID']}, 'AppliedAmount': kwargs['SetCredit_AppliedAmount']}
+ if 'SetCredit_Override' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["SetCredit"]["Override"]=kwargs['SetCredit_Override']
+ #add InvoiceLineAdd kwargs here
+
+
+ if 'IncludeRetElement' in kwargs:
+ self.QBDict[self.classNameRq]["IncludeRetElement"]=kwargs['IncludeRetElement']
+
+ # print(self.classNameRq)
# print(self.QBDict)
@@ -190,45 +454,48 @@ class CustomerQuery(baseQBQuery):
self.onError = "stopOnError"
self.retName = 'CustomerRet'
self.defaultFilterKey = "ListID"
+ self.className = "CustomerQuery"
+ self.classNameRq:str = self.__class__.__name__ + 'Rq'
if 'debug' in kwargs and isinstance(kwargs['debug'], bool):
self.class_debug=kwargs["debug"]
- self.QBDict[self.__class__.__name__ + "Rq"]={}
+ self.QBDict[self.classNameRq]={}
if 'ListID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ListID"]=kwargs['ListID']
+ self.QBDict[self.classNameRq]["ListID"]=kwargs['ListID']
elif 'FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["FullName"]=kwargs['FullName']
+ self.QBDict[self.classNameRq]["FullName"]=kwargs['FullName']
else:
if 'MaxReturned' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["MaxReturned"]=kwargs['MaxReturned']
+ self.QBDict[self.classNameRq]["MaxReturned"]=kwargs['MaxReturned']
if 'ActiveStatus' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ActiveStatus"]=kwargs['ActiveStatus']
+ self.QBDict[self.classNameRq]["ActiveStatus"]=kwargs['ActiveStatus']
if 'FromModifiedDate' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["FromModifiedDate"]=kwargs['FromModifiedDate']
+ self.QBDict[self.classNameRq]["FromModifiedDate"]=kwargs['FromModifiedDate']
if 'ToModifiedDate' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["ToModifiedDate"]=kwargs['ToModifiedDate']
+ self.QBDict[self.classNameRq]["ToModifiedDate"]=kwargs['ToModifiedDate']
if 'MatchCriterion' in kwargs and 'Name' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["NameFilter"]={'MatchCriterion':kwargs['MatchCriterion'], 'Name':kwargs['Name']}
+ self.QBDict[self.classNameRq]["NameFilter"]={'MatchCriterion':kwargs['MatchCriterion'], 'Name':kwargs['Name']}
elif 'FromName' in kwargs or 'ToName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["NameRangeFilter"]={'FromName':kwargs.get('FromName', ""), 'ToName':kwargs.get('ToName', "")}
+ self.QBDict[self.classNameRq]["NameRangeFilter"]={'FromName':kwargs.get('FromName', ""), 'ToName':kwargs.get('ToName', "")}
if 'Operator' in kwargs and 'Amount' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TotalBalanceFilter"]={'Operator':kwargs['Operator'], 'Amount':kwargs['Amount']}
+ self.QBDict[self.classNameRq]["TotalBalanceFilter"]={'Operator':kwargs['Operator'], 'Amount':kwargs['Amount']}
if 'IncludeRetElement' in kwargs:
IRE = cleanIncludeRetElements(self.includeRetElements_allowed, kwargs['IncludeRetElement'])
print(f'{IRE = }')
if len(IRE)>0:
if self.defaultFilterKey not in IRE:
IRE.append(self.defaultFilterKey)
- self.QBDict[self.__class__.__name__ + "Rq"]["IncludeRetElement"]=IRE
+ self.QBDict[self.classNameRq]["IncludeRetElement"]=IRE
if 'OwnerID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["OwnerID"]=kwargs['OwnerID']
+ self.QBDict[self.classNameRq]["OwnerID"]=kwargs['OwnerID']
- print(self.__class__.__name__ + "Rq")
+ print(self.classNameRq)
print(f'{self.QBDict = }' )
# print(f'{self.includeRetElements_allowed =}')
- self.runCheck() ### running the qbxml connection to get data ###
+ if self.__class__.__name__==self.className:
+ self.runCheck() ### running the qbxml connection to get data ###
class TransactionQuery(baseQBQuery):
@@ -243,14 +510,16 @@ class TransactionQuery(baseQBQuery):
self.onError = "stopOnError"
self.retName = 'TransactionRet'
self.defaultFilterKey = "TxnID"
+ self.className = "TransactionQuery"
+ self.classNameRq = self.__class__.__name__ + 'Rq'
if 'debug' in kwargs and isinstance(kwargs['debug'], bool):
self.class_debug=kwargs["debug"]
- self.QBDict[self.__class__.__name__ + "Rq"]={}
+ self.QBDict[self.classNameRq]={}
### End Required Variable. can put ENUM list below this (eg: self.ENUM_GeneralSummaryReportQuery=[])
if 'TxnID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TxnID"]=kwargs['TxnID']
+ self.QBDict[self.classNameRq]["TxnID"]=kwargs['TxnID']
else:
if 'MaxReturned' in kwargs:
if kwargs['MaxReturned'] is None:
@@ -272,85 +541,85 @@ class TransactionQuery(baseQBQuery):
MaxReturned = 0
else:
MaxReturned = 0
- self.QBDict[self.__class__.__name__ + "Rq"]["MaxReturned"]=MaxReturned
+ self.QBDict[self.classNameRq]["MaxReturned"]=MaxReturned
if 'RefNumber' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["RefNumber"]=kwargs['RefNumber']
+ self.QBDict[self.classNameRq]["RefNumber"]=kwargs['RefNumber']
elif 'RefNumberCaseSensitive' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["RefNumberCaseSensitive"]=kwargs['RefNumberCaseSensitive']
+ self.QBDict[self.classNameRq]["RefNumberCaseSensitive"]=kwargs['RefNumberCaseSensitive']
elif 'RefNumberFilter_MatchCriterion' in kwargs and 'RefNumberFilter_RefNumber' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["RefNumberFilter"]={'MatchCriterion':kwargs['RefNumberFilter_MatchCriterion', 'RefNumber':kwargs['RefNumberFilter_RefNumber']]}
+ self.QBDict[self.classNameRq]["RefNumberFilter"]={'MatchCriterion':kwargs['RefNumberFilter_MatchCriterion', 'RefNumber':kwargs['RefNumberFilter_RefNumber']]}
elif 'RefNumberFilter_FromRefNumber' in kwargs or 'RefNumberFilter_ToRefNumber' in kwargs: #if or then use {'key1':kwargs.get('key1',""), 'key2':kwargs.get('key2', "")}
- self.QBDict[self.__class__.__name__ + "Rq"]["RefNumberRangeFilter"]={'FromRefNumber':kwargs.get('RefNumberFilter_FromRefNumber', ""), 'ToRefNumber':kwargs.get('RefNumberFilter_ToRefNumber', "")}
+ self.QBDict[self.classNameRq]["RefNumberRangeFilter"]={'FromRefNumber':kwargs.get('RefNumberFilter_FromRefNumber', ""), 'ToRefNumber':kwargs.get('RefNumberFilter_ToRefNumber', "")}
if 'TransactionModifiedDateRangeFilter_FromModifiedDate' in kwargs or 'TransactionModifiedDateRangeFilter_ToModifiedDate' in kwargs: #if or then use {'key1':kwargs.get('key1',""), 'key2':kwargs.get('key2', "")}
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionModifiedDateRangeFilter"]={'FromModifiedDate':kwargs.get('TransactionModifiedDateRangeFilter_FromModifiedDate', ""), 'ToModifiedDate':kwargs.get('TransactionModifiedDateRangeFilter_ToModifiedDate', "")}
+ self.QBDict[self.classNameRq]["TransactionModifiedDateRangeFilter"]={'FromModifiedDate':kwargs.get('TransactionModifiedDateRangeFilter_FromModifiedDate', ""), 'ToModifiedDate':kwargs.get('TransactionModifiedDateRangeFilter_ToModifiedDate', "")}
elif 'TransactionModifiedDateRangeFilter_DateMacro' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionModifiedDateRangeFilter"]={'DateMacro':kwargs['TransactionModifiedDateRangeFilter_DateMacro']}
+ self.QBDict[self.classNameRq]["TransactionModifiedDateRangeFilter"]={'DateMacro':kwargs['TransactionModifiedDateRangeFilter_DateMacro']}
if 'TransactionDateRangeFilter_FromTxnDate' in kwargs or 'TransactionDateRangeFilter_ToTxnDate' in kwargs: #if or then use {'key1':kwargs.get('key1',""), 'key2':kwargs.get('key2', "")}
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionDateRangeFilter"]={'FromTxnDate':kwargs.get('TransactionDateRangeFilter_FromTxnDate', ""), 'ToTxnDate':kwargs.get('TransactionDateRangeFilter_ToTxnDate', "")}
+ self.QBDict[self.classNameRq]["TransactionDateRangeFilter"]={'FromTxnDate':kwargs.get('TransactionDateRangeFilter_FromTxnDate', ""), 'ToTxnDate':kwargs.get('TransactionDateRangeFilter_ToTxnDate', "")}
elif 'TransactionDateRangeFilter_DateMacro' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionDateRangeFilter"]={'DateMacro':kwargs['TransactionDateRangeFilter_DateMacro']}
+ self.QBDict[self.classNameRq]["TransactionDateRangeFilter"]={'DateMacro':kwargs['TransactionDateRangeFilter_DateMacro']}
if 'TransactionEntityFilter_EntityTypeFilter' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionEntityFilter"]={'EntityTypeFilter':kwargs['TransactionEntityFilter_EntityTypeFilter']}
+ self.QBDict[self.classNameRq]["TransactionEntityFilter"]={'EntityTypeFilter':kwargs['TransactionEntityFilter_EntityTypeFilter']}
elif 'TransactionEntityFilter_ListID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionEntityFilter"]={'ListID':kwargs['TransactionEntityFilter_ListID']}
+ self.QBDict[self.classNameRq]["TransactionEntityFilter"]={'ListID':kwargs['TransactionEntityFilter_ListID']}
elif 'TransactionEntityFilter_FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionEntityFilter"]={'FullName':kwargs['TransactionEntityFilter_FullName']}
+ self.QBDict[self.classNameRq]["TransactionEntityFilter"]={'FullName':kwargs['TransactionEntityFilter_FullName']}
elif 'TransactionEntityFilter_ListIDWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionEntityFilter"]={'ListIDWithChildren':kwargs['TransactionEntityFilter_ListIDWithChildren']}
+ self.QBDict[self.classNameRq]["TransactionEntityFilter"]={'ListIDWithChildren':kwargs['TransactionEntityFilter_ListIDWithChildren']}
elif 'TransactionEntityFilter_FullNameWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionEntityFilter"]={'FullNameWithChildren':kwargs['TransactionEntityFilter_FullNameWithChildren']}
+ self.QBDict[self.classNameRq]["TransactionEntityFilter"]={'FullNameWithChildren':kwargs['TransactionEntityFilter_FullNameWithChildren']}
if 'TransactionAccountFilter_AccountTypeFilter' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionAccountFilter"]={'AccountTypeFilter':kwargs['TransactionAccountFilter_AccountTypeFilter']}
+ self.QBDict[self.classNameRq]["TransactionAccountFilter"]={'AccountTypeFilter':kwargs['TransactionAccountFilter_AccountTypeFilter']}
elif 'TransactionAccountFilter_ListID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionAccountFilter"]={'ListID':kwargs['TransactionAccountFilter_ListID']}
+ self.QBDict[self.classNameRq]["TransactionAccountFilter"]={'ListID':kwargs['TransactionAccountFilter_ListID']}
elif 'TransactionAccountFilter_FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionAccountFilter"]={'FullName':kwargs['TransactionAccountFilter_FullName']}
+ self.QBDict[self.classNameRq]["TransactionAccountFilter"]={'FullName':kwargs['TransactionAccountFilter_FullName']}
elif 'TransactionAccountFilter_ListIDWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionAccountFilter"]={'ListIDWithChildren':kwargs['TransactionAccountFilter_ListIDWithChildren']}
+ self.QBDict[self.classNameRq]["TransactionAccountFilter"]={'ListIDWithChildren':kwargs['TransactionAccountFilter_ListIDWithChildren']}
elif 'TransactionAccountFilter_FullNameWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionAccountFilter"]={'FullNameWithChildren':kwargs['TransactionAccountFilter_FullNameWithChildren']}
+ self.QBDict[self.classNameRq]["TransactionAccountFilter"]={'FullNameWithChildren':kwargs['TransactionAccountFilter_FullNameWithChildren']}
if 'TransactionItemFilter_ItemTypeFilter' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionItemFilter"]={'ItemTypeFilter':kwargs['TransactionItemFilter_ItemTypeFilter']}
+ self.QBDict[self.classNameRq]["TransactionItemFilter"]={'ItemTypeFilter':kwargs['TransactionItemFilter_ItemTypeFilter']}
elif 'TransactionItemFilter_ListID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionItemFilter"]={'ListID':kwargs['TransactionItemFilter_ListID']}
+ self.QBDict[self.classNameRq]["TransactionItemFilter"]={'ListID':kwargs['TransactionItemFilter_ListID']}
elif 'TransactionItemFilter_FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionItemFilter"]={'FullName':kwargs['TransactionItemFilter_FullName']}
+ self.QBDict[self.classNameRq]["TransactionItemFilter"]={'FullName':kwargs['TransactionItemFilter_FullName']}
elif 'TransactionItemFilter_ListIDWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionItemFilter"]={'ListIDWithChildren':kwargs['TransactionItemFilter_ListIDWithChildren']}
+ self.QBDict[self.classNameRq]["TransactionItemFilter"]={'ListIDWithChildren':kwargs['TransactionItemFilter_ListIDWithChildren']}
elif 'TransactionItemFilter_FullNameWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionItemFilter"]={'FullNameWithChildren':kwargs['TransactionItemFilter_FullNameWithChildren']}
+ self.QBDict[self.classNameRq]["TransactionItemFilter"]={'FullNameWithChildren':kwargs['TransactionItemFilter_FullNameWithChildren']}
if 'TransactionClassFilter_ListID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionClassFilter"]={'ListID':kwargs['TransactionClassFilter_ListID']}
+ self.QBDict[self.classNameRq]["TransactionClassFilter"]={'ListID':kwargs['TransactionClassFilter_ListID']}
elif 'TransactionClassFilter_FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionClassFilter"]={'FullName':kwargs['TransactionClassFilter_FullName']}
+ self.QBDict[self.classNameRq]["TransactionClassFilter"]={'FullName':kwargs['TransactionClassFilter_FullName']}
elif 'TransactionClassFilter_ListIDWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionClassFilter"]={'ListIDWithChildren':kwargs['TransactionClassFilter_ListIDWithChildren']}
+ self.QBDict[self.classNameRq]["TransactionClassFilter"]={'ListIDWithChildren':kwargs['TransactionClassFilter_ListIDWithChildren']}
elif 'TransactionClassFilter_FullNameWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionClassFilter"]={'FullNameWithChildren':kwargs['TransactionClassFilter_FullNameWithChildren']}
+ self.QBDict[self.classNameRq]["TransactionClassFilter"]={'FullNameWithChildren':kwargs['TransactionClassFilter_FullNameWithChildren']}
if 'TransactionTypeFilter_TxnTypeFilter' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionTypeFilter"]={'TxnTypeFilter':kwargs['TransactionTypeFilter_TxnTypeFilter']}
+ self.QBDict[self.classNameRq]["TransactionTypeFilter"]={'TxnTypeFilter':kwargs['TransactionTypeFilter_TxnTypeFilter']}
if 'TransactionDetailLevelFilter' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionDetailLevelFilter"]=kwargs['TransactionDetailLevelFilter']
+ self.QBDict[self.classNameRq]["TransactionDetailLevelFilter"]=kwargs['TransactionDetailLevelFilter']
if 'TransactionPostingStatusFilter' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionPostingStatusFilter"]=kwargs['TransactionPostingStatusFilter']
+ self.QBDict[self.classNameRq]["TransactionPostingStatusFilter"]=kwargs['TransactionPostingStatusFilter']
if 'TransactionPaidStatusFilter' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TransactionPaidStatusFilter"]=kwargs['TransactionPaidStatusFilter']
+ self.QBDict[self.classNameRq]["TransactionPaidStatusFilter"]=kwargs['TransactionPaidStatusFilter']
if 'CurrencyFilter_ListID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["CurrencyFilter"]=kwargs['CurrencyFilter_ListID']
+ self.QBDict[self.classNameRq]["CurrencyFilter"]=kwargs['CurrencyFilter_ListID']
elif 'CurrencyFilter_FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["CurrencyFilter"]=kwargs['CurrencyFilter_FullName']
+ self.QBDict[self.classNameRq]["CurrencyFilter"]=kwargs['CurrencyFilter_FullName']
if 'IncludeRetElement' in kwargs:
IRE = cleanIncludeRetElements(self.includeRetElements_allowed, kwargs["IncludeRetElement"]) # IRE->IncludeRetElements cleaned version
@@ -358,12 +627,272 @@ class TransactionQuery(baseQBQuery):
if len(IRE)>0:
if self.defaultFilterKey not in IRE: # defaultFilterKey is for BaseClass.count() eg: after instantiate, then print obj.count()
IRE.append(self.defaultFilterKey)
- self.QBDict[self.__class__.__name__ + "Rq"]["IncludeRetElement"]=IRE
+ self.QBDict[self.classNameRq]["IncludeRetElement"]=IRE
- # print(self.__class__.__name__ + "Rq")
+ # print(self.classNameRq)
# print(self.QBDict)
- self.runCheck() ### running the qbxml connection to get data ###
+ if self.__class__.__name__==self.className:
+ self.runCheck() ### running the qbxml connection to get data ###
+
+
+class SalesOrderAdd(baseQBQuery):
+ def __init__(self, *args, **kwargs):
+ print(f'{args = }')
+ print(f'{kwargs = }')
+ super().__init__(*args, **kwargs)
+ # self.includeRetElements_allowed = ['TxnID', 'TimeCreated', 'TimeModified', 'EditSequence', 'TxnNumber', 'CustomerRef', 'ClassRef', 'ARAccontRef', 'TemplateRef']
+ self.onError = "stopOnError"
+ self.retName = 'SalesOrderAddRet'
+
+ self.defaultFilterKey = "TxnID"
+ self.className = "SalesOrderAdd"
+ self.classNameRq:str = self.__class__.__name__ + 'Rq'
+ self.reqSubName = self.className
+ if 'debug' in kwargs and isinstance(kwargs['debug'], bool):
+ self.class_debug=kwargs["debug"]
+
+ self.QBDict[self.classNameRq]={}
+
+ self.isRequiredFieldSatisfied = False
+ self.QBDict[self.classNameRq][self.__class__.__name__]={'@defMacro':'MACROTYPE'}
+ if 'CustomerRef_ListID' in kwargs:
+ if 'CustomerRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerRef"]['ListID']= kwargs['CustomerRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerRef"]={'ListID': kwargs['CustomerRef_ListID']}
+ self.isRequiredFieldSatisfied=True
+ if 'CustomerRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerRef"]={'FullName': kwargs['CustomerRef_FullName']}
+ self.isRequiredFieldSatisfied=True
+
+ if not self.isRequiredFieldSatisfied:
+ raise Exception("Need CustomerRef FullName and/or ListID")
+
+ if 'ClassRef_ListID' in kwargs:
+ if 'ClassRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ClassRef"]['ListID']= kwargs['ClassRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ClassRef"]={'ListID': kwargs['ClassRef_ListID']}
+ if 'ClassRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ClassRef"]={'FullName': kwargs['ClassRef_FullName']}
+
+ # if 'ARAccountRef_ListID' in kwargs:
+ # if 'ARAccountRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ # self.QBDict[self.classNameRq][self.__class__.__name__]["ARAccountRef"]['ListID']= kwargs['ARAccountRef_ListID']
+ # else:
+ # self.QBDict[self.classNameRq][self.__class__.__name__]["ARAccountRef"]={'ListID': kwargs['ARAccountRef_ListID']}
+ # if 'ARAccountRef_FullName' in kwargs:
+ # self.QBDict[self.classNameRq][self.__class__.__name__]["ARAccountRef"]={'FullName': kwargs['ARAccountRef_FullName']}
+
+ if 'TemplateRef_ListID' in kwargs:
+ if 'TemplateRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TemplateRef"]['ListID']= kwargs['TemplateRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TemplateRef"]={'ListID': kwargs['TemplateRef_ListID']}
+ if 'TemplateRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TemplateRef"]={'FullName': kwargs['TemplateRef_FullName']}
+
+ if 'TxnDate' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TxnDate"]=kwargs['TxnDate']
+ if 'RefNumber' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["RefNumber"]=kwargs['RefNumber']
+ if 'BillAddress_Addr1' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr1': kwargs['BillAddress_Addr1']}
+ if 'BillAddress_Addr2' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr2': kwargs['BillAddress_Addr2']}
+ if 'BillAddress_Addr3' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr3': kwargs['BillAddress_Addr3']}
+ if 'BillAddress_Addr4' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr4': kwargs['BillAddress_Addr4']}
+ if 'BillAddress_Addr5' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr5': kwargs['BillAddress_Addr5']}
+ if 'BillAddress_City' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'City': kwargs['BillAddress_City']}
+ if 'BillAddress_State' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'State': kwargs['BillAddress_State']}
+ if 'BillAddress_PostalCode' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'PostalCode': kwargs['BillAddress_PostalCode']}
+ if 'BillAddress_Country' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Country': kwargs['BillAddress_Country']}
+ if 'BillAddress_Note' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Note': kwargs['BillAddress_Note']}
+
+ if 'ShipAddress_Addr1' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr1': kwargs['ShipAddress_Addr1']}
+ if 'ShipAddress_Addr2' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr2': kwargs['ShipAddress_Addr2']}
+ if 'ShipAddress_Addr3' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr3': kwargs['ShipAddress_Addr3']}
+ if 'ShipAddress_Addr4' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr4': kwargs['ShipAddress_Addr4']}
+ if 'ShipAddress_Addr5' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr5': kwargs['ShipAddress_Addr5']}
+ if 'ShipAddress_City' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'City': kwargs['ShipAddress_City']}
+ if 'ShipAddress_State' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'State': kwargs['ShipAddress_State']}
+ if 'ShipAddress_PostalCode' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'PostalCode': kwargs['ShipAddress_PostalCode']}
+ if 'ShipAddress_Country' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Country': kwargs['ShipAddress_Country']}
+ if 'ShipAddress_Note' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Note': kwargs['ShipAddress_Note']}
+
+ if 'IsPending' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["IsPending"]=kwargs['IsPending']
+ if 'IsFinanceCharge' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["IsFinanceCharge"]=kwargs['IsFinanceCharge']
+ if 'PONumber' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["PONumber"]=kwargs['PONumber']
+ if 'TermsRef_ListID' in kwargs:
+ if 'TermsRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TermsRef"]['ListID']= kwargs['TermsRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TermsRef"]={'ListID': kwargs['TermsRef_ListID']}
+ if 'TermsRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["TermsRef"]={'FullName': kwargs['TermsRef_FullName']}
+
+ if 'DueDate' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["DueDate"]=kwargs['DueDate']
+ if 'SalesRepRef_ListID' in kwargs:
+ if 'SalesRepRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["SalesRepRef"]['ListID']= kwargs['SalesRepRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["SalesRepRef"]={'ListID': kwargs['SalesRepRef_ListID']}
+ if 'SalesRepRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["SalesRepRef"]={'FullName': kwargs['SalesRepRef_FullName']}
+
+ if 'FOB' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["FOB"]=kwargs['FOB']
+ if 'ShipDate' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipDate"]=kwargs['ShipDate']
+ if 'ShipMethodRef_ListID' in kwargs:
+ if 'ShipMethodRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipMethodRef"]['ListID']= kwargs['ShipMethodRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipMethodRef"]={'ListID': kwargs['ShipMethodRef_ListID']}
+ if 'ShipMethodRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ShipMethodRef"]={'FullName': kwargs['ShipMethodRef_FullName']}
+
+ if 'ItemSalesTaxRef_ListID' in kwargs:
+ if 'ItemSalesTaxRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ItemSalesTaxRef"]['ListID']= kwargs['ItemSalesTaxRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ItemSalesTaxRef"]={'ListID': kwargs['ItemSalesTaxRef_ListID']}
+ if 'ItemSalesTaxRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ItemSalesTaxRef"]={'FullName': kwargs['ItemSalesTaxRef_FullName']}
+
+ if 'IsManuallyClosed' in kwargs: #only SalesOrderAdd. not in InvoiceAdd
+ self.QBDict[self.classNameRq][self.__class__.__name__]["IsManuallyClosed"]=kwargs['IsManuallyClosed']
+ if 'Memo' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["Memo"]=kwargs['Memo']
+ if 'CustomerMsgRef_ListID' in kwargs:
+ if 'CustomerMsgRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerMsgRef"]['ListID']= kwargs['CustomerMsgRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerMsgRef"]={'ListID': kwargs['CustomerMsgRef_ListID']}
+ if 'CustomerMsgRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerMsgRef"]={'FullName': kwargs['CustomerMsgRef_FullName']}
+
+ if 'IsToBePrinted' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["IsToBePrinted"]=kwargs['IsToBePrinted']
+ if 'IsToBeEmailed' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["IsToBeEmailed"]=kwargs['IsToBeEmailed']
+ if 'IsTaxIncluded' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["IsTaxIncluded"]=kwargs['IsTaxIncluded']
+ if 'CustomerSalesTaxCodeRef_ListID' in kwargs:
+ if 'CustomerSalesTaxCodeRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerSalesTaxCodeRef"]['ListID']= kwargs['CustomerSalesTaxCodeRef_ListID']
+ else:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerSalesTaxCodeRef"]={'ListID': kwargs['CustomerSalesTaxCodeRef_ListID']}
+ if 'CustomerSalesTaxCodeRef_FullName' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["CustomerSalesTaxCodeRef"]={'FullName': kwargs['CustomerSalesTaxCodeRef_FullName']}
+
+ if 'Other' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["Other"]=kwargs['Other']
+ if 'ExchangeRate' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ExchangeRate"]=kwargs['ExchangeRate']
+ if 'ExternalGUID' in kwargs:
+ self.QBDict[self.classNameRq][self.__class__.__name__]["ExternalGUID"]=kwargs['ExternalGUID']
+
+ # if 'LinkToTxnID' in kwargs:
+ # self.QBDict[self.classNameRq][self.__class__.__name__]["LinkToTxnID"]=makeAList(kwargs['LinkToTxnID'])
+
+ # if 'SetCredit_CreditTxnID' in kwargs and 'SetCredit_AppliedAmount' in kwargs:
+ # self.QBDict[self.classNameRq][self.__class__.__name__]["SetCredit"]={'CreditTxnID':{'@useMacro':"MACROTYPE", '#text':kwargs['SetCredit_CreditTxnID']}, 'AppliedAmount': kwargs['SetCredit_AppliedAmount']}
+ # if 'SetCredit_Override' in kwargs:
+ # self.QBDict[self.classNameRq][self.__class__.__name__]["SetCredit"]["Override"]=kwargs['SetCredit_Override']
+
+ #add InvoiceLineAdd kwargs here
+
+ self.SalesOrderLineAdd = []
+ if 'SalesOrderLineAdd' in kwargs:
+ LineAdd = kwargs.get('SalesOrderLineAdd')
+ self.isLineAddOk = True
+ if isinstance(LineAdd, dict ):
+ LineAdd = [LineAdd]
+ elif isinstance(LineAdd, list):
+ pass
+ else:
+ self.isLineAddOk = False
+
+ if self.isLineAddOk: #check if each instance in the list are all dictionary.
+ for eachLineAdd in LineAdd:
+ if not isinstance(eachLineAdd, dict):
+ self.isLineAddOk = False
+ break
+ else:
+ print("SalesOrderLineAdd Not OK. has to be lisst of dict or a dict")
+
+
+ if self.isLineAddOk: #if everything good
+ for eachLineAdd in LineAdd:
+ self.LineAddDict = {}
+ if 'ItemRef_ListID' in eachLineAdd:
+ if 'ItemRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.LineAddDict["ItemRef"]['ListID']= eachLineAdd['ItemRef_ListID']
+ else:
+ self.LineAddDict["ItemRef"]={'ListID': eachLineAdd['ItemRef_ListID']}
+ if 'ItemRef_FullName' in eachLineAdd:
+ self.LineAddDict["ItemRef"]={'FullName': eachLineAdd['ItemRef_FullName']}
+ if 'Desc' in eachLineAdd:
+ self.LineAddDict["Desc"]=eachLineAdd['Desc']
+ if 'Quantity' in eachLineAdd:
+ self.LineAddDict["Quantity"]=eachLineAdd['Quantity']
+ if 'UnitOfMeasure' in eachLineAdd:
+ self.LineAddDict["UnitOfMeasure"]=eachLineAdd['UnitOfMeasure']
+ if 'Rate' in eachLineAdd:
+ self.LineAddDict["Rate"]=eachLineAdd['Rate']
+ elif 'RatePercent' in eachLineAdd:
+ self.LineAddDict["RatePercent"]=eachLineAdd['RatePercent']
+ elif 'PriceLevelRef_ListID' in eachLineAdd:
+ if 'PriceLevelRef' in self.QBDict[self.classNameRq][self.__class__.__name__]:
+ self.LineAddDict["PriceLevelRef"]['ListID']= eachLineAdd['PriceLevelRef_ListID']
+ else:
+ self.LineAddDict["PriceLevelRef"]={'ListID': eachLineAdd['PriceLevelRef_ListID']}
+ elif 'PriceLevelRef_FullName' in eachLineAdd:
+ self.LineAddDict["PriceLevelRef"]={'FullName': eachLineAdd['PriceLevelRef_FullName']}
+
+ if 'Amount' in eachLineAdd:
+ self.LineAddDict["Amount"]=eachLineAdd['Amount']
+ # Others
+ if 'Other1' in eachLineAdd:
+ self.LineAddDict["Other1"]=eachLineAdd['Other1']
+ if len(self.LineAddDict)>0:
+ self.SalesOrderLineAdd.append(self.LineAddDict)
+
+ #skip the rest, not too important
+ else:
+ print("SalesOrderLineAdd has to be list of dict or a dict")
+ print(f'{self.SalesOrderLineAdd = }')
+ if len(self.SalesOrderLineAdd)>0:
+ self.QBDict[self.classNameRq][self.__class__.__name__]['SalesOrderLineAdd']=self.SalesOrderLineAdd
+ if 'IncludeRetElement' in kwargs:
+ self.QBDict[self.classNameRq]["IncludeRetElement"]=kwargs['IncludeRetElement']
+
+ # print(self.classNameRq)
+ print(f'{self.QBDict = }')
class SalesOrderQuery(baseQBQuery):
@@ -381,65 +910,78 @@ class SalesOrderQuery(baseQBQuery):
self.onError = "stopOnError"
self.retName = 'SalesOrderRet'
self.defaultFilterKey = "TxnID"
+ self.className = 'SalesOrderQuery' #Hardcoded because for check if self.__class__.__name__==self.className
+ self.classNameRq:str = self.__class__.__name__ + 'Rq'
if 'debug' in kwargs and isinstance(kwargs['debug'], bool):
self.class_debug=kwargs["debug"]
- self.QBDict[self.__class__.__name__ + "Rq"]={}
+ self.QBDict[self.classNameRq]={}
### End Required Variable. can put ENUM list below this (eg: self.ENUM_GeneralSummaryReportQuery=[])
+ # self.ENUM_DateMacro = ['All', 'Today', 'ThisWeek', 'ThisWeekToDate', 'ThisMonth', 'ThisMonthToDate', 'ThisCalendarQuarter', 'ThisCalendarQuarterToDate', 'ThisFiscalQuarter',
+ # 'ThisFiscalQuarterToDate', 'ThisCalendarYear', 'ThisCalendarYearToDate', 'ThisFiscalYear', 'ThisFiscalYearToDate', 'Yesterday', 'LastWeek', 'LastWeekToDate', 'LastMonth',
+ # 'LastMonthToDate', 'LastCalendarQuarter', 'LastCalendarQuarterToDate', 'LastFiscalQuarter', 'LastFiscalQuarterToDate', 'LastCalendarYear', 'LastCalendarYearToDate',
+ # 'LastFiscalYear', 'LastFiscalYearToDate', 'NextWeek', 'NextFourWeeks', 'NextMonth', 'NextCalendarQuarter', 'NextCalendarYear', 'NextFiscalQuarter', 'NextFiscalYear'
+ # ]
+ self.ENUM_MatchCriterion = ['StartsWith', 'Contains', 'EndsWith']
if 'TxnID' in kwargs and kwargs['TxnID'] and len(kwargs['TxnID'])>0:
- self.QBDict[self.__class__.__name__ + "Rq"]["TxnID"]=kwargs['TxnID']
+ self.QBDict[self.classNameRq]["TxnID"]=makeAList(kwargs['TxnID'])
elif 'RefNumber' in kwargs and kwargs['RefNumber']:
- self.QBDict[self.__class__.__name__ + "Rq"]["RefNumber"]=kwargs['RefNumber']
+ self.QBDict[self.classNameRq]["RefNumber"]=makeAList(kwargs['RefNumber'])
elif 'RefNumberCaseSensitive' in kwargs and kwargs['RefNumberCaseSensitive']:
- self.QBDict[self.__class__.__name__ + "Rq"]["RefNumberCaseSensitive"]=kwargs['RefNumberCaseSensitive']
+ self.QBDict[self.classNameRq]["RefNumberCaseSensitive"]=makeAList(kwargs['RefNumberCaseSensitive'])
else:
if 'MaxReturned' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["MaxReturned"]=kwargs['MaxReturned']
+ self.QBDict[self.classNameRq]["MaxReturned"]=kwargs['MaxReturned']
if 'ModifiedDateRangeFilter_FromModifiedDate' in kwargs or 'ModifiedDateRangeFilter_ToModifiedDate' in kwargs: #if or then use {'key1':kwargs.get('key1',""), 'key2':kwargs.get('key2', "")}
- self.QBDict[self.__class__.__name__ + "Rq"]["ModifiedDateRangeFilter"]={'FromModifiedDate':kwargs.get('ModifiedDateRangeFilter_FromModifiedDate', ""), 'ToModifiedDate':kwargs.get('ModifiedDateRangeFilter_ToModifiedDate', "")}
+ self.QBDict[self.classNameRq]["ModifiedDateRangeFilter"]={'FromModifiedDate':kwargs.get('ModifiedDateRangeFilter_FromModifiedDate', ""), 'ToModifiedDate':kwargs.get('ModifiedDateRangeFilter_ToModifiedDate', "")}
elif 'TxnDateRangeFilter_FromTxnDate' in kwargs or 'TxnDateRangeFilter_ToTxnDate' in kwargs: #if or then use {'key1':kwargs.get('key1',""), 'key2':kwargs.get('key2', "")}
- self.QBDict[self.__class__.__name__ + "Rq"]["TxnDateRangeFilter"]={'FromTxnDate':kwargs.get('TxnDateRangeFilter_FromTxnDate', ""), 'ToTxnDate':kwargs.get('TxnDateRangeFilter_ToTxnDate', "")}
+ self.QBDict[self.classNameRq]["TxnDateRangeFilter"]={'FromTxnDate':kwargs.get('TxnDateRangeFilter_FromTxnDate', ""), 'ToTxnDate':kwargs.get('TxnDateRangeFilter_ToTxnDate', "")}
elif 'TxnDateRangeFilter_DateMacro' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TxnDateRangeFilter"]={'DateMacro':kwargs['TxnDateRangeFilter_DateMacro']}
+ DM=cleanIncludeRetElements(ENUM_DateMacro, kwargs['TxnDateRangeFilter_DateMacro'])
+ if len(DM)>0:
+ self.QBDict[self.classNameRq]["TxnDateRangeFilter"]={'DateMacro':DM}
if 'EntityFilter_ListID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["EntityFilter"]={'ListID':kwargs['EntityFilter_ListID']}
+ self.QBDict[self.classNameRq]["EntityFilter"]={'ListID':makeAList(kwargs['EntityFilter_ListID'])}
elif 'EntityFilter_FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["EntityFilter"]={'FullName':kwargs['EntityFilter_FullName']}
+ self.QBDict[self.classNameRq]["EntityFilter"]={'FullName':makeAList(kwargs['EntityFilter_FullName'])}
elif 'EntityFilter_ListIDWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["EntityFilter"]={'ListIDWithChildren':kwargs['EntityFilter_ListIDWithChildren']}
+ self.QBDict[self.classNameRq]["EntityFilter"]={'ListIDWithChildren':kwargs['EntityFilter_ListIDWithChildren']}
elif 'EntityFilter_FullNameWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["EntityFilter"]={'FullNameWithChildren':kwargs['EntityFilter_FullNameWithChildren']}
+ self.QBDict[self.classNameRq]["EntityFilter"]={'FullNameWithChildren':kwargs['EntityFilter_FullNameWithChildren']}
if 'RefNumberFilter_MatchCriterion' in kwargs and 'RefNumberFilter_RefNumber' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["RefNumberFilter"]={'MatchCriterion':kwargs['RefNumberFilter_MatchCriterion', 'RefNumber':kwargs['RefNumberFilter_RefNumber']]}
+ RNFMC = cleanIncludeRetElements(self.ENUM_MatchCriterion, kwargs['RefNumberFilter_MatchCriterion'])
+ if len(RNFMC)>0:
+ self.QBDict[self.classNameRq]["RefNumberFilter"]={'MatchCriterion':RNFMC, 'RefNumber':kwargs['RefNumberFilter_RefNumber']}
elif 'RefNumberRangeFilter_FromRefNumber' in kwargs or 'RefNumberRangeFilter_ToRefNumber' in kwargs: #if or then use {'key1':kwargs.get('key1',""), 'key2':kwargs.get('key2', "")}
- self.QBDict[self.__class__.__name__ + "Rq"]["RefNumberRangeFilter"]={'FromRefNumber':kwargs.get('RefNumberRangeFilter_FromRefNumber', ""), 'ToRefNumber':kwargs.get('RefNumberRangeFilter_ToRefNumber', "")}
+ self.QBDict[self.classNameRq]["RefNumberRangeFilter"]={'FromRefNumber':kwargs.get('RefNumberRangeFilter_FromRefNumber', ""), 'ToRefNumber':kwargs.get('RefNumberRangeFilter_ToRefNumber', "")}
if 'CurrencyFilter_ListID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["CurrencyFilter"]=kwargs['CurrencyFilter_ListID']
+ self.QBDict[self.classNameRq]["CurrencyFilter"]=makeAList(kwargs['CurrencyFilter_ListID'])
elif 'CurrencyFilter_FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["CurrencyFilter"]=kwargs['CurrencyFilter_FullName']
+ self.QBDict[self.classNameRq]["CurrencyFilter"]=makeAList(kwargs['CurrencyFilter_FullName'])
if 'IncludeLineItems' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["IncludeLineItems"]=kwargs['IncludeLineItems']
+ self.QBDict[self.classNameRq]["IncludeLineItems"]=kwargs['IncludeLineItems']
if 'IncludeLinkedTxns' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["IncludeLinkedTxns"]=kwargs['IncludeLinkedTxns']
+ self.QBDict[self.classNameRq]["IncludeLinkedTxns"]=kwargs['IncludeLinkedTxns']
if 'IncludeRetElement' in kwargs:
IRE = cleanIncludeRetElements(self.includeRetElements_allowed, kwargs["IncludeRetElement"]) # IRE->IncludeRetElements cleaned version
print(f"{IRE = }")
if len(IRE)>0:
if self.defaultFilterKey not in IRE: # defaultFilterKey is for BaseClass.count() eg: after instantiate, then print obj.count()
IRE.append(self.defaultFilterKey)
- self.QBDict[self.__class__.__name__ + "Rq"]["IncludeRetElement"]=IRE
+ self.QBDict[self.classNameRq]["IncludeRetElement"]=IRE
if 'OwnerID' in kwargs: # usually value=0 to get to DataExtRet (additional data)
- self.QBDict[self.__class__.__name__ + "Rq"]["OwnerID"]=kwargs['OwnerID']
+ self.QBDict[self.classNameRq]["OwnerID"]=kwargs['OwnerID']
- # print(self.__class__.__name__ + "Rq")
- # print(self.QBDict)
- self.runCheck() ### running the qbxml connection to get data ###
+ # print(self.classNameRq)
+ print(self.QBDict)
+ if self.__class__.__name__==self.className:
+ self.runCheck() ### running the qbxml connection to get data ###
class InvoiceQuery(baseQBQuery):
@@ -459,79 +1001,92 @@ class InvoiceQuery(baseQBQuery):
self.onError = "stopOnError"
self.retName = 'InvoiceRet'
self.defaultFilterKey = "TxnID"
+ self.className = 'InvoiceQuery'
+ self.classNameRq:str = self.__class__.__name__ + 'Rq'
if 'debug' in kwargs and isinstance(kwargs['debug'], bool):
self.class_debug=kwargs["debug"]
- self.QBDict[self.__class__.__name__ + "Rq"]={}
+ self.QBDict[self.classNameRq]={}
### End Required Variable. can put ENUM list below this (eg: self.ENUM_GeneralSummaryReportQuery=[])
+ # self.ENUM_DateMacro = ['All', 'Today', 'ThisWeek', 'ThisWeekToDate', 'ThisMonth', 'ThisMonthToDate', 'ThisCalendarQuarter', 'ThisCalendarQuarterToDate', 'ThisFiscalQuarter',
+ # 'ThisFiscalQuarterToDate', 'ThisCalendarYear', 'ThisCalendarYearToDate', 'ThisFiscalYear', 'ThisFiscalYearToDate', 'Yesterday', 'LastWeek', 'LastWeekToDate', 'LastMonth',
+ # 'LastMonthToDate', 'LastCalendarQuarter', 'LastCalendarQuarterToDate', 'LastFiscalQuarter', 'LastFiscalQuarterToDate', 'LastCalendarYear', 'LastCalendarYearToDate',
+ # 'LastFiscalYear', 'LastFiscalYearToDate', 'NextWeek', 'NextFourWeeks', 'NextMonth', 'NextCalendarQuarter', 'NextCalendarYear', 'NextFiscalQuarter', 'NextFiscalYear'
+ # ] ## disabled, and move to outside class, on top of page
+ self.ENUM_MatchCriterion = ['StartsWith', 'Contains', 'EndsWith']
- if 'TxnID' in kwargs and kwargs['TxnID']:
+ if 'TxnID' in kwargs and kwargs['TxnID'] and len(kwargs['TxnID'])>0:
_txnIDs=makeAList(kwargs['TxnID'])
- self.QBDict[self.__class__.__name__ + "Rq"]["TxnID"]= makeAList(kwargs['TxnID'])
+ self.QBDict[self.classNameRq]["TxnID"]= makeAList(kwargs['TxnID'])
elif 'RefNumber' in kwargs and kwargs['RefNumber']:
- self.QBDict[self.__class__.__name__ + "Rq"]['RefNumber']=makeAList(kwargs['RefNumber'])
+ self.QBDict[self.classNameRq]['RefNumber']=makeAList(kwargs['RefNumber'])
elif 'RefNumberCaseSensitive' in kwargs and kwargs['RefNumberCaseSensitive']:
- self.QBDict[self.__class__.__name__ + "Rq"]["RefNumberCaseSensitive"]=makeAList(kwargs['RefNumberCaseSensitive'])
+ self.QBDict[self.classNameRq]["RefNumberCaseSensitive"]=makeAList(kwargs['RefNumberCaseSensitive'])
else:
if 'MaxReturned' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["MaxReturned"]=kwargs['MaxReturned']
+ self.QBDict[self.classNameRq]["MaxReturned"]=kwargs['MaxReturned']
if 'ModifiedDateRangeFilter_FromModifiedDate' in kwargs or 'ModifiedDateRangeFilter_ToModifiedDate' in kwargs: #if or then use {'key1':kwargs.get('key1',""), 'key2':kwargs.get('key2', "")}
- self.QBDict[self.__class__.__name__ + "Rq"]["ModifiedDateRangeFilter"]={'FromModifiedDate':kwargs.get('ModifiedDateRangeFilter_FromModifiedDate', ""), 'ToModifiedDate':kwargs.get('ModifiedDateRangeFilter_ToModifiedDate', "")}
+ self.QBDict[self.classNameRq]["ModifiedDateRangeFilter"]={'FromModifiedDate':kwargs.get('ModifiedDateRangeFilter_FromModifiedDate', ""), 'ToModifiedDate':kwargs.get('ModifiedDateRangeFilter_ToModifiedDate', "")}
elif 'TxnDateRangeFilter_FromTxnDate' in kwargs or 'TxnDateRangeFilter_ToTxnDate' in kwargs: #if or then use {'key1':kwargs.get('key1',""), 'key2':kwargs.get('key2', "")}
- self.QBDict[self.__class__.__name__ + "Rq"]["TxnDateRangeFilter"]={'FromTxnDate':kwargs.get('TxnDateRangeFilter_FromTxnDate', ""), 'ToTxnDate':kwargs.get('TxnDateRangeFilter_ToTxnDate', "")}
+ self.QBDict[self.classNameRq]["TxnDateRangeFilter"]={'FromTxnDate':kwargs.get('TxnDateRangeFilter_FromTxnDate', ""), 'ToTxnDate':kwargs.get('TxnDateRangeFilter_ToTxnDate', "")}
elif 'TxnDateRangeFilter_DateMacro' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["TxnDateRangeFilter"]={'DateMacro':kwargs['TxnDateRangeFilter_DateMacro']}
+ DM=cleanIncludeRetElements(ENUM_DateMacro, kwargs['TxnDateRangeFilter_DateMacro'])
+ if len(DM)>0:
+ self.QBDict[self.classNameRq]["TxnDateRangeFilter"]={'DateMacro':DM}
if 'EntityFilter_ListID' in kwargs:
- # self.QBDict[self.__class__.__name__ + "Rq"]["EntityFilter"]={'ListID':kwargs['EntityFilter_ListID']}
- self.QBDict[self.__class__.__name__ + "Rq"]['EntityFilter']={'ListID':makeAList(kwargs['EntityFilter_ListID'])}
+ # self.QBDict[self.classNameRq]["EntityFilter"]={'ListID':kwargs['EntityFilter_ListID']}
+ self.QBDict[self.classNameRq]['EntityFilter']={'ListID':makeAList(kwargs['EntityFilter_ListID'])}
elif 'EntityFilter_FullName' in kwargs:
- # self.QBDict[self.__class__.__name__ + "Rq"]["EntityFilter"]={'FullName':kwargs['EntityFilter_FullName']}
- self.QBDict[self.__class__.__name__ + "Rq"]['EntityFilter']={'FullName':makeAList(kwargs['EntityFilter_FullName'])}
+ # self.QBDict[self.classNameRq]["EntityFilter"]={'FullName':kwargs['EntityFilter_FullName']}
+ self.QBDict[self.classNameRq]['EntityFilter']={'FullName':makeAList(kwargs['EntityFilter_FullName'])}
elif 'EntityFilter_ListIDWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["EntityFilter"]={'ListIDWithChildren':kwargs['EntityFilter_ListIDWithChildren']}
+ self.QBDict[self.classNameRq]["EntityFilter"]={'ListIDWithChildren':kwargs['EntityFilter_ListIDWithChildren']}
elif 'EntityFilter_FullNameWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["EntityFilter"]={'FullNameWithChildren':kwargs['EntityFilter_FullNameWithChildren']}
+ self.QBDict[self.classNameRq]["EntityFilter"]={'FullNameWithChildren':kwargs['EntityFilter_FullNameWithChildren']}
if 'AccountFilter_ListID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["AccountFilter"]={'ListID':makeAList(kwargs['AccountFilter_ListID'])}
+ self.QBDict[self.classNameRq]["AccountFilter"]={'ListID':makeAList(kwargs['AccountFilter_ListID'])}
elif 'AccountFilter_FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["AccountFilter"]={'FullName':makeAList(kwargs['AccountFilter_FullName'])}
+ self.QBDict[self.classNameRq]["AccountFilter"]={'FullName':makeAList(kwargs['AccountFilter_FullName'])}
elif 'AccountFilter_ListIDWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["AccountFilter"]={'ListIDWithChildren':kwargs['AccountFilter_ListIDWithChildren']}
+ self.QBDict[self.classNameRq]["AccountFilter"]={'ListIDWithChildren':kwargs['AccountFilter_ListIDWithChildren']}
elif 'AccountFilter_FullNameWithChildren' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["AccountFilter"]={'FullNameWithChildren':kwargs['AccountFilter_FullNameWithChildren']}
+ self.QBDict[self.classNameRq]["AccountFilter"]={'FullNameWithChildren':kwargs['AccountFilter_FullNameWithChildren']}
if 'RefNumberFilter_MatchCriterion' in kwargs and 'RefNumberFilter_RefNumber' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["RefNumberFilter"]={'MatchCriterion':kwargs['RefNumberFilter_MatchCriterion', 'RefNumber':kwargs['RefNumberFilter_RefNumber']]}
+ RNFMC = cleanIncludeRetElements(self.ENUM_MatchCriterion, kwargs['RefNumberFilter_MatchCriterion'])
+ if len(RNFMC)>0:
+ self.QBDict[self.classNameRq]["RefNumberFilter"]={'MatchCriterion':RNFMC, 'RefNumber':kwargs['RefNumberFilter_RefNumber']}
elif 'RefNumberRangeFilter_FromRefNumber' in kwargs or 'RefNumberRangeFilter_ToRefNumber' in kwargs: #if or then use {'key1':kwargs.get('key1',""), 'key2':kwargs.get('key2', "")}
##### CAREFULL with the get() coz "" will get anything
- self.QBDict[self.__class__.__name__ + "Rq"]["RefNumberRangeFilter"]={'FromRefNumber':kwargs.get('RefNumberRangeFilter_FromRefNumber', ""), 'ToRefNumber':kwargs.get('RefNumberRangeFilter_ToRefNumber', "")}
+ self.QBDict[self.classNameRq]["RefNumberRangeFilter"]={'FromRefNumber':kwargs.get('RefNumberRangeFilter_FromRefNumber', ""), 'ToRefNumber':kwargs.get('RefNumberRangeFilter_ToRefNumber', "")}
if 'CurrencyFilter_ListID' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["CurrencyFilter"]=kwargs['CurrencyFilter_ListID']
+ self.QBDict[self.classNameRq]["CurrencyFilter"]=makeAList(kwargs['CurrencyFilter_ListID'])
elif 'CurrencyFilter_FullName' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["CurrencyFilter"]=kwargs['CurrencyFilter_FullName']
+ self.QBDict[self.classNameRq]["CurrencyFilter"]=makeAList(kwargs['CurrencyFilter_FullName'])
if 'IncludeLineItems' in kwargs:
print(f'{self.QBDict} = ')
- self.QBDict[self.__class__.__name__ + "Rq"]["IncludeLineItems"]=kwargs['IncludeLineItems']
+ self.QBDict[self.classNameRq]["IncludeLineItems"]=kwargs['IncludeLineItems']
if 'IncludeLinkedTxns' in kwargs:
- self.QBDict[self.__class__.__name__ + "Rq"]["IncludeLinkedTxns"]=kwargs['IncludeLinkedTxns']
+ self.QBDict[self.classNameRq]["IncludeLinkedTxns"]=kwargs['IncludeLinkedTxns']
if 'IncludeRetElement' in kwargs:
IRE = cleanIncludeRetElements(self.includeRetElements_allowed, kwargs["IncludeRetElement"]) # IRE->IncludeRetElements cleaned version
print(f"{IRE = }")
if len(IRE)>0:
if self.defaultFilterKey not in IRE: # defaultFilterKey is for BaseClass.count() eg: after instantiate, then print obj.count()
IRE.append(self.defaultFilterKey)
- self.QBDict[self.__class__.__name__ + "Rq"]["IncludeRetElement"]=IRE
+ self.QBDict[self.classNameRq]["IncludeRetElement"]=IRE
if 'OwnerID' in kwargs: # usually value=0 to get to DataExtRet (additional data)
- self.QBDict[self.__class__.__name__ + "Rq"]["OwnerID"]=kwargs['OwnerID']
-
- # print(self.__class__.__name__ + "Rq")
+ self.QBDict[self.classNameRq]["OwnerID"]=kwargs['OwnerID']
+ # print(self.classNameRq)
# print(self.QBDict)
- self.runCheck() ### running the qbxml connection to get data ###
+ if self.__class__.__name__==self.className:
+ self.runCheck() ### running the qbxml connection to get data ###
+
if __name__ == "__main__":
@@ -544,8 +1099,8 @@ if __name__ == "__main__":
@timing
def salesorderquery():
- g=SalesOrderQuery(debug=False, MaxReturned = None, TxnID=None, IncludeLineItems="true", IncludeLinkedTxns="true",
- RefNumber="24010022" )#"B23070857")
+ g=SalesOrderQuery(debug=False, MaxReturned = 1, TxnID=None, IncludeLineItems="true", IncludeLinkedTxns="true",
+ )#RefNumber="24010022" )#"B23070857")
print(json.dumps(g.filter().all(), indent=3))
print(g.count())
@@ -663,12 +1218,12 @@ if __name__ == "__main__":
print(recursiveDict(varDict, f, enumDict))
f.close
- invoicequery()
- # salesorderquery()
+ # invoicequery()
+ salesorderquery()
# transactionquery()
# main()
# iteminventoryquery()
# customerquery()
# readxmltodict()
-
-
+ # g=SalesOrderQuery(MaxReturned=1)
+ # print(len(None))
diff --git a/SalesOrderAdd.xml b/SalesOrderAdd.xml
new file mode 100644
index 0000000..43cdbc8
--- /dev/null
+++ b/SalesOrderAdd.xml
@@ -0,0 +1,435 @@
+
+
+
+
+
+
+
+ IDTYPE
+ STRTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+ DATETYPE
+ STRTYPE
+
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+
+
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+
+ STRTYPE
+
+ IDTYPE
+ STRTYPE
+
+ DATETYPE
+
+ IDTYPE
+ STRTYPE
+
+ STRTYPE
+ DATETYPE
+
+ IDTYPE
+ STRTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+ BOOLTYPE
+ STRTYPE
+
+ IDTYPE
+ STRTYPE
+
+ BOOLTYPE
+ BOOLTYPE
+ BOOLTYPE
+
+ IDTYPE
+ STRTYPE
+
+ STRTYPE
+ FLOATTYPE
+ GUIDTYPE
+
+
+
+ IDTYPE
+ STRTYPE
+
+ STRTYPE
+ QUANTYPE
+ STRTYPE
+
+ PRICETYPE
+
+ PERCENTTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+
+
+ IDTYPE
+ STRTYPE
+
+ AMTTYPE
+
+ ENUMTYPE
+
+ IDTYPE
+ STRTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+
+ STRTYPE
+
+ STRTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+ BOOLTYPE
+ STRTYPE
+ STRTYPE
+
+ GUIDTYPE
+ STRTYPE
+ STRTYPE
+
+
+
+
+
+ IDTYPE
+ STRTYPE
+
+ QUANTYPE
+ STRTYPE
+
+ IDTYPE
+ STRTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+
+ GUIDTYPE
+ STRTYPE
+ STRTYPE
+
+
+ ENUMTYPE
+ STRTYPE
+ STRTYPE
+
+
+ STRTYPE
+
+
+
+
+ IDTYPE
+ DATETIMETYPE
+ DATETIMETYPE
+ STRTYPE
+ INTTYPE
+
+ IDTYPE
+ STRTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+ DATETYPE
+ STRTYPE
+
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+
+
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+
+
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+
+
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+ STRTYPE
+
+ STRTYPE
+
+ IDTYPE
+ STRTYPE
+
+ DATETYPE
+
+ IDTYPE
+ STRTYPE
+
+ STRTYPE
+ DATETYPE
+
+ IDTYPE
+ STRTYPE
+
+ AMTTYPE
+
+ IDTYPE
+ STRTYPE
+
+ PERCENTTYPE
+ AMTTYPE
+ AMTTYPE
+
+ IDTYPE
+ STRTYPE
+
+ FLOATTYPE
+ AMTTYPE
+ BOOLTYPE
+ BOOLTYPE
+ STRTYPE
+
+ IDTYPE
+ STRTYPE
+
+ BOOLTYPE
+ BOOLTYPE
+ BOOLTYPE
+
+ IDTYPE
+ STRTYPE
+
+ STRTYPE
+ GUIDTYPE
+
+ IDTYPE
+
+ ENUMTYPE
+ DATETYPE
+ STRTYPE
+
+ ENUMTYPE
+ AMTTYPE
+
+
+
+ IDTYPE
+
+ IDTYPE
+ STRTYPE
+
+ STRTYPE
+ QUANTYPE
+ STRTYPE
+
+ IDTYPE
+ STRTYPE
+
+
+ PRICETYPE
+
+ PERCENTTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+ AMTTYPE
+
+ IDTYPE
+ STRTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+
+ STRTYPE
+
+ STRTYPE
+
+ STRTYPE
+
+ IDTYPE
+ STRTYPE
+
+ QUANTYPE
+ BOOLTYPE
+ STRTYPE
+ STRTYPE
+
+ GUIDTYPE
+ STRTYPE
+
+ ENUMTYPE
+ STRTYPE
+
+
+
+
+ IDTYPE
+
+ IDTYPE
+ STRTYPE
+
+ STRTYPE
+ QUANTYPE
+ STRTYPE
+
+ IDTYPE
+ STRTYPE
+
+ BOOLTYPE
+ AMTTYPE
+
+ IDTYPE
+
+ IDTYPE
+ STRTYPE
+
+ STRTYPE
+ QUANTYPE
+ STRTYPE
+
+ IDTYPE
+ STRTYPE
+
+
+ PRICETYPE
+
+ PERCENTTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+ AMTTYPE
+
+ IDTYPE
+ STRTYPE
+
+
+ IDTYPE
+ STRTYPE
+
+
+ STRTYPE
+
+ STRTYPE
+
+ STRTYPE
+
+ IDTYPE
+ STRTYPE
+
+ QUANTYPE
+ BOOLTYPE
+ STRTYPE
+ STRTYPE
+
+ GUIDTYPE
+ STRTYPE
+
+ ENUMTYPE
+ STRTYPE
+
+
+
+ GUIDTYPE
+ STRTYPE
+
+ ENUMTYPE
+ STRTYPE
+
+ ENUMTYPE
+ STRTYPE
+ STRTYPE
+
+
+
+ GUIDTYPE
+ STRTYPE
+
+ ENUMTYPE
+ STRTYPE
+
+
+
+
+ IDTYPE
+
+ GUIDTYPE
+
+ IDTYPE
+
+ INTTYPE
+ STRTYPE
+ GUIDTYPE
+
+
+
+
diff --git a/addSO.py b/addSO.py
new file mode 100644
index 0000000..94db330
--- /dev/null
+++ b/addSO.py
@@ -0,0 +1,50 @@
+from QBClasses import SalesOrderQuery, InvoiceQuery, TransactionQuery, InvoiceAdd, SalesOrderAdd
+from utils import timing, makeAList, makeLinkedTxnList, prepareData
+from pprint import pprint, PrettyPrinter
+import datetime
+
+import xmltodict
+
+def addSO(data:dict)->bool:
+ CustomerRef_FullName=data.get('CustomerRef_FullName', None)
+ TemplateRef_FullName=data.get('TemplateRef_FullName', None)
+ TxnDate=data.get('TxnDate', None) #default today
+ RefNumber=data.get('RefNumber', None)
+ ShipAddress=data.get('ShipAddress', None)
+ PONumber=data.get('PONumber', None)
+ Memo=data.get('Memo', None)
+ IsToBePrint=False #default False
+ IsToBeEmail=False #default False
+
+ SalesOrderLineAdd:list[dict]=data.get('SalesOrderLineAdd', [])
+ for SOLine in SalesOrderLineAdd:
+ ItemRef_FullName=SOLine.get('ItemRef_FullName', None)
+ Quantity=SOLine.get('Quantity', None)
+ UnitOfMeasure=SOLine.get('UnitOfMeasure', None)
+
+def main():
+ data = {'CustomerRef_FullName': '999 HPL', 'RefNumber':'Ref12345'}
+ 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}]
+ # lineAdd = {'ItemRef_FullName':'Item123', 'Quantity':5, 'Rate':1200}#, {'ItemRef_FullName':'Item23A', 'Quantity':1, 'Rate':5500}
+ data['SalesOrderLineAdd']=lineAdd
+ print("")
+ print('this is the format to ADD SO or INV')
+ pprint(data)
+ print("")
+ soAdd = SalesOrderAdd(**data)
+ # print(f'{soAdd = }')
+ print(soAdd.__repr__)
+
+def test_preparedata():
+ print("Test Preparedata")
+ data = '''order: Sumber rejeki\n
+ TH-001AA : 4 :Kirim Krian\n
+ ECO-016= 7\n
+ '''
+ prepareData(data)
+if __name__=='__main__':
+ test_preparedata()
+ # data={'root':data}
+ # print(f'{data = }')
+ # QBXML = xmltodict.unparse(data, pretty=True).replace("?qbxml>", "")#.replace(f'version="{version}"', f'version="{version}"?')
+ # print(QBXML)
\ No newline at end of file
diff --git a/save_data.py b/save_data.py
index a49b7c5..c4a2fd1 100644
--- a/save_data.py
+++ b/save_data.py
@@ -22,7 +22,7 @@ def main():
]
refNumbers_listofdict= [{'RefNumber': '0099'}, {'RefNumber': '0100'}, {'RefNumber': '0103'}]
refNumbers_list= makeAList(refNumbers_listofdict,dictvalue=True, listofdict=True)
- print(refNumbers_list)
+ print(f'{refNumbers_list = }')
# invQ = InvoiceQuery(**{'debug':False, 'MaxReturned':1, 'RefNumber':refNumbers_list, 'IncludeLineItems':'true', 'IncludeLinkedTxns':'true', 'IncludeRetElements':IncludeRetElements})#, 'OwnerID':0} )
invQ = InvoiceQuery(**{'debug':False, 'MaxReturned':1, 'IncludeLineItems':'true', 'IncludeLinkedTxns':'true', 'IncludeRetElement':IncludeRetElements})#, 'OwnerID':0} )
@@ -126,4 +126,12 @@ def main():
if __name__=='__main__':
+ # main()
+ if True: print("trueeee"); print("again")
+ print("before") if True else 0
+ d={'a':""}
+ if d['a']:
+ print("Ada")
+ else:
+ print('Tak ada')
main()
\ No newline at end of file
diff --git a/server.py b/server.py
index 37c64c9..7a238ec 100644
--- a/server.py
+++ b/server.py
@@ -40,6 +40,11 @@ class baseQBQuery:
self.statusMessage = ""
self.statusSeverity = ""
self.statusOk = False
+ if self.__class__.__name__=="baseQBQuery":
+ print("baseqbquey same with classname")
+ else:
+ print("accessed from child class")
+ print("basequery is accessed from ", self.__class__.__name__ + "Rq")
# @timing
def create_QBXML(self):
diff --git a/utils.py b/utils.py
index a37c890..2b4aba1 100644
--- a/utils.py
+++ b/utils.py
@@ -3,6 +3,59 @@ from time import time
from typing import Union
+def getItemFullName(shortItem:str)->str:
+ # def searchitem(SearchItem = '001aba', QTY = 0, dbTable="itemlist", column="FullName"):
+ FullName = shortItem
+ return FullName
+
+def getCustomerFullName(shortCustomerName:str)->str:
+ # def searchitem(SearchItem = '001aba', QTY = 0, dbTable="itemlist", column="FullName"):
+ FullName = shortCustomerName
+ return FullName
+
+def getRefNumber()->str:
+ return "refnumber345"
+
+def prepareData(dt:str):
+ dtLines = dt.strip().split('\n')
+ smoothdtLines:list[str] = []
+ for dtLine in dtLines:
+ if dtLine.strip()=='':
+ continue
+ smoothdtLines.append(dtLine)
+ for smIdx, smdtLine in enumerate(smoothdtLines):
+ itemName, Qty, memoLine = ('', '', '')
+ if smIdx==0 and ':' in smdtLine:
+ CustomerName = smdtLine.split(':')[1].strip()
+ CustomerRef_FullName = getCustomerFullName(CustomerName)
+ RefNumber = getRefNumber()
+ continue
+ elif smIdx==0 and ':' not in smdtLine:
+ return False
+ else: #proccess the second till end lines
+ for splitChar in [':', '=']:
+ if splitChar in smdtLine:
+ objects = smdtLine.split(splitChar)
+ if len(objects)==2:
+ itemName, Qty = tuple(smdtLine.split(splitChar))
+ if len(objects)==3:
+ itemName, Qty, memoLine = tuple(smdtLine.split(splitChar))
+ break
+ itemName = itemName.strip()
+ Qty=Qty.strip()
+ memoLine = memoLine.strip()
+ print(CustomerRef_FullName, RefNumber, itemName, Qty, memoLine)
+ ItemRef_FullName = getItemFullName(itemName)
+
+ if memoLine:
+ print(memoLine)
+ else:
+ print("no memo")
+
+
+
+
+
def makeLinkedTxnList(x:list, key:str=None)->list:
txnIDs=[]
if isinstance(x, dict):
@@ -63,7 +116,11 @@ def timing(f):
return wrap
-def cleanIncludeRetElements(includeRetElements_allowed:list, includeRetElements:list):
+def cleanIncludeRetElements(includeRetElements_allowed:list, includeRetElements:Union[list, str], default_val:str=None):
+ if default_val==None:
+ default_val = []
+ # else:
+ # default = [default]
iREs = []
# print(f'{includeRetElements_allowed = }\n{includeRetElements = }')
if isinstance(includeRetElements, str): #if user put 1 str argument in IncludeRetElements, change it to list
@@ -73,7 +130,10 @@ def cleanIncludeRetElements(includeRetElements_allowed:list, includeRetElements:
if iRE.lower() == iRE_a.lower():
iREs.append(iRE_a)
break
- return iREs
+ if len(iREs)>0:
+ return iREs
+ else:
+ return [default_val]
if __name__=='__main__':
#Example makelist