snapshot: preserve dashboard filters and realtime search
This commit is contained in:
@@ -557,11 +557,37 @@ def requests_dashboard(request):
|
||||
return redirect('requests_dashboard')
|
||||
|
||||
search_query = request.GET.get('q', '').strip()
|
||||
type_filter = (request.GET.get('type') or '').strip().lower()
|
||||
status_filter = (request.GET.get('status') or '').strip().lower()
|
||||
department_filter = (request.GET.get('department') or '').strip()
|
||||
date_from = (request.GET.get('date_from') or '').strip()
|
||||
date_to = (request.GET.get('date_to') or '').strip()
|
||||
|
||||
onboarding_qs = OnboardingRequest.objects.order_by('-created_at')
|
||||
offboarding_qs = OffboardingRequest.objects.order_by('-created_at')
|
||||
all_onboarding = OnboardingRequest.objects.all()
|
||||
all_offboarding = OffboardingRequest.objects.all()
|
||||
|
||||
if search_query:
|
||||
onboarding_qs = onboarding_qs.filter(Q(full_name__icontains=search_query) | Q(work_email__icontains=search_query))
|
||||
offboarding_qs = offboarding_qs.filter(Q(full_name__icontains=search_query) | Q(work_email__icontains=search_query))
|
||||
if status_filter in {'submitted', 'processing', 'completed', 'failed'}:
|
||||
onboarding_qs = onboarding_qs.filter(processing_status=status_filter)
|
||||
offboarding_qs = offboarding_qs.filter(processing_status=status_filter)
|
||||
if department_filter:
|
||||
onboarding_qs = onboarding_qs.filter(department=department_filter)
|
||||
offboarding_qs = offboarding_qs.filter(department=department_filter)
|
||||
if date_from:
|
||||
onboarding_qs = onboarding_qs.filter(created_at__date__gte=date_from)
|
||||
offboarding_qs = offboarding_qs.filter(created_at__date__gte=date_from)
|
||||
if date_to:
|
||||
onboarding_qs = onboarding_qs.filter(created_at__date__lte=date_to)
|
||||
offboarding_qs = offboarding_qs.filter(created_at__date__lte=date_to)
|
||||
|
||||
if type_filter == 'onboarding':
|
||||
offboarding_qs = offboarding_qs.none()
|
||||
elif type_filter == 'offboarding':
|
||||
onboarding_qs = onboarding_qs.none()
|
||||
|
||||
onboarding_items = onboarding_qs[:50]
|
||||
offboarding_items = offboarding_qs[:50]
|
||||
@@ -649,12 +675,36 @@ def requests_dashboard(request):
|
||||
|
||||
onboarding_total = onboarding_qs.count()
|
||||
offboarding_total = offboarding_qs.count()
|
||||
departments = sorted(
|
||||
{
|
||||
value.strip()
|
||||
for value in list(all_onboarding.exclude(department='').values_list('department', flat=True))
|
||||
+ list(all_offboarding.exclude(department='').values_list('department', flat=True))
|
||||
if value and value.strip()
|
||||
},
|
||||
key=str.lower,
|
||||
)
|
||||
status_choices = [
|
||||
{'value': 'submitted', 'label': _request_status_label('submitted', language_code)},
|
||||
{'value': 'processing', 'label': _request_status_label('processing', language_code)},
|
||||
{'value': 'completed', 'label': _request_status_label('completed', language_code)},
|
||||
{'value': 'failed', 'label': _request_status_label('failed', language_code)},
|
||||
]
|
||||
has_filters = any([search_query, type_filter, status_filter, department_filter, date_from, date_to])
|
||||
return render(
|
||||
request,
|
||||
'workflows/requests_dashboard.html',
|
||||
{
|
||||
'rows': rows[:60],
|
||||
'search_query': search_query,
|
||||
'selected_type': type_filter,
|
||||
'selected_status': status_filter,
|
||||
'selected_department': department_filter,
|
||||
'date_from': date_from,
|
||||
'date_to': date_to,
|
||||
'departments': departments,
|
||||
'status_choices': status_choices,
|
||||
'has_filters': has_filters,
|
||||
'onboarding_total': onboarding_total,
|
||||
'offboarding_total': offboarding_total,
|
||||
'combined_total': onboarding_total + offboarding_total,
|
||||
|
||||
Reference in New Issue
Block a user