1212from django .template .response import TemplateResponse
1313from django .urls import NoReverseMatch , URLPattern , URLResolver , reverse
1414from django .utils .text import capfirst
15- from django .utils .translation import gettext_lazy
15+ from django .utils .translation import gettext_lazy as _
1616from django .views import View
1717from smart_admin .autocomplete import SmartAutocompleteJsonView
1818
@@ -119,9 +119,9 @@ class TenantAdminSite(admin.AdminSite):
119119 password_change_template = None
120120 password_change_done_template = None
121121
122- site_title = gettext_lazy ("HOPE Country Workspace site admin" )
122+ site_title = _ ("HOPE Country Workspace site admin" )
123123 site_header = "Country Workspace"
124- index_title = gettext_lazy ("" )
124+ index_title = _ ("" )
125125 login_form = TenantAuthenticationForm
126126
127127 namespace = "workspace"
@@ -183,6 +183,99 @@ def _build_app_dict(self, request: HttpRequest, label: str | None = None) -> dic
183183
184184 return app_dict
185185
186+ def get_menu_items (self , request : "HttpRequest" ) -> list [dict [str , Any ]]:
187+ """Return a simplified list of menu items based on the current program."""
188+ items = [
189+ {
190+ "name" : _ ("Home" ),
191+ "url" : reverse ("workspace:index" ),
192+ "icon" : "icon-home" ,
193+ "selected" : not hasattr (self , "modeladmin_name" ),
194+ },
195+ ]
196+
197+ program = get_selected_program ()
198+ if program :
199+ bg = program .beneficiary_group
200+ items .extend (
201+ [
202+ {
203+ "name" : _ ("Programme" ),
204+ "url" : reverse ("workspace:workspaces_countryprogram_change" , args = [program .pk ]),
205+ "icon" : "icon-equalizer" ,
206+ "selected" : getattr (self , "modeladmin_name" , None ) == "CountryProgramAdmin" ,
207+ },
208+ ]
209+ )
210+
211+ if bg and bg .master_detail :
212+ items .append (
213+ {
214+ "name" : bg .group_label_plural ,
215+ "url" : reverse ("workspace:workspaces_countryhousehold_changelist" ),
216+ "icon" : "icon-members" ,
217+ "selected" : getattr (self , "modeladmin_name" , None ) == "CountryHouseholdAdmin" ,
218+ }
219+ )
220+ items .append (
221+ {
222+ "name" : bg .member_label_plural ,
223+ "url" : reverse ("workspace:workspaces_countryindividual_changelist" ),
224+ "icon" : "icon-user" ,
225+ "selected" : getattr (self , "modeladmin_name" , None ) == "CountryIndividualAdmin" ,
226+ "indent" : True ,
227+ }
228+ )
229+ elif bg :
230+ items .append (
231+ {
232+ "name" : bg .member_label_plural ,
233+ "url" : reverse ("workspace:workspaces_countryindividual_changelist" ),
234+ "icon" : "icon-user" ,
235+ "selected" : getattr (self , "modeladmin_name" , None ) == "CountryIndividualAdmin" ,
236+ }
237+ )
238+
239+ items .extend (
240+ [
241+ {
242+ "name" : _ ("Batches" ),
243+ "url" : reverse ("workspace:workspaces_countrybatch_changelist" ),
244+ "icon" : "icon-sign" ,
245+ "selected" : getattr (self , "modeladmin_name" , None ) == "CountryBatchAdmin" ,
246+ },
247+ {
248+ "name" : _ ("Jobs" ),
249+ "url" : reverse ("workspace:workspaces_countryasyncjob_changelist" ),
250+ "icon" : "icon-globe" ,
251+ "selected" : getattr (self , "modeladmin_name" , None ) == "CountryJobAdmin" ,
252+ },
253+ ]
254+ )
255+
256+ items .append (
257+ {
258+ "name" : _ ("Logout" ),
259+ "url" : reverse ("admin:logout" ),
260+ "icon" : "icon-logout" ,
261+ "selected" : False ,
262+ "is_form" : True ,
263+ }
264+ )
265+
266+ if request .user .is_staff :
267+ items .append (
268+ {
269+ "name" : _ ("Admin" ),
270+ "url" : reverse ("admin:index" ),
271+ "icon" : "icon-shield1" ,
272+ "selected" : False ,
273+ "target" : "_admin" ,
274+ }
275+ )
276+
277+ return items
278+
186279 def each_context (self , request : "HttpRequest" ) -> "dict[str, Any]" :
187280 ret = super ().each_context (request )
188281 selected_tenant = get_selected_tenant ()
@@ -192,6 +285,7 @@ def each_context(self, request: "HttpRequest") -> "dict[str, Any]":
192285 ret ["active_tenant" ] = selected_tenant
193286 ret ["active_program" ] = selected_program
194287 ret ["namespace" ] = self .namespace
288+ ret ["menu_items" ] = self .get_menu_items (request )
195289 return ret # type: ignore
196290
197291 def autocomplete_view (self , request : "HttpRequest" ) -> HttpResponse :
0 commit comments