diff --git a/AppCode/ITRHandler.py b/AppCode/ITRHandler.py index 10c1145..29a8b0c 100644 --- a/AppCode/ITRHandler.py +++ b/AppCode/ITRHandler.py @@ -1,18 +1,10 @@ -from AppCode.Config import DBConfig import mysql.connector -from AppCode.YearGet import YearGet - import pandas as pd import pymysql import io - -# new -from AppCode.Config import DBConfig -import mysql.connector -import pandas as pd -import io from flask import send_file, render_template, request - +from AppCode.Config import DBConfig +from AppCode.YearGet import YearGet class ITRHandler: @@ -44,18 +36,16 @@ class ITRHandler: for result in self.cursor.stored_results(): records = result.fetchall() + # return single record if records: print(records[0]) - return records[0] # return single record + return records[0] return None - - # INSERT ITR RECORD using procedure "add_itr" def add_itr(self, data): - columns = [ 'year', 'gross_total_income', 'disallowance_14a', 'disallowance_37', 'deduction_80ia_business', 'deduction_80ia_misc', 'deduction_80ia_other', @@ -72,23 +62,6 @@ class ITRHandler: self.conn.commit() - # UPDATE ITR RECORD by ITR id - # def update(self, id, data): - # columns = [ - # 'year', 'gross_total_income', 'disallowance_14a', 'disallowance_37', - # 'deduction_80ia_business', 'deduction_80ia_misc', 'deduction_80ia_other', - # 'deduction_sec37_disallowance', 'deduction_80g', 'net_taxable_income', - # 'tax_30_percent', 'tax_book_profit_18_5', 'tax_payable', 'surcharge_12', - # 'edu_cess_3', 'total_tax_payable', 'mat_credit', 'interest_234c', - # 'total_tax', 'advance_tax', 'tds', 'tcs', 'tax_on_assessment', 'refund' - # ] - - # values = [data.get(col, 0) for col in columns] - # values.insert(0, id) # first argument is ID - - # print("values.insert(0, id)-->",values.insert(0, id)) - # self.cursor.callproc("UpdateITR", values) - # self.conn.commit() def update(self, id, data): columns = [ @@ -115,7 +88,7 @@ class ITRHandler: self.conn.commit() - + # dowanload itr report by year def itr_report_download(self, selected_year): try: @@ -131,14 +104,10 @@ class ITRHandler: # Convert SQL rows to DataFrame df = pd.DataFrame(rows) - # Transpose df_transposed = df.transpose() df_transposed.insert(0, 'Field', df_transposed.index) - print("df-->",df_transposed) - - record_cols = { i: f"Record {i}" for i in df_transposed.columns if isinstance(i, int) diff --git a/AppCode/YearGet.py b/AppCode/YearGet.py index 19c998b..f3f0782 100644 --- a/AppCode/YearGet.py +++ b/AppCode/YearGet.py @@ -11,13 +11,11 @@ class YearGet: def get_year_by_model(self, proc_name): try: self.cursor.callproc(proc_name) - years = [] for result in self.cursor.stored_results(): rows = result.fetchall() years = [row["year"] for row in rows] - print("-- years get --",years) return years except mysql.connector.Error as e: diff --git a/AppCode/__pycache__/ITRHandler.cpython-313.pyc b/AppCode/__pycache__/ITRHandler.cpython-313.pyc index 81d733e..6433975 100644 Binary files a/AppCode/__pycache__/ITRHandler.cpython-313.pyc and b/AppCode/__pycache__/ITRHandler.cpython-313.pyc differ diff --git a/AppCode/__pycache__/YearGet.cpython-313.pyc b/AppCode/__pycache__/YearGet.cpython-313.pyc index 7a34475..2df9be4 100644 Binary files a/AppCode/__pycache__/YearGet.cpython-313.pyc and b/AppCode/__pycache__/YearGet.cpython-313.pyc differ diff --git a/main.py b/main.py index dc0f40e..5484200 100644 --- a/main.py +++ b/main.py @@ -6,7 +6,6 @@ import io import mysql.connector from werkzeug.utils import secure_filename -from config import db_config from AppCode.Config import DBConfig from AppCode.FileHandler import FileHandler from AppCode.DocumentHandler import DocumentHandler @@ -133,6 +132,23 @@ def update_itr(id): return render_template('update_itr.html', record=record) +# new new -- check year in table existe or not by using ajax calling. +@app.route('/check_year', methods=['POST']) +def check_year(): + table_name = request.json.get("table") + year = request.json.get("year") + + conn = DBConfig.get_db_connection() + cursor = conn.cursor() + + query = f"SELECT COUNT(*) FROM {table_name} WHERE year = %s" + cursor.execute(query, (year,)) + result = cursor.fetchone()[0] + + cursor.close() + conn.close() + + return {"exists": result > 0} ## =============================================== diff --git a/static/js/ao_calc.js b/static/js/ao_calc.js index e702fd9..5c146e4 100644 --- a/static/js/ao_calc.js +++ b/static/js/ao_calc.js @@ -1,15 +1,5 @@ document.addEventListener("DOMContentLoaded", function () { - // All fields that must trigger calculation - const fields = [ - "gross_total_income", "disallowance_14a", "disallowance_37", - "deduction_80ia_business", "deduction_sec37_disallowance", "deduction_80g", - "net_taxable_income", "tax_30_percent", "tax_book_profit_18_5", - "surcharge_12", "edu_cess_3", "total_tax_payable", "mat_credit", - "interest_234c", "total_tax", "advance_tax", "tds", "tcs", - "tax_on_assessment", "refund" - ]; - function getVal(id) { return parseFloat(document.getElementsByName(id)[0].value) || 0; } @@ -18,23 +8,22 @@ document.addEventListener("DOMContentLoaded", function () { document.getElementsByName(id)[0].value = Number(value).toFixed(2); } - function calculate() { + window.calculate = function () { - // 1️ Base Values + // Base Values let gross_total_income = getVal("gross_total_income"); let disallowance_14a = getVal("disallowance_14a"); let disallowance_37 = getVal("disallowance_37"); - // 2️ Deductions + // Deductions let d80_business = getVal("deduction_80ia_business"); let deduction_sec37 = getVal("deduction_sec37_disallowance"); let deduction_80g = getVal("deduction_80g"); - // 3️ Formula: TOTAL DEDUCTION + // Total Deduction let total_deductions = d80_business + deduction_sec37; - // (deduction_80ia_business + deduction_sec37_disallowance) - // 4️ Net Taxable Income + // Net Taxable Income let net_taxable_income = (gross_total_income + disallowance_14a + disallowance_37) - total_deductions @@ -42,35 +31,30 @@ document.addEventListener("DOMContentLoaded", function () { setVal("net_taxable_income", net_taxable_income); - // 5️ Tax @ 30% + // Tax @ 30% let tax_30_percent = net_taxable_income * 0.30; setVal("tax_30_percent", tax_30_percent); - // 6️ Book Profit – Tax Payable - let tax_payable = getVal("tax_book_profit_18_5"); - // (tax_payable = tax_book_profit_18_5) - - // 7️ Surcharge + // Surcharge @ 12% let surcharge_12 = tax_30_percent * 0.12; setVal("surcharge_12", surcharge_12); - // 8️ Education Cess + // Education Cess @ 3% let edu_cess_3 = (tax_30_percent + surcharge_12) * 0.03; setVal("edu_cess_3", edu_cess_3); - // 9️ Total Tax Payable + // Total Tax Payable let total_tax_payable = tax_30_percent + surcharge_12 + edu_cess_3; setVal("total_tax_payable", total_tax_payable); - // MAT Credit & Interest + // MAT, Interest let mat_credit = getVal("mat_credit"); let interest_234c = getVal("interest_234c"); - // 1️1️ Total Tax let total_tax = total_tax_payable + mat_credit + interest_234c; setVal("total_tax", total_tax); - // 1️2️ Assessment side – Advance Tax, TDS, TCS + // Advance, TDS, TCS let advance_tax = getVal("advance_tax"); let tds = getVal("tds"); let tcs = getVal("tcs"); @@ -78,16 +62,8 @@ document.addEventListener("DOMContentLoaded", function () { let tax_on_assessment = advance_tax + tds + tcs; setVal("tax_on_assessment", tax_on_assessment); - // 1️3️ Refund / Payable + // Refund / Payablesss let refund = total_tax - tax_on_assessment; setVal("refund", refund); - } - - // Attach input listeners - fields.forEach(id => { - let input = document.getElementsByName(id)[0]; - if (input) { - input.addEventListener("input", calculate); - } - }); + }; }); diff --git a/static/js/cit_calc.js b/static/js/cit_calc.js index b18503e..176f7a0 100644 --- a/static/js/cit_calc.js +++ b/static/js/cit_calc.js @@ -1,89 +1,74 @@ document.addEventListener("DOMContentLoaded", function () { - const fields = [ - "gross_total_income", "disallowance_14a", "disallowance_37", - "deduction_80ia_business", "deduction_sec37_disallowance", "deduction_80g", - "net_taxable_income", "tax_30_percent", "tax_book_profit_18_5", - "tax_payable", "surcharge_12", "edu_cess_3", "total_tax_payable", - "mat_credit", "interest_234c", "total_tax", - "advance_tax", "tds", "tcs", "tax_on_assessment", "refund" - ]; - function getVal(id) { - let el = document.getElementsByName(id)[0]; + var el = document.getElementsByName(id)[0]; return el ? parseFloat(el.value) || 0 : 0; } function setVal(id, value) { - let el = document.getElementsByName(id)[0]; + var el = document.getElementsByName(id)[0]; if (el) el.value = Number(value).toFixed(2); } - function calculate() { + // MAIN CALC FUNCTION + window.calculate = function () { - // Base values - let gross_total_income = getVal("gross_total_income"); - let disallowance_14a = getVal("disallowance_14a"); - let disallowance_37 = getVal("disallowance_37"); + // BASIC VALUES + var gross_total_income = getVal("gross_total_income"); + var disallowance_14a = getVal("disallowance_14a"); + var disallowance_37 = getVal("disallowance_37"); - // Deductions - let d80_business = getVal("deduction_80ia_business"); - let deduction_sec37 = getVal("deduction_sec37_disallowance"); - let deduction_80g = getVal("deduction_80g"); + var d80_business = getVal("deduction_80ia_business"); + var deduction_sec37 = getVal("deduction_sec37_disallowance"); + var deduction_80g = getVal("deduction_80g"); - // Net Taxable Income - let net_taxable_income = + // NET TAXABLE INCOME + var net_taxable_income = (gross_total_income + disallowance_14a + disallowance_37) - (d80_business + deduction_sec37) - deduction_80g; setVal("net_taxable_income", net_taxable_income); - // 30% tax - let tax_30_percent = net_taxable_income * 0.30; + // TAX @ 30% + var tax_30_percent = net_taxable_income * 0.30; setVal("tax_30_percent", tax_30_percent); - // Book profit tax (user input) - let tax_payable = getVal("tax_book_profit_18_5"); + // TAX PAYABLE = 18.5% BOOK PROFIT (user enters) + var tax_payable = getVal("tax_book_profit_18_5"); setVal("tax_payable", tax_payable); - // Surcharge 12% - let surcharge_12 = tax_payable * 0.12; + // SURCHARGE + var surcharge_12 = tax_payable * 0.12; setVal("surcharge_12", surcharge_12); - // Education Cess 3% - let edu_cess_3 = (tax_payable + surcharge_12) * 0.03; + // CESS + var edu_cess_3 = (tax_payable + surcharge_12) * 0.03; setVal("edu_cess_3", edu_cess_3); - // Total Tax Payable - let total_tax_payable = tax_payable + surcharge_12 + edu_cess_3; + // TOTAL TAX PAYABLE + var total_tax_payable = tax_payable + surcharge_12 + edu_cess_3; setVal("total_tax_payable", total_tax_payable); - // MAT + Interest - let mat_credit = getVal("mat_credit"); - let interest_234c = getVal("interest_234c"); + // OTHER VALUES + var mat_credit = getVal("mat_credit"); + var interest_234c = getVal("interest_234c"); - // Total Tax - let total_tax = total_tax_payable + mat_credit + interest_234c; + // FINAL TAX + var total_tax = total_tax_payable + mat_credit + interest_234c; setVal("total_tax", total_tax); - // Assessment → Advance Tax + TDS + TCS - let advance_tax = getVal("advance_tax"); - let tds = getVal("tds"); - let tcs = getVal("tcs"); + // PAYMENTS + var advance_tax = getVal("advance_tax"); + var tds = getVal("tds"); + var tcs = getVal("tcs"); - let tax_on_assessment = advance_tax + tds + tcs; + var tax_on_assessment = advance_tax + tds + tcs; setVal("tax_on_assessment", tax_on_assessment); - // Refund (or payable) - let refund = total_tax - tax_on_assessment; + // REFUND + var refund = total_tax - tax_on_assessment; setVal("refund", refund); - } - - // Attach listeners - fields.forEach(id => { - let el = document.getElementsByName(id)[0]; - if (el) el.addEventListener("input", calculate); - }); + }; }); diff --git a/static/js/itr_calc.js b/static/js/itr_calc.js index ee601c5..2be2e9c 100644 --- a/static/js/itr_calc.js +++ b/static/js/itr_calc.js @@ -1,83 +1,72 @@ document.addEventListener("DOMContentLoaded", function () { - const fields = [ - "gross_total_income", "disallowance_14a", "disallowance_37", - "deduction_80ia_business", "deduction_80ia_misc", "deduction_80ia_other", - "deduction_sec37_disallowance", "deduction_80g", "net_taxable_income", - "tax_30_percent", "tax_book_profit_18_5", "tax_payable", "surcharge_12", - "edu_cess_3", "total_tax_payable", "mat_credit", "interest_234c", - "total_tax", "advance_tax", "tds", "tcs", "tax_on_assessment", "refund" - ]; function getValue(id) { - return parseFloat(document.getElementsByName(id)[0].value) || 0; + var el = document.getElementsByName(id)[0]; + return el ? parseFloat(el.value) || 0 : 0; } function setValue(id, val) { - document.getElementsByName(id)[0].value = val.toFixed(2); + var el = document.getElementsByName(id)[0]; + if (el) el.value = Number(val).toFixed(2); } - function calculate() { + window.calculate = function () { - let gross_total_income = getValue("gross_total_income"); - let disallowance_14a = getValue("disallowance_14a"); - let disallowance_37 = getValue("disallowance_37"); + // --- BASIC INPUTS --- + var gross_total_income = getValue("gross_total_income"); + var disallowance_14a = getValue("disallowance_14a"); + var disallowance_37 = getValue("disallowance_37"); - // FORMULAS + // // Auto-calculations (your logic) setValue("gross_total_income", disallowance_37 + gross_total_income); setValue("disallowance_37", disallowance_14a + disallowance_37); - // Deductions - let d80_business = getValue("deduction_80ia_business"); - let d80_misc = getValue("deduction_80ia_misc"); - let d80_other = getValue("deduction_80ia_other"); + // --- DEDUCTIONS --- + var d80_business = getValue("deduction_80ia_business"); + var d80_misc = getValue("deduction_80ia_misc"); + var d80_other = getValue("deduction_80ia_other"); - let deduction_sec37 = d80_business + d80_misc + d80_other - 1.35; + var deduction_sec37 = d80_business + d80_misc + d80_other - 1.35; setValue("deduction_sec37_disallowance", deduction_sec37); - let deduction_80g = getValue("deduction_80g"); + var deduction_80g = getValue("deduction_80g"); - // Net taxable income - let net_taxable_income = gross_total_income - deduction_sec37 - deduction_80g; + // --- NET TAXABLE INCOME --- + var net_taxable_income = gross_total_income - deduction_sec37 - deduction_80g; setValue("net_taxable_income", net_taxable_income); - // Tax calculations + // --- TAX 30% --- setValue("tax_30_percent", net_taxable_income * 0.30); - let tax_book_profit = getValue("tax_book_profit_18_5"); - setValue("tax_payable", tax_book_profit); + // --- TAX PAYABLE (18.5%) --- + var tax_book = getValue("tax_book_profit_18_5"); + setValue("tax_payable", tax_book); - let surcharge = tax_book_profit * 0.12; + var surcharge = tax_book * 0.12; setValue("surcharge_12", surcharge); - let edu_cess = (tax_book_profit + surcharge) * 0.03; + var edu_cess = (tax_book + surcharge) * 0.03; setValue("edu_cess_3", edu_cess); - let total_tax_payable = tax_book_profit + surcharge + edu_cess; + var total_tax_payable = tax_book + surcharge + edu_cess; setValue("total_tax_payable", total_tax_payable); - let mat_credit = getValue("mat_credit"); - let interest_234c = getValue("interest_234c"); + // --- FINAL TAX --- + var mat_credit = getValue("mat_credit"); + var interest_234c = getValue("interest_234c"); - let total_tax = total_tax_payable + mat_credit + interest_234c; + var total_tax = total_tax_payable + mat_credit + interest_234c; setValue("total_tax", total_tax); - // Assessment - let adv_tax = getValue("advance_tax"); - let tds = getValue("tds"); - let tcs = getValue("tcs"); + // --- ASSESSMENT --- + var adv_tax = getValue("advance_tax"); + var tds = getValue("tds"); + var tcs = getValue("tcs"); - let tax_on_assessment = adv_tax + tds + tcs; + var tax_on_assessment = adv_tax + tds + tcs; setValue("tax_on_assessment", tax_on_assessment); - let refund = total_tax - tax_on_assessment; + var refund = total_tax - tax_on_assessment; setValue("refund", refund); - } - - // Attach event listeners - fields.forEach(id => { - const element = document.getElementsByName(id)[0]; - if (element) { - element.addEventListener("input", calculate); - } - }); + }; }); diff --git a/static/js/year_dropdown.js b/static/js/year_dropdown.js index 6f8e3be..2431b93 100644 --- a/static/js/year_dropdown.js +++ b/static/js/year_dropdown.js @@ -1,23 +1,51 @@ document.addEventListener("DOMContentLoaded", function () { const yearDropdown = document.getElementById("year"); + const errorDiv = document.getElementById("yearError"); + + // Get the form dynamically + const form = document.querySelector("form"); // get from id as table name + + // Dynamic table name = form id + const tableName = form.id.toLowerCase(); const currentYear = new Date().getFullYear(); const startYear = 1990; + // Fill Year dropdown for (let y = currentYear; y >= startYear; y--) { let nextYear = y + 1; let option = document.createElement("option"); - - // Backend receives only first year (example 2024) option.value = y; - - // User sees (example AY 2024–2025) option.textContent = `AY ${y}-${nextYear}`; yearDropdown.appendChild(option); } + + // Validate selected year + yearDropdown.addEventListener("change", function () { + let selectedYear = parseInt(this.value); + + fetch("/check_year", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + table: tableName, // dynamic table name + year: selectedYear + }) + }) + .then(res => res.json()) + .then(data => { + if (data.exists) { + errorDiv.style.display = "block"; + errorDiv.innerText = `Year ${selectedYear} already exists!`; + + // Block submission + form.onsubmit = function () { return false; }; + } else { + errorDiv.style.display = "none"; + form.onsubmit = null; // Allow submit + } + }); + }); }); - - - diff --git a/templates/add_ao.html b/templates/add_ao.html index 45e1f76..8f04327 100644 --- a/templates/add_ao.html +++ b/templates/add_ao.html @@ -15,13 +15,19 @@ ← Back to Dashboard

AO Form Entry

-
+
- + +
+ + + {% for field in [ @@ -33,7 +39,7 @@ "tax_on_assessment", "refund" ] %} - + {% endfor %} diff --git a/templates/add_cit.html b/templates/add_cit.html index 05ad610..e778112 100644 --- a/templates/add_cit.html +++ b/templates/add_cit.html @@ -15,14 +15,19 @@ ← Back to Dashboard

CIT Form Entry

- +
- +
+ + {% for field in [ "gross_total_income", "deduction_80ia_business", "deduction_sec37_disallowance", @@ -31,9 +36,9 @@ "interest_234c", "total_tax", "advance_tax", "tds", "tcs", "tax_on_assessment", "refund" ] %} - + {% endfor %} - +
diff --git a/templates/add_itat.html b/templates/add_itat.html index b7264f4..0eb777e 100644 --- a/templates/add_itat.html +++ b/templates/add_itat.html @@ -14,13 +14,18 @@ ← Back to Dashboard

ITAT Form Entry

-
+
- + +
+ + diff --git a/templates/add_itr.html b/templates/add_itr.html index 939a556..01cfee5 100644 --- a/templates/add_itr.html +++ b/templates/add_itr.html @@ -17,7 +17,7 @@

Add New Income Tax Return Record

- +