Compare commits

...

3 Commits

Author SHA1 Message Date
8b7784f536 change port to 8888 2025-07-22 05:09:13 +07:00
6af73dd990 minor update from mike 2025-07-22 05:07:49 +07:00
d415450cc6 SalesOrder shipto fix if then else 2025-07-22 04:56:26 +07:00
5 changed files with 392 additions and 52 deletions

View File

@ -414,27 +414,55 @@ class InvoiceAdd(baseQBQuery):
self.QBDict[self.__class__.__name__]["BillAddress"]={'Country': kwargs['BillAddress_Country']} self.QBDict[self.__class__.__name__]["BillAddress"]={'Country': kwargs['BillAddress_Country']}
if 'BillAddress_Note' in kwargs: if 'BillAddress_Note' in kwargs:
self.QBDict[self.__class__.__name__]["BillAddress"]={'Note': kwargs['BillAddress_Note']} self.QBDict[self.__class__.__name__]["BillAddress"]={'Note': kwargs['BillAddress_Note']}
if 'ShipAddress_Addr1' in kwargs: if 'ShipAddress_Addr1' in kwargs:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Addr1': kwargs['ShipAddress_Addr1']} self.QBDict[self.__class__.__name__]["ShipAddress"]={'Addr1': kwargs['ShipAddress_Addr1']}
if 'ShipAddress_Addr2' in kwargs: if 'ShipAddress_Addr2' in kwargs:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Addr2': kwargs['ShipAddress_Addr2']} if self.QBDict[self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.__class__.__name__]["ShipAddress"]['Addr2'] = kwargs['ShipAddress_Addr2']
else:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Addr2': kwargs['ShipAddress_Addr2']}
if 'ShipAddress_Addr3' in kwargs: if 'ShipAddress_Addr3' in kwargs:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Addr3': kwargs['ShipAddress_Addr3']} if self.QBDict[self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.__class__.__name__]["ShipAddress"]['Addr3'] = kwargs['ShipAddress_Addr3']
else:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Addr3': kwargs['ShipAddress_Addr3']}
if 'ShipAddress_Addr4' in kwargs: if 'ShipAddress_Addr4' in kwargs:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Addr4': kwargs['ShipAddress_Addr4']} if self.QBDict[self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.__class__.__name__]["ShipAddress"]['Addr4'] = kwargs['ShipAddress_Addr4']
else:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Addr4': kwargs['ShipAddress_Addr4']}
if 'ShipAddress_Addr5' in kwargs: if 'ShipAddress_Addr5' in kwargs:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Addr5': kwargs['ShipAddress_Addr5']} if self.QBDict[self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.__class__.__name__]["ShipAddress"]['Addr5'] = kwargs['ShipAddress_Addr5']
else:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Addr5': kwargs['ShipAddress_Addr5']}
if 'ShipAddress_City' in kwargs: if 'ShipAddress_City' in kwargs:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'City': kwargs['ShipAddress_City']} if self.QBDict[self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.__class__.__name__]["ShipAddress"]['City'] = kwargs['ShipAddress_City']
else:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'City': kwargs['ShipAddress_City']}
if 'ShipAddress_State' in kwargs: if 'ShipAddress_State' in kwargs:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'State': kwargs['ShipAddress_State']} if self.QBDict[self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.__class__.__name__]["ShipAddress"]['State'] = kwargs['ShipAddress_State']
else:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'State': kwargs['ShipAddress_State']}
if 'ShipAddress_PostalCode' in kwargs: if 'ShipAddress_PostalCode' in kwargs:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'PostalCode': kwargs['ShipAddress_PostalCode']} if self.QBDict[self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.__class__.__name__]["ShipAddress"]['PostalCode'] = kwargs['ShipAddress_PostalCode']
else:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'PostalCode': kwargs['ShipAddress_PostalCode']}
if 'ShipAddress_Country' in kwargs: if 'ShipAddress_Country' in kwargs:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Country': kwargs['ShipAddress_Country']} if self.QBDict[self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.__class__.__name__]["ShipAddress"]['Country'] = kwargs['ShipAddress_Country']
else:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Country': kwargs['ShipAddress_Country']}
if 'ShipAddress_Note' in kwargs: if 'ShipAddress_Note' in kwargs:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Note': kwargs['ShipAddress_Note']} if self.QBDict[self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.__class__.__name__]["ShipAddress"]['Note'] = kwargs['ShipAddress_Note']
else:
self.QBDict[self.__class__.__name__]["ShipAddress"]={'Note': kwargs['ShipAddress_Note']}
if 'IsPending' in kwargs: if 'IsPending' in kwargs:
self.QBDict[self.__class__.__name__]["IsPending"]=kwargs['IsPending'] self.QBDict[self.__class__.__name__]["IsPending"]=kwargs['IsPending']
@ -865,47 +893,143 @@ class SalesOrderAdd(baseQBQuery):
self.QBDict[self.classNameRq][self.__class__.__name__]["TxnDate"]=kwargs['TxnDate'] self.QBDict[self.classNameRq][self.__class__.__name__]["TxnDate"]=kwargs['TxnDate']
if 'RefNumber' in kwargs: if 'RefNumber' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["RefNumber"]=kwargs['RefNumber'] 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 'BillAddress_Addr1' in kwargs: if 'BillAddress_Addr1' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr1': kwargs['BillAddress_Addr1']} self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr1': kwargs['BillAddress_Addr1']}
if 'BillAddress_Addr2' in kwargs: if 'BillAddress_Addr2' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr2': kwargs['BillAddress_Addr2']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('BillAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]['Addr2'] = kwargs['BillAddress_Addr2']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr2': kwargs['BillAddress_Addr2']}
if 'BillAddress_Addr3' in kwargs: if 'BillAddress_Addr3' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr3': kwargs['BillAddress_Addr3']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('BillAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]['Addr3'] = kwargs['BillAddress_Addr3']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr3': kwargs['BillAddress_Addr3']}
if 'BillAddress_Addr4' in kwargs: if 'BillAddress_Addr4' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr4': kwargs['BillAddress_Addr4']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('BillAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]['Addr4'] = kwargs['BillAddress_Addr4']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr4': kwargs['BillAddress_Addr4']}
if 'BillAddress_Addr5' in kwargs: if 'BillAddress_Addr5' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr5': kwargs['BillAddress_Addr5']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('BillAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]['Addr5'] = kwargs['BillAddress_Addr5']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Addr5': kwargs['BillAddress_Addr5']}
if 'BillAddress_City' in kwargs: if 'BillAddress_City' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'City': kwargs['BillAddress_City']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('BillAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]['City'] = kwargs['BillAddress_City']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'City': kwargs['BillAddress_City']}
if 'BillAddress_State' in kwargs: if 'BillAddress_State' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'State': kwargs['BillAddress_State']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('BillAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]['State'] = kwargs['BillAddress_State']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'State': kwargs['BillAddress_State']}
if 'BillAddress_PostalCode' in kwargs: if 'BillAddress_PostalCode' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'PostalCode': kwargs['BillAddress_PostalCode']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('BillAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]['PostalCode'] = kwargs['BillAddress_PostalCode']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'PostalCode': kwargs['BillAddress_PostalCode']}
if 'BillAddress_Country' in kwargs: if 'BillAddress_Country' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Country': kwargs['BillAddress_Country']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('BillAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]['Country'] = kwargs['BillAddress_Country']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Country': kwargs['BillAddress_Country']}
if 'BillAddress_Note' in kwargs: if 'BillAddress_Note' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Note': kwargs['BillAddress_Note']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('BillAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]['Note'] = kwargs['BillAddress_Note']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["BillAddress"]={'Note': kwargs['BillAddress_Note']}
if 'ShipAddress_Addr1' in kwargs: if 'ShipAddress_Addr1' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr1': kwargs['ShipAddress_Addr1']} self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr1': kwargs['ShipAddress_Addr1']}
if 'ShipAddress_Addr2' in kwargs: if 'ShipAddress_Addr2' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr2': kwargs['ShipAddress_Addr2']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]['Addr2'] = kwargs['ShipAddress_Addr2']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr2': kwargs['ShipAddress_Addr2']}
if 'ShipAddress_Addr3' in kwargs: if 'ShipAddress_Addr3' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr3': kwargs['ShipAddress_Addr3']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]['Addr3'] = kwargs['ShipAddress_Addr3']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr3': kwargs['ShipAddress_Addr3']}
if 'ShipAddress_Addr4' in kwargs: if 'ShipAddress_Addr4' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr4': kwargs['ShipAddress_Addr4']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]['Addr4'] = kwargs['ShipAddress_Addr4']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr4': kwargs['ShipAddress_Addr4']}
if 'ShipAddress_Addr5' in kwargs: if 'ShipAddress_Addr5' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr5': kwargs['ShipAddress_Addr5']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]['Addr5'] = kwargs['ShipAddress_Addr5']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Addr5': kwargs['ShipAddress_Addr5']}
if 'ShipAddress_City' in kwargs: if 'ShipAddress_City' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'City': kwargs['ShipAddress_City']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]['City'] = kwargs['ShipAddress_City']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'City': kwargs['ShipAddress_City']}
if 'ShipAddress_State' in kwargs: if 'ShipAddress_State' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'State': kwargs['ShipAddress_State']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]['State'] = kwargs['ShipAddress_State']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'State': kwargs['ShipAddress_State']}
if 'ShipAddress_PostalCode' in kwargs: if 'ShipAddress_PostalCode' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'PostalCode': kwargs['ShipAddress_PostalCode']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]['PostalCode'] = kwargs['ShipAddress_PostalCode']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'PostalCode': kwargs['ShipAddress_PostalCode']}
if 'ShipAddress_Country' in kwargs: if 'ShipAddress_Country' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Country': kwargs['ShipAddress_Country']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]['Country'] = kwargs['ShipAddress_Country']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Country': kwargs['ShipAddress_Country']}
if 'ShipAddress_Note' in kwargs: if 'ShipAddress_Note' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Note': kwargs['ShipAddress_Note']} if self.QBDict[self.classNameRq][self.__class__.__name__].get('ShipAddress'):
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]['Note'] = kwargs['ShipAddress_Note']
else:
self.QBDict[self.classNameRq][self.__class__.__name__]["ShipAddress"]={'Note': kwargs['ShipAddress_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: if 'IsPending' in kwargs:
self.QBDict[self.classNameRq][self.__class__.__name__]["IsPending"]=kwargs['IsPending'] self.QBDict[self.classNameRq][self.__class__.__name__]["IsPending"]=kwargs['IsPending']
@ -1042,8 +1166,8 @@ class SalesOrderAdd(baseQBQuery):
elif 'PriceLevelRef_FullName' in eachLineAdd: elif 'PriceLevelRef_FullName' in eachLineAdd:
self.LineAddDict["PriceLevelRef"]={'FullName': eachLineAdd['PriceLevelRef_FullName']} self.LineAddDict["PriceLevelRef"]={'FullName': eachLineAdd['PriceLevelRef_FullName']}
if 'Amount ' in eachLineAdd: if 'Amount' in eachLineAdd:
self.LineAddDict["Amount "]=eachLineAdd['Amount '] self.LineAddDict["Amount"]=eachLineAdd['Amount']
# Others # Others
if 'Other1' in eachLineAdd: if 'Other1' in eachLineAdd:
self.LineAddDict["Other1"]=eachLineAdd['Other1'] self.LineAddDict["Other1"]=eachLineAdd['Other1']

23
main.py
View File

@ -368,3 +368,26 @@ async def transactionquery(request: Request):
return tq.all() return tq.all()
@app.post('/dasa2/rawxml')
async def rawxml(request: Request):
raw = await request.body()
from sendItem import send_new_item
rawstr = raw.decode(encoding="utf-8")
# print(f'{raw = } {type(raw) = } {rawstr = } {type(rawstr) = }')
# print(f'{send_new_item(rawstr) = }')
result = send_new_item(rawstr)
# print(result, type(result))
return {'result': result}
# return {'msg':'ok'}
# return "ok world"
# # try:
# # transactiondict = json.loads(transactiondict)
# # except:
# # print('error TransactionQuery()')
# # return {'message':'error getting TransactionQuery Data. it is not json'}
# print(f'{type(transactiondict)}, {transactiondict = }')
# print(f'{transactiondict = }')
# tq = TransactionQuery(**transactiondict)
# print(tq.all())
# print(f'{len(tq.to_json()) = }')
# return tq.all()

126
sendItem.py Normal file
View File

@ -0,0 +1,126 @@
import pythoncom
import win32com.client
class QBSDK_NewItem:
def __init__(self):
pythoncom.CoInitialize()
print("[DEBUG} ✅ COM Initialized")
self.qb = None
print("[DEBUG] ✅ QBXMLRP2 Dispatch OK")
self.session_id = None
self.response_str = ""
# self.open_connection()
def open_connection(self):
print(self.qb)
self.qb = win32com.client.Dispatch("QBXMLRP2.RequestProcessor")
print("after dispatch")
# self.qb.OpenConnection2("DASA2", "DASA2", 1)
# self.qb.OpenConnection2("", "DASA2", 1)
# self.qb.OpenConnection2("", "Test qbXML Request", 1)
op = self.qb.OpenConnection('', 'DASA2')
#self.qb.OpenConnection('', 'Test qbXML Request')
print("[DEBUG] ✅ OpenConnection2 completed")
self.session_id = self.qb.BeginSession("", 2)
print("ok")
print("[DEBUG] ✅ BeginSession completed")
def close_connection(self):
if self.session_id:
self.qb.EndSession(self.session_id)
self.qb.CloseConnection()
pythoncom.CoUninitialize()
print("[DEBUG] ✅ QuickBooks connection closed")
def response_request(self, xml: str) -> str:
try:
print("\n---SENDING REQUEST TO QUICKBOOKS---\n")
print(xml)
response = self.qb.ProcessRequest(self.session_id, xml)
print("\n---RESPONSE RECEIVED FROM QUICKBOOKS---\n")
print(response if response else "No Response Received!")
return response
except Exception as e:
print("[DEBUG] ❌ Error Processing Request: ", str(e))
return ""
# def qbxml_itemAdd(self, data):
# type = data['type'].item_type if hasattr(data['type'], 'item_type') else data['type']
# purchase_from_vendor = data.get("purchase_from_vendor", False)
# if type == "Inventory Part":
# open_tag = "<ItemInventoryAdd>"
# close_tag = "</ItemInventoryAdd>"
# rq_open = "<ItemInventoryAddRq>"
# rq_close = "</ItemInventoryAddRq>"
# elif type == "Inventory Assembly":
# open_tag = "<ItemInventoryAssemblyAdd>"
# close_tag = "</ItemInventoryAssemblyAdd>"
# rq_open = "<ItemInventoryAssemblyAddRq>"
# rq_close = "</ItemInventoryAssemblyAddRq>"
# else:
# raise ValueError("Unsupported item type")
# mpn = f"<ManufacturerPartNumber >{data['mpn']}</ManufacturerPartNumber>" if data.get("mpn") else ""
# xml = f"""<?xml version="1.0" encoding="utf-8"?>
# <?qbxml version="13.0"?>
# <QBXML>
# <QBXMLMsgsRq onError="stopOnError">
# {rq_open}
# {open_tag}
# <Name >{data['name']}</Name>
# {mpn}
# <SalesDesc >{data['sdesc']}</SalesDesc>
# <SalesPrice >{data['sprice']}</SalesPrice>
# <IncomeAccountRef>
# <ListID >{data['income_acc']}</ListID>
# </IncomeAccountRef>
# <PurchaseDesc >{data['pdesc']}</PurchaseDesc>
# <PurchaseCost >{data['cost']}</PurchaseCost>
# <COGSAccountRef>
# <ListID >{data['cogs_acc']}</ListID>
# </COGSAccountRef>
# <PrefVendorRef>
# <FullName >{data['pref_vendor']}</FullName>
# </PrefVendorRef>
# <AssetAccountRef>
# <ListID >{data['asset_acc']}</ListID>
# </AssetAccountRef>
# <ReorderPoint >{data['min']}</ReorderPoint>
# <Max >{data['max']}</Max>
# <QuantityOnHand >{data['on_hand']}</QuantityOnHand>
# <TotalValue >{data['tot_value']}</TotalValue>
# <InventoryDate >{data['as_of']}</InventoryDate>
# <IsActive >{'false' if data.get('inactive') else 'true'}</IsActive>
# {close_tag}
# {rq_close}
# </QBXMLMsgsRq>
# </QBXML>
# """
# print("\n🔍 CHECKING QBXML FORMAT BEFORE SENDING:")
# qbxml = xml.strip()
# response = self.response_request(qbxml)
# return response
def send_rq_to_qb(self, xmlstr:str):
qbxml = xmlstr.strip()
self.response_str = self.response_request(qbxml)
return self.response_str
def send_new_item(dtstr:str):
print("start send new item")
qbdt = QBSDK_NewItem()
print(qbdt)
qbdt.open_connection()
qbdt.send_rq_to_qb(dtstr)
return qbdt.response_str
# if __name__=="__main__":
# test = QBSDK_NewItem()
# test.open_connection()

View File

@ -1,6 +1,7 @@
import win32com.client import win32com.client
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from QBClass.QBClasses import GeneralSummaryReportQuery from QBClass.QBClasses import GeneralSummaryReportQuery
import pprint
class QuickBooksSDK: class QuickBooksSDK:
def __init__(self): def __init__(self):
@ -108,30 +109,94 @@ class QuickBooksSDK:
response = self.send_request(qbxml) response = self.send_request(qbxml)
return response return response
def get_keep_sales_orders(self, from_date: str, to_date: str) -> str:
""" Fetch sales orders from QuickBooks within date range """
qbxml = f"""
<?xml version="1.0" encoding="utf-8"?>
<?qbxml version="13.0"?>
<QBXML>
<QBXMLMsgsRq onError="stopOnError">
<CustomDetailReportQueryRq requestID="1">
<CustomDetailReportType>CustomTxnDetail</CustomDetailReportType>
<DisplayReport>true</DisplayReport>
<ReportDateMacro>All</ReportDateMacro>
<ReportEntityFilter>
<FullName>KEEP</FullName>
</ReportEntityFilter>
<ReportItemFilter>
<FullName>TACO:W:TH-001AA</FullName>
<FullName>TACO:W:TH-002AA</FullName>
<FullName>TACO:AA:TH-003AA</FullName>
<FullName>TACO:AA:TH-010AA</FullName>
</ReportItemFilter>
<ReportTxnTypeFilter>
<TxnTypeFilter>SalesOrder</TxnTypeFilter>
</ReportTxnTypeFilter>
<ReportPostingStatusFilter>NonPosting</ReportPostingStatusFilter>
<SummarizeRowsBy>TotalOnly</SummarizeRowsBy> <!-- required -->
<!-- IncludeColumn may have one of the following values: Account, Aging, Amount, AmountDifference, AverageCost, BilledDate, BillingStatus, CalculatedAmount,
Class, ClearedStatus, CostPrice, Credit, Currency, Date, Debit, DeliveryDate, DueDate, EstimateActive, ExchangeRate, FOB, IncomeSubjectToTax, Invoiced, Item, ItemDesc,
LastModifiedBy, LatestOrPriorState, Memo, ModifiedTime, Name, NameAccountNumber, NameAddress, NameCity, NameContact, NameEmail, NameFax, NamePhone, NameState, NameZip,
OpenBalance, OriginalAmount, PaidAmount, PaidStatus, PaidThroughDate, PaymentMethod, PayrollItem, PONumber, PrintStatus, ProgressAmount, ProgressPercent, Quantity,
QuantityAvailable, QuantityOnHand, QuantityOnSalesOrder, ReceivedQuantity, RefNumber, RunningBalance, SalesRep, SalesTaxCode, SerialOrLotNumber, ShipDate, ShipMethod,
SourceName, SplitAccount, SSNOrTaxID, TaxLine, TaxTableVersion, Terms, TxnID, TxnNumber, TxnType, UnitPrice, UserEdit, ValueOnHand, WageBase, WageBaseTips -->
<IncludeColumn>Amount</IncludeColumn>
<IncludeColumn>Item</IncludeColumn>
<IncludeColumn>Date</IncludeColumn>
<IncludeColumn>Memo</IncludeColumn>
<IncludeColumn>Quantity</IncludeColumn>
<IncludeColumn>RefNumber</IncludeColumn>
<IncludeColumn>Name</IncludeColumn>
<IncludeColumn>NameAddress</IncludeColumn>
<IncludeColumn>SourceName</IncludeColumn>
<IncludeColumn>TxnNumber</IncludeColumn>
<IncludeColumn>TxnType</IncludeColumn>
<IncludeColumn>ReceivedQuantity</IncludeColumn>
<IncludeColumn>PaidStatus</IncludeColumn>
<IncludeColumn>Invoiced</IncludeColumn>
<IncludeColumn>LatestOrPriorState</IncludeColumn>
</CustomDetailReportQueryRq>
</QBXMLMsgsRq>
</QBXML>
"""
# pprint.pprint(qbxml, sort_dicts=False)
qbxml = qbxml.strip()
print("\n🔍 CHECKING QBXML FORMAT BEFORE SENDING:")
print(qbxml) # Print request before sending
response = self.send_request(qbxml)
return response
# **🔹 Main Execution** # **🔹 Main Execution**
if __name__ == "__main__": if __name__ == "__main__":
# qb = QuickBooksSDK() qb = QuickBooksSDK()
# try: try:
# qb.open_connection() qb.open_connection()
# # Query sales orders from January 1, 2024 to January 5, 2024 # Query sales orders from January 1, 2024 to January 5, 2024
# sales_orders = qb.get_sales_orders("2024-01-01", "2024-01-05") # sales_orders = qb.get_sales_orders("2024-01-01", "2024-01-05")
sales_orders = qb.get_keep_sales_orders("2024-01-01", "2024-01-05")
# # Print hasil dalam format dictionary # Print hasil dalam format dictionary
# print("Sales Orders:", sales_orders) # print("Sales Orders:", sales_orders)
# finally: finally:
# qb.close_connection() qb.close_connection()
g= GeneralSummaryReportQuery(debug=False, GeneralSummaryReportType="InventoryStockStatusByItem", ReportItemFilter_FullName=['ECO:0:ECO-009', 'TACF:HNDL:TP-H04/MR','ECO:0:ECO-007', 'ECO:0:ECO-006'])
# g= GeneralSummaryReportQuery(debug=False, GeneralSummaryReportType="InventoryStockStatusByItem", ReportItemFilter_FullName=['ECO:0:ECO-009', 'TACF:HNDL:TP-H04/MR','ECO:0:ECO-007', 'ECO:0:ECO-006'])
# print(g, type(g)) # print(g, type(g))
# print(type(g.all())) # print(type(g.all()))
# print(g.all()) # print(g.all())
# print(g.response_string) # print(g.response_string)
# print(g.filter("reportdata").all()) # print(g.filter("reportdata").all())
# print(g.all()) # print(g.all())
print(f'{g.filter("datarow").getItemInventory_Report() = }') # print(f'{g.filter("datarow").getItemInventory_Report() = }')

View File

@ -1,13 +1,15 @@
import requests import requests
import json import json
import pprint
url = 'http://127.0.0.1:5555/getopenso' # url = 'http://127.0.0.1:5555/getopenso'
myobj = {"CustomerName":"Al Malik Paint",} # myobj = {"CustomerName":"Al Malik Paint",}
myobj = json.dumps(myobj) # myobj = json.dumps(myobj)
x = requests.post(url, json=myobj) # x = requests.post(url, json=myobj)
print(x.text) # print(x.text)
url = 'http://127.0.0.1:5555/getopensodetail' # url = 'http://127.0.0.1:5555/getopensodetail'
y={'solist':x.text} # y={'solist':x.text}
y=json.dumps(y) # y=json.dumps(y)
x = requests.post(url, json= y) # x = requests.post(url, json= y)
print(json.loads(x.text)) # print(json.loads(x.text))
from QBClass.QBClasses import InventoryStockStatusByVendor
pprint.pprint(InventoryStockStatusByVendor(), sort_dicts=False)