add PPN Masukan on itemreceipt macro and BRANCH detection

This commit is contained in:
bcomsugi 2025-03-17 01:03:27 +07:00
parent a09792ba8a
commit e66a26a98d
2 changed files with 44 additions and 9 deletions

View File

@ -86,15 +86,30 @@ def read_DN_excel(filename):
# TxnDate = rawdata[2][3].strip().split(" ")[-1] # TxnDate = rawdata[2][3].strip().split(" ")[-1]
_y=1 _y=1
_x=0 _x=0
BRANCH = None
BRANCH_LIST = ['SBY', 'BGR', 'CRB']
BRANCH_ADDRESS = ['BUDURAN', 'CIBINONG', 'CARUBAN']
col_value=None
for col in range(1,wb.sheets()[0].ncols): for col in range(1,wb.sheets()[0].ncols):
col_value = wb.sheets()[0].col_values(col) col_value = wb.sheets()[0].col_values(col)
print("col=",col, col_value[1]) print(f"{col=} {col_value=} {col_value[1]=}")
if "TCO-DN" in col_value[1]: if "TCO-DN" in col_value[1]:
_x=col _x=col
break
if _x == 0 : if _x == 0 :
return False, "Cannot find TCO-DN cell" return False, "Cannot find TCO-DN cell"
branchindex = None
for idx, branchadd in enumerate(BRANCH_ADDRESS):
for cvalu in col_value:
if branchadd in cvalu:
branchindex = idx
break
if branchindex!=None:
break
if branchindex != None:
BRANCH = BRANCH_LIST[branchindex]
print(f'{branchindex = } {BRANCH = }')
# if "TCO-DN" in wb.sheets()[0].cell(_y, _x).value.strip(): # if "TCO-DN" in wb.sheets()[0].cell(_y, _x).value.strip():
@ -104,8 +119,8 @@ def read_DN_excel(filename):
# print(DNRefNum) # print(DNRefNum)
TxnDate = wb.sheets()[0].cell(_y+1, _x).value.strip().split(" ")[-1] TxnDate = wb.sheets()[0].cell(_y+1, _x).value.strip().split(" ")[-1]
Memo = DNRefNum Memo = DNRefNum
print(f'pdfexcel4DNwithxlrd.py->DNRefNum:{DNRefNum}, TxnDate:{TxnDate}') print(f'pdfexcel4DNwithxlrd.py->DNRefNum:{DNRefNum}, TxnDate:{TxnDate} {BRANCH = }')
DeliveryNotedict={'DNRefNum':DNRefNum, 'TxnDate':TxnDate, 'Memo': Memo} DeliveryNotedict={'DNRefNum':DNRefNum, 'TxnDate':TxnDate, 'Memo': Memo, 'BRANCH':BRANCH}
wks=wb.sheets() wks=wb.sheets()
for sheet in wks: for sheet in wks:
# rawdata=ws.range("c1").current_region.value # rawdata=ws.range("c1").current_region.value

View File

@ -100,25 +100,44 @@ class PurchaseOrderQuery:
TxnDate = self.create_sub_element(ET, ItemReceiptAdd, "TxnDate", self.DN['TxnDate'], 8 ) TxnDate = self.create_sub_element(ET, ItemReceiptAdd, "TxnDate", self.DN['TxnDate'], 8 )
RefNumber = self.create_sub_element(ET, ItemReceiptAdd, "RefNumber", self.DN['DNRefNum'], 8 ) RefNumber = self.create_sub_element(ET, ItemReceiptAdd, "RefNumber", self.DN['DNRefNum'], 8 )
Memo = self.create_sub_element(ET, ItemReceiptAdd, "Memo", self.DN['Memo'], 10 ) Memo = self.create_sub_element(ET, ItemReceiptAdd, "Memo", self.DN['Memo'], 10 )
DNTotalAmount = 0
for purchaseorder in self.PurchaseOrderList: for purchaseorder in self.PurchaseOrderList:
POTxnId = purchaseorder['TxnID'] POTxnId = purchaseorder['TxnID']
print(f'create_itemreceiptadd_QBXML->POTxnID: {POTxnId}') print(f'create_itemreceiptadd_QBXML->POTxnID: {POTxnId}')
for itemline in purchaseorder['PurchaseOrderLineRet']: for itemline in purchaseorder['PurchaseOrderLineRet']:
if 'DNQuantity' in itemline: if 'DNQuantity' in itemline:
DNQty = itemline['DNQuantity']
Rate = itemline['Rate']
DNAmount = DNQty*Rate
DNTotalAmount += DNAmount
ItemLineAdd = self.create_sub_element(ET, ItemReceiptAdd, "ItemLineAdd", "\n ", 10 ) ItemLineAdd = self.create_sub_element(ET, ItemReceiptAdd, "ItemLineAdd", "\n ", 10 )
Quantity = self.create_sub_element(ET, ItemLineAdd, "Quantity", str(itemline['DNQuantity'] ), 12 ) Quantity = self.create_sub_element(ET, ItemLineAdd, "Quantity", str(DNQty), 12 )
UnitOfMeasure = self.create_sub_element(ET, ItemLineAdd, "UnitOfMeasure", str(itemline['UOM']), 12 ) UnitOfMeasure = self.create_sub_element(ET, ItemLineAdd, "UnitOfMeasure", str(itemline['UOM']), 12 )
LinkToTxn = self.create_sub_element(ET, ItemLineAdd, "LinkToTxn", "\n ",10 ) LinkToTxn = self.create_sub_element(ET, ItemLineAdd, "LinkToTxn", "\n ",10 )
TxnID = self.create_sub_element(ET, LinkToTxn, "TxnID", POTxnId,14 ) TxnID = self.create_sub_element(ET, LinkToTxn, "TxnID", POTxnId,14 )
TxnLineID = self.create_sub_element(ET, LinkToTxn, "TxnLineID", itemline['TxnLineID'],12 ) TxnLineID = self.create_sub_element(ET, LinkToTxn, "TxnLineID", itemline['TxnLineID'],12 )
PPN11percent = round(0.11*DNTotalAmount ,2)
if self.DN['BRANCH']!=None and self.DN['BRANCH']!='BGR' and DNTotalAmount:
ItemLineAdd = self.create_sub_element(ET, ItemReceiptAdd, "ItemLineAdd", "\n ", 10 )
ItemRef = self.create_sub_element(ET, ItemLineAdd, "ItemRef", "\n ", 12 )
ItemRef = self.create_sub_element(ET, ItemRef, "FullName", "PPN Masukan", 14 )
# Quantity = self.create_sub_element(ET, ItemLineAdd, "Quantity", "1", 12 )
Quantity = self.create_sub_element(ET, ItemLineAdd, "Cost", str(PPN11percent), 12 )
# Quantity = self.create_sub_element(ET, ItemLineAdd, "Quantity", str(DNQty), 12 )
# UnitOfMeasure = self.create_sub_element(ET, ItemLineAdd, "UnitOfMeasure", str(itemline['UOM']), 12 )
# LinkToTxn = self.create_sub_element(ET, ItemLineAdd, "LinkToTxn", "\n ",10 )
# TxnID = self.create_sub_element(ET, LinkToTxn, "TxnID", POTxnId,14 )
# TxnLineID = self.create_sub_element(ET, LinkToTxn, "TxnLineID", itemline['TxnLineID'],12 )
mydata = ET.tostring(root, encoding = "unicode") mydata = ET.tostring(root, encoding = "unicode")
qbxml_query = """<?xml version="1.0" encoding="utf-8"?>\n""" qbxml_query = """<?xml version="1.0" encoding="utf-8"?>\n"""
qbxml_query = qbxml_query + """<?qbxml version="13.0"?>""" qbxml_query = qbxml_query + """<?qbxml version="13.0"?>"""
qbxml_query = qbxml_query + "\n" + mydata qbxml_query = qbxml_query + "\n" + mydata
# print(f'create_itemreceiptadd_QBXML->Create_ItemReceiptadd_QBXML: {qbxml_query}') print(f'create_itemreceiptadd_QBXML->Create_ItemReceiptadd_QBXML: {qbxml_query}')
# print(f"replyfrom qbxml:{self.connect_to_quickbooks(qbxml_query)}") # print(f"replyfrom qbxml:{self.connect_to_quickbooks(qbxml_query)}")
print(f'{self.DN["BRANCH"]= } {DNTotalAmount= :_} {PPN11percent= :_} {DNTotalAmount+PPN11percent= :_}')
return qbxml_query return qbxml_query
@ -273,7 +292,7 @@ class PurchaseOrderQuery:
break break
else: else:
print(f"{_poline['ItemFullName']} BackOrdered < Qty in DN {_poline['BackOrdered']}<{QuantityIn_dict}") print(f"{_poline['ItemFullName']} BackOrdered < Qty in DN {_poline['BackOrdered']}<{QuantityIn_dict}")
Error_msg = f"BackOrdered < Qty in DN {_poline['BackOrdered']}<{QuantityIn_dict}" Error_msg = f"BackOrdered < Qty in DN {_poline['BackOrdered']=}<{QuantityIn_dict=}"
else: else:
# print(f"UOM different {_poline['UOM']} <> {_dict['UOM']}") # print(f"UOM different {_poline['UOM']} <> {_dict['UOM']}")
Error_msg = f"UOM different {_poline['UOM']} <> {_dict['UOM']}" Error_msg = f"UOM different {_poline['UOM']} <> {_dict['UOM']}"
@ -306,7 +325,7 @@ class PurchaseOrderQuery:
else: else:
_dflist = self.dfDN.to_dict('records') _dflist = self.dfDN.to_dict('records')
# print(self.dfDN) # print(self.dfDN)
print(f'_dflist1:{_dflist}') print(f'{_dflist = }')
# print("") # print("")
# print(f'self.PurchaseOrderList: {self.PurchaseOrderList}') # print(f'self.PurchaseOrderList: {self.PurchaseOrderList}')
for idx, xdf in enumerate(_dflist): for idx, xdf in enumerate(_dflist):
@ -341,6 +360,7 @@ class PurchaseOrderQuery:
# raise ValueError("Incorrect data format, should be YYYY-MM-DD") # raise ValueError("Incorrect data format, should be YYYY-MM-DD")
def get_ext_doc_no_list(self, dndict=None): def get_ext_doc_no_list(self, dndict=None):
# print(f'{dndict = }')
if dndict: if dndict:
dnlist = dndict['lines'] dnlist = dndict['lines']
else: else: