diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/New folder.iml b/.idea/New folder.iml deleted file mode 100644 index d0876a7..0000000 --- a/.idea/New folder.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 99e1656..0000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 228e855..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index ed380a0..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/AppCode/AOHandler.py b/AppCode/AOHandler.py index b0002eb..4d36c10 100644 --- a/AppCode/AOHandler.py +++ b/AppCode/AOHandler.py @@ -54,7 +54,7 @@ class AOHandler: "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" + "tax_on_assessment", "refund","Remarks" ] values = [data.get(f, 0) for f in fields] @@ -73,7 +73,7 @@ class AOHandler: "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" + "tax_on_assessment", "refund","Remarks" ] values = [id] + [data.get(f, 0) for f in fields] diff --git a/AppCode/CITHandler.py b/AppCode/CITHandler.py index dc697d6..2839853 100644 --- a/AppCode/CITHandler.py +++ b/AppCode/CITHandler.py @@ -41,7 +41,7 @@ class CITHandler: "year", "gross_total_income", "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" + "interest_234c", "total_tax", "advance_tax", "tds", "tcs", "tax_on_assessment", "refund","Remarks" ] values = [data.get(col, 0) for col in columns] @@ -60,7 +60,7 @@ class CITHandler: "tax_payable", "surcharge_12", "edu_cess_3", "total_tax_payable", "mat_credit", "interest_234c", "total_tax", "advance_tax", "tds", "tcs", - "tax_on_assessment", "refund" + "tax_on_assessment", "refund","Remarks" ] values = [id] + [data.get(col, 0) for col in columns] diff --git a/AppCode/Config.py b/AppCode/Config.py index 06b8d74..c238712 100644 --- a/AppCode/Config.py +++ b/AppCode/Config.py @@ -1,12 +1,12 @@ import mysql.connector import os +# Database Config class DBConfig: - # Database credentials (can also be read from environment variables) MYSQL_HOST = os.getenv("MYSQL_HOST", "127.0.0.1") MYSQL_USER = os.getenv("MYSQL_USER", "root") MYSQL_PASSWORD = os.getenv("MYSQL_PASSWORD", "root") - MYSQL_DB = os.getenv("MYSQL_DB", "income_tax") + MYSQL_DB = os.getenv("MYSQL_DB", "test_income_taxdb") @staticmethod def get_db_connection(): diff --git a/AppCode/ITRHandler.py b/AppCode/ITRHandler.py index 29a8b0c..4891506 100644 --- a/AppCode/ITRHandler.py +++ b/AppCode/ITRHandler.py @@ -1,10 +1,18 @@ +from AppCode.Config import DBConfig import mysql.connector +from AppCode.YearGet import YearGet + import pandas as pd import pymysql import io -from flask import send_file, render_template, request + +# new from AppCode.Config import DBConfig -from AppCode.YearGet import YearGet +import mysql.connector +import pandas as pd +import io +from flask import send_file, render_template, request + class ITRHandler: @@ -36,23 +44,25 @@ class ITRHandler: for result in self.cursor.stored_results(): records = result.fetchall() - # return single record if records: print(records[0]) - return records[0] + return records[0] # return single record 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', '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' + 'total_tax', 'advance_tax', 'tds', 'tcs', 'tax_on_assessment', 'refund', 'Remarks' ] values = [data.get(col, 0) for col in columns] @@ -62,7 +72,6 @@ class ITRHandler: self.conn.commit() - def update(self, id, data): columns = [ 'year', 'gross_total_income', 'disallowance_14a', 'disallowance_37', @@ -70,7 +79,7 @@ class ITRHandler: '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' + 'total_tax', 'advance_tax', 'tds', 'tcs', 'tax_on_assessment', 'refund','Remarks' ] values = [id] + [data.get(col, 0) for col in columns] @@ -88,7 +97,7 @@ class ITRHandler: self.conn.commit() - # dowanload itr report by year + def itr_report_download(self, selected_year): try: @@ -104,10 +113,14 @@ 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/Login.py b/AppCode/Login.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/AppCode/Login.py @@ -0,0 +1 @@ + diff --git a/AppCode/LoginAuth.py b/AppCode/LoginAuth.py new file mode 100644 index 0000000..caa85a2 --- /dev/null +++ b/AppCode/LoginAuth.py @@ -0,0 +1,44 @@ +from flask import Blueprint, render_template, request, redirect, url_for, flash, session +from flask import flash,redirect,url_for +from functools import wraps +from flask import session + +class LoginAuth: + def __init__(self): + self.bp = Blueprint("auth", __name__) + + # LOGIN ROUTE + @self.bp.route('/login', methods=['GET', 'POST']) + def login(): + if request.method == 'POST': + username = request.form.get("username") + password = request.form.get("password") + + # Dummy validation β€” REPLACE with DB check later + if username == "admin" and password == "admin123": + session['user'] = username + flash("Login successful!", "success") + return redirect(url_for('welcome')) + else: + flash("Invalid username or password!", "danger") + + return render_template("login.html") + + # LOGOUT ROUTE + @self.bp.route('/logout') + def logout(): + session.clear() + flash("Logged out successfully!", "success") + return redirect(url_for('auth.login')) + + # =================================================== + # LOGIN REQUIRED DECORATOR INSIDE CLASS + # =================================================== + def login_required(self, f): + @wraps(f) + def wrapper(*args, **kwargs): + if "user" not in session: + flash("Please login first!", "danger") + return redirect(url_for("auth.login")) + return f(*args, **kwargs) + return wrapper diff --git a/AppCode/YearGet.py b/AppCode/YearGet.py index f3f0782..19c998b 100644 --- a/AppCode/YearGet.py +++ b/AppCode/YearGet.py @@ -11,11 +11,13 @@ 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__/AOHandler.cpython-311.pyc b/AppCode/__pycache__/AOHandler.cpython-311.pyc new file mode 100644 index 0000000..f37200f Binary files /dev/null and b/AppCode/__pycache__/AOHandler.cpython-311.pyc differ diff --git a/AppCode/__pycache__/AOHandler.cpython-312.pyc b/AppCode/__pycache__/AOHandler.cpython-312.pyc new file mode 100644 index 0000000..ef05e4a Binary files /dev/null and b/AppCode/__pycache__/AOHandler.cpython-312.pyc differ diff --git a/AppCode/__pycache__/AOHandler.cpython-313.pyc b/AppCode/__pycache__/AOHandler.cpython-313.pyc index 6f2f327..509b185 100644 Binary files a/AppCode/__pycache__/AOHandler.cpython-313.pyc and b/AppCode/__pycache__/AOHandler.cpython-313.pyc differ diff --git a/AppCode/__pycache__/CITHandler.cpython-311.pyc b/AppCode/__pycache__/CITHandler.cpython-311.pyc new file mode 100644 index 0000000..86c8608 Binary files /dev/null and b/AppCode/__pycache__/CITHandler.cpython-311.pyc differ diff --git a/AppCode/__pycache__/CITHandler.cpython-312.pyc b/AppCode/__pycache__/CITHandler.cpython-312.pyc new file mode 100644 index 0000000..aa7ce45 Binary files /dev/null and b/AppCode/__pycache__/CITHandler.cpython-312.pyc differ diff --git a/AppCode/__pycache__/CITHandler.cpython-313.pyc b/AppCode/__pycache__/CITHandler.cpython-313.pyc index f4bd2ca..b2f7999 100644 Binary files a/AppCode/__pycache__/CITHandler.cpython-313.pyc and b/AppCode/__pycache__/CITHandler.cpython-313.pyc differ diff --git a/AppCode/__pycache__/Config.cpython-311.pyc b/AppCode/__pycache__/Config.cpython-311.pyc new file mode 100644 index 0000000..7ac6d23 Binary files /dev/null and b/AppCode/__pycache__/Config.cpython-311.pyc differ diff --git a/AppCode/__pycache__/Config.cpython-312.pyc b/AppCode/__pycache__/Config.cpython-312.pyc new file mode 100644 index 0000000..0a9a5fc Binary files /dev/null and b/AppCode/__pycache__/Config.cpython-312.pyc differ diff --git a/AppCode/__pycache__/Config.cpython-313.pyc b/AppCode/__pycache__/Config.cpython-313.pyc index 36af679..7ec5dcf 100644 Binary files a/AppCode/__pycache__/Config.cpython-313.pyc and b/AppCode/__pycache__/Config.cpython-313.pyc differ diff --git a/AppCode/__pycache__/DocumentHandler.cpython-311.pyc b/AppCode/__pycache__/DocumentHandler.cpython-311.pyc new file mode 100644 index 0000000..b68a4c0 Binary files /dev/null and b/AppCode/__pycache__/DocumentHandler.cpython-311.pyc differ diff --git a/AppCode/__pycache__/DocumentHandler.cpython-312.pyc b/AppCode/__pycache__/DocumentHandler.cpython-312.pyc new file mode 100644 index 0000000..ab89779 Binary files /dev/null and b/AppCode/__pycache__/DocumentHandler.cpython-312.pyc differ diff --git a/AppCode/__pycache__/DocumentHandler.cpython-313.pyc b/AppCode/__pycache__/DocumentHandler.cpython-313.pyc index 43b0b64..5f452bd 100644 Binary files a/AppCode/__pycache__/DocumentHandler.cpython-313.pyc and b/AppCode/__pycache__/DocumentHandler.cpython-313.pyc differ diff --git a/AppCode/__pycache__/FileHandler.cpython-311.pyc b/AppCode/__pycache__/FileHandler.cpython-311.pyc new file mode 100644 index 0000000..1a058aa Binary files /dev/null and b/AppCode/__pycache__/FileHandler.cpython-311.pyc differ diff --git a/AppCode/__pycache__/FileHandler.cpython-312.pyc b/AppCode/__pycache__/FileHandler.cpython-312.pyc new file mode 100644 index 0000000..095e62d Binary files /dev/null and b/AppCode/__pycache__/FileHandler.cpython-312.pyc differ diff --git a/AppCode/__pycache__/FileHandler.cpython-313.pyc b/AppCode/__pycache__/FileHandler.cpython-313.pyc index dbeaa16..de33b2b 100644 Binary files a/AppCode/__pycache__/FileHandler.cpython-313.pyc and b/AppCode/__pycache__/FileHandler.cpython-313.pyc differ diff --git a/AppCode/__pycache__/ITATHandler.cpython-311.pyc b/AppCode/__pycache__/ITATHandler.cpython-311.pyc new file mode 100644 index 0000000..14a3182 Binary files /dev/null and b/AppCode/__pycache__/ITATHandler.cpython-311.pyc differ diff --git a/AppCode/__pycache__/ITATHandler.cpython-312.pyc b/AppCode/__pycache__/ITATHandler.cpython-312.pyc new file mode 100644 index 0000000..e750cde Binary files /dev/null and b/AppCode/__pycache__/ITATHandler.cpython-312.pyc differ diff --git a/AppCode/__pycache__/ITATHandler.cpython-313.pyc b/AppCode/__pycache__/ITATHandler.cpython-313.pyc index c15ba24..fc282aa 100644 Binary files a/AppCode/__pycache__/ITATHandler.cpython-313.pyc and b/AppCode/__pycache__/ITATHandler.cpython-313.pyc differ diff --git a/AppCode/__pycache__/ITRHandler.cpython-311.pyc b/AppCode/__pycache__/ITRHandler.cpython-311.pyc new file mode 100644 index 0000000..3233e6c Binary files /dev/null and b/AppCode/__pycache__/ITRHandler.cpython-311.pyc differ diff --git a/AppCode/__pycache__/ITRHandler.cpython-312.pyc b/AppCode/__pycache__/ITRHandler.cpython-312.pyc new file mode 100644 index 0000000..43f711d Binary files /dev/null and b/AppCode/__pycache__/ITRHandler.cpython-312.pyc differ diff --git a/AppCode/__pycache__/ITRHandler.cpython-313.pyc b/AppCode/__pycache__/ITRHandler.cpython-313.pyc index 6433975..6b0dc3b 100644 Binary files a/AppCode/__pycache__/ITRHandler.cpython-313.pyc and b/AppCode/__pycache__/ITRHandler.cpython-313.pyc differ diff --git a/AppCode/__pycache__/LoginAuth.cpython-311.pyc b/AppCode/__pycache__/LoginAuth.cpython-311.pyc new file mode 100644 index 0000000..9c2d837 Binary files /dev/null and b/AppCode/__pycache__/LoginAuth.cpython-311.pyc differ diff --git a/AppCode/__pycache__/LoginAuth.cpython-312.pyc b/AppCode/__pycache__/LoginAuth.cpython-312.pyc new file mode 100644 index 0000000..cfc6d1f Binary files /dev/null and b/AppCode/__pycache__/LoginAuth.cpython-312.pyc differ diff --git a/AppCode/__pycache__/LoginAuth.cpython-313.pyc b/AppCode/__pycache__/LoginAuth.cpython-313.pyc new file mode 100644 index 0000000..551632f Binary files /dev/null and b/AppCode/__pycache__/LoginAuth.cpython-313.pyc differ diff --git a/AppCode/__pycache__/YearGet.cpython-311.pyc b/AppCode/__pycache__/YearGet.cpython-311.pyc new file mode 100644 index 0000000..b264802 Binary files /dev/null and b/AppCode/__pycache__/YearGet.cpython-311.pyc differ diff --git a/AppCode/__pycache__/YearGet.cpython-312.pyc b/AppCode/__pycache__/YearGet.cpython-312.pyc new file mode 100644 index 0000000..4f57296 Binary files /dev/null and b/AppCode/__pycache__/YearGet.cpython-312.pyc differ diff --git a/AppCode/__pycache__/YearGet.cpython-313.pyc b/AppCode/__pycache__/YearGet.cpython-313.pyc index 2df9be4..188b8eb 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 5484200..33b96c9 100644 --- a/main.py +++ b/main.py @@ -6,6 +6,7 @@ import io import mysql.connector from werkzeug.utils import secure_filename + from AppCode.Config import DBConfig from AppCode.FileHandler import FileHandler from AppCode.DocumentHandler import DocumentHandler @@ -14,20 +15,26 @@ from AppCode.AOHandler import AOHandler from AppCode.CITHandler import CITHandler from AppCode.ITATHandler import ITATHandler from AppCode.YearGet import YearGet +from AppCode.LoginAuth import LoginAuth - +# Server app = Flask(__name__) app.secret_key="secret1234" app.config['UPLOAD_FOLDER'] = FileHandler.UPLOAD_FOLDER +auth = LoginAuth() +app.register_blueprint(auth.bp) + # welcome page @app.route('/') +@auth.login_required def welcome(): - return render_template('welcome.html') + return render_template('index.html') # Dashboard page @app.route('/dashboard') +@auth.login_required def index(): return render_template('index.html') @@ -35,7 +42,7 @@ def index(): def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[1].lower() in FileHandler.ALLOWED_EXTENSIONS - + # Upload File route @app.route('/upload', methods=['GET', 'POST']) def upload_file(): @@ -97,7 +104,6 @@ def display_itr(): @app.route('/itr/add', methods=['GET', 'POST']) def add_itr(): if request.method == 'POST': - itr = ITRHandler() itr.add_itr(request.form) itr.close() @@ -121,8 +127,6 @@ def update_itr(id): if request.method == 'POST': data = {k: request.form.get(k, 0) for k in request.form} - print("itr data-->",data) - itr.update(id, data=data) itr.close() return redirect(url_for('display_itr')) @@ -132,23 +136,6 @@ 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} ## =============================================== @@ -210,7 +197,7 @@ def delete_ao(id): ## CIT (Commissioner of Income Tax) Routes ## ======================================================= -# DISPLAY all CIT records +# 1 DISPLAY all CIT records @app.route('/cit_records') def display_cit(): cit = CITHandler() @@ -218,6 +205,7 @@ def display_cit(): cit.close() return render_template('display_cit.html', cit_records=cit_records) +# 2 new CIT records add @app.route('/cit/add', methods=['GET', 'POST']) def add_cit(): if request.method == 'POST': @@ -229,7 +217,7 @@ def add_cit(): return render_template('add_cit.html') - +# 3 delete CIT records by id @app.route('/cit/delete/', methods=['POST']) def delete_cit(id): cit = CITHandler() @@ -238,7 +226,7 @@ def delete_cit(id): flash("CIT record deleted successfully!", "success") return redirect(url_for('display_cit')) - +# 4 update CIT records by id @app.route('/cit/update/', methods=['GET', 'POST']) def update_cit(id): cit = CITHandler() @@ -262,7 +250,7 @@ def update_cit(id): ## ITAT (Income Tax Appellate Tribunal) Routes ## ======================================================= -# DISPLAY all ITAT records +# 1.DISPLAY all ITAT records @app.route('/itat_records') def display_itat(): itat = ITATHandler() @@ -270,16 +258,22 @@ def display_itat(): itat.close() return render_template('display_itat.html', records=records) - -@app.route('/itat/delete/', methods=['POST']) -def delete_itat(id): +# 2.Add new ITAT records +@app.route('/itat/add', methods=['GET', 'POST']) +def add_itat(): itat = ITATHandler() - itat.delete_itat_by_id(id) + + if request.method == 'POST': + data = {k: request.form.get(k, 0) for k in request.form} + itat.add_itat(data) + itat.close() + flash("ITAT record added successfully!", "success") + return redirect(url_for('display_itat')) + itat.close() - flash("ITAT Record Deleted!", "success") - return redirect(url_for('display_itat')) - + return render_template('add_itat.html') +# 3.Update ITAT records by id @app.route('/itat/update/', methods=['GET', 'POST']) def update_itat(id): itat = ITATHandler() @@ -306,28 +300,26 @@ def update_itat(id): itat.close() return render_template('update_itat.html', record=record) - -@app.route('/itat/add', methods=['GET', 'POST']) -def add_itat(): +# 3.delete ITAT records by id +@app.route('/itat/delete/', methods=['POST']) +def delete_itat(id): itat = ITATHandler() - - if request.method == 'POST': - data = {k: request.form.get(k, 0) for k in request.form} - itat.add_itat(data) - itat.close() - flash("ITAT record added successfully!", "success") - return redirect(url_for('display_itat')) - + itat.delete_itat_by_id(id) itat.close() - return render_template('add_itat.html') + flash("ITAT Record Deleted!", "success") + return redirect(url_for('display_itat')) -# report form + + +## ======================================================= +## All Report Routes +## ======================================================= +# report page @app.route('/reports') def reports(): return render_template("reports.html") - # Itr report download by year @app.route('/itr_report', methods=['GET']) def itr_report(): @@ -437,13 +429,33 @@ def itat_report(): return render_template("itat_reports.html", years=years) - +# summary report @app.route('/summary_report', methods=['GET']) def summary_report(): docHandler = DocumentHandler() return docHandler.Summary_report(request=request) +# 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} + + +# run if __name__ == '__main__': app.run(host='0.0.0.0', port=5003, debug=True) \ No newline at end of file diff --git a/static/css/add_ao.css b/static/css/add_ao.css index 952d339..e8f7aa3 100644 --- a/static/css/add_ao.css +++ b/static/css/add_ao.css @@ -1,130 +1,297 @@ - /* Reset and base styles */ - * { - margin: 0; - padding: 0; - box-sizing: border-box; - } +/* ================= GLOBAL ================= */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Segoe UI", sans-serif; +} - body { - font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; - background-color: #f5f7fa; - color: #333; - padding: 30px 0; - } +body { + background-color: #f0f4ff; + /* very light blue background */ + display: flex; +} - .container { - width: 90%; - max-width: 700px; - margin: auto; - background-color: #fff; - padding: 40px; - border-radius: 12px; - box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08); - } +a { + text-decoration: none !important; - h2 { - text-align: center; - margin-bottom: 30px; - font-size: 28px; - color: #2c3e50; - } +} - form { - display: flex; - flex-direction: column; - } +/* ================= NAVBAR ================= */ +.navbar { + width: 100%; + height: 60px; + background-color: #007bff; + /* primary blue */ + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + position: fixed; + top: 0; + left: 0; + color: white; + z-index: 1000; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + gap: 10px; +} - label { - margin-top: 15px; - margin-bottom: 6px; - font-weight: bold; - color: #333; - } +.nav-left { + display: flex; + align-items: center; + gap: 15px; +} - input[type="number"] { - padding: 10px 12px; - border: 1px solid #ccc; - border-radius: 6px; - font-size: 16px; - transition: border-color 0.3s ease; - } +.nav-logo { + height: 80px; + filter: brightness(0) invert(1); +} - input[type="number"]:focus { - border-color: #007BFF; - outline: none; - } +.toggle-btn { + font-size: 26px; + cursor: pointer; +} - button[type="submit"] { - margin-top: 30px; - padding: 12px; - background-color: #007BFF; - border: none; - border-radius: 6px; - color: white; - font-size: 18px; - cursor: pointer; - transition: background-color 0.3s ease; - } +/* ================= SIDEBAR ================= */ +.sidebar { + width: 250px; + background: #ffffff; + height: calc(100vh - 60px); + position: fixed; + top: 60px; + left: 0; + padding-top: 20px; + overflow-y: auto; + border-right: 1px solid #e0e0e0; + display: flex; + flex-direction: column; + z-index: 0; + transition: 0.3s; +} - button[type="submit"]:hover { - background-color: #0056b3; - } +.sidebar.hide { + left: -250px; +} - /* Back button styling */ - .back-btn { - display: inline-block; - margin-bottom: 20px; - padding: 10px 18px; - background: #6c757d; - color: white; - font-size: 15px; - font-weight: 600; - border-radius: 6px; - text-decoration: none; - transition: background 0.3s ease; - } +.sidebar h2 { + color: #007bff; + text-align: center; + margin-bottom: 20px; + font-size: 22px; +} - .back-btn:hover { - background: #5a6268; - } +.menu-btn { + padding: 14px 20px; + font-size: 17px; + color: #007bff; + cursor: pointer; + border-bottom: 1px solid #e0e0e0; + transition: 0.2s; +} - .form-group select { - width: 100%; - padding: 10px 12px; - border: 1px solid #cbd3da; - border-radius: 8px; - font-size: 16px; - background-color: #fdfdfd; - height: 40px; - cursor: pointer; - transition: all 0.25s ease-in-out; - } +.menu-btn:hover { + background: #cce5ff; + color: #0056b3; +} - .form-group select:focus { - border-color: #007BFF; - background: #ffffff; - box-shadow: 0 0 8px rgba(0, 123, 255, 0.25); - outline: none; - } +.submenu { + display: none; + background: #f0f8ff; +} + +.submenu a { + display: block; + padding: 12px 35px; + color: #007bff; + border-bottom: 1px solid #e0e0e0; + transition: 0.2s; +} + +.submenu a:hover { + background: #cce5ff; + color: #004085; +} + +.sidebar-logout { + margin-top: auto; + padding: 10px 16px; + background: #007bff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; + text-decoration: none; + color: white; +} + +.sidebar-logout:hover { + background: #a2cdfa; +} +.logout-icon { + width: 22px; + height: 22px; +} + +/* ================= MAIN CONTENT ================= */ +.main { + margin-left: 260px; + width: calc(100% - 260px); + padding: 30px; + margin-top: 80px; + transition: 0.3s; +} + +/* ================= CONTAINER ================= */ +.container { + background: white; + padding: 30px; + width: 95%; + margin: auto; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +/* ================= BACK BUTTON ================= */ +.back-btn { + background: #007bff; + padding: 10px 16px; + color: white; + display: inline-block; + border-radius: 6px; + margin-bottom: 20px; + transition: background 0.3s ease; +} + +.back-btn:hover { + background: #0056b3; +} + +/* ================= FORM ================= */ +.form-group { + margin-bottom: 15px; + font-weight: bold; +} + +form input, +form select { + padding: 10px; + width: 100%; + margin-top: 5px; + border: 1px solid #ccc; + border-radius: 6px; + background-color: #f8f9ff; + /* subtle input background */ + outline: none; + +} +input:focus, +select:focus { + box-shadow: 0 0 5px rgba(0, 123, 255, 0.5); + /* blue glow on focus */ +} - @media (max-width: 600px) { - .container { - padding: 20px; - } +.auto { + padding: 10px 12px; + border: 1px solid #ccd1d9; + border-radius: 6px; + font-size: 15px; + background-color: #d5edd7; + transition: all 0.25s ease-in-out; +} - h2 { - font-size: 22px; - } - input[type="number"] { - font-size: 15px; - } +/* ================= SUBMIT BUTTON (GREEN) ================= */ +button { + width: 60%; + margin-top: 20px; + margin-left: 20%; + padding: 12px 20px; + background-color: #28a745; + /* Bootstrap green */ + color: #ffffff; + border: none; + cursor: pointer; + border-radius: 6px; + font-weight: 600; + font-size: 15px; + transition: background-color 0.3s ease, box-shadow 0.3s ease; +} - button[type="submit"] { - font-size: 16px; - } - } \ No newline at end of file +button:hover { + background-color: #218838; + /* Darker green on hover */ + box-shadow: 0 4px 10px rgba(40, 167, 69, 0.35); +} + +button:active { + background-color: #1e7e34; +} + +button:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(40, 167, 69, 0.35); +} + + +/* ================= TABLE ================= */ +.table-wrapper { + overflow-x: auto; +} + +table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; +} + +th, +td { + padding: 12px; + border: 1px solid #dee2e6; + text-align: right; + white-space: nowrap; +} + +th { + background-color: #007bff; + color: white; + text-align: center; +} + +tr:nth-child(even) { + background-color: #f0f8ff; +} + +td:first-child, +th:first-child { + text-align: left; +} + +.action-cell form { + display: inline-block; + margin-left: 5px; +} + +/* Full width rows (span 2 columns) */ +.form-group { + display: flex; + flex-direction: column; +} + +.form-group.full-width { + grid-column: span 2; +} + +/* Special case: two inputs inside one form-group */ +.form-group.inline-2 { + flex-direction: row; + gap: 15px; +} + +.form-group.inline-2>div { + flex: 1; +} \ No newline at end of file diff --git a/static/css/add_cit.css b/static/css/add_cit.css index 668a085..c3fb214 100644 --- a/static/css/add_cit.css +++ b/static/css/add_cit.css @@ -1,126 +1,155 @@ -/* ...existing styles... (no changes needed) */ +/* ================= RESET ================= */ * { margin: 0; padding: 0; box-sizing: border-box; + font-family: "Segoe UI", sans-serif; } body { - font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; - background-color: #f5f7fa; - color: #333; - padding: 30px 0; + background-color: #f0f4ff; + /* very light blue background */ } +/* ================= CONTAINER ================= */ .container { - width: 90%; - max-width: 700px; - margin: auto; - background-color: #fff; - padding: 40px; - border-radius: 12px; - box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08); + max-width: 90%; + margin: 20px 20px 20px 20px; + /* top margin to clear navbar */ + background: white; + padding: 10%; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } -h2 { +.no-record { text-align: center; - margin-bottom: 30px; - font-size: 28px; - color: #2c3e50; + font-size: 18px; + margin-top: 20px; + color: #555; + padding: 15px; + background: #f9f9f9; + border-radius: 8px; + border: 1px solid #e0e0e0; } -form { + +/* ================= FORM ================= */ +form label { + display: block; + margin-top: 10px; + font-weight: bold; + color: #000000; + /* dark blue text */ +} + +form input, +form select { + width: 100%; + padding: 10px; + margin-top: 6px; + border: 1px solid #ccc; + border-radius: 6px; + outline: none; +} + +form input:focus, +form select:focus { + border-color: #0056b3; + box-shadow: 0 0 5px rgba(0, 123, 255, 0.5); +} + +.auto { + padding: 10px 12px; + border: 1px solid #ccd1d9; + border-radius: 6px; + font-size: 15px; + background-color: #d5edd7; + transition: all 0.25s ease-in-out; +} + +/* ================= SUBMIT BUTTON (GREEN) ================= */ +button { + width: 60%; + margin-top: 20px; + margin-left: 20%; + padding: 12px 20px; + background-color: #28a745; + /* Bootstrap green */ + color: #ffffff; + border: none; + cursor: pointer; + border-radius: 6px; + font-weight: 600; + font-size: 15px; + transition: background-color 0.3s ease, box-shadow 0.3s ease; +} + +button:hover { + background-color: #218838; + /* Darker green on hover */ + box-shadow: 0 4px 10px rgba(40, 167, 69, 0.35); +} + +button:active { + background-color: #1e7e34; +} + +button:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(40, 167, 69, 0.35); +} + +/* ================= TABLE (if used in this page) ================= */ +.table-wrapper { + overflow-x: auto; +} + +table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; +} + +th, +td { + padding: 12px; + border: 1px solid #dee2e6; + text-align: right; + white-space: nowrap; +} + +th { + background-color: #007bff; + color: white; + text-align: center; +} + +tr:nth-child(even) { + background-color: #f0f8ff; +} + +td:first-child, +th:first-child { + text-align: left; +} + +/* Full width rows (span 2 columns) */ +.form-group { display: flex; flex-direction: column; } -label { - margin-top: 15px; - margin-bottom: 6px; - font-weight: 600; - color: #333; +.form-group.full-width { + grid-column: span 2; } -input[type="number"] { - padding: 10px 12px; - border: 1px solid #ccc; - border-radius: 6px; - font-size: 16px; +/* Special case: two inputs inside one form-group */ +.form-group.inline-2 { + flex-direction: row; + gap: 15px; } -input[type="number"]:focus { - border-color: #007BFF; - outline: none; -} - -button[type="submit"] { - margin-top: 30px; - padding: 12px; - background-color: #007BFF; - border: none; - border-radius: 6px; - color: white; - font-size: 18px; - cursor: pointer; -} - -button[type="submit"]:hover { - background-color: #0056b3; -} - -/* Back button styling */ -.back-btn { - display: inline-block; - margin-bottom: 20px; - padding: 10px 18px; - background: #6c757d; - color: white; - font-size: 15px; - font-weight: 600; - border-radius: 6px; - text-decoration: none; - transition: background 0.3s ease; -} - -.back-btn:hover { - background: #5a6268; -} - -.form-group select { - width: 100%; - padding: 10px 12px; - border: 1px solid #cbd3da; - border-radius: 8px; - font-size: 16px; - background-color: #fdfdfd; - height: 40px; - cursor: pointer; - transition: all 0.25s ease-in-out; -} - -.form-group select:focus { - border-color: #007BFF; - background: #ffffff; - box-shadow: 0 0 8px rgba(0, 123, 255, 0.25); - outline: none; -} - - - -@media (max-width: 600px) { - .container { - padding: 20px; - } - - h2 { - font-size: 22px; - } - - input[type="number"] { - font-size: 15px; - } - - button[type="submit"] { - font-size: 16px; - } +.form-group.inline-2>div { + flex: 1; } \ No newline at end of file diff --git a/static/css/add_itat.css b/static/css/add_itat.css index 7bbed8d..2ae6341 100644 --- a/static/css/add_itat.css +++ b/static/css/add_itat.css @@ -1,105 +1,214 @@ - /* Same styling for layout */ - * { - margin: 0; - padding: 0; - box-sizing: border-box; - } +/* ================= GLOBAL ================= */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Segoe UI", sans-serif; +} - body { - font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; - background-color: #f5f7fa; - color: #333; - padding: 30px 0; - } +body { + background-color: #f0f4ff; + /* very light blue background */ + display: flex; +} - .container { - width: 90%; - max-width: 700px; - margin: auto; - background-color: #fff; - padding: 40px; - border-radius: 12px; - box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08); - } +a { + text-decoration: none !important; +} - h2 { - text-align: center; - margin-bottom: 30px; - font-size: 28px; - color: #2c3e50; - } +/* ================= NAVBAR ================= */ +.navbar { + width: 100%; + height: 60px; + background-color: #007bff; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + position: fixed; + top: 0; + left: 0; + color: white; + z-index: 1000; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + gap: 10px; +} - form { - display: flex; - flex-direction: column; - } +.nav-left { + display: flex; + align-items: center; + gap: 15px; +} - label { - margin-top: 15px; - margin-bottom: 6px; - font-weight: 600; - color: #333; - } +.nav-logo { + height: 80px; + filter: brightness(0) invert(1); +} - input[type="number"] { - padding: 10px 12px; - border: 1px solid #ccc; - border-radius: 6px; - font-size: 16px; - } +.toggle-btn { + font-size: 26px; + cursor: pointer; +} - input[type="number"]:focus { - border-color: #007BFF; - outline: none; - } +/* ================= SIDEBAR ================= */ +.sidebar { + width: 250px; + background: #ffffff; + height: calc(100vh - 60px); + position: fixed; + top: 60px; + left: 0; + padding-top: 20px; + overflow-y: auto; + border-right: 1px solid #e0e0e0; + display: flex; + flex-direction: column; + z-index: 0; + transition: 0.3s; +} - button[type="submit"] { - margin-top: 30px; - padding: 12px; - background-color: #007BFF; - border: none; - border-radius: 6px; - color: white; - font-size: 18px; - cursor: pointer; - } +.sidebar.hide { + left: -250px; +} - button[type="submit"]:hover { - background-color: #0056b3; - } +.sidebar h2 { + color: #007bff; + text-align: center; + margin-bottom: 20px; + font-size: 22px; +} - /* Back button styling */ - .back-btn { - display: inline-block; - margin-bottom: 20px; - padding: 10px 18px; - background: #6c757d; - color: white; - font-size: 15px; - font-weight: 600; - border-radius: 6px; - text-decoration: none; - transition: background 0.3s ease; - } +.menu-btn { + padding: 14px 20px; + font-size: 17px; + color: #007bff; + cursor: pointer; + border-bottom: 1px solid #e0e0e0; + transition: 0.2s; +} - .back-btn:hover { - background: #5a6268; - } +.menu-btn:hover { + background: #cce5ff; + color: #0056b3; +} - @media (max-width: 600px) { - .container { - padding: 20px; - } +.submenu { + display: none; + background: #f0f8ff; +} - h2 { - font-size: 22px; - } +.submenu a { + display: block; + padding: 12px 35px; + color: #007bff; + border-bottom: 1px solid #e0e0e0; + transition: 0.2s; +} - input[type="number"] { - font-size: 15px; - } +.submenu a:hover { + background: #cce5ff; + color: #004085; +} - button[type="submit"] { - font-size: 16px; - } - } \ No newline at end of file +/* ================= LOGOUT ================= */ +.sidebar-logout { + margin-top: auto; + padding: 10px 16px; + background: #007bff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; + text-decoration: none; + color: white; +} + +.sidebar-logout:hover { + background: #a2cdfa; +} + +.logout-icon { + width: 22px; + height: 22px; +} + +/* ================= MAIN CONTENT ================= */ +.main { + margin-left: 260px; + width: calc(100% - 260px); + padding: 30px; + margin-top: 80px; + transition: 0.3s; +} + +/* ================= CONTAINER ================= */ +.container { + background: white; + padding: 30px; + width: 95%; + max-width: 700px; + margin: auto; + border-radius: 10px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + + +/* ================= FORM ================= */ +.form-group { + margin-bottom: 15px; +} + +form label { + display: block; + margin-bottom: 6px; + font-weight: bold; +} + +form input, +form select { + padding: 10px; + width: 100%; + border: 1px solid #ccc; + border-radius: 6px; + background-color: #f8f9ff; + outline: none; + transition: border-color 0.3s ease, box-shadow 0.3s ease; +} + +input:focus, +select:focus { + border-color: #007bff; + box-shadow: 0 0 5px rgba(0, 123, 255, 0.5); +} + +/* ================= SUBMIT BUTTON (GREEN) ================= */ +button { + width: 60%; + margin-top: 20px; + margin-left: 20%; + padding: 12px 20px; + background-color: #28a745; + /* Bootstrap green */ + color: #ffffff; + border: none; + cursor: pointer; + border-radius: 6px; + font-weight: 600; + font-size: 15px; + transition: background-color 0.3s ease, box-shadow 0.3s ease; +} + +button:hover { + background-color: #218838; + /* Darker green on hover */ + box-shadow: 0 4px 10px rgba(40, 167, 69, 0.35); +} + +button:active { + background-color: #1e7e34; +} + +button:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(40, 167, 69, 0.35); +} \ No newline at end of file diff --git a/static/css/add_itr.css b/static/css/add_itr.css index 29bcfdd..c3fb214 100644 --- a/static/css/add_itr.css +++ b/static/css/add_itr.css @@ -1,135 +1,155 @@ -body { - font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; - background: #eef2f7; +/* ================= RESET ================= */ +* { margin: 0; - padding: 40px; - color: #333; + padding: 0; + box-sizing: border-box; + font-family: "Segoe UI", sans-serif; } +body { + background-color: #f0f4ff; + /* very light blue background */ +} + +/* ================= CONTAINER ================= */ .container { - max-width: 900px; - margin: auto; - background: #fff; - padding: 40px 50px; - border-radius: 12px; - box-shadow: 0 6px 25px rgba(0, 0, 0, 0.1); - transition: box-shadow 0.3s ease; + max-width: 90%; + margin: 20px 20px 20px 20px; + /* top margin to clear navbar */ + background: white; + padding: 10%; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); } -.container:hover { - box-shadow: 0 10px 35px rgba(0, 0, 0, 0.15); -} - -h2 { +.no-record { text-align: center; - margin-bottom: 35px; - font-size: 30px; - color: #2c3e50; - font-weight: 700; - letter-spacing: 0.5px; + font-size: 18px; + margin-top: 20px; + color: #555; + padding: 15px; + background: #f9f9f9; + border-radius: 8px; + border: 1px solid #e0e0e0; } -form { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 20px 30px; + +/* ================= FORM ================= */ +form label { + display: block; + margin-top: 10px; + font-weight: bold; + color: #000000; + /* dark blue text */ } +form input, +form select { + width: 100%; + padding: 10px; + margin-top: 6px; + border: 1px solid #ccc; + border-radius: 6px; + outline: none; +} + +form input:focus, +form select:focus { + border-color: #0056b3; + box-shadow: 0 0 5px rgba(0, 123, 255, 0.5); +} + +.auto { + padding: 10px 12px; + border: 1px solid #ccd1d9; + border-radius: 6px; + font-size: 15px; + background-color: #d5edd7; + transition: all 0.25s ease-in-out; +} + +/* ================= SUBMIT BUTTON (GREEN) ================= */ +button { + width: 60%; + margin-top: 20px; + margin-left: 20%; + padding: 12px 20px; + background-color: #28a745; + /* Bootstrap green */ + color: #ffffff; + border: none; + cursor: pointer; + border-radius: 6px; + font-weight: 600; + font-size: 15px; + transition: background-color 0.3s ease, box-shadow 0.3s ease; +} + +button:hover { + background-color: #218838; + /* Darker green on hover */ + box-shadow: 0 4px 10px rgba(40, 167, 69, 0.35); +} + +button:active { + background-color: #1e7e34; +} + +button:focus { + outline: none; + box-shadow: 0 0 0 3px rgba(40, 167, 69, 0.35); +} + +/* ================= TABLE (if used in this page) ================= */ +.table-wrapper { + overflow-x: auto; +} + +table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; +} + +th, +td { + padding: 12px; + border: 1px solid #dee2e6; + text-align: right; + white-space: nowrap; +} + +th { + background-color: #007bff; + color: white; + text-align: center; +} + +tr:nth-child(even) { + background-color: #f0f8ff; +} + +td:first-child, +th:first-child { + text-align: left; +} + +/* Full width rows (span 2 columns) */ .form-group { display: flex; flex-direction: column; } -label { - font-weight: 600; - margin-bottom: 8px; - color: #555; - font-size: 14px; - font-weight: bold; -} - -input[type="number"] { - padding: 10px 12px; - border: 1px solid #ccd1d9; - border-radius: 6px; - font-size: 15px; - background-color: #fafafa; - transition: all 0.25s ease-in-out; -} - -input[type="number"]:focus { - border-color: #007BFF; - background: #fff; - box-shadow: 0 0 8px rgba(0, 123, 255, 0.25); - outline: none; -} - -button[type="submit"] { +.form-group.full-width { grid-column: span 2; - margin-top: 25px; - padding: 15px; - background: linear-gradient(135deg, #007BFF, #0056b3); - border: none; - border-radius: 8px; - color: #fff; - font-size: 18px; - font-weight: 600; - cursor: pointer; - transition: transform 0.2s, background 0.3s; } -button[type="submit"]:hover { - background: linear-gradient(135deg, #0056b3, #00408f); - transform: translateY(-2px); +/* Special case: two inputs inside one form-group */ +.form-group.inline-2 { + flex-direction: row; + gap: 15px; } -/* Back button styling */ -.back-btn { - display: inline-block; - margin-bottom: 20px; - padding: 10px 18px; - background: #6c757d; - color: white; - font-size: 15px; - font-weight: 600; - border-radius: 6px; - text-decoration: none; - transition: background 0.3s ease; -} - -.back-btn:hover { - background: #5a6268; -} - - -/* Style for Year Dropdown */ -select { - padding: 10px 5px; - border: 1px solid #ccd1d9; - border-radius: 6px; - font-size: 15px; - background-color: #fafafa; - transition: all 0.25s ease-in-out; - cursor: pointer; - height: 40px; -} - -select:focus { - border-color: #007BFF; - background: #fff; - box-shadow: 0 0 8px rgba(0, 123, 255, 0.25); - outline: none; -} - - - -/* Responsive */ -@media (max-width: 768px) { - form { - grid-template-columns: 1fr; - } - - h2 { - font-size: 24px; - } +.form-group.inline-2>div { + flex: 1; } \ No newline at end of file diff --git a/static/css/ao_report.css b/static/css/ao_report.css new file mode 100644 index 0000000..8cbe77e --- /dev/null +++ b/static/css/ao_report.css @@ -0,0 +1,207 @@ +/* ================= GLOBAL ================= */ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + background-color: #f4f7f9; + margin: 0; + padding: 0; + display: flex; +} + +a { + text-decoration: none !important; + color: #007bff; +} + +/* ================= NAVBAR ================= */ +.navbar { + width: 100%; + height: 60px; + background-color: #007bff; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + position: fixed; + top: 0; + left: 0; + color: white; + z-index: 1000; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} + +.nav-left { + display: flex; + align-items: center; + gap: 15px; +} + +.nav-logo { + height: 80px; + filter: brightness(0) invert(1); +} + +.toggle-btn { + font-size: 26px; + cursor: pointer; +} + +/* ================= SIDEBAR ================= */ +.sidebar { + width: 250px; + background: white; + height: calc(100vh - 60px); + position: fixed; + top: 60px; + left: 0; + padding-top: 20px; + overflow-y: auto; + border-right: 1px solid #d6d6d6; + display: flex; + flex-direction: column; +} + +.sidebar.hide { + left: -250px; +} + +.menu-items { + flex: 1; + display: flex; + flex-direction: column; + padding-bottom: 20px; +} + +.menu-btn { + padding: 14px 20px; + font-size: 17px; + color: #007bff; + cursor: pointer; + border-bottom: 1px solid #e5e5e5; + transition: 0.2s; + font-weight: 600; +} + +.menu-btn:hover { + background: #e9f3ff; +} + +.submenu { + display: none; + background: #f4faff; +} + +.submenu a { + display: block; + padding: 12px 35px; + color: #0056b3; + border-bottom: 1px solid #e2eaff; + transition: 0.2s; +} + +.submenu a:hover { + background: #e9f3ff; +} + +.sidebar-logout { + margin-top: auto; + padding: 10px 16px; + background: #007bff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; + color: white; + cursor: pointer; + transition: 0.2s; +} + +.sidebar-logout:hover { + background: #006ae6; +} + +.logout-icon { + width: 22px; + height: 22px; +} + +/* ================= MAIN ================= */ +.main { + margin-left: 260px; + margin-top: 80px; + padding: 30px; + width: calc(100% - 260px); +} + +.container { + max-width: 600px; + margin: auto; + background: #fff; + padding: 35px 40px; + border-radius: 10px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + text-align: center; +} + +h2 { + color: #2c3e50; + margin-bottom: 25px; + font-weight: 600; +} + +/* ================= FORM ELEMENTS ================= */ +label { + font-weight: 600; + display: block; + margin-top: 10px; + color: #333; +} + +select { + padding: 10px 14px; + border: 1px solid #ccc; + border-radius: 6px; + width: 100%; + max-width: 250px; + margin-top: 8px; + font-size: 16px; + color: #333; + cursor: pointer; + transition: 0.2s; +} + +select:focus { + border-color: #007bff; + box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.2); + outline: none; +} + +/* ================= BUTTONS ================= */ +button { + margin-top: 25px; + padding: 12px 25px; + background-color: #007bff; + color: white; + border: none; + border-radius: 6px; + cursor: pointer; + font-size: 16px; + font-weight: 600; + transition: 0.2s; +} + +button:hover { + background-color: #0069d9; +} + +/* Optional: responsive adjustments */ +@media (max-width: 768px) { + .main { + margin-left: 0; + width: 100%; + padding: 20px; + } + + select { + max-width: 100%; + } +} diff --git a/static/css/cit_report.css b/static/css/cit_report.css new file mode 100644 index 0000000..8cbe77e --- /dev/null +++ b/static/css/cit_report.css @@ -0,0 +1,207 @@ +/* ================= GLOBAL ================= */ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + background-color: #f4f7f9; + margin: 0; + padding: 0; + display: flex; +} + +a { + text-decoration: none !important; + color: #007bff; +} + +/* ================= NAVBAR ================= */ +.navbar { + width: 100%; + height: 60px; + background-color: #007bff; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + position: fixed; + top: 0; + left: 0; + color: white; + z-index: 1000; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} + +.nav-left { + display: flex; + align-items: center; + gap: 15px; +} + +.nav-logo { + height: 80px; + filter: brightness(0) invert(1); +} + +.toggle-btn { + font-size: 26px; + cursor: pointer; +} + +/* ================= SIDEBAR ================= */ +.sidebar { + width: 250px; + background: white; + height: calc(100vh - 60px); + position: fixed; + top: 60px; + left: 0; + padding-top: 20px; + overflow-y: auto; + border-right: 1px solid #d6d6d6; + display: flex; + flex-direction: column; +} + +.sidebar.hide { + left: -250px; +} + +.menu-items { + flex: 1; + display: flex; + flex-direction: column; + padding-bottom: 20px; +} + +.menu-btn { + padding: 14px 20px; + font-size: 17px; + color: #007bff; + cursor: pointer; + border-bottom: 1px solid #e5e5e5; + transition: 0.2s; + font-weight: 600; +} + +.menu-btn:hover { + background: #e9f3ff; +} + +.submenu { + display: none; + background: #f4faff; +} + +.submenu a { + display: block; + padding: 12px 35px; + color: #0056b3; + border-bottom: 1px solid #e2eaff; + transition: 0.2s; +} + +.submenu a:hover { + background: #e9f3ff; +} + +.sidebar-logout { + margin-top: auto; + padding: 10px 16px; + background: #007bff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; + color: white; + cursor: pointer; + transition: 0.2s; +} + +.sidebar-logout:hover { + background: #006ae6; +} + +.logout-icon { + width: 22px; + height: 22px; +} + +/* ================= MAIN ================= */ +.main { + margin-left: 260px; + margin-top: 80px; + padding: 30px; + width: calc(100% - 260px); +} + +.container { + max-width: 600px; + margin: auto; + background: #fff; + padding: 35px 40px; + border-radius: 10px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + text-align: center; +} + +h2 { + color: #2c3e50; + margin-bottom: 25px; + font-weight: 600; +} + +/* ================= FORM ELEMENTS ================= */ +label { + font-weight: 600; + display: block; + margin-top: 10px; + color: #333; +} + +select { + padding: 10px 14px; + border: 1px solid #ccc; + border-radius: 6px; + width: 100%; + max-width: 250px; + margin-top: 8px; + font-size: 16px; + color: #333; + cursor: pointer; + transition: 0.2s; +} + +select:focus { + border-color: #007bff; + box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.2); + outline: none; +} + +/* ================= BUTTONS ================= */ +button { + margin-top: 25px; + padding: 12px 25px; + background-color: #007bff; + color: white; + border: none; + border-radius: 6px; + cursor: pointer; + font-size: 16px; + font-weight: 600; + transition: 0.2s; +} + +button:hover { + background-color: #0069d9; +} + +/* Optional: responsive adjustments */ +@media (max-width: 768px) { + .main { + margin-left: 0; + width: 100%; + padding: 20px; + } + + select { + max-width: 100%; + } +} diff --git a/static/css/display_ao.css b/static/css/display_ao.css new file mode 100644 index 0000000..40e9b4d --- /dev/null +++ b/static/css/display_ao.css @@ -0,0 +1,255 @@ + /* ================= RESET ================= */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Segoe UI", sans-serif; +} + +body { + background-color: #f4f7f6; + display: flex; +} + +/* ================= NAVBAR ================= */ +.navbar { + width: 100%; + height: 60px; + background-color: #007bff; /* primary blue */ + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + position: fixed; + top: 0; + left: 0; + color: white; + z-index: 1000; + box-shadow: 0 2px 8px rgba(0,0,0,0.15); + gap: 10px; +} + +.nav-logo { + height: 80px; + width: auto; + filter: brightness(0) invert(1); +} + +.toggle-btn { + font-size: 26px; + cursor: pointer; +} + +.nav-left { + display: flex; + align-items: center; + gap: 15px; +} + +/* ================= SIDEBAR ================= */ +.sidebar { + width: 250px; + background: #ffffff; + height: calc(100vh - 60px); + position: fixed; + top: 60px; + left: 0; + padding-top: 20px; + overflow-y: auto; + border-right: 1px solid #e0e0e0; + display: flex; + flex-direction: column; + z-index: 0; + transition: 0.3s; +} + +.sidebar.hide { + left: -250px; +} + +.sidebar h2 { + color: #007bff; + text-align: center; + margin-bottom: 20px; + font-size: 22px; +} + +/* ================= MENU BUTTONS ================= */ +.menu-btn { + padding: 14px 20px; + font-size: 17px; + color: #007bff; + cursor: pointer; + border-bottom: 1px solid #e0e0e0; + transition: 0.2s; +} + +.menu-btn:hover { + background: #cce5ff; + color: #0056b3; +} + +.submenu { + display: none; + background: #f0f8ff; +} + +.submenu a { + display: block; + padding: 12px 35px; + color: #007bff; + text-decoration: none; + border-bottom: 1px solid #e0e0e0; + transition: 0.2s; +} + +.submenu a:hover { + background: #cce5ff; + color: #004085; +} +.no-record { + text-align: center; + font-size: 18px; + margin-top: 20px; + color: #555; + padding: 15px; + background: #f9f9f9; + border-radius: 8px; + border: 1px solid #e0e0e0; +} + + +/* ================= LOGOUT ================= */ +.sidebar-logout { + margin-top: auto; + padding: 10px 16px; + background: #007bff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; + text-decoration: none; + color: white; +} + +.sidebar-logout:hover { + background: #a2cdfa; +} + +.logout-icon { + width: 22px; + height: 22px; +} + +/* ================= MAIN CONTENT ================= */ +.main { + margin-left: 260px; + padding: 30px; + width: calc(100% - 260px); + margin-top: 80px; + position: relative; + z-index: 1; + transition: 0.3s; +} + +a { + text-decoration: none; +} + +/* ================= CONTAINER ================= */ +.container { + max-width: 95%; + margin: auto; + background: white; + padding: 30px; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0,0,0,0.1); + position: relative; + z-index: 2; +} + +/* ================= BUTTONS ================= */ +.btn { + padding: 8px 15px; + border-radius: 5px; + text-decoration: none; + color: white; + border: none; + cursor: pointer; + font-size: 14px; + +} + +.btn-add { + background-color: #28a745; + display: inline-block; + margin-bottom: 20px; + position: absolute; /* Pins button to the right side */ + right: 0; + +} + +.btn-update { + background-color: #007bff; +} + +.btn-delete { + background-color: #dc3545; +} + +/* ================= TABLE ================= */ +.table-wrapper { + overflow-x: auto; +} + +table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; +} + +th, +td { + padding: 12px; + border: 1px solid #dee2e6; + text-align: right; + white-space: nowrap; +} + +th { + background-color: #007bff; + color: white; + text-align: center; +} + +tr:nth-child(even) { + background-color: #f0f8ff; +} + +td:first-child, +th:first-child { + text-align: left; +} + +.action-cell form { + display: inline-block; + margin-left: 5px; +} + +/* ================= BACK BUTTON ================= */ +.back-btn { + display: inline-block; + margin-bottom: 20px; + padding: 10px 18px; + background: #007bff; + color: white; + font-size: 15px; + font-weight: 600; + border-radius: 6px; + text-decoration: none; + transition: background 0.3s ease; +} + +.back-btn:hover { + background: #0056b3; +} \ No newline at end of file diff --git a/static/css/display_cit.css b/static/css/display_cit.css new file mode 100644 index 0000000..f8e02db --- /dev/null +++ b/static/css/display_cit.css @@ -0,0 +1,251 @@ + /* ================= RESET ================= */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Segoe UI", sans-serif; +} + +body { + background-color: #f4f7f6; + display: flex; +} + +/* ================= NAVBAR ================= */ +.navbar { + width: 100%; + height: 60px; + background-color: #007bff; /* primary blue */ + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + position: fixed; + top: 0; + left: 0; + color: white; + z-index: 1000; + box-shadow: 0 2px 8px rgba(0,0,0,0.15); + gap: 10px; +} + +.nav-logo { + height: 80px; + width: auto; + filter: brightness(0) invert(1); +} + +.toggle-btn { + font-size: 26px; + cursor: pointer; +} + +.nav-left { + display: flex; + align-items: center; + gap: 15px; +} + +/* ================= SIDEBAR ================= */ +.sidebar { + width: 250px; + background: #ffffff; + height: calc(100vh - 60px); + position: fixed; + top: 60px; + left: 0; + padding-top: 20px; + overflow-y: auto; + border-right: 1px solid #e0e0e0; + display: flex; + flex-direction: column; + z-index: 0; + transition: 0.3s; +} + +.sidebar.hide { + left: -250px; +} + +.sidebar h2 { + color: #007bff; + text-align: center; + margin-bottom: 20px; + font-size: 22px; +} + +/* ================= MENU BUTTONS ================= */ +.menu-btn { + padding: 14px 20px; + font-size: 17px; + color: #007bff; + cursor: pointer; + border-bottom: 1px solid #e0e0e0; + transition: 0.2s; +} + +.menu-btn:hover { + background: #cce5ff; + color: #0056b3; +} + +.submenu { + display: none; + background: #f0f8ff; +} + +.submenu a { + display: block; + padding: 12px 35px; + color: #007bff; + text-decoration: none; + border-bottom: 1px solid #e0e0e0; + transition: 0.2s; +} + +.submenu a:hover { + background: #cce5ff; + color: #004085; +} +.no-record { + text-align: center; + font-size: 18px; + margin-top: 20px; + color: #555; + padding: 15px; + background: #f9f9f9; + border-radius: 8px; + border: 1px solid #e0e0e0; +} + + +/* ================= LOGOUT ================= */ +.sidebar-logout { + margin-top: auto; + padding: 10px 16px; + background: #007bff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; + text-decoration: none; + color: white; +} + +.sidebar-logout:hover { + background: #a2cdfa; +} + +.logout-icon { + width: 22px; + height: 22px; +} + +/* ================= MAIN CONTENT ================= */ +.main { + margin-left: 20px; + padding: 8px; + width: calc(100% - 50px); + margin-top: 50px; + position: relative; + z-index: 5; + transition: 0.3s; +} + +a { + text-decoration: none; +} + +/* ================= CONTAINER ================= */ +.container { + max-width: 95%; + margin: auto; + background: white; + padding: 8px; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0,0,0,0.1); + position: relative; + z-index: 2; +} + +/* ================= BUTTONS ================= */ +.btn { + padding: 8px 15px; + border-radius: 5px; + text-decoration: none; + color: white; + border: none; + cursor: pointer; + font-size: 14px; +} + +.btn-add { + background-color: #28a745; + display: inline-block; + margin-bottom: 20px; +} + +.btn-update { + background-color: #007bff; +} + +.btn-delete { + background-color: #dc3545; +} + +/* ================= TABLE ================= */ +.table-wrapper { + overflow-x: auto; +} + +table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; +} + +th, +td { + padding: 12px; + border: 1px solid #dee2e6; + text-align: right; + white-space: nowrap; +} + +th { + background-color: #007bff; + color: white; + text-align: center; +} + +tr:nth-child(even) { + background-color: #f0f8ff; +} + +td:first-child, +th:first-child { + text-align: left; +} + +.action-cell form { + display: inline-block; + margin-left: 5px; +} + +/* ================= BACK BUTTON ================= */ +.back-btn { + display: inline-block; + margin-bottom: 20px; + padding: 10px 18px; + background: #007bff; + color: white; + font-size: 15px; + font-weight: 600; + border-radius: 6px; + text-decoration: none; + transition: background 0.3s ease; +} + +.back-btn:hover { + background: #0056b3; +} \ No newline at end of file diff --git a/static/css/display_itat.css b/static/css/display_itat.css new file mode 100644 index 0000000..eb3217f --- /dev/null +++ b/static/css/display_itat.css @@ -0,0 +1,254 @@ + /* ================= RESET ================= */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Segoe UI", sans-serif; +} + +body { + background-color: #f4f7f6; + display: flex; +} + +/* ================= NAVBAR ================= */ +.navbar { + width: 100%; + height: 60px; + background-color: #007bff; /* primary blue */ + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + position: fixed; + top: 0; + left: 0; + color: white; + z-index: 1000; + box-shadow: 0 2px 8px rgba(0,0,0,0.15); + gap: 10px; +} + +.nav-logo { + height: 80px; + width: auto; + filter: brightness(0) invert(1); +} + +.toggle-btn { + font-size: 26px; + cursor: pointer; +} + +.nav-left { + display: flex; + align-items: center; + gap: 15px; +} + +/* ================= SIDEBAR ================= */ +.sidebar { + width: 250px; + background: #ffffff; + height: calc(100vh - 60px); + position: fixed; + top: 60px; + left: 0; + padding-top: 20px; + overflow-y: auto; + border-right: 1px solid #e0e0e0; + display: flex; + flex-direction: column; + z-index: 0; + transition: 0.3s; +} + +.sidebar.hide { + left: -250px; +} + +.sidebar h2 { + color: #007bff; + text-align: center; + margin-bottom: 20px; + font-size: 22px; +} + +/* ================= MENU BUTTONS ================= */ +.menu-btn { + padding: 14px 20px; + font-size: 17px; + color: #007bff; + cursor: pointer; + border-bottom: 1px solid #e0e0e0; + transition: 0.2s; + +} + +.menu-btn:hover { + background: #cce5ff; + color: #0056b3; +} + +.submenu { + display: none; + background: #f0f8ff; +} + +.submenu a { + display: block; + padding: 12px 35px; + color: #007bff; + text-decoration: none; + border-bottom: 1px solid #e0e0e0; + transition: 0.2s; +} + +.submenu a:hover { + background: #cce5ff; + color: #004085; +} +.no-record { + text-align: center; + font-size: 18px; + margin-top: 20px; + color: #555; + padding: 15px; + background: #f9f9f9; + border-radius: 8px; + border: 1px solid #e0e0e0; +} + + +/* ================= LOGOUT ================= */ +.sidebar-logout { + margin-top: auto; + padding: 10px 16px; + background: #007bff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; + text-decoration: none; + color: white; +} + +.sidebar-logout:hover { + background: #a2cdfa; +} + +.logout-icon { + width: 22px; + height: 22px; +} + +/* ================= MAIN CONTENT ================= */ +.main { + margin-left: 20px; + padding: 8px; + width: calc(100% - 50px); + margin-top: 50px; + position: relative; + z-index: 5; + transition: 0.3s; +} + +a { + text-decoration: none; +} + +/* ================= CONTAINER ================= */ +.container { + max-width: 95%; + margin: auto; + background: white ; + padding: 30px; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0,0,0,0.1); + position: relative; + z-index: 2; + + +} + +/* ================= BUTTONS ================= */ +.btn { + padding: 8px 15px; + border-radius: 5px; + text-decoration: none; + color: white; + border: none; + cursor: pointer; + font-size: 14px; +} + +.btn-add { + background-color: #28a745; + display: inline-block; + margin-bottom: 20px; +} + +.btn-update { + background-color: #007bff; +} + +.btn-delete { + background-color: #dc3545; +} + +/* ================= TABLE ================= */ +.table-wrapper { + overflow-x: auto; +} + +table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; +} + +th, +td { + padding: 12px; + border: 1px solid #dee2e6; + text-align: right; + white-space: nowrap; +} + +th { + background-color: #007bff; + color: white; + text-align: center; +} + +tr:nth-child(even) { + background-color: #f0f8ff; +} + +td:first-child, +th:first-child { + text-align: left; +} + +.action-cell form { + display: inline-block; + margin-left: 5px; +} + +/* ================= BACK BUTTON ================= */ +.back-btn { + display: inline-block; + margin-bottom: 20px; + padding: 10px 18px; + background: #007bff; + color: white; + font-size: 15px; + font-weight: 600; + border-radius: 6px; + text-decoration: none; + transition: background 0.3s ease; +} + +.back-btn:hover { + background: #0056b3; +} \ No newline at end of file diff --git a/static/css/display_itr.css b/static/css/display_itr.css new file mode 100644 index 0000000..dc5e4cf --- /dev/null +++ b/static/css/display_itr.css @@ -0,0 +1,251 @@ + /* ================= RESET ================= */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Segoe UI", sans-serif; +} + +body { + background-color: #f4f7f6; + display: flex; +} + +/* ================= NAVBAR ================= */ +.navbar { + width: 100%; + height: 60px; + background-color: #007bff; /* primary blue */ + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + position: fixed; + top: 0; + left: 0; + color: white; + z-index: 1000; + box-shadow: 0 2px 8px rgba(0,0,0,0.15); + gap: 10px; +} + +.nav-logo { + height: 80px; + width: auto; + filter: brightness(0) invert(1); +} + +.toggle-btn { + font-size: 26px; + cursor: pointer; +} + +.nav-left { + display: flex; + align-items: center; + gap: 15px; +} + +/* ================= SIDEBAR ================= */ +.sidebar { + width: 250px; + background: #ffffff; + height: calc(100vh - 60px); + position: fixed; + top: 60px; + left: 0; + padding-top: 20px; + overflow-y: auto; + border-right: 1px solid #e0e0e0; + display: flex; + flex-direction: column; + z-index: 0; + transition: 0.3s; +} + +.sidebar.hide { + left: -250px; +} + +.sidebar h2 { + color: #007bff; + text-align: center; + margin-bottom: 20px; + font-size: 22px; +} + +/* ================= MENU BUTTONS ================= */ +.menu-btn { + padding: 14px 20px; + font-size: 17px; + color: #007bff; + cursor: pointer; + border-bottom: 1px solid #e0e0e0; + transition: 0.2s; +} + +.menu-btn:hover { + background: #cce5ff; + color: #0056b3; +} + +.submenu { + display: none; + background: #f0f8ff; +} + +.submenu a { + display: block; + padding: 12px 35px; + color: #007bff; + text-decoration: none; + border-bottom: 1px solid #e0e0e0; + transition: 0.2s; +} + +.submenu a:hover { + background: #cce5ff; + color: #004085; +} +.no-record { + text-align: center; + font-size: 18px; + margin-top: 20px; + color: #555; + padding: 15px; + background: #f9f9f9; + border-radius: 8px; + border: 1px solid #e0e0e0; +} + + +/* ================= LOGOUT ================= */ +.sidebar-logout { + margin-top: auto; + padding: 10px 16px; + background: #007bff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; + text-decoration: none; + color: white; +} + +.sidebar-logout:hover { + background: #a2cdfa; +} + +.logout-icon { + width: 22px; + height: 22px; +} + +/* ================= MAIN CONTENT ================= */ +.main { + margin-left: 260px; + padding: 30px; + width: calc(100% - 260px); + margin-top: 80px; + position: relative; + z-index: 1; + transition: 0.3s; +} + +a { + text-decoration: none; +} + +/* ================= CONTAINER ================= */ +.container { + max-width: 95%; + margin: auto; + background: white; + padding: 30px; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0,0,0,0.1); + position: relative; + z-index: 2; +} + +/* ================= BUTTONS ================= */ +.btn { + padding: 8px 15px; + border-radius: 5px; + text-decoration: none; + color: white; + border: none; + cursor: pointer; + font-size: 14px; +} + +.btn-add { + background-color: #28a745; + display: inline-block; + margin-bottom: 20px; +} + +.btn-update { + background-color: #007bff; +} + +.btn-delete { + background-color: #dc3545; +} + +/* ================= TABLE ================= */ +.table-wrapper { + overflow-x: auto; +} + +table { + width: 100%; + border-collapse: collapse; + margin-top: 20px; +} + +th, +td { + padding: 12px; + border: 1px solid #dee2e6; + text-align: right; + white-space: nowrap; +} + +th { + background-color: #007bff; + color: white; + text-align: center; +} + +tr:nth-child(even) { + background-color: #f0f8ff; +} + +td:first-child, +th:first-child { + text-align: left; +} + +.action-cell form { + display: inline-block; + margin-left: 5px; +} + +/* ================= BACK BUTTON ================= */ +.back-btn { + display: inline-block; + margin-bottom: 20px; + padding: 10px 18px; + background: #007bff; + color: white; + font-size: 15px; + font-weight: 600; + border-radius: 6px; + text-decoration: none; + transition: background 0.3s ease; +} + +.back-btn:hover { + background: #0056b3; +} \ No newline at end of file diff --git a/static/css/documents.css b/static/css/documents.css new file mode 100644 index 0000000..d45a453 --- /dev/null +++ b/static/css/documents.css @@ -0,0 +1,147 @@ +/* ================= GLOBAL ================= */ +body { + background-color: #f4f6f9; + font-family: "Segoe UI", Arial, sans-serif; +} + +/* ================= MAIN CONTENT FIX ================= */ +/* base.html usually gives sidebar width ~250px */ +.main { + margin-left: 260px; + padding: 40px 30px; +} + +/* ================= CARD / CONTAINER ================= */ +.container { + max-width: 1100px; + margin: 0 auto; + background: #ffffff; + padding: 35px 40px; + border-radius: 12px; + box-shadow: 0 8px 22px rgba(0, 0, 0, 0.08); +} + +/* ================= HEADING ================= */ +.container h2 { + text-align: center; + color: #0d6efd; + font-size: 26px; + margin-bottom: 30px; +} + +/* ================= FILTER FORM ================= */ +form { + display: flex; + align-items: flex-end; + justify-content: center; + gap: 18px; + flex-wrap: wrap; + margin-bottom: 30px; +} + +form label { + font-size: 14px; + font-weight: 500; +} + +form select { + width: 220px; + padding: 10px; + border-radius: 6px; + border: 1px solid #ced4da; + font-size: 14px; +} + +/* APPLY BUTTON (GREEN) */ +form button { + background-color: #28a745; + color: #ffffff; + border: none; + padding: 11px 28px; + border-radius: 6px; + font-size: 15px; + font-weight: 600; + cursor: pointer; +} + +form button:hover { + background-color: #218838; +} + +/* ================= TABLE ================= */ +table { + width: 100%; + border-collapse: collapse; + font-size: 14px; +} + +thead { + background-color: #0d6efd; + color: #ffffff; +} + +thead th { + padding: 14px 12px; + text-align: center; + font-weight: 600; +} + +tbody td { + padding: 12px; + text-align: center; + border-bottom: 1px solid #e3e6ea; +} + +tbody tr:nth-child(even) { + background-color: #f8f9fa; +} + +tbody tr:hover { + background-color: #eef4ff; +} + +/* ================= ACTION LINKS ================= */ +table a { + text-decoration: none; + color: #ffffff; + padding: 7px 16px; + border-radius: 6px; + font-size: 13px; + display: inline-block; +} + +/* Download button */ +table a[href*="download"] { + background-color: #17a2b8; +} + +table a[href*="download"]:hover { + background-color: #138496; +} + +/* View button */ +table a[href*="view"] { + background-color: #20c997; +} + +table a[href*="view"]:hover { + background-color: #17a589; +} + +/* ================= RESPONSIVE ================= */ +@media (max-width: 992px) { + .main { + margin-left: 0; + padding: 20px; + } + + form { + flex-direction: column; + align-items: stretch; + } + + form select, + form button { + width: 100%; + } +} \ No newline at end of file diff --git a/static/css/index.css b/static/css/index.css new file mode 100644 index 0000000..8d35c03 --- /dev/null +++ b/static/css/index.css @@ -0,0 +1,165 @@ +/* RESET */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Segoe UI", sans-serif; +} + +body { + background-color: #f4f7f6; + display: flex; +} + +/* NAVBAR */ +.navbar { + width: 100%; + height: 60px; + background-color: #007bff; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + position: fixed; + top: 0; + left: 0; + color: white; + z-index: 1000; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + gap: 10px; +} + +.nav-logo { + height: 80px; + width: auto; + filter: brightness(0) invert(1); +} + +.toggle-btn { + font-size: 26px; + cursor: pointer; +} + +.nav-left { + display: flex; + align-items: center; + gap: 15px; +} + +/* SIDEBAR */ +.sidebar { + width: 250px; + background: #ffffff; + height: calc(100vh - 60px); + position: fixed; + top: 60px; + left: 0; + padding-top: 20px; + overflow-y: auto; + border-right: 1px solid #e5d1be; + transition: 0.3s; + + display: flex; + flex-direction: column; +} + +.sidebar.hide { + left: -250px; +} + +.sidebar h2 { + color: #007bff; + text-align: center; + margin-bottom: 20px; + font-size: 22px; +} + +/* Menu buttons */ +.menu-btn { + padding: 14px 20px; + font-size: 17px; + color: #007bff; + cursor: pointer; + border-bottom: 1px solid #f0d6c6; + transition: 0.2s; +} + +.menu-btn:hover { + background: #88ccfa; +} + +.submenu { + display: none; + background: #ffffff; +} + +.submenu a { + display: block; + padding: 12px 35px; + color: #007bff; + text-decoration: none; + border-bottom: 1px solid #f3cab1; + transition: 0.2s; +} + +.submenu a:hover { + background: #b3dbf7; + color: #007bff; +} + +/* Logout */ +.sidebar-logout { + margin-top: auto; + padding: 10px 16px; + background: #007bff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; + text-decoration: none; +} + +.sidebar-logout:hover { + background: #a8d8f8; +} + +.logout-icon { + width: 22px; + height: 22px; +} + +/* MAIN CONTENT */ +.main { + margin-left: 260px; + padding: 30px; + width: calc(100% - 260px); + margin-top: 80px; + transition: 0.3s; +} + +.main.collapsed { + margin-left: 20px; + width: calc(100% - 40px); +} + +/* Container */ +.container { + background: white; + padding: 40px; + border-radius: 12px; + max-width: 800px; + margin: auto; + box-shadow: 0 10px 25px rgba(0, 0, 0, 0.07); +} + +.header { + font-size: 32px; + color: #2c3e50; + text-align: center; + margin-bottom: 20px; + font-weight: 600; +} + +a { + text-decoration: none; +} diff --git a/static/css/itat_report.css b/static/css/itat_report.css new file mode 100644 index 0000000..8cbe77e --- /dev/null +++ b/static/css/itat_report.css @@ -0,0 +1,207 @@ +/* ================= GLOBAL ================= */ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + background-color: #f4f7f9; + margin: 0; + padding: 0; + display: flex; +} + +a { + text-decoration: none !important; + color: #007bff; +} + +/* ================= NAVBAR ================= */ +.navbar { + width: 100%; + height: 60px; + background-color: #007bff; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + position: fixed; + top: 0; + left: 0; + color: white; + z-index: 1000; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} + +.nav-left { + display: flex; + align-items: center; + gap: 15px; +} + +.nav-logo { + height: 80px; + filter: brightness(0) invert(1); +} + +.toggle-btn { + font-size: 26px; + cursor: pointer; +} + +/* ================= SIDEBAR ================= */ +.sidebar { + width: 250px; + background: white; + height: calc(100vh - 60px); + position: fixed; + top: 60px; + left: 0; + padding-top: 20px; + overflow-y: auto; + border-right: 1px solid #d6d6d6; + display: flex; + flex-direction: column; +} + +.sidebar.hide { + left: -250px; +} + +.menu-items { + flex: 1; + display: flex; + flex-direction: column; + padding-bottom: 20px; +} + +.menu-btn { + padding: 14px 20px; + font-size: 17px; + color: #007bff; + cursor: pointer; + border-bottom: 1px solid #e5e5e5; + transition: 0.2s; + font-weight: 600; +} + +.menu-btn:hover { + background: #e9f3ff; +} + +.submenu { + display: none; + background: #f4faff; +} + +.submenu a { + display: block; + padding: 12px 35px; + color: #0056b3; + border-bottom: 1px solid #e2eaff; + transition: 0.2s; +} + +.submenu a:hover { + background: #e9f3ff; +} + +.sidebar-logout { + margin-top: auto; + padding: 10px 16px; + background: #007bff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; + color: white; + cursor: pointer; + transition: 0.2s; +} + +.sidebar-logout:hover { + background: #006ae6; +} + +.logout-icon { + width: 22px; + height: 22px; +} + +/* ================= MAIN ================= */ +.main { + margin-left: 260px; + margin-top: 80px; + padding: 30px; + width: calc(100% - 260px); +} + +.container { + max-width: 600px; + margin: auto; + background: #fff; + padding: 35px 40px; + border-radius: 10px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + text-align: center; +} + +h2 { + color: #2c3e50; + margin-bottom: 25px; + font-weight: 600; +} + +/* ================= FORM ELEMENTS ================= */ +label { + font-weight: 600; + display: block; + margin-top: 10px; + color: #333; +} + +select { + padding: 10px 14px; + border: 1px solid #ccc; + border-radius: 6px; + width: 100%; + max-width: 250px; + margin-top: 8px; + font-size: 16px; + color: #333; + cursor: pointer; + transition: 0.2s; +} + +select:focus { + border-color: #007bff; + box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.2); + outline: none; +} + +/* ================= BUTTONS ================= */ +button { + margin-top: 25px; + padding: 12px 25px; + background-color: #007bff; + color: white; + border: none; + border-radius: 6px; + cursor: pointer; + font-size: 16px; + font-weight: 600; + transition: 0.2s; +} + +button:hover { + background-color: #0069d9; +} + +/* Optional: responsive adjustments */ +@media (max-width: 768px) { + .main { + margin-left: 0; + width: 100%; + padding: 20px; + } + + select { + max-width: 100%; + } +} diff --git a/static/css/itr_report.css b/static/css/itr_report.css new file mode 100644 index 0000000..8cbe77e --- /dev/null +++ b/static/css/itr_report.css @@ -0,0 +1,207 @@ +/* ================= GLOBAL ================= */ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + background-color: #f4f7f9; + margin: 0; + padding: 0; + display: flex; +} + +a { + text-decoration: none !important; + color: #007bff; +} + +/* ================= NAVBAR ================= */ +.navbar { + width: 100%; + height: 60px; + background-color: #007bff; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + position: fixed; + top: 0; + left: 0; + color: white; + z-index: 1000; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} + +.nav-left { + display: flex; + align-items: center; + gap: 15px; +} + +.nav-logo { + height: 80px; + filter: brightness(0) invert(1); +} + +.toggle-btn { + font-size: 26px; + cursor: pointer; +} + +/* ================= SIDEBAR ================= */ +.sidebar { + width: 250px; + background: white; + height: calc(100vh - 60px); + position: fixed; + top: 60px; + left: 0; + padding-top: 20px; + overflow-y: auto; + border-right: 1px solid #d6d6d6; + display: flex; + flex-direction: column; +} + +.sidebar.hide { + left: -250px; +} + +.menu-items { + flex: 1; + display: flex; + flex-direction: column; + padding-bottom: 20px; +} + +.menu-btn { + padding: 14px 20px; + font-size: 17px; + color: #007bff; + cursor: pointer; + border-bottom: 1px solid #e5e5e5; + transition: 0.2s; + font-weight: 600; +} + +.menu-btn:hover { + background: #e9f3ff; +} + +.submenu { + display: none; + background: #f4faff; +} + +.submenu a { + display: block; + padding: 12px 35px; + color: #0056b3; + border-bottom: 1px solid #e2eaff; + transition: 0.2s; +} + +.submenu a:hover { + background: #e9f3ff; +} + +.sidebar-logout { + margin-top: auto; + padding: 10px 16px; + background: #007bff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; + color: white; + cursor: pointer; + transition: 0.2s; +} + +.sidebar-logout:hover { + background: #006ae6; +} + +.logout-icon { + width: 22px; + height: 22px; +} + +/* ================= MAIN ================= */ +.main { + margin-left: 260px; + margin-top: 80px; + padding: 30px; + width: calc(100% - 260px); +} + +.container { + max-width: 600px; + margin: auto; + background: #fff; + padding: 35px 40px; + border-radius: 10px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + text-align: center; +} + +h2 { + color: #2c3e50; + margin-bottom: 25px; + font-weight: 600; +} + +/* ================= FORM ELEMENTS ================= */ +label { + font-weight: 600; + display: block; + margin-top: 10px; + color: #333; +} + +select { + padding: 10px 14px; + border: 1px solid #ccc; + border-radius: 6px; + width: 100%; + max-width: 250px; + margin-top: 8px; + font-size: 16px; + color: #333; + cursor: pointer; + transition: 0.2s; +} + +select:focus { + border-color: #007bff; + box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.2); + outline: none; +} + +/* ================= BUTTONS ================= */ +button { + margin-top: 25px; + padding: 12px 25px; + background-color: #007bff; + color: white; + border: none; + border-radius: 6px; + cursor: pointer; + font-size: 16px; + font-weight: 600; + transition: 0.2s; +} + +button:hover { + background-color: #0069d9; +} + +/* Optional: responsive adjustments */ +@media (max-width: 768px) { + .main { + margin-left: 0; + width: 100%; + padding: 20px; + } + + select { + max-width: 100%; + } +} diff --git a/static/css/report.css b/static/css/report.css new file mode 100644 index 0000000..d1f4bfa --- /dev/null +++ b/static/css/report.css @@ -0,0 +1,76 @@ +/* ================= GLOBAL ================= */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Segoe UI", sans-serif; +} + +body { + background: #f4f7f6; + display: flex; +} + +a { + text-decoration: none !important; + color: #007bff; +} + +/* ================= MAIN CONTENT ================= */ +.main { + margin-left: 20px; + padding: 8px; + width: calc(100% - 50px); + margin-top: 50px; + position: relative; + z-index: 5; + transition: 0.3s; +} + +.container { + background: white; + padding: 30px; + width: 95%; + margin: auto; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +h2 { + text-align: center; + margin-bottom: 20px; + color: #007bff; +} + +ul { + list-style: none; + padding-left: 0; + margin-top: 20px; + text-align: center; +} + +ul li { + margin: 14px 0; +} + +ul li a { + color: #007bff; + font-size: 18px; + font-weight: 600; + transition: 0.2s; +} + +ul li a:hover { + color: #0056b3; + text-decoration: underline; +} + + +/* ================= RESPONSIVE ================= */ +@media (max-width: 768px) { + .main { + margin-left: 0; + width: 100%; + padding: 20px; + } +} \ No newline at end of file diff --git a/static/css/summary.css b/static/css/summary.css new file mode 100644 index 0000000..9006454 --- /dev/null +++ b/static/css/summary.css @@ -0,0 +1,72 @@ +/* ================= FORM ELEMENTS ================= */ +form label { + display: block; + margin-top: 10px; + font-weight: bold; + color: #333; +} + +select { + width: 100%; + padding: 10px 12px; + border: 1px solid #ccc; + border-radius: 6px; + margin-top: 6px; + font-size: 15px; + background-color: white; + cursor: pointer; + transition: 0.2s; +} + +select:focus { + border-color: #007bff; + box-shadow: 0 0 5px rgba(0, 123, 255, 0.5); + outline: none; +} + +/* ================= BUTTONS ================= */ +button { + margin-top: 20px; + padding: 10px 18px; + background-color: #007bff; + color: white; + border: none; + cursor: pointer; + border-radius: 6px; + font-size: 15px; + font-weight: 600; + transition: 0.3s; +} + +button:hover { + background-color: #0069d9; +} + + +.main { + margin-left: 20px; + padding: 8px; + width: calc(100% - 50px); + margin-top: 50px; + position: relative; + z-index: 5; + transition: 0.3s; +} + +/* ================= BACK BUTTON ================= */ +.back-btn { + display: inline-block; + margin-bottom: 20px; + padding: 10px 18px; + background-color: #007bff; + color: white; + font-size: 15px; + font-weight: 600; + border-radius: 6px; + text-decoration: none; + transition: 0.3s; +} + +.back-btn:hover { + background-color: #006ae6; +} diff --git a/static/css/upload.css b/static/css/upload.css new file mode 100644 index 0000000..24ae8b1 --- /dev/null +++ b/static/css/upload.css @@ -0,0 +1,202 @@ +/* ================= GLOBAL ================= */ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: "Segoe UI", sans-serif; +} + +body { + background: #f4f7f6; + display: flex; +} + +a { + text-decoration: none !important; +} + +/* ================= NAVBAR ================= */ +.navbar { + width: 100%; + height: 60px; + background-color: #007bff; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + position: fixed; + top: 0; + left: 0; + color: white; + z-index: 1000; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} + +.nav-left { + display: flex; + align-items: center; + gap: 15px; +} + +.nav-logo { + height: 80px; + filter: brightness(0) invert(1); +} + +.toggle-btn { + font-size: 26px; + cursor: pointer; +} + +/* ================= SIDEBAR ================= */ +.sidebar { + width: 250px; + background: white; /* ← clean white sidebar */ + height: calc(100vh - 60px); + position: fixed; + top: 60px; + left: 0; + padding-top: 20px; + overflow-y: auto; + border-right: 1px solid #d6d6d6; + display: flex; + flex-direction: column; + z-index: 0; +} + +.sidebar.hide { + left: -250px; +} + +.menu-items { + flex: 1; + display: flex; + flex-direction: column; + padding-bottom: 20px; +} + +.menu-btn { + padding: 14px 20px; + font-size: 17px; + color: #007bff; /* blue text */ + cursor: pointer; + border-bottom: 1px solid #e5e5e5; + transition: 0.2s; + font-weight: 600; +} + +.menu-btn:hover { + background: #e9f3ff; /* light blue hover */ +} + +.submenu { + display: none; + background: #f4faff; /* very light blue */ +} + +.submenu a { + display: block; + padding: 12px 35px; + color: #0056b3; + border-bottom: 1px solid #e2eaff; + transition: 0.2s; +} + +.submenu a:hover { + background: #e9f3ff; +} + +.sidebar-logout { + margin-top: auto; + padding: 10px 16px; + background: #007bff; + display: flex; + justify-content: center; + align-items: center; + border-radius: 6px; + color: white; +} + +.sidebar-logout:hover { + background: #006ae6; +} + +.logout-icon { + width: 22px; + height: 22px; +} + +/* ================= MAIN CONTENT ================= */ +.main { + margin-left: 20px; + padding: 8px; + width: calc(100% - 50px); + margin-top: 50px; + position: relative; + z-index: 5; + transition: 0.3s; +} + +/* ================= FORM CONTAINER ================= */ +.container { + background: white; + padding: 30px; + width: 95%; + margin: auto; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); +} + +h2 { + text-align: center; + margin-bottom: 20px; + color: #007bff; /* blue heading */ +} + +form label { + display: block; + margin-top: 10px; + font-weight: bold; + color: #333; +} + +form input, +select { + width: 100%; + padding: 10px; + margin-top: 6px; + border: 1px solid #ccc; + border-radius: 6px; +} + +/* ================= BUTTONS ================= */ +button { + margin-top: 20px; + padding: 10px 18px; + background-color: #007bff; + color: white; + border: none; + cursor: pointer; + border-radius: 6px; + font-size: 15px; +} + +button:hover { + background-color: #0069d9; +} + +.back-btn { + display: inline-block; + margin-bottom: 20px; + padding: 10px 18px; + background: #007bff; + color: white; + font-size: 15px; + font-weight: 600; + border-radius: 6px; + transition: 0.3s; +} + +.back-btn:hover { + background: #006ae6; +} diff --git a/static/images/lcepllogo.png b/static/images/lcepllogo.png new file mode 100644 index 0000000..b4872e4 Binary files /dev/null and b/static/images/lcepllogo.png differ diff --git a/static/images/logo_latest.png b/static/images/logo_latest.png new file mode 100644 index 0000000..9026231 Binary files /dev/null and b/static/images/logo_latest.png differ diff --git a/static/images/logout_icon.png b/static/images/logout_icon.png new file mode 100644 index 0000000..81007d5 Binary files /dev/null and b/static/images/logout_icon.png differ diff --git a/static/js/ao_calc.js b/static/js/ao_calc.js index 5c146e4..04ade9c 100644 --- a/static/js/ao_calc.js +++ b/static/js/ao_calc.js @@ -1,69 +1,81 @@ document.addEventListener("DOMContentLoaded", function () { - function getVal(id) { - return parseFloat(document.getElementsByName(id)[0].value) || 0; + function getValue(id) { + var el = document.getElementsByName(id)[0]; + return el ? parseFloat(el.value) || 0 : 0; } - function setVal(id, value) { - document.getElementsByName(id)[0].value = Number(value).toFixed(2); + function setValue(id, val) { + var el = document.getElementsByName(id)[0]; + if (el) el.value = Number(val).toFixed(2); } 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 INPUTS --- + var gross_total_income = getValue("gross_total_income"); + var disallowance_14a = getValue("disallowance_14a"); + var disallowance_37 = getValue("disallowance_37"); - // Deductions - let d80_business = getVal("deduction_80ia_business"); - let deduction_sec37 = getVal("deduction_sec37_disallowance"); - let deduction_80g = getVal("deduction_80g"); + // // Auto-calculations (your logic) + // setValue("gross_total_income", disallowance_37 + gross_total_income); + // setValue("disallowance_37", disallowance_14a + disallowance_37); - // Total Deduction - let total_deductions = d80_business + deduction_sec37; + var gross_total = gross_total_income + disallowance_37 + disallowance_14a + console.log("gross_total income:: " + gross_total) - // Net Taxable Income - let net_taxable_income = - (gross_total_income + disallowance_14a + disallowance_37) - - total_deductions - - deduction_80g; + // --- DEDUCTIONS --- + var d80_business = getValue("deduction_80ia_business"); + var d80_misc = getValue("deduction_80ia_misc"); + var d80_other = getValue("deduction_80ia_other"); - setVal("net_taxable_income", net_taxable_income); + var deduction_sec37 = d80_business + d80_misc + d80_other; + setValue("deduction_sec37_disallowance", deduction_sec37); - // Tax @ 30% - let tax_30_percent = net_taxable_income * 0.30; - setVal("tax_30_percent", tax_30_percent); + var deduction_80g = getValue("deduction_80g"); - // Surcharge @ 12% - let surcharge_12 = tax_30_percent * 0.12; - setVal("surcharge_12", surcharge_12); + // --- NET TAXABLE INCOME --- + var net_taxable_income = gross_total - deduction_sec37 - deduction_80g; + setValue("net_taxable_income", net_taxable_income); - // Education Cess @ 3% - let edu_cess_3 = (tax_30_percent + surcharge_12) * 0.03; - setVal("edu_cess_3", edu_cess_3); + // --- TAX 30% --- + var tax30 = net_taxable_income * 0.30; + setValue("tax_30_percent", tax30); - // Total Tax Payable - let total_tax_payable = tax_30_percent + surcharge_12 + edu_cess_3; - setVal("total_tax_payable", total_tax_payable); + // --- TAX PAYABLE (18.5%) --- + var tax185 = getValue("tax_book_profit_18_5"); - // MAT, Interest - let mat_credit = getVal("mat_credit"); - let interest_234c = getVal("interest_234c"); + var tax_payable = (tax30 > tax185) ? tax30 : tax185; + setValue("tax_payable", tax_payable); - let total_tax = total_tax_payable + mat_credit + interest_234c; - setVal("total_tax", total_tax); + // --- SURCHARGE --- + var percent = getValue("persentage"); + var surcharge = tax_payable * (percent / 100); + setValue("surcharge_12", surcharge); - // Advance, TDS, TCS - let advance_tax = getVal("advance_tax"); - let tds = getVal("tds"); - let tcs = getVal("tcs"); + var edu_cess = (tax_payable + surcharge) * 0.03; + setValue("edu_cess_3", edu_cess); - let tax_on_assessment = advance_tax + tds + tcs; - setVal("tax_on_assessment", tax_on_assessment); + // --- total tax payable --- + var total_tax_payable = tax_payable + surcharge + edu_cess; + setValue("total_tax_payable", total_tax_payable); - // Refund / Payablesss - let refund = total_tax - tax_on_assessment; - setVal("refund", refund); + // --- FINAL TAX --- + var mat_credit = getValue("mat_credit"); + var interest_234c = getValue("interest_234c"); + + var total_tax = total_tax_payable + mat_credit + interest_234c; + setValue("total_tax", total_tax); + + // --- ASSESSMENT --- + var adv_tax = getValue("advance_tax"); + var tds = getValue("tds"); + var tcs = getValue("tcs"); + + var tax_on_assessment = adv_tax + tds + tcs; + setValue("tax_on_assessment", tax_on_assessment); + + var refund = total_tax - tax_on_assessment; + setValue("refund", refund); }; }); diff --git a/static/js/cit_calc.js b/static/js/cit_calc.js index 176f7a0..b18503e 100644 --- a/static/js/cit_calc.js +++ b/static/js/cit_calc.js @@ -1,74 +1,89 @@ 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) { - var el = document.getElementsByName(id)[0]; + let el = document.getElementsByName(id)[0]; return el ? parseFloat(el.value) || 0 : 0; } function setVal(id, value) { - var el = document.getElementsByName(id)[0]; + let el = document.getElementsByName(id)[0]; if (el) el.value = Number(value).toFixed(2); } - // MAIN CALC FUNCTION - window.calculate = function () { + function calculate() { - // BASIC VALUES - var gross_total_income = getVal("gross_total_income"); - var disallowance_14a = getVal("disallowance_14a"); - var disallowance_37 = getVal("disallowance_37"); + // Base values + let gross_total_income = getVal("gross_total_income"); + let disallowance_14a = getVal("disallowance_14a"); + let disallowance_37 = getVal("disallowance_37"); - var d80_business = getVal("deduction_80ia_business"); - var deduction_sec37 = getVal("deduction_sec37_disallowance"); - var deduction_80g = getVal("deduction_80g"); + // Deductions + let d80_business = getVal("deduction_80ia_business"); + let deduction_sec37 = getVal("deduction_sec37_disallowance"); + let deduction_80g = getVal("deduction_80g"); - // NET TAXABLE INCOME - var net_taxable_income = + // Net Taxable Income + let net_taxable_income = (gross_total_income + disallowance_14a + disallowance_37) - (d80_business + deduction_sec37) - deduction_80g; setVal("net_taxable_income", net_taxable_income); - // TAX @ 30% - var tax_30_percent = net_taxable_income * 0.30; + // 30% tax + let tax_30_percent = net_taxable_income * 0.30; setVal("tax_30_percent", tax_30_percent); - // TAX PAYABLE = 18.5% BOOK PROFIT (user enters) - var tax_payable = getVal("tax_book_profit_18_5"); + // Book profit tax (user input) + let tax_payable = getVal("tax_book_profit_18_5"); setVal("tax_payable", tax_payable); - // SURCHARGE - var surcharge_12 = tax_payable * 0.12; + // Surcharge 12% + let surcharge_12 = tax_payable * 0.12; setVal("surcharge_12", surcharge_12); - // CESS - var edu_cess_3 = (tax_payable + surcharge_12) * 0.03; + // Education Cess 3% + let edu_cess_3 = (tax_payable + surcharge_12) * 0.03; setVal("edu_cess_3", edu_cess_3); - // TOTAL TAX PAYABLE - var total_tax_payable = tax_payable + surcharge_12 + edu_cess_3; + // Total Tax Payable + let total_tax_payable = tax_payable + surcharge_12 + edu_cess_3; setVal("total_tax_payable", total_tax_payable); - // OTHER VALUES - var mat_credit = getVal("mat_credit"); - var interest_234c = getVal("interest_234c"); + // MAT + Interest + let mat_credit = getVal("mat_credit"); + let interest_234c = getVal("interest_234c"); - // FINAL TAX - var total_tax = total_tax_payable + mat_credit + interest_234c; + // Total Tax + let total_tax = total_tax_payable + mat_credit + interest_234c; setVal("total_tax", total_tax); - // PAYMENTS - var advance_tax = getVal("advance_tax"); - var tds = getVal("tds"); - var tcs = getVal("tcs"); + // Assessment β†’ Advance Tax + TDS + TCS + let advance_tax = getVal("advance_tax"); + let tds = getVal("tds"); + let tcs = getVal("tcs"); - var tax_on_assessment = advance_tax + tds + tcs; + let tax_on_assessment = advance_tax + tds + tcs; setVal("tax_on_assessment", tax_on_assessment); - // REFUND - var refund = total_tax - tax_on_assessment; + // Refund (or payable) + let 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 2be2e9c..f603bd1 100644 --- a/static/js/itr_calc.js +++ b/static/js/itr_calc.js @@ -18,8 +18,11 @@ document.addEventListener("DOMContentLoaded", function () { var disallowance_37 = getValue("disallowance_37"); // // Auto-calculations (your logic) - setValue("gross_total_income", disallowance_37 + gross_total_income); - setValue("disallowance_37", disallowance_14a + disallowance_37); + // setValue("gross_total_income", disallowance_37 + gross_total_income); + // setValue("disallowance_37", disallowance_14a + disallowance_37); + + var gross_total = gross_total_income + disallowance_37 + disallowance_14a + console.log("gross_total income:: " + gross_total) // --- DEDUCTIONS --- var d80_business = getValue("deduction_80ia_business"); @@ -32,23 +35,29 @@ document.addEventListener("DOMContentLoaded", function () { var deduction_80g = getValue("deduction_80g"); // --- NET TAXABLE INCOME --- - var net_taxable_income = gross_total_income - deduction_sec37 - deduction_80g; + var net_taxable_income = gross_total - deduction_sec37 - deduction_80g; setValue("net_taxable_income", net_taxable_income); // --- TAX 30% --- - setValue("tax_30_percent", net_taxable_income * 0.30); + var tax30 = net_taxable_income * 0.30; + setValue("tax_30_percent", tax30); // --- TAX PAYABLE (18.5%) --- - var tax_book = getValue("tax_book_profit_18_5"); - setValue("tax_payable", tax_book); + var tax185 = getValue("tax_book_profit_18_5"); - var surcharge = tax_book * 0.12; + var tax_payable = (tax30 > tax185) ? tax30 : tax185; + setValue("tax_payable", tax_payable); + + // --- SURCHARGE --- + var percent = getValue("persentage"); + var surcharge = tax_payable * (percent / 100); setValue("surcharge_12", surcharge); - var edu_cess = (tax_book + surcharge) * 0.03; + var edu_cess = (tax_payable + surcharge) * 0.03; setValue("edu_cess_3", edu_cess); - var total_tax_payable = tax_book + surcharge + edu_cess; + // --- total tax payable --- + var total_tax_payable = tax_payable + surcharge + edu_cess; setValue("total_tax_payable", total_tax_payable); // --- FINAL TAX --- diff --git a/static/js/toggle.js b/static/js/toggle.js new file mode 100644 index 0000000..2a25f18 --- /dev/null +++ b/static/js/toggle.js @@ -0,0 +1,61 @@ +const sidebar = document.getElementById("sidebar"); +const main = document.getElementById("main"); + +// Track toggle manually +let isSidebarOpen = true; + +// Toggle sidebar normally +function toggleSidebar() { + isSidebarOpen = !isSidebarOpen; + + sidebar.classList.toggle("hide", !isSidebarOpen); + + // Add temporary transition only during toggle + main.style.transition = "margin-left 0.3s ease"; + sidebar.style.transition = "left 0.3s ease"; + + // Adjust main margin + main.style.marginLeft = isSidebarOpen ? "260px" : "20px"; + + // Remove transitions after animation to avoid disturbance + setTimeout(() => { + main.style.transition = "none"; + sidebar.style.transition = "none"; + }, 300); +} + +// Toggle submenu β€” also force sidebar to open if it is hidden +function toggleMenu(id) { + const menu = document.getElementById(id); + if (!menu) return; + + // πŸ‘‰ If sidebar is collapsed, open it automatically + if (!isSidebarOpen) { + isSidebarOpen = true; + sidebar.classList.remove("hide"); + main.style.marginLeft = "260px"; + } + + // Close all other submenus + document.querySelectorAll(".submenu").forEach(sm => { + if (sm !== menu) sm.style.display = "none"; + }); + + // Toggle the clicked submenu instantly + menu.style.display = menu.style.display === "block" ? "none" : "block"; +} + +// Remove transition when clicking submenu links +document.querySelectorAll(".submenu a").forEach(link => { + link.addEventListener("click", () => { + main.style.transition = "none"; + sidebar.style.transition = "none"; + }); +}); + +// Initialize sidebar as open when page loads +window.addEventListener("DOMContentLoaded", () => { + sidebar.classList.remove("hide"); + main.style.marginLeft = "260px"; + isSidebarOpen = true; +}); diff --git a/static/js/year_dropdown.js b/static/js/year_dropdown.js index 2431b93..eec638e 100644 --- a/static/js/year_dropdown.js +++ b/static/js/year_dropdown.js @@ -38,7 +38,7 @@ document.addEventListener("DOMContentLoaded", function () { .then(data => { if (data.exists) { errorDiv.style.display = "block"; - errorDiv.innerText = `Year ${selectedYear} already exists!`; + errorDiv.innerText = `Year ${selectedYear}-${selectedYear + 1} already exists!`; // Block submission form.onsubmit = function () { return false; }; @@ -49,3 +49,4 @@ document.addEventListener("DOMContentLoaded", function () { }); }); }); + diff --git a/static/uploads/AY_18-19_REfund_Working.xlsx b/static/uploads/AY_18-19_REfund_Working.xlsx index 41a6ff9..a07486c 100644 Binary files a/static/uploads/AY_18-19_REfund_Working.xlsx and b/static/uploads/AY_18-19_REfund_Working.xlsx differ diff --git a/static/uploads/Contractor_Report_194.xlsx b/static/uploads/Contractor_Report_194.xlsx deleted file mode 100644 index 5c88582..0000000 Binary files a/static/uploads/Contractor_Report_194.xlsx and /dev/null differ diff --git a/static/uploads/Feedback_Report_Form.pdf b/static/uploads/Feedback_Report_Form.pdf deleted file mode 100644 index 6332c81..0000000 Binary files a/static/uploads/Feedback_Report_Form.pdf and /dev/null differ diff --git a/static/uploads/ITR_Report_2001_4.xlsx b/static/uploads/ITR_Report_2001_4.xlsx deleted file mode 100644 index 9d54499..0000000 Binary files a/static/uploads/ITR_Report_2001_4.xlsx and /dev/null differ diff --git a/static/uploads/LaxmiBrochure_Concept_VishalMistry_17Nov.pdf b/static/uploads/LaxmiBrochure_Concept_VishalMistry_17Nov.pdf deleted file mode 100644 index 73e2387..0000000 Binary files a/static/uploads/LaxmiBrochure_Concept_VishalMistry_17Nov.pdf and /dev/null differ diff --git a/static/uploads/Rakesh_Kumar1.xlsx b/static/uploads/Rakesh_Kumar1.xlsx deleted file mode 100644 index 8d83dcc..0000000 Binary files a/static/uploads/Rakesh_Kumar1.xlsx and /dev/null differ diff --git a/static/uploads/unmatched_result_1.xlsx b/static/uploads/unmatched_result_1.xlsx new file mode 100644 index 0000000..c585782 Binary files /dev/null and b/static/uploads/unmatched_result_1.xlsx differ diff --git a/templates/add_ao.html b/templates/add_ao.html index 8f04327..031aa53 100644 --- a/templates/add_ao.html +++ b/templates/add_ao.html @@ -1,58 +1,166 @@ - - +{% extends "base.html" %} - - Add New AO Record - - - +{% block title %}Add New AO Record{% endblock %} +{% block extra_css %} + + +{% endblock %} - +{% block content %} +
- -
- - ← Back to Dashboard +

New Assessing Officer Form

+
+
+ + +
+ -

AO Form Entry

- - +
+ + +
-
- - +
+
+ +
- - - - {% for field in [ - "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" - ] %} - - - - {% endfor %} - - -
+
+ + +
- - - +
+ + +
- \ No newline at end of file +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+
+ + +
+ + + +
+ +{% block extra_js %} + + + +{% endblock %} + + + +{% endblock %} \ No newline at end of file diff --git a/templates/add_cit.html b/templates/add_cit.html index e778112..a518f16 100644 --- a/templates/add_cit.html +++ b/templates/add_cit.html @@ -1,54 +1,159 @@ - - +{% extends "base.html" %} - - CIT Form Entry - - - +{% block title %}CIT Form Entry{% endblock %} - +{% block extra_css %} + + +{% endblock %} +{% block content %} +
- -
- - ← Back to Dashboard +

New CIT Form

+
+
+ + +
+ -

CIT Form Entry

- - - -
- - +
+ + +
+
+
+ +
- + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
- {% for field in [ - "gross_total_income", "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" - ] %} - - - {% endfor %} - - +
+ + +
-
+
+ + +
- - +
+ + +
- \ No newline at end of file +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + +
+{% endblock %} + +{% block extra_js %} + + + +{% endblock %} \ No newline at end of file diff --git a/templates/add_itat.html b/templates/add_itat.html index 0eb777e..b953fd2 100644 --- a/templates/add_itat.html +++ b/templates/add_itat.html @@ -1,55 +1,49 @@ - - +{% extends "base.html" %} - - Add New ITAT Record - - +{% block title %}Add New ITAT Record{% endblock %} - +{% block extra_css %} + + +{% endblock %} - -
- - ← Back to Dashboard +{% block content %} +
-

ITAT Form Entry

-
- +

New Income Tax Appellate Tribunal Form

-
- - -
+ - + + + - - + + - - + + - - + + - - + + - -
-
+ + +
+{% endblock %} - - +{% block extra_js %} + + + +{% endblock %} - \ No newline at end of file + \ No newline at end of file diff --git a/templates/add_itr.html b/templates/add_itr.html index 01cfee5..f84f3c4 100644 --- a/templates/add_itr.html +++ b/templates/add_itr.html @@ -1,56 +1,158 @@ - - +{% extends "base.html" %} - - - Add New Income Tax Return Record - - - +{% block title %}Add New Income Tax Return Record{% endblock %} - +{% block extra_css %} + + +{% endblock %} - -
- - ← Back to Dashboard +{% block content %} +
+

New Income Tax Return Form

+ +
+
+ + +
+ + +
+ + +
+
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
-

Add New Income Tax Return Record

- - +
+ + +
-
- - -
- +
+ + +
- {% for field in [ - "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" - ] %} - +
+ + +
-
- - -
- {% endfor %} +
+ + +
- +
+ + +
+ +
+ + +
+ +
+
+ + +
+
+ + +
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
-
- +
+{% endblock %} - + +{% endblock %} \ No newline at end of file diff --git a/templates/ao_reports.html b/templates/ao_reports.html index 0f39d50..8b23b5f 100644 --- a/templates/ao_reports.html +++ b/templates/ao_reports.html @@ -1,81 +1,41 @@ - - +{% extends "base.html" %} - - Download AO Reports - - - - - +{% block content %} +
- - ← Back to Dashboard

Download AO Report

+
- -
+
+ -

- -
-
- - \ No newline at end of file +
+ + + + + +
+
+{% block scripts %} + + +{% endblock %} + +{% block extra_js %} +{% endblock %} +{% endblock %} diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..2578ac0 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,77 @@ + + + + + {% block title %}Income Tax Utilities{% endblock %} + + + + + + {% block extra_css %}{% endblock %} + + + + + + + + + + +
+ {% block content %}{% endblock %} +
+ + + + + + {% block extra_js %}{% endblock %} + + diff --git a/templates/cit_reports.html b/templates/cit_reports.html index 47dddb8..0c50921 100644 --- a/templates/cit_reports.html +++ b/templates/cit_reports.html @@ -1,81 +1,41 @@ - - +{% extends "base.html" %} - - Download CIT Reports - - - - - +{% block content %} +
- - ← Back to Dashboard

Download CIT Report

+
- -
+
+ -

- -
-
- - \ No newline at end of file +
+ + + + +
+
+{% block scripts %} + + +{% endblock %} + +{% block extra_js %} +{% endblock %} +{% endblock %} + diff --git a/templates/display_ao.html b/templates/display_ao.html index dbc1982..c5f2809 100644 --- a/templates/display_ao.html +++ b/templates/display_ao.html @@ -1,190 +1,53 @@ - - +{% extends "base.html" %} - - - - ← Back to Dashboard +{% block title %}AO Records{% endblock %} - AO Records - - - - -
- - - - -

Assessing Officer Records πŸ‘¨β€πŸ’Ό

- - - {% with messages = get_flashed_messages(with_categories=true) %} - {% if messages %} - {% for category, message in messages %} -
{{ message }}
- {% endfor %} - {% endif %} - {% endwith %} - - βž• Add AO Record + + {% if ao_records %}
- - - - - - - - - - - - - {% for ao in ao_records %} - - - - - - - - - {% endfor %} - -
IDYearGross Total IncomeNet Taxable IncomeTotal TaxActions
{{ ao.id }}{{ ao.year }}{{ ao.gross_total_income }}{{ ao.net_taxable_income }}{{ ao.total_tax }} - Edit -
- -
-
+ + + + + + + + + + + + {% for ao in ao_records %} + + + + + + + + {% endfor %} + +
YearGross Total IncomeNet Taxable IncomeTotal TaxActions
AY {{ ao.year }}-{{ ao.year+1 }}{{ ao.gross_total_income }}{{ ao.net_taxable_income }}{{ ao.total_tax }} + Edit + +
+ +
+
{% else %} -

No AO records found. Add one above!

+

No AO records found.

{% endif %} -
- - - \ No newline at end of file +
+{% endblock %} \ No newline at end of file diff --git a/templates/display_cit.html b/templates/display_cit.html index 77aab11..7c700bb 100644 --- a/templates/display_cit.html +++ b/templates/display_cit.html @@ -1,122 +1,18 @@ - - +{% extends "base.html" %} - - - CIT Records - - - - +{% block content %} + + +
- - ← Back to Dashboard - - -

CIT Records 🧾

- βž• Add New Record +

CIT Records🧾

+ {% if cit_records %}
@@ -133,14 +29,13 @@ {% for record in cit_records %} - +
{{ record.year }}AY {{ record.year }}-{{ record.year+1 }} {{ "{:,.2f}".format(record.gross_total_income) }} {{ "{:,.2f}".format(record.net_taxable_income) }} {{ "{:,.2f}".format(record.total_tax_payable) }} {{ "{:,.2f}".format(record.refund) }} Edit -
@@ -151,10 +46,16 @@
+ {% else %} -

No records found. Click the button above to add one!

+

+ No records found. Click the button above to add one! +

{% endif %}
- +
+{% endblock %} - \ No newline at end of file +{% block scripts %} + +{% endblock %} \ No newline at end of file diff --git a/templates/display_itat.html b/templates/display_itat.html index 51f10e7..37c7245 100644 --- a/templates/display_itat.html +++ b/templates/display_itat.html @@ -1,169 +1,75 @@ - - +{% extends "base.html" %} - - - ITAT Records - - - - +{% block content %} +
- - ← Back to Dashboard +

Income Tax Appellate Tribunal Records πŸ“„

+
-

ITAT Records πŸ“„

- βž• Add New Record + βž• Add New Record - {% with messages = get_flashed_messages(with_categories=true) %} - {% if messages %} - {% for category, message in messages %} -
{{ message }}
- {% endfor %} - {% endif %} - {% endwith %} + + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + {% for category, message in messages %} +
{{ message }}
+ {% endfor %} + {% endif %} + {% endwith %} - {% if records %} -
- - - - - - - - - - - - - {% for record in records %} - - - - - - - - - {% endfor %} - -
YearMAT Tax CreditSurchargeCessTotal CreditActions
{{ record.year }}{{ "{:,.2f}".format(record.mat_tax_credit) }}{{ "{:,.2f}".format(record.surcharge) }}{{ "{:,.2f}".format(record.cess) }}{{ "{:,.2f}".format(record.total_credit) }} - Edit + + {% if records %} +
+ + + + + + + + + + + + + {% for record in records %} + + + + + + + + + {% endfor %} + +
YearMAT Tax CreditSurchargeCessTotal CreditActions
AY {{ record.year }}-{{ record.year+1 }}{{ "{:,.2f}".format(record.mat_tax_credit) }}{{ "{:,.2f}".format(record.surcharge) }}{{ "{:,.2f}".format(record.cess) }}{{ "{:,.2f}".format(record.total_credit) }} + Edit + + + + +
+
+ + {% else %} +

No ITAT records found. Click the button above to add one!

+ {% endif %} -
- -
-
- {% else %} -

No ITAT records found. Click the button above to add one!

- {% endif %}
- + {% endblock %} - \ No newline at end of file + {% block scripts %} + + {% endblock %} \ No newline at end of file diff --git a/templates/display_itr.html b/templates/display_itr.html index 6087ea8..85beb5f 100644 --- a/templates/display_itr.html +++ b/templates/display_itr.html @@ -1,159 +1,56 @@ - - +{% extends "base.html" %} - - - ITR Records - - - - -
- - ← Back to Dashboard - -

Income Tax Return Records 🧾

+

Income Tax Return Records 🧾

+
βž• Add New Record - - {% if records %} -
- - - - - - - - - - - - - {% for record in records %} - - - - - - - - - {% endfor %} - -
YearGross Total IncomeNet Taxable IncomeTotal Tax PayableRefundActions
{{ record.year }}{{ "{:,.2f}".format(record.gross_total_income) }}{{ "{:,.2f}".format(record.net_taxable_income) }}{{ "{:,.2f}".format(record.total_tax_payable) }}{{ "{:,.2f}".format(record.refund) }} - Edit - -
- -
-
-
- {% else %} -

No records found. Click the button above to add one!

- {% endif %}
- - \ No newline at end of file + {% if records %} +
+ + + + + + + + + + + + + {% for record in records %} + + + + + + + + + {% endfor %} + +
YearGross Total IncomeNet Taxable IncomeTotal Tax PayableRefundActions
AY {{ record.year }}-{{record.year+1}}{{ "{:,.2f}".format(record.gross_total_income) }}{{ "{:,.2f}".format(record.net_taxable_income) }}{{ "{:,.2f}".format(record.total_tax_payable) }}{{ "{:,.2f}".format(record.refund) }} + Edit +
+ +
+
+
+ {% else %} +

+ No records found. Click the button above to add one! +

+ {% endif %} +
+{% endblock %} \ No newline at end of file diff --git a/templates/index.html b/templates/index.html index a1ce37a..948d9f3 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1,146 +1,12 @@ - - +{% extends "base.html" %} - - - Dashboard | Income Tax Utilities - - - - - -
-

Dashboard πŸ›οΈ

- - - -
-

AO (Assessing Officer)

- -
- -
-

CIT (Commissioner of Income Tax)

- -
- -
-

ITAT (Income Tax Appellate Tribunal)

- -
- - -
- - - \ No newline at end of file +{% block content %} +
+

Dashboard πŸ›οΈ

+

+ Welcome to Income Tax Utilities Dashboard +

+
+{% endblock %} diff --git a/templates/itat_reports.html b/templates/itat_reports.html index 7126daf..f10600f 100644 --- a/templates/itat_reports.html +++ b/templates/itat_reports.html @@ -1,83 +1,41 @@ - - +{% extends "base.html" %} - - Download ITAT Reports - - - - - - +{% block content %} +
- - ← Back to Dashboard -

Download ITAT Report

+
- -
+
+ -

- -
-
- - \ No newline at end of file +
+ + + + + +
+
+{% block scripts %} + + +{% endblock %} + +{% block extra_js %} +{% endblock %} +{% endblock %} diff --git a/templates/itr_reports.html b/templates/itr_reports.html index 80fd396..2628a9c 100644 --- a/templates/itr_reports.html +++ b/templates/itr_reports.html @@ -1,82 +1,42 @@ - - +{% extends "base.html" %} - - Download ITR Reports - - - - - +{% block content %} +
- - ← Back to Dashboard -

Download ITR Report

+
- -
+
-

- -
-
- - \ No newline at end of file +
+ + + + + +
+
+{% block scripts %} + + +{% endblock %} + +{% block extra_js %} +{% endblock %} +{% endblock %} diff --git a/templates/login.html b/templates/login.html new file mode 100644 index 0000000..db9b763 --- /dev/null +++ b/templates/login.html @@ -0,0 +1,85 @@ + + + + + LCEPL Income Tax + + + + + + diff --git a/templates/reports.html b/templates/reports.html index 07a88cc..986c871 100644 --- a/templates/reports.html +++ b/templates/reports.html @@ -1,154 +1,19 @@ - - +{% extends "base.html" %} - - Reports Of Stages - - - - - +{% block title %}Reports Of Stages{% endblock %} +{% block extra_css %} + +{% endblock %} +{% block content %} + +{% endblock %} diff --git a/templates/stage_reports.html b/templates/stage_reports.html index c743c4b..4fd933f 100644 --- a/templates/stage_reports.html +++ b/templates/stage_reports.html @@ -128,7 +128,7 @@
- ← Back to Dashboard +

{{ stage }} Reports

diff --git a/templates/summary_reports.html b/templates/summary_reports.html index 311d7d8..7238a5c 100644 --- a/templates/summary_reports.html +++ b/templates/summary_reports.html @@ -1,90 +1,17 @@ - - +{% extends "base.html" %} - - Download Summary Report - - - - +{% block content %} +
- - ← Back to Dashboard + +

Download Year-wise Summary Report

@@ -93,18 +20,24 @@ {% endif %}
- + +
-
- - \ No newline at end of file +
+
+{% block scripts %} + + +{% endblock %} + +{% block extra_js %} +{% endblock %} +{% endblock %} diff --git a/templates/update_ao.html b/templates/update_ao.html index 942f0bf..d75558b 100644 --- a/templates/update_ao.html +++ b/templates/update_ao.html @@ -1,28 +1,48 @@ - - +{% extends "base.html" %} - - - Update AO Record - +{% block title %}Update AO Record{% endblock %} - +{% block extra_css %} + +{% endblock %} - +{% block content %} +
- - ← Back to Dashboard

Update AO Record for Year {{ record.year }}

+
- {% for field in record.keys() if field != 'id' %} - - + + + + + {% for field in record.keys() if field not in ['id', 'year'] %} + + {% endfor %} + + + + + + + + + + + + +
- +
+{% endblock %} - \ No newline at end of file +{% block extra_js %} + + + +{% endblock %} \ No newline at end of file diff --git a/templates/update_cit.html b/templates/update_cit.html index 881fec8..2953221 100644 --- a/templates/update_cit.html +++ b/templates/update_cit.html @@ -1,26 +1,49 @@ - - +{% extends "base.html" %} - - - Update CIT Record - - +{% block title %}Update CIT Record{% endblock %} - -
- - ← Back to Dashboard +{% block extra_css %} + +{% endblock %} -

Update CIT Record for Year {{ record.year }}

-
- {% for field in record.keys() if field != 'id' %} - - - {% endfor %} - -
-
- +{% block content %} - \ No newline at end of file +
+ +

Update CIT Record for AY {{ record.year }}

+ +
+ + + + + {% for field in record.keys() if field not in ['id', 'year'] %} + + + {% endfor %} + + + + + + + + + + + + + + + +
+ +
+ +{% endblock %} + +{% block extra_js %} + + + +{% endblock %} \ No newline at end of file diff --git a/templates/update_itat.html b/templates/update_itat.html index 148b25e..21f80d8 100644 --- a/templates/update_itat.html +++ b/templates/update_itat.html @@ -1,36 +1,41 @@ - - +{% extends "base.html" %} +{% block title %}Update ITAT Record{% endblock %} +{% block extra_css %} + + +{% endblock %} +{% block content %} - - Update ITAT Record - - +
- -
- - ← Back to Dashboard +

Update ITAT Record for Year {{ record.year }}

-

Update ITAT Record for Year {{ record.year }}

-
- - + - - + + - - + + - - + + - - + + - -
-
- + + - \ No newline at end of file + + + +
+ +{% endblock %} + +{% block extra_js %} + + + +{% endblock %} \ No newline at end of file diff --git a/templates/update_itr.html b/templates/update_itr.html index f88c57d..6ec2025 100644 --- a/templates/update_itr.html +++ b/templates/update_itr.html @@ -1,26 +1,48 @@ - - +{% extends "base.html" %} - - - Update ITR Record - +{% block title %}Update ITR Record{% endblock %} - +{% block extra_css %} + +{% endblock %} - +{% block content %} +
- - ← Back to Dashboard -

Update ITR Record for Year {{ record.year }}

-
- {% for field in record.keys() if field != 'id' %} - - - {% endfor %} - -
-
- - \ No newline at end of file +

Update ITR Record for Year {{ record.year }}

+ +
+ + + + + {% for field in record.keys() if field not in ['id', 'year'] %} + + + {% endfor %} + + + + + + + + + + + + + + +
+ +
+
+{% endblock %} + +{% block extra_js %} + + + +{% endblock %} \ No newline at end of file diff --git a/templates/upload.html b/templates/upload.html index 8e1e2ec..4e3a475 100644 --- a/templates/upload.html +++ b/templates/upload.html @@ -1,42 +1,47 @@ - - +{% extends "base.html" %} - - Upload Documents - - - +{% block title %}Upload Documents{% endblock %} - +{% block extra_css %} + +{% endblock %} + +{% block content %} +
- - ← Back to Dashboard -

Upload Income Tax Documents

-
- -
- - -
-
- - -
- + + + + + + + + + + +
-
- - \ No newline at end of file +
+ +{% endblock %} + +{% block scripts %} + + +{% endblock %} + +{% block extra_js %} + +{% endblock %} \ No newline at end of file diff --git a/templates/view_docs.html b/templates/view_docs.html index aebdae5..eef5833 100644 --- a/templates/view_docs.html +++ b/templates/view_docs.html @@ -1,148 +1,25 @@ - - +{% extends "base.html" %} - - View Documents - - - - +
- - ← Back to Dashboard -

Document Records

+
@@ -158,6 +35,7 @@
+ @@ -170,22 +48,33 @@ + {% for doc in documents %} - + - - + + + + {% endfor %}
View
{{ doc.filename }} {{ doc.filetype }} {{ doc.stage }}{{ doc.year }}AY {{ doc.year }}-{{ doc.year +1 }} {{ doc.uploaded_at }}DownloadView + + Download + + + + View + +
-
- - \ No newline at end of file +
+ + +{% endblock %} \ No newline at end of file