added new of dashboard and log apply on routes
This commit is contained in:
@@ -16,7 +16,11 @@ from app.models.laying_model import Laying
|
||||
dashboard_bp = Blueprint("dashboard", __name__, url_prefix="/dashboard")
|
||||
|
||||
|
||||
|
||||
@dashboard_bp.route("/")
|
||||
def dashboard():
|
||||
if not session.get("user_id"):
|
||||
return redirect(url_for("auth.login"))
|
||||
return render_template("dashboard.html", title="Business Intelligence Dashboard")
|
||||
|
||||
|
||||
|
||||
@@ -144,11 +148,6 @@ def live_stats():
|
||||
except Exception as e:
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
@dashboard_bp.route("/")
|
||||
def dashboard():
|
||||
if not session.get("user_id"):
|
||||
return redirect(url_for("auth.login"))
|
||||
return render_template("dashboard.html", title="Business Intelligence Dashboard")
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,34 +1,38 @@
|
||||
from flask import Blueprint, render_template, request, redirect, flash
|
||||
from app import db
|
||||
from flask import Blueprint, render_template, request, redirect, flash, current_app, url_for
|
||||
from app.services.db_service import db
|
||||
from app.models.subcontractor_model import Subcontractor
|
||||
from app.utils.helpers import login_required
|
||||
|
||||
|
||||
subcontractor_bp = Blueprint("subcontractor", __name__, url_prefix="/subcontractor")
|
||||
|
||||
|
||||
|
||||
# ---------------- ADD -----------------
|
||||
@subcontractor_bp.route("/add")
|
||||
@login_required
|
||||
def add_subcontractor():
|
||||
current_app.logger.info("Opened Add Subcontractor Page")
|
||||
return render_template("subcontractor/add.html")
|
||||
|
||||
|
||||
# ---------------- SAVE -----------------
|
||||
@subcontractor_bp.route("/save", methods=["POST"])
|
||||
@login_required
|
||||
def save_subcontractor():
|
||||
# 1. Get and clean the name from the form
|
||||
|
||||
name = request.form.get("subcontractor_name", "").strip()
|
||||
|
||||
# 2. Basic validation: Ensure the name isn't empty
|
||||
|
||||
if not name:
|
||||
current_app.logger.warning("Empty subcontractor name submitted")
|
||||
flash("Subcontractor name cannot be empty.", "danger")
|
||||
return redirect("/subcontractor/add")
|
||||
|
||||
# 3. Check if a subcontractor with this name already exists
|
||||
return redirect(url_for("subcontractor.add_subcontractor"))
|
||||
|
||||
existing_sub = Subcontractor.query.filter_by(subcontractor_name=name).first()
|
||||
|
||||
|
||||
if existing_sub:
|
||||
current_app.logger.warning(f"Duplicate subcontractor attempt: {name}")
|
||||
flash(f"Subcontractor with name '{name}' already exists!", "danger")
|
||||
return redirect("/subcontractor/add")
|
||||
|
||||
# 4. If no duplicate is found, proceed to save
|
||||
return redirect(url_for("subcontractor.add_subcontractor"))
|
||||
|
||||
try:
|
||||
subcontractor = Subcontractor(
|
||||
subcontractor_name=name,
|
||||
@@ -37,155 +41,99 @@ def save_subcontractor():
|
||||
email_id=request.form.get("email_id"),
|
||||
gst_no=request.form.get("gst_no")
|
||||
)
|
||||
|
||||
|
||||
db.session.add(subcontractor)
|
||||
db.session.commit()
|
||||
|
||||
current_app.logger.info(f"Subcontractor Created Successfully: {name}")
|
||||
flash("Subcontractor added successfully!", "success")
|
||||
|
||||
except Exception as e:
|
||||
|
||||
except Exception:
|
||||
db.session.rollback()
|
||||
flash("An error occurred while saving. Please try again.", "danger")
|
||||
|
||||
return redirect("/subcontractor/list")
|
||||
|
||||
current_app.logger.exception("Error while saving subcontractor")
|
||||
flash("An error occurred while saving.", "danger")
|
||||
|
||||
return redirect(url_for("subcontractor.subcontractor_list"))
|
||||
|
||||
|
||||
# ---------------- LIST -----------------
|
||||
@subcontractor_bp.route("/list")
|
||||
@login_required
|
||||
def subcontractor_list():
|
||||
subcontractors = Subcontractor.query.all()
|
||||
current_app.logger.info("Viewed Subcontractor List")
|
||||
return render_template("subcontractor/list.html", subcontractors=subcontractors)
|
||||
|
||||
|
||||
|
||||
# ---------------- EDIT -----------------
|
||||
@subcontractor_bp.route("/edit/<int:id>")
|
||||
@login_required
|
||||
def edit_subcontractor(id):
|
||||
subcontractor = Subcontractor.query.get_or_404(id)
|
||||
current_app.logger.info(f"Editing Subcontractor ID: {id}")
|
||||
return render_template("subcontractor/edit.html", subcontractor=subcontractor)
|
||||
|
||||
|
||||
|
||||
# ---------------- UPDATE -----------------
|
||||
@subcontractor_bp.route("/update/<int:id>", methods=["POST"])
|
||||
@login_required
|
||||
def update_subcontractor(id):
|
||||
|
||||
subcontractor = Subcontractor.query.get_or_404(id)
|
||||
new_name = request.form.get("subcontractor_name")
|
||||
|
||||
# Check if the new name is taken by someone ELSE (not this current ID)
|
||||
new_name = request.form.get("subcontractor_name", "").strip()
|
||||
|
||||
duplicate = Subcontractor.query.filter(
|
||||
Subcontractor.subcontractor_name == new_name,
|
||||
Subcontractor.id != id
|
||||
).first()
|
||||
|
||||
if duplicate:
|
||||
flash("Another subcontractor already uses this name.", "danger")
|
||||
return redirect(f"/subcontractor/edit/{id}")
|
||||
|
||||
subcontractor.subcontractor_name = new_name
|
||||
|
||||
db.session.commit()
|
||||
|
||||
flash("Subcontractor updated successfully!", "success")
|
||||
return redirect("/subcontractor/list")
|
||||
|
||||
# ---------------- DELETE -----------------
|
||||
@subcontractor_bp.route("/delete/<int:id>")
|
||||
@login_required
|
||||
def delete_subcontractor(id):
|
||||
subcontractor = Subcontractor.query.get_or_404(id)
|
||||
|
||||
db.session.delete(subcontractor)
|
||||
db.session.commit()
|
||||
|
||||
flash("Subcontractor deleted successfully!", "success")
|
||||
return redirect("/subcontractor/list")
|
||||
from flask import Blueprint, render_template, request, redirect, flash
|
||||
from app import db
|
||||
from app.models.subcontractor_model import Subcontractor
|
||||
from app.utils.helpers import login_required
|
||||
|
||||
subcontractor_bp = Blueprint("subcontractor", __name__, url_prefix="/subcontractor")
|
||||
|
||||
# ---------------- ADD -----------------
|
||||
@subcontractor_bp.route("/add")
|
||||
@login_required
|
||||
def add_subcontractor():
|
||||
return render_template("subcontractor/add.html")
|
||||
|
||||
@subcontractor_bp.route("/save", methods=["POST"])
|
||||
@login_required
|
||||
def save_subcontractor():
|
||||
name = request.form.get("subcontractor_name", "").strip()
|
||||
if not name:
|
||||
flash("Subcontractor name cannot be empty.", "danger")
|
||||
return redirect("/subcontractor/add")
|
||||
existing_sub = Subcontractor.query.filter_by(subcontractor_name=name).first()
|
||||
|
||||
if existing_sub:
|
||||
flash(f"Subcontractor with name '{name}' already exists!", "danger")
|
||||
return redirect("/subcontractor/add")
|
||||
if duplicate:
|
||||
current_app.logger.warning(f"Duplicate update attempt: {new_name}")
|
||||
flash("Another subcontractor already uses this name.", "danger")
|
||||
return redirect(url_for("subcontractor.edit_subcontractor", id=id))
|
||||
|
||||
try:
|
||||
subcontractor = Subcontractor(
|
||||
subcontractor_name=name,
|
||||
contact_person=request.form.get("contact_person"),
|
||||
mobile_no=request.form.get("mobile_no"),
|
||||
email_id=request.form.get("email_id"),
|
||||
gst_no=request.form.get("gst_no")
|
||||
)
|
||||
|
||||
db.session.add(subcontractor)
|
||||
old_name = subcontractor.subcontractor_name
|
||||
|
||||
subcontractor.subcontractor_name = new_name
|
||||
subcontractor.contact_person = request.form.get("contact_person")
|
||||
subcontractor.mobile_no = request.form.get("mobile_no")
|
||||
subcontractor.email_id = request.form.get("email_id")
|
||||
subcontractor.gst_no = request.form.get("gst_no")
|
||||
|
||||
db.session.commit()
|
||||
flash("Subcontractor added successfully!", "success")
|
||||
|
||||
except Exception as e:
|
||||
|
||||
current_app.logger.info(
|
||||
f"Subcontractor Updated: {old_name} → {new_name}"
|
||||
)
|
||||
|
||||
flash("Subcontractor updated successfully!", "success")
|
||||
|
||||
except Exception:
|
||||
db.session.rollback()
|
||||
flash("An error occurred while saving. Please try again.", "danger")
|
||||
|
||||
return redirect("/subcontractor/list")
|
||||
|
||||
# ---------------- LIST -----------------
|
||||
@subcontractor_bp.route("/list")
|
||||
@login_required
|
||||
def subcontractor_list():
|
||||
subcontractors = Subcontractor.query.all()
|
||||
return render_template("subcontractor/list.html", subcontractors=subcontractors)
|
||||
|
||||
# ---------------- EDIT -----------------
|
||||
@subcontractor_bp.route("/edit/<int:id>")
|
||||
@login_required
|
||||
def edit_subcontractor(id):
|
||||
subcontractor = Subcontractor.query.get_or_404(id)
|
||||
return render_template("subcontractor/edit.html", subcontractor=subcontractor)
|
||||
|
||||
# ---------------- UPDATE -----------------
|
||||
@subcontractor_bp.route("/update/<int:id>", methods=["POST"])
|
||||
@login_required
|
||||
def update_subcontractor(id):
|
||||
subcontractor = Subcontractor.query.get_or_404(id)
|
||||
new_name = request.form.get("subcontractor_name")
|
||||
|
||||
# Check if the new name is taken by someone ELSE (not this current ID)
|
||||
duplicate = Subcontractor.query.filter(
|
||||
Subcontractor.subcontractor_name == new_name,
|
||||
Subcontractor.id != id
|
||||
).first()
|
||||
|
||||
if duplicate:
|
||||
flash("Another subcontractor already uses this name.", "danger")
|
||||
return redirect(f"/subcontractor/edit/{id}")
|
||||
|
||||
subcontractor.subcontractor_name = new_name
|
||||
db.session.commit()
|
||||
|
||||
flash("Subcontractor updated successfully!", "success")
|
||||
return redirect("/subcontractor/list")
|
||||
|
||||
current_app.logger.exception("Error updating subcontractor")
|
||||
flash("Update failed!", "danger")
|
||||
|
||||
return redirect(url_for("subcontractor.subcontractor_list"))
|
||||
|
||||
|
||||
# ---------------- DELETE -----------------
|
||||
@subcontractor_bp.route("/delete/<int:id>")
|
||||
@login_required
|
||||
def delete_subcontractor(id):
|
||||
subcontractor = Subcontractor.query.get_or_404(id)
|
||||
try:
|
||||
name = subcontractor.subcontractor_name
|
||||
|
||||
db.session.delete(subcontractor)
|
||||
db.session.commit()
|
||||
db.session.delete(subcontractor)
|
||||
db.session.commit()
|
||||
|
||||
flash("Subcontractor deleted successfully!", "success")
|
||||
return redirect("/subcontractor/list")
|
||||
current_app.logger.info(f"Subcontractor Deleted: {name}")
|
||||
flash("Subcontractor deleted successfully!", "success")
|
||||
|
||||
except Exception:
|
||||
db.session.rollback()
|
||||
current_app.logger.exception("Error deleting subcontractor")
|
||||
flash("Delete failed!", "danger")
|
||||
|
||||
return redirect(url_for("subcontractor.subcontractor_list"))
|
||||
@@ -1,11 +1,13 @@
|
||||
from flask import Blueprint, render_template
|
||||
from app.services.user_service import UserService
|
||||
from app.utils.helpers import login_required
|
||||
from flask import current_app
|
||||
|
||||
user_bp = Blueprint("user", __name__, url_prefix="/user")
|
||||
|
||||
@user_bp.route("/list")
|
||||
@login_required
|
||||
def list_users():
|
||||
current_app.logger.info("User list viewed")
|
||||
users = UserService.get_all_users()
|
||||
return render_template("users.html", users=users, title="Users")
|
||||
return render_template("users.html", users=users, title="Users")
|
||||
Reference in New Issue
Block a user