From 786ba1e6d198805c4c56cbbc6c5bb62a2c0dafff Mon Sep 17 00:00:00 2001 From: bcomsugi Date: Sun, 23 Feb 2025 04:35:57 +0700 Subject: [PATCH] update InvoiceAdd class with lineadd --- QBClasses.py | 461 ++++++++++++++++++++++++++++++--------------------- server.py | 1 + 2 files changed, 269 insertions(+), 193 deletions(-) diff --git a/QBClasses.py b/QBClasses.py index db83fb6..90bd107 100644 --- a/QBClasses.py +++ b/QBClasses.py @@ -1,9 +1,9 @@ -from .server import baseQBQuery +from server import baseQBQuery # from server import baseQBQuery, timing import pprint # import timeit # import xml.dom.minidom -from .utils import timing, cleanIncludeRetElements, makeAList +from utils import timing, cleanIncludeRetElements, makeAList import json from typing import Union @@ -22,7 +22,7 @@ class ItemInventoryQuery(baseQBQuery): self.includeRetElements_allowed = ["ListID", "FullName", "TimeCreated", "TimeModified", "EditSequence", "Name", "IsActive", "ClassRef", "ParentRef", "Sublevel", "BarCodeValue", "ManufacturerPartNumber", "UnitOfMeasureSetRef", "IsTaxIncluded", "SalesTaxCodeRef", "SalesDesc,", "SalesPrice", "IncomeAccountRef", "PurchaseDesc", "PurchaseCost", "PurchaseTaxCodeRef", "COGSAccountRef", "PrefVendorRef", "AssetAccountRef", "ReforderPoint", "Max", "QuantityOnHand", - "AcerageCost", "QuantityOnOrder", "QuantityOnSalesOrder", + "AverageCost", "QuantityOnOrder", "QuantityOnSalesOrder", "ExternalGUID", "DataExtRet", ] self.onError = "stopOnError" @@ -311,198 +311,265 @@ def LineAdd(lineAdd:Union[list, dict])->dict: # 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' + 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.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.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") + 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 '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 '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'] + self.InvoiceLineAdd = [] + if 'InvoiceLineAdd' in kwargs: + LineAdd = kwargs.get('InvoiceLineAdd') + self.isLineAddOk = True + if isinstance(LineAdd, dict ): + LineAdd = [LineAdd] + elif isinstance(LineAdd, list): + pass + else: + self.isLineAddOk = False - # print(self.classNameRq) - # print(self.QBDict) + 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("InvoiceLineAdd 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 'Other2' in eachLineAdd: + self.LineAddDict["Other2"]=eachLineAdd['Other2'] + if len(self.LineAddDict)>0: + self.InvoiceLineAdd.append(self.LineAddDict) + if 'LinkToTxn_TxnID' in eachLineAdd and 'LinkToTxn_TxnLineID' in eachLineAdd: + self.LineAddDict["LinkToTxn"]={'TxnID': eachLineAdd['LinkToTxn_TxnID'], 'TxnLineID': eachLineAdd['LinkToTxn_TxnLineID']} + + #skip the rest, not too important + else: + print("InvoiceLineAdd has to be list of dict or a dict") + # print(f'{self.InvoiceLineAdd = }') + if len(self.InvoiceLineAdd)>0: + self.QBDict[self.classNameRq][self.__class__.__name__]['InvoiceLineAdd']=self.InvoiceLineAdd + + + if 'IncludeRetElement' in kwargs: + self.QBDict[self.classNameRq]["IncludeRetElement"]=kwargs['IncludeRetElement'] + + # print(self.classNameRq) + # pprint.pprint(self.QBDict, sort_dicts=False) class CustomerQuery(baseQBQuery): @@ -551,8 +618,10 @@ class CustomerQuery(baseQBQuery): print(f'{IRE = }') if len(IRE)>0: if self.defaultFilterKey not in IRE: - IRE.append(self.defaultFilterKey) - self.QBDict[self.classNameRq]["IncludeRetElement"]=IRE + # IRE.append(self.defaultFilterKey) + self.QBDict[self.classNameRq]["IncludeRetElement"]=['ListID'] + IRE + else: + self.QBDict[self.classNameRq]["IncludeRetElement"]=IRE else: self.QBDict[self.classNameRq]["IncludeRetElement"]=self.includeRetElements_allowed if 'OwnerID' in kwargs: @@ -1302,7 +1371,13 @@ if __name__ == "__main__": @timing def customerquery(): - g= CustomerQuery(MaxReturned=3, IncludeRetElement=["fullname", "name", "CompanyName", "BillAddressBlock", "ShipAddressBlock", "Notes", "AdditionalNotesRet", 'creditlimit']) + FullName = 'Sentosa Jati Bening' + # FullName = "8, Toko" + FullName = "999 HPL" + g= CustomerQuery(MaxReturned=6, IncludeRetElement=["fullname", "name", "CompanyName", "ShipAddress", "ShipToAddress","Phone", "Notes", "AdditionalNotesRet", 'creditlimit']) + # g= CustomerQuery(MaxReturned=3, IncludeRetElement=["fullname", "name", "CompanyName", "BillAddressBlock", "ShipAddressBlock", "Notes", "AdditionalNotesRet", 'creditlimit']) + # g=CustomerQuery(MaxReturned = None,) + # g= CustomerQuery(FullName= FullName,)# IncludeRetElement=["fullname", "name", "CompanyName", "BillAddressBlock", "ShipAddressBlock", "Notes", "AdditionalNotesRet", 'creditlimit']) # g= CustomerQuery(MaxReturned=20, ActiveStatus="ActiveOnly", MatchCriterion="StartsWith", Name="to", IncludeRetElement=["fullname", "name", "billaddressblock", "currencyfilter"]) # print(g.IncludeRetElements_allowed) print("init finish") @@ -1376,13 +1451,13 @@ if __name__ == "__main__": print([y for y in x]) print(f"{x.get('Name')} : {len(x.get('PriceLevelPerItemRet'))}") - pricelevel() + # pricelevel() # invoicequery() # salesorderquery() # transactionquery() # pprint.pprint(InventoryStockStatusByVendor(), sort_dicts=False) # iteminventoryquery() - # customerquery() + customerquery() # readxmltodict() # g=SalesOrderQuery(MaxReturned=1) # print(len(None)) diff --git a/server.py b/server.py index b470f59..8cb07d9 100644 --- a/server.py +++ b/server.py @@ -102,6 +102,7 @@ class baseQBQuery: # print(f'{self.response_string = }') xml = minidom.parseString(self.response_string.replace("\n", "")) self.response_string = xml.toprettyxml() + print(self.response_string) # print(f'{self.response_string = }') self.statusOk = self.isDataOK()