Skip to content

Commit 8b6b954

Browse files
Merge pull request #1810 from IFRCGo/fix/dref-account-page
Refactor filter issue in dref account page
2 parents 3ff27af + 17722d7 commit 8b6b954

File tree

1 file changed

+113
-38
lines changed

1 file changed

+113
-38
lines changed

dref/views.py

Lines changed: 113 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -293,12 +293,49 @@ def get_queryset(self):
293293
.filter(dref__is_final_report_created=False)
294294
.distinct()
295295
)
296+
result_list = sorted(chain(dref, dref_op_update, dref_final_report), key=attrgetter("created_at"), reverse=True)
297+
dref_list = []
298+
for data in result_list:
299+
if data.__class__.__name__ == "DrefFinalReport":
300+
final_report = DrefFinalReport.objects.get(id=data.id)
301+
dref_list.append(final_report)
302+
elif data.__class__.__name__ == "DrefOperationalUpdate":
303+
operational_update = DrefOperationalUpdate.objects.get(id=data.id)
304+
dref_list.append(operational_update)
305+
elif data.__class__.__name__ == "Dref":
306+
dref = Dref.objects.get(id=data.id)
307+
dref_list.append(dref)
308+
# iterate over the list and get the dref from that
309+
# check the dref in the new list if exists
310+
# annotated dref here
311+
annoatated_drefs = []
312+
for dref in dref_list:
313+
if dref.__class__.__name__ == "DrefOperationalUpdate":
314+
# annotate the dref and other operational update for that dref
315+
operational_update = DrefOperationalUpdate.objects.get(id=dref.id)
316+
dref_object = Dref.objects.get(drefoperationalupdate=operational_update.id)
317+
if dref_object not in annoatated_drefs:
318+
annoatated_drefs.append(dref_object)
319+
elif dref.__class__.__name__ == "Dref":
320+
dref_object = Dref.objects.get(id=dref.id)
321+
if dref_object not in annoatated_drefs:
322+
annoatated_drefs.append(dref_object)
323+
elif dref.__class__.__name__ == "DrefFinalReport":
324+
final_report = DrefFinalReport.objects.get(id=dref.id)
325+
dref_object = Dref.objects.get(dreffinalreport=final_report.id)
326+
if dref_object not in annoatated_drefs:
327+
annoatated_drefs.append(dref_object)
328+
dref_list = []
329+
for dref in annoatated_drefs:
330+
new_dref = Dref.objects.get(id=dref.id)
331+
dref_list.append(new_dref.id)
332+
return Dref.objects.filter(id__in=dref_list).order_by("-created_at")
296333
else:
297334
# get current user dref regions
298335
regions = [0, 1, 2, 3, 4]
299336
for region in regions:
300337
codename = f"dref_region_admin_{region}"
301-
if Permission.objects.filter(user=user, codename=codename).exists():
338+
if Permission.objects.filter(group__user=user, codename=codename).exists():
302339
dref = (
303340
Dref.objects.prefetch_related(
304341
"planned_interventions", "needs_identified", "national_society_actions", "users"
@@ -336,47 +373,85 @@ def get_queryset(self):
336373
.filter(country__region=region, dref__is_final_report_created=False)
337374
.distinct()
338375
)
376+
result_list = sorted(chain(dref, dref_op_update, dref_final_report), key=attrgetter("created_at"), reverse=True)
377+
dref_list = []
378+
for data in result_list:
379+
if data.__class__.__name__ == "DrefFinalReport":
380+
final_report = DrefFinalReport.objects.get(id=data.id)
381+
dref_list.append(final_report)
382+
elif data.__class__.__name__ == "DrefOperationalUpdate":
383+
operational_update = DrefOperationalUpdate.objects.get(id=data.id)
384+
dref_list.append(operational_update)
385+
elif data.__class__.__name__ == "Dref":
386+
dref = Dref.objects.get(id=data.id)
387+
dref_list.append(dref)
388+
# iterate over the list and get the dref from that
389+
# check the dref in the new list if exists
390+
# annotated dref here
391+
annoatated_drefs = []
392+
for dref in dref_list:
393+
if dref.__class__.__name__ == "DrefOperationalUpdate":
394+
# annotate the dref and other operational update for that dref
395+
operational_update = DrefOperationalUpdate.objects.get(id=dref.id)
396+
dref_object = Dref.objects.get(drefoperationalupdate=operational_update.id)
397+
if dref_object not in annoatated_drefs:
398+
annoatated_drefs.append(dref_object)
399+
elif dref.__class__.__name__ == "Dref":
400+
dref_object = Dref.objects.get(id=dref.id)
401+
if dref_object not in annoatated_drefs:
402+
annoatated_drefs.append(dref_object)
403+
elif dref.__class__.__name__ == "DrefFinalReport":
404+
final_report = DrefFinalReport.objects.get(id=dref.id)
405+
dref_object = Dref.objects.get(dreffinalreport=final_report.id)
406+
if dref_object not in annoatated_drefs:
407+
annoatated_drefs.append(dref_object)
408+
dref_list = []
409+
for dref in annoatated_drefs:
410+
new_dref = Dref.objects.get(id=dref.id)
411+
dref_list.append(new_dref.id)
412+
return Dref.objects.filter(id__in=dref_list).order_by("-created_at")
339413
else:
340414
dref = Dref.get_for(user).filter(dref__is_final_report_created=False)
341415
dref_op_update = DrefOperationalUpdate.get_for(user).filter(dref__is_final_report_created=False)
342416
dref_final_report = DrefFinalReport.get_for(user).filter(dref__is_final_report_created=False)
343-
result_list = sorted(chain(dref, dref_op_update, dref_final_report), key=attrgetter("created_at"), reverse=True)
344-
dref_list = []
345-
for data in result_list:
346-
if data.__class__.__name__ == "DrefFinalReport":
347-
final_report = DrefFinalReport.objects.get(id=data.id)
348-
dref_list.append(final_report)
349-
elif data.__class__.__name__ == "DrefOperationalUpdate":
350-
operational_update = DrefOperationalUpdate.objects.get(id=data.id)
351-
dref_list.append(operational_update)
352-
elif data.__class__.__name__ == "Dref":
353-
dref = Dref.objects.get(id=data.id)
354-
dref_list.append(dref)
355-
# iterate over the list and get the dref from that
356-
# check the dref in the new list if exists
357-
# annotated dref here
358-
annoatated_drefs = []
359-
for dref in dref_list:
360-
if dref.__class__.__name__ == "DrefOperationalUpdate":
361-
# annotate the dref and other operational update for that dref
362-
operational_update = DrefOperationalUpdate.objects.get(id=dref.id)
363-
dref_object = Dref.objects.get(drefoperationalupdate=operational_update.id)
364-
if dref_object not in annoatated_drefs:
365-
annoatated_drefs.append(dref_object)
366-
elif dref.__class__.__name__ == "Dref":
367-
dref_object = Dref.objects.get(id=dref.id)
368-
if dref_object not in annoatated_drefs:
369-
annoatated_drefs.append(dref_object)
370-
elif dref.__class__.__name__ == "DrefFinalReport":
371-
final_report = DrefFinalReport.objects.get(id=dref.id)
372-
dref_object = Dref.objects.get(dreffinalreport=final_report.id)
373-
if dref_object not in annoatated_drefs:
374-
annoatated_drefs.append(dref_object)
375-
dref_list = []
376-
for dref in annoatated_drefs:
377-
new_dref = Dref.objects.get(id=dref.id)
378-
dref_list.append(new_dref.id)
379-
return Dref.objects.filter(id__in=dref_list).order_by("-created_at")
417+
result_list = sorted(chain(dref, dref_op_update, dref_final_report), key=attrgetter("created_at"), reverse=True)
418+
dref_list = []
419+
for data in result_list:
420+
if data.__class__.__name__ == "DrefFinalReport":
421+
final_report = DrefFinalReport.objects.get(id=data.id)
422+
dref_list.append(final_report)
423+
elif data.__class__.__name__ == "DrefOperationalUpdate":
424+
operational_update = DrefOperationalUpdate.objects.get(id=data.id)
425+
dref_list.append(operational_update)
426+
elif data.__class__.__name__ == "Dref":
427+
dref = Dref.objects.get(id=data.id)
428+
dref_list.append(dref)
429+
# iterate over the list and get the dref from that
430+
# check the dref in the new list if exists
431+
# annotated dref here
432+
annoatated_drefs = []
433+
for dref in dref_list:
434+
if dref.__class__.__name__ == "DrefOperationalUpdate":
435+
# annotate the dref and other operational update for that dref
436+
operational_update = DrefOperationalUpdate.objects.get(id=dref.id)
437+
dref_object = Dref.objects.get(drefoperationalupdate=operational_update.id)
438+
if dref_object not in annoatated_drefs:
439+
annoatated_drefs.append(dref_object)
440+
elif dref.__class__.__name__ == "Dref":
441+
dref_object = Dref.objects.get(id=dref.id)
442+
if dref_object not in annoatated_drefs:
443+
annoatated_drefs.append(dref_object)
444+
elif dref.__class__.__name__ == "DrefFinalReport":
445+
final_report = DrefFinalReport.objects.get(id=dref.id)
446+
dref_object = Dref.objects.get(dreffinalreport=final_report.id)
447+
if dref_object not in annoatated_drefs:
448+
annoatated_drefs.append(dref_object)
449+
dref_list = []
450+
for dref in annoatated_drefs:
451+
new_dref = Dref.objects.get(id=dref.id)
452+
dref_list.append(new_dref.id)
453+
return Dref.objects.filter(id__in=dref_list).order_by("-created_at")
454+
380455

381456

382457
class DrefShareView(views.APIView):

0 commit comments

Comments
 (0)