From d8cb564dfccb010bda1c8ee0fa5073fa02c40a54 Mon Sep 17 00:00:00 2001 From: A R R R Associates Date: Mon, 10 Aug 2026 12:17:51 +0530 Subject: [PATCH] Prioritize active work and paginate completed engagements --- app/modules/employees/service.py | 37 ++++++++++++++++++- .../templates/employees/self_work.html | 29 ++++++++++++++- app/modules/employees/ui.py | 12 +++++- 3 files changed, 74 insertions(+), 4 deletions(-) diff --git a/app/modules/employees/service.py b/app/modules/employees/service.py index 159e6e5..eb873c3 100644 --- a/app/modules/employees/service.py +++ b/app/modules/employees/service.py @@ -3112,6 +3112,8 @@ def list_employee_work_kanban( q: str = "", status: str = "open", financial_year: str | None = None, + completed_page: int = 1, + completed_page_size: int = 25, ) -> dict[str, Any]: """Return exactly one employee-board card per assigned engagement. @@ -3176,8 +3178,8 @@ def list_employee_work_kanban( ) columns = [ - {"code": "pending", "label": "Pending", "cards": []}, {"code": "in_progress", "label": "In Progress", "cards": []}, + {"code": "pending", "label": "Pending", "cards": []}, {"code": "blocked", "label": "Blocked", "cards": []}, {"code": "completed", "label": "Completed", "cards": []}, ] @@ -3354,6 +3356,38 @@ def list_employee_work_kanban( card["service_name"].lower(), ) ) + column["total_cards"] = len(column["cards"]) + + try: + completed_page = max(int(completed_page or 1), 1) + except (TypeError, ValueError): + completed_page = 1 + try: + completed_page_size = max(1, min(int(completed_page_size or 25), 100)) + except (TypeError, ValueError): + completed_page_size = 25 + + completed_column = column_lookup["completed"] + completed_total = int(completed_column["total_cards"]) + completed_pages = max(1, (completed_total + completed_page_size - 1) // completed_page_size) + if completed_page > completed_pages: + completed_page = completed_pages + completed_start = (completed_page - 1) * completed_page_size + completed_end = completed_start + completed_page_size + completed_column["cards"] = completed_column["cards"][completed_start:completed_end] + + completed_pagination = { + "page": completed_page, + "page_size": completed_page_size, + "total": completed_total, + "pages": completed_pages, + "has_previous": completed_page > 1, + "has_next": completed_page < completed_pages, + "previous_page": completed_page - 1 if completed_page > 1 else None, + "next_page": completed_page + 1 if completed_page < completed_pages else None, + "start": completed_start + 1 if completed_total else 0, + "end": min(completed_end, completed_total), + } return { "summary": summary, @@ -3361,6 +3395,7 @@ def list_employee_work_kanban( "q": q, "status": status_filter, "today": today, + "completed_pagination": completed_pagination, } diff --git a/app/modules/employees/templates/employees/self_work.html b/app/modules/employees/templates/employees/self_work.html index 785f0c7..3f7743a 100644 --- a/app/modules/employees/templates/employees/self_work.html +++ b/app/modules/employees/templates/employees/self_work.html @@ -56,7 +56,7 @@ {% if column.code == 'blocked' %}

Engagements waiting for documents, clarification, review or another dependency.

{% endif %} {% if column.code == 'completed' %}

All tasks assigned to you in these engagements are complete.

{% endif %} - {{ column.cards|length }} + {{ column.total_cards }}
@@ -182,6 +182,33 @@
+ + {% if column.code == 'completed' and work_payload.completed_pagination.pages > 1 %} +
+
+ Showing {{ work_payload.completed_pagination.start }}-{{ work_payload.completed_pagination.end }} of {{ work_payload.completed_pagination.total }} completed engagements +
+
+ {% if work_payload.completed_pagination.has_previous %} +
+ + + + +
+ {% endif %} + Page {{ work_payload.completed_pagination.page }} of {{ work_payload.completed_pagination.pages }} + {% if work_payload.completed_pagination.has_next %} +
+ + + + +
+ {% endif %} +
+
+ {% endif %} {% endfor %} diff --git a/app/modules/employees/ui.py b/app/modules/employees/ui.py index 73f5de8..007f794 100644 --- a/app/modules/employees/ui.py +++ b/app/modules/employees/ui.py @@ -2027,7 +2027,7 @@ def employee_my_work_task_status( @portal_router.get("/work") -def employee_my_work(request: Request, q: str = "", status: str = "open"): +def employee_my_work(request: Request, q: str = "", status: str = "open", completed_page: int = 1): db = CommonSessionLocal() try: current_user = get_current_user(request, db=db) @@ -2042,7 +2042,15 @@ def employee_my_work(request: Request, q: str = "", status: str = "open"): scope = build_employee_scope(db, current_user, tenant_id=tenant_id, branch_id=branch_id) employee = get_employee_for_user(db, current_user) financial_year = _active_financial_year(request) - work_payload = list_employee_work_kanban(db, scope, q=q, status=status, financial_year=financial_year) + work_payload = list_employee_work_kanban( + db, + scope, + q=q, + status=status, + financial_year=financial_year, + completed_page=completed_page, + completed_page_size=25, + ) return _render( request, "modules/employees/templates/employees/self_work.html",