05/07 Phase 3: initial codes
This commit is contained in:
@@ -1,7 +1,38 @@
|
||||
"""
|
||||
app/tenant/reviews/routes.py
|
||||
Phase 3+ implementation.
|
||||
Owner view of customer reviews submitted at checkout.
|
||||
"""
|
||||
from flask import Blueprint
|
||||
import logging
|
||||
from flask import Blueprint, render_template, g
|
||||
from flask_login import login_required
|
||||
from app.models.salon import CheckoutReview
|
||||
from app.decorators import require_role
|
||||
from sqlalchemy import func
|
||||
from app.extensions import db
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
reviews_bp = Blueprint("reviews", __name__, url_prefix="/reviews")
|
||||
|
||||
|
||||
@reviews_bp.route("/")
|
||||
@login_required
|
||||
@require_role("tenant_admin", "tenant_manager")
|
||||
def index():
|
||||
reviews = CheckoutReview.query.filter_by(
|
||||
tenant_id=g.tenant.id
|
||||
).order_by(CheckoutReview.created_at.desc()).limit(100).all()
|
||||
|
||||
avg_row = db.session.query(
|
||||
func.avg(CheckoutReview.rating)
|
||||
).filter_by(tenant_id=g.tenant.id).scalar()
|
||||
avg_rating = round(float(avg_row or 0), 1)
|
||||
|
||||
dist = dict(
|
||||
db.session.query(CheckoutReview.rating, func.count(CheckoutReview.id))
|
||||
.filter_by(tenant_id=g.tenant.id)
|
||||
.group_by(CheckoutReview.rating).all()
|
||||
)
|
||||
|
||||
return render_template("tenant/reviews/index.html",
|
||||
reviews=reviews, avg_rating=avg_rating,
|
||||
rating_dist=dist)
|
||||
|
||||
Reference in New Issue
Block a user