39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
"""
|
|
app/tenant/reviews/routes.py
|
|
Owner view of customer reviews submitted at checkout.
|
|
"""
|
|
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)
|