""" app/tenant/settings/routes.py Tenant settings management. """ import logging from flask import Blueprint, render_template, redirect, url_for, flash, request, g from flask_login import login_required from app.extensions import db from app.models.salon import TenantSetting from app.decorators import require_role, demo_readonly from app.tenant.utils import log_tenant_action logger = logging.getLogger(__name__) settings_bp = Blueprint("settings", __name__, url_prefix="/settings") # Keys managed by the UI — any key not in this list is hidden MANAGED_KEYS = [ "business_hours", "booking_advance_days", "auto_confirm_bookings", "review_request_delay_minutes", "receipt_footer_note", "google_review_url", "facebook_review_url", "yelp_review_url", ] @settings_bp.route("/") @login_required @require_role("tenant_admin") def index(): settings = {s.setting_key: s.setting_value for s in TenantSetting.query.filter_by( tenant_id=g.tenant.id).all()} return render_template("tenant/settings/index.html", settings=settings, managed_keys=MANAGED_KEYS) @settings_bp.route("/save", methods=["POST"]) @login_required @require_role("tenant_admin") @demo_readonly def save(): for key in MANAGED_KEYS: value = request.form.get(key, "").strip() existing = TenantSetting.query.filter_by( tenant_id=g.tenant.id, setting_key=key).first() if existing: existing.setting_value = value or None else: setting = TenantSetting( tenant_id=g.tenant.id, setting_key=key, setting_value=value or None, ) db.session.add(setting) log_tenant_action("settings.save", "tenant", g.tenant.id) db.session.commit() flash("Settings saved.", "success") return redirect(url_for("settings.index"))