From 94457af31339243318cd3f3af08757e787ae3d10 Mon Sep 17 00:00:00 2001 From: LaxmiB Date: Sat, 8 Aug 2026 14:54:57 +0530 Subject: [PATCH] Formated Subcontractor & Client Report --- app/routes/file_report.py | 62 ++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/app/routes/file_report.py b/app/routes/file_report.py index 69c750d..bbd5179 100644 --- a/app/routes/file_report.py +++ b/app/routes/file_report.py @@ -188,10 +188,6 @@ def render_table_or_empty(df, model_key, table_class, raw_fields=None): return html -<<<<<<< HEAD - - - # ---------------- EXCEL SHEET FORMATTING (Tr.Ex / Mh.Ex / MH & DC / Pipe Laying) ---------------- SHEET_TITLES = { @@ -250,12 +246,16 @@ def format_detail_sheet(workbook, worksheet, df, sheet_name, contractor_name="", label_format = workbook.add_format({"bold": True}) value_format = workbook.add_format({}) - info_fields = [ - ("Category:", report_title), - ("Contractor:", contractor_name or "-"), - ("RA Bill No:", ra_bill_no or "All"), - ("Date:", report_date), - ] + info_fields = [("Category:", report_title)] + + # Client reports don't have a single contractor (data can span + # multiple subcontractors), so this field is only shown when a + # contractor name is actually passed in (Subcontractor report). + if contractor_name: + info_fields.append(("Contractor:", contractor_name)) + + info_fields.append(("RA Bill No:", ra_bill_no or "All")) + info_fields.append(("Date:", report_date)) col = 0 for label, value in info_fields: @@ -301,8 +301,6 @@ def format_detail_sheet(workbook, worksheet, df, sheet_name, contractor_name="", worksheet.set_row(header_row, 30) -======= ->>>>>>> 80d4e82f9b14a0454b3beb45992dab986ab8853f # ---------------- FETCH ---------------- class SubcontractorBill: def __init__(self): @@ -952,22 +950,52 @@ def client_report(): # -------- DOWNLOAD -------- if action == "download": + report_date = datetime.now().strftime("%d-%b-%Y") + output = io.BytesIO() with pd.ExcelWriter(output, engine="xlsxwriter") as writer: workbook = writer.book abstract_service.generate(workbook) - bill_gen.df_tr.to_excel(writer, index=False, sheet_name="Tr.Ex") - bill_gen.df_mh.to_excel(writer, index=False, sheet_name="Mh.Ex") - bill_gen.df_dc.to_excel(writer, index=False, sheet_name="MH & DC") - bill_gen.df_laying.to_excel(writer, index=False, sheet_name="Pipe Laying") + sheet_map = [ + (bill_gen.df_tr, "Tr.Ex"), + (bill_gen.df_mh, "Mh.Ex"), + (bill_gen.df_dc, "MH & DC"), + (bill_gen.df_laying, "Pipe Laying"), + ] + for df, sheet_name in sheet_map: + if not df.empty: + # Use a copy for the export only, same as the + # Subcontractor report, so the formatted sheet gets + # a clean "Sr No" column instead of the raw Id. + export_df = df.drop(columns=["Id"], errors="ignore").copy() + export_df.insert(0, "Sr No", range(1, len(export_df) + 1)) + + export_df.to_excel(writer, sheet_name=sheet_name, index=False, startrow=1) + worksheet = writer.sheets[sheet_name] + format_detail_sheet( + workbook, worksheet, export_df, sheet_name, + contractor_name="", + ra_bill_no=RA_Bill_No, + report_date=report_date + ) output.seek(0) + filename_parts = [f"Client_RA_{re.sub(r'[^A-Za-z0-9_-]+', '_', RA_Bill_No)}"] + + if location: + filename_parts.append(re.sub(r'[^A-Za-z0-9_-]+', '_', location).strip('_')) + + if category and category != "all": + filename_parts.append(category.upper()) + + filename = "_".join(filename_parts) + "_Report.xlsx" + return send_file( output, - download_name=f"Client_RA_{RA_Bill_No}_Report.xlsx", + download_name=filename, as_attachment=True )