60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
"""
|
|
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"))
|