diff --git a/DjangoSOtoInv.bat b/DjangoSOtoInv.bat new file mode 100644 index 0000000..de6185d --- /dev/null +++ b/DjangoSOtoInv.bat @@ -0,0 +1,4 @@ +cd "C:\Sources\dasaproject\" +echo already cd +cmd /k "cd /d C:\Sources\dasaproject\env\Scripts\ & activate & cd /d C:\Sources\dasaproject\ & python django\manage.py runserver 9000 +echo start app \ No newline at end of file diff --git a/SO_to_Inv/PriceLevelQuery.py b/SO_to_Inv/PriceLevelQuery.py index 38ac4c5..5abbf97 100644 --- a/SO_to_Inv/PriceLevelQuery.py +++ b/SO_to_Inv/PriceLevelQuery.py @@ -7,6 +7,7 @@ import pandas as pd from datetime import date import timeit import pythoncom +import os class PriceLevelQuery: @@ -387,6 +388,7 @@ class PriceLevelQuery: PriceLeveldf.sort_values(by=['PriceLevelName', 'FullName'], inplace=True) PriceLeveldf=PriceLeveldf.reset_index(drop=True) print(PriceLeveldf) + print(os.getcwd()) PriceLeveldf.to_excel('ItemInventory\PriceLevel.xlsx', sheet_name=PriceLevelName, index=False ) # print(PriceLevellist) return PriceLevellist, status diff --git a/SO_to_Inv/readSO.py b/SO_to_Inv/readSO.py index 0156064..38843fc 100644 --- a/SO_to_Inv/readSO.py +++ b/SO_to_Inv/readSO.py @@ -26,8 +26,8 @@ class SalesOrderQuery: self.price_level_filename = "PriceLevel.xlsx" 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]) + # 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" @@ -325,16 +325,34 @@ class SalesOrderQuery: else: return False, status_code + + def get_saved_refnumber(self, QBXML): #for InvoiceAddRS + + tree = ET.fromstring(QBXML) + objects = {} + GSRQRs = tree.find(".//InvoiceAddRs") + refnumber = tree.find(".//RefNumber").text + print(f"saved refnumber:{refnumber}") + objects['RefNumber'] = refnumber + objects['Customer_FullName']= tree.find(".//CustomerRef/FullName").text + objects['TxnDate'] = tree.find(".//TxnDate").text + objects['BalanceRemaining'] = tree.find(".//BalanceRemaining").text + return objects + def get_discperpcs(self, ItemFullName, Rate): 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}") + try: + 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}") + except: + print('Pricelevelname not found') + return None return discPerPcs @@ -412,6 +430,8 @@ class SalesOrderQuery: if BackOrdered > 0 and LineIsManuallyClosed.lower() == 'false' : # ic(self.Customer) discPerPcs = self.get_discperpcs(ItemFullName, Rate) + if discPerPcs == None: + return False discPerItem = BackOrdered * discPerPcs disc_amount += discPerItem # if self.Customer: diff --git a/django/Invoice/urls.py b/django/Invoice/urls.py index 06354e4..a169925 100644 --- a/django/Invoice/urls.py +++ b/django/Invoice/urls.py @@ -1,9 +1,9 @@ from django.urls import path from . import views -from icecream import install -install() -from icecream import ic -ic.configureOutput(includeContext=True, ) +# from icecream import install +# install() +# from icecream import ic +# ic.configureOutput(includeContext=True, ) app_name = "Invoice" urlpatterns = [ diff --git a/django/Invoice/views.py b/django/Invoice/views.py index b2874c7..0d00e8a 100644 --- a/django/Invoice/views.py +++ b/django/Invoice/views.py @@ -14,12 +14,12 @@ from django.contrib import messages import os import pandas as pd from django.conf import settings -from icecream import ic +# from icecream import ic import timeit from decimal import Decimal from datetime import datetime -ic.configureOutput(includeContext= True) +# ic.configureOutput(includeContext= True) def get_SalesOrderQuery(customer_name, txnid=None): try: @@ -183,6 +183,8 @@ def choose_inv(request): print("The time difference finish choose inv is :", timeit.default_timer() - starttime) return render(request, "Invoice/so_details_form.html", context) + else: + messages.warning(request, "Customer PriceLevel or PriceLevelList not found. please prepare data first and check Customer 'Special Customer Custom Field'") elif 'customer_fullname' in request.POST: customer_name = request.POST.get('customer_fullname') ini = get_SalesOrderQuery(customer_name) @@ -240,7 +242,8 @@ def save_inv(request): return HttpResponse("RefNumber Invalid. ") elif ref_number.strip()=="": ref_number = None - if check_duplicate_refnumber(ref_number): + if ref_number and check_duplicate_refnumber(ref_number): + messages.warning(request, 'RefNumber already Exist. please choose other RefNumber') return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/')) return HttpResponse('RefNumber already Exist. please choose other RefNumber') if len(txn_date)<6: @@ -402,11 +405,16 @@ def save_inv(request): result = ini.connect_to_quickbooks(invoiceaddQBXML) print("RESULT:") print(result) - if result and ini.status_ok(result): - pass - # context['messages']=[{"alert":"info", "message": "invoice Is Good"}] - messages.success(request, f"Invoice No: Has Been SAVED with link SO No. : {unique(df['RefNumber'].to_list())}") - # messages.info(request, 'Invoice Has Been SAVED2') + rst, status_msg = ini.status_ok(result) + if rst: + saved_inv = ini.get_saved_refnumber(result) + print(saved_inv) + # context['messages']=[{"alert":"info", "message": "invoice Is Good"}] + messages.success(request, f"Customer:{saved_inv['Customer_FullName']}\nInvoice No: {saved_inv['RefNumber']} Date: {saved_inv['TxnDate']}\nAmount Invoiced: {saved_inv['BalanceRemaining']}\n Has Been SAVED with link SO No. : {unique(df['RefNumber'].to_list())}") + + # messages.info(request, 'Invoice Has Been SAVED2') + else: + messages.warning(request, f"") print("The time difference finish Save Inv is :", timeit.default_timer() - starttime) return redirect('Invoice:show_customer') @@ -502,6 +510,7 @@ def prepare_data(request): messages.warning(request, f"Saving Not Success. status: {msg}") print(f"Saving Not Success. status: {msg}") if ret: + messages.info(request, "

You are pretty
smart

") messages.info(request, f"{subject} has been updated Successfully in {round(timeit.default_timer() - starttime, 4)} seconds. {FullName}") else: @@ -511,7 +520,7 @@ def prepare_data(request): ini = PriceLevelQuery(IncludeRetElement = ['Name']) price_level_list = ini.name_list() - print(price_level_list) + # print(price_level_list) context['objects']=price_level_list print("The time difference is :", timeit.default_timer() - starttime) diff --git a/django/manage.py b/django/manage.py index e950cdf..240faec 100644 --- a/django/manage.py +++ b/django/manage.py @@ -2,8 +2,8 @@ """Django's command-line utility for administrative tasks.""" import os import sys -from icecream import install -install() +# from icecream import install +# install() diff --git a/django/templates/base.html b/django/templates/base.html index 4f3e33c..8e9e594 100644 --- a/django/templates/base.html +++ b/django/templates/base.html @@ -74,9 +74,18 @@
  • Prepare Data
  • - +
    {% block search_nav %}