modification ui changes base pages,login, manus and from chnages and adding filds. V2 commit

This commit is contained in:
2025-12-29 15:22:15 +05:30
parent 425f213606
commit 4da1e92a70
97 changed files with 4761 additions and 2307 deletions

3
.idea/.gitignore generated vendored
View File

@@ -1,3 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml

8
.idea/New folder.iml generated
View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -1,14 +0,0 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredPackages">
<value>
<list size="1">
<item index="0" class="java.lang.String" itemvalue="pandas" />
</list>
</value>
</option>
</inspection_tool>
</profile>
</component>

View File

@@ -1,6 +0,0 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

7
.idea/misc.xml generated
View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.13 (New folder)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.13 (New folder)" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml generated
View File

@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/New folder.iml" filepath="$PROJECT_DIR$/.idea/New folder.iml" />
</modules>
</component>
</project>

View File

@@ -54,7 +54,7 @@ class AOHandler:
"net_taxable_income", "tax_30_percent", "tax_book_profit_18_5", "net_taxable_income", "tax_30_percent", "tax_book_profit_18_5",
"surcharge_12", "edu_cess_3", "total_tax_payable", "mat_credit", "surcharge_12", "edu_cess_3", "total_tax_payable", "mat_credit",
"interest_234c", "total_tax", "advance_tax", "tds", "tcs", "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] 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", "net_taxable_income", "tax_30_percent", "tax_book_profit_18_5",
"surcharge_12", "edu_cess_3", "total_tax_payable", "mat_credit", "surcharge_12", "edu_cess_3", "total_tax_payable", "mat_credit",
"interest_234c", "total_tax", "advance_tax", "tds", "tcs", "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] values = [id] + [data.get(f, 0) for f in fields]

View File

@@ -41,7 +41,7 @@ class CITHandler:
"year", "gross_total_income", "deduction_80ia_business", "deduction_sec37_disallowance", "year", "gross_total_income", "deduction_80ia_business", "deduction_sec37_disallowance",
"deduction_80g", "net_taxable_income", "tax_30_percent", "tax_book_profit_18_5", "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", "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] values = [data.get(col, 0) for col in columns]
@@ -60,7 +60,7 @@ class CITHandler:
"tax_payable", "surcharge_12", "edu_cess_3", "tax_payable", "surcharge_12", "edu_cess_3",
"total_tax_payable", "mat_credit", "interest_234c", "total_tax_payable", "mat_credit", "interest_234c",
"total_tax", "advance_tax", "tds", "tcs", "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] values = [id] + [data.get(col, 0) for col in columns]

View File

@@ -1,12 +1,12 @@
import mysql.connector import mysql.connector
import os import os
# Database Config
class DBConfig: class DBConfig:
# Database credentials (can also be read from environment variables)
MYSQL_HOST = os.getenv("MYSQL_HOST", "127.0.0.1") MYSQL_HOST = os.getenv("MYSQL_HOST", "127.0.0.1")
MYSQL_USER = os.getenv("MYSQL_USER", "root") MYSQL_USER = os.getenv("MYSQL_USER", "root")
MYSQL_PASSWORD = os.getenv("MYSQL_PASSWORD", "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 @staticmethod
def get_db_connection(): def get_db_connection():

View File

@@ -1,10 +1,18 @@
from AppCode.Config import DBConfig
import mysql.connector import mysql.connector
from AppCode.YearGet import YearGet
import pandas as pd import pandas as pd
import pymysql import pymysql
import io import io
from flask import send_file, render_template, request
# new
from AppCode.Config import DBConfig 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: class ITRHandler:
@@ -36,23 +44,25 @@ class ITRHandler:
for result in self.cursor.stored_results(): for result in self.cursor.stored_results():
records = result.fetchall() records = result.fetchall()
# return single record
if records: if records:
print(records[0]) print(records[0])
return records[0] return records[0] # return single record
return None return None
# INSERT ITR RECORD using procedure "add_itr" # INSERT ITR RECORD using procedure "add_itr"
def add_itr(self, data): def add_itr(self, data):
columns = [ columns = [
'year', 'gross_total_income', 'disallowance_14a', 'disallowance_37', 'year', 'gross_total_income', 'disallowance_14a', 'disallowance_37',
'deduction_80ia_business', 'deduction_80ia_misc', 'deduction_80ia_other', 'deduction_80ia_business', 'deduction_80ia_misc', 'deduction_80ia_other',
'deduction_sec37_disallowance', 'deduction_80g', 'net_taxable_income', 'deduction_sec37_disallowance', 'deduction_80g', 'net_taxable_income',
'tax_30_percent', 'tax_book_profit_18_5', 'tax_payable', 'surcharge_12', 'tax_30_percent', 'tax_book_profit_18_5', 'tax_payable', 'surcharge_12',
'edu_cess_3', 'total_tax_payable', 'mat_credit', 'interest_234c', '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] values = [data.get(col, 0) for col in columns]
@@ -62,7 +72,6 @@ class ITRHandler:
self.conn.commit() self.conn.commit()
def update(self, id, data): def update(self, id, data):
columns = [ columns = [
'year', 'gross_total_income', 'disallowance_14a', 'disallowance_37', 'year', 'gross_total_income', 'disallowance_14a', 'disallowance_37',
@@ -70,7 +79,7 @@ class ITRHandler:
'deduction_sec37_disallowance', 'deduction_80g', 'net_taxable_income', 'deduction_sec37_disallowance', 'deduction_80g', 'net_taxable_income',
'tax_30_percent', 'tax_book_profit_18_5', 'tax_payable', 'surcharge_12', 'tax_30_percent', 'tax_book_profit_18_5', 'tax_payable', 'surcharge_12',
'edu_cess_3', 'total_tax_payable', 'mat_credit', 'interest_234c', '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] values = [id] + [data.get(col, 0) for col in columns]
@@ -88,7 +97,7 @@ class ITRHandler:
self.conn.commit() self.conn.commit()
# dowanload itr report by year
def itr_report_download(self, selected_year): def itr_report_download(self, selected_year):
try: try:
@@ -104,10 +113,14 @@ class ITRHandler:
# Convert SQL rows to DataFrame # Convert SQL rows to DataFrame
df = pd.DataFrame(rows) df = pd.DataFrame(rows)
# Transpose # Transpose
df_transposed = df.transpose() df_transposed = df.transpose()
df_transposed.insert(0, 'Field', df_transposed.index) df_transposed.insert(0, 'Field', df_transposed.index)
print("df-->",df_transposed)
record_cols = { record_cols = {
i: f"Record {i}" i: f"Record {i}"
for i in df_transposed.columns if isinstance(i, int) for i in df_transposed.columns if isinstance(i, int)

1
AppCode/Login.py Normal file
View File

@@ -0,0 +1 @@

44
AppCode/LoginAuth.py Normal file
View File

@@ -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

View File

@@ -11,11 +11,13 @@ class YearGet:
def get_year_by_model(self, proc_name): def get_year_by_model(self, proc_name):
try: try:
self.cursor.callproc(proc_name) self.cursor.callproc(proc_name)
years = [] years = []
for result in self.cursor.stored_results(): for result in self.cursor.stored_results():
rows = result.fetchall() rows = result.fetchall()
years = [row["year"] for row in rows] years = [row["year"] for row in rows]
print("-- years get --",years)
return years return years
except mysql.connector.Error as e: except mysql.connector.Error as e:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

100
main.py
View File

@@ -6,6 +6,7 @@ import io
import mysql.connector import mysql.connector
from werkzeug.utils import secure_filename from werkzeug.utils import secure_filename
from AppCode.Config import DBConfig from AppCode.Config import DBConfig
from AppCode.FileHandler import FileHandler from AppCode.FileHandler import FileHandler
from AppCode.DocumentHandler import DocumentHandler from AppCode.DocumentHandler import DocumentHandler
@@ -14,20 +15,26 @@ from AppCode.AOHandler import AOHandler
from AppCode.CITHandler import CITHandler from AppCode.CITHandler import CITHandler
from AppCode.ITATHandler import ITATHandler from AppCode.ITATHandler import ITATHandler
from AppCode.YearGet import YearGet from AppCode.YearGet import YearGet
from AppCode.LoginAuth import LoginAuth
# Server
app = Flask(__name__) app = Flask(__name__)
app.secret_key="secret1234" app.secret_key="secret1234"
app.config['UPLOAD_FOLDER'] = FileHandler.UPLOAD_FOLDER app.config['UPLOAD_FOLDER'] = FileHandler.UPLOAD_FOLDER
auth = LoginAuth()
app.register_blueprint(auth.bp)
# welcome page # welcome page
@app.route('/') @app.route('/')
@auth.login_required
def welcome(): def welcome():
return render_template('welcome.html') return render_template('index.html')
# Dashboard page # Dashboard page
@app.route('/dashboard') @app.route('/dashboard')
@auth.login_required
def index(): def index():
return render_template('index.html') return render_template('index.html')
@@ -97,7 +104,6 @@ def display_itr():
@app.route('/itr/add', methods=['GET', 'POST']) @app.route('/itr/add', methods=['GET', 'POST'])
def add_itr(): def add_itr():
if request.method == 'POST': if request.method == 'POST':
itr = ITRHandler() itr = ITRHandler()
itr.add_itr(request.form) itr.add_itr(request.form)
itr.close() itr.close()
@@ -121,8 +127,6 @@ def update_itr(id):
if request.method == 'POST': if request.method == 'POST':
data = {k: request.form.get(k, 0) for k in request.form} data = {k: request.form.get(k, 0) for k in request.form}
print("itr data-->",data)
itr.update(id, data=data) itr.update(id, data=data)
itr.close() itr.close()
return redirect(url_for('display_itr')) return redirect(url_for('display_itr'))
@@ -132,23 +136,6 @@ def update_itr(id):
return render_template('update_itr.html', record=record) 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 ## CIT (Commissioner of Income Tax) Routes
## ======================================================= ## =======================================================
# DISPLAY all CIT records # 1 DISPLAY all CIT records
@app.route('/cit_records') @app.route('/cit_records')
def display_cit(): def display_cit():
cit = CITHandler() cit = CITHandler()
@@ -218,6 +205,7 @@ def display_cit():
cit.close() cit.close()
return render_template('display_cit.html', cit_records=cit_records) return render_template('display_cit.html', cit_records=cit_records)
# 2 new CIT records add
@app.route('/cit/add', methods=['GET', 'POST']) @app.route('/cit/add', methods=['GET', 'POST'])
def add_cit(): def add_cit():
if request.method == 'POST': if request.method == 'POST':
@@ -229,7 +217,7 @@ def add_cit():
return render_template('add_cit.html') return render_template('add_cit.html')
# 3 delete CIT records by id
@app.route('/cit/delete/<int:id>', methods=['POST']) @app.route('/cit/delete/<int:id>', methods=['POST'])
def delete_cit(id): def delete_cit(id):
cit = CITHandler() cit = CITHandler()
@@ -238,7 +226,7 @@ def delete_cit(id):
flash("CIT record deleted successfully!", "success") flash("CIT record deleted successfully!", "success")
return redirect(url_for('display_cit')) return redirect(url_for('display_cit'))
# 4 update CIT records by id
@app.route('/cit/update/<int:id>', methods=['GET', 'POST']) @app.route('/cit/update/<int:id>', methods=['GET', 'POST'])
def update_cit(id): def update_cit(id):
cit = CITHandler() cit = CITHandler()
@@ -262,7 +250,7 @@ def update_cit(id):
## ITAT (Income Tax Appellate Tribunal) Routes ## ITAT (Income Tax Appellate Tribunal) Routes
## ======================================================= ## =======================================================
# DISPLAY all ITAT records # 1.DISPLAY all ITAT records
@app.route('/itat_records') @app.route('/itat_records')
def display_itat(): def display_itat():
itat = ITATHandler() itat = ITATHandler()
@@ -270,16 +258,22 @@ def display_itat():
itat.close() itat.close()
return render_template('display_itat.html', records=records) return render_template('display_itat.html', records=records)
# 2.Add new ITAT records
@app.route('/itat/delete/<int:id>', methods=['POST']) @app.route('/itat/add', methods=['GET', 'POST'])
def delete_itat(id): def add_itat():
itat = ITATHandler() 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() itat.close()
flash("ITAT Record Deleted!", "success") flash("ITAT record added successfully!", "success")
return redirect(url_for('display_itat')) return redirect(url_for('display_itat'))
itat.close()
return render_template('add_itat.html')
# 3.Update ITAT records by id
@app.route('/itat/update/<int:id>', methods=['GET', 'POST']) @app.route('/itat/update/<int:id>', methods=['GET', 'POST'])
def update_itat(id): def update_itat(id):
itat = ITATHandler() itat = ITATHandler()
@@ -306,28 +300,26 @@ def update_itat(id):
itat.close() itat.close()
return render_template('update_itat.html', record=record) return render_template('update_itat.html', record=record)
# 3.delete ITAT records by id
@app.route('/itat/add', methods=['GET', 'POST']) @app.route('/itat/delete/<int:id>', methods=['POST'])
def add_itat(): def delete_itat(id):
itat = ITATHandler() 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() itat.close()
flash("ITAT record added successfully!", "success") flash("ITAT Record Deleted!", "success")
return redirect(url_for('display_itat')) return redirect(url_for('display_itat'))
itat.close()
return render_template('add_itat.html')
# report form
## =======================================================
## All Report Routes
## =======================================================
# report page
@app.route('/reports') @app.route('/reports')
def reports(): def reports():
return render_template("reports.html") return render_template("reports.html")
# Itr report download by year # Itr report download by year
@app.route('/itr_report', methods=['GET']) @app.route('/itr_report', methods=['GET'])
def itr_report(): def itr_report():
@@ -437,13 +429,33 @@ def itat_report():
return render_template("itat_reports.html", years=years) return render_template("itat_reports.html", years=years)
# summary report
@app.route('/summary_report', methods=['GET']) @app.route('/summary_report', methods=['GET'])
def summary_report(): def summary_report():
docHandler = DocumentHandler() docHandler = DocumentHandler()
return docHandler.Summary_report(request=request) 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__': if __name__ == '__main__':
app.run(host='0.0.0.0', port=5003, debug=True) app.run(host='0.0.0.0', port=5003, debug=True)

View File

@@ -1,130 +1,297 @@
/* Reset and base styles */ /* ================= GLOBAL ================= */
* { * {
margin: 0; margin: 0;
padding: 0; padding: 0;
box-sizing: border-box; box-sizing: border-box;
} font-family: "Segoe UI", sans-serif;
}
body { body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f0f4ff;
background-color: #f5f7fa; /* very light blue background */
color: #333; display: flex;
padding: 30px 0; }
}
.container { a {
width: 90%; text-decoration: none !important;
max-width: 700px;
margin: auto;
background-color: #fff;
padding: 40px;
border-radius: 12px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
}
h2 { }
text-align: center;
margin-bottom: 30px;
font-size: 28px;
color: #2c3e50;
}
form { /* ================= 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-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: #ffffff;
height: calc(100vh - 60px);
position: fixed;
top: 60px;
left: 0;
padding-top: 20px;
overflow-y: auto;
border-right: 1px solid #e0e0e0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} z-index: 0;
transition: 0.3s;
}
label { .sidebar.hide {
margin-top: 15px; left: -250px;
margin-bottom: 6px; }
font-weight: bold;
color: #333;
}
input[type="number"] { .sidebar h2 {
padding: 10px 12px; color: #007bff;
border: 1px solid #ccc; text-align: center;
border-radius: 6px;
font-size: 16px;
transition: border-color 0.3s ease;
}
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;
transition: background-color 0.3s ease;
}
button[type="submit"]:hover {
background-color: #0056b3;
}
/* Back button styling */
.back-btn {
display: inline-block;
margin-bottom: 20px; margin-bottom: 20px;
padding: 10px 18px; font-size: 22px;
background: #6c757d; }
color: white;
font-size: 15px; .menu-btn {
font-weight: 600; 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;
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; border-radius: 6px;
text-decoration: none; text-decoration: none;
transition: background 0.3s ease; color: white;
} }
.back-btn:hover { .sidebar-logout:hover {
background: #5a6268; background: #a2cdfa;
} }
.form-group select {
width: 100%; .logout-icon {
padding: 10px 12px; width: 22px;
border: 1px solid #cbd3da; 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; border-radius: 8px;
font-size: 16px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
background-color: #fdfdfd; }
height: 40px;
cursor: pointer;
transition: all 0.25s ease-in-out;
}
.form-group select:focus { /* ================= BACK BUTTON ================= */
border-color: #007BFF; .back-btn {
background: #ffffff; background: #007bff;
box-shadow: 0 0 8px rgba(0, 123, 255, 0.25); 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; outline: none;
}
}
input:focus,
select:focus {
box-shadow: 0 0 5px rgba(0, 123, 255, 0.5);
/* blue glow on focus */
}
.auto {
padding: 10px 12px;
@media (max-width: 600px) { border: 1px solid #ccd1d9;
.container { border-radius: 6px;
padding: 20px;
}
h2 {
font-size: 22px;
}
input[type="number"] {
font-size: 15px; font-size: 15px;
} background-color: #d5edd7;
transition: all 0.25s ease-in-out;
}
button[type="submit"] {
font-size: 16px; /* ================= 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 ================= */
.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;
}

View File

@@ -1,126 +1,155 @@
/* ...existing styles... (no changes needed) */ /* ================= RESET ================= */
* { * {
margin: 0; margin: 0;
padding: 0; padding: 0;
box-sizing: border-box; box-sizing: border-box;
font-family: "Segoe UI", sans-serif;
} }
body { body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f0f4ff;
background-color: #f5f7fa; /* very light blue background */
color: #333;
padding: 30px 0;
} }
/* ================= CONTAINER ================= */
.container { .container {
width: 90%; max-width: 90%;
max-width: 700px; margin: 20px 20px 20px 20px;
margin: auto; /* top margin to clear navbar */
background-color: #fff; background: white;
padding: 40px; padding: 10%;
border-radius: 12px; border-radius: 8px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08); box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
} }
h2 { .no-record {
text-align: center; text-align: center;
margin-bottom: 30px; font-size: 18px;
font-size: 28px; margin-top: 20px;
color: #2c3e50; 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; display: flex;
flex-direction: column; flex-direction: column;
} }
label { .form-group.full-width {
margin-top: 15px; grid-column: span 2;
margin-bottom: 6px;
font-weight: 600;
color: #333;
} }
input[type="number"] { /* Special case: two inputs inside one form-group */
padding: 10px 12px; .form-group.inline-2 {
border: 1px solid #ccc; flex-direction: row;
border-radius: 6px; gap: 15px;
font-size: 16px;
} }
input[type="number"]:focus { .form-group.inline-2>div {
border-color: #007BFF; flex: 1;
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;
}
} }

View File

@@ -1,105 +1,214 @@
/* Same styling for layout */ /* ================= GLOBAL ================= */
* { * {
margin: 0; margin: 0;
padding: 0; padding: 0;
box-sizing: border-box; box-sizing: border-box;
} font-family: "Segoe UI", sans-serif;
}
body { body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f0f4ff;
background-color: #f5f7fa; /* very light blue background */
color: #333; display: flex;
padding: 30px 0; }
}
.container { a {
width: 90%; text-decoration: none !important;
max-width: 700px; }
margin: auto;
background-color: #fff;
padding: 40px;
border-radius: 12px;
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
}
h2 { /* ================= NAVBAR ================= */
text-align: center; .navbar {
margin-bottom: 30px; width: 100%;
font-size: 28px; height: 60px;
color: #2c3e50; 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 { .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: #ffffff;
height: calc(100vh - 60px);
position: fixed;
top: 60px;
left: 0;
padding-top: 20px;
overflow-y: auto;
border-right: 1px solid #e0e0e0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} z-index: 0;
transition: 0.3s;
}
label { .sidebar.hide {
margin-top: 15px; left: -250px;
margin-bottom: 6px; }
font-weight: 600;
color: #333;
}
input[type="number"] { .sidebar h2 {
padding: 10px 12px; color: #007bff;
border: 1px solid #ccc; text-align: center;
border-radius: 6px;
font-size: 16px;
}
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; margin-bottom: 20px;
padding: 10px 18px; font-size: 22px;
background: #6c757d; }
color: white;
font-size: 15px; .menu-btn {
font-weight: 600; 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;
border-bottom: 1px solid #e0e0e0;
transition: 0.2s;
}
.submenu a:hover {
background: #cce5ff;
color: #004085;
}
/* ================= LOGOUT ================= */
.sidebar-logout {
margin-top: auto;
padding: 10px 16px;
background: #007bff;
display: flex;
justify-content: center;
align-items: center;
border-radius: 6px; border-radius: 6px;
text-decoration: none; text-decoration: none;
transition: background 0.3s ease; color: white;
} }
.back-btn:hover { .sidebar-logout:hover {
background: #5a6268; background: #a2cdfa;
} }
@media (max-width: 600px) { .logout-icon {
.container { width: 22px;
padding: 20px; height: 22px;
} }
h2 { /* ================= MAIN CONTENT ================= */
font-size: 22px; .main {
} margin-left: 260px;
width: calc(100% - 260px);
padding: 30px;
margin-top: 80px;
transition: 0.3s;
}
input[type="number"] { /* ================= 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; font-size: 15px;
} transition: background-color 0.3s ease, box-shadow 0.3s ease;
}
button[type="submit"] { button:hover {
font-size: 16px; 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);
}

View File

@@ -1,135 +1,155 @@
body { /* ================= RESET ================= */
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; * {
background: #eef2f7;
margin: 0; margin: 0;
padding: 40px; padding: 0;
color: #333; box-sizing: border-box;
font-family: "Segoe UI", sans-serif;
} }
body {
background-color: #f0f4ff;
/* very light blue background */
}
/* ================= CONTAINER ================= */
.container { .container {
max-width: 900px; max-width: 90%;
margin: auto; margin: 20px 20px 20px 20px;
background: #fff; /* top margin to clear navbar */
padding: 40px 50px; background: white;
border-radius: 12px; padding: 10%;
box-shadow: 0 6px 25px rgba(0, 0, 0, 0.1); border-radius: 8px;
transition: box-shadow 0.3s ease; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
} }
.container:hover { .no-record {
box-shadow: 0 10px 35px rgba(0, 0, 0, 0.15);
}
h2 {
text-align: center; text-align: center;
margin-bottom: 35px; font-size: 18px;
font-size: 30px; margin-top: 20px;
color: #2c3e50; color: #555;
font-weight: 700; padding: 15px;
letter-spacing: 0.5px; background: #f9f9f9;
border-radius: 8px;
border: 1px solid #e0e0e0;
} }
form {
display: grid; /* ================= FORM ================= */
grid-template-columns: 1fr 1fr; form label {
gap: 20px 30px; 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 { .form-group {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
label { .form-group.full-width {
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"] {
grid-column: span 2; 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 { /* Special case: two inputs inside one form-group */
background: linear-gradient(135deg, #0056b3, #00408f); .form-group.inline-2 {
transform: translateY(-2px); flex-direction: row;
gap: 15px;
} }
/* Back button styling */ .form-group.inline-2>div {
.back-btn { flex: 1;
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;
}
} }

207
static/css/ao_report.css Normal file
View File

@@ -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%;
}
}

207
static/css/cit_report.css Normal file
View File

@@ -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%;
}
}

255
static/css/display_ao.css Normal file
View File

@@ -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;
}

251
static/css/display_cit.css Normal file
View File

@@ -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;
}

254
static/css/display_itat.css Normal file
View File

@@ -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;
}

251
static/css/display_itr.css Normal file
View File

@@ -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;
}

147
static/css/documents.css Normal file
View File

@@ -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%;
}
}

165
static/css/index.css Normal file
View File

@@ -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;
}

207
static/css/itat_report.css Normal file
View File

@@ -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%;
}
}

207
static/css/itr_report.css Normal file
View File

@@ -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%;
}
}

76
static/css/report.css Normal file
View File

@@ -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;
}
}

72
static/css/summary.css Normal file
View File

@@ -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;
}

202
static/css/upload.css Normal file
View File

@@ -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;
}

BIN
static/images/lcepllogo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 820 B

View File

@@ -1,69 +1,81 @@
document.addEventListener("DOMContentLoaded", function () { document.addEventListener("DOMContentLoaded", function () {
function getVal(id) { function getValue(id) {
return parseFloat(document.getElementsByName(id)[0].value) || 0; var el = document.getElementsByName(id)[0];
return el ? parseFloat(el.value) || 0 : 0;
} }
function setVal(id, value) { function setValue(id, val) {
document.getElementsByName(id)[0].value = Number(value).toFixed(2); var el = document.getElementsByName(id)[0];
if (el) el.value = Number(val).toFixed(2);
} }
window.calculate = function () { window.calculate = function () {
// Base Values // --- BASIC INPUTS ---
let gross_total_income = getVal("gross_total_income"); var gross_total_income = getValue("gross_total_income");
let disallowance_14a = getVal("disallowance_14a"); var disallowance_14a = getValue("disallowance_14a");
let disallowance_37 = getVal("disallowance_37"); var disallowance_37 = getValue("disallowance_37");
// Deductions // // Auto-calculations (your logic)
let d80_business = getVal("deduction_80ia_business"); // setValue("gross_total_income", disallowance_37 + gross_total_income);
let deduction_sec37 = getVal("deduction_sec37_disallowance"); // setValue("disallowance_37", disallowance_14a + disallowance_37);
let deduction_80g = getVal("deduction_80g");
// Total Deduction var gross_total = gross_total_income + disallowance_37 + disallowance_14a
let total_deductions = d80_business + deduction_sec37; console.log("gross_total income:: " + gross_total)
// Net Taxable Income // --- DEDUCTIONS ---
let net_taxable_income = var d80_business = getValue("deduction_80ia_business");
(gross_total_income + disallowance_14a + disallowance_37) var d80_misc = getValue("deduction_80ia_misc");
- total_deductions var d80_other = getValue("deduction_80ia_other");
- deduction_80g;
setVal("net_taxable_income", net_taxable_income); var deduction_sec37 = d80_business + d80_misc + d80_other;
setValue("deduction_sec37_disallowance", deduction_sec37);
// Tax @ 30% var deduction_80g = getValue("deduction_80g");
let tax_30_percent = net_taxable_income * 0.30;
setVal("tax_30_percent", tax_30_percent);
// Surcharge @ 12% // --- NET TAXABLE INCOME ---
let surcharge_12 = tax_30_percent * 0.12; var net_taxable_income = gross_total - deduction_sec37 - deduction_80g;
setVal("surcharge_12", surcharge_12); setValue("net_taxable_income", net_taxable_income);
// Education Cess @ 3% // --- TAX 30% ---
let edu_cess_3 = (tax_30_percent + surcharge_12) * 0.03; var tax30 = net_taxable_income * 0.30;
setVal("edu_cess_3", edu_cess_3); setValue("tax_30_percent", tax30);
// Total Tax Payable // --- TAX PAYABLE (18.5%) ---
let total_tax_payable = tax_30_percent + surcharge_12 + edu_cess_3; var tax185 = getValue("tax_book_profit_18_5");
setVal("total_tax_payable", total_tax_payable);
// MAT, Interest var tax_payable = (tax30 > tax185) ? tax30 : tax185;
let mat_credit = getVal("mat_credit"); setValue("tax_payable", tax_payable);
let interest_234c = getVal("interest_234c");
let total_tax = total_tax_payable + mat_credit + interest_234c; // --- SURCHARGE ---
setVal("total_tax", total_tax); var percent = getValue("persentage");
var surcharge = tax_payable * (percent / 100);
setValue("surcharge_12", surcharge);
// Advance, TDS, TCS var edu_cess = (tax_payable + surcharge) * 0.03;
let advance_tax = getVal("advance_tax"); setValue("edu_cess_3", edu_cess);
let tds = getVal("tds");
let tcs = getVal("tcs");
let tax_on_assessment = advance_tax + tds + tcs; // --- total tax payable ---
setVal("tax_on_assessment", tax_on_assessment); var total_tax_payable = tax_payable + surcharge + edu_cess;
setValue("total_tax_payable", total_tax_payable);
// Refund / Payablesss // --- FINAL TAX ---
let refund = total_tax - tax_on_assessment; var mat_credit = getValue("mat_credit");
setVal("refund", refund); 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);
}; };
}); });

View File

@@ -1,74 +1,89 @@
document.addEventListener("DOMContentLoaded", function () { 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) { function getVal(id) {
var el = document.getElementsByName(id)[0]; let el = document.getElementsByName(id)[0];
return el ? parseFloat(el.value) || 0 : 0; return el ? parseFloat(el.value) || 0 : 0;
} }
function setVal(id, value) { function setVal(id, value) {
var el = document.getElementsByName(id)[0]; let el = document.getElementsByName(id)[0];
if (el) el.value = Number(value).toFixed(2); if (el) el.value = Number(value).toFixed(2);
} }
// MAIN CALC FUNCTION function calculate() {
window.calculate = function () {
// BASIC VALUES // Base values
var gross_total_income = getVal("gross_total_income"); let gross_total_income = getVal("gross_total_income");
var disallowance_14a = getVal("disallowance_14a"); let disallowance_14a = getVal("disallowance_14a");
var disallowance_37 = getVal("disallowance_37"); let disallowance_37 = getVal("disallowance_37");
var d80_business = getVal("deduction_80ia_business"); // Deductions
var deduction_sec37 = getVal("deduction_sec37_disallowance"); let d80_business = getVal("deduction_80ia_business");
var deduction_80g = getVal("deduction_80g"); let deduction_sec37 = getVal("deduction_sec37_disallowance");
let deduction_80g = getVal("deduction_80g");
// NET TAXABLE INCOME // Net Taxable Income
var net_taxable_income = let net_taxable_income =
(gross_total_income + disallowance_14a + disallowance_37) (gross_total_income + disallowance_14a + disallowance_37)
- (d80_business + deduction_sec37) - (d80_business + deduction_sec37)
- deduction_80g; - deduction_80g;
setVal("net_taxable_income", net_taxable_income); setVal("net_taxable_income", net_taxable_income);
// TAX @ 30% // 30% tax
var tax_30_percent = net_taxable_income * 0.30; let tax_30_percent = net_taxable_income * 0.30;
setVal("tax_30_percent", tax_30_percent); setVal("tax_30_percent", tax_30_percent);
// TAX PAYABLE = 18.5% BOOK PROFIT (user enters) // Book profit tax (user input)
var tax_payable = getVal("tax_book_profit_18_5"); let tax_payable = getVal("tax_book_profit_18_5");
setVal("tax_payable", tax_payable); setVal("tax_payable", tax_payable);
// SURCHARGE // Surcharge 12%
var surcharge_12 = tax_payable * 0.12; let surcharge_12 = tax_payable * 0.12;
setVal("surcharge_12", surcharge_12); setVal("surcharge_12", surcharge_12);
// CESS // Education Cess 3%
var edu_cess_3 = (tax_payable + surcharge_12) * 0.03; let edu_cess_3 = (tax_payable + surcharge_12) * 0.03;
setVal("edu_cess_3", edu_cess_3); setVal("edu_cess_3", edu_cess_3);
// TOTAL TAX PAYABLE // Total Tax Payable
var total_tax_payable = tax_payable + surcharge_12 + edu_cess_3; let total_tax_payable = tax_payable + surcharge_12 + edu_cess_3;
setVal("total_tax_payable", total_tax_payable); setVal("total_tax_payable", total_tax_payable);
// OTHER VALUES // MAT + Interest
var mat_credit = getVal("mat_credit"); let mat_credit = getVal("mat_credit");
var interest_234c = getVal("interest_234c"); let interest_234c = getVal("interest_234c");
// FINAL TAX // Total Tax
var total_tax = total_tax_payable + mat_credit + interest_234c; let total_tax = total_tax_payable + mat_credit + interest_234c;
setVal("total_tax", total_tax); setVal("total_tax", total_tax);
// PAYMENTS // Assessment → Advance Tax + TDS + TCS
var advance_tax = getVal("advance_tax"); let advance_tax = getVal("advance_tax");
var tds = getVal("tds"); let tds = getVal("tds");
var tcs = getVal("tcs"); 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); setVal("tax_on_assessment", tax_on_assessment);
// REFUND // Refund (or payable)
var refund = total_tax - tax_on_assessment; let refund = total_tax - tax_on_assessment;
setVal("refund", refund); setVal("refund", refund);
}; }
// Attach listeners
fields.forEach(id => {
let el = document.getElementsByName(id)[0];
if (el) el.addEventListener("input", calculate);
});
}); });

View File

@@ -18,8 +18,11 @@ document.addEventListener("DOMContentLoaded", function () {
var disallowance_37 = getValue("disallowance_37"); var disallowance_37 = getValue("disallowance_37");
// // Auto-calculations (your logic) // // Auto-calculations (your logic)
setValue("gross_total_income", disallowance_37 + gross_total_income); // setValue("gross_total_income", disallowance_37 + gross_total_income);
setValue("disallowance_37", disallowance_14a + disallowance_37); // 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 --- // --- DEDUCTIONS ---
var d80_business = getValue("deduction_80ia_business"); var d80_business = getValue("deduction_80ia_business");
@@ -32,23 +35,29 @@ document.addEventListener("DOMContentLoaded", function () {
var deduction_80g = getValue("deduction_80g"); var deduction_80g = getValue("deduction_80g");
// --- NET TAXABLE INCOME --- // --- 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); setValue("net_taxable_income", net_taxable_income);
// --- TAX 30% --- // --- 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%) --- // --- TAX PAYABLE (18.5%) ---
var tax_book = getValue("tax_book_profit_18_5"); var tax185 = getValue("tax_book_profit_18_5");
setValue("tax_payable", tax_book);
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); 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); 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); setValue("total_tax_payable", total_tax_payable);
// --- FINAL TAX --- // --- FINAL TAX ---

61
static/js/toggle.js Normal file
View File

@@ -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;
});

View File

@@ -38,7 +38,7 @@ document.addEventListener("DOMContentLoaded", function () {
.then(data => { .then(data => {
if (data.exists) { if (data.exists) {
errorDiv.style.display = "block"; errorDiv.style.display = "block";
errorDiv.innerText = `Year ${selectedYear} already exists!`; errorDiv.innerText = `Year ${selectedYear}-${selectedYear + 1} already exists!`;
// Block submission // Block submission
form.onsubmit = function () { return false; }; form.onsubmit = function () { return false; };
@@ -49,3 +49,4 @@ document.addEventListener("DOMContentLoaded", function () {
}); });
}); });
}); });

Binary file not shown.

Binary file not shown.

View File

@@ -1,58 +1,166 @@
<!DOCTYPE html> {% extends "base.html" %}
<html>
<head> {% block title %}Add New AO Record{% endblock %}
<title>Add New AO Record </title> {% block extra_css %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/add_ao.css') }}"> <!-- Child page CSS -->
<script src="/static/js/ao_calc.js"></script> <link rel="stylesheet" href="{{ url_for('static', filename='css/add_ao.css') }}">
<script src="/static/js/year_dropdown.js"></script> {% endblock %}
</head> {% block content %}
<div class="container">
<body>
<div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>AO Form Entry</h2>
<form id="ao" method="POST" onsubmit="return showSuccessMessage()">
<!-- <label>Year:</label>
<input type="number" name="year" required> -->
<h2 style="text-align:center;">New Assessing Officer Form</h2>
<form id="ao" method="POST">
<div class="form-group"> <div class="form-group">
<label>Year:</label> <label>Year:</label>
<select id="year" name="year" required> <select id="year" name="year" required></select>
<option>---- Select Years ----</option> </div>
</select> <div id="yearError" style="color:red; display:none; margin-bottom:10px;"></div>
<div class="form-group">
<label>Gross Total Income:</label>
<input type="number" name="gross_total_income" step="any" value="0.00" oninput="calculate()" required>
</div> </div>
<div class="form-group full-width inline-2">
<div id="yearError" style="color:red; display:none; margin-bottom:10px;"> <div>
<label>Add :Disallowance u/s 14A:</label>
<input type="number" name="disallowance_14a" step="any" value="0.00" oninput="calculate()" required>
</div>
<div>
<label>Add :Disallowance u/s 37:</label>
<input type="number" name="disallowance_37" step="any" value="0.00" oninput="calculate()" required>
</div>
</div>
<div class="form-group">
<label>Deduction 80IA Business Income:</label>
<input type="number" name="deduction_80ia_business" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Deduction 80IA Misc:</label>
<input type="number" name="deduction_80ia_misc" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Deduction 80IA Other Operating Revenue:</label>
<input type="number" name="deduction_80ia_other" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Deduction Sec 37 Disallowance:</label>
<input type="number" name="deduction_sec37_disallowance" step="any" value="0.00" oninput="calculate()"
required>
</div>
<div class="form-group">
<label>Less: Deduction 80G: </label>
<input type="number" name="deduction_80g" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Net Taxable Income:</label>
<input type="number" name="net_taxable_income" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group full-width inline-2">
<div>
<label>Tax @ 30% (A):</label>
<input type="number" name="tax_30_percent" step="any" value="0.00" oninput="calculate()" required>
</div>
<div>
<label>Tax @ 18.5% on Book Profit (B):</label>
<input type="number" name="tax_book_profit_18_5" step="any" value="0.00" oninput="calculate()" required>
</div>
</div>
<div class="form-group">
<label>Tax Payable (Higher of A or B):</label>
<input type="number" name="tax_payable" step="any" class="auto" value="0.00" readonly>
</div>
<div class="form-group full-width inline-2">
<div>
<label>Enter Percentage (%) Surcharge:</label>
<input type="number" name="persentage" step="any" value="0.00" oninput="calculate()">
</div>
<div>
<label>Surcharge:</label>
<input type="number" name="surcharge_12" class="auto" value="0.00" readonly>
</div>
</div>
<div class="form-group">
<label>Education Cess @ 3%:</label>
<input type="number" name="edu_cess_3" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Total tax Payable:</label>
<input type="number" name="total_tax_payable" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Mat Credit:</label>
<input type="number" name="mat_credit" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Add :Interest 234c:</label>
<input type="number" name="interest_234c" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Total Tax:</label>
<input type="number" name="total_tax" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group">
<label>Advance Tax:</label>
<input type="number" name="advance_tax" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group full-width inline-2">
<div>
<label>TDS :</label>
<input type="number" name="tds" step="any" value="0.00" oninput="calculate()" required>
</div>
<div>
<label>TCS :</label>
<input type="number" name="tcs" step="any" value="0.00" oninput="calculate()" required>
</div>
</div>
<div class="form-group">
<label>Tax on Regular Assessment:</label>
<input type="number" name="tax_on_assessment" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group">
<label>Refund:</label>
<input type="number" name="refund" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group">
<label>Remarks:</label>
<input type="text" name="Remarks">
</div> </div>
{% 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"
] %}
<label for="{{ field }}">{{ field.replace("_", " ").title() }}:</label>
<input type="number" name="{{ field }}" step="0.01" oninput="calculate()" required>
<!-- <input type="number" name="{{ field }}" step="0.01" oninput="calculate()" required> -->
{% endfor %}
<button type="submit">Submit</button> <button type="submit">Submit</button>
</form> </form>
</div> </div>
<!-- JavaScript Alert --> {% block extra_js %}
<script> <script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
<script src="{{ url_for('static', filename='js/ao_calc.js') }}"></script>
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}
<script>
function showSuccessMessage() { function showSuccessMessage() {
alert("Form submitted successfully!"); alert("Form submitted successfully!");
return true; // allow form to submit after showing alert return true;
} }
</script> </script>
</body> {% endblock %}
</html>

View File

@@ -1,54 +1,159 @@
<!DOCTYPE html> {% extends "base.html" %}
<html>
<head> {% block title %}CIT Form Entry{% endblock %}
<title>CIT Form Entry</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/add_cit.css') }}">
<script src="/static/js/cit_calc.js"></script>
<script src="/static/js/year_dropdown.js"></script>
</head> {% block extra_css %}
<!-- Child page CSS -->
<link rel="stylesheet" href="{{ url_for('static', filename='css/add_cit.css') }}">
{% endblock %}
{% block content %}
<div class="container">
<body> <h2 style="text-align:center;">New CIT Form </h2>
<div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>CIT Form Entry</h2>
<form id="cit" method="POST"> <form id="cit" method="POST">
<!-- <label>Year:</label> <div class="form-group">
<input type="number" name="year" required value="{{ record.year if record else '' }}"> --> <label>Year:</label>
<select id="year" name="year" required></select>
</div>
<div id="yearError" style="color:red; display:none; margin-bottom:10px;"></div>
<div class="form-group"> <div class="form-group">
<label> Year:</label> <label>Gross Total Income:</label>
<select id="year" name="year" required> <input type="number" name="gross_total_income" step="any" value="0.00" oninput="calculate()" required>
<option>---- Select Years ----</option> </div>
</select> <div class="form-group full-width inline-2">
<div>
<label>Add :Disallowance u/s 14A:</label>
<input type="number" name="disallowance_14a" step="any" value="0.00" oninput="calculate()" required>
</div>
<div>
<label>Add :Disallowance u/s 37:</label>
<input type="number" name="disallowance_37" step="any" value="0.00" oninput="calculate()" required>
</div>
</div>
<div class="form-group">
<label>Deduction 80IA Business Income:</label>
<input type="number" name="deduction_80ia_business" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Deduction 80IA Misc:</label>
<input type="number" name="deduction_80ia_misc" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Deduction 80IA Other Operating Revenue:</label>
<input type="number" name="deduction_80ia_other" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Deduction Sec 37 Disallowance:</label>
<input type="number" name="deduction_sec37_disallowance" step="any" value="0.00" oninput="calculate()"
required>
</div>
<div class="form-group">
<label>Less: Deduction 80G: </label>
<input type="number" name="deduction_80g" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Net Taxable Income:</label>
<input type="number" name="net_taxable_income" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group full-width inline-2">
<div>
<label>Tax @ 30% (A):</label>
<input type="number" name="tax_30_percent" step="any" value="0.00" oninput="calculate()" required>
</div>
<div>
<label>Tax @ 18.5% on Book Profit (B):</label>
<input type="number" name="tax_book_profit_18_5" step="any" value="0.00" oninput="calculate()" required>
</div>
</div>
<div class="form-group">
<label>Tax Payable (Higher of A or B):</label>
<input type="number" name="tax_payable" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group full-width inline-2">
<div>
<label>Enter Percentage (%) Surcharge:</label>
<input type="number" name="persentage" step="any" value="0.00" oninput="calculate()">
</div>
<div>
<label>Surcharge:</label>
<input type="number" name="surcharge_12" class="auto" value="0.00" readonly>
</div> </div>
<div id="yearError" style="color:red; display:none; margin-bottom:10px;">
</div> </div>
{% for field in [ <div class="form-group">
"gross_total_income", "deduction_80ia_business", "deduction_sec37_disallowance", <label>Education Cess @ 3%:</label>
"deduction_80g", "net_taxable_income", "tax_30_percent", "tax_book_profit_18_5", <input type="number" name="edu_cess_3" step="any" value="0.00" oninput="calculate()" required>
"tax_payable", "surcharge_12", "edu_cess_3", "total_tax_payable", "mat_credit", </div>
"interest_234c", "total_tax", "advance_tax", "tds", "tcs", "tax_on_assessment", "refund"
] %} <div class="form-group">
<label for="{{ field }}">{{ field.replace("_", " ").title() }}:</label> <label>Total tax Payable:</label>
<input type="number" name="{{ field }}" step="0.01" oninput="calculate()" required> <input type="number" name="total_tax_payable" class="auto" step="any" value="0.00" readonly>
{% endfor %} </div>
<button type="submit">Submit </button>
<div class="form-group">
<label>Mat Credit:</label>
<input type="number" name="mat_credit" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Add :Interest 234c:</label>
<input type="number" name="interest_234c" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Total Tax:</label>
<input type="number" name="total_tax" step="any" value="0.00" readonly>
</div>
<div class="form-group">
<label>Advance Tax:</label>
<input type="number" name="advance_tax" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group full-width inline-2">
<div>
<label>TDS :</label>
<input type="number" name="tds" step="any" value="0.00" oninput="calculate()" required>
</div>
<div>
<label>TCS :</label>
<input type="number" name="tcs" step="any" value="0.00" oninput="calculate()" required>
</div>
</div>
<div class="form-group">
<label>Tax on Regular Assessment:</label>
<input type="number" name="tax_on_assessment" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group">
<label>Refund:</label>
<input type="number" name="refund" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group">
<label>Remarks:</label>
<input type="text" name="Remarks">
</div>
<button type="submit">{{ 'Update' if record else 'Submit' }}</button>
</form> </form>
</div>
{% endblock %}
</div> {% block extra_js %}
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
<script> <script src="{{ url_for('static', filename='js/cit_calc.js') }}"></script>
function showSuccessMessage() { <script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
alert("Form submitted successfully!"); {% endblock %}
return true; // continue with form submission
}
</script>
</body>
</html>

View File

@@ -1,55 +1,49 @@
<!DOCTYPE html> {% extends "base.html" %}
<html>
<head> {% block title %}Add New ITAT Record{% endblock %}
<title>Add New ITAT Record</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/add_ao.css') }}">
<script src="/static/js/year_dropdown.js"></script>
</head> {% block extra_css %}
<!-- Child page CSS -->
<link rel="stylesheet" href="{{ url_for('static', filename='css/add_itat.css') }}">
{% endblock %}
<body> {% block content %}
<div class="container"> <div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a> <h2 style="text-align:center;">New Income Tax Appellate Tribunal Form</h2>
<h2>ITAT Form Entry</h2>
<form id="itat" method="POST" onsubmit="return showSuccessMessage()"> <form id="itat" method="POST" onsubmit="return showSuccessMessage()">
<!-- <label>Year:</label>
<input type="number" name="year" step="0.01" required> -->
<div class="form-group"> <label>Year:</label>
<label> Year:</label> <select id="year" name="year" required></select>
<select id="year" name="year" required> <div id="yearError" style="color:red; display:none; margin-bottom:10px;"></div>
<option>---- Select Years ----</option>
</select>
</div>
<div id="yearError" style="color:red; display:none; margin-bottom:10px;">
</div>
<label>MAT Tax Credit:</label> <label>MAT Tax Credit:</label>
<input type="number" name="mat_tax_credit" step="0.01" required> <input type="number" name="mat_tax_credit" step="0.01" required />
<label>Surcharge:</label> <label>Surcharge:</label>
<input type="number" name="surcharge" step="0.01" required> <input type="number" name="surcharge" step="0.01" required />
<label>Cess:</label> <label>Cess:</label>
<input type="number" name="cess" step="0.01" required> <input type="number" name="cess" step="0.01" required />
<label>Total Credit:</label> <label>Total Credit:</label>
<input type="number" name="total_credit" step="0.01" required> <input type="number" name="total_credit" step="0.01" required />
<button type="submit">Submit</button> <button type="submit">Submit</button>
</form> </form>
</div> </div>
{% endblock %}
<script> {% block extra_js %}
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
<script src="{{ url_for('static', filename='js/cit_calc.js') }}"></script>
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}
<script>
function showSuccessMessage() { function showSuccessMessage() {
alert("Form submitted successfully!"); alert("Form submitted successfully!");
return true; return true;
} }
</script> </script>
</body>
</html>

View File

@@ -1,56 +1,158 @@
<!DOCTYPE html> {% extends "base.html" %}
<html lang="en">
<head> {% block title %}Add New Income Tax Return Record{% endblock %}
<meta charset="UTF-8">
<title>Add New Income Tax Return Record</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/add_itr.css') }}">
<script src="/static/js/itr_calc.js"></script>
<script src="/static/js/year_dropdown.js"></script>
</head> {% block extra_css %}
<!-- Child page CSS -->
<link rel="stylesheet" href="{{ url_for('static', filename='css/add_itr.css') }}">
{% endblock %}
<body> {% block content %}
<div class="container"> <div class="container">
<!-- Back to Dashboard Button --> <h2 style="text-align:center;">New Income Tax Return Form</h2>
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<form id="itr" method="POST">
<h2>Add New Income Tax Return Record</h2> <div class="form-group">
<form id="itr" method="POST" action="{{ url_for('add_itr') }}">
<!-- <div class="form-group">
<label>Year:</label> <label>Year:</label>
<input type="number" name="year" required> <select id="year" name="year" required></select>
</div> --> </div>
<div id="yearError" style="color:red; display:none; margin-bottom:10px;"></div>
<div class="form-group"> <div class="form-group">
<label> Year:</label> <label>Gross Total Income:</label>
<select id="year" name="year" required> <input type="number" name="gross_total_income" step="any" value="0.00" oninput="calculate()" required>
<option>---- Select Years ----</option> </div>
</select> <div class="form-group full-width inline-2">
<div>
<label>Add :Disallowance u/s 14A:</label>
<input type="number" name="disallowance_14a" step="any" value="0.00" oninput="calculate()" required>
</div>
<div>
<label>Add :Disallowance u/s 37:</label>
<input type="number" name="disallowance_37" step="any" value="0.00" oninput="calculate()" required>
</div> </div>
<div id="yearError" style="color:red; display:none; margin-bottom:10px;">
</div> </div>
{% for field in [ <div class="form-group">
"gross_total_income", "disallowance_14a", "disallowance_37", <label>Deduction 80IA Business Income:</label>
"deduction_80ia_business", "deduction_80ia_misc", "deduction_80ia_other", <input type="number" name="deduction_80ia_business" step="any" value="0.00" oninput="calculate()" required>
"deduction_sec37_disallowance", "deduction_80g", "net_taxable_income", </div>
"tax_30_percent", "tax_book_profit_18_5", "tax_payable", "surcharge_12",
"edu_cess_3", "total_tax_payable", "mat_credit", "interest_234c", <div class="form-group">
"total_tax", "advance_tax", "tds", "tcs", "tax_on_assessment", "refund" <label>Deduction 80IA Misc:</label>
] %} <input type="number" name="deduction_80ia_misc" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Deduction 80IA Other Operating Revenue:</label>
<input type="number" name="deduction_80ia_other" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Deduction Sec 37 Disallowance:</label>
<input type="number" name="deduction_sec37_disallowance" step="any" value="0.00" oninput="calculate()"
required>
</div>
<div class="form-group">
<label>Less: Deduction 80G: </label>
<input type="number" name="deduction_80g" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Net Taxable Income:</label>
<input type="number" name="net_taxable_income" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group full-width inline-2">
<div>
<label>Tax @ 30% (A):</label>
<input type="number" name="tax_30_percent" step="any" value="0.00" oninput="calculate()" required>
</div>
<div>
<label>Tax @ 18.5% on Book Profit (B):</label>
<input type="number" name="tax_book_profit_18_5" step="any" value="0.00" oninput="calculate()" required>
</div>
</div>
<div class="form-group">
<label>Tax Payable (Higher of A or B):</label>
<input type="number" name="tax_payable" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group full-width inline-2">
<div>
<label>Enter Percentage (%) Surcharge:</label>
<input type="number" name="persentage" step="any" value="0.00" oninput="calculate()">
</div>
<div>
<label>Surcharge:</label>
<input type="number" name="surcharge_12" class="auto" value="0.00" readonly>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label>{{ field.replace("_", " ").title() }}:</label> <label>Education Cess @ 3%:</label>
<input type="number" name="{{ field }}" step="any" value="0.00" oninput="calculate()" required> <input type="number" name="edu_cess_3" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Total tax Payable:</label>
<input type="number" name="total_tax_payable" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group">
<label>Mat Credit:</label>
<input type="number" name="mat_credit" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Add :Interest 234c:</label>
<input type="number" name="interest_234c" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group">
<label>Total Tax:</label>
<input type="number" name="total_tax" step="any" value="0.00" readonly>
</div>
<div class="form-group">
<label>Advance Tax:</label>
<input type="number" name="advance_tax" step="any" value="0.00" oninput="calculate()" required>
</div>
<div class="form-group full-width inline-2">
<div>
<label>TDS :</label>
<input type="number" name="tds" step="any" value="0.00" oninput="calculate()" required>
</div>
<div>
<label>TCS :</label>
<input type="number" name="tcs" step="any" value="0.00" oninput="calculate()" required>
</div>
</div>
<div class="form-group">
<label>Tax on Regular Assessment:</label>
<input type="number" name="tax_on_assessment" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group">
<label>Refund:</label>
<input type="number" name="refund" class="auto" step="any" value="0.00" readonly>
</div>
<div class="form-group">
<label>Remarks:</label>
<input type="text" name="Remarks">
</div> </div>
{% endfor %}
<button type="submit">Submit</button> <button type="submit">Submit</button>
</form> </form>
</div> </div>
</body> {% endblock %}
</html {% block extra_js %}
<script src="{{ url_for('static', filename='js/itr_calc.js') }}"></script>
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}

View File

@@ -1,81 +1,41 @@
<!DOCTYPE html> {% extends "base.html" %}
<html>
<head> {% block title %}Download AO Report{% endblock %}
<title>Download AO Reports</title>
<link rel="stylesheet" href="{{ url_for('static', filename='index.css') }}">
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f4f7f9;
margin: 0;
padding: 0;
}
.container { {% block extra_css %}
max-width: 600px; <link rel="stylesheet" href="{{ url_for('static', filename='css/ao_report.css') }}">
margin: 60px auto; {% endblock %}
padding: 30px;
background-color: white;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
text-align: center;
}
h2 { {% block content %}
color: #333; <div class="main">
margin-bottom: 30px;
}
label {
font-weight: 600;
margin-right: 10px;
}
select {
padding: 8px 12px;
border: 1px solid #ccc;
border-radius: 5px;
margin-bottom: 20px;
min-width: 200px;
}
button {
padding: 10px 20px;
background-color: #007bff;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #0056b3;
}
</style>
</head>
<body>
<div class="container"> <div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>Download AO Report</h2> <h2>Download AO Report</h2>
<form method="GET" action="{{ url_for('ao_report') }}" target="_blank"> <form method="GET" action="{{ url_for('ao_report') }}" target="_blank">
<label for="year">Select Year:</label> <label for="year">Select Year:</label><br>
<br>
<select name="year" id="year" required> <select name="year" id="year" required>
<option value="">-- Select Year --</option> <option value="">-- Select Year --</option>
{% for y in years %} {% for y in years %}
<!-- <option value="{{ y }}">{{ y }}</option> --> <option value="{{ y }}">AY {{ y }} - {{ y + 1 }}</option>
<option value="{{ y }}">AY {{ y }}-{{y +1 }}</option>
{% endfor %} {% endfor %}
</select> </select>
<br><br>
<button type="submit">Download Excel</button>
</form>
</div>
</body>
</html> <br>
<button type="submit">Download Excel</button>
</form>
</div>
</div>
{% block scripts %}
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
{% endblock %}
{% block extra_js %} <script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}
{% endblock %}

77
templates/base.html Normal file
View File

@@ -0,0 +1,77 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>{% block title %}Income Tax Utilities{% endblock %}</title>
<!-- Shared CSS -->
<link rel="stylesheet" href="{{ url_for('static', filename='css/index.css') }}">
<!-- Extra CSS for child pages -->
{% block extra_css %}{% endblock %}
</head>
<body>
<!-- NAVBAR -->
<div class="navbar">
<div class="nav-left">
<span class="toggle-btn" onclick="toggleSidebar()"></span>
<img src="{{ url_for('static', filename='images/lcepllogo.png') }}" class="nav-logo" alt="Logo" />
<h3>LAXMI CIVIL ENGINEERING SERVICES PVT. LTD.</h3>
</div>
</div>
<!-- SIDEBAR -->
<div class="sidebar hide" id="sidebar">
<a href="{{ url_for('index') }}"><h2>Dashboard</h2></a>
<div class="menu-btn" onclick="toggleMenu('itrMenu')">ITR ▼</div>
<div class="submenu" id="itrMenu">
<a href="{{ url_for('add_itr') }}"> Add ITR</a>
<a href="{{ url_for('display_itr') }}">🧾 ITR Records</a>
</div>
<div class="menu-btn" onclick="toggleMenu('aoMenu')">AO ▼</div>
<div class="submenu" id="aoMenu">
<a href="{{ url_for('add_ao') }}"> Add AO</a>
<a href="{{ url_for('display_ao') }}">🧾 AO Records</a>
</div>
<div class="menu-btn" onclick="toggleMenu('citMenu')">CIT ▼</div>
<div class="submenu" id="citMenu">
<a href="{{ url_for('add_cit') }}"> Add CIT</a>
<a href="{{ url_for('display_cit') }}">🧾 CIT Records</a>
</div>
<div class="menu-btn" onclick="toggleMenu('itatMenu')">ITAT ▼</div>
<div class="submenu" id="itatMenu">
<a href="{{ url_for('add_itat') }}"> Add ITAT</a>
<a href="{{ url_for('display_itat') }}">🧾 ITAT Records</a>
</div>
<div class="menu-btn" onclick="toggleMenu('docMenu')">Documents & Reports ▼</div>
<div class="submenu" id="docMenu">
<a href="{{ url_for('upload_file') }}">📂 Upload</a>
<a href="{{ url_for('view_documents') }}">📄 Documents</a>
<a href="{{ url_for('reports') }}">📊 Reports</a>
<a href="{{ url_for('summary_report') }}">📝 Summary Report</a>
</div>
<!-- Logout at bottom -->
<a href="{{ url_for('auth.logout') }}" class="sidebar-logout">
<img src="{{ url_for('static', filename='images/logout_icon.png') }}" class="logout-icon" alt="Logout" />
</a>
</div>
<!-- MAIN CONTENT -->
<div class="main" id="main">
{% block content %}{% endblock %}
</div>
<!-- Shared JS -->
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
<!-- Extra JS for child pages -->
{% block extra_js %}{% endblock %}
</body>
</html>

View File

@@ -1,81 +1,41 @@
<!DOCTYPE html> {% extends "base.html" %}
<html>
<head> {% block title %}Download CIT Report{% endblock %}
<title>Download CIT Reports</title>
<link rel="stylesheet" href="{{ url_for('static', filename='index.css') }}">
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f4f7f9;
margin: 0;
padding: 0;
}
.container { {% block extra_css %}
max-width: 600px; <link rel="stylesheet" href="{{ url_for('static', filename='css/cit_report.css') }}">
margin: 60px auto; {% endblock %}
padding: 30px;
background-color: white;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
text-align: center;
}
h2 { {% block content %}
color: #333; <div class="main">
margin-bottom: 30px;
}
label {
font-weight: 600;
margin-right: 10px;
}
select {
padding: 8px 12px;
border: 1px solid #ccc;
border-radius: 5px;
margin-bottom: 20px;
min-width: 200px;
}
button {
padding: 10px 20px;
background-color: #007bff;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #0056b3;
}
</style>
</head>
<body>
<div class="container"> <div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>Download CIT Report</h2> <h2>Download CIT Report</h2>
<form method="GET" action="{{ url_for('cit_report') }}" target="_blank"> <form method="GET" action="{{ url_for('cit_report') }}" target="_blank">
<label for="year">Select Year:</label> <label for="year">Select Year:</label><br>
<br>
<select name="year" id="year" required> <select name="year" id="year" required>
<option value="">-- Select Year --</option> <option value="">-- Select Year --</option>
{% for y in years %} {% for y in years %}
<!-- <option value="{{ y }}">{{ y }}</option> --> <option value="{{ y }}">AY {{ y }} - {{ y + 1 }}</option>
<option value="{{ y }}">AY {{ y }}-{{y +1 }}</option>
{% endfor %} {% endfor %}
</select> </select>
<br><br>
<button type="submit">Download Excel</button>
</form>
</div>
</body>
</html> <br>
<button type="submit">Download Excel</button>
</form>
</div>
</div>
{% block scripts %}
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
{% endblock %}
{% block extra_js %} <script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}
{% endblock %}

View File

@@ -1,159 +1,25 @@
<!DOCTYPE html> {% extends "base.html" %}
<html lang="en">
<head> {% block title %}AO Records{% endblock %}
<meta charset="UTF-8">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<title>AO Records</title> {% block content %}
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
background-color: #f8f9fa;
padding: 20px;
color: #333;
}
.container { <!-- Load only display_itr CSS -->
max-width: 95%; <link rel="stylesheet" href="{{ url_for('static', filename='css/display_itr.css') }}">
margin: auto; <div class="container">
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
h2 { <h2 style="text-align: center;">Assessing Officer Records 👨‍💼</h2>
text-align: center;
margin-bottom: 20px;
}
.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;
}
.action-cell form {
display: inline-block;
margin-left: 5px;
}
.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: #343a40;
color: white;
text-align: center;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
td:first-child,
th:first-child {
text-align: left;
}
.alert {
padding: 10px 15px;
margin-bottom: 20px;
border-radius: 5px;
}
.alert-success {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.alert-danger {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
/* 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>
</head>
<body>
<div class="container">
<!-- Back to Dashboard Button -->
<!-- <a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a> -->
<h2>Assessing Officer Records 👨‍💼</h2>
<!-- Flash Messages -->
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
<div class="alert alert-{{ category }}">{{ message }}</div>
{% endfor %}
{% endif %}
{% endwith %}
<!-- Add AO Record Button -->
<div style="text-align: right; margin-bottom: 10px;">
<a href="{{ url_for('add_ao') }}" class="btn btn-add"> Add AO Record</a> <a href="{{ url_for('add_ao') }}" class="btn btn-add"> Add AO Record</a>
</div>
{% if ao_records %} {% if ao_records %}
<div class="table-wrapper"> <div class="table-wrapper">
<table> <table>
<thead> <thead>
<tr> <tr>
<th>ID</th>
<th>Year</th> <th>Year</th>
<th>Gross Total Income</th> <th>Gross Total Income</th>
<th>Net Taxable Income</th> <th>Net Taxable Income</th>
@@ -164,16 +30,15 @@
<tbody> <tbody>
{% for ao in ao_records %} {% for ao in ao_records %}
<tr> <tr>
<td>{{ ao.id }}</td> <td>AY {{ ao.year }}-{{ ao.year+1 }}</td>
<td>{{ ao.year }}</td>
<td>{{ ao.gross_total_income }}</td> <td>{{ ao.gross_total_income }}</td>
<td>{{ ao.net_taxable_income }}</td> <td>{{ ao.net_taxable_income }}</td>
<td>{{ ao.total_tax }}</td> <td>{{ ao.total_tax }}</td>
<td class="action-cell"> <td>
<a href="{{ url_for('update_ao', id=ao.id) }}" class="btn btn-update">Edit</a> <a href="{{ url_for('update_ao', id=ao.id) }}" class="btn btn-update">Edit</a>
<form action="{{ url_for('delete_ao', id=ao.id) }}" method="POST" style="display:inline;">
<button type="submit" class="btn btn-delete" <form action="{{ url_for('delete_ao', id=ao.id) }}" method="POST" style="display:inline">
onclick="return confirm('Are you sure you want to delete this AO?');">Delete</button> <button class="btn btn-delete" onclick="return confirm('Are you sure?');">Delete</button>
</form> </form>
</td> </td>
</tr> </tr>
@@ -182,9 +47,7 @@
</table> </table>
</div> </div>
{% else %} {% else %}
<p style="text-align: center; margin-top: 20px;">No AO records found. Add one above!</p> <p style="text-align: center; margin-top: 20px;" class="no-record">No AO records found.</p>
{% endif %} {% endif %}
</div> </div>
</body> {% endblock %}
</html>

View File

@@ -1,122 +1,18 @@
<!DOCTYPE html> {% extends "base.html" %}
<html lang="en">
<head> {% block title %}CIT Records{% endblock %}
<meta charset="UTF-8">
<title>CIT Records</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
background-color: #f8f9fa;
padding: 20px;
color: #333;
}
.container {
max-width: 95%;
margin: auto;
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
h2 { {% block content %}
text-align: center; <!-- Load only display_itr CSS -->
margin-bottom: 20px; <link rel="stylesheet" href="{{ url_for('static', filename='css/display_cit.css') }}">
} <div class="main">
.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;
}
.action-cell form {
display: inline-block;
margin-left: 5px;
}
.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: #343a40;
color: white;
text-align: center;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
td:first-child,
th:first-child {
text-align: left;
}
/* 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>
</head>
<body>
<div class="container"> <div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2 style="text-align: center;">CIT Records🧾</h2>
<h2>CIT Records 🧾</h2> <div style="text-align: right; margin-bottom: 10px;">
<a href="{{ url_for('add_cit') }}" class="btn btn-add"> Add New Record</a> <a href="{{ url_for('add_cit') }}" class="btn btn-add"> Add New Record</a>
</div>
{% if cit_records %} {% if cit_records %}
<div class="table-wrapper"> <div class="table-wrapper">
<table> <table>
@@ -133,14 +29,13 @@
<tbody> <tbody>
{% for record in cit_records %} {% for record in cit_records %}
<tr> <tr>
<td>{{ record.year }}</td> <td>AY {{ record.year }}-{{ record.year+1 }}</td>
<td>{{ "{:,.2f}".format(record.gross_total_income) }}</td> <td>{{ "{:,.2f}".format(record.gross_total_income) }}</td>
<td>{{ "{:,.2f}".format(record.net_taxable_income) }}</td> <td>{{ "{:,.2f}".format(record.net_taxable_income) }}</td>
<td>{{ "{:,.2f}".format(record.total_tax_payable) }}</td> <td>{{ "{:,.2f}".format(record.total_tax_payable) }}</td>
<td>{{ "{:,.2f}".format(record.refund) }}</td> <td>{{ "{:,.2f}".format(record.refund) }}</td>
<td class="action-cell"> <td class="action-cell">
<a href="{{ url_for('update_cit', id=record.id) }}" class="btn btn-update">Edit</a> <a href="{{ url_for('update_cit', id=record.id) }}" class="btn btn-update">Edit</a>
<form action="{{ url_for('delete_cit', id=record.id) }}" method="post" <form action="{{ url_for('delete_cit', id=record.id) }}" method="post"
onsubmit="return confirm('Are you sure you want to delete this record?');"> onsubmit="return confirm('Are you sure you want to delete this record?');">
<button type="submit" class="btn btn-delete">Delete</button> <button type="submit" class="btn btn-delete">Delete</button>
@@ -151,10 +46,16 @@
</tbody> </tbody>
</table> </table>
</div> </div>
{% else %} {% else %}
<p style="text-align: center; margin-top: 20px;">No records found. Click the button above to add one!</p> <p style="text-align: center; margin-top: 20px;" class="no-record">
No records found. Click the button above to add one!
</p>
{% endif %} {% endif %}
</div> </div>
</body> </div>
{% endblock %}
</html> {% block scripts %}
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
{% endblock %}

View File

@@ -1,122 +1,22 @@
<!DOCTYPE html> {% extends "base.html" %}
<html lang="en">
<head> {% block title %}ITAT Records{% endblock %}
<meta charset="UTF-8">
<title>ITAT Records</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
background-color: #f8f9fa;
padding: 20px;
color: #333;
}
.container { <!-- Load page-specific CSS -->
max-width: 95%; {% block extra_css %}
margin: auto; <link rel="stylesheet" href="{{ url_for('static', filename='css/display_itat.css') }}">
background: white; {% endblock %}
padding: 30px;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
h2 { {% block content %}
text-align: center; <div class="main">
margin-bottom: 20px;
}
.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;
}
.action-cell form {
display: inline-block;
margin-left: 5px;
}
.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: #343a40;
color: white;
text-align: center;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
td:first-child,
th:first-child {
text-align: left;
}
/* 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>
</head>
<body>
<div class="container"> <div class="container">
<!-- Back to Dashboard Button --> <h2 style="text-align: center;">Income Tax Appellate Tribunal Records 📄</h2>
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a> <div style="text-align: right; margin-bottom: 10px;">
<h2>ITAT Records 📄</h2>
<a href="{{ url_for('add_itat') }}" class="btn btn-add"> Add New Record</a> <a href="{{ url_for('add_itat') }}" class="btn btn-add"> Add New Record</a>
<!-- FLASH MESSAGES -->
{% with messages = get_flashed_messages(with_categories=true) %} {% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %} {% if messages %}
{% for category, message in messages %} {% for category, message in messages %}
@@ -125,6 +25,7 @@
{% endif %} {% endif %}
{% endwith %} {% endwith %}
<!-- TABLE -->
{% if records %} {% if records %}
<div class="table-wrapper"> <div class="table-wrapper">
<table> <table>
@@ -141,15 +42,15 @@
<tbody> <tbody>
{% for record in records %} {% for record in records %}
<tr> <tr>
<td>{{ record.year }}</td> <td>AY {{ record.year }}-{{ record.year+1 }}</td>
<td>{{ "{:,.2f}".format(record.mat_tax_credit) }}</td> <td>{{ "{:,.2f}".format(record.mat_tax_credit) }}</td>
<td>{{ "{:,.2f}".format(record.surcharge) }}</td> <td>{{ "{:,.2f}".format(record.surcharge) }}</td>
<td>{{ "{:,.2f}".format(record.cess) }}</td> <td>{{ "{:,.2f}".format(record.cess) }}</td>
<td>{{ "{:,.2f}".format(record.total_credit) }}</td> <td>{{ "{:,.2f}".format(record.total_credit) }}</td>
<td class="action-cell"> <td class="action-cell">
<a href="{{ url_for('update_itat', id=record.id) }}" class="btn btn-update">Edit</a> <a href="{{ url_for('update_itat', id=record.id) }}" class="btn btn-update">Edit</a>
<form action="{{ url_for('delete_itat', id=record.id) }}" method="post" <form action="{{ url_for('delete_itat', id=record.id) }}" method="post"
onsubmit="return confirm('Are you sure you want to delete this record?');"> onsubmit="return confirm('Are you sure you want to delete this record?');">
<button type="submit" class="btn btn-delete">Delete</button> <button type="submit" class="btn btn-delete">Delete</button>
@@ -160,10 +61,15 @@
</tbody> </tbody>
</table> </table>
</div> </div>
{% else %}
<p style="text-align: center; margin-top: 20px;">No ITAT records found. Click the button above to add one!</p>
{% endif %}
</div>
</body>
</html> {% else %}
<p class="no-record">No ITAT records found. Click the button above to add one!</p>
{% endif %}
</div>
</div>
{% endblock %}
{% block scripts %}
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
{% endblock %}

View File

@@ -1,120 +1,18 @@
<!DOCTYPE html> {% extends "base.html" %}
<html lang="en">
<head> {% block title %}ITR Records{% endblock %}
<meta charset="UTF-8">
<title>ITR Records</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
background-color: #f8f9fa;
padding: 20px;
color: #333;
}
.container { {% block content %}
max-width: 95%; <!-- Load only display_itr CSS -->
margin: auto; <link rel="stylesheet" href="{{ url_for('static', filename='css/display_itr.css') }}">
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
h2 {
text-align: center;
margin-bottom: 20px;
}
.btn { <div class="container">
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;
}
.action-cell form {
display: inline-block;
margin-left: 5px;
}
.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: #343a40;
color: white;
text-align: center;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
td:first-child,
th:first-child {
text-align: left;
}
/* 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>
</head>
<body>
<div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>Income Tax Return Records 🧾</h2> <h2>Income Tax Return Records 🧾</h2>
<div style="text-align: right; margin-bottom: 10px;">
<a href="{{ url_for('add_itr') }}" class="btn btn-add"> Add New Record</a> <a href="{{ url_for('add_itr') }}" class="btn btn-add"> Add New Record</a>
</div>
{% if records %} {% if records %}
<div class="table-wrapper"> <div class="table-wrapper">
@@ -132,14 +30,13 @@
<tbody> <tbody>
{% for record in records %} {% for record in records %}
<tr> <tr>
<td>{{ record.year }}</td> <td>AY {{ record.year }}-{{record.year+1}}</td>
<td>{{ "{:,.2f}".format(record.gross_total_income) }}</td> <td>{{ "{:,.2f}".format(record.gross_total_income) }}</td>
<td>{{ "{:,.2f}".format(record.net_taxable_income) }}</td> <td>{{ "{:,.2f}".format(record.net_taxable_income) }}</td>
<td>{{ "{:,.2f}".format(record.total_tax_payable) }}</td> <td>{{ "{:,.2f}".format(record.total_tax_payable) }}</td>
<td>{{ "{:,.2f}".format(record.refund) }}</td> <td>{{ "{:,.2f}".format(record.refund) }}</td>
<td class="action-cell"> <td class="action-cell">
<a href="{{ url_for('update_itr', id=record.id) }}" class="btn btn-update">Edit</a> <a href="{{ url_for('update_itr', id=record.id) }}" class="btn btn-update">Edit</a>
<form action="{{ url_for('delete_itr', id=record.id) }}" method="post" <form action="{{ url_for('delete_itr', id=record.id) }}" method="post"
onsubmit="return confirm('Are you sure you want to delete this record?');"> onsubmit="return confirm('Are you sure you want to delete this record?');">
<button type="submit" class="btn btn-delete">Delete</button> <button type="submit" class="btn btn-delete">Delete</button>
@@ -151,9 +48,9 @@
</table> </table>
</div> </div>
{% else %} {% else %}
<p style="text-align: center; margin-top: 20px;">No records found. Click the button above to add one!</p> <p style="text-align: center; margin-top: 20px" class="no-record">
No records found. Click the button above to add one!
</p>
{% endif %} {% endif %}
</div> </div>
</body> {% endblock %}
</html>

View File

@@ -1,146 +1,12 @@
<!DOCTYPE html> {% extends "base.html" %}
<html lang="en">
<head> {% block title %}Dashboard | Income Tax Utilities{% endblock %}
<meta charset="UTF-8">
<title>Dashboard | Income Tax Utilities</title>
<link rel="stylesheet" href="{{ url_for('static', filename='index.css') }}">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body { {% block content %}
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; <div class="container">
background-color: #f4f7f6;
color: #333;
line-height: 1.6;
}
.container {
max-width: 750px;
margin: 50px auto;
padding: 40px;
background-color: #fff;
border-radius: 12px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08);
}
.header {
text-align: center;
margin-bottom: 40px;
font-size: 32px;
color: #2c3e50;
font-weight: 600;
}
.section {
margin-bottom: 35px;
}
.section h3 {
font-size: 22px;
color: #0056b3;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 2px solid #e9ecef;
}
ul {
list-style: none;
padding-left: 5px;
}
li {
margin: 15px 0;
}
a {
display: block;
text-decoration: none;
background-color: #007BFF;
color: white;
padding: 14px 20px;
border-radius: 8px;
font-size: 17px;
transition: all 0.3s ease;
box-shadow: 0 4px 6px rgba(0, 123, 255, 0.1);
}
a:hover {
background-color: #0056b3;
transform: translateY(-2px) scale(1.01);
box-shadow: 0 6px 12px rgba(0, 91, 179, 0.2);
}
/* Responsive */
@media (max-width: 600px) {
.container {
margin: 20px;
padding: 25px;
}
.header {
font-size: 26px;
}
a {
font-size: 16px;
}
}
</style>
</head>
<body>
<div class="container">
<h2 class="header">Dashboard 🏛️</h2> <h2 class="header">Dashboard 🏛️</h2>
<p style="text-align: center; font-size: 20px;">
<div class="section"> Welcome to Income Tax Utilities Dashboard
<h3>ITR (Income Tax Return)</h3> </p>
<ul> </div>
<li><a href="{{ url_for('add_itr') }}"> Add New ITR Record</a></li> {% endblock %}
<li><a href="{{ url_for('display_itr') }}">🧾 View & Manage ITR Records</a></li>
</ul>
</div>
<div class="section">
<h3>AO (Assessing Officer)</h3>
<ul>
<li><a href="{{ url_for('add_ao') }}"> Add New AO Record</a></li>
<li><a href="{{ url_for('display_ao') }}">🧾 View & Manage AO Records</a></li>
</ul>
</div>
<div class="section">
<h3>CIT (Commissioner of Income Tax)</h3>
<ul>
<li><a href="{{ url_for('add_cit') }}"> Add New CIT Record</a></li>
<li><a href="{{ url_for('display_cit') }}">🧾 View & Manage CIT Records</a></li>
</ul>
</div>
<div class="section">
<h3>ITAT (Income Tax Appellate Tribunal)</h3>
<ul>
<li><a href="{{ url_for('add_itat') }}"> Add New ITAT Record</a></li>
<li><a href="{{ url_for('display_itat') }}">🧾 View & Manage ITAT Records</a></li>
</ul>
</div>
<div class="section">
<h3>Documents & Reports 📂</h3>
<ul>
<li><a href="/upload">→ Upload Documents</a></li>
<li><a href="/documents">→ View Documents</a></li>
<li><a href="/reports">→ Generate Reports</a></li>
<li><a href="/summary_report">→ Generate Summary Reports</a></li>
</ul>
</div>
</div>
</body>
</html>

View File

@@ -1,83 +1,41 @@
<!DOCTYPE html> {% extends "base.html" %}
<html>
<head> {% block title %}Download ITAT Report{% endblock %}
<title>Download ITAT Reports</title>
<link rel="stylesheet" href="{{ url_for('static', filename='index.css') }}">
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f4f7f9;
margin: 0;
padding: 0;
}
.container { {% block extra_css %}
max-width: 600px; <link rel="stylesheet" href="{{ url_for('static', filename='css/itat_report.css') }}">
margin: 60px auto; {% endblock %}
padding: 30px;
background-color: white;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
text-align: center;
}
h2 { {% block content %}
color: #333; <div class="main">
margin-bottom: 30px;
}
label {
font-weight: 600;
margin-right: 10px;
}
select {
padding: 8px 12px;
border: 1px solid #ccc;
border-radius: 5px;
margin-bottom: 20px;
min-width: 200px;
}
button {
padding: 10px 20px;
background-color: #007bff;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #0056b3;
}
</style>
</head>
<body>
<div class="container"> <div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>Download ITAT Report</h2> <h2>Download ITAT Report</h2>
<form method="GET" action="{{ url_for('itat_report') }}" target="_blank"> <form method="GET" action="{{ url_for('itat_report') }}" target="_blank">
<label for="year">Select Year:</label> <label for="year">Select Year:</label><br>
<br>
<select name="year" id="year" required> <select name="year" id="year" required>
<option value="">-- Select Year --</option> <option value="">-- Select Year --</option>
{% for y in years %} {% for y in years %}
<!-- <option value="{{ y }}">{{ y }}</option> --> <option value="{{ y }}">AY {{ y }} - {{ y + 1 }}</option>
<option value="{{ y }}">AY {{ y }}-{{y +1 }}</option>
{% endfor %} {% endfor %}
</select> </select>
<br><br>
<button type="submit">Download Excel</button>
</form>
</div>
</body>
</html> <br>
<button type="submit">Download Excel</button>
</form>
</div>
</div>
{% block scripts %}
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
{% endblock %}
{% block extra_js %} <script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}
{% endblock %}

View File

@@ -1,82 +1,42 @@
<!DOCTYPE html> {% extends "base.html" %}
<html>
<head> {% block title %}Download ITR Report{% endblock %}
<title>Download ITR Reports</title>
<link rel="stylesheet" href="{{ url_for('static', filename='index.css') }}">
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f4f7f9;
margin: 0;
padding: 0;
}
.container { {% block extra_css %}
max-width: 600px; <link rel="stylesheet" href="{{ url_for('static', filename='css/itr_report.css') }}">
margin: 60px auto; {% endblock %}
padding: 30px;
background-color: white;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
text-align: center;
}
h2 { {% block content %}
color: #333; <div class="main">
margin-bottom: 30px;
}
label {
font-weight: 600;
margin-right: 10px;
}
select {
padding: 8px 12px;
border: 1px solid #ccc;
border-radius: 5px;
margin-bottom: 20px;
min-width: 200px;
}
button {
padding: 10px 20px;
background-color: #007bff;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #0056b3;
}
</style>
</head>
<body>
<div class="container"> <div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>Download ITR Report</h2> <h2>Download ITR Report</h2>
<form method="GET" action="{{ url_for('itr_report') }}" target="_blank"> <form method="GET" action="{{ url_for('itr_report') }}" target="_blank">
<label for="year">Select Year:</label> <label for="year">Select Year:</label><br>
<br>
<select name="year" id="year" required> <select name="year" id="year" required>
<option value="">-- Select Year --</option> <option value="">-- Select Year --</option>
{% for y in years %} {% for y in years %}
<!-- <option value="{{ y }}">{{ y }}</option> --> <option value="{{ y }}">AY {{ y }} - {{ y + 1 }}</option>
<option value="{{ y }}">AY {{ y }}-{{y +1 }}</option>
{% endfor %} {% endfor %}
</select> </select>
<br><br>
<button type="submit">Download Excel</button>
</form>
</div>
</body>
</html> <br>
<button type="submit">
Download Excel
</button>
</form>
</div>
</div>
{% block scripts %}
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
{% endblock %}
{% block extra_js %} <script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}
{% endblock %}

85
templates/login.html Normal file
View File

@@ -0,0 +1,85 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>LCEPL Income Tax</title>
<style>
body {
font-family: Arial, sans-serif;
background: #f3f3f3;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.login-container {
background: white;
padding: 2rem;
border-radius: 10px;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
width: 300px;
}
h2 {
text-align: center;
margin-bottom: 1.5rem;
}
input[type="text"],
input[type="password"] {
width: 100%;
padding: 0.5rem;
margin-bottom: 1rem;
border: 1px solid #ccc;
border-radius: 5px;
}
button {
width: 100%;
padding: 0.5rem;
background: #007bff;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
.flash {
color: red;
text-align: center;
margin-bottom: 1rem;
}
.title {
text-align: center;
color: #007bff;
}
.subtitle {
text-align: center;
}
</style>
</head>
<body>
<div class="login-container">
<h1 class="title">Laxmi Civil Engineering Services</h1>
<h4 class="subtitle">LOGIN</h4>
{% with messages = get_flashed_messages(with_categories=true) %} {% if
messages %} {% for category, message in messages %}
<div class="flash flash-{{ category }}">{{ message }}</div>
{% endfor %} {% endif %} {% endwith %}
<form method="post">
<input type="text" name="username" placeholder="Username" required />
<input
type="password"
name="password"
placeholder="Password"
required
/>
<button type="submit">Login</button>
</form>
</div>
</body>
</html>

View File

@@ -1,154 +1,19 @@
<!DOCTYPE html> {% extends "base.html" %}
<html>
<head> {% block title %}Reports Of Stages{% endblock %}
<title>Reports Of Stages</title> {% block extra_css %}
<link rel="stylesheet" href="{{ url_for('static', filename='index.css') }}"> <link rel="stylesheet" href="{{ url_for('static', filename='css/report.css') }}">
<style> {% endblock %}
body { {% block content %}
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; <div class="main">
background-color: #f4f7f9;
margin: 0;
padding: 0;
}
.container {
max-width: 900px;
margin: 40px auto;
padding: 30px;
background-color: white;
border-radius: 10px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
h2 {
color: #333;
text-align: center;
margin-bottom: 30px;
}
form {
display: flex;
justify-content: center;
gap: 20px;
margin-bottom: 30px;
flex-wrap: wrap;
}
label {
font-weight: 600;
margin-right: 5px;
}
select {
padding: 6px 10px;
border: 1px solid #ccc;
border-radius: 4px;
}
button {
padding: 6px 14px;
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: #0056b3;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
table,
th,
td {
border: 1px solid #ccc;
}
th {
background-color: #007bff;
color: white;
padding: 10px;
text-align: left;
}
td {
padding: 10px;
background-color: #f9f9f9;
}
tr:nth-child(even) td {
background-color: #eef3f7;
}
p {
text-align: center;
color: #777;
}
ul {
margin-top: 30px;
list-style: none;
padding-left: 0;
text-align: center;
}
ul li {
margin: 10px 0;
}
ul li a {
color: #007bff;
font-weight: 500;
text-decoration: none;
}
ul li a:hover {
text-decoration: none;
}
.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>
</head>
<body>
<div class="container"> <div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>Reports</h2> <h2>Reports</h2>
<ul> <ul>
<li><a href="/itr_report">→ View ITR Reports</a></li> <li><a href="{{ url_for('itr_report') }}">→ View ITR Reports</a></li>
<li><a href="/ao_report">→ View AO Reports</a></li> <li><a href="{{ url_for('ao_report') }}">→ View AO Reports</a></li>
<li><a href="/cit_report">→ View CIT Reports</a></li> <li><a href="{{ url_for('cit_report') }}">→ View CIT Reports</a></li>
<li><a href="/itat_report">→ View ITAT Reports</a></li> <li><a href="{{ url_for('itat_report') }}">→ View ITAT Reports</a></li>
</ul> </ul>
</div> </div>
</body> </div>
{% endblock %}
</html>

View File

@@ -128,7 +128,7 @@
<body> <body>
<div class="container"> <div class="container">
<!-- Back to Dashboard Button --> <!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a> <!-- <a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>-->
<h2>{{ stage }} Reports</h2> <h2>{{ stage }} Reports</h2>

View File

@@ -1,90 +1,17 @@
<!DOCTYPE html> {% extends "base.html" %}
<html>
<head> {% block title %}Download Summary Report{% endblock %}
<title>Download Summary Report</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.container { {% block extra_css %}
background-color: white; <!-- Optional: Add page-specific CSS -->
padding: 30px 40px; <link rel="stylesheet" href="{{ url_for('static', filename='css/summary.css') }}">
border-radius: 10px; {% endblock %}
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
text-align: center;
}
h2 { {% block content %}
margin-bottom: 20px; <div class="main">
color: #333;
}
form {
margin-top: 20px;
}
label {
font-weight: bold;
margin-right: 10px;
}
select {
padding: 8px 12px;
border: 1px solid #ccc;
border-radius: 5px;
margin-right: 10px;
}
button {
padding: 10px 16px;
background-color: #007bff;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #0056b3;
}
.message {
color: rgb(0, 0, 0);
margin-top: 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>
</head>
<body>
<div class="container"> <div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a> <!-- <a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>-->
<h2>Download Year-wise Summary Report</h2> <h2>Download Year-wise Summary Report</h2>
@@ -93,18 +20,24 @@
{% endif %} {% endif %}
<form method="GET" action="{{ url_for('summary_report') }}"> <form method="GET" action="{{ url_for('summary_report') }}">
<label for="year">Select Year:</label> <label>Select Year:</label>
<select name="year" id="year" required> <select name="year" id="year" required>
<option value="">-- Select Year --</option> <option value="">-- Select Year --</option>
{% for year in years %} {% for year in years %}
<!-- <option value="{{ year }}">{{ year }}</option> --> <option value="{{ year }}">AY {{ year }}-{{ year + 1 }}</option>
<option value="{{ year }}">AY {{ year }}-{{year +1 }}</option>
{% endfor %} {% endfor %}
</select> </select>
<button type="submit">Download Summary Report</button> <button type="submit">Download Summary Report</button>
</form> </form>
</div>
</body>
</html> </div>
</div>
{% block scripts %}
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
{% endblock %}
{% block extra_js %} <script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}
{% endblock %}

View File

@@ -1,28 +1,48 @@
<!DOCTYPE html> {% extends "base.html" %}
<html lang="en">
<head> {% block title %}Update AO Record{% endblock %}
<meta charset="UTF-8">
<title>Update AO Record</title>
<link rel="stylesheet" href="{{ url_for('static', filename='index.css') }}">
</head> {% block extra_css %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/add_ao.css') }}">
{% endblock %}
<body> {% block content %}
<div class="main">
<div class="container"> <div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>Update AO Record for Year {{ record.year }}</h2> <h2>Update AO Record for Year {{ record.year }}</h2>
<form method="POST" action="{{ url_for('update_ao', id=record.id) }}"> <form method="POST" action="{{ url_for('update_ao', id=record.id) }}">
{% for field in record.keys() if field != 'id' %}
<label>{{ field.replace("_", " ").title() }}:</label> <label for="year">Year:</label>
<input type="number" step="any" name="{{ field }}" value="{{ record[field] }}" required> <input type="text" id="year" name="year" value="{{ record.year }}" readonly class="readonly-field">
{% for field in record.keys() if field not in ['id', 'year'] %}
<label for="{{ field }}">{{ field.replace("_", " ").title() }}:</label>
<input type="number" id="{{ field }}" name="{{ field }}" step="any" value="{{ record[field] }}" required>
{% endfor %} {% endfor %}
<!-- {% for field in record.keys() if field != 'id' %}-->
<!-- <label for="{{ field }}">{{ field.replace("_", " ").title() }}:</label>-->
<!-- <input -->
<!-- type="number" -->
<!-- id="{{ field }}" -->
<!-- name="{{ field }}" -->
<!-- step="any" -->
<!-- value="{{ record[field] }}" -->
<!-- required>-->
<!-- {% endfor %}-->
<button type="submit">Update Record</button> <button type="submit">Update Record</button>
</form> </form>
</div> </div>
</body> </div>
{% endblock %}
</html> {% block extra_js %}
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
<script src="{{ url_for('static', filename='js/cit_calc.js') }}"></script>
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}

View File

@@ -1,26 +1,49 @@
<!DOCTYPE html> {% extends "base.html" %}
<html lang="en">
<head> {% block title %}Update CIT Record{% endblock %}
<meta charset="UTF-8">
<title>Update CIT Record</title>
<link rel="stylesheet" href="{{ url_for('static', filename='index.css') }}">
</head>
<body> {% block extra_css %}
<div class="container"> <link rel="stylesheet" href="{{ url_for('static', filename='css/add_cit.css') }}">
<!-- Back to Dashboard Button --> {% endblock %}
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
{% block content %}
<div class="container">
<h2>Update CIT Record for AY {{ record.year }}</h2>
<h2>Update CIT Record for Year {{ record.year }}</h2>
<form method="POST" action="{{ url_for('update_cit', id=record.id) }}"> <form method="POST" action="{{ url_for('update_cit', id=record.id) }}">
{% for field in record.keys() if field != 'id' %}
<label>{{ field.replace("_", " ").title() }}:</label>
<input type="number" name="{{ field }}" step="0.01" value="{{ record[field] }}" required>
{% endfor %}
<button type="submit">Update Record</button>
</form>
</div>
</body>
</html> <label for="year">Year:</label>
<input type="text" id="year" name="year" value="{{ record.year }}" readonly class="readonly-field">
{% for field in record.keys() if field not in ['id', 'year'] %}
<label for="{{ field }}">{{ field.replace("_", " ").title() }}:</label>
<input type="number" id="{{ field }}" name="{{ field }}" step="any" value="{{ record[field] }}" required>
{% endfor %}
<!-- {% for field in record.keys() if field != 'id' %}-->
<!-- <label for="{{ field }}">{{ field.replace('_', ' ').title() }}:</label>-->
<!-- <input -->
<!-- type="number" -->
<!-- step="0.01" -->
<!-- id="{{ field }}" -->
<!-- name="{{ field }}" -->
<!-- value="{{ record[field] }}" -->
<!-- required -->
<!-- />-->
<!-- {% endfor %}-->
<button type="submit">Update Record</button>
</form>
</div>
{% endblock %}
{% block extra_js %}
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
<script src="{{ url_for('static', filename='js/cit_calc.js') }}"></script>
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}

View File

@@ -1,20 +1,19 @@
<!DOCTYPE html> {% extends "base.html" %}
<html> {% block title %}Update ITAT Record{% endblock %}
{% block extra_css %}
<!-- Child page CSS -->
<link rel="stylesheet" href="{{ url_for('static', filename='css/add_itat.css') }}">
{% endblock %}
{% block content %}
<head> <div class="container">
<title>Update ITAT Record</title>
<link rel="stylesheet" href="{{ url_for('static', filename='index.css') }}">
</head>
<body>
<div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>Update ITAT Record for Year {{ record.year }}</h2> <h2>Update ITAT Record for Year {{ record.year }}</h2>
<form method="POST" action="{{ url_for('update_itat', id=record.id) }}"> <form method="POST" action="{{ url_for('update_itat', id=record.id) }}">
<label>Year:</label> <label>Year:</label>
<input type="number" name="year" step="1" value="{{ record.year }}" required> <input type="number" name="year" step="1" value="{{ record.year }}" readonly>
<label>MAT Tax Credit:</label> <label>MAT Tax Credit:</label>
<input type="number" name="mat_tax_credit" step="0.01" value="{{ record.mat_tax_credit }}" required> <input type="number" name="mat_tax_credit" step="0.01" value="{{ record.mat_tax_credit }}" required>
@@ -30,7 +29,13 @@
<button type="submit">Update Record</button> <button type="submit">Update Record</button>
</form> </form>
</div>
</body>
</html> </div>
{% endblock %}
{% block extra_js %}
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
<script src="{{ url_for('static', filename='js/cit_calc.js') }}"></script>
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}

View File

@@ -1,26 +1,48 @@
<!DOCTYPE html> {% extends "base.html" %}
<html lang="en">
<head> {% block title %}Update ITR Record{% endblock %}
<meta charset="UTF-8">
<title>Update ITR Record</title>
<link rel="stylesheet" href="{{ url_for('static', filename='index.css') }}">
</head> {% block extra_css %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/add_itr.css') }}">
{% endblock %}
<body> {% block content %}
<div class="main">
<div class="container"> <div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>Update ITR Record for Year {{ record.year }}</h2>
<form method="POST" action="{{ url_for('update_itr', id=record.id) }}">
{% for field in record.keys() if field != 'id' %}
<label>{{ field.replace("_", " ").title() }}:</label>
<input type="number" name="{{ field }}" step="any" value="{{ record[field] }}" required>
{% endfor %}
<button type="submit">Update Record</button>
</form>
</div>
</body>
</html> <h2>Update ITR Record for Year {{ record.year }}</h2>
<form method="POST" action="{{ url_for('update_itr', id=record.id) }}">
<label for="year">Year:</label>
<input type="text" id="year" name="year" value="{{ record.year }}" readonly class="readonly-field">
{% for field in record.keys() if field not in ['id', 'year'] %}
<label for="{{ field }}">{{ field.replace("_", " ").title() }}:</label>
<input type="number" id="{{ field }}" name="{{ field }}" step="any" value="{{ record[field] }}" required>
{% endfor %}
<!-- {% for field in record.keys() if field != 'id' %}-->
<!-- <label for="{{ field }}">{{ field.replace("_", " ").title() }}:</label>-->
<!-- <input -->
<!-- type="number" -->
<!-- id="{{ field }}" -->
<!-- name="{{ field }}" -->
<!-- step="any" -->
<!-- value="{{ record[field] }}" -->
<!-- required>-->
<!-- {% endfor %}-->
<button type="submit">Update Record</button>
</form>
</div>
</div>
{% endblock %}
{% block extra_js %}
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
<script src="{{ url_for('static', filename='js/cit_calc.js') }}"></script>
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}

View File

@@ -1,42 +1,47 @@
<!DOCTYPE html> {% extends "base.html" %}
<html>
<head> {% block title %}Upload Documents{% endblock %}
<title>Upload Documents</title>
<link rel="stylesheet" href="{{ url_for('static', filename='index.css') }}">
<script src="/static/js/year_dropdown.js"></script>
</head>
<body> {% block extra_css %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/upload.css') }}">
{% endblock %}
{% block content %}
<div class="main">
<div class="container"> <div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>Upload Income Tax Documents</h2> <h2>Upload Income Tax Documents</h2>
<form method="POST" enctype="multipart/form-data">
<!-- <label for="year">Year:</label>
<input type="number" name="year" required> -->
<div class="form-group"> <form id="income_tax_documents" method="POST" enctype="multipart/form-data">
<label>Year:</label> <label>Year:</label>
<select id="year" name="year" required></select> <select id="year" name="year" required></select>
</div>
<div class="form-group"> <div id="yearError" style="color: red; display: none; margin-bottom: 10px;"></div>
<label for="stage">Stage:</label>
<label>Stage:</label>
<select name="stage" required> <select name="stage" required>
<option value="ITR">ITR</option> <option value="ITR">ITR</option>
<option value="AO">AO</option> <option value="AO">AO</option>
<option value="CIT">CIT</option> <option value="CIT">CIT</option>
<option value="ITAT">ITAT</option> <option value="ITAT">ITAT</option>
</select> </select>
</div>
<label for="documents">Select Documents:</label> <label>Select Documents:</label>
<input type="file" name="documents" multiple required> <input type="file" name="documents" multiple required>
<button type="submit">Upload</button> <button type="submit">Upload</button>
</form> </form>
</div>
</body>
</html> </div>
</div>
{% endblock %}
{% block scripts %}
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
<script src="{{ url_for('static', filename='js/toggle.js') }}"></script>
{% endblock %}
{% block extra_js %}
<script src="{{ url_for('static', filename='js/year_dropdown.js') }}"></script>
{% endblock %}

View File

@@ -1,148 +1,25 @@
<!DOCTYPE html> {% extends "base.html" %}
<html>
<head> {% block title %}Document Records{% endblock %}
<title>View Documents</title>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f4f7f9;
margin: 0;
padding: 0;
}
.container { {% block extra_css %}
max-width: 1200px; <link rel="stylesheet" href="{{ url_for('static', filename='css/documents.css') }}">
margin: 40px auto; {% endblock %}
background: #fff;
padding: 30px 40px;
border-radius: 10px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
h2 { {% block content %}
text-align: center;
color: #2c3e50;
margin-bottom: 30px;
}
form { <div class="main">
display: flex;
justify-content: center;
gap: 20px;
flex-wrap: wrap;
margin-bottom: 30px;
}
label {
font-weight: 600;
color: #34495e;
}
select {
padding: 8px 12px;
border: 1px solid #ccc;
border-radius: 5px;
font-size: 14px;
background-color: #fff;
}
button {
padding: 10px 20px;
background-color: #3498db;
color: white;
border: none;
border-radius: 5px;
font-weight: bold;
cursor: pointer;
transition: background-color 0.3s ease;
}
button:hover {
background-color: #2980b9;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
thead {
background-color: #2c3e50;
color: white;
}
th,
td {
padding: 12px 15px;
border: 1px solid #ddd;
text-align: center;
}
tbody tr:nth-child(even) {
background-color: #f9f9f9;
}
tbody tr:hover {
background-color: #f1f1f1;
}
a {
color: #2980b9;
text-decoration: none;
font-weight: 600;
}
a:hover {
text-decoration: underline;
}
/* 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;
}
@media (max-width: 768px) {
form {
flex-direction: column;
align-items: center;
}
.container {
padding: 20px;
}
}
</style>
</head>
<body>
<div class="container"> <div class="container">
<!-- Back to Dashboard Button -->
<a href="{{ url_for('index') }}" class="back-btn">← Back to Dashboard</a>
<h2>Document Records</h2> <h2>Document Records</h2>
<!-- FILTER FORM -->
<form method="GET"> <form method="GET">
<label for="year">Filter by Year:</label> <label for="year">Filter by Year:</label>
<select name="year"> <select name="year">
<option value="">All</option> <option value="">All</option>
{% for y in years %} {% for y in years %}
<option value="{{ y }}">{{ y }}</option> <option value="{{ y }}">AY {{ y }}-{{ y+1 }}</option>
{% endfor %} {% endfor %}
</select> </select>
@@ -158,6 +35,7 @@
<button type="submit">Apply</button> <button type="submit">Apply</button>
</form> </form>
<!-- DOCUMENT TABLE -->
<table> <table>
<thead> <thead>
<tr> <tr>
@@ -170,22 +48,33 @@
<th>View</th> <th>View</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for doc in documents %} {% for doc in documents %}
<tr> <tr>
<td>{{ doc.filename }}</td> <td>{{ doc.filename }}</td>
<td>{{ doc.filetype }}</td> <td>{{ doc.filetype }}</td>
<td>{{ doc.stage }}</td> <td>{{ doc.stage }}</td>
<td>{{ doc.year }}</td> <td>AY {{ doc.year }}-{{ doc.year +1 }}</td>
<td>{{ doc.uploaded_at }}</td> <td>{{ doc.uploaded_at }}</td>
<td><a href="{{ url_for('uploaded_file', filename=doc.filename) }}?mode=download">Download</a></td>
<td><a href="{{ url_for('uploaded_file', filename=doc.filename) }}?mode=view" <td>
target="_blank">View</a></td> <a href="{{ url_for('uploaded_file', filename=doc.filename) }}?mode=download">
Download
</a>
</td>
<td>
<a href="{{ url_for('uploaded_file', filename=doc.filename) }}?mode=view" target="_blank">
View
</a>
</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
</div>
</body>
</html> </div>
</div>
{% endblock %}