Hide inactive merged services from service catalogue

This commit is contained in:
A R R R Associates
2026-07-17 23:20:08 +05:30
parent 0b58bf182b
commit e219a0800c
4 changed files with 42 additions and 8 deletions
+31 -6
View File
@@ -21,6 +21,7 @@ from app.modules.services.bulk_imports import (
import_system_default_tasks,
import_due_date_extensions,
)
from app.modules.services.catalogue_export import build_service_catalogue_export
from app.modules.services.due_dates import (
DUE_PERIOD_TYPES,
DUE_YEAR_BASIS_CHOICES,
@@ -333,6 +334,28 @@ def catalogue_list(request: Request, q: str = '', category_id: int | None = None
db.close()
@router.get('/catalogue/export')
def catalogue_export(request: Request):
db = CommonSessionLocal()
try:
user = get_current_user(request, db=db)
if not user:
return RedirectResponse(url='/login', status_code=303)
if not _is_system_admin(db, user):
return _redirect_denied()
require_permission(db, user, 'services.view')
workbook_bytes = build_service_catalogue_export(db)
filename = f"service_catalogue_export_{datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S')}.xlsx"
return StreamingResponse(
iter([workbook_bytes]),
media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
headers={'Content-Disposition': f'attachment; filename="{filename}"'},
)
finally:
db.close()
@router.get('/catalogue/merge')
def catalogue_merge_page(request: Request, source_id: int | None = None, target_id: int | None = None):
db = CommonSessionLocal()
@@ -345,7 +368,9 @@ def catalogue_merge_page(request: Request, source_id: int | None = None, target_
require_permission(db, user, 'services.edit')
services = db.execute(
select(ServiceCatalogue).order_by(ServiceCatalogue.is_active.desc(), ServiceCatalogue.service_code.asc())
select(ServiceCatalogue)
.where(ServiceCatalogue.is_active.is_(True))
.order_by(ServiceCatalogue.service_code.asc())
).scalars().all()
preview = None
error = None
@@ -495,7 +520,7 @@ def catalogue_detail(request: Request, catalogue_id: int):
if not _can_view_services(db, user):
return _redirect_denied()
row = get_catalogue(db, catalogue_id)
if not row:
if not row or not row.is_active:
return RedirectResponse(url='/services/catalogue', status_code=303)
tenant_id = _active_tenant_id(request, user)
can_edit = _is_system_admin(db, user) and _has_perm(db, user, 'services.edit')
@@ -764,7 +789,7 @@ def catalogue_edit_page(request: Request, catalogue_id: int):
return _redirect_denied()
require_permission(db, user, 'services.edit')
row = get_catalogue(db, catalogue_id)
if not row:
if not row or not row.is_active:
return RedirectResponse(url='/services/catalogue', status_code=303)
return _render(request, 'modules/services/templates/services/catalogue_form.html', db, user, title='Edit Service Catalogue', mode='edit', catalogue=row, categories=list_categories(db))
except Exception:
@@ -785,7 +810,7 @@ def catalogue_edit_submit(request: Request, catalogue_id: int, service_name: str
return _redirect_denied()
require_permission(db, user, 'services.edit')
row = get_catalogue(db, catalogue_id)
if not row:
if not row or not row.is_active:
return RedirectResponse(url='/services/catalogue', status_code=303)
selected_category = get_category(db, int(category_id)) if str(category_id).strip() else None
row.service_name = service_name.strip()
@@ -823,8 +848,8 @@ def toggle_firm_service(request: Request, catalogue_id: int, default_branch_id:
return _redirect_denied()
tenant_id = _active_tenant_id(request, user)
row = get_catalogue(db, catalogue_id)
if not row:
return RedirectResponse(url='/services', status_code=303)
if not row or not row.is_active:
return RedirectResponse(url='/services/catalogue', status_code=303)
selection = get_firm_selection(db, tenant_id=tenant_id, catalogue_id=catalogue_id)
if not selection:
selection = FirmServiceSelection(