From 2e22a01b52d18753bd282564d4429485d81493b1 Mon Sep 17 00:00:00 2001 From: bcomsugi Date: Sun, 12 Nov 2023 23:51:02 +0700 Subject: [PATCH] update discount correctly --- SO_to_Inv/readSO.py | 83 +++++++++++++++++++++++++++++++++++++++++- django/Invoice/urls.py | 2 + 2 files changed, 83 insertions(+), 2 deletions(-) diff --git a/SO_to_Inv/readSO.py b/SO_to_Inv/readSO.py index 74822d7..1e3114d 100644 --- a/SO_to_Inv/readSO.py +++ b/SO_to_Inv/readSO.py @@ -10,7 +10,7 @@ import os import pythoncom # from icecream import ic -ic.configureOutput(includeContext=True, ) +# ic.configureOutput(includeContext=True, ) class SalesOrderQuery: def __init__(self, **kwargs) -> None: # print(f'kwargs:{kwargs}') @@ -260,7 +260,7 @@ class SalesOrderQuery: return False, status_code - def _get_sales_order_header(self, response_string): + def _get_sales_order_header_(self, response_string): print('_get_sales_order_header') ic(f'responsestring:{response_string}') QBXML = ET.fromstring(response_string) @@ -272,6 +272,8 @@ class SalesOrderQuery: for SalesOrderRet in SalesOrderRets: RefNumber = SalesOrderRet.find('RefNumber').text # Memo = SalesOrderRet.find('Memo').text + TxnDate = SalesOrderRet.find('TxnDate').text + TxnNumber = SalesOrderRet.find('TxnNumber').text CustomerFullName = SalesOrderRet.find('CustomerRef/FullName').text TxnID = SalesOrderRet.find('TxnID').text TotalAmount = SalesOrderRet.find('TotalAmount').text @@ -279,6 +281,7 @@ class SalesOrderQuery: IsManuallyClosed = SalesOrderRet.find('IsManuallyClosed').text # 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)) @@ -327,6 +330,82 @@ class SalesOrderQuery: # print(f'_get_sales_order_header->Salesorderlist: {self.SalesOrderList}') return self.SalesOrderList + + def _get_sales_order_header(self, response_string): + print('_get_sales_order_header_2') + ic(f'responsestring:{response_string}') + QBXML = ET.fromstring(response_string) + datadict = {} + SalesOrderdict = {} + _SalesOrderlist = [] + SalesOrderRets = QBXML.findall('.//SalesOrderRet') + # print(SalesOrderRets) + for SalesOrderRet in SalesOrderRets: + RefNumber = SalesOrderRet.find('RefNumber').text + # Memo = SalesOrderRet.find('Memo').text + TxnDate = SalesOrderRet.find('TxnDate').text + TxnNumber = SalesOrderRet.find('TxnNumber').text + CustomerFullName = SalesOrderRet.find('CustomerRef/FullName').text + TxnID = SalesOrderRet.find('TxnID').text + TotalAmount = SalesOrderRet.find('TotalAmount').text + IsFullyInvoiced = SalesOrderRet.find('IsFullyInvoiced').text + IsManuallyClosed = SalesOrderRet.find('IsManuallyClosed').text + # 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)) + if len(SalesOrderLineRet) > 0: + disc_amount=0 + for SalesOrderLineRet in SalesOrderLineRet: + TxnLineID = SalesOrderLineRet.find('TxnLineID').text + ItemFullName = SalesOrderLineRet.find('ItemRef/FullName') + if ItemFullName is None: + ic("no itemfullname") + break + else: + ItemFullName=ItemFullName.text + ic(ItemFullName) + Quantity = SalesOrderLineRet.find('Quantity').text + UnitOfMeasure = SalesOrderLineRet.find('UnitOfMeasure').text + OverrideUOMSetRef = SalesOrderLineRet.find('OverrideUOMSetRef/FullName') + if OverrideUOMSetRef != None: + OverrideUOMSetRef = OverrideUOMSetRef.text + Rate = float(SalesOrderLineRet.find('Rate').text) + + Amount = float(SalesOrderLineRet.find('Amount').text) + # if self.SPPriceLevelName: + Invoiced = SalesOrderLineRet.find('Invoiced').text + LineIsManuallyClosed = SalesOrderLineRet.find('IsManuallyClosed').text + # print(TxnLineID, ItemFullName) + BackOrdered = float(Quantity) - float(Invoiced) + if BackOrdered and LineIsManuallyClosed.lower() == 'false' : + if self.Customer[2]: + # print(Rate, (Rate - self._df_price_level.loc[(self._df_price_level['FullName']==ItemFullName) & (self._df_price_level['PriceLevelName']==self.SPPriceLevelName)].values.tolist()[0][2])) + ic(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])) + disc_amount += BackOrdered * (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+=float(Quantity)*2000 #testing only + + SalesOrderLinedict = {'TxnLineID':TxnLineID, + 'ItemFullName':ItemFullName, + 'Quantity':Quantity, + 'UOM':UnitOfMeasure, + 'Rate':Rate, + 'Amount':Amount, + 'BackOrdered':BackOrdered, + 'Invoiced':Invoiced, + 'LineIsManuallyClosed':LineIsManuallyClosed, + } + SalesOrderdict['SalesOrderLineRet'].append(SalesOrderLinedict) + SalesOrderdict['Disc_Amount']=disc_amount + _SalesOrderlist.append(SalesOrderdict) + # print(_SalesOrderlist) + self.SalesOrderList=_SalesOrderlist + # print(f'_get_sales_order_header->Salesorderlist: {self.SalesOrderList}') + return self.SalesOrderList + + def addDiscountToInvoiceList(self, _dict:dict): print("addDiscountToInvoiceList") diff --git a/django/Invoice/urls.py b/django/Invoice/urls.py index 744d2a5..8f0e742 100644 --- a/django/Invoice/urls.py +++ b/django/Invoice/urls.py @@ -2,6 +2,8 @@ from django.urls import path from . import views from icecream import install install() +from icecream import ic +ic.configureOutput(includeContext=True, ) app_name = "Invoice" urlpatterns = [