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 }}