diff --git a/app/Controllers/__pycache__/activity_controller.cpython-314.pyc b/app/Controllers/__pycache__/activity_controller.cpython-314.pyc new file mode 100644 index 0000000..28e034e Binary files /dev/null and b/app/Controllers/__pycache__/activity_controller.cpython-314.pyc differ diff --git a/app/Controllers/__pycache__/auth_controller.cpython-314.pyc b/app/Controllers/__pycache__/auth_controller.cpython-314.pyc new file mode 100644 index 0000000..7dfa298 Binary files /dev/null and b/app/Controllers/__pycache__/auth_controller.cpython-314.pyc differ diff --git a/app/Controllers/__pycache__/dashboard_controller.cpython-314.pyc b/app/Controllers/__pycache__/dashboard_controller.cpython-314.pyc new file mode 100644 index 0000000..4ba21a7 Binary files /dev/null and b/app/Controllers/__pycache__/dashboard_controller.cpython-314.pyc differ diff --git a/app/Controllers/__pycache__/dropdown_controller.cpython-314.pyc b/app/Controllers/__pycache__/dropdown_controller.cpython-314.pyc new file mode 100644 index 0000000..47afb7e Binary files /dev/null and b/app/Controllers/__pycache__/dropdown_controller.cpython-314.pyc differ diff --git a/app/Controllers/__pycache__/filter_controller.cpython-314.pyc b/app/Controllers/__pycache__/filter_controller.cpython-314.pyc new file mode 100644 index 0000000..68d4c00 Binary files /dev/null and b/app/Controllers/__pycache__/filter_controller.cpython-314.pyc differ diff --git a/app/Controllers/__pycache__/report_controller.cpython-314.pyc b/app/Controllers/__pycache__/report_controller.cpython-314.pyc new file mode 100644 index 0000000..ae67f6a Binary files /dev/null and b/app/Controllers/__pycache__/report_controller.cpython-314.pyc differ diff --git a/app/Controllers/__pycache__/task_controller.cpython-314.pyc b/app/Controllers/__pycache__/task_controller.cpython-314.pyc new file mode 100644 index 0000000..0f59898 Binary files /dev/null and b/app/Controllers/__pycache__/task_controller.cpython-314.pyc differ diff --git a/app/Controllers/__pycache__/upload_controller.cpython-314.pyc b/app/Controllers/__pycache__/upload_controller.cpython-314.pyc new file mode 100644 index 0000000..e5e60ea Binary files /dev/null and b/app/Controllers/__pycache__/upload_controller.cpython-314.pyc differ diff --git a/app/Controllers/activity_controller.py b/app/Controllers/activity_controller.py new file mode 100644 index 0000000..e1600c6 --- /dev/null +++ b/app/Controllers/activity_controller.py @@ -0,0 +1,64 @@ +import os +from flask import request, render_template, current_app +from datetime import datetime + + +def activity_log_controller(): + logs = [] + log_file = os.path.join(current_app.root_path, 'activity.log') + + if os.path.exists(log_file): + with open(log_file, 'r') as f: + for line in f: + parts = line.strip().split(" | ") + if len(parts) == 4: + logs.append({ + "timestamp": parts[0].replace("Timestamp:", "").strip(), + "user": parts[1].replace("User:", "").strip(), + "action": parts[2].replace("Action:", "").strip(), + "details": parts[3].replace("Details:", "").strip() + }) + + # Filters + start_date = request.args.get("start_date") + end_date = request.args.get("end_date") + username = request.args.get("username") + + filtered_logs = logs + + # Date filter + if start_date or end_date: + try: + if start_date: + start_dt = datetime.strptime(start_date, "%Y-%m-%d") + else: + start_dt = datetime.min + + if end_date: + end_dt = datetime.strptime(end_date, "%Y-%m-%d") + else: + end_dt = datetime.max + + filtered_logs = [ + log for log in filtered_logs + if start_dt <= datetime.strptime( + log["timestamp"], "%Y-%m-%d %H:%M:%S" + ) <= end_dt.replace(hour=23, minute=59, second=59) + ] + except Exception as e: + print("Date filter error:", e) + + # Username filter + if username: + filtered_logs = [ + log for log in filtered_logs + if log["user"].lower() == username.lower() + ] + + return render_template( + "activity_log.html", + logs=filtered_logs, + start_date=start_date, + end_date=end_date, + username=username + ) \ No newline at end of file diff --git a/app/Controllers/auth_controller.py b/app/Controllers/auth_controller.py new file mode 100644 index 0000000..a446ddf --- /dev/null +++ b/app/Controllers/auth_controller.py @@ -0,0 +1,84 @@ +from flask import render_template, request, redirect, url_for, flash +from flask_login import login_user, logout_user, current_user +from ldap3 import Server, Connection, ALL +from app import LDAPUser + + +def login_controller(): + if current_user.is_authenticated: + return redirect(url_for("main.dashboard")) + + if request.method == "POST": + username = request.form.get("username", "").strip() + password = request.form.get("password", "") + + if not username or not password: + flash("Username and password are required.", "danger") + return render_template("login.html") + + ldap_user_dn = f"uid={username},ou=users,dc=lcepl,dc=org" + + try: + server = Server("localhost", port=389, get_info=ALL) + conn = Connection(server, user=ldap_user_dn, password=password) + + if conn.bind(): + user = LDAPUser(dn=ldap_user_dn, username=username, data={}) + login_user(user) + flash(f"Welcome, {username}! (LDAP)", "success") + return redirect(url_for("main.dashboard")) + else: + flash("Invalid LDAP credentials", "danger") + + except Exception: + if username == "admin" and password == "admin": + user = LDAPUser(dn=None, username=username, data={}) + login_user(user) + flash(f"Welcome, {username}! (Local Login)", "success") + return redirect(url_for("main.dashboard")) + else: + flash("LDAP unavailable and local login failed", "danger") + + return render_template("login.html") + +# @main.route("/login", methods=["GET", "POST"]) +# def login(): +# # Redirect if already logged in +# if current_user.is_authenticated: +# return redirect(url_for("main.dashboard")) + +# if request.method == "POST": +# username = request.form.get("username", "").strip() +# password = request.form.get("password", "") + +# if not username or not password: +# flash("Username and password are required.", "danger") +# return render_template("login.html") + +# ldap_user_dn = f"uid={username},ou=users,dc=lcepl,dc=org" + +# try: +# # Connect to LDAP server +# # server = Server("openldap", port=389, get_info=ALL) +# server = Server("localhost", port=389, get_info=ALL) +# conn = Connection(server, user=ldap_user_dn, password=password) + +# if conn.bind(): +# # Pass the required 'data' argument +# user = LDAPUser(dn=ldap_user_dn, username=username, data={}) +# login_user(user) +# flash(f"Welcome, {username}!", "success") +# return redirect(url_for("main.dashboard")) +# else: +# flash("Invalid LDAP credentials", "danger") + +# except Exception as e: +# flash(f"LDAP connection error: {e}", "danger") + +# # GET request or failed login +# return render_template("login.html") + + +def logout_controller(): + logout_user() + return redirect(url_for("main.login")) \ No newline at end of file diff --git a/app/Controllers/dashboard_controller.py b/app/Controllers/dashboard_controller.py new file mode 100644 index 0000000..c952b3f --- /dev/null +++ b/app/Controllers/dashboard_controller.py @@ -0,0 +1,59 @@ +from flask import request, render_template +from sqlalchemy import func, cast, Float +from flask_login import login_required +from app.models import Task +from app import db + + +def dashboard_controller(): + + selected_block = request.args.getlist('block[]', None) + + rate_col = cast(Task.rate, Float) + qty_col = cast(Task.in_this_ra_bill_qty, Float) + + query = db.session.query( + Task.block_name.label("block_name"), + Task.village_name.label("village_name"), + func.sum(cast(Task.boq_amount, Float)).label("total_boq_amount"), + func.sum(cast(Task.previous_billing_amount, Float)).label("prev_billed_amount"), + func.sum(cast(Task.variation_amount, Float)).label("total_variation_amount"), + func.sum(cast(Task.cumulative_billed_qty, Float)).label("cumulative_billed_qty"), + func.sum( + cast(Task.cumulative_billed_qty, Float) * + cast(Task.rate, Float) + ).label("cumulative_billed_amount"), + func.sum(qty_col).label("in_this_ra_bill_qty"), + func.sum(rate_col * qty_col).label("to_be_claimed_amount") + ) + + if selected_block and "All" not in selected_block: + query = query.filter(Task.block_name.in_(selected_block)) + + query = query.group_by(Task.block_name, Task.village_name) + villages = query.all() + + village_data = [] + for village in villages: + village_data.append({ + "block_name": village.block_name, + "village_name": village.village_name, + "total_boq_amount": village.total_boq_amount or 0, + "rate": "-", + "prev_billed_amount": village.prev_billed_amount or 0, + "total_variation_amount": village.total_variation_amount or 0, + "cumulative_billed_qty": village.cumulative_billed_qty or 0, + "cumulative_billed_amount": village.cumulative_billed_amount or 0, + "in_this_ra_bill_qty": village.in_this_ra_bill_qty or 0, + "to_be_claimed_amount": round(village.to_be_claimed_amount or 0, 2) + }) + + blocks = db.session.query(Task.block_name).distinct().all() + block_list = ["All"] + [block[0] for block in blocks] + + return render_template( + 'index.html', + villages=village_data, + blocks=block_list, + selected_block=selected_block + ) \ No newline at end of file diff --git a/app/Controllers/dropdown_controller.py b/app/Controllers/dropdown_controller.py new file mode 100644 index 0000000..50fa4a4 --- /dev/null +++ b/app/Controllers/dropdown_controller.py @@ -0,0 +1,80 @@ +from flask import request, jsonify +from flask_login import current_user +from app import db +from app.models import Task, WorkDetail +from app.service.logger import log_activity + + +def get_blocks_by_district_controller(): + district = request.args.get('district') + + if not district: + return jsonify({'blocks': []}) + + blocks = ( + db.session.query(Task.block_name) + .filter(Task.district == district) + .distinct() + .all() + ) + + return jsonify({'blocks': [b[0] for b in blocks]}) + + +def get_tasks_by_block_controller(): + block = request.args.get('block') + + if not block: + return jsonify({'tasks': []}) + + tasks = ( + db.session.query(Task.task_name) + .filter(Task.block_name == block) + .distinct() + .all() + ) + + task_list = [ + task[0].strip() + .replace(",", "") + .replace("(", "") + .replace(")", "") + .replace(".", "") + .replace("&", "") + .replace("\n", "") + for task in tasks + ] + + log_activity( + current_user.username, + "Fetch Tasks", + f"Fetched tasks for block {block}" + ) + + return jsonify({'tasks': task_list}) + + +def get_villages_for_block(block_name): + villages = ( + db.session.query(WorkDetail.name_of_village) + .filter(WorkDetail.block == block_name) + .distinct() + .order_by(WorkDetail.name_of_village) + .all() + ) + + return [v[0] for v in villages if v[0]] + + +def get_villages_by_block_controller(): + block = request.args.get('block') + + villages = get_villages_for_block(block) + + log_activity( + current_user.username, + "Fetch Villages", + f"Fetched villages for block {block}" + ) + + return jsonify({'villages': villages}) \ No newline at end of file diff --git a/app/Controllers/filter_controller.py b/app/Controllers/filter_controller.py new file mode 100644 index 0000000..d95aa48 --- /dev/null +++ b/app/Controllers/filter_controller.py @@ -0,0 +1,97 @@ +from flask import request, render_template +from flask_login import current_user +from app import db +from app.models import Task, WorkDetail +from app.service.logger import log_activity + + +def filter_tasks_controller(): + + district = request.args.get('district') + block = request.args.get('block') + village = request.args.get('village') + + # districts + districts = [d[0] for d in db.session.query( + WorkDetail.district).distinct()] + + # blocks + if district: + blocks = [b[0] for b in db.session.query(WorkDetail.block) + .filter(WorkDetail.district == district).distinct()] + else: + blocks = [] + + # villages + if district and block: + villages = [v[0] for v in db.session.query( + WorkDetail.name_of_village) + .filter( + WorkDetail.district == district, + WorkDetail.block == block + ).distinct()] + else: + villages = [] + + grouped_tasks = [] + + if district and block and village: + + query = ( + db.session.query(Task) + .join(WorkDetail, + Task.village_name == WorkDetail.name_of_village) + .filter( + WorkDetail.district == district, + WorkDetail.block == block, + WorkDetail.name_of_village == village + ) + ) + + tasks = query.order_by(Task.uploaded_at.desc()).all() + + current_main_task = None + + for task in tasks: + + task_data = { + "id": task.id, + "task_name": task.task_name, + "unit": task.unit, + "qty": task.qty, + "rate": task.rate, + "boq_amount": task.boq_amount, + "previous_billed_qty": task.previous_billed_qty, + "previous_billing_amount": task.previous_billing_amount, + "in_this_ra_bill_qty": task.in_this_ra_bill_qty, + "in_this_ra_billing_amount": task.in_this_ra_billing_amount, + "cumulative_billed_qty": task.cumulative_billed_qty, + "cumulative_billed_amount": task.cumulative_billed_amount, + "variation_qty": task.variation_qty, + "variation_amount": task.variation_amount, + "remark": task.remark + } + + if task.serial_number: + task_data["subtasks"] = [] + grouped_tasks.append(task_data) + current_main_task = task_data + elif current_main_task: + current_main_task["subtasks"].append(task_data) + + log_activity( + current_user.username, + "Filter Tasks", + f"district={district}, block={block}, village={village}" + ) + + return render_template( + 'filter_tasks.html', + grouped_tasks=grouped_tasks, + districts=districts, + blocks=blocks, + villages=villages, + selected_district=district, + selected_block=block, + selected_village=village + ) \ No newline at end of file diff --git a/app/Controllers/report_controller.py b/app/Controllers/report_controller.py new file mode 100644 index 0000000..31974b7 --- /dev/null +++ b/app/Controllers/report_controller.py @@ -0,0 +1,61 @@ +from flask import request, render_template +from flask_login import current_user +from app import db +from app.models import Task +from app.service.logger import log_activity + + +def generate_report_page_controller(): + + selected_district = request.args.get('district') + selected_block = request.args.get('block') + + # Get districts + districts = [ + d[0] for d in db.session.query(Task.district).distinct().all() + ] + + # Get blocks + if selected_district: + blocks = [ + b[0] for b in db.session.query(Task.block_name) + .filter(Task.district == selected_district) + .distinct().all() + ] + else: + blocks = [] + + # Get main tasks + if selected_block: + main_tasks = db.session.query(Task.task_name).filter( + Task.serial_number.isnot(None), + Task.block_name == selected_block + ).distinct().all() + + main_tasks = [ + task[0].strip() + .replace(",", "") + .replace("(", "") + .replace(")", "") + .replace(".", "") + .replace("&", "") + .replace("\n", "") + for task in main_tasks + ] + else: + main_tasks = [] + + log_activity( + current_user.username, + "Report Page", + f"district={selected_district}, block={selected_block}" + ) + + return render_template( + 'task_report.html', + districts=districts, + blocks=blocks, + main_tasks=main_tasks, + selected_district=selected_district, + selected_block=selected_block + ) \ No newline at end of file diff --git a/app/Controllers/task_controller.py b/app/Controllers/task_controller.py new file mode 100644 index 0000000..0caedf0 --- /dev/null +++ b/app/Controllers/task_controller.py @@ -0,0 +1,189 @@ +from flask import request, jsonify, render_template +from flask_login import current_user +from app import db +from app.models import Task, WorkDetail +from app.service.logger import log_activity + + +def recalc_task(task): + rate = float(task.rate or 0) + qty = float(task.qty or 0) + + prev_qty = float(task.previous_billed_qty or 0) + ra_qty = float(task.in_this_ra_bill_qty or 0) + + task.previous_billing_amount = round(prev_qty * rate, 2) + task.in_this_ra_billing_amount = round(ra_qty * rate, 2) + + task.cumulative_billed_qty = round(prev_qty + ra_qty, 2) + task.cumulative_billed_amount = round(task.cumulative_billed_qty * rate, 2) + + if task.cumulative_billed_qty > qty: + task.variation_qty = round(task.cumulative_billed_qty - qty, 2) + else: + task.variation_qty = 0 + + task.variation_amount = round(task.variation_qty * rate, 2) + + + +def update_tasks_controller(): + try: + updates = request.get_json() + update_count = 0 + + formula_fields = [ + "previous_billing_amount", + "in_this_ra_billing_amount", + "cumulative_billed_qty", + "cumulative_billed_amount", + "variation_qty", + "variation_amount" + ] + + for key, new_value in updates.items(): + + if '_' not in key: + continue + + field_name, task_id_str = key.rsplit('_', 1) + + if not task_id_str.isdigit(): + continue + + task = Task.query.get(int(task_id_str)) + + if task: + + if field_name in formula_fields: + continue + + current_value = getattr(task, field_name, None) + + if str(current_value) != str(new_value): + setattr(task, field_name, new_value) + + recalc_task(task) + + update_count += 1 + + log_activity( + current_user.username, + "Task Update", + f"Task ID {task.id} - {field_name} changed to {new_value}" + ) + + if update_count > 0: + db.session.commit() + + log_activity( + current_user.username, + "Database Commit", + f"{update_count} task field(s) updated" + ) + + return jsonify({'message': f'count: {update_count} field(s) updated.'}) + + return jsonify({'message': 'No fields were updated.'}) + + except Exception as e: + log_activity(current_user.username, "Error", str(e)) + return jsonify({'error': 'Update failed'}), 500 + + + # # Update tasks route +# @main.route('/update_tasks', methods=['POST']) +# @login_required +# def update_tasks(): +# try: +# updates = request.get_json() +# update_count = 0 + +# for key, new_value in updates.items(): +# if '_' not in key: +# continue + +# field_name, task_id_str = key.rsplit('_', 1) +# if not task_id_str.isdigit(): +# continue + +# task_id = int(task_id_str) +# task = db.session.query(Task).filter_by(id=task_id).first() + +# if task: +# current_value = getattr(task, field_name, None) +# if current_value != new_value: +# setattr(task, field_name, new_value) +# update_count += 1 +# log_activity(current_user.username, "Task Update", f"Task ID {task.id} - {field_name} changed to {new_value}") + +# if update_count > 0: +# db.session.commit() +# log_activity(current_user.username, "Database Commit", f"{update_count} task field(s) updated") +# return jsonify({'message': f'count: {update_count} field(s) updated.'}) +# else: +# return jsonify({'message': 'No fields were updated.'}) + +# except Exception as e: +# log_activity(current_user.username, "Error", f"Update tasks error: {str(e)}") +# return jsonify({'error': 'An error occurred while updating tasks.'}), 500 + + +def display_tasks_controller(): + + work_details = WorkDetail.query.order_by( + WorkDetail.uploaded_at.desc() + ).first() + + if not work_details: + log_activity(current_user.username, "Tasks View", "No work details") + return "No work details available.", 404 + + tasks = Task.query.filter_by( + district=work_details.district, + village_name=work_details.name_of_village, + block_name=work_details.block + ).order_by(Task.uploaded_at.desc()).all() + + grouped_tasks = [] + current_main_task = None + + for task in tasks: + + task_data = { + "id": task.id, + "task_name": task.task_name, + "unit": task.unit, + "qty": task.qty, + "rate": task.rate, + "boq_amount": task.boq_amount, + "previous_billed_qty": task.previous_billed_qty, + "previous_billing_amount": task.previous_billing_amount, + "in_this_ra_bill_qty": task.in_this_ra_bill_qty, + "in_this_ra_billing_amount": task.in_this_ra_billing_amount, + "cumulative_billed_qty": task.cumulative_billed_qty, + "cumulative_billed_amount": task.cumulative_billed_amount, + "variation_qty": task.variation_qty, + "variation_amount": task.variation_amount, + "remark": task.remark, + "district": task.district + } + + if task.serial_number: + task_data["subtasks"] = [] + grouped_tasks.append(task_data) + current_main_task = task_data + elif current_main_task: + current_main_task["subtasks"].append(task_data) + + log_activity( + current_user.username, + "Tasks View", + f"{work_details.name_of_village}, {work_details.block}" + ) + + return render_template( + 'tasks_display.html', + work_details=work_details, + grouped_tasks=grouped_tasks + ) \ No newline at end of file diff --git a/app/Controllers/upload_controller.py b/app/Controllers/upload_controller.py new file mode 100644 index 0000000..d4e614a --- /dev/null +++ b/app/Controllers/upload_controller.py @@ -0,0 +1,214 @@ +import os +import pandas as pd +from flask import request, redirect, url_for, current_app +from flask_login import current_user +from app import db +from app.models import Task, WorkDetail +from datetime import datetime +from app.service.logger import log_activity +# keep helper inside controller +def to_2_decimal(value): + try: + if value is None or value == "": + return None + return round(float(value), 2) + except (TypeError, ValueError): + return None + + +def upload_controller(): + if 'file' not in request.files: + return "No file part" + + file = request.files['file'] + + if file.filename == '': + return "No selected file" + + filepath = os.path.join(current_app.config['UPLOAD_FOLDER'], file.filename) + file.save(filepath) + + log_activity(current_user.username, "File Upload", f"Uploaded file: {file.filename}") + + work_details_data = pd.read_excel(filepath, nrows=11, header=None, dtype=str) + + work_details_dict = { + "name_of_work": work_details_data.iloc[0, 1], + "cover_agreement_no": work_details_data.iloc[1, 1], + "name_of_contractor": work_details_data.iloc[2, 1], + "name_of_tpi_agency": work_details_data.iloc[3, 1], + "name_of_division": work_details_data.iloc[4, 1], + "name_of_village": work_details_data.iloc[5, 1], + "block": work_details_data.iloc[6, 1], + "scheme_id": work_details_data.iloc[7, 1], + "date_of_billing": work_details_data.iloc[8, 1], + "measurement_book": work_details_data.iloc[9, 1], + "district": work_details_data.iloc[10, 1] + } + + work_details_dict = {k: (None if pd.isna(v) else v) for k, v in work_details_dict.items()} + + work_detail = WorkDetail(**work_details_dict) + db.session.add(work_detail) + + data = pd.read_excel(filepath, skiprows=10) + data = data.astype(object).where(pd.notna(data), None) + + expected_columns = [ + "serial_number", "task_name", "unit", "qty", "rate", "boq_amount", + "previous_billed_qty", "previous_billing_amount", + "in_this_ra_bill_qty", "in_this_ra_billing_amount", + "cumulative_billed_qty", "cumulative_billed_amount", + "variation_qty", "variation_amount", "remark" + ] + + if data.shape[1] == len(expected_columns): + data.columns = expected_columns + else: + data.columns = expected_columns[:data.shape[1]] + + current_main_task_serial = None + current_main_task_name = None + + for _, row in data.iterrows(): + + task_name = str(row["task_name"]) if row["task_name"] else "" + serial_number = str(row["serial_number"]) if row["serial_number"] else None + + if serial_number: + current_main_task_serial = serial_number + current_main_task_name = task_name + parent_id = None + else: + parent_id = current_main_task_serial + + task = Task( + district=work_details_dict.get("district"), + block_name=work_details_dict["block"], + village_name=work_details_dict["name_of_village"], + serial_number=serial_number, + task_name=task_name, + unit=row["unit"], + qty=to_2_decimal(row["qty"]), + rate=to_2_decimal(row["rate"]), + boq_amount=to_2_decimal(row["boq_amount"]), + previous_billed_qty=to_2_decimal(row["previous_billed_qty"]), + previous_billing_amount=to_2_decimal(row["previous_billing_amount"]), + in_this_ra_bill_qty=to_2_decimal(row["in_this_ra_bill_qty"]), + in_this_ra_billing_amount=to_2_decimal(row["in_this_ra_billing_amount"]), + cumulative_billed_qty=to_2_decimal(row["cumulative_billed_qty"]), + cumulative_billed_amount=to_2_decimal(row["cumulative_billed_amount"]), + variation_qty=to_2_decimal(row["variation_qty"]), + variation_amount=to_2_decimal(row["variation_amount"]), + parent_id=parent_id, + parent_task_name=current_main_task_name if not serial_number else None, + remark=row["remark"] + ) + + db.session.add(task) + + db.session.commit() + + log_activity( + current_user.username, + "Database Insert", + f"Inserted work details and tasks from {file.filename}" + ) + + return redirect(url_for('main.display_tasks')) + + +# # File upload route +# @main.route('/upload', methods=['POST']) +# @login_required +# def upload(): +# if 'file' not in request.files: +# return "No file part" +# file = request.files['file'] +# if file.filename == '': +# return "No selected file" +# if file: +# filepath = os.path.join(current_app.config['UPLOAD_FOLDER'], file.filename) +# file.save(filepath) +# log_activity(current_user.username, "File Upload", f"Uploaded file: {file.filename}") + +# # Read work details (first 11 rows) +# work_details_data = pd.read_excel(filepath, nrows=11, header=None) +# work_details_dict = { + +# "name_of_work": work_details_data.iloc[0, 1], +# "cover_agreement_no": work_details_data.iloc[1, 1], +# "name_of_contractor": work_details_data.iloc[2, 1], +# "name_of_tpi_agency": work_details_data.iloc[3, 1], +# "name_of_division": work_details_data.iloc[4, 1], +# "name_of_village": work_details_data.iloc[5, 1], +# "block": work_details_data.iloc[6, 1], +# "scheme_id": work_details_data.iloc[7, 1], +# "date_of_billing": work_details_data.iloc[8, 1], +# "measurement_book": work_details_data.iloc[9, 1], +# "district": work_details_data.iloc[10, 1] # Example: row 11 (index 10), column 2 (index 1) + +# } + +# work_details_dict = {key: (None if pd.isna(value) else value) for key, value in work_details_dict.items()} +# work_detail = WorkDetail(**work_details_dict) +# db.session.add(work_detail) + +# # Read task data starting from row 12 +# data = pd.read_excel(filepath, skiprows=10) +# data = data.astype(str).replace({"nan": None, "NaT": None, "None": None}) + +# expected_columns = [ +# "serial_number", "task_name", "unit", "qty", "rate", "boq_amount", +# "previous_billed_qty", "previous_billing_amount", +# "in_this_ra_bill_qty", "in_this_ra_billing_amount", +# "cumulative_billed_qty", "cumulative_billed_amount", +# "variation_qty", "variation_amount", "remark" +# ] + +# if data.shape[1] == len(expected_columns): +# data.columns = expected_columns +# else: +# data.columns = expected_columns[:data.shape[1]] # Truncate + +# current_main_task_serial = None +# current_main_task_name = None + +# for _, row in data.iterrows(): +# task_name = str(row["task_name"]) if row["task_name"] else "" +# serial_number = row["serial_number"] + +# if serial_number: # Main task +# current_main_task_serial = serial_number +# current_main_task_name = task_name +# parent_id = None +# else: # Subtask +# parent_id = current_main_task_serial + +# task = Task( +# district=work_details_dict.get("district"), +# block_name=work_details_dict["block"], +# village_name=work_details_dict["name_of_village"], +# serial_number=serial_number, +# task_name=task_name, +# unit=row["unit"], +# qty=row["qty"], +# rate=row["rate"], +# boq_amount=row["boq_amount"], +# previous_billed_qty=row["previous_billed_qty"], +# previous_billing_amount=row["previous_billing_amount"], +# in_this_ra_bill_qty=row["in_this_ra_bill_qty"], +# in_this_ra_billing_amount=row["in_this_ra_billing_amount"], +# cumulative_billed_qty=row["cumulative_billed_qty"], +# cumulative_billed_amount=row["cumulative_billed_amount"], +# variation_qty=row["variation_qty"], +# variation_amount=row["variation_amount"], +# parent_id=parent_id, +# parent_task_name=current_main_task_name if not serial_number else None, +# remark=row["remark"] +# ) +# db.session.add(task) + +# db.session.commit() +# log_activity(current_user.username, "Database Insert", f"Inserted work details and tasks from {file.filename}") +# return redirect(url_for('main.display_tasks')) \ No newline at end of file diff --git a/app/__pycache__/models.cpython-314.pyc b/app/__pycache__/models.cpython-314.pyc index b654fcf..1795023 100644 Binary files a/app/__pycache__/models.cpython-314.pyc and b/app/__pycache__/models.cpython-314.pyc differ diff --git a/app/activity.log b/app/activity.log index 991b92a..db7427b 100644 --- a/app/activity.log +++ b/app/activity.log @@ -4284,3 +4284,28 @@ Timestamp: 2026-04-14 16:24:01 | User: admin | Action: Filter Tasks | Details: F Timestamp: 2026-04-14 16:24:48 | User: admin | Action: Task Update | Details: Task ID 7 - previous_billed_qty changed to 2 Timestamp: 2026-04-14 16:24:48 | User: admin | Action: Database Commit | Details: 1 task field(s) updated Timestamp: 2026-04-14 16:24:50 | User: admin | Action: Filter Tasks | Details: Filtered tasks for district=Shamli, block=Kandhla, village=Aldi +Timestamp: 2026-04-15 11:43:16 | User: admin | Action: Page Load | Details: Upload Excel page accessed +Timestamp: 2026-04-15 11:43:18 | User: admin | Action: Page Load | Details: Upload Excel page accessed +Timestamp: 2026-04-15 11:43:20 | User: admin | Action: Report Page | Details: district=None, block=None +Timestamp: 2026-04-15 11:43:26 | User: admin | Action: Fetch Tasks | Details: Fetched tasks for block Kandhla +Timestamp: 2026-04-15 11:43:29 | User: admin | Action: Report Page | Details: district=None, block=None +Timestamp: 2026-04-15 11:43:35 | User: admin | Action: Fetch Tasks | Details: Fetched tasks for block Kandhla +Timestamp: 2026-04-15 11:44:25 | User: admin | Action: Filter Tasks | Details: district=Shamli, block=Kandhla, village=Aldi +Timestamp: 2026-04-15 11:44:48 | User: admin | Action: Task Update | Details: Task ID 6 - in_this_ra_bill_qty changed to 4 +Timestamp: 2026-04-15 11:44:48 | User: admin | Action: Database Commit | Details: 1 task field(s) updated +Timestamp: 2026-04-15 11:44:51 | User: admin | Action: Filter Tasks | Details: district=Shamli, block=Kandhla, village=Aldi +Timestamp: 2026-04-15 11:45:30 | User: admin | Action: Filter Tasks | Details: district=Shamli, block=Kandhla, village=Aldi +Timestamp: 2026-04-15 11:49:52 | User: admin | Action: Filter Tasks | Details: district=Shamli, block=Kandhla, village=Aldi +Timestamp: 2026-04-15 11:50:23 | User: admin | Action: Task Update | Details: Task ID 5 - qty changed to 2 +Timestamp: 2026-04-15 11:50:23 | User: admin | Action: Database Commit | Details: 1 task field(s) updated +Timestamp: 2026-04-15 11:50:25 | User: admin | Action: Filter Tasks | Details: district=Shamli, block=Kandhla, village=Aldi +Timestamp: 2026-04-15 11:50:43 | User: admin | Action: Task Update | Details: Task ID 5 - qty changed to 1 +Timestamp: 2026-04-15 11:50:43 | User: admin | Action: Database Commit | Details: 1 task field(s) updated +Timestamp: 2026-04-15 11:50:44 | User: admin | Action: Filter Tasks | Details: district=Shamli, block=Kandhla, village=Aldi +Timestamp: 2026-04-15 11:51:05 | User: admin | Action: Task Update | Details: Task ID 5 - previous_billed_qty changed to 3 +Timestamp: 2026-04-15 11:51:05 | User: admin | Action: Database Commit | Details: 1 task field(s) updated +Timestamp: 2026-04-15 11:51:07 | User: admin | Action: Filter Tasks | Details: district=Shamli, block=Kandhla, village=Aldi +Timestamp: 2026-04-15 11:51:20 | User: admin | Action: Task Update | Details: Task ID 5 - previous_billed_qty changed to 1 +Timestamp: 2026-04-15 11:51:20 | User: admin | Action: Database Commit | Details: 1 task field(s) updated +Timestamp: 2026-04-15 11:51:21 | User: admin | Action: Filter Tasks | Details: district=Shamli, block=Kandhla, village=Aldi +Timestamp: 2026-04-15 11:55:04 | User: admin | Action: Filter Tasks | Details: district=Shamli, block=Kandhla, village=Aldi diff --git a/app/routes/__init__.py b/app/routes/__init__.py deleted file mode 100644 index 7a94942..0000000 --- a/app/routes/__init__.py +++ /dev/null @@ -1,68 +0,0 @@ -# from flask import Flask -# from flask_sqlalchemy import SQLAlchemy -# from flask_migrate import Migrate -# from flask_login import LoginManager -# from flask_ldap3_login import LDAP3LoginManager -# import os - -# db = SQLAlchemy() -# migrate = Migrate() -# login_manager = LoginManager() -# ldap_manager = LDAP3LoginManager() - -# from app.models import User -# # Flask-Login user loader -# @login_manager.user_loader -# def load_user(user_id): -# return User.query.get(int(user_id)) - - -# def create_app(): -# app = Flask(__name__) - -# # -------------------- -# # App config -# # -------------------- -# app.config['SECRET_KEY'] = 'dev-secret-key' # 🔐 change this in production -# app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:admin@localhost/excel_data7' -# # 🔽 Add upload folder config -# app.config['UPLOAD_FOLDER'] = os.path.join(app.root_path, 'upload') - -# # Make sure folder exists -# os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) -# # -------------------- -# # LDAP config -# # -------------------- -# app.config['LDAP_HOST'] = 'openldap' -# app.config['LDAP_PORT'] = 389 -# app.config['LDAP_BASE_DN'] = 'dc=lcepl,dc=org' -# app.config['LDAP_BIND_USER_DN'] = 'cn=admin,dc=lcepl,dc=org' -# app.config['LDAP_BIND_USER_PASSWORD'] = 'admin123' -# app.config['LDAP_USER_DN'] = 'ou=users' -# app.config['LDAP_GROUP_DN'] = 'ou=groups' -# app.config['LDAP_USER_RDN_ATTR'] = 'uid' -# app.config['LDAP_USER_LOGIN_ATTR'] = 'uid' - -# # Extra to avoid BasicAuth popup -# app.config['USE_LDAP_AUTH'] = True -# app.config['LDAP_REQUIRE_CERT'] = False -# app.config['LDAP_LOGIN_VIEW'] = 'main.login' # your login route - -# # -------------------- -# # Init extensions -# # -------------------- -# db.init_app(app) -# migrate.init_app(app, db) -# login_manager.init_app(app) -# ldap_manager.init_app(app) - -# # Redirect to login if not authenticated -# login_manager.login_view = "main.login" - -# # -------------------- -# # Register blueprints -# # -------------------- -# from app.routes.main import main -# app.register_blueprint(main) - -# return app \ No newline at end of file diff --git a/app/routes/__pycache__/main.cpython-314.pyc b/app/routes/__pycache__/main.cpython-314.pyc index 46614a4..a603a20 100644 Binary files a/app/routes/__pycache__/main.cpython-314.pyc and b/app/routes/__pycache__/main.cpython-314.pyc differ diff --git a/app/routes/ldap_user.py b/app/routes/ldap_user.py deleted file mode 100644 index dedca48..0000000 --- a/app/routes/ldap_user.py +++ /dev/null @@ -1,10 +0,0 @@ -# from flask_login import UserMixin -# # -------------------- -# # LDAP User class (not stored in DB) -# # -------------------- -# class LDAPUser(UserMixin): -# """Represents an authenticated LDAP user (kept in session).""" -# def __init__(self, dn, username): -# self.dn = dn -# self.username = username -# self.id = username # 🔑 Use username for session id (stable) \ No newline at end of file diff --git a/app/routes/main.py b/app/routes/main.py index 898cfea..76be5d9 100644 --- a/app/routes/main.py +++ b/app/routes/main.py @@ -1,107 +1,29 @@ -from flask import Blueprint, render_template, request, redirect, url_for, flash,jsonify -from flask_login import login_user, logout_user, login_required, current_user -from sqlalchemy import func, cast, Float -from app.models import Task,WorkDetail -import pandas as pd -from werkzeug.security import generate_password_hash -import os -from app import LDAPUser -import numpy as np +from flask import Blueprint, render_template +from flask_login import login_required, current_user + +from app.service.logger import log_activity +from app.Controllers.dashboard_controller import dashboard_controller +from app.Controllers.auth_controller import (login_controller,logout_controller) +from app.Controllers.upload_controller import upload_controller +from app.Controllers.activity_controller import activity_log_controller +from app.Controllers.task_controller import (update_tasks_controller,display_tasks_controller) +from app.Controllers.filter_controller import filter_tasks_controller +from app.Controllers.report_controller import generate_report_page_controller +from app.Controllers.dropdown_controller import (get_blocks_by_district_controller,get_tasks_by_block_controller,get_villages_by_block_controller) -from flask import current_app -from datetime import datetime -from app import db -from app.models import User -from ldap3 import Server, Connection, ALL # ✅ make sure this is at the top - main = Blueprint("main", __name__) -# @main.route("/login", methods=["GET", "POST"]) -# def login(): -# # Redirect if already logged in -# if current_user.is_authenticated: -# return redirect(url_for("main.dashboard")) - -# if request.method == "POST": -# username = request.form.get("username", "").strip() -# password = request.form.get("password", "") - -# if not username or not password: -# flash("Username and password are required.", "danger") -# return render_template("login.html") - -# ldap_user_dn = f"uid={username},ou=users,dc=lcepl,dc=org" - -# try: -# # Connect to LDAP server -# # server = Server("openldap", port=389, get_info=ALL) -# server = Server("localhost", port=389, get_info=ALL) -# conn = Connection(server, user=ldap_user_dn, password=password) - -# if conn.bind(): -# # Pass the required 'data' argument -# user = LDAPUser(dn=ldap_user_dn, username=username, data={}) -# login_user(user) -# flash(f"Welcome, {username}!", "success") -# return redirect(url_for("main.dashboard")) -# else: -# flash("Invalid LDAP credentials", "danger") - -# except Exception as e: -# flash(f"LDAP connection error: {e}", "danger") - -# # GET request or failed login -# return render_template("login.html") @main.route("/login", methods=["GET", "POST"]) def login(): - # Redirect if already logged in - if current_user.is_authenticated: - return redirect(url_for("main.dashboard")) + return login_controller() - if request.method == "POST": - username = request.form.get("username", "").strip() - password = request.form.get("password", "") - if not username or not password: - flash("Username and password are required.", "danger") - return render_template("login.html") - - ldap_user_dn = f"uid={username},ou=users,dc=lcepl,dc=org" - - try: - # Try LDAP authentication first - server = Server("localhost", port=389, get_info=ALL) - conn = Connection(server, user=ldap_user_dn, password=password) - - if conn.bind(): - user = LDAPUser(dn=ldap_user_dn, username=username, data={}) - login_user(user) - flash(f"Welcome, {username}! (LDAP)", "success") - return redirect(url_for("main.dashboard")) - else: - flash("Invalid LDAP credentials", "danger") - - except Exception as e: - # Fallback to LOCAL login if LDAP not available - if username == "admin" and password == "admin": - user = LDAPUser(dn=None, username=username, data={}) - login_user(user) - flash(f"Welcome, {username}! (Local Login)", "success") - return redirect(url_for("main.dashboard")) - else: - flash("LDAP unavailable and local login failed", "danger") - - return render_template("login.html") - -@main.route('/logout') +@main.route("/logout") @login_required def logout(): - logout_user() - # flash("You have been logged out.", "info") - return redirect(url_for("main.login")) + return logout_controller() -# Home route @main.route('/upload_excel') @login_required def upload_excel(): @@ -113,722 +35,63 @@ def upload_excel(): # def upload_file(): # return render_template('dashboard.html') - -# # File upload route -# @main.route('/upload', methods=['POST']) -# @login_required -# def upload(): -# if 'file' not in request.files: -# return "No file part" -# file = request.files['file'] -# if file.filename == '': -# return "No selected file" -# if file: -# filepath = os.path.join(current_app.config['UPLOAD_FOLDER'], file.filename) -# file.save(filepath) -# log_activity(current_user.username, "File Upload", f"Uploaded file: {file.filename}") - -# # Read work details (first 11 rows) -# work_details_data = pd.read_excel(filepath, nrows=11, header=None) -# work_details_dict = { - -# "name_of_work": work_details_data.iloc[0, 1], -# "cover_agreement_no": work_details_data.iloc[1, 1], -# "name_of_contractor": work_details_data.iloc[2, 1], -# "name_of_tpi_agency": work_details_data.iloc[3, 1], -# "name_of_division": work_details_data.iloc[4, 1], -# "name_of_village": work_details_data.iloc[5, 1], -# "block": work_details_data.iloc[6, 1], -# "scheme_id": work_details_data.iloc[7, 1], -# "date_of_billing": work_details_data.iloc[8, 1], -# "measurement_book": work_details_data.iloc[9, 1], -# "district": work_details_data.iloc[10, 1] # Example: row 11 (index 10), column 2 (index 1) - -# } - -# work_details_dict = {key: (None if pd.isna(value) else value) for key, value in work_details_dict.items()} -# work_detail = WorkDetail(**work_details_dict) -# db.session.add(work_detail) - -# # Read task data starting from row 12 -# data = pd.read_excel(filepath, skiprows=10) -# data = data.astype(str).replace({"nan": None, "NaT": None, "None": None}) - -# expected_columns = [ -# "serial_number", "task_name", "unit", "qty", "rate", "boq_amount", -# "previous_billed_qty", "previous_billing_amount", -# "in_this_ra_bill_qty", "in_this_ra_billing_amount", -# "cumulative_billed_qty", "cumulative_billed_amount", -# "variation_qty", "variation_amount", "remark" -# ] - -# if data.shape[1] == len(expected_columns): -# data.columns = expected_columns -# else: -# data.columns = expected_columns[:data.shape[1]] # Truncate - -# current_main_task_serial = None -# current_main_task_name = None - -# for _, row in data.iterrows(): -# task_name = str(row["task_name"]) if row["task_name"] else "" -# serial_number = row["serial_number"] - -# if serial_number: # Main task -# current_main_task_serial = serial_number -# current_main_task_name = task_name -# parent_id = None -# else: # Subtask -# parent_id = current_main_task_serial - -# task = Task( -# district=work_details_dict.get("district"), -# block_name=work_details_dict["block"], -# village_name=work_details_dict["name_of_village"], -# serial_number=serial_number, -# task_name=task_name, -# unit=row["unit"], -# qty=row["qty"], -# rate=row["rate"], -# boq_amount=row["boq_amount"], -# previous_billed_qty=row["previous_billed_qty"], -# previous_billing_amount=row["previous_billing_amount"], -# in_this_ra_bill_qty=row["in_this_ra_bill_qty"], -# in_this_ra_billing_amount=row["in_this_ra_billing_amount"], -# cumulative_billed_qty=row["cumulative_billed_qty"], -# cumulative_billed_amount=row["cumulative_billed_amount"], -# variation_qty=row["variation_qty"], -# variation_amount=row["variation_amount"], -# parent_id=parent_id, -# parent_task_name=current_main_task_name if not serial_number else None, -# remark=row["remark"] -# ) -# db.session.add(task) - -# db.session.commit() -# log_activity(current_user.username, "Database Insert", f"Inserted work details and tasks from {file.filename}") -# return redirect(url_for('main.display_tasks')) -def to_2_decimal(value): - try: - if value is None or value == "": - return None - return round(float(value), 2) - except (TypeError, ValueError): - return None - @main.route('/upload', methods=['POST']) @login_required def upload(): - if 'file' not in request.files: - return "No file part" - file = request.files['file'] - if file.filename == '': - return "No selected file" + return upload_controller() - if file: - filepath = os.path.join(current_app.config['UPLOAD_FOLDER'], file.filename) - file.save(filepath) - log_activity(current_user.username, "File Upload", f"Uploaded file: {file.filename}") - - # Read work details (first 11 rows) - # work_details_data = pd.read_excel(filepath, nrows=11, header=None) - work_details_data = pd.read_excel(filepath, nrows=11, header=None, dtype=str) - work_details_dict = { - "name_of_work": work_details_data.iloc[0, 1], - "cover_agreement_no": work_details_data.iloc[1, 1], - "name_of_contractor": work_details_data.iloc[2, 1], - "name_of_tpi_agency": work_details_data.iloc[3, 1], - "name_of_division": work_details_data.iloc[4, 1], - "name_of_village": work_details_data.iloc[5, 1], - "block": work_details_data.iloc[6, 1], - "scheme_id": work_details_data.iloc[7, 1], - "date_of_billing": work_details_data.iloc[8, 1], - "measurement_book": work_details_data.iloc[9, 1], - "district": work_details_data.iloc[10, 1] - } - - # Clean work details NaN - work_details_dict = {k: (None if pd.isna(v) else v) for k, v in work_details_dict.items()} - - work_detail = WorkDetail(**work_details_dict) - db.session.add(work_detail) - - # Read task data - # data = pd.read_excel(filepath, skiprows=10) - data = pd.read_excel(filepath, skiprows=10) - - # ✅ Convert all NaN → None (critical for MySQL) - data = data.astype(object).where(pd.notna(data), None) - - - expected_columns = [ - "serial_number", "task_name", "unit", "qty", "rate", "boq_amount", - "previous_billed_qty", "previous_billing_amount", - "in_this_ra_bill_qty", "in_this_ra_billing_amount", - "cumulative_billed_qty", "cumulative_billed_amount", - "variation_qty", "variation_amount", "remark" - ] - - if data.shape[1] == len(expected_columns): - data.columns = expected_columns - else: - data.columns = expected_columns[:data.shape[1]] - - current_main_task_serial = None - current_main_task_name = None - - for _, row in data.iterrows(): - - task_name = str(row["task_name"]) if row["task_name"] else "" - serial_number = str(row["serial_number"]) if row["serial_number"] else None - - if serial_number: - current_main_task_serial = serial_number - current_main_task_name = task_name - parent_id = None - else: - parent_id = current_main_task_serial - - task = Task( - district=work_details_dict.get("district"), - block_name=work_details_dict["block"], - village_name=work_details_dict["name_of_village"], - serial_number=serial_number, - task_name=task_name, - unit=row["unit"], - qty=to_2_decimal(row["qty"]), - rate=to_2_decimal(row["rate"]), - boq_amount=to_2_decimal(row["boq_amount"]), - previous_billed_qty=to_2_decimal(row["previous_billed_qty"]), - previous_billing_amount=to_2_decimal(row["previous_billing_amount"]), - in_this_ra_bill_qty=to_2_decimal(row["in_this_ra_bill_qty"]), - in_this_ra_billing_amount=to_2_decimal(row["in_this_ra_billing_amount"]), - cumulative_billed_qty=to_2_decimal(row["cumulative_billed_qty"]), - cumulative_billed_amount=to_2_decimal(row["cumulative_billed_amount"]), - variation_qty=to_2_decimal(row["variation_qty"]), - variation_amount=to_2_decimal(row["variation_amount"]), - parent_id=parent_id, - parent_task_name=current_main_task_name if not serial_number else None, - remark=row["remark"] - ) - db.session.add(task) - - db.session.commit() - log_activity(current_user.username, "Database Insert", f"Inserted work details and tasks from {file.filename}") - - return redirect(url_for('main.display_tasks')) - -# # Update tasks route -# @main.route('/update_tasks', methods=['POST']) -# @login_required -# def update_tasks(): -# try: -# updates = request.get_json() -# update_count = 0 - -# for key, new_value in updates.items(): -# if '_' not in key: -# continue - -# field_name, task_id_str = key.rsplit('_', 1) -# if not task_id_str.isdigit(): -# continue - -# task_id = int(task_id_str) -# task = db.session.query(Task).filter_by(id=task_id).first() - -# if task: -# current_value = getattr(task, field_name, None) -# if current_value != new_value: -# setattr(task, field_name, new_value) -# update_count += 1 -# log_activity(current_user.username, "Task Update", f"Task ID {task.id} - {field_name} changed to {new_value}") - -# if update_count > 0: -# db.session.commit() -# log_activity(current_user.username, "Database Commit", f"{update_count} task field(s) updated") -# return jsonify({'message': f'count: {update_count} field(s) updated.'}) -# else: -# return jsonify({'message': 'No fields were updated.'}) - -# except Exception as e: -# log_activity(current_user.username, "Error", f"Update tasks error: {str(e)}") -# return jsonify({'error': 'An error occurred while updating tasks.'}), 500 -def recalc_task(task): - rate = float(task.rate or 0) - qty = float(task.qty or 0) - - prev_qty = float(task.previous_billed_qty or 0) - ra_qty = float(task.in_this_ra_bill_qty or 0) - - # H = G * E - task.previous_billing_amount = round(prev_qty * rate, 2) - - # J = I * E - task.in_this_ra_billing_amount = round(ra_qty * rate, 2) - - # K = I + G - task.cumulative_billed_qty = round(prev_qty + ra_qty, 2) - - # L = K * E - task.cumulative_billed_amount = round(task.cumulative_billed_qty * rate, 2) - - # M = IF(K > D , K - D , 0) - if task.cumulative_billed_qty > qty: - task.variation_qty = round(task.cumulative_billed_qty - qty, 2) - else: - task.variation_qty = 0 - - # N = M * E - task.variation_amount = round(task.variation_qty * rate, 2) @main.route('/update_tasks', methods=['POST']) @login_required def update_tasks(): - try: - updates = request.get_json() - update_count = 0 + return update_tasks_controller() - # fields that should NOT be manually edited - formula_fields = [ - "previous_billing_amount", - "in_this_ra_billing_amount", - "cumulative_billed_qty", - "cumulative_billed_amount", - "variation_qty", - "variation_amount" - ] - for key, new_value in updates.items(): - if '_' not in key: - continue - - field_name, task_id_str = key.rsplit('_', 1) - if not task_id_str.isdigit(): - continue - - task_id = int(task_id_str) - task = db.session.query(Task).filter_by(id=task_id).first() - - if task: - - # ❌ Skip manual update for formula fields - if field_name in formula_fields: - continue - - current_value = getattr(task, field_name, None) - - if str(current_value) != str(new_value): - setattr(task, field_name, new_value) - - # 🔥 auto recalc after any change - recalc_task(task) - - update_count += 1 - log_activity( - current_user.username, - "Task Update", - f"Task ID {task.id} - {field_name} changed to {new_value}" - ) - - if update_count > 0: - db.session.commit() - log_activity( - current_user.username, - "Database Commit", - f"{update_count} task field(s) updated" - ) - return jsonify({'message': f'count: {update_count} field(s) updated.'}) - else: - return jsonify({'message': 'No fields were updated.'}) - - except Exception as e: - log_activity(current_user.username, "Error", f"Update tasks error: {str(e)}") - return jsonify({'error': 'An error occurred while updating tasks.'}), 500 - -# Display tasks route @main.route('/tasks') @login_required def display_tasks(): - work_details = WorkDetail.query.order_by(WorkDetail.uploaded_at.desc()).first() - - if not work_details: - log_activity(current_user.username, "Tasks View", "No work details available") - return "No work details available.", 404 - - tasks = Task.query.filter_by( - district=work_details.district, - village_name=work_details.name_of_village, - block_name=work_details.block - ).order_by(Task.uploaded_at.desc()).all() - - grouped_tasks = [] - current_main_task = None - - for task in tasks: - task_data = { - "id": task.id, - "task_name": task.task_name, - "unit": task.unit, - "qty": task.qty, - "rate": task.rate, - "boq_amount": task.boq_amount, - "previous_billed_qty": task.previous_billed_qty, - "previous_billing_amount": task.previous_billing_amount, - "in_this_ra_bill_qty": task.in_this_ra_bill_qty, - "in_this_ra_billing_amount": task.in_this_ra_billing_amount, - "cumulative_billed_qty": task.cumulative_billed_qty, - "cumulative_billed_amount": task.cumulative_billed_amount, - "variation_qty": task.variation_qty, - "variation_amount": task.variation_amount, - "remark": task.remark, - "district": task.district - } - - if task.serial_number: - task_data["subtasks"] = [] - grouped_tasks.append(task_data) - current_main_task = task_data - elif current_main_task: - current_main_task["subtasks"].append(task_data) - - log_activity(current_user.username, "Tasks View", f"Displayed tasks for {work_details.name_of_village}, {work_details.block}") - return render_template('tasks_display.html', work_details=work_details, grouped_tasks=grouped_tasks) - + return display_tasks_controller() @main.route('/') - @login_required def dashboard(): - selected_block = request.args.getlist('block[]', None) + return dashboard_controller() - rate_col = cast(Task.rate, Float) - qty_col = cast(Task.in_this_ra_bill_qty, Float) - - query = db.session.query( - Task.block_name.label("block_name"), - Task.village_name.label("village_name"), - func.sum(cast(Task.boq_amount, Float)).label("total_boq_amount"), - func.sum(cast(Task.previous_billing_amount, Float)).label("prev_billed_amount"), - func.sum(cast(Task.variation_amount, Float)).label("total_variation_amount"), - func.sum(cast(Task.cumulative_billed_qty, Float)).label("cumulative_billed_qty"), - func.sum(cast(Task.cumulative_billed_qty, Float) * cast(Task.rate, Float)).label("cumulative_billed_amount"), - func.sum(qty_col).label("in_this_ra_bill_qty"), - func.sum(rate_col * qty_col).label("to_be_claimed_amount") - ) - - if selected_block and "All" not in selected_block: - query = query.filter(Task.block_name.in_(selected_block)) - - query = query.group_by(Task.block_name, Task.village_name) - villages = query.all() - - village_data = [] - for village in villages: - village_data.append({ - "block_name": village.block_name, - "village_name": village.village_name, - "total_boq_amount": village.total_boq_amount or 0, - "rate": "-", - "prev_billed_amount": village.prev_billed_amount or 0, - "total_variation_amount": village.total_variation_amount or 0, - "cumulative_billed_qty": village.cumulative_billed_qty or 0, - "cumulative_billed_amount": village.cumulative_billed_amount or 0, - "in_this_ra_bill_qty": village.in_this_ra_bill_qty or 0, - "to_be_claimed_amount": round(village.to_be_claimed_amount or 0, 2) - }) - - blocks = db.session.query(Task.block_name).distinct().all() - block_list = ["All"] + [block[0] for block in blocks] - - # log_activity(current_user.username, "Dashboard View", "Dashboard accessed") - return render_template('index.html', villages=village_data, blocks=block_list, selected_block=selected_block) - - -# @main.route('/generate_report_page') -# @login_required -# def generate_report_page(): -# blocks = db.session.query(Task.block_name).distinct().all() -# blocks = [block.block_name for block in blocks] -# selected_block = request.args.get('block') - -# if selected_block: -# main_tasks = db.session.query(Task.task_name).filter( -# Task.serial_number.isnot(None), -# Task.block_name == selected_block -# ).distinct().all() -# main_tasks = [task.task_name.strip().replace(",", "").replace("(", "").replace(")", "").replace(".", "").replace("&", "").replace("\n", "") for task in main_tasks] -# else: -# main_tasks = db.session.query(Task.task_name).filter(Task.serial_number.isnot(None)).distinct().all() -# main_tasks = [task.task_name.strip().replace(",", "").replace("(", "").replace(")", "").replace(".", "").replace("&", "").replace("\n", "") for task in main_tasks] - -# log_activity(current_user.username, "Report Page", f"Report generation page accessed (block={selected_block})") -# return render_template('task_report.html', main_tasks=main_tasks, blocks=blocks) @main.route('/get_blocks_by_district') @login_required def get_blocks_by_district(): - district = request.args.get('district') + return get_blocks_by_district_controller() - if not district: - return jsonify({'blocks': []}) - blocks = db.session.query(Task.block_name)\ - .filter(Task.district == district)\ - .distinct().all() +@main.route('/get_tasks_by_block') +@login_required +def get_tasks_by_block(): + return get_tasks_by_block_controller() + + +@main.route('/get_villages_by_block') +@login_required +def get_villages_by_block(): + return get_villages_by_block_controller() - return jsonify({'blocks': [b[0] for b in blocks]}) @main.route('/generate_report_page') @login_required def generate_report_page(): - selected_district = request.args.get('district') - selected_block = request.args.get('block') - - # ✅ Get all districts - districts = [d[0] for d in db.session.query(Task.district).distinct().all()] - - # ✅ Get blocks based on district - if selected_district: - blocks = [b[0] for b in db.session.query(Task.block_name) - .filter(Task.district == selected_district) - .distinct().all()] - else: - blocks = [] - - # ✅ Get main tasks based on block - if selected_block: - main_tasks = db.session.query(Task.task_name).filter( - Task.serial_number.isnot(None), - Task.block_name == selected_block - ).distinct().all() - - main_tasks = [ - task[0].strip() - .replace(",", "") - .replace("(", "") - .replace(")", "") - .replace(".", "") - .replace("&", "") - .replace("\n", "") - for task in main_tasks - ] - else: - main_tasks = [] - - log_activity( - current_user.username, - "Report Page", - f"Report page accessed district={selected_district}, block={selected_block}" - ) - - return render_template( - 'task_report.html', - districts=districts, - blocks=blocks, - main_tasks=main_tasks, - selected_district=selected_district, - selected_block=selected_block - ) -@main.route('/get_tasks_by_block') -@login_required -def get_tasks_by_block(): - block = request.args.get('block') - if not block: - return jsonify({'tasks': []}) - - tasks = db.session.query(Task.task_name)\ - .filter(Task.block_name == block)\ - .distinct()\ - .all() - - task_list = [task[0].strip() - .replace(",", "") - .replace("(", "") - .replace(")", "") - .replace(".", "") - .replace("&", "") - .replace("\n", "") for task in tasks] - - log_activity(current_user.username, "Fetch Tasks", f"Fetched tasks for block {block}") - return jsonify({'tasks': task_list}) - - -def get_villages_for_block(block_name): - villages = ( - db.session.query(WorkDetail.name_of_village) - .filter(WorkDetail.block == block_name) - .distinct() - .order_by(WorkDetail.name_of_village) - .all() - ) - return [v[0] for v in villages if v[0]] - - -@main.route('/get_villages_by_block', methods=['GET']) -@login_required -def get_villages_by_block(): - block = request.args.get('block') - villages = get_villages_for_block(block) - log_activity(current_user.username, "Fetch Villages", f"Fetched villages for block {block}") - return jsonify({'villages': villages}) + return generate_report_page_controller() @main.route('/filter_tasks', methods=['GET']) @login_required def filter_tasks(): - district = request.args.get('district') - block = request.args.get('block') - village = request.args.get('village') + return filter_tasks_controller() - # ✅ Fetch distinct districts - districts = [d[0] for d in db.session.query(WorkDetail.district).distinct()] - - # ✅ Fetch blocks filtered by district - if district: - blocks = [b[0] for b in db.session.query(WorkDetail.block) - .filter(WorkDetail.district == district).distinct()] - else: - blocks = [] - - # ✅ Fetch villages filtered by district + block - if district and block: - villages = [v[0] for v in db.session.query(WorkDetail.name_of_village) - .filter(WorkDetail.district == district, - WorkDetail.block == block) - .distinct()] - else: - villages = [] - - grouped_tasks = [] - - # ✅ Only fetch tasks if all three (district, block, village) are selected - if district and block and village: - query = (db.session.query(Task) - .join(WorkDetail, Task.village_name == WorkDetail.name_of_village) - .filter(WorkDetail.district == district, - WorkDetail.block == block, - WorkDetail.name_of_village == village)) - - tasks = query.order_by(Task.uploaded_at.desc()).all() - - current_main_task = None - for task in tasks: - task_data = { - "id": task.id, - "task_name": task.task_name, - "unit": task.unit, - "qty": task.qty, - "rate": task.rate, - "boq_amount": task.boq_amount, - "previous_billed_qty": task.previous_billed_qty, - "previous_billing_amount": task.previous_billing_amount, - "in_this_ra_bill_qty": task.in_this_ra_bill_qty, - "in_this_ra_billing_amount": task.in_this_ra_billing_amount, - "cumulative_billed_qty": task.cumulative_billed_qty, - "cumulative_billed_amount": task.cumulative_billed_amount, - "variation_qty": task.variation_qty, - "variation_amount": task.variation_amount, - "remark": task.remark - } - - # ✅ Group main tasks (with serial_number) and subtasks - if task.serial_number: - task_data["subtasks"] = [] - grouped_tasks.append(task_data) - current_main_task = task_data - elif current_main_task: - current_main_task["subtasks"].append(task_data) - - log_activity(current_user.username, "Filter Tasks", - f"Filtered tasks for district={district}, block={block}, village={village}") - - # ✅ Render with both filtering + grouped tasks - return render_template( - 'filter_tasks.html', - grouped_tasks=grouped_tasks, - districts=districts, - blocks=blocks, - villages=villages, - selected_district=district, - selected_block=block, - selected_village=village - ) - - - -# ✅ Helper function for logging user activity -def log_activity(user, action, details=""): - try: - log_file = os.path.join(current_app.root_path, "activity.log") - timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - - with open(log_file, "a") as f: - f.write(f"Timestamp: {timestamp} | User: {user} | Action: {action} | Details: {details}\n") - except Exception as e: - print(f"Logging failed: {e}") - -from flask import request -from datetime import datetime @main.route('/activity_log', methods=['GET', 'POST']) @login_required def activity_log(): - logs = [] - log_file = os.path.join(current_app.root_path, 'activity.log') - - if os.path.exists(log_file): - with open(log_file, 'r') as f: - for line in f: - parts = line.strip().split(" | ") - if len(parts) == 4: - - logs.append({ - "timestamp": parts[0].replace("Timestamp:", "").strip(), - "user": parts[1].replace("User:", "").strip(), - "action": parts[2].replace("Action:", "").strip(), - "details": parts[3].replace("Details:", "").strip() - }) - - # Filters - start_date = request.args.get("start_date") - end_date = request.args.get("end_date") - username = request.args.get("username") - - filtered_logs = logs - - # Date filter (inclusive) - if start_date or end_date: - try: - if start_date: - start_dt = datetime.strptime(start_date, "%Y-%m-%d") - else: - start_dt = datetime.min - - if end_date: - end_dt = datetime.strptime(end_date, "%Y-%m-%d") - else: - end_dt = datetime.max - - filtered_logs = [ - log for log in filtered_logs - if start_dt <= datetime.strptime(log["timestamp"], "%Y-%m-%d %H:%M:%S") <= end_dt.replace(hour=23, minute=59, second=59) - ] - except Exception as e: - print("Date filter error:", e) - - # Username filter - if username: - filtered_logs = [log for log in filtered_logs if log["user"].lower() == username.lower()] - - return render_template( - "activity_log.html", - logs=filtered_logs, - start_date=start_date, - end_date=end_date, - username=username - ) - + return activity_log_controller() diff --git a/app/service/__pycache__/logger.cpython-314.pyc b/app/service/__pycache__/logger.cpython-314.pyc new file mode 100644 index 0000000..515dfd7 Binary files /dev/null and b/app/service/__pycache__/logger.cpython-314.pyc differ diff --git a/app/service/logger.py b/app/service/logger.py new file mode 100644 index 0000000..d9e3455 --- /dev/null +++ b/app/service/logger.py @@ -0,0 +1,17 @@ +import os +from flask import current_app +from datetime import datetime + + +def log_activity(user, action, details=""): + try: + log_file = os.path.join(current_app.root_path, "activity.log") + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + with open(log_file, "a") as f: + f.write( + f"Timestamp: {timestamp} | User: {user} | " + f"Action: {action} | Details: {details}\n" + ) + except Exception as e: + print(f"Logging failed: {e}") \ No newline at end of file diff --git a/instance/default.db b/instance/default.db deleted file mode 100644 index ef229e8..0000000 Binary files a/instance/default.db and /dev/null differ diff --git a/ldap-data/data.mdb b/ldap-data/data.mdb deleted file mode 100644 index 885c473..0000000 Binary files a/ldap-data/data.mdb and /dev/null differ diff --git a/ldap-data/lock.mdb b/ldap-data/lock.mdb deleted file mode 100644 index ddf3b84..0000000 Binary files a/ldap-data/lock.mdb and /dev/null differ diff --git a/ldifs/base.ldif b/ldifs/base.ldif deleted file mode 100644 index 7f9542c..0000000 --- a/ldifs/base.ldif +++ /dev/null @@ -1,6 +0,0 @@ -dn: dc=lcepl,dc=org -objectClass: top -objectClass: dcObject -objectClass: organization -o: LCEPL Organization -dc: lcepl diff --git a/ldifs/desktop.ini b/ldifs/desktop.ini deleted file mode 100644 index 6b728ac..0000000 --- a/ldifs/desktop.ini +++ /dev/null @@ -1,2 +0,0 @@ -[LocalizedFileNames] -ou.ldif=@ou,0 diff --git a/ldifs/laxmi_add.ldif b/ldifs/laxmi_add.ldif deleted file mode 100644 index 9ad2d06..0000000 --- a/ldifs/laxmi_add.ldif +++ /dev/null @@ -1,13 +0,0 @@ -dn: uid=laxmi,ou=users,dc=lcepl,dc=org -objectClass: inetOrgPerson -objectClass: posixAccount -objectClass: top -cn: Laxmi Bamnale -sn: Bamnale -uid: laxmi -uidNumber: 1001 -gidNumber: 1001 -homeDirectory: /home/laxmi -loginShell: /bin/bash -mail: laxmi@lcepl.org -userPassword: {SSHA}Vg2xl+biEhgR9DQPmCUuPJ/e70ECgND7 diff --git a/ldifs/ou-users.ldif b/ldifs/ou-users.ldif deleted file mode 100644 index 19b5be0..0000000 --- a/ldifs/ou-users.ldif +++ /dev/null @@ -1,3 +0,0 @@ -dn: ou=users,dc=lcepl,dc=org -objectClass: organizationalUnit -ou: users diff --git a/ldifs/ou.ldif b/ldifs/ou.ldif deleted file mode 100644 index 19b5be0..0000000 --- a/ldifs/ou.ldif +++ /dev/null @@ -1,3 +0,0 @@ -dn: ou=users,dc=lcepl,dc=org -objectClass: organizationalUnit -ou: users diff --git a/ldifs/prajakta.ldif b/ldifs/prajakta.ldif deleted file mode 100644 index 8a2ed87..0000000 --- a/ldifs/prajakta.ldif +++ /dev/null @@ -1,6 +0,0 @@ -dn: uid=prajakta,ou=users,dc=lcepl,dc=org -objectClass: inetOrgPerson -cn: Prajakta -sn: S -uid: prajakta -userPassword: prajakta123 diff --git a/logs/activity.log b/logs/activity.log deleted file mode 100644 index e69de29..0000000 diff --git a/uploads/Supply of DG set 45 KVA_Report.xlsx b/uploads/150 mm Dia size ‐ MS pipe_20260415_114344.xlsx similarity index 55% rename from uploads/Supply of DG set 45 KVA_Report.xlsx rename to uploads/150 mm Dia size ‐ MS pipe_20260415_114344.xlsx index caf894a..959463e 100644 Binary files a/uploads/Supply of DG set 45 KVA_Report.xlsx and b/uploads/150 mm Dia size ‐ MS pipe_20260415_114344.xlsx differ diff --git a/uploads/500 MMØ_20260414_153956.xlsx b/uploads/150 mm Dia size ‐ MS pipe_20260415_114407.xlsx similarity index 58% rename from uploads/500 MMØ_20260414_153956.xlsx rename to uploads/150 mm Dia size ‐ MS pipe_20260415_114407.xlsx index 1267c84..cb59902 100644 Binary files a/uploads/500 MMØ_20260414_153956.xlsx and b/uploads/150 mm Dia size ‐ MS pipe_20260415_114407.xlsx differ diff --git a/uploads/150mm EMF_Report.xlsx b/uploads/150mm EMF_Report.xlsx deleted file mode 100644 index 6eb3447..0000000 Binary files a/uploads/150mm EMF_Report.xlsx and /dev/null differ diff --git a/uploads/200 Kl 12 M Staging_Report.xlsx b/uploads/200 Kl 12 M Staging_Report.xlsx deleted file mode 100644 index 6f6794b..0000000 Binary files a/uploads/200 Kl 12 M Staging_Report.xlsx and /dev/null differ diff --git a/uploads/250 KL 14 M Staging_Report.xlsx b/uploads/250 KL 14 M Staging_Report.xlsx deleted file mode 100644 index c7b4db0..0000000 Binary files a/uploads/250 KL 14 M Staging_Report.xlsx and /dev/null differ diff --git a/uploads/400 MMØ_Report.xlsx b/uploads/400 MMØ_Report.xlsx deleted file mode 100644 index a7f5259..0000000 Binary files a/uploads/400 MMØ_Report.xlsx and /dev/null differ diff --git a/uploads/450 MMØ_Report.xlsx b/uploads/450 MMØ_Report.xlsx deleted file mode 100644 index f66c1a0..0000000 Binary files a/uploads/450 MMØ_Report.xlsx and /dev/null differ diff --git a/uploads/500 MMØ_20260414_153954.xlsx b/uploads/500 MMØ_20260414_153954.xlsx deleted file mode 100644 index 91f57df..0000000 Binary files a/uploads/500 MMØ_20260414_153954.xlsx and /dev/null differ diff --git a/uploads/500 MMØ_Report.xlsx b/uploads/500 MMØ_Report.xlsx deleted file mode 100644 index 19269e6..0000000 Binary files a/uploads/500 MMØ_Report.xlsx and /dev/null differ diff --git a/uploads/600 MMØ_Report.xlsx b/uploads/600 MMØ_Report.xlsx deleted file mode 100644 index 78ff379..0000000 Binary files a/uploads/600 MMØ_Report.xlsx and /dev/null differ diff --git a/uploads/67112 - SK Construction .xlsx b/uploads/67112 - SK Construction .xlsx deleted file mode 100644 index d2aa26f..0000000 Binary files a/uploads/67112 - SK Construction .xlsx and /dev/null differ diff --git a/uploads/Abdullanagar urf Sonta.xlsx b/uploads/Abdullanagar urf Sonta.xlsx deleted file mode 100644 index 1b36c44..0000000 Binary files a/uploads/Abdullanagar urf Sonta.xlsx and /dev/null differ diff --git a/uploads/Abdulpur urf morjmajra-Thanabhawan.xlsx b/uploads/Abdulpur urf morjmajra-Thanabhawan.xlsx deleted file mode 100644 index b5fec70..0000000 Binary files a/uploads/Abdulpur urf morjmajra-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Abdulpur urf morjmajra.xlsx b/uploads/Abdulpur urf morjmajra.xlsx deleted file mode 100644 index 42bb689..0000000 Binary files a/uploads/Abdulpur urf morjmajra.xlsx and /dev/null differ diff --git a/uploads/Abdulpur-Muzaffarnagar.xlsx b/uploads/Abdulpur-Muzaffarnagar.xlsx deleted file mode 100644 index 77decdc..0000000 Binary files a/uploads/Abdulpur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Abdulpur.xlsx b/uploads/Abdulpur.xlsx deleted file mode 100644 index f6a7619..0000000 Binary files a/uploads/Abdulpur.xlsx and /dev/null differ diff --git a/uploads/Adampur-Shamli.xlsx b/uploads/Adampur-Shamli.xlsx deleted file mode 100644 index f891856..0000000 Binary files a/uploads/Adampur-Shamli.xlsx and /dev/null differ diff --git a/uploads/Adampur.xlsx b/uploads/Adampur.xlsx deleted file mode 100644 index f1f2780..0000000 Binary files a/uploads/Adampur.xlsx and /dev/null differ diff --git a/uploads/Ahatagosarh-Thanabhawan.xlsx b/uploads/Ahatagosarh-Thanabhawan.xlsx deleted file mode 100644 index 4751407..0000000 Binary files a/uploads/Ahatagosarh-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Ahatagosarh.xlsx b/uploads/Ahatagosarh.xlsx deleted file mode 100644 index 77ec5db..0000000 Binary files a/uploads/Ahatagosarh.xlsx and /dev/null differ diff --git a/uploads/Ahmadpur-Thanabhawan.xlsx b/uploads/Ahmadpur-Thanabhawan.xlsx deleted file mode 100644 index b163321..0000000 Binary files a/uploads/Ahmadpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Ahmadpur.xlsx b/uploads/Ahmadpur.xlsx deleted file mode 100644 index 75e4f0a..0000000 Binary files a/uploads/Ahmadpur.xlsx and /dev/null differ diff --git a/uploads/Ahrora.xlsx b/uploads/Ahrora.xlsx deleted file mode 100644 index 71592ba..0000000 Binary files a/uploads/Ahrora.xlsx and /dev/null differ diff --git a/uploads/Aiki Badhiwala-Muzaffarnagar.xlsx b/uploads/Aiki Badhiwala-Muzaffarnagar.xlsx deleted file mode 100644 index e24ae21..0000000 Binary files a/uploads/Aiki Badhiwala-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Aiki Badhiwala.xlsx b/uploads/Aiki Badhiwala.xlsx deleted file mode 100644 index 5623eb8..0000000 Binary files a/uploads/Aiki Badhiwala.xlsx and /dev/null differ diff --git a/uploads/Akarpur.xlsx b/uploads/Akarpur.xlsx deleted file mode 100644 index cd657ff..0000000 Binary files a/uploads/Akarpur.xlsx and /dev/null differ diff --git a/uploads/Akbargarh.xlsx b/uploads/Akbargarh.xlsx deleted file mode 100644 index 75eec6b..0000000 Binary files a/uploads/Akbargarh.xlsx and /dev/null differ diff --git a/uploads/Akhlor.xlsx b/uploads/Akhlor.xlsx deleted file mode 100644 index 9dcaa10..0000000 Binary files a/uploads/Akhlor.xlsx and /dev/null differ diff --git a/uploads/Alipur Aterna.xlsx b/uploads/Alipur Aterna.xlsx deleted file mode 100644 index 88124a9..0000000 Binary files a/uploads/Alipur Aterna.xlsx and /dev/null differ diff --git a/uploads/Alipur umerpur-Thanabhawan.xlsx b/uploads/Alipur umerpur-Thanabhawan.xlsx deleted file mode 100644 index 6bc40a5..0000000 Binary files a/uploads/Alipur umerpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Alipur umerpur.xlsx b/uploads/Alipur umerpur.xlsx deleted file mode 100644 index 19a0561..0000000 Binary files a/uploads/Alipur umerpur.xlsx and /dev/null differ diff --git a/uploads/Amberpur Mathedi.xlsx b/uploads/Amberpur Mathedi.xlsx deleted file mode 100644 index a5168bb..0000000 Binary files a/uploads/Amberpur Mathedi.xlsx and /dev/null differ diff --git a/uploads/Ambetha yakubpur-Thanabhawan.xlsx b/uploads/Ambetha yakubpur-Thanabhawan.xlsx deleted file mode 100644 index 5ea06a2..0000000 Binary files a/uploads/Ambetha yakubpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Ambetha yakubpur.xlsx b/uploads/Ambetha yakubpur.xlsx deleted file mode 100644 index c0f626e..0000000 Binary files a/uploads/Ambetha yakubpur.xlsx and /dev/null differ diff --git a/uploads/Ametha Ridan.xlsx b/uploads/Ametha Ridan.xlsx deleted file mode 100644 index 5b9f8cc..0000000 Binary files a/uploads/Ametha Ridan.xlsx and /dev/null differ diff --git a/uploads/Anti.xlsx b/uploads/Anti.xlsx deleted file mode 100644 index 14841fe..0000000 Binary files a/uploads/Anti.xlsx and /dev/null differ diff --git a/uploads/Antwara.xlsx b/uploads/Antwara.xlsx deleted file mode 100644 index 865e951..0000000 Binary files a/uploads/Antwara.xlsx and /dev/null differ diff --git a/uploads/Asadpur bamnauli-kairana.xlsx b/uploads/Asadpur bamnauli-kairana.xlsx deleted file mode 100644 index d2b27cc..0000000 Binary files a/uploads/Asadpur bamnauli-kairana.xlsx and /dev/null differ diff --git a/uploads/Asadpur bamnauli.xlsx b/uploads/Asadpur bamnauli.xlsx deleted file mode 100644 index ce85f2e..0000000 Binary files a/uploads/Asadpur bamnauli.xlsx and /dev/null differ diff --git a/uploads/Asadpur.xlsx b/uploads/Asadpur.xlsx deleted file mode 100644 index 8d5e653..0000000 Binary files a/uploads/Asadpur.xlsx and /dev/null differ diff --git a/uploads/Asadpur_ambetha-kandhla.xlsx b/uploads/Asadpur_ambetha-kandhla.xlsx deleted file mode 100644 index 2d739a5..0000000 Binary files a/uploads/Asadpur_ambetha-kandhla.xlsx and /dev/null differ diff --git a/uploads/Asadpur_ambetha.xlsx b/uploads/Asadpur_ambetha.xlsx deleted file mode 100644 index badaaba..0000000 Binary files a/uploads/Asadpur_ambetha.xlsx and /dev/null differ diff --git a/uploads/Aterna-Budhana.xlsx b/uploads/Aterna-Budhana.xlsx deleted file mode 100644 index dc840a5..0000000 Binary files a/uploads/Aterna-Budhana.xlsx and /dev/null differ diff --git a/uploads/Aterna.xlsx b/uploads/Aterna.xlsx deleted file mode 100644 index db7a463..0000000 Binary files a/uploads/Aterna.xlsx and /dev/null differ diff --git a/uploads/Athai-Muzaffarnagar.xlsx b/uploads/Athai-Muzaffarnagar.xlsx deleted file mode 100644 index 90d2b67..0000000 Binary files a/uploads/Athai-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Athai.xlsx b/uploads/Athai.xlsx deleted file mode 100644 index ac2b927..0000000 Binary files a/uploads/Athai.xlsx and /dev/null differ diff --git a/uploads/Aurangabad urf gandewara-Thanabhawan.xlsx b/uploads/Aurangabad urf gandewara-Thanabhawan.xlsx deleted file mode 100644 index 2d02e2b..0000000 Binary files a/uploads/Aurangabad urf gandewara-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Aurangabad urf gandewara.xlsx b/uploads/Aurangabad urf gandewara.xlsx deleted file mode 100644 index bab7a18..0000000 Binary files a/uploads/Aurangabad urf gandewara.xlsx and /dev/null differ diff --git a/uploads/BHERAHERI.xlsx b/uploads/BHERAHERI.xlsx deleted file mode 100644 index ec4d2e9..0000000 Binary files a/uploads/BHERAHERI.xlsx and /dev/null differ diff --git a/uploads/Badh.xlsx b/uploads/Badh.xlsx deleted file mode 100644 index 630749d..0000000 Binary files a/uploads/Badh.xlsx and /dev/null differ diff --git a/uploads/Badhai Kalan.xlsx b/uploads/Badhai Kalan.xlsx deleted file mode 100644 index 636f406..0000000 Binary files a/uploads/Badhai Kalan.xlsx and /dev/null differ diff --git a/uploads/Badhai Khurd.xlsx b/uploads/Badhai Khurd.xlsx deleted file mode 100644 index 8121ccc..0000000 Binary files a/uploads/Badhai Khurd.xlsx and /dev/null differ diff --git a/uploads/Badheri.xlsx b/uploads/Badheri.xlsx deleted file mode 100644 index 40bf61f..0000000 Binary files a/uploads/Badheri.xlsx and /dev/null differ diff --git a/uploads/Badhupura-kairana.xlsx b/uploads/Badhupura-kairana.xlsx deleted file mode 100644 index 72a722e..0000000 Binary files a/uploads/Badhupura-kairana.xlsx and /dev/null differ diff --git a/uploads/Badhupura.xlsx b/uploads/Badhupura.xlsx deleted file mode 100644 index 72a722e..0000000 Binary files a/uploads/Badhupura.xlsx and /dev/null differ diff --git a/uploads/Bahpur.xlsx b/uploads/Bahpur.xlsx deleted file mode 100644 index daf5aec..0000000 Binary files a/uploads/Bahpur.xlsx and /dev/null differ diff --git a/uploads/Bajheri.xlsx b/uploads/Bajheri.xlsx deleted file mode 100644 index 81bd5b2..0000000 Binary files a/uploads/Bajheri.xlsx and /dev/null differ diff --git a/uploads/Ballamazra-Unn.xlsx b/uploads/Ballamazra-Unn.xlsx deleted file mode 100644 index 48dd6e1..0000000 Binary files a/uploads/Ballamazra-Unn.xlsx and /dev/null differ diff --git a/uploads/Ballamazra.xlsx b/uploads/Ballamazra.xlsx deleted file mode 100644 index 556dcf9..0000000 Binary files a/uploads/Ballamazra.xlsx and /dev/null differ diff --git a/uploads/Balwakheri.xlsx b/uploads/Balwakheri.xlsx deleted file mode 100644 index b681ec5..0000000 Binary files a/uploads/Balwakheri.xlsx and /dev/null differ diff --git a/uploads/Bamnoli-kairana.xlsx b/uploads/Bamnoli-kairana.xlsx deleted file mode 100644 index 1689d01..0000000 Binary files a/uploads/Bamnoli-kairana.xlsx and /dev/null differ diff --git a/uploads/Bamnoli.xlsx b/uploads/Bamnoli.xlsx deleted file mode 100644 index 1689d01..0000000 Binary files a/uploads/Bamnoli.xlsx and /dev/null differ diff --git a/uploads/Bannagar.xlsx b/uploads/Bannagar.xlsx deleted file mode 100644 index 52e7296..0000000 Binary files a/uploads/Bannagar.xlsx and /dev/null differ diff --git a/uploads/Baraala kukkarheri-kairana.xlsx b/uploads/Baraala kukkarheri-kairana.xlsx deleted file mode 100644 index d807af7..0000000 Binary files a/uploads/Baraala kukkarheri-kairana.xlsx and /dev/null differ diff --git a/uploads/Baraala kukkarheri.xlsx b/uploads/Baraala kukkarheri.xlsx deleted file mode 100644 index d807af7..0000000 Binary files a/uploads/Baraala kukkarheri.xlsx and /dev/null differ diff --git a/uploads/Barkali.xlsx b/uploads/Barkali.xlsx deleted file mode 100644 index 81dc268..0000000 Binary files a/uploads/Barkali.xlsx and /dev/null differ diff --git a/uploads/Barnavi pathar-kairana.xlsx b/uploads/Barnavi pathar-kairana.xlsx deleted file mode 100644 index 9e536f5..0000000 Binary files a/uploads/Barnavi pathar-kairana.xlsx and /dev/null differ diff --git a/uploads/Barnavi pathar.xlsx b/uploads/Barnavi pathar.xlsx deleted file mode 100644 index 9e536f5..0000000 Binary files a/uploads/Barnavi pathar.xlsx and /dev/null differ diff --git a/uploads/Basayanch.xlsx b/uploads/Basayanch.xlsx deleted file mode 100644 index a22766b..0000000 Binary files a/uploads/Basayanch.xlsx and /dev/null differ diff --git a/uploads/Basera-kairana.xlsx b/uploads/Basera-kairana.xlsx deleted file mode 100644 index c271aec..0000000 Binary files a/uploads/Basera-kairana.xlsx and /dev/null differ diff --git a/uploads/Basera.xlsx b/uploads/Basera.xlsx deleted file mode 100644 index c271aec..0000000 Binary files a/uploads/Basera.xlsx and /dev/null differ diff --git a/uploads/Basi Chaundiyari.xlsx b/uploads/Basi Chaundiyari.xlsx deleted file mode 100644 index 03357bf..0000000 Binary files a/uploads/Basi Chaundiyari.xlsx and /dev/null differ diff --git a/uploads/Bedhkheri.xlsx b/uploads/Bedhkheri.xlsx deleted file mode 100644 index 9d40bdf..0000000 Binary files a/uploads/Bedhkheri.xlsx and /dev/null differ diff --git a/uploads/Behari.xlsx b/uploads/Behari.xlsx deleted file mode 100644 index f377988..0000000 Binary files a/uploads/Behari.xlsx and /dev/null differ diff --git a/uploads/Behrassa.xlsx b/uploads/Behrassa.xlsx deleted file mode 100644 index 46ebb67..0000000 Binary files a/uploads/Behrassa.xlsx and /dev/null differ diff --git a/uploads/Belda-Muzaffarnagar.xlsx b/uploads/Belda-Muzaffarnagar.xlsx deleted file mode 100644 index 509e2f1..0000000 Binary files a/uploads/Belda-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Belda.xlsx b/uploads/Belda.xlsx deleted file mode 100644 index d28c49b..0000000 Binary files a/uploads/Belda.xlsx and /dev/null differ diff --git a/uploads/Bhaisani-Muzaffarnagar.xlsx b/uploads/Bhaisani-Muzaffarnagar.xlsx deleted file mode 100644 index 9c36101..0000000 Binary files a/uploads/Bhaisani-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Bhaisani.xlsx b/uploads/Bhaisani.xlsx deleted file mode 100644 index 9e75080..0000000 Binary files a/uploads/Bhaisani.xlsx and /dev/null differ diff --git a/uploads/Bhamela.xlsx b/uploads/Bhamela.xlsx deleted file mode 100644 index 99d89b6..0000000 Binary files a/uploads/Bhamela.xlsx and /dev/null differ diff --git a/uploads/Bhameri.xlsx b/uploads/Bhameri.xlsx deleted file mode 100644 index 52e6c7f..0000000 Binary files a/uploads/Bhameri.xlsx and /dev/null differ diff --git a/uploads/Bhandaura-Thanabhawan.xlsx b/uploads/Bhandaura-Thanabhawan.xlsx deleted file mode 100644 index f9785fa..0000000 Binary files a/uploads/Bhandaura-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Bhandaura.xlsx b/uploads/Bhandaura.xlsx deleted file mode 100644 index 5b07ea2..0000000 Binary files a/uploads/Bhandaura.xlsx and /dev/null differ diff --git a/uploads/Bhandura.xlsx b/uploads/Bhandura.xlsx deleted file mode 100644 index 6f7d679..0000000 Binary files a/uploads/Bhandura.xlsx and /dev/null differ diff --git a/uploads/Bhanera jat-Shamli.xlsx b/uploads/Bhanera jat-Shamli.xlsx deleted file mode 100644 index 2038934..0000000 Binary files a/uploads/Bhanera jat-Shamli.xlsx and /dev/null differ diff --git a/uploads/Bhanera jat.xlsx b/uploads/Bhanera jat.xlsx deleted file mode 100644 index 358c72e..0000000 Binary files a/uploads/Bhanera jat.xlsx and /dev/null differ diff --git a/uploads/Bhanerudda-Thanabhawan.xlsx b/uploads/Bhanerudda-Thanabhawan.xlsx deleted file mode 100644 index 264f2d2..0000000 Binary files a/uploads/Bhanerudda-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Bhanerudda.xlsx b/uploads/Bhanerudda.xlsx deleted file mode 100644 index 32ced13..0000000 Binary files a/uploads/Bhanerudda.xlsx and /dev/null differ diff --git a/uploads/Bhari.xlsx b/uploads/Bhari.xlsx deleted file mode 100644 index f76c696..0000000 Binary files a/uploads/Bhari.xlsx and /dev/null differ diff --git a/uploads/Bharsi-kandhla.xlsx b/uploads/Bharsi-kandhla.xlsx deleted file mode 100644 index dd36dde..0000000 Binary files a/uploads/Bharsi-kandhla.xlsx and /dev/null differ diff --git a/uploads/Bharsi.xlsx b/uploads/Bharsi.xlsx deleted file mode 100644 index 80a43ad..0000000 Binary files a/uploads/Bharsi.xlsx and /dev/null differ diff --git a/uploads/Bhatu.xlsx b/uploads/Bhatu.xlsx deleted file mode 100644 index 6e2b8f5..0000000 Binary files a/uploads/Bhatu.xlsx and /dev/null differ diff --git a/uploads/Bheraheri-Muzaffarnagar.xlsx b/uploads/Bheraheri-Muzaffarnagar.xlsx deleted file mode 100644 index 04adaad..0000000 Binary files a/uploads/Bheraheri-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Bhikki.xlsx b/uploads/Bhikki.xlsx deleted file mode 100644 index f20987e..0000000 Binary files a/uploads/Bhikki.xlsx and /dev/null differ diff --git a/uploads/Bhogi Mazra.xlsx b/uploads/Bhogi Mazra.xlsx deleted file mode 100644 index 0ff473a..0000000 Binary files a/uploads/Bhogi Mazra.xlsx and /dev/null differ diff --git a/uploads/Bhojhaheri Nuhpur-Muzaffarnagar.xlsx b/uploads/Bhojhaheri Nuhpur-Muzaffarnagar.xlsx deleted file mode 100644 index 63e6b7a..0000000 Binary files a/uploads/Bhojhaheri Nuhpur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Bhojhaheri Nuhpur.xlsx b/uploads/Bhojhaheri Nuhpur.xlsx deleted file mode 100644 index 0e8e55e..0000000 Binary files a/uploads/Bhojhaheri Nuhpur.xlsx and /dev/null differ diff --git a/uploads/Bhoopkheri.xlsx b/uploads/Bhoopkheri.xlsx deleted file mode 100644 index 5135ed6..0000000 Binary files a/uploads/Bhoopkheri.xlsx and /dev/null differ diff --git a/uploads/Bhraham khera-kandhla.xlsx b/uploads/Bhraham khera-kandhla.xlsx deleted file mode 100644 index 81fa453..0000000 Binary files a/uploads/Bhraham khera-kandhla.xlsx and /dev/null differ diff --git a/uploads/Bhraham khera.xlsx b/uploads/Bhraham khera.xlsx deleted file mode 100644 index 25b1287..0000000 Binary files a/uploads/Bhraham khera.xlsx and /dev/null differ diff --git a/uploads/Bhurahedi-Muzaffarnagar.xlsx b/uploads/Bhurahedi-Muzaffarnagar.xlsx deleted file mode 100644 index cc79502..0000000 Binary files a/uploads/Bhurahedi-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Bhurahedi.xlsx b/uploads/Bhurahedi.xlsx deleted file mode 100644 index 5e912a5..0000000 Binary files a/uploads/Bhurahedi.xlsx and /dev/null differ diff --git a/uploads/Bibipur Jalalbad.xlsx b/uploads/Bibipur Jalalbad.xlsx deleted file mode 100644 index 9d11f6b..0000000 Binary files a/uploads/Bibipur Jalalbad.xlsx and /dev/null differ diff --git a/uploads/Bibipur hatiya-kairana.xlsx b/uploads/Bibipur hatiya-kairana.xlsx deleted file mode 100644 index e3c9c34..0000000 Binary files a/uploads/Bibipur hatiya-kairana.xlsx and /dev/null differ diff --git a/uploads/Bibipur hatiya.xlsx b/uploads/Bibipur hatiya.xlsx deleted file mode 100644 index e3c9c34..0000000 Binary files a/uploads/Bibipur hatiya.xlsx and /dev/null differ diff --git a/uploads/Bibipur.xlsx b/uploads/Bibipur.xlsx deleted file mode 100644 index e639b23..0000000 Binary files a/uploads/Bibipur.xlsx and /dev/null differ diff --git a/uploads/Bidauli.xlsx b/uploads/Bidauli.xlsx deleted file mode 100644 index 3645aeb..0000000 Binary files a/uploads/Bidauli.xlsx and /dev/null differ diff --git a/uploads/Bihari.xlsx b/uploads/Bihari.xlsx deleted file mode 100644 index 916ee8c..0000000 Binary files a/uploads/Bihari.xlsx and /dev/null differ diff --git a/uploads/Binda(benra)-kairana.xlsx b/uploads/Binda(benra)-kairana.xlsx deleted file mode 100644 index b64d802..0000000 Binary files a/uploads/Binda(benra)-kairana.xlsx and /dev/null differ diff --git a/uploads/Binda(benra).xlsx b/uploads/Binda(benra).xlsx deleted file mode 100644 index b64d802..0000000 Binary files a/uploads/Binda(benra).xlsx and /dev/null differ diff --git a/uploads/Budhakhera.xlsx b/uploads/Budhakhera.xlsx deleted file mode 100644 index 55e064c..0000000 Binary files a/uploads/Budhakhera.xlsx and /dev/null differ diff --git a/uploads/Bunta-Thanabhawan.xlsx b/uploads/Bunta-Thanabhawan.xlsx deleted file mode 100644 index 593b129..0000000 Binary files a/uploads/Bunta-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Bunta.xlsx b/uploads/Bunta.xlsx deleted file mode 100644 index 5ccdd64..0000000 Binary files a/uploads/Bunta.xlsx and /dev/null differ diff --git a/uploads/Buwara Kalan.xlsx b/uploads/Buwara Kalan.xlsx deleted file mode 100644 index e7eb302..0000000 Binary files a/uploads/Buwara Kalan.xlsx and /dev/null differ diff --git a/uploads/Chadhaw-kandhla.xlsx b/uploads/Chadhaw-kandhla.xlsx deleted file mode 100644 index aa0a37c..0000000 Binary files a/uploads/Chadhaw-kandhla.xlsx and /dev/null differ diff --git a/uploads/Chadhaw.xlsx b/uploads/Chadhaw.xlsx deleted file mode 100644 index d7d87f7..0000000 Binary files a/uploads/Chadhaw.xlsx and /dev/null differ diff --git a/uploads/Chamrawala-Muzaffarnagar.xlsx b/uploads/Chamrawala-Muzaffarnagar.xlsx deleted file mode 100644 index 8ee6512..0000000 Binary files a/uploads/Chamrawala-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Chamrawala.xlsx b/uploads/Chamrawala.xlsx deleted file mode 100644 index d5d3c32..0000000 Binary files a/uploads/Chamrawala.xlsx and /dev/null differ diff --git a/uploads/Chaurawala-Muzaffarnagar.xlsx b/uploads/Chaurawala-Muzaffarnagar.xlsx deleted file mode 100644 index 7e8f850..0000000 Binary files a/uploads/Chaurawala-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Chaurawala.xlsx b/uploads/Chaurawala.xlsx deleted file mode 100644 index 2325a2f..0000000 Binary files a/uploads/Chaurawala.xlsx and /dev/null differ diff --git a/uploads/Chausana.xlsx b/uploads/Chausana.xlsx deleted file mode 100644 index 4b14afb..0000000 Binary files a/uploads/Chausana.xlsx and /dev/null differ diff --git a/uploads/Check Valve PN 10 DPCV dia 150 mm_Report.xlsx b/uploads/Check Valve PN 10 DPCV dia 150 mm_Report.xlsx deleted file mode 100644 index 2bfd079..0000000 Binary files a/uploads/Check Valve PN 10 DPCV dia 150 mm_Report.xlsx and /dev/null differ diff --git a/uploads/Chhacharpur.xlsx b/uploads/Chhacharpur.xlsx deleted file mode 100644 index d304b9b..0000000 Binary files a/uploads/Chhacharpur.xlsx and /dev/null differ diff --git a/uploads/Chhachhrauli Wazirabad-Muzaffarnagar.xlsx b/uploads/Chhachhrauli Wazirabad-Muzaffarnagar.xlsx deleted file mode 100644 index 835e08e..0000000 Binary files a/uploads/Chhachhrauli Wazirabad-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Chhachhrauli Wazirabad.xlsx b/uploads/Chhachhrauli Wazirabad.xlsx deleted file mode 100644 index cfdb446..0000000 Binary files a/uploads/Chhachhrauli Wazirabad.xlsx and /dev/null differ diff --git a/uploads/Chhamau.xlsx b/uploads/Chhamau.xlsx deleted file mode 100644 index fb73be9..0000000 Binary files a/uploads/Chhamau.xlsx and /dev/null differ diff --git a/uploads/Chhatela.xlsx b/uploads/Chhatela.xlsx deleted file mode 100644 index 7501222..0000000 Binary files a/uploads/Chhatela.xlsx and /dev/null differ diff --git a/uploads/Chokra.xlsx b/uploads/Chokra.xlsx deleted file mode 100644 index 66dd02d..0000000 Binary files a/uploads/Chokra.xlsx and /dev/null differ diff --git a/uploads/Construction of Interlocking pavement_Report.xlsx b/uploads/Construction of Interlocking pavement_Report.xlsx deleted file mode 100644 index 8203211..0000000 Binary files a/uploads/Construction of Interlocking pavement_Report.xlsx and /dev/null differ diff --git a/uploads/Construction of 13 m high and 115mm thic_Report.xlsx b/uploads/Construction of 13 m high and 115mm thic_Report.xlsx deleted file mode 100644 index add86dc..0000000 Binary files a/uploads/Construction of 13 m high and 115mm thic_Report.xlsx and /dev/null differ diff --git a/uploads/Dabal-Muzaffarnagar.xlsx b/uploads/Dabal-Muzaffarnagar.xlsx deleted file mode 100644 index 1cdc40c..0000000 Binary files a/uploads/Dabal-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Dabal.xlsx b/uploads/Dabal.xlsx deleted file mode 100644 index 410ef11..0000000 Binary files a/uploads/Dabal.xlsx and /dev/null differ diff --git a/uploads/Dabheri-Thanabhawan.xlsx b/uploads/Dabheri-Thanabhawan.xlsx deleted file mode 100644 index 3613777..0000000 Binary files a/uploads/Dabheri-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Dabheri.xlsx b/uploads/Dabheri.xlsx deleted file mode 100644 index 03cd839..0000000 Binary files a/uploads/Dabheri.xlsx and /dev/null differ diff --git a/uploads/Dabherikhurd-kairana.xlsx b/uploads/Dabherikhurd-kairana.xlsx deleted file mode 100644 index 0fa327e..0000000 Binary files a/uploads/Dabherikhurd-kairana.xlsx and /dev/null differ diff --git a/uploads/Dabherikhurd.xlsx b/uploads/Dabherikhurd.xlsx deleted file mode 100644 index 0fa327e..0000000 Binary files a/uploads/Dabherikhurd.xlsx and /dev/null differ diff --git a/uploads/Dakhori jamalpur-Thanabhawan.xlsx b/uploads/Dakhori jamalpur-Thanabhawan.xlsx deleted file mode 100644 index ab5dab0..0000000 Binary files a/uploads/Dakhori jamalpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Dakhori jamalpur.xlsx b/uploads/Dakhori jamalpur.xlsx deleted file mode 100644 index 9ee1a79..0000000 Binary files a/uploads/Dakhori jamalpur.xlsx and /dev/null differ diff --git a/uploads/Dargahpur.xlsx b/uploads/Dargahpur.xlsx deleted file mode 100644 index 0ba5c92..0000000 Binary files a/uploads/Dargahpur.xlsx and /dev/null differ diff --git a/uploads/Datiyana.xlsx b/uploads/Datiyana.xlsx deleted file mode 100644 index 8e3c2c1..0000000 Binary files a/uploads/Datiyana.xlsx and /dev/null differ diff --git a/uploads/Dehchand.xlsx b/uploads/Dehchand.xlsx deleted file mode 100644 index 4af5865..0000000 Binary files a/uploads/Dehchand.xlsx and /dev/null differ diff --git a/uploads/Dhanena-Shamli.xlsx b/uploads/Dhanena-Shamli.xlsx deleted file mode 100644 index d25e6e7..0000000 Binary files a/uploads/Dhanena-Shamli.xlsx and /dev/null differ diff --git a/uploads/Dhanena.xlsx b/uploads/Dhanena.xlsx deleted file mode 100644 index cba65fb..0000000 Binary files a/uploads/Dhanena.xlsx and /dev/null differ diff --git a/uploads/Dhatera.xlsx b/uploads/Dhatera.xlsx deleted file mode 100644 index a45e64d..0000000 Binary files a/uploads/Dhatera.xlsx and /dev/null differ diff --git a/uploads/Dhindali.xlsx b/uploads/Dhindali.xlsx deleted file mode 100644 index 5247ae6..0000000 Binary files a/uploads/Dhindali.xlsx and /dev/null differ diff --git a/uploads/Dokpura.xlsx b/uploads/Dokpura.xlsx deleted file mode 100644 index 69d6b55..0000000 Binary files a/uploads/Dokpura.xlsx and /dev/null differ diff --git a/uploads/Dudhar-kandhla.xlsx b/uploads/Dudhar-kandhla.xlsx deleted file mode 100644 index ccae029..0000000 Binary files a/uploads/Dudhar-kandhla.xlsx and /dev/null differ diff --git a/uploads/Dudhar.xlsx b/uploads/Dudhar.xlsx deleted file mode 100644 index ccae029..0000000 Binary files a/uploads/Dudhar.xlsx and /dev/null differ diff --git a/uploads/Dulhera-Muzaffarnagar.xlsx b/uploads/Dulhera-Muzaffarnagar.xlsx deleted file mode 100644 index a58a378..0000000 Binary files a/uploads/Dulhera-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Dulhera.xlsx b/uploads/Dulhera.xlsx deleted file mode 100644 index 67cabd8..0000000 Binary files a/uploads/Dulhera.xlsx and /dev/null differ diff --git a/uploads/Dullakheri.xlsx b/uploads/Dullakheri.xlsx deleted file mode 100644 index 7d035b3..0000000 Binary files a/uploads/Dullakheri.xlsx and /dev/null differ diff --git a/uploads/Erti-Kairana.xlsx b/uploads/Erti-Kairana.xlsx deleted file mode 100644 index ffe7932..0000000 Binary files a/uploads/Erti-Kairana.xlsx and /dev/null differ diff --git a/uploads/Erti.xlsx b/uploads/Erti.xlsx deleted file mode 100644 index ffe7932..0000000 Binary files a/uploads/Erti.xlsx and /dev/null differ diff --git a/uploads/Fahimpur Kalan.xlsx b/uploads/Fahimpur Kalan.xlsx deleted file mode 100644 index a73b740..0000000 Binary files a/uploads/Fahimpur Kalan.xlsx and /dev/null differ diff --git a/uploads/Foloda-Muzaffarnagar.xlsx b/uploads/Foloda-Muzaffarnagar.xlsx deleted file mode 100644 index 4947165..0000000 Binary files a/uploads/Foloda-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Foloda.xlsx b/uploads/Foloda.xlsx deleted file mode 100644 index d27f0ab..0000000 Binary files a/uploads/Foloda.xlsx and /dev/null differ diff --git a/uploads/Gadwara Rehmatpura-Muzaffarnagar.xlsx b/uploads/Gadwara Rehmatpura-Muzaffarnagar.xlsx deleted file mode 100644 index 2cf6460..0000000 Binary files a/uploads/Gadwara Rehmatpura-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Gadwara Rehmatpura.xlsx b/uploads/Gadwara Rehmatpura.xlsx deleted file mode 100644 index fd8c45d..0000000 Binary files a/uploads/Gadwara Rehmatpura.xlsx and /dev/null differ diff --git a/uploads/Gagour.xlsx b/uploads/Gagour.xlsx deleted file mode 100644 index 445f044..0000000 Binary files a/uploads/Gagour.xlsx and /dev/null differ diff --git a/uploads/Gandrav-kairana.xlsx b/uploads/Gandrav-kairana.xlsx deleted file mode 100644 index a2d091d..0000000 Binary files a/uploads/Gandrav-kairana.xlsx and /dev/null differ diff --git a/uploads/Gandrav.xlsx b/uploads/Gandrav.xlsx deleted file mode 100644 index a2d091d..0000000 Binary files a/uploads/Gandrav.xlsx and /dev/null differ diff --git a/uploads/Gangarampur.xlsx b/uploads/Gangarampur.xlsx deleted file mode 100644 index 3e7e6f5..0000000 Binary files a/uploads/Gangarampur.xlsx and /dev/null differ diff --git a/uploads/Gangdhari.xlsx b/uploads/Gangdhari.xlsx deleted file mode 100644 index bad3051..0000000 Binary files a/uploads/Gangdhari.xlsx and /dev/null differ diff --git a/uploads/Ghari Durganpur.xlsx b/uploads/Ghari Durganpur.xlsx deleted file mode 100644 index 91a576a..0000000 Binary files a/uploads/Ghari Durganpur.xlsx and /dev/null differ diff --git a/uploads/Ghari Hasanpur.xlsx b/uploads/Ghari Hasanpur.xlsx deleted file mode 100644 index 5c49b86..0000000 Binary files a/uploads/Ghari Hasanpur.xlsx and /dev/null differ diff --git a/uploads/Ghisukhera.xlsx b/uploads/Ghisukhera.xlsx deleted file mode 100644 index 9cc169a..0000000 Binary files a/uploads/Ghisukhera.xlsx and /dev/null differ diff --git a/uploads/Ghumavati-Muzaffarnagar.xlsx b/uploads/Ghumavati-Muzaffarnagar.xlsx deleted file mode 100644 index bc9b7ff..0000000 Binary files a/uploads/Ghumavati-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Ghumavati.xlsx b/uploads/Ghumavati.xlsx deleted file mode 100644 index 78e0bbf..0000000 Binary files a/uploads/Ghumavati.xlsx and /dev/null differ diff --git a/uploads/Godhna-Muzaffarnagar.xlsx b/uploads/Godhna-Muzaffarnagar.xlsx deleted file mode 100644 index 594ebc0..0000000 Binary files a/uploads/Godhna-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Godhna.xlsx b/uploads/Godhna.xlsx deleted file mode 100644 index bfdb943..0000000 Binary files a/uploads/Godhna.xlsx and /dev/null differ diff --git a/uploads/Gogwan-kairana.xlsx b/uploads/Gogwan-kairana.xlsx deleted file mode 100644 index 1c52f2b..0000000 Binary files a/uploads/Gogwan-kairana.xlsx and /dev/null differ diff --git a/uploads/Gogwan.xlsx b/uploads/Gogwan.xlsx deleted file mode 100644 index 1c52f2b..0000000 Binary files a/uploads/Gogwan.xlsx and /dev/null differ diff --git a/uploads/Goharni-Thanabhawan.xlsx b/uploads/Goharni-Thanabhawan.xlsx deleted file mode 100644 index bbc12d8..0000000 Binary files a/uploads/Goharni-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Goharni.xlsx b/uploads/Goharni.xlsx deleted file mode 100644 index a253294..0000000 Binary files a/uploads/Goharni.xlsx and /dev/null differ diff --git a/uploads/Goharpur-Shamli.xlsx b/uploads/Goharpur-Shamli.xlsx deleted file mode 100644 index 274df37..0000000 Binary files a/uploads/Goharpur-Shamli.xlsx and /dev/null differ diff --git a/uploads/Goharpur.xlsx b/uploads/Goharpur.xlsx deleted file mode 100644 index 188a224..0000000 Binary files a/uploads/Goharpur.xlsx and /dev/null differ diff --git a/uploads/Gujjarpur fatehpur-kandhla.xlsx b/uploads/Gujjarpur fatehpur-kandhla.xlsx deleted file mode 100644 index 89a1926..0000000 Binary files a/uploads/Gujjarpur fatehpur-kandhla.xlsx and /dev/null differ diff --git a/uploads/Gujjarpur fatehpur.xlsx b/uploads/Gujjarpur fatehpur.xlsx deleted file mode 100644 index 89a1926..0000000 Binary files a/uploads/Gujjarpur fatehpur.xlsx and /dev/null differ diff --git a/uploads/Gujjarpur.xlsx b/uploads/Gujjarpur.xlsx deleted file mode 100644 index 1727a54..0000000 Binary files a/uploads/Gujjarpur.xlsx and /dev/null differ diff --git a/uploads/Guniyazuddi.xlsx b/uploads/Guniyazuddi.xlsx deleted file mode 100644 index 0fb7a32..0000000 Binary files a/uploads/Guniyazuddi.xlsx and /dev/null differ diff --git a/uploads/Gurana-Thanabhawan.xlsx b/uploads/Gurana-Thanabhawan.xlsx deleted file mode 100644 index 6972bf3..0000000 Binary files a/uploads/Gurana-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Gurana.xlsx b/uploads/Gurana.xlsx deleted file mode 100644 index 028342b..0000000 Binary files a/uploads/Gurana.xlsx and /dev/null differ diff --git a/uploads/Gyanamazra.xlsx b/uploads/Gyanamazra.xlsx deleted file mode 100644 index d2cbde4..0000000 Binary files a/uploads/Gyanamazra.xlsx and /dev/null differ diff --git a/uploads/Haibatpur.xlsx b/uploads/Haibatpur.xlsx deleted file mode 100644 index a4d5d25..0000000 Binary files a/uploads/Haibatpur.xlsx and /dev/null differ diff --git a/uploads/Hansawala.xlsx b/uploads/Hansawala.xlsx deleted file mode 100644 index 4886171..0000000 Binary files a/uploads/Hansawala.xlsx and /dev/null differ diff --git a/uploads/Harenti Salempur-Muzaffarnagar.xlsx b/uploads/Harenti Salempur-Muzaffarnagar.xlsx deleted file mode 100644 index c5934cc..0000000 Binary files a/uploads/Harenti Salempur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Harenti Salempur.xlsx b/uploads/Harenti Salempur.xlsx deleted file mode 100644 index 3964f70..0000000 Binary files a/uploads/Harenti Salempur.xlsx and /dev/null differ diff --git a/uploads/Harshana.xlsx b/uploads/Harshana.xlsx deleted file mode 100644 index 82980eb..0000000 Binary files a/uploads/Harshana.xlsx and /dev/null differ diff --git a/uploads/Hasanpur.xlsx b/uploads/Hasanpur.xlsx deleted file mode 100644 index 5b9d689..0000000 Binary files a/uploads/Hasanpur.xlsx and /dev/null differ diff --git a/uploads/Hath Choya.xlsx b/uploads/Hath Choya.xlsx deleted file mode 100644 index b330eeb..0000000 Binary files a/uploads/Hath Choya.xlsx and /dev/null differ diff --git a/uploads/Hind-Thanabhawan.xlsx b/uploads/Hind-Thanabhawan.xlsx deleted file mode 100644 index 03fa073..0000000 Binary files a/uploads/Hind-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Hind.xlsx b/uploads/Hind.xlsx deleted file mode 100644 index 7cff620..0000000 Binary files a/uploads/Hind.xlsx and /dev/null differ diff --git a/uploads/Hurmazpur_shahpur-kandhla.xlsx b/uploads/Hurmazpur_shahpur-kandhla.xlsx deleted file mode 100644 index 025e045..0000000 Binary files a/uploads/Hurmazpur_shahpur-kandhla.xlsx and /dev/null differ diff --git a/uploads/Hurmazpur_shahpur.xlsx b/uploads/Hurmazpur_shahpur.xlsx deleted file mode 100644 index 025e045..0000000 Binary files a/uploads/Hurmazpur_shahpur.xlsx and /dev/null differ diff --git a/uploads/Islampur ghasuli-kandhla.xlsx b/uploads/Islampur ghasuli-kandhla.xlsx deleted file mode 100644 index b83cce6..0000000 Binary files a/uploads/Islampur ghasuli-kandhla.xlsx and /dev/null differ diff --git a/uploads/Islampur ghasuli.xlsx b/uploads/Islampur ghasuli.xlsx deleted file mode 100644 index b83cce6..0000000 Binary files a/uploads/Islampur ghasuli.xlsx and /dev/null differ diff --git a/uploads/Issopur teel-kandhla.xlsx b/uploads/Issopur teel-kandhla.xlsx deleted file mode 100644 index 697e92f..0000000 Binary files a/uploads/Issopur teel-kandhla.xlsx and /dev/null differ diff --git a/uploads/Issopur teel.xlsx b/uploads/Issopur teel.xlsx deleted file mode 100644 index 697e92f..0000000 Binary files a/uploads/Issopur teel.xlsx and /dev/null differ diff --git a/uploads/Jabardastpur URF Mantori.xlsx b/uploads/Jabardastpur URF Mantori.xlsx deleted file mode 100644 index 0d8e504..0000000 Binary files a/uploads/Jabardastpur URF Mantori.xlsx and /dev/null differ diff --git a/uploads/Jafarpur-Thanabhawan.xlsx b/uploads/Jafarpur-Thanabhawan.xlsx deleted file mode 100644 index 4d97ae3..0000000 Binary files a/uploads/Jafarpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Jafarpur.xlsx b/uploads/Jafarpur.xlsx deleted file mode 100644 index 6563d80..0000000 Binary files a/uploads/Jafarpur.xlsx and /dev/null differ diff --git a/uploads/Jahanpur-Kairana.xlsx b/uploads/Jahanpur-Kairana.xlsx deleted file mode 100644 index 10fd6da..0000000 Binary files a/uploads/Jahanpur-Kairana.xlsx and /dev/null differ diff --git a/uploads/Jaisala-Kandhla.xlsx b/uploads/Jaisala-Kandhla.xlsx deleted file mode 100644 index b1e806b..0000000 Binary files a/uploads/Jaisala-Kandhla.xlsx and /dev/null differ diff --git a/uploads/Jaitpur.xlsx b/uploads/Jaitpur.xlsx deleted file mode 100644 index 3225e3d..0000000 Binary files a/uploads/Jaitpur.xlsx and /dev/null differ diff --git a/uploads/Jalalbad rural-Thanabhawan.xlsx b/uploads/Jalalbad rural-Thanabhawan.xlsx deleted file mode 100644 index 2ea2d87..0000000 Binary files a/uploads/Jalalbad rural-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Jalalbad rural.xlsx b/uploads/Jalalbad rural.xlsx deleted file mode 100644 index 0452b71..0000000 Binary files a/uploads/Jalalbad rural.xlsx and /dev/null differ diff --git a/uploads/Jamalpur.xlsx b/uploads/Jamalpur.xlsx deleted file mode 100644 index 8edc3bf..0000000 Binary files a/uploads/Jamalpur.xlsx and /dev/null differ diff --git a/uploads/Jandheri Jatan.xlsx b/uploads/Jandheri Jatan.xlsx deleted file mode 100644 index 4a61263..0000000 Binary files a/uploads/Jandheri Jatan.xlsx and /dev/null differ diff --git a/uploads/Jandheri-Shamli.xlsx b/uploads/Jandheri-Shamli.xlsx deleted file mode 100644 index 9ec8b36..0000000 Binary files a/uploads/Jandheri-Shamli.xlsx and /dev/null differ diff --git a/uploads/Jandheri.xlsx b/uploads/Jandheri.xlsx deleted file mode 100644 index b3e2779..0000000 Binary files a/uploads/Jandheri.xlsx and /dev/null differ diff --git a/uploads/Jangheri-kairana.xlsx b/uploads/Jangheri-kairana.xlsx deleted file mode 100644 index f8441e0..0000000 Binary files a/uploads/Jangheri-kairana.xlsx and /dev/null differ diff --git a/uploads/Jangheri.xlsx b/uploads/Jangheri.xlsx deleted file mode 100644 index f8441e0..0000000 Binary files a/uploads/Jangheri.xlsx and /dev/null differ diff --git a/uploads/Janipur-Thanabhawan.xlsx b/uploads/Janipur-Thanabhawan.xlsx deleted file mode 100644 index 7ddadf3..0000000 Binary files a/uploads/Janipur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Janipur.xlsx b/uploads/Janipur.xlsx deleted file mode 100644 index 7e14f7c..0000000 Binary files a/uploads/Janipur.xlsx and /dev/null differ diff --git a/uploads/Jatmajhra.xlsx b/uploads/Jatmajhra.xlsx deleted file mode 100644 index 7a58b9e..0000000 Binary files a/uploads/Jatmajhra.xlsx and /dev/null differ diff --git a/uploads/Jatnagla.xlsx b/uploads/Jatnagla.xlsx deleted file mode 100644 index d41ceff..0000000 Binary files a/uploads/Jatnagla.xlsx and /dev/null differ diff --git a/uploads/Jeevanpuri.xlsx b/uploads/Jeevanpuri.xlsx deleted file mode 100644 index 8bae5c4..0000000 Binary files a/uploads/Jeevanpuri.xlsx and /dev/null differ diff --git a/uploads/Jharkheri-kairana.xlsx b/uploads/Jharkheri-kairana.xlsx deleted file mode 100644 index b87a756..0000000 Binary files a/uploads/Jharkheri-kairana.xlsx and /dev/null differ diff --git a/uploads/Jharkheri.xlsx b/uploads/Jharkheri.xlsx deleted file mode 100644 index b87a756..0000000 Binary files a/uploads/Jharkheri.xlsx and /dev/null differ diff --git a/uploads/Jijaula.xlsx b/uploads/Jijaula.xlsx deleted file mode 100644 index aa8c795..0000000 Binary files a/uploads/Jijaula.xlsx and /dev/null differ diff --git a/uploads/Johra.xlsx b/uploads/Johra.xlsx deleted file mode 100644 index c742044..0000000 Binary files a/uploads/Johra.xlsx and /dev/null differ diff --git a/uploads/Kabeerpur.xlsx b/uploads/Kabeerpur.xlsx deleted file mode 100644 index 967ba0e..0000000 Binary files a/uploads/Kabeerpur.xlsx and /dev/null differ diff --git a/uploads/Kacholi.xlsx b/uploads/Kacholi.xlsx deleted file mode 100644 index c5e7a58..0000000 Binary files a/uploads/Kacholi.xlsx and /dev/null differ diff --git a/uploads/Kadarapur-Thanabhawan.xlsx b/uploads/Kadarapur-Thanabhawan.xlsx deleted file mode 100644 index c4c2993..0000000 Binary files a/uploads/Kadarapur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Kadarapur.xlsx b/uploads/Kadarapur.xlsx deleted file mode 100644 index 788fb14..0000000 Binary files a/uploads/Kadarapur.xlsx and /dev/null differ diff --git a/uploads/Kadhli.xlsx b/uploads/Kadhli.xlsx deleted file mode 100644 index 6db17e7..0000000 Binary files a/uploads/Kadhli.xlsx and /dev/null differ diff --git a/uploads/Kailanpur Jalalpur-Muzaffarnagar.xlsx b/uploads/Kailanpur Jalalpur-Muzaffarnagar.xlsx deleted file mode 100644 index 0357c95..0000000 Binary files a/uploads/Kailanpur Jalalpur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Kailanpur Jalalpur.xlsx b/uploads/Kailanpur Jalalpur.xlsx deleted file mode 100644 index d3b1f43..0000000 Binary files a/uploads/Kailanpur Jalalpur.xlsx and /dev/null differ diff --git a/uploads/Kajipur thirwa-Thanabhawan.xlsx b/uploads/Kajipur thirwa-Thanabhawan.xlsx deleted file mode 100644 index 548bcc3..0000000 Binary files a/uploads/Kajipur thirwa-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Kajipur thirwa.xlsx b/uploads/Kajipur thirwa.xlsx deleted file mode 100644 index cf78a40..0000000 Binary files a/uploads/Kajipur thirwa.xlsx and /dev/null differ diff --git a/uploads/Kallarpur.xlsx b/uploads/Kallarpur.xlsx deleted file mode 100644 index a0e9dad..0000000 Binary files a/uploads/Kallarpur.xlsx and /dev/null differ diff --git a/uploads/Kamalpur.xlsx b/uploads/Kamalpur.xlsx deleted file mode 100644 index 127acea..0000000 Binary files a/uploads/Kamalpur.xlsx and /dev/null differ diff --git a/uploads/Kandhla Dehat-kandhla.xlsx b/uploads/Kandhla Dehat-kandhla.xlsx deleted file mode 100644 index 2e255cc..0000000 Binary files a/uploads/Kandhla Dehat-kandhla.xlsx and /dev/null differ diff --git a/uploads/Kandhla Dehat.xlsx b/uploads/Kandhla Dehat.xlsx deleted file mode 100644 index fcfb7a8..0000000 Binary files a/uploads/Kandhla Dehat.xlsx and /dev/null differ diff --git a/uploads/Kanjarheri-Shamli.xlsx b/uploads/Kanjarheri-Shamli.xlsx deleted file mode 100644 index 7c70b8b..0000000 Binary files a/uploads/Kanjarheri-Shamli.xlsx and /dev/null differ diff --git a/uploads/Kanjarheri.xlsx b/uploads/Kanjarheri.xlsx deleted file mode 100644 index 139532a..0000000 Binary files a/uploads/Kanjarheri.xlsx and /dev/null differ diff --git a/uploads/Karori Mehrampur-Shamli.xlsx b/uploads/Karori Mehrampur-Shamli.xlsx deleted file mode 100644 index e55240e..0000000 Binary files a/uploads/Karori Mehrampur-Shamli.xlsx and /dev/null differ diff --git a/uploads/Karori Mehrampur.xlsx b/uploads/Karori Mehrampur.xlsx deleted file mode 100644 index 994e950..0000000 Binary files a/uploads/Karori Mehrampur.xlsx and /dev/null differ diff --git a/uploads/Kasampur Bhoomma.xlsx b/uploads/Kasampur Bhoomma.xlsx deleted file mode 100644 index 9a3c900..0000000 Binary files a/uploads/Kasampur Bhoomma.xlsx and /dev/null differ diff --git a/uploads/Kasampur-Shamli.xlsx b/uploads/Kasampur-Shamli.xlsx deleted file mode 100644 index 1a5e2d8..0000000 Binary files a/uploads/Kasampur-Shamli.xlsx and /dev/null differ diff --git a/uploads/Kasampur.xlsx b/uploads/Kasampur.xlsx deleted file mode 100644 index 8d0cc27..0000000 Binary files a/uploads/Kasampur.xlsx and /dev/null differ diff --git a/uploads/Kasauli-Muzaffarnagar.xlsx b/uploads/Kasauli-Muzaffarnagar.xlsx deleted file mode 100644 index 5bac8c8..0000000 Binary files a/uploads/Kasauli-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Kasauli.xlsx b/uploads/Kasauli.xlsx deleted file mode 100644 index bf5d1bd..0000000 Binary files a/uploads/Kasauli.xlsx and /dev/null differ diff --git a/uploads/Kasiara.xlsx b/uploads/Kasiara.xlsx deleted file mode 100644 index b632d6b..0000000 Binary files a/uploads/Kasiara.xlsx and /dev/null differ diff --git a/uploads/Kasoli.xlsx b/uploads/Kasoli.xlsx deleted file mode 100644 index 45053a8..0000000 Binary files a/uploads/Kasoli.xlsx and /dev/null differ diff --git a/uploads/Kazipur urf Kadipur-Muzaffarnagar.xlsx b/uploads/Kazipur urf Kadipur-Muzaffarnagar.xlsx deleted file mode 100644 index 646bcfb..0000000 Binary files a/uploads/Kazipur urf Kadipur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Kazipur urf Kadipur.xlsx b/uploads/Kazipur urf Kadipur.xlsx deleted file mode 100644 index b16bda8..0000000 Binary files a/uploads/Kazipur urf Kadipur.xlsx and /dev/null differ diff --git a/uploads/Keka shikarpur-Thanabhawan.xlsx b/uploads/Keka shikarpur-Thanabhawan.xlsx deleted file mode 100644 index f170fc5..0000000 Binary files a/uploads/Keka shikarpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Keka shikarpur.xlsx b/uploads/Keka shikarpur.xlsx deleted file mode 100644 index a3345bb..0000000 Binary files a/uploads/Keka shikarpur.xlsx and /dev/null differ diff --git a/uploads/Kertu.xlsx b/uploads/Kertu.xlsx deleted file mode 100644 index 8daf0c4..0000000 Binary files a/uploads/Kertu.xlsx and /dev/null differ diff --git a/uploads/Keserwa kalan-kairana.xlsx b/uploads/Keserwa kalan-kairana.xlsx deleted file mode 100644 index 5e863d8..0000000 Binary files a/uploads/Keserwa kalan-kairana.xlsx and /dev/null differ diff --git a/uploads/Keserwa kalan.xlsx b/uploads/Keserwa kalan.xlsx deleted file mode 100644 index 5e863d8..0000000 Binary files a/uploads/Keserwa kalan.xlsx and /dev/null differ diff --git a/uploads/Keserwa khurd-kairana.xlsx b/uploads/Keserwa khurd-kairana.xlsx deleted file mode 100644 index d9d43cf..0000000 Binary files a/uploads/Keserwa khurd-kairana.xlsx and /dev/null differ diff --git a/uploads/Keserwa khurd.xlsx b/uploads/Keserwa khurd.xlsx deleted file mode 100644 index d9d43cf..0000000 Binary files a/uploads/Keserwa khurd.xlsx and /dev/null differ diff --git a/uploads/Khabbarpur-Muzaffarnagar.xlsx b/uploads/Khabbarpur-Muzaffarnagar.xlsx deleted file mode 100644 index 4eeba91..0000000 Binary files a/uploads/Khabbarpur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Khabbarpur.xlsx b/uploads/Khabbarpur.xlsx deleted file mode 100644 index 3134fd7..0000000 Binary files a/uploads/Khabbarpur.xlsx and /dev/null differ diff --git a/uploads/Khalwara.xlsx b/uploads/Khalwara.xlsx deleted file mode 100644 index 5944599..0000000 Binary files a/uploads/Khalwara.xlsx and /dev/null differ diff --git a/uploads/Khandrawali-kandhla.xlsx b/uploads/Khandrawali-kandhla.xlsx deleted file mode 100644 index 1ff6bb8..0000000 Binary files a/uploads/Khandrawali-kandhla.xlsx and /dev/null differ diff --git a/uploads/Khandrawali.xlsx b/uploads/Khandrawali.xlsx deleted file mode 100644 index a79f2f0..0000000 Binary files a/uploads/Khandrawali.xlsx and /dev/null differ diff --git a/uploads/Khanpur-Shamli.xlsx b/uploads/Khanpur-Shamli.xlsx deleted file mode 100644 index afb3578..0000000 Binary files a/uploads/Khanpur-Shamli.xlsx and /dev/null differ diff --git a/uploads/Khanpur-Thanabhawan.xlsx b/uploads/Khanpur-Thanabhawan.xlsx deleted file mode 100644 index 2a92d13..0000000 Binary files a/uploads/Khanpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Khera Bhau.xlsx b/uploads/Khera Bhau.xlsx deleted file mode 100644 index 1cecc27..0000000 Binary files a/uploads/Khera Bhau.xlsx and /dev/null differ diff --git a/uploads/Khera kurtan-kandhla.xlsx b/uploads/Khera kurtan-kandhla.xlsx deleted file mode 100644 index 121bd7d..0000000 Binary files a/uploads/Khera kurtan-kandhla.xlsx and /dev/null differ diff --git a/uploads/Khera kurtan.xlsx b/uploads/Khera kurtan.xlsx deleted file mode 100644 index 74ea6f6..0000000 Binary files a/uploads/Khera kurtan.xlsx and /dev/null differ diff --git a/uploads/Kheragadai-Thanabhawan.xlsx b/uploads/Kheragadai-Thanabhawan.xlsx deleted file mode 100644 index 1c9a630..0000000 Binary files a/uploads/Kheragadai-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Kheragadai.xlsx b/uploads/Kheragadai.xlsx deleted file mode 100644 index 420d8d8..0000000 Binary files a/uploads/Kheragadai.xlsx and /dev/null differ diff --git a/uploads/Kherapatti Bhikki Mazra-Shamli.xlsx b/uploads/Kherapatti Bhikki Mazra-Shamli.xlsx deleted file mode 100644 index c639947..0000000 Binary files a/uploads/Kherapatti Bhikki Mazra-Shamli.xlsx and /dev/null differ diff --git a/uploads/Kherapatti Bhikki Mazra.xlsx b/uploads/Kherapatti Bhikki Mazra.xlsx deleted file mode 100644 index 06ea40b..0000000 Binary files a/uploads/Kherapatti Bhikki Mazra.xlsx and /dev/null differ diff --git a/uploads/Kheri Bairangi - Unn.xlsx b/uploads/Kheri Bairangi - Unn.xlsx deleted file mode 100644 index 36cc10c..0000000 Binary files a/uploads/Kheri Bairangi - Unn.xlsx and /dev/null differ diff --git a/uploads/Kheri Khushnam.xlsx b/uploads/Kheri Khushnam.xlsx deleted file mode 100644 index db9252a..0000000 Binary files a/uploads/Kheri Khushnam.xlsx and /dev/null differ diff --git a/uploads/Kheriwiran.xlsx b/uploads/Kheriwiran.xlsx deleted file mode 100644 index bce8fc8..0000000 Binary files a/uploads/Kheriwiran.xlsx and /dev/null differ diff --git a/uploads/Kherki Hussainpur-Muzaffarnagar.xlsx b/uploads/Kherki Hussainpur-Muzaffarnagar.xlsx deleted file mode 100644 index 5ae7964..0000000 Binary files a/uploads/Kherki Hussainpur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Kherki Hussainpur.xlsx b/uploads/Kherki Hussainpur.xlsx deleted file mode 100644 index c800033..0000000 Binary files a/uploads/Kherki Hussainpur.xlsx and /dev/null differ diff --git a/uploads/Kherki.xlsx b/uploads/Kherki.xlsx deleted file mode 100644 index 2de5ebd..0000000 Binary files a/uploads/Kherki.xlsx and /dev/null differ diff --git a/uploads/Khiyavri-Thanabhawan.xlsx b/uploads/Khiyavri-Thanabhawan.xlsx deleted file mode 100644 index 543c23a..0000000 Binary files a/uploads/Khiyavri-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Khiyavri.xlsx b/uploads/Khiyavri.xlsx deleted file mode 100644 index a35996f..0000000 Binary files a/uploads/Khiyavri.xlsx and /dev/null differ diff --git a/uploads/Khokhni-Muzaffarnagar.xlsx b/uploads/Khokhni-Muzaffarnagar.xlsx deleted file mode 100644 index 7702dd9..0000000 Binary files a/uploads/Khokhni-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Khokhni.xlsx b/uploads/Khokhni.xlsx deleted file mode 100644 index b254c1d..0000000 Binary files a/uploads/Khokhni.xlsx and /dev/null differ diff --git a/uploads/Khorsama.xlsx b/uploads/Khorsama.xlsx deleted file mode 100644 index b107d25..0000000 Binary files a/uploads/Khorsama.xlsx and /dev/null differ diff --git a/uploads/Kutubpur-Muzaffarnagar.xlsx b/uploads/Kutubpur-Muzaffarnagar.xlsx deleted file mode 100644 index f18c6bc..0000000 Binary files a/uploads/Kutubpur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Kutubpur.xlsx b/uploads/Kutubpur.xlsx deleted file mode 100644 index 1359c36..0000000 Binary files a/uploads/Kutubpur.xlsx and /dev/null differ diff --git a/uploads/Lakhnoti-Muzaffarnagar.xlsx b/uploads/Lakhnoti-Muzaffarnagar.xlsx deleted file mode 100644 index 8f30e66..0000000 Binary files a/uploads/Lakhnoti-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Lakhnoti.xlsx b/uploads/Lakhnoti.xlsx deleted file mode 100644 index 978f010..0000000 Binary files a/uploads/Lakhnoti.xlsx and /dev/null differ diff --git a/uploads/Lawadaudpur.xlsx b/uploads/Lawadaudpur.xlsx deleted file mode 100644 index 2de1c1d..0000000 Binary files a/uploads/Lawadaudpur.xlsx and /dev/null differ diff --git a/uploads/Lohadda.xlsx b/uploads/Lohadda.xlsx deleted file mode 100644 index 537d88c..0000000 Binary files a/uploads/Lohadda.xlsx and /dev/null differ diff --git a/uploads/Loharipur-kandhla.xlsx b/uploads/Loharipur-kandhla.xlsx deleted file mode 100644 index de571c7..0000000 Binary files a/uploads/Loharipur-kandhla.xlsx and /dev/null differ diff --git a/uploads/Loharipur.xlsx b/uploads/Loharipur.xlsx deleted file mode 100644 index de571c7..0000000 Binary files a/uploads/Loharipur.xlsx and /dev/null differ diff --git a/uploads/MS fittings such as clamp bai_20260414_153851.xlsx b/uploads/MS fittings such as clamp bai_20260414_153851.xlsx deleted file mode 100644 index 44dd29b..0000000 Binary files a/uploads/MS fittings such as clamp bai_20260414_153851.xlsx and /dev/null differ diff --git a/uploads/MS fittings such as ring centre guide_Report.xlsx b/uploads/MS fittings such as ring centre guide_Report.xlsx deleted file mode 100644 index ee083ea..0000000 Binary files a/uploads/MS fittings such as ring centre guide_Report.xlsx and /dev/null differ diff --git a/uploads/Machrouli.xlsx b/uploads/Machrouli.xlsx deleted file mode 100644 index 0966b8c..0000000 Binary files a/uploads/Machrouli.xlsx and /dev/null differ diff --git a/uploads/Madalpur-Thanabhawan.xlsx b/uploads/Madalpur-Thanabhawan.xlsx deleted file mode 100644 index 8cff08f..0000000 Binary files a/uploads/Madalpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Madalpur.xlsx b/uploads/Madalpur.xlsx deleted file mode 100644 index 6a911e0..0000000 Binary files a/uploads/Madalpur.xlsx and /dev/null differ diff --git a/uploads/Madpur.xlsx b/uploads/Madpur.xlsx deleted file mode 100644 index e257c28..0000000 Binary files a/uploads/Madpur.xlsx and /dev/null differ diff --git a/uploads/Mahavatpur-Thanabhawan.xlsx b/uploads/Mahavatpur-Thanabhawan.xlsx deleted file mode 100644 index eedbcb0..0000000 Binary files a/uploads/Mahavatpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Mahavatpur.xlsx b/uploads/Mahavatpur.xlsx deleted file mode 100644 index 2d5bf49..0000000 Binary files a/uploads/Mahavatpur.xlsx and /dev/null differ diff --git a/uploads/Makkheri khadergarh-Thanabhawan.xlsx b/uploads/Makkheri khadergarh-Thanabhawan.xlsx deleted file mode 100644 index 9cd2010..0000000 Binary files a/uploads/Makkheri khadergarh-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Makkheri khadergarh.xlsx b/uploads/Makkheri khadergarh.xlsx deleted file mode 100644 index fe4d2ac..0000000 Binary files a/uploads/Makkheri khadergarh.xlsx and /dev/null differ diff --git a/uploads/Malakpur-kairana.xlsx b/uploads/Malakpur-kairana.xlsx deleted file mode 100644 index 59a70b0..0000000 Binary files a/uploads/Malakpur-kairana.xlsx and /dev/null differ diff --git a/uploads/Malakpur-kandhla.xlsx b/uploads/Malakpur-kandhla.xlsx deleted file mode 100644 index 74e8769..0000000 Binary files a/uploads/Malakpur-kandhla.xlsx and /dev/null differ diff --git a/uploads/Malakpur.xlsx b/uploads/Malakpur.xlsx deleted file mode 100644 index b8384f0..0000000 Binary files a/uploads/Malakpur.xlsx and /dev/null differ diff --git a/uploads/Malpura-Muzaffarnagar.xlsx b/uploads/Malpura-Muzaffarnagar.xlsx deleted file mode 100644 index 1a1a748..0000000 Binary files a/uploads/Malpura-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Malpura.xlsx b/uploads/Malpura.xlsx deleted file mode 100644 index 43e9ec2..0000000 Binary files a/uploads/Malpura.xlsx and /dev/null differ diff --git a/uploads/Mamour Non Aht-kairana.xlsx b/uploads/Mamour Non Aht-kairana.xlsx deleted file mode 100644 index 365aecb..0000000 Binary files a/uploads/Mamour Non Aht-kairana.xlsx and /dev/null differ diff --git a/uploads/Mamour Non Aht.xlsx b/uploads/Mamour Non Aht.xlsx deleted file mode 100644 index 365aecb..0000000 Binary files a/uploads/Mamour Non Aht.xlsx and /dev/null differ diff --git a/uploads/Manakpur-Thanabhawan.xlsx b/uploads/Manakpur-Thanabhawan.xlsx deleted file mode 100644 index d5c9fe1..0000000 Binary files a/uploads/Manakpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Manakpur.xlsx b/uploads/Manakpur.xlsx deleted file mode 100644 index 442961e..0000000 Binary files a/uploads/Manakpur.xlsx and /dev/null differ diff --git a/uploads/Manat manti-Thanabhawan.xlsx b/uploads/Manat manti-Thanabhawan.xlsx deleted file mode 100644 index 3df295b..0000000 Binary files a/uploads/Manat manti-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Manat manti.xlsx b/uploads/Manat manti.xlsx deleted file mode 100644 index 0b1ba43..0000000 Binary files a/uploads/Manat manti.xlsx and /dev/null differ diff --git a/uploads/Mandawar-kairana.xlsx b/uploads/Mandawar-kairana.xlsx deleted file mode 100644 index b4c474e..0000000 Binary files a/uploads/Mandawar-kairana.xlsx and /dev/null differ diff --git a/uploads/Mandawar.xlsx b/uploads/Mandawar.xlsx deleted file mode 100644 index b4c474e..0000000 Binary files a/uploads/Mandawar.xlsx and /dev/null differ diff --git a/uploads/Mandla-Muzaffarnagar.xlsx b/uploads/Mandla-Muzaffarnagar.xlsx deleted file mode 100644 index b536605..0000000 Binary files a/uploads/Mandla-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Mandla.xlsx b/uploads/Mandla.xlsx deleted file mode 100644 index d4159b4..0000000 Binary files a/uploads/Mandla.xlsx and /dev/null differ diff --git a/uploads/Manganpur.xlsx b/uploads/Manganpur.xlsx deleted file mode 100644 index 6b4f623..0000000 Binary files a/uploads/Manganpur.xlsx and /dev/null differ diff --git a/uploads/Manna mazara-kairana.xlsx b/uploads/Manna mazara-kairana.xlsx deleted file mode 100644 index 83a214f..0000000 Binary files a/uploads/Manna mazara-kairana.xlsx and /dev/null differ diff --git a/uploads/Manna mazara.xlsx b/uploads/Manna mazara.xlsx deleted file mode 100644 index 83a214f..0000000 Binary files a/uploads/Manna mazara.xlsx and /dev/null differ diff --git a/uploads/Mansura.xlsx b/uploads/Mansura.xlsx deleted file mode 100644 index 903f82c..0000000 Binary files a/uploads/Mansura.xlsx and /dev/null differ diff --git a/uploads/Marhkarimpur.xlsx b/uploads/Marhkarimpur.xlsx deleted file mode 100644 index b90010b..0000000 Binary files a/uploads/Marhkarimpur.xlsx and /dev/null differ diff --git a/uploads/Mawi ahatmal-kairana.xlsx b/uploads/Mawi ahatmal-kairana.xlsx deleted file mode 100644 index d191745..0000000 Binary files a/uploads/Mawi ahatmal-kairana.xlsx and /dev/null differ diff --git a/uploads/Mawi ahatmal.xlsx b/uploads/Mawi ahatmal.xlsx deleted file mode 100644 index d191745..0000000 Binary files a/uploads/Mawi ahatmal.xlsx and /dev/null differ diff --git a/uploads/Mawi non aht-kairana.xlsx b/uploads/Mawi non aht-kairana.xlsx deleted file mode 100644 index 6befcf8..0000000 Binary files a/uploads/Mawi non aht-kairana.xlsx and /dev/null differ diff --git a/uploads/Mawi non aht.xlsx b/uploads/Mawi non aht.xlsx deleted file mode 100644 index 6befcf8..0000000 Binary files a/uploads/Mawi non aht.xlsx and /dev/null differ diff --git a/uploads/Meghakheri.xlsx b/uploads/Meghakheri.xlsx deleted file mode 100644 index 9d935e3..0000000 Binary files a/uploads/Meghakheri.xlsx and /dev/null differ diff --git a/uploads/Mehraipur-Muzaffarnagar.xlsx b/uploads/Mehraipur-Muzaffarnagar.xlsx deleted file mode 100644 index 3f41a5f..0000000 Binary files a/uploads/Mehraipur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Mehraipur.xlsx b/uploads/Mehraipur.xlsx deleted file mode 100644 index 825855a..0000000 Binary files a/uploads/Mehraipur.xlsx and /dev/null differ diff --git a/uploads/Mimla talab-kandhla.xlsx b/uploads/Mimla talab-kandhla.xlsx deleted file mode 100644 index fe0b4c0..0000000 Binary files a/uploads/Mimla talab-kandhla.xlsx and /dev/null differ diff --git a/uploads/Mimla talab.xlsx b/uploads/Mimla talab.xlsx deleted file mode 100644 index a7c0ded..0000000 Binary files a/uploads/Mimla talab.xlsx and /dev/null differ diff --git a/uploads/Miyan Kasaba.xlsx b/uploads/Miyan Kasaba.xlsx deleted file mode 100644 index 1e73c86..0000000 Binary files a/uploads/Miyan Kasaba.xlsx and /dev/null differ diff --git a/uploads/Mohammadpur Rai-kairana.xlsx b/uploads/Mohammadpur Rai-kairana.xlsx deleted file mode 100644 index bb0610f..0000000 Binary files a/uploads/Mohammadpur Rai-kairana.xlsx and /dev/null differ diff --git a/uploads/Mohammadpur Rai.xlsx b/uploads/Mohammadpur Rai.xlsx deleted file mode 100644 index bb0610f..0000000 Binary files a/uploads/Mohammadpur Rai.xlsx and /dev/null differ diff --git a/uploads/Mohbalipur.xlsx b/uploads/Mohbalipur.xlsx deleted file mode 100644 index 5eedf1e..0000000 Binary files a/uploads/Mohbalipur.xlsx and /dev/null differ diff --git a/uploads/Molaheri.xlsx b/uploads/Molaheri.xlsx deleted file mode 100644 index c8d9c52..0000000 Binary files a/uploads/Molaheri.xlsx and /dev/null differ diff --git a/uploads/Morkukka-Muzaffarnagar.xlsx b/uploads/Morkukka-Muzaffarnagar.xlsx deleted file mode 100644 index e2cf741..0000000 Binary files a/uploads/Morkukka-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Morkukka.xlsx b/uploads/Morkukka.xlsx deleted file mode 100644 index d1fed8b..0000000 Binary files a/uploads/Morkukka.xlsx and /dev/null differ diff --git a/uploads/Mubarikpur-Muzaffarnagr.xlsx b/uploads/Mubarikpur-Muzaffarnagr.xlsx deleted file mode 100644 index e549d13..0000000 Binary files a/uploads/Mubarikpur-Muzaffarnagr.xlsx and /dev/null differ diff --git a/uploads/Mubarikpur.xlsx b/uploads/Mubarikpur.xlsx deleted file mode 100644 index f4ceec7..0000000 Binary files a/uploads/Mubarikpur.xlsx and /dev/null differ diff --git a/uploads/Mujahidpur.xlsx b/uploads/Mujahidpur.xlsx deleted file mode 100644 index aec7afa..0000000 Binary files a/uploads/Mujahidpur.xlsx and /dev/null differ diff --git a/uploads/Mullapur-Thanabhawan.xlsx b/uploads/Mullapur-Thanabhawan.xlsx deleted file mode 100644 index 956dd2e..0000000 Binary files a/uploads/Mullapur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Mullapur.xlsx b/uploads/Mullapur.xlsx deleted file mode 100644 index 56be767..0000000 Binary files a/uploads/Mullapur.xlsx and /dev/null differ diff --git a/uploads/Mundet Kalan-kairana.xlsx b/uploads/Mundet Kalan-kairana.xlsx deleted file mode 100644 index 0521067..0000000 Binary files a/uploads/Mundet Kalan-kairana.xlsx and /dev/null differ diff --git a/uploads/Mundet Kalan.xlsx b/uploads/Mundet Kalan.xlsx deleted file mode 100644 index 0521067..0000000 Binary files a/uploads/Mundet Kalan.xlsx and /dev/null differ diff --git a/uploads/Mundet Khadar.xlsx b/uploads/Mundet Khadar.xlsx deleted file mode 100644 index 8d135a6..0000000 Binary files a/uploads/Mundet Khadar.xlsx and /dev/null differ diff --git a/uploads/Musfabad.xlsx b/uploads/Musfabad.xlsx deleted file mode 100644 index 0b31c85..0000000 Binary files a/uploads/Musfabad.xlsx and /dev/null differ diff --git a/uploads/Muthra.xlsx b/uploads/Muthra.xlsx deleted file mode 100644 index b4ddd24..0000000 Binary files a/uploads/Muthra.xlsx and /dev/null differ diff --git a/uploads/Nagal ismailpur-Thanabhawan.xlsx b/uploads/Nagal ismailpur-Thanabhawan.xlsx deleted file mode 100644 index cf610bb..0000000 Binary files a/uploads/Nagal ismailpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Nagal ismailpur.xlsx b/uploads/Nagal ismailpur.xlsx deleted file mode 100644 index 955d8fc..0000000 Binary files a/uploads/Nagal ismailpur.xlsx and /dev/null differ diff --git a/uploads/Nagla Kabeer.xlsx b/uploads/Nagla Kabeer.xlsx deleted file mode 100644 index 16b88b6..0000000 Binary files a/uploads/Nagla Kabeer.xlsx and /dev/null differ diff --git a/uploads/Nagla Mubari.xlsx b/uploads/Nagla Mubari.xlsx deleted file mode 100644 index e284fcb..0000000 Binary files a/uploads/Nagla Mubari.xlsx and /dev/null differ diff --git a/uploads/Nagla Rai-kairana.xlsx b/uploads/Nagla Rai-kairana.xlsx deleted file mode 100644 index 1660c60..0000000 Binary files a/uploads/Nagla Rai-kairana.xlsx and /dev/null differ diff --git a/uploads/Nagla Rai.xlsx b/uploads/Nagla Rai.xlsx deleted file mode 100644 index 54be870..0000000 Binary files a/uploads/Nagla Rai.xlsx and /dev/null differ diff --git a/uploads/Nagli Mahasingh.xlsx b/uploads/Nagli Mahasingh.xlsx deleted file mode 100644 index db786cd..0000000 Binary files a/uploads/Nagli Mahasingh.xlsx and /dev/null differ diff --git a/uploads/Nai Nagla Naveen.xlsx b/uploads/Nai Nagla Naveen.xlsx deleted file mode 100644 index a6ade39..0000000 Binary files a/uploads/Nai Nagla Naveen.xlsx and /dev/null differ diff --git a/uploads/Nai nagla Sakauti.xlsx b/uploads/Nai nagla Sakauti.xlsx deleted file mode 100644 index 9ada803..0000000 Binary files a/uploads/Nai nagla Sakauti.xlsx and /dev/null differ diff --git a/uploads/Nanhera-Muzaffarnagar.xlsx b/uploads/Nanhera-Muzaffarnagar.xlsx deleted file mode 100644 index 6204ce6..0000000 Binary files a/uploads/Nanhera-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Nanhera.xlsx b/uploads/Nanhera.xlsx deleted file mode 100644 index 932b571..0000000 Binary files a/uploads/Nanhera.xlsx and /dev/null differ diff --git a/uploads/Nanheri-Muzaffarnagar.xlsx b/uploads/Nanheri-Muzaffarnagar.xlsx deleted file mode 100644 index 41472b8..0000000 Binary files a/uploads/Nanheri-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Nanheri.xlsx b/uploads/Nanheri.xlsx deleted file mode 100644 index e5ea3f5..0000000 Binary files a/uploads/Nanheri.xlsx and /dev/null differ diff --git a/uploads/Nasirpur.xlsx b/uploads/Nasirpur.xlsx deleted file mode 100644 index 874af4c..0000000 Binary files a/uploads/Nasirpur.xlsx and /dev/null differ diff --git a/uploads/Nauna & Moghpur.xlsx b/uploads/Nauna & Moghpur.xlsx deleted file mode 100644 index 36f733f..0000000 Binary files a/uploads/Nauna & Moghpur.xlsx and /dev/null differ diff --git a/uploads/Naunagli Chonda Heri.xlsx b/uploads/Naunagli Chonda Heri.xlsx deleted file mode 100644 index 20bbac5..0000000 Binary files a/uploads/Naunagli Chonda Heri.xlsx and /dev/null differ diff --git a/uploads/Nirdhana.xlsx b/uploads/Nirdhana.xlsx deleted file mode 100644 index 7c6f25a..0000000 Binary files a/uploads/Nirdhana.xlsx and /dev/null differ diff --git a/uploads/Nirgajni-Muzaffarnagar.xlsx b/uploads/Nirgajni-Muzaffarnagar.xlsx deleted file mode 100644 index ed06a10..0000000 Binary files a/uploads/Nirgajni-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Nirgajni.xlsx b/uploads/Nirgajni.xlsx deleted file mode 100644 index d67651d..0000000 Binary files a/uploads/Nirgajni.xlsx and /dev/null differ diff --git a/uploads/Nojal-najal-Thanabhawan.xlsx b/uploads/Nojal-najal-Thanabhawan.xlsx deleted file mode 100644 index d99d7c4..0000000 Binary files a/uploads/Nojal-najal-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Nojal-najal.xlsx b/uploads/Nojal-najal.xlsx deleted file mode 100644 index 10e491a..0000000 Binary files a/uploads/Nojal-najal.xlsx and /dev/null differ diff --git a/uploads/Noornagar-Muzaffarnagar.xlsx b/uploads/Noornagar-Muzaffarnagar.xlsx deleted file mode 100644 index 91b0ffb..0000000 Binary files a/uploads/Noornagar-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Noornagar.xlsx b/uploads/Noornagar.xlsx deleted file mode 100644 index fb3b994..0000000 Binary files a/uploads/Noornagar.xlsx and /dev/null differ diff --git a/uploads/Nyamu.xlsx b/uploads/Nyamu.xlsx deleted file mode 100644 index a2e67be..0000000 Binary files a/uploads/Nyamu.xlsx and /dev/null differ diff --git a/uploads/Odri Fatehpur.xlsx b/uploads/Odri Fatehpur.xlsx deleted file mode 100644 index cc15ffb..0000000 Binary files a/uploads/Odri Fatehpur.xlsx and /dev/null differ diff --git a/uploads/PCHENDRA Kalan.xlsx b/uploads/PCHENDRA Kalan.xlsx deleted file mode 100644 index 5866bc3..0000000 Binary files a/uploads/PCHENDRA Kalan.xlsx and /dev/null differ diff --git a/uploads/Pal.xlsx b/uploads/Pal.xlsx deleted file mode 100644 index 3b685fc..0000000 Binary files a/uploads/Pal.xlsx and /dev/null differ diff --git a/uploads/Palda-Muzaffarnagar.xlsx b/uploads/Palda-Muzaffarnagar.xlsx deleted file mode 100644 index 464f226..0000000 Binary files a/uploads/Palda-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Palda.xlsx b/uploads/Palda.xlsx deleted file mode 100644 index afbc1ad..0000000 Binary files a/uploads/Palda.xlsx and /dev/null differ diff --git a/uploads/Palekha-Unn.xlsx b/uploads/Palekha-Unn.xlsx deleted file mode 100644 index cf0a42c..0000000 Binary files a/uploads/Palekha-Unn.xlsx and /dev/null differ diff --git a/uploads/Palekha.xlsx b/uploads/Palekha.xlsx deleted file mode 100644 index f5b1f4e..0000000 Binary files a/uploads/Palekha.xlsx and /dev/null differ diff --git a/uploads/Panjokhera-kandhla.xlsx b/uploads/Panjokhera-kandhla.xlsx deleted file mode 100644 index f4f5f20..0000000 Binary files a/uploads/Panjokhera-kandhla.xlsx and /dev/null differ diff --git a/uploads/Panjokhera.xlsx b/uploads/Panjokhera.xlsx deleted file mode 100644 index e553c7a..0000000 Binary files a/uploads/Panjokhera.xlsx and /dev/null differ diff --git a/uploads/Panthupura-Unn.xlsx b/uploads/Panthupura-Unn.xlsx deleted file mode 100644 index 3a01d57..0000000 Binary files a/uploads/Panthupura-Unn.xlsx and /dev/null differ diff --git a/uploads/Panthupura.xlsx b/uploads/Panthupura.xlsx deleted file mode 100644 index e968a39..0000000 Binary files a/uploads/Panthupura.xlsx and /dev/null differ diff --git a/uploads/Parai.xlsx b/uploads/Parai.xlsx deleted file mode 100644 index df058c5..0000000 Binary files a/uploads/Parai.xlsx and /dev/null differ diff --git a/uploads/Patni Pratapur.xlsx b/uploads/Patni Pratapur.xlsx deleted file mode 100644 index 19a70a4..0000000 Binary files a/uploads/Patni Pratapur.xlsx and /dev/null differ diff --git a/uploads/Pawti Khurd.xlsx b/uploads/Pawti Khurd.xlsx deleted file mode 100644 index f251fca..0000000 Binary files a/uploads/Pawti Khurd.xlsx and /dev/null differ diff --git a/uploads/Peer Khera.xlsx b/uploads/Peer Khera.xlsx deleted file mode 100644 index 69efb91..0000000 Binary files a/uploads/Peer Khera.xlsx and /dev/null differ diff --git a/uploads/Phulat.xlsx b/uploads/Phulat.xlsx deleted file mode 100644 index 3343aed..0000000 Binary files a/uploads/Phulat.xlsx and /dev/null differ diff --git a/uploads/Platheri-Thanabhawan.xlsx b/uploads/Platheri-Thanabhawan.xlsx deleted file mode 100644 index 2c05aac..0000000 Binary files a/uploads/Platheri-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Platheri.xlsx b/uploads/Platheri.xlsx deleted file mode 100644 index 4db8c0f..0000000 Binary files a/uploads/Platheri.xlsx and /dev/null differ diff --git a/uploads/Potikalan-kairana.xlsx b/uploads/Potikalan-kairana.xlsx deleted file mode 100644 index 982861f..0000000 Binary files a/uploads/Potikalan-kairana.xlsx and /dev/null differ diff --git a/uploads/Potikalan.xlsx b/uploads/Potikalan.xlsx deleted file mode 100644 index 982861f..0000000 Binary files a/uploads/Potikalan.xlsx and /dev/null differ diff --git a/uploads/Provide all materials labour TP etc comp_Report.xlsx b/uploads/Provide all materials labour TP etc comp_Report.xlsx deleted file mode 100644 index 8cdad35..0000000 Binary files a/uploads/Provide all materials labour TP etc comp_Report.xlsx and /dev/null differ diff --git a/uploads/Provide all materials labour T_20260414_142101.xlsx b/uploads/Provide all materials labour T_20260414_142101.xlsx deleted file mode 100644 index e690e6d..0000000 Binary files a/uploads/Provide all materials labour T_20260414_142101.xlsx and /dev/null differ diff --git a/uploads/Purmafi.xlsx b/uploads/Purmafi.xlsx deleted file mode 100644 index d0ce628..0000000 Binary files a/uploads/Purmafi.xlsx and /dev/null differ diff --git a/uploads/Raee.xlsx b/uploads/Raee.xlsx deleted file mode 100644 index 06e4816..0000000 Binary files a/uploads/Raee.xlsx and /dev/null differ diff --git a/uploads/Raipur Nagli.xlsx b/uploads/Raipur Nagli.xlsx deleted file mode 100644 index 0d372d1..0000000 Binary files a/uploads/Raipur Nagli.xlsx and /dev/null differ diff --git a/uploads/Rajak Nagar.xlsx b/uploads/Rajak Nagar.xlsx deleted file mode 100644 index 47757ca..0000000 Binary files a/uploads/Rajak Nagar.xlsx and /dev/null differ diff --git a/uploads/Rajhar.xlsx b/uploads/Rajhar.xlsx deleted file mode 100644 index b1b531e..0000000 Binary files a/uploads/Rajhar.xlsx and /dev/null differ diff --git a/uploads/Rampur khedi-kandhla.xlsx b/uploads/Rampur khedi-kandhla.xlsx deleted file mode 100644 index ab4ee4b..0000000 Binary files a/uploads/Rampur khedi-kandhla.xlsx and /dev/null differ diff --git a/uploads/Rampur khedi.xlsx b/uploads/Rampur khedi.xlsx deleted file mode 100644 index f5e1b20..0000000 Binary files a/uploads/Rampur khedi.xlsx and /dev/null differ diff --git a/uploads/Rampur.xlsx b/uploads/Rampur.xlsx deleted file mode 100644 index cf8d9aa..0000000 Binary files a/uploads/Rampur.xlsx and /dev/null differ diff --git a/uploads/Ramra-kairana.xlsx b/uploads/Ramra-kairana.xlsx deleted file mode 100644 index 0a1bcfb..0000000 Binary files a/uploads/Ramra-kairana.xlsx and /dev/null differ diff --git a/uploads/Ramra.xlsx b/uploads/Ramra.xlsx deleted file mode 100644 index 0a1bcfb..0000000 Binary files a/uploads/Ramra.xlsx and /dev/null differ diff --git a/uploads/Randawali Jhabarpur-Muzaffarnagar.xlsx b/uploads/Randawali Jhabarpur-Muzaffarnagar.xlsx deleted file mode 100644 index 80746fe..0000000 Binary files a/uploads/Randawali Jhabarpur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Randawali Jhabarpur.xlsx b/uploads/Randawali Jhabarpur.xlsx deleted file mode 100644 index c8c3c85..0000000 Binary files a/uploads/Randawali Jhabarpur.xlsx and /dev/null differ diff --git a/uploads/Rangana.xlsx b/uploads/Rangana.xlsx deleted file mode 100644 index 294d930..0000000 Binary files a/uploads/Rangana.xlsx and /dev/null differ diff --git a/uploads/Rasoolpur gujran-kandhla.xlsx b/uploads/Rasoolpur gujran-kandhla.xlsx deleted file mode 100644 index e0650aa..0000000 Binary files a/uploads/Rasoolpur gujran-kandhla.xlsx and /dev/null differ diff --git a/uploads/Rasoolpur gujran.xlsx b/uploads/Rasoolpur gujran.xlsx deleted file mode 100644 index adffaa0..0000000 Binary files a/uploads/Rasoolpur gujran.xlsx and /dev/null differ diff --git a/uploads/Rasulpur Kailaura.xlsx b/uploads/Rasulpur Kailaura.xlsx deleted file mode 100644 index f143d5b..0000000 Binary files a/uploads/Rasulpur Kailaura.xlsx and /dev/null differ diff --git a/uploads/Rasulpur.xlsx b/uploads/Rasulpur.xlsx deleted file mode 100644 index f2513f5..0000000 Binary files a/uploads/Rasulpur.xlsx and /dev/null differ diff --git a/uploads/Ratanpuri.xlsx b/uploads/Ratanpuri.xlsx deleted file mode 100644 index 1c7fdd7..0000000 Binary files a/uploads/Ratanpuri.xlsx and /dev/null differ diff --git a/uploads/Rataundh.xlsx b/uploads/Rataundh.xlsx deleted file mode 100644 index 07c4156..0000000 Binary files a/uploads/Rataundh.xlsx and /dev/null differ diff --git a/uploads/Retanagla-Muzaffarnagar.xlsx b/uploads/Retanagla-Muzaffarnagar.xlsx deleted file mode 100644 index f3df509..0000000 Binary files a/uploads/Retanagla-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Retanagla.xlsx b/uploads/Retanagla.xlsx deleted file mode 100644 index 9f6259f..0000000 Binary files a/uploads/Retanagla.xlsx and /dev/null differ diff --git a/uploads/Rohana Kalan.xlsx b/uploads/Rohana Kalan.xlsx deleted file mode 100644 index 2ccafb8..0000000 Binary files a/uploads/Rohana Kalan.xlsx and /dev/null differ diff --git a/uploads/SITC of Solar power plant for _20260414_123549.xlsx b/uploads/SITC of Solar power plant for _20260414_123549.xlsx deleted file mode 100644 index 99dafcc..0000000 Binary files a/uploads/SITC of Solar power plant for _20260414_123549.xlsx and /dev/null differ diff --git a/uploads/SITC of Solar power plant for complete plant including solar pannel Structure invertor etc complete inall respect with required material TP labour_Report.xlsx b/uploads/SITC of Solar power plant for complete plant including solar pannel Structure invertor etc complete inall respect with required material TP labour_Report.xlsx deleted file mode 100644 index 1908608..0000000 Binary files a/uploads/SITC of Solar power plant for complete plant including solar pannel Structure invertor etc complete inall respect with required material TP labour_Report.xlsx and /dev/null differ diff --git a/uploads/SITC solar_Report.xlsx b/uploads/SITC solar_Report.xlsx deleted file mode 100644 index 6ac20a7..0000000 Binary files a/uploads/SITC solar_Report.xlsx and /dev/null differ diff --git a/uploads/Sadpur.xlsx b/uploads/Sadpur.xlsx deleted file mode 100644 index 95e2caa..0000000 Binary files a/uploads/Sadpur.xlsx and /dev/null differ diff --git a/uploads/Sahpat non ahatml-kairana.xlsx b/uploads/Sahpat non ahatml-kairana.xlsx deleted file mode 100644 index d7e5855..0000000 Binary files a/uploads/Sahpat non ahatml-kairana.xlsx and /dev/null differ diff --git a/uploads/Sahpat non ahatml.xlsx b/uploads/Sahpat non ahatml.xlsx deleted file mode 100644 index d7e5855..0000000 Binary files a/uploads/Sahpat non ahatml.xlsx and /dev/null differ diff --git a/uploads/Saidipur Raju.xlsx b/uploads/Saidipur Raju.xlsx deleted file mode 100644 index 1d0db18..0000000 Binary files a/uploads/Saidipur Raju.xlsx and /dev/null differ diff --git a/uploads/Saidpur.xlsx b/uploads/Saidpur.xlsx deleted file mode 100644 index 175a634..0000000 Binary files a/uploads/Saidpur.xlsx and /dev/null differ diff --git a/uploads/Saihata-Shamli.xlsx b/uploads/Saihata-Shamli.xlsx deleted file mode 100644 index a547163..0000000 Binary files a/uploads/Saihata-Shamli.xlsx and /dev/null differ diff --git a/uploads/Saihata.xlsx b/uploads/Saihata.xlsx deleted file mode 100644 index 2c84357..0000000 Binary files a/uploads/Saihata.xlsx and /dev/null differ diff --git a/uploads/Sakuti.xlsx b/uploads/Sakuti.xlsx deleted file mode 100644 index 5842bbb..0000000 Binary files a/uploads/Sakuti.xlsx and /dev/null differ diff --git a/uploads/Salazuddi.xlsx b/uploads/Salazuddi.xlsx deleted file mode 100644 index abed3e6..0000000 Binary files a/uploads/Salazuddi.xlsx and /dev/null differ diff --git a/uploads/Samauli.xlsx b/uploads/Samauli.xlsx deleted file mode 100644 index 6c868ef..0000000 Binary files a/uploads/Samauli.xlsx and /dev/null differ diff --git a/uploads/Sandhawli.xlsx b/uploads/Sandhawli.xlsx deleted file mode 100644 index cb53ba0..0000000 Binary files a/uploads/Sandhawli.xlsx and /dev/null differ diff --git a/uploads/Sanpala.xlsx b/uploads/Sanpala.xlsx deleted file mode 100644 index 50a4ee9..0000000 Binary files a/uploads/Sanpala.xlsx and /dev/null differ diff --git a/uploads/Sardhan.xlsx b/uploads/Sardhan.xlsx deleted file mode 100644 index f627beb..0000000 Binary files a/uploads/Sardhan.xlsx and /dev/null differ diff --git a/uploads/Seemli.xlsx b/uploads/Seemli.xlsx deleted file mode 100644 index 2555af2..0000000 Binary files a/uploads/Seemli.xlsx and /dev/null differ diff --git a/uploads/Shahbazpur Tigai.xlsx b/uploads/Shahbazpur Tigai.xlsx deleted file mode 100644 index 891a7a6..0000000 Binary files a/uploads/Shahbazpur Tigai.xlsx and /dev/null differ diff --git a/uploads/Shahpur.xlsx b/uploads/Shahpur.xlsx deleted file mode 100644 index 1e1e44c..0000000 Binary files a/uploads/Shahpur.xlsx and /dev/null differ diff --git a/uploads/Shakkarpur-Muzaffarnagar.xlsx b/uploads/Shakkarpur-Muzaffarnagar.xlsx deleted file mode 100644 index 822ddab..0000000 Binary files a/uploads/Shakkarpur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Shakkarpur.xlsx b/uploads/Shakkarpur.xlsx deleted file mode 100644 index 517a868..0000000 Binary files a/uploads/Shakkarpur.xlsx and /dev/null differ diff --git a/uploads/Sherpur-Muzaffarnagar.xlsx b/uploads/Sherpur-Muzaffarnagar.xlsx deleted file mode 100644 index 3e70d5f..0000000 Binary files a/uploads/Sherpur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Sherpur.xlsx b/uploads/Sherpur.xlsx deleted file mode 100644 index b8dbe9e..0000000 Binary files a/uploads/Sherpur.xlsx and /dev/null differ diff --git a/uploads/Sikandarpur.xlsx b/uploads/Sikandarpur.xlsx deleted file mode 100644 index fcc6742..0000000 Binary files a/uploads/Sikandarpur.xlsx and /dev/null differ diff --git a/uploads/Sikanderpur Kalan.xlsx b/uploads/Sikanderpur Kalan.xlsx deleted file mode 100644 index 6380f10..0000000 Binary files a/uploads/Sikanderpur Kalan.xlsx and /dev/null differ diff --git a/uploads/Sikhreda Jamalpur.xlsx b/uploads/Sikhreda Jamalpur.xlsx deleted file mode 100644 index 37cd3c9..0000000 Binary files a/uploads/Sikhreda Jamalpur.xlsx and /dev/null differ diff --git a/uploads/Sikhreda.xlsx b/uploads/Sikhreda.xlsx deleted file mode 100644 index 2639864..0000000 Binary files a/uploads/Sikhreda.xlsx and /dev/null differ diff --git a/uploads/Simarthi-Muzaffarnagar.xlsx b/uploads/Simarthi-Muzaffarnagar.xlsx deleted file mode 100644 index bc71492..0000000 Binary files a/uploads/Simarthi-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Simarthi.xlsx b/uploads/Simarthi.xlsx deleted file mode 100644 index f2bd311..0000000 Binary files a/uploads/Simarthi.xlsx and /dev/null differ diff --git a/uploads/Singara.xlsx b/uploads/Singara.xlsx deleted file mode 100644 index 8f76068..0000000 Binary files a/uploads/Singara.xlsx and /dev/null differ diff --git a/uploads/Sisona.xlsx b/uploads/Sisona.xlsx deleted file mode 100644 index ea10dc1..0000000 Binary files a/uploads/Sisona.xlsx and /dev/null differ diff --git a/uploads/Sluice valve ‐ 200 mm dia_Report.xlsx b/uploads/Sluice valve ‐ 200 mm dia_Report.xlsx deleted file mode 100644 index 7a7a582..0000000 Binary files a/uploads/Sluice valve ‐ 200 mm dia_Report.xlsx and /dev/null differ diff --git a/uploads/Sohjani tagan-Muzaffarnagar.xlsx b/uploads/Sohjani tagan-Muzaffarnagar.xlsx deleted file mode 100644 index 8431b68..0000000 Binary files a/uploads/Sohjani tagan-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Sohjani tagan.xlsx b/uploads/Sohjani tagan.xlsx deleted file mode 100644 index 705c654..0000000 Binary files a/uploads/Sohjani tagan.xlsx and /dev/null differ diff --git a/uploads/Subri.xlsx b/uploads/Subri.xlsx deleted file mode 100644 index 7944112..0000000 Binary files a/uploads/Subri.xlsx and /dev/null differ diff --git a/uploads/Suhaheri-Muzaffarnagar.xlsx b/uploads/Suhaheri-Muzaffarnagar.xlsx deleted file mode 100644 index 5d92604..0000000 Binary files a/uploads/Suhaheri-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Suhaheri.xlsx b/uploads/Suhaheri.xlsx deleted file mode 100644 index 7fda6d5..0000000 Binary files a/uploads/Suhaheri.xlsx and /dev/null differ diff --git a/uploads/Sukertari-Muzaffarnagar.xlsx b/uploads/Sukertari-Muzaffarnagar.xlsx deleted file mode 100644 index 89659ed..0000000 Binary files a/uploads/Sukertari-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Sukertari.xlsx b/uploads/Sukertari.xlsx deleted file mode 100644 index 7c78674..0000000 Binary files a/uploads/Sukertari.xlsx and /dev/null differ diff --git a/uploads/Supply and fixing of 12m wide MS _Report.xlsx b/uploads/Supply and fixing of 12m wide MS _Report.xlsx deleted file mode 100644 index 9f038f0..0000000 Binary files a/uploads/Supply and fixing of 12m wide MS _Report.xlsx and /dev/null differ diff --git a/uploads/Supply and Installation_Report.xlsx b/uploads/Supply and Installation_Report.xlsx deleted file mode 100644 index 6e484b3..0000000 Binary files a/uploads/Supply and Installation_Report.xlsx and /dev/null differ diff --git a/uploads/Supply and fixing of 36 m x 12_20260414_142037.xlsx b/uploads/Supply and fixing of 36 m x 12_20260414_142037.xlsx deleted file mode 100644 index cb5eeab..0000000 Binary files a/uploads/Supply and fixing of 36 m x 12_20260414_142037.xlsx and /dev/null differ diff --git a/uploads/Supply of all materials labour TP etc fo_Report.xlsx b/uploads/Supply of all materials labour TP etc fo_Report.xlsx deleted file mode 100644 index a06e4f8..0000000 Binary files a/uploads/Supply of all materials labour TP etc fo_Report.xlsx and /dev/null differ diff --git a/uploads/Tajpur-Muzaffarnagar.xlsx b/uploads/Tajpur-Muzaffarnagar.xlsx deleted file mode 100644 index 1ff0f1e..0000000 Binary files a/uploads/Tajpur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Tajpur.xlsx b/uploads/Tajpur.xlsx deleted file mode 100644 index 7d2f40f..0000000 Binary files a/uploads/Tajpur.xlsx and /dev/null differ diff --git a/uploads/Tana-Unn.xlsx b/uploads/Tana-Unn.xlsx deleted file mode 100644 index cdd132a..0000000 Binary files a/uploads/Tana-Unn.xlsx and /dev/null differ diff --git a/uploads/Tana.xlsx b/uploads/Tana.xlsx deleted file mode 100644 index 4742ffa..0000000 Binary files a/uploads/Tana.xlsx and /dev/null differ diff --git a/uploads/Tanda.xlsx b/uploads/Tanda.xlsx deleted file mode 100644 index df3e0d2..0000000 Binary files a/uploads/Tanda.xlsx and /dev/null differ diff --git a/uploads/Tigri.xlsx b/uploads/Tigri.xlsx deleted file mode 100644 index 7df5572..0000000 Binary files a/uploads/Tigri.xlsx and /dev/null differ diff --git a/uploads/Tisang Dabhedi.xlsx b/uploads/Tisang Dabhedi.xlsx deleted file mode 100644 index 22d5607..0000000 Binary files a/uploads/Tisang Dabhedi.xlsx and /dev/null differ diff --git a/uploads/Titarsi pawwarkhera-Thanabhawan.xlsx b/uploads/Titarsi pawwarkhera-Thanabhawan.xlsx deleted file mode 100644 index d0b8af0..0000000 Binary files a/uploads/Titarsi pawwarkhera-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Titarsi pawwarkhera.xlsx b/uploads/Titarsi pawwarkhera.xlsx deleted file mode 100644 index 0862e54..0000000 Binary files a/uploads/Titarsi pawwarkhera.xlsx and /dev/null differ diff --git a/uploads/Titoli-kairana.xlsx b/uploads/Titoli-kairana.xlsx deleted file mode 100644 index 247521f..0000000 Binary files a/uploads/Titoli-kairana.xlsx and /dev/null differ diff --git a/uploads/Titoli.xlsx b/uploads/Titoli.xlsx deleted file mode 100644 index 247521f..0000000 Binary files a/uploads/Titoli.xlsx and /dev/null differ diff --git a/uploads/Toda-Unn.xlsx b/uploads/Toda-Unn.xlsx deleted file mode 100644 index fb3d0d8..0000000 Binary files a/uploads/Toda-Unn.xlsx and /dev/null differ diff --git a/uploads/Toda.xlsx b/uploads/Toda.xlsx deleted file mode 100644 index 2c4192e..0000000 Binary files a/uploads/Toda.xlsx and /dev/null differ diff --git a/uploads/Transportation Installation Di_20260414_124325.xlsx b/uploads/Transportation Installation Di_20260414_124325.xlsx deleted file mode 100644 index dfb8957..0000000 Binary files a/uploads/Transportation Installation Di_20260414_124325.xlsx and /dev/null differ diff --git a/uploads/Transportation Installation Dismantling of Rig machine and logging of bore hole_Report.xlsx b/uploads/Transportation Installation Dismantling of Rig machine and logging of bore hole_Report.xlsx deleted file mode 100644 index 63a4185..0000000 Binary files a/uploads/Transportation Installation Dismantling of Rig machine and logging of bore hole_Report.xlsx and /dev/null differ diff --git a/uploads/Tuglakpur Nagla Duheli-Muzaffarnagar.xlsx b/uploads/Tuglakpur Nagla Duheli-Muzaffarnagar.xlsx deleted file mode 100644 index fd4cc42..0000000 Binary files a/uploads/Tuglakpur Nagla Duheli-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/Tuglakpur Nagla Duheli.xlsx b/uploads/Tuglakpur Nagla Duheli.xlsx deleted file mode 100644 index 7aa9004..0000000 Binary files a/uploads/Tuglakpur Nagla Duheli.xlsx and /dev/null differ diff --git a/uploads/Udpur Bhatti Mazra.xlsx b/uploads/Udpur Bhatti Mazra.xlsx deleted file mode 100644 index 10813c4..0000000 Binary files a/uploads/Udpur Bhatti Mazra.xlsx and /dev/null differ diff --git a/uploads/Ullhani.xlsx b/uploads/Ullhani.xlsx deleted file mode 100644 index 34920b7..0000000 Binary files a/uploads/Ullhani.xlsx and /dev/null differ diff --git a/uploads/Umrpur Lisora.xlsx b/uploads/Umrpur Lisora.xlsx deleted file mode 100644 index 8a64ebf..0000000 Binary files a/uploads/Umrpur Lisora.xlsx and /dev/null differ diff --git a/uploads/Unchagaon-kairana.xlsx b/uploads/Unchagaon-kairana.xlsx deleted file mode 100644 index a1cea44..0000000 Binary files a/uploads/Unchagaon-kairana.xlsx and /dev/null differ diff --git a/uploads/Unchagaon.xlsx b/uploads/Unchagaon.xlsx deleted file mode 100644 index a1cea44..0000000 Binary files a/uploads/Unchagaon.xlsx and /dev/null differ diff --git a/uploads/Usmanpur-Thanabhawan.xlsx b/uploads/Usmanpur-Thanabhawan.xlsx deleted file mode 100644 index 539e735..0000000 Binary files a/uploads/Usmanpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Usmanpur.xlsx b/uploads/Usmanpur.xlsx deleted file mode 100644 index 7a280bc..0000000 Binary files a/uploads/Usmanpur.xlsx and /dev/null differ diff --git a/uploads/Wazidpur Kawali.xlsx b/uploads/Wazidpur Kawali.xlsx deleted file mode 100644 index 80dc53b..0000000 Binary files a/uploads/Wazidpur Kawali.xlsx and /dev/null differ diff --git a/uploads/Wazidpur Khurd.xlsx b/uploads/Wazidpur Khurd.xlsx deleted file mode 100644 index c35696e..0000000 Binary files a/uploads/Wazidpur Khurd.xlsx and /dev/null differ diff --git a/uploads/Yahiyapur.xlsx b/uploads/Yahiyapur.xlsx deleted file mode 100644 index 271fcf9..0000000 Binary files a/uploads/Yahiyapur.xlsx and /dev/null differ diff --git a/uploads/Yarpur-Thanabhawan.xlsx b/uploads/Yarpur-Thanabhawan.xlsx deleted file mode 100644 index 7fe50cd..0000000 Binary files a/uploads/Yarpur-Thanabhawan.xlsx and /dev/null differ diff --git a/uploads/Yarpur.xlsx b/uploads/Yarpur.xlsx deleted file mode 100644 index 553962a..0000000 Binary files a/uploads/Yarpur.xlsx and /dev/null differ diff --git a/uploads/Yusufpur.xlsx b/uploads/Yusufpur.xlsx deleted file mode 100644 index 3f4bb4e..0000000 Binary files a/uploads/Yusufpur.xlsx and /dev/null differ diff --git a/uploads/aldi-kandhla.xlsx b/uploads/aldi-kandhla.xlsx deleted file mode 100644 index a71616e..0000000 Binary files a/uploads/aldi-kandhla.xlsx and /dev/null differ diff --git a/uploads/aldi.xlsx b/uploads/aldi.xlsx deleted file mode 100644 index f95a8cf..0000000 Binary files a/uploads/aldi.xlsx and /dev/null differ diff --git a/uploads/alipur-kairana.xlsx b/uploads/alipur-kairana.xlsx deleted file mode 100644 index 99417a9..0000000 Binary files a/uploads/alipur-kairana.xlsx and /dev/null differ diff --git a/uploads/alipur.xlsx b/uploads/alipur.xlsx deleted file mode 100644 index 3115e00..0000000 Binary files a/uploads/alipur.xlsx and /dev/null differ diff --git a/uploads/badhev_kannukheda-kairana.xlsx b/uploads/badhev_kannukheda-kairana.xlsx deleted file mode 100644 index eb4084e..0000000 Binary files a/uploads/badhev_kannukheda-kairana.xlsx and /dev/null differ diff --git a/uploads/badhev_kannukheda.xlsx b/uploads/badhev_kannukheda.xlsx deleted file mode 100644 index eb4084e..0000000 Binary files a/uploads/badhev_kannukheda.xlsx and /dev/null differ diff --git a/uploads/chlorinating system with doser_20260414_141955.xlsx b/uploads/chlorinating system with doser_20260414_141955.xlsx deleted file mode 100644 index b0edb98..0000000 Binary files a/uploads/chlorinating system with doser_20260414_141955.xlsx and /dev/null differ diff --git a/uploads/jalalpur.xlsx b/uploads/jalalpur.xlsx deleted file mode 100644 index a8a4f1a..0000000 Binary files a/uploads/jalalpur.xlsx and /dev/null differ diff --git a/uploads/janipur-new.xlsx b/uploads/janipur-new.xlsx deleted file mode 100644 index 21b457b..0000000 Binary files a/uploads/janipur-new.xlsx and /dev/null differ diff --git a/uploads/kala Mazra.xlsx b/uploads/kala Mazra.xlsx deleted file mode 100644 index bd90765..0000000 Binary files a/uploads/kala Mazra.xlsx and /dev/null differ diff --git a/uploads/kamlapur-Muzaffarnagar.xlsx b/uploads/kamlapur-Muzaffarnagar.xlsx deleted file mode 100644 index f2ede39..0000000 Binary files a/uploads/kamlapur-Muzaffarnagar.xlsx and /dev/null differ diff --git a/uploads/kamlapur.xlsx b/uploads/kamlapur.xlsx deleted file mode 100644 index 162b399..0000000 Binary files a/uploads/kamlapur.xlsx and /dev/null differ diff --git a/uploads/khanpur.xlsx b/uploads/khanpur.xlsx deleted file mode 100644 index fd248b2..0000000 Binary files a/uploads/khanpur.xlsx and /dev/null differ diff --git a/uploads/kheri-bairangi-shamli(new).xlsx b/uploads/kheri-bairangi-shamli(new).xlsx deleted file mode 100644 index c9e3d26..0000000 Binary files a/uploads/kheri-bairangi-shamli(new).xlsx and /dev/null differ diff --git a/uploads/kheri-bairangi.xlsx b/uploads/kheri-bairangi.xlsx deleted file mode 100644 index e4c1048..0000000 Binary files a/uploads/kheri-bairangi.xlsx and /dev/null differ diff --git a/uploads/kheri-karmu-Shamli.xlsx b/uploads/kheri-karmu-Shamli.xlsx deleted file mode 100644 index 99c1710..0000000 Binary files a/uploads/kheri-karmu-Shamli.xlsx and /dev/null differ diff --git a/uploads/kheri-karmu.xlsx b/uploads/kheri-karmu.xlsx deleted file mode 100644 index 9fc9557..0000000 Binary files a/uploads/kheri-karmu.xlsx and /dev/null differ diff --git a/uploads/panjeth-kairana.xlsx b/uploads/panjeth-kairana.xlsx deleted file mode 100644 index 804509a..0000000 Binary files a/uploads/panjeth-kairana.xlsx and /dev/null differ diff --git a/uploads/panjeth.xlsx b/uploads/panjeth.xlsx deleted file mode 100644 index 804509a..0000000 Binary files a/uploads/panjeth.xlsx and /dev/null differ diff --git a/uploads/shafipur patti.xlsx b/uploads/shafipur patti.xlsx deleted file mode 100644 index 5fab743..0000000 Binary files a/uploads/shafipur patti.xlsx and /dev/null differ