From 9e65890d0f68bc9424d661d53a449029ca0281e8 Mon Sep 17 00:00:00 2001 From: bcomsugi Date: Fri, 29 Dec 2023 04:41:31 +0700 Subject: [PATCH] save inv --- SO_to_Inv/readSO.py | 74 ++++-- .../templates/Invoice/so_details_form.html | 104 +++++++++ .../templates/Invoice/so_list_form.html | 2 +- django/Invoice/urls.py | 3 +- django/Invoice/views.py | 216 +++++++++++++++++- records | 1 + 6 files changed, 363 insertions(+), 37 deletions(-) create mode 100644 django/Invoice/templates/Invoice/so_details_form.html create mode 100644 records diff --git a/SO_to_Inv/readSO.py b/SO_to_Inv/readSO.py index ee31368..1b4b9dd 100644 --- a/SO_to_Inv/readSO.py +++ b/SO_to_Inv/readSO.py @@ -25,6 +25,7 @@ class SalesOrderQuery: self._df_price_level = pd.read_excel(os.path.join(self.cwd, self.item_inventory_path, self.price_level_filename), usecols=['FullName', 'PriceLevelName', 'CustomPrice'],) print(self._df_price_level) print(type(self._df_price_level.loc[(self._df_price_level['FullName']=="ECO:0:ECO-002") & (self._df_price_level['PriceLevelName']=="T 202202")].values.tolist()[0][2])) + print(self._df_price_level.loc[(self._df_price_level['FullName']=="TEDG:S122:EDG-009-1/22") & (self._df_price_level['PriceLevelName']=="T 202202")].values.tolist()[0][2]) self.FullName = kwargs['FullName'] if 'FullName' in kwargs else None self.CustomerPriceLevelName_filename = "CustomerList.xlsx" @@ -33,8 +34,9 @@ class SalesOrderQuery: print(self._df_customer) self.Customer = None if self.FullName: - self.Customer = self._df_customer.loc[(self._df_customer["FullName"]==self.FullName)].values.tolist()[0] - print(f'Customer:{self.Customer}') + if self.FullName in self._df_customer['FullName'].values: + self.Customer = self._df_customer.loc[(self._df_customer["FullName"]==self.FullName)].values.tolist()[0] + print(f'Customer:{self.Customer}') self.DN = kwargs['DN'] if 'DN' in kwargs else {} self.Reuse = kwargs['Reuse'] if 'Reuse' in kwargs else None @@ -176,8 +178,11 @@ class SalesOrderQuery: return self.get_customer_pricelevel(response_string) return response_string - def create_invoiceadd_QBXML(self): + def create_invoiceadd_QBXML(self, soList=None): + print('create_ionvoiceadd_QBXML') + if soList: + self.SalesOrderList = soList root = ET.Element("QBXML") root.tail = "\n" root.text = "\n " @@ -225,12 +230,12 @@ class SalesOrderQuery: # 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) + if salesorder['Disc_Amount']!=0: # 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") @@ -293,10 +298,22 @@ class SalesOrderQuery: else: return False, status_code + def get_discperpcs(self, ItemFullName, Rate:float): + discPerPcs = 0 + if self.Customer: + if self.Customer[2]: + pricelist = self._df_price_level.loc[(self._df_price_level['FullName']==ItemFullName) & (self._df_price_level['PriceLevelName']==self.Customer[2])].values.tolist()[0][2] + discPerPcs = Rate-pricelist + # 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])) + if discPerPcs < 0 : + discPerPcs = 0 + print(f"WARNING: Rate is Lower than Pricelist Cust:{self.Customer} ItemName:{ItemFullName} Rate:{Rate} < {pricelist}") + return discPerPcs - def _get_sales_order_header(self, response_string): + + def _get_sales_order_header(self, response_string, includefullInvoiced=False): print('_get_sales_order_header') - print(f'responsestring:{self.pprintXml(response_string)}') + # print(f'responsestring:{self.pprintXml(response_string)}') QBXML = ET.fromstring(response_string) datadict = {} SalesOrderdict = {} @@ -319,14 +336,19 @@ class SalesOrderQuery: TotalAmount = SalesOrderRet.find('TotalAmount').text IsFullyInvoiced = SalesOrderRet.find('IsFullyInvoiced').text IsManuallyClosed = SalesOrderRet.find('IsManuallyClosed').text + if includefullInvoiced==False: + if IsFullyInvoiced.lower()=='true': + # print(IsFullyInvoiced) + continue # print(CustomerFullName, TxnID, TotalAmount) SalesOrderdict = {'RefNumber':RefNumber, 'CustomerFullName':CustomerFullName, 'TxnID':TxnID, 'TxnDate':TxnDate, 'TxnNumber':TxnNumber, 'TotalAmount':TotalAmount, 'IsFullyInvoiced':IsFullyInvoiced, 'IsManuallyClosed':IsManuallyClosed, 'SalesOrderLineRet':[]} SalesOrderLineRet = SalesOrderRet.findall('SalesOrderLineRet') # ic(len(SalesOrderLineRet)) + disc_amount=0 if len(SalesOrderLineRet) > 0: - disc_amount=0 + # disc_amount=0 for SalesOrderLineRet in SalesOrderLineRet: discPerItem = 0 discPerPcs = 0 @@ -353,17 +375,20 @@ class SalesOrderQuery: BackOrdered = float(Quantity) - float(Invoiced) if BackOrdered > 0 and LineIsManuallyClosed.lower() == 'false' : # ic(self.Customer) - if self.Customer: - 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])) - if discPerPcs > 0: - print(Quantity, BackOrdered, Rate, (Rate - self._df_price_level.loc[(self._df_price_level['FullName']==ItemFullName) & (self._df_price_level['PriceLevelName']==self.Customer[2])].values.tolist()[0][2])) - 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]) - else: - discPerPcs = 0 + discPerPcs = self.get_discperpcs(ItemFullName, Rate) + discPerItem = BackOrdered * discPerPcs + disc_amount += discPerItem + # if self.Customer: + # 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])) + # if discPerPcs > 0: + # print(Quantity, BackOrdered, Rate, (Rate - self._df_price_level.loc[(self._df_price_level['FullName']==ItemFullName) & (self._df_price_level['PriceLevelName']==self.Customer[2])].values.tolist()[0][2])) + # 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]) + # else: + # discPerPcs = 0 SalesOrderLinedict = {'TxnLineID':TxnLineID, 'ItemFullName':ItemFullName, 'Quantity':Quantity, @@ -567,11 +592,12 @@ class SalesOrderQuery: print(f'txnid: {txnlist}', type(txnlist)) txnid = [] for x in txnlist: + # print(x, type(x)) if isinstance(x, list): txnid.append(x[0]) else: txnid.append(x) - break + # break # txnid = [x[0] if isinstance(x, list) else x for x in txnid ] print(txnid) if txnid: diff --git a/django/Invoice/templates/Invoice/so_details_form.html b/django/Invoice/templates/Invoice/so_details_form.html new file mode 100644 index 0000000..0a276fc --- /dev/null +++ b/django/Invoice/templates/Invoice/so_details_form.html @@ -0,0 +1,104 @@ +{% extends 'base.html' %} +{% block body %} + +
+ +
+{% endblock %} \ No newline at end of file diff --git a/django/Invoice/templates/Invoice/so_list_form.html b/django/Invoice/templates/Invoice/so_list_form.html index 2b6137a..7e28919 100644 --- a/django/Invoice/templates/Invoice/so_list_form.html +++ b/django/Invoice/templates/Invoice/so_list_form.html @@ -2,7 +2,7 @@ {% block body %}
-