summary report download code commit.

This commit is contained in:
2025-12-02 15:38:19 +05:30
parent d21daaa83f
commit 3cf258ba0d
8 changed files with 249 additions and 110 deletions

209
main.py
View File

@@ -850,8 +850,6 @@ def itat_report():
# return render_template("itr_reports.html", years=years)
# @app.route('/ao_report', methods=['GET'])
# def ao_report():
# selected_year = request.args.get('year')
@@ -972,7 +970,6 @@ def itat_report():
# connection.close()
# @app.route('/itr_report_download', methods=['GET'])
# def itr_report_download():
# connection = pymysql.connect(**db_config)
@@ -1019,108 +1016,118 @@ def download_report(doc_id):
file_path = os.path.join('static', 'uploads', document['filename']) # adjust as per your storage
return send_from_directory(directory='static/uploads', path=document['filename'], as_attachment=True)
# @app.route('/summary_report', methods=['GET'])
# def summary_report():
# year = request.args.get('year')
# if not year:
# connection = pymysql.connect(**db_config)
# try:
# years = set()
# for table in ['itr', 'ao', 'cit', 'itat']:
# df = pd.read_sql(f"SELECT DISTINCT year FROM {table}", connection)
# years.update(int(y) for y in df['year'].dropna().tolist())
# return render_template('summary_reports.html', years=sorted(years), message="Please select a year to download.")
# finally:
# connection.close()
# connection = pymysql.connect(**db_config)
# try:
# stages = ['itr', 'ao', 'cit', 'itat']
# stage_data = {}
# for stage in stages:
# query = f"SELECT * FROM {stage} WHERE year = %s"
# df = pd.read_sql(query, connection, params=[year])
# stage_data[stage.upper()] = df
# def safe_get(df, col):
# return df[col].values[0] if col in df.columns and not df.empty else '-'
# particulars = [
# "Gross Total Income", "Add: Disallowance u/s 14A", "Add: Disallowance u/s 37", "GTI as per",
# "Less: Deduction u/s 80IA", "Less: Deduction u/s 80G", "Net Taxable Income", "Tax @ 30%",
# "Tax @ 18.5% on Book Profit", "Surcharge @ 12%", "Education Cess @ 3%", "Total Tax Payable",
# "Less: MAT Credit", "Net Tax", "Add: Interest u/s 234C", "Total Tax",
# "Advance Tax", "TDS", "TCS", "SAT", "Tax on Regular Assessment", "Refund"
# ]
# columns = [
# 'gross_total_income', 'disallowance_14a', 'disallowance_37', 'gti',
# 'deduction_80ia', 'deduction_80g', 'net_taxable_income', 'tax_30',
# 'book_profit_tax', 'surcharge_12', 'education_cess', 'total_tax',
# 'mat_credit', 'net_tax', 'interest_234c', 'total_tax_payable',
# 'advance_tax', 'tds', 'tcs', 'sat', 'tax_regular', 'refund'
# ]
# data = {
# "Particulars": particulars,
# "ITR": [safe_get(stage_data['ITR'], col) for col in columns],
# "AO": [safe_get(stage_data['AO'], col) for col in columns],
# "CIT(A)": [safe_get(stage_data['CIT'], col) for col in columns],
# "ITAT": [safe_get(stage_data['ITAT'], col) for col in columns],
# }
# df = pd.DataFrame(data)
# # Export to Excel with formatting
# output = io.BytesIO()
# with pd.ExcelWriter(output, engine='xlsxwriter') as writer:
# df.to_excel(writer, index=False, sheet_name=f'AY {year}')
# workbook = writer.book
# worksheet = writer.sheets[f'AY {year}']
# # Format definitions
# header_format = workbook.add_format({
# 'bold': True,
# 'text_wrap': True,
# 'valign': 'middle',
# 'align': 'center',
# 'bg_color': '#007bff',
# 'font_color': 'white',
# 'border': 1
# })
# cell_format = workbook.add_format({
# 'border': 1,
# 'valign': 'top',
# 'align': 'center',
# })
# # Apply formats
# for col_num, value in enumerate(df.columns):
# worksheet.write(0, col_num, value, header_format)
# # Auto column width
# max_len = max(df[value].astype(str).map(len).max(), len(str(value))) + 2
# worksheet.set_column(col_num, col_num, max_len)
# # Format data rows
# for row_num in range(1, len(df) + 1):
# for col_num in range(len(df.columns)):
# worksheet.write(row_num, col_num, df.iloc[row_num - 1, col_num], cell_format)
# output.seek(0)
# return send_file(
# output,
# mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
# as_attachment=True,
# download_name=f"Summary_Report_{year}.xlsx"
# )
# finally:
# connection.close()
@app.route('/summary_report', methods=['GET'])
def summary_report():
year = request.args.get('year')
docHandler = DocumentHandler()
return docHandler.Summary_report(request=request)
if not year:
connection = pymysql.connect(**db_config)
try:
years = set()
for table in ['itr', 'ao', 'cit', 'itat']:
df = pd.read_sql(f"SELECT DISTINCT year FROM {table}", connection)
years.update(int(y) for y in df['year'].dropna().tolist())
return render_template('summary_reports.html', years=sorted(years), message="Please select a year to download.")
finally:
connection.close()
connection = pymysql.connect(**db_config)
try:
stages = ['itr', 'ao', 'cit', 'itat']
stage_data = {}
for stage in stages:
query = f"SELECT * FROM {stage} WHERE year = %s"
df = pd.read_sql(query, connection, params=[year])
stage_data[stage.upper()] = df
def safe_get(df, col):
return df[col].values[0] if col in df.columns and not df.empty else '-'
particulars = [
"Gross Total Income", "Add: Disallowance u/s 14A", "Add: Disallowance u/s 37", "GTI as per",
"Less: Deduction u/s 80IA", "Less: Deduction u/s 80G", "Net Taxable Income", "Tax @ 30%",
"Tax @ 18.5% on Book Profit", "Surcharge @ 12%", "Education Cess @ 3%", "Total Tax Payable",
"Less: MAT Credit", "Net Tax", "Add: Interest u/s 234C", "Total Tax",
"Advance Tax", "TDS", "TCS", "SAT", "Tax on Regular Assessment", "Refund"
]
columns = [
'gross_total_income', 'disallowance_14a', 'disallowance_37', 'gti',
'deduction_80ia', 'deduction_80g', 'net_taxable_income', 'tax_30',
'book_profit_tax', 'surcharge_12', 'education_cess', 'total_tax',
'mat_credit', 'net_tax', 'interest_234c', 'total_tax_payable',
'advance_tax', 'tds', 'tcs', 'sat', 'tax_regular', 'refund'
]
data = {
"Particulars": particulars,
"ITR": [safe_get(stage_data['ITR'], col) for col in columns],
"AO": [safe_get(stage_data['AO'], col) for col in columns],
"CIT(A)": [safe_get(stage_data['CIT'], col) for col in columns],
"ITAT": [safe_get(stage_data['ITAT'], col) for col in columns],
}
df = pd.DataFrame(data)
# Export to Excel with formatting
output = io.BytesIO()
with pd.ExcelWriter(output, engine='xlsxwriter') as writer:
df.to_excel(writer, index=False, sheet_name=f'AY {year}')
workbook = writer.book
worksheet = writer.sheets[f'AY {year}']
# Format definitions
header_format = workbook.add_format({
'bold': True,
'text_wrap': True,
'valign': 'middle',
'align': 'center',
'bg_color': '#007bff',
'font_color': 'white',
'border': 1
})
cell_format = workbook.add_format({
'border': 1,
'valign': 'top',
'align': 'center',
})
# Apply formats
for col_num, value in enumerate(df.columns):
worksheet.write(0, col_num, value, header_format)
# Auto column width
max_len = max(df[value].astype(str).map(len).max(), len(str(value))) + 2
worksheet.set_column(col_num, col_num, max_len)
# Format data rows
for row_num in range(1, len(df) + 1):
for col_num in range(len(df.columns)):
worksheet.write(row_num, col_num, df.iloc[row_num - 1, col_num], cell_format)
output.seek(0)
return send_file(
output,
mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
as_attachment=True,
download_name=f"Summary_Report_{year}.xlsx"
)
finally:
connection.close()
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5003, debug=True)