diff --git a/app/routes/file_report.py b/app/routes/file_report.py index c3aebd1..f533868 100644 --- a/app/routes/file_report.py +++ b/app/routes/file_report.py @@ -100,11 +100,11 @@ def add_action_columns(df, model_key): df.insert(0, "Select", df["Id"].apply( lambda x: f'' )) - + df["Update"] = df["Id"].apply( lambda x: f' Edit' ) - + df["Delete"] = df["Id"].apply( lambda x: f'' ) @@ -476,6 +476,30 @@ def report_file(): bill.Fetch(subcontractor_id=subcontractor_id) else: bill.Fetch(ra_bill_no, subcontractor_id, location, mh_no) + + + # --------------------------------------------------------- + if ( + bill.df_tr.empty and + bill.df_mh.empty and + bill.df_dc.empty and + bill.df_laying.empty + ): + flash( + f"No records found for RA Bill No '{ra_bill_no}'. " + "Please check the RA Bill No and try again." + if ra_bill_no else + "No records found for the selected filters.", + "warning" + ) + return render_template( + "subcontractor_report.html", + subcontractors=subcontractors, + selected_sc_id=selected_sc_id, + selected_ra_bill=ra_bill_no, + selected_location=location, + selected_category=category + ) # ----------------------------------------- # Generate Abstract Report for Web @@ -495,6 +519,32 @@ def report_file(): bill.df_tr = bill.df_mh = bill.df_laying = pd.DataFrame() elif category == "laying": bill.df_tr = bill.df_mh = bill.df_dc = pd.DataFrame() + + + if ( + category in ("tr", "mh", "dc", "laying") + and bill.df_tr.empty and bill.df_mh.empty + and bill.df_dc.empty and bill.df_laying.empty + ): + category_labels = { + "tr": "Trench Excavation", + "mh": "Manhole Excavation", + "dc": "Domestic Chamber", + "laying": "Pipe Laying", + } + flash( + f"No {category_labels[category]} records found for the " + "selected filters.", + "warning" + ) + return render_template( + "subcontractor_report.html", + subcontractors=subcontractors, + selected_sc_id=selected_sc_id, + selected_ra_bill=ra_bill_no, + selected_location=location, + selected_category=category + ) # =================================================== @@ -508,16 +558,46 @@ def report_file(): abstract = AbstractReportService(subcontractor_id=subcontractor_id,ra_bill_no=ra_bill_no) abstract.generate(workbook) - bill.df_tr.to_excel(writer,sheet_name="Tr.Ex",index=False) - bill.df_mh.to_excel(writer,sheet_name="Mh.Ex",index=False) - bill.df_dc.to_excel(writer,sheet_name="MH & DC",index=False) - bill.df_laying.to_excel(writer,sheet_name="Pipe Laying",index=False) + + sheet_map = [ + (bill.df_tr, "Tr.Ex"), + (bill.df_mh, "Mh.Ex"), + (bill.df_dc, "MH & DC"), + (bill.df_laying, "Pipe Laying"), + ] + for df, sheet_name in sheet_map: + if not df.empty: + df.to_excel(writer, sheet_name=sheet_name, index=False) writer.close() output.seek(0) - + + + sc_obj = next( + (s for s in subcontractors if str(s.id) == str(subcontractor_id)), + None + ) + sc_name = sc_obj.subcontractor_name if sc_obj else "Subcontractor" + sc_name = re.sub(r'[^A-Za-z0-9_-]+', '_', sc_name).strip('_') + + name_parts = [sc_name] + + if ra_bill_no: + name_parts.append(f"RA{re.sub(r'[^A-Za-z0-9_-]+', '_', ra_bill_no)}") + + if location: + name_parts.append(re.sub(r'[^A-Za-z0-9_-]+', '_', location).strip('_')) + + if category and category != "all": + name_parts.append(category.upper()) + + if action == "excel_all": + name_parts.append("All") + + filename = "_".join(name_parts) + "_Report.xlsx" + return send_file( output, - download_name= "subcontractor_Report.xlsx", + download_name=filename, as_attachment=True ) diff --git a/app/templates/subcontractor_report.html b/app/templates/subcontractor_report.html index 2ba8f61..209c457 100644 --- a/app/templates/subcontractor_report.html +++ b/app/templates/subcontractor_report.html @@ -101,7 +101,7 @@