fix(loyalty): pass merchant name server-side to admin on-behalf headers
Load merchant name in page route handlers and pass to template context. Headers now render as "Cards: Fashion Group S.A." using server-side Jinja2 variables instead of relying on JS program.merchant_name which was not in the ProgramResponse schema. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -15,9 +15,15 @@ from sqlalchemy.orm import Session
|
|||||||
from app.api.deps import get_db, require_menu_access
|
from app.api.deps import get_db, require_menu_access
|
||||||
from app.modules.core.utils.page_context import get_admin_context
|
from app.modules.core.utils.page_context import get_admin_context
|
||||||
from app.modules.enums import FrontendType
|
from app.modules.enums import FrontendType
|
||||||
from app.modules.tenancy.models import User
|
from app.modules.tenancy.models import Merchant, User
|
||||||
from app.templates_config import templates
|
from app.templates_config import templates
|
||||||
|
|
||||||
|
|
||||||
|
def _get_merchant_name(db: Session, merchant_id: int) -> str:
|
||||||
|
"""Look up merchant name for page header context."""
|
||||||
|
merchant = db.query(Merchant).filter(Merchant.id == merchant_id).first()
|
||||||
|
return merchant.name if merchant else ""
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
# Route configuration for module route discovery
|
# Route configuration for module route discovery
|
||||||
@@ -139,9 +145,10 @@ async def admin_loyalty_merchant_cards(
|
|||||||
Render merchant loyalty cards list page.
|
Render merchant loyalty cards list page.
|
||||||
Shows all loyalty cards for a specific merchant.
|
Shows all loyalty cards for a specific merchant.
|
||||||
"""
|
"""
|
||||||
|
merchant_name = _get_merchant_name(db, merchant_id)
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
"loyalty/admin/merchant-cards.html",
|
"loyalty/admin/merchant-cards.html",
|
||||||
get_admin_context(request, db, current_user, merchant_id=merchant_id),
|
get_admin_context(request, db, current_user, merchant_id=merchant_id, merchant_name=merchant_name),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -161,9 +168,10 @@ async def admin_loyalty_merchant_card_detail(
|
|||||||
Render merchant loyalty card detail page.
|
Render merchant loyalty card detail page.
|
||||||
Shows detailed info for a specific loyalty card.
|
Shows detailed info for a specific loyalty card.
|
||||||
"""
|
"""
|
||||||
|
merchant_name = _get_merchant_name(db, merchant_id)
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
"loyalty/admin/merchant-card-detail.html",
|
"loyalty/admin/merchant-card-detail.html",
|
||||||
get_admin_context(request, db, current_user, merchant_id=merchant_id, card_id=card_id),
|
get_admin_context(request, db, current_user, merchant_id=merchant_id, card_id=card_id, merchant_name=merchant_name),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -182,9 +190,10 @@ async def admin_loyalty_merchant_transactions(
|
|||||||
Render merchant loyalty transactions list page.
|
Render merchant loyalty transactions list page.
|
||||||
Shows all loyalty transactions for a specific merchant.
|
Shows all loyalty transactions for a specific merchant.
|
||||||
"""
|
"""
|
||||||
|
merchant_name = _get_merchant_name(db, merchant_id)
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
"loyalty/admin/merchant-transactions.html",
|
"loyalty/admin/merchant-transactions.html",
|
||||||
get_admin_context(request, db, current_user, merchant_id=merchant_id),
|
get_admin_context(request, db, current_user, merchant_id=merchant_id, merchant_name=merchant_name),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -203,9 +212,10 @@ async def admin_loyalty_merchant_pins(
|
|||||||
Render merchant staff PINs page (read-only).
|
Render merchant staff PINs page (read-only).
|
||||||
Shows all staff PINs for a specific merchant.
|
Shows all staff PINs for a specific merchant.
|
||||||
"""
|
"""
|
||||||
|
merchant_name = _get_merchant_name(db, merchant_id)
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
"loyalty/admin/merchant-pins.html",
|
"loyalty/admin/merchant-pins.html",
|
||||||
get_admin_context(request, db, current_user, merchant_id=merchant_id),
|
get_admin_context(request, db, current_user, merchant_id=merchant_id, merchant_name=merchant_name),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
{% block alpine_data %}adminMerchantCards(){% endblock %}
|
{% block alpine_data %}adminMerchantCards(){% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% call detail_page_header("(program?.merchant_name || '') + ' — " + _('loyalty.admin.merchant_cards.title') + "'", '/admin/loyalty/merchants/' ~ merchant_id, subtitle_show='program') %}
|
{% call detail_page_header("'" + _('loyalty.admin.merchant_cards.title') + ": " + (merchant_name or '') + "'", '/admin/loyalty/merchants/' ~ merchant_id, subtitle_show='program') %}
|
||||||
{{ _('loyalty.admin.merchant_cards.subtitle') }}
|
{{ _('loyalty.admin.merchant_cards.subtitle') }}
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
{% block alpine_data %}adminMerchantPins(){% endblock %}
|
{% block alpine_data %}adminMerchantPins(){% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% call detail_page_header("(program?.merchant_name || '') + ' — " + _('loyalty.admin.merchant_pins.title') + "'", '/admin/loyalty/merchants/' ~ merchant_id, subtitle_show='program') %}
|
{% call detail_page_header("'" + _('loyalty.admin.merchant_pins.title') + ": " + (merchant_name or '') + "'", '/admin/loyalty/merchants/' ~ merchant_id, subtitle_show='program') %}
|
||||||
{{ _('loyalty.admin.merchant_pins.subtitle') }}
|
{{ _('loyalty.admin.merchant_pins.subtitle') }}
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
{% block alpine_data %}adminMerchantTransactions(){% endblock %}
|
{% block alpine_data %}adminMerchantTransactions(){% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% call detail_page_header("(program?.merchant_name || '') + ' — " + _('loyalty.admin.merchant_transactions.title') + "'", '/admin/loyalty/merchants/' ~ merchant_id, subtitle_show='program') %}
|
{% call detail_page_header("'" + _('loyalty.admin.merchant_transactions.title') + ": " + (merchant_name or '') + "'", '/admin/loyalty/merchants/' ~ merchant_id, subtitle_show='program') %}
|
||||||
{{ _('loyalty.admin.merchant_transactions.subtitle') }}
|
{{ _('loyalty.admin.merchant_transactions.subtitle') }}
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user