Files
IncomeTaxSystem/AppCode/AOHandler.py

137 lines
4.4 KiB
Python

from AppCode.Config import DBConfig
import mysql.connector
import pandas as pd
import io
class AOHandler:
def __init__(self):
self.conn = DBConfig.get_db_connection()
self.cursor = self.conn.cursor(dictionary=True)
# GET ALL AO RECORDS using stored procedure "GetAllItr"
def get_all_ao(self):
self.cursor.callproc("GetAllAO")
records = []
for result in self.cursor.stored_results():
records = result.fetchall()
return records
def get_ao_by_id(self, id):
# Call stored procedure
self.cursor.callproc('GetAOById', [id])
# Fetch result
records = []
for result in self.cursor.stored_results():
records = result.fetchall()
if records:
return records[0] # return single record
return None
""" variable of AO model
year, 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
"""
def add_ao(self, data):
fields = [
"year","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"
]
values = [data.get(f, 0) for f in fields]
print("---- values ---- ",values)
self.cursor.callproc("InsertAO", values)
self.conn.commit()
# UPDATE ITR RECORD by AO id
def update_ao(self, id, data):
fields = [
"year","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"
]
values = [id] + [data.get(f, 0) for f in fields]
print("AO update values:", values)
self.cursor.callproc("UpdateAOById", values)
self.conn.commit()
# DELETE RECORD by AO id
def delete_ao_by_id(self, id):
# Call the stored procedure
self.cursor.callproc('DeleteAOById', [id])
self.conn.commit()
# CLOSE CONNECTION
def close(self):
self.cursor.close()
self.conn.close()
def ao_report_download(self, selected_year):
try:
# Call stored proc to fetch year-wise records
self.cursor.callproc("GetAOByYear", [selected_year])
rows = []
for result in self.cursor.stored_results():
rows = result.fetchall()
if not rows:
return None
df = pd.DataFrame(rows)
# TRANSPOSE
df_transposed = df.transpose()
df_transposed.insert(0, 'Field', df_transposed.index)
# Rename columns: Record 1, 2, 3...
record_cols = {
i: f"Record {i}"
for i in df_transposed.columns if isinstance(i, int)
}
df_transposed.rename(columns=record_cols, inplace=True)
df_transposed.reset_index(drop=True, inplace=True)
# Excel Output
output = io.BytesIO()
with pd.ExcelWriter(output, engine="xlsxwriter") as writer:
df_transposed.to_excel(writer, index=False, sheet_name="AO_Vertical")
worksheet = writer.sheets["AO_Vertical"]
worksheet.set_column(0, 0, 30)
output.seek(0)
return output
except mysql.connector.Error as e:
print("MySQL Error:", e)
return None