05/07 Phase 3: initial codes
This commit is contained in:
@@ -1,7 +1,59 @@
|
||||
"""
|
||||
app/tenant/settings/routes.py
|
||||
Phase 3+ implementation.
|
||||
Tenant settings management.
|
||||
"""
|
||||
from flask import Blueprint
|
||||
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"))
|
||||
|
||||
Reference in New Issue
Block a user