fix(portal): inject sidebar layout values into every FP portal render

Every FP portal route built `values = {...}` from scratch and called
`request.render(...)` directly, bypassing `_prepare_portal_layout_values`.
Our new `fp_sidebar_items` and `fp_partner_display_name` keys live in
that hook, so the sidebar template's `t-foreach` was a no-op on every
custom page (`/my/home`, `/my/jobs`, `/my/account_summary`, etc.) — the
sidebar rendered with the "My Account" fallback header and only the
Sign Out footer link visible.

Fix: each FP render now does
    values = self._prepare_portal_layout_values()
    values.update({...route-specific values...})
This puts the layout values in first (so `fp_sidebar_items` and
`fp_partner_display_name` always present), and the route's own
update wins on `page_name` and other collisions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
gsinghpal
2026-05-17 14:39:53 -04:00
parent cdc47554ed
commit 04862e8a28
2 changed files with 39 additions and 19 deletions

View File

@@ -551,7 +551,8 @@ class FpCustomerPortal(CustomerPortal):
step=self._FP_ACCOUNT_SUMMARY_PER_PAGE,
)
values = {
values = self._prepare_portal_layout_values()
values.update({
'page_name': 'fp_account_summary',
'records': data['records'],
'tabs': self._FP_ACCOUNT_SUMMARY_TABS,
@@ -564,7 +565,7 @@ class FpCustomerPortal(CustomerPortal):
if commercial.property_account_receivable_id else request.env.company.currency_id,
'pager': pager,
'total': data['total'],
}
})
return request.render('fusion_plating_portal.portal_my_account_summary', values)
# ==========================================================================
@@ -657,7 +658,8 @@ class FpCustomerPortal(CustomerPortal):
('state', '=', 'ready_to_ship'),
])
values = {
values = self._prepare_portal_layout_values()
values.update({
'page_name': 'fp_dashboard',
'partner': partner,
# Quotes
@@ -682,7 +684,7 @@ class FpCustomerPortal(CustomerPortal):
'active_job_count': active_job_count,
'awaiting_review_count': awaiting_review_count,
'ready_to_ship_count': ready_to_ship_count,
}
})
return request.render(
'fusion_plating_portal.fp_portal_home_dashboard',
values,
@@ -745,7 +747,8 @@ class FpCustomerPortal(CustomerPortal):
)
request.session['my_fp_quote_requests_history'] = quote_requests.ids[:100]
values = {
values = self._prepare_portal_layout_values()
values.update({
'quote_requests': quote_requests,
'page_name': 'fp_quote_requests',
'pager': pager,
@@ -754,7 +757,7 @@ class FpCustomerPortal(CustomerPortal):
'sortby': sortby,
'searchbar_filters': searchbar_filters,
'filterby': filterby,
}
})
return request.render(
'fusion_plating_portal.portal_my_quote_requests',
values,
@@ -779,12 +782,14 @@ class FpCustomerPortal(CustomerPortal):
except (AccessError, MissingError):
return request.redirect('/my')
layout_values = self._prepare_portal_layout_values()
values = self._fp_quote_request_get_page_view_values(
quote_sudo, access_token, **kw
)
layout_values.update(values)
return request.render(
'fusion_plating_portal.portal_my_quote_request',
values,
layout_values,
)
# ==========================================================================
@@ -988,14 +993,15 @@ class FpCustomerPortal(CustomerPortal):
)
request.session['my_fp_jobs_history'] = jobs.ids[:100]
values = {
values = self._prepare_portal_layout_values()
values.update({
'jobs': jobs,
'page_name': 'fp_jobs',
'pager': pager,
'default_url': '/my/jobs',
'searchbar_sortings': searchbar_sortings,
'sortby': sortby,
}
})
return request.render(
'fusion_plating_portal.portal_my_jobs',
values,
@@ -1020,6 +1026,7 @@ class FpCustomerPortal(CustomerPortal):
except (AccessError, MissingError):
return request.redirect('/my')
layout_values = self._prepare_portal_layout_values()
values = self._fp_portal_job_get_page_view_values(
job_sudo, access_token, **kw
)
@@ -1031,9 +1038,10 @@ class FpCustomerPortal(CustomerPortal):
done_count = sum(1 for s in values['stage_timeline'] if s['status'] == 'done')
active_count = sum(1 for s in values['stage_timeline'] if s['status'] == 'active')
values['timeline_spine_pct'] = int(((done_count + 0.5 * active_count) / 5) * 100)
layout_values.update(values)
return request.render(
'fusion_plating_portal.portal_my_job',
values,
layout_values,
)
# ==========================================================================
@@ -1266,14 +1274,15 @@ class FpCustomerPortal(CustomerPortal):
offset=pager['offset'],
)
values = {
values = self._prepare_portal_layout_values()
values.update({
'deliveries': deliveries,
'page_name': 'fp_deliveries',
'pager': pager,
'default_url': '/my/deliveries',
'searchbar_sortings': searchbar_sortings,
'sortby': sortby,
}
})
return request.render(
'fusion_plating_portal.portal_my_deliveries',
values,
@@ -1324,14 +1333,15 @@ class FpCustomerPortal(CustomerPortal):
offset=pager['offset'],
)
values = {
values = self._prepare_portal_layout_values()
values.update({
'cert_jobs': cert_jobs,
'page_name': 'fp_certifications',
'pager': pager,
'default_url': '/my/certifications',
'searchbar_sortings': searchbar_sortings,
'sortby': sortby,
}
})
return request.render(
'fusion_plating_portal.portal_my_certifications',
values,