From f3b1cac25b89c088afe7e26b443d39b3bff11175 Mon Sep 17 00:00:00 2001 From: bcomsugi Date: Mon, 13 Nov 2023 01:40:15 +0700 Subject: [PATCH] update invoiceaddqbxml --- SO_to_Inv/readSO.py | 55 +++++++++++++++++++++++++---------------- django/Invoice/views.py | 2 +- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/SO_to_Inv/readSO.py b/SO_to_Inv/readSO.py index 336e899..5db9aa6 100644 --- a/SO_to_Inv/readSO.py +++ b/SO_to_Inv/readSO.py @@ -179,26 +179,38 @@ class SalesOrderQuery: disc_amount = 0 for soidx, salesorder in enumerate(self.SalesOrderList): SOTxnId = salesorder['TxnID'] - disc_amount+=int(salesorder['Disc_Amount']) + # disc_amount+=int(salesorder['Disc_Amount']) print(f'create_invoiceadd_QBXML->SOTxnId: {SOTxnId}') for itemline in salesorder['SalesOrderLineRet']: - # if 'DNQuantity' in itemline: - InvoiceLineAdd = self.create_sub_element(ET, InvoiceAdd, "InvoiceLineAdd", "\n ", 10 ) - # Quantity = self.create_sub_element(ET, InvoiceLineAdd, "Quantity", str(itemline['DNQuantity'] ), 12 ) - # Quantity = self.create_sub_element(ET, InvoiceLineAdd, "Quantity", str(itemline['BackOrdered'] ), 12 ) - # UnitOfMeasure = self.create_sub_element(ET, InvoiceLineAdd, "UnitOfMeasure", str(itemline['UOM']), 12 ) - LinkToTxn = self.create_sub_element(ET, InvoiceLineAdd, "LinkToTxn", "\n ", 10 ) - TxnID = self.create_sub_element(ET, LinkToTxn, "TxnID", SOTxnId,14 ) - TxnLineID = self.create_sub_element(ET, LinkToTxn, "TxnLineID", itemline['TxnLineID'], 12 ) - if soidx == len(self.SalesOrderList)-1: #last list then set the'400_Sales_discount' - print(f'disc_amount:{format(disc_amount, ".2f")}') - if disc_amount != 0: - - # disc_amount=format(disc_amount, ".2f") + backOrdered = str(itemline['BackOrdered']) + # backOrdered = '1' #testing purpose + if float(backOrdered) > 0: + discPerPcs = float(itemline['discPerPcs']) + discPerItem = float(backOrdered) * discPerPcs + disc_amount += discPerItem InvoiceLineAdd = self.create_sub_element(ET, InvoiceAdd, "InvoiceLineAdd", "\n ", 10 ) - ItemRef = self.create_sub_element(ET, InvoiceLineAdd, "ItemRef", "\n ", 12) - ItemFullName = self.create_sub_element(ET, ItemRef, "FullName", "400_Sales Discount", 12) - ItemRate = self.create_sub_element(ET, InvoiceLineAdd, "Rate", str(disc_amount), 10) + # Quantity = self.create_sub_element(ET, InvoiceLineAdd, "Quantity", str(itemline['DNQuantity'] ), 12 ) + Quantity = self.create_sub_element(ET, InvoiceLineAdd, "Quantity", backOrdered, 12 ) + # UnitOfMeasure = self.create_sub_element(ET, InvoiceLineAdd, "UnitOfMeasure", str(itemline['UOM']), 12 ) + LinkToTxn = self.create_sub_element(ET, InvoiceLineAdd, "LinkToTxn", "\n ", 10 ) + TxnID = self.create_sub_element(ET, LinkToTxn, "TxnID", SOTxnId,14 ) + TxnLineID = self.create_sub_element(ET, LinkToTxn, "TxnLineID", itemline['TxnLineID'], 12 ) + # if soidx == len(self.SalesOrderList)-1: #last list then set the'400_Sales_discount' + # print(f'disc_amount:{format(disc_amount, ".2f")}') + # if disc_amount != 0: + + # # disc_amount=format(disc_amount, ".2f") + # InvoiceLineAdd = self.create_sub_element(ET, InvoiceAdd, "InvoiceLineAdd", "\n ", 10 ) + # ItemRef = self.create_sub_element(ET, InvoiceLineAdd, "ItemRef", "\n ", 12) + # ItemFullName = self.create_sub_element(ET, ItemRef, "FullName", "400_Sales Discount", 12) + # ItemRate = self.create_sub_element(ET, InvoiceLineAdd, "Rate", str(disc_amount), 10) + + if disc_amount != 0: + # disc_amount=format(disc_amount, ".2f") + InvoiceLineAdd = self.create_sub_element(ET, InvoiceAdd, "InvoiceLineAdd", "\n ", 10 ) + ItemRef = self.create_sub_element(ET, InvoiceLineAdd, "ItemRef", "\n ", 12) + ItemFullName = self.create_sub_element(ET, ItemRef, "FullName", "400_Sales Discount", 12) + ItemRate = self.create_sub_element(ET, InvoiceLineAdd, "Rate", str(disc_amount), 10) mydata = ET.tostring(root, encoding = "unicode") @@ -311,7 +323,7 @@ class SalesOrderQuery: LineIsManuallyClosed = SalesOrderLineRet.find('IsManuallyClosed').text # print(TxnLineID, ItemFullName) BackOrdered = float(Quantity) - float(Invoiced) - if BackOrdered and LineIsManuallyClosed.lower() == 'false' : + if BackOrdered > 0 and LineIsManuallyClosed.lower() == 'false' : if self.Customer[2]: discPerPcs = Rate-self._df_price_level.loc[(self._df_price_level['FullName']==ItemFullName) & (self._df_price_level['PriceLevelName']==self.Customer[2])].values.tolist()[0][2] # ic(Rate, disc, (Rate - self._df_price_level.loc[(self._df_price_level['FullName']==ItemFullName) & (self._df_price_level['PriceLevelName']==self.SPPriceLevelName)].values.tolist()[0][2])) @@ -320,8 +332,8 @@ class SalesOrderQuery: discPerItem = BackOrdered * discPerPcs disc_amount += discPerItem # disc_amount += BackOrdered * discPerPcs # (Rate-self._df_price_level.loc[(self._df_price_level['FullName']==ItemFullName) & (self._df_price_level['PriceLevelName']==self.Customer[2])].values.tolist()[0][2]) - # disc_amount += BackOrdered * 2500#(Rate-self._df_price_level.loc[(self._df_price_level['FullName']==ItemFullName) & (self._df_price_level['PriceLevelName']==self.Customer[2])].values.tolist()[0][2]) - + else: + discPerPcs = 0 SalesOrderLinedict = {'TxnLineID':TxnLineID, 'ItemFullName':ItemFullName, 'Quantity':Quantity, @@ -331,7 +343,8 @@ class SalesOrderQuery: 'BackOrdered':BackOrdered, 'Invoiced':Invoiced, 'LineIsManuallyClosed':LineIsManuallyClosed, - 'disc':discPerItem, # backorder qty * disc per pcs + 'discPerItem':discPerItem, # backorder qty * disc per pcs + 'discPerPcs':discPerPcs, } SalesOrderdict['SalesOrderLineRet'].append(SalesOrderLinedict) SalesOrderdict['Disc_Amount']=disc_amount diff --git a/django/Invoice/views.py b/django/Invoice/views.py index 57c9e65..5ec6ea3 100644 --- a/django/Invoice/views.py +++ b/django/Invoice/views.py @@ -105,7 +105,7 @@ def show_inv(request): if itu: invoiceaddQBXML=ini.create_invoiceadd_QBXML() print(invoiceaddQBXML) - # print(ini.connect_to_quickbooks(ini.create_invoiceadd_QBXML())) + print(ini.connect_to_quickbooks(ini.create_invoiceadd_QBXML())) return render( request, "Invoice/so_list_form.html", context) # return HttpResponse('')