@@ -230,11 +230,12 @@ def get_queryset(self):
230230 queryset = DrefFinalReport .objects .filter (is_published = True ).order_by ("-created_at" ).distinct ()
231231 if user .is_superuser :
232232 return queryset
233- else :
233+ elif not user . is_superuser :
234234 regions = [0 , 1 , 2 , 3 , 4 ]
235+ final_report_list = []
235236 for region in regions :
236237 codename = f"dref_region_admin_{ region } "
237- if Permission .objects .filter (user = user , codename = codename ).exists ():
238+ if Permission .objects .filter (group__user = user , codename = codename ).exists ():
238239 final_report = (
239240 DrefFinalReport .objects .prefetch_related (
240241 "dref__planned_interventions" ,
@@ -243,9 +244,16 @@ def get_queryset(self):
243244 .filter (country__region = region , is_published = True )
244245 .distinct ()
245246 )
246- return final_report
247- else :
248- return DrefFinalReport .get_for (user , is_published = True )
247+ final_report_list .append (final_report )
248+ final = []
249+ for final_report in final_report_list :
250+ id = list (final_report .values_list ('id' , flat = True ))
251+ new_dref = DrefFinalReport .objects .filter (id__in = id ).first ()
252+ final .append (new_dref .id )
253+ if len (final ):
254+ return DrefFinalReport .objects .filter (id__in = final ).order_by ('-created_at' )
255+ else :
256+ return DrefFinalReport .get_for (user )
249257
250258
251259class ActiveDrefOperationsViewSet (viewsets .ReadOnlyModelViewSet ):
@@ -283,7 +291,7 @@ def get_queryset(self):
283291 "photos" ,
284292 )
285293 .filter (dref__is_final_report_created = False )
286- .distinct ()
294+ .order_by ( '-operational_update_number' ). distinct ()
287295 )
288296 dref_final_report = (
289297 DrefFinalReport .objects .prefetch_related (
@@ -330,9 +338,10 @@ def get_queryset(self):
330338 new_dref = Dref .objects .get (id = dref .id )
331339 dref_list .append (new_dref .id )
332340 return Dref .objects .filter (id__in = dref_list ).order_by ("-created_at" )
333- else :
341+ elif not user . is_superuser :
334342 # get current user dref regions
335343 regions = [0 , 1 , 2 , 3 , 4 ]
344+ final_report_list = []
336345 for region in regions :
337346 codename = f"dref_region_admin_{ region } "
338347 if Permission .objects .filter (group__user = user , codename = codename ).exists ():
@@ -363,7 +372,7 @@ def get_queryset(self):
363372 "photos" ,
364373 )
365374 .filter (country__region = region , dref__is_final_report_created = False )
366- .distinct ()
375+ .order_by ( '-operational_update_number' ). distinct ()
367376 )
368377 dref_final_report = (
369378 DrefFinalReport .objects .prefetch_related (
@@ -374,84 +383,86 @@ def get_queryset(self):
374383 .distinct ()
375384 )
376385 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" )
413- else :
414- dref = Dref .get_for (user ).filter (dref__is_final_report_created = False )
415- dref_op_update = DrefOperationalUpdate .get_for (user ).filter (dref__is_final_report_created = False )
416- dref_final_report = DrefFinalReport .get_for (user ).filter (dref__is_final_report_created = False )
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-
386+ final_report_list .append (result_list )
387+ dref_list = []
388+ for data in final_report_list :
389+ for new in data :
390+ if new .__class__ .__name__ == "DrefFinalReport" :
391+ final_report = DrefFinalReport .objects .get (id = new .id )
392+ dref_list .append (final_report )
393+ elif new .__class__ .__name__ == "DrefOperationalUpdate" :
394+ operational_update = DrefOperationalUpdate .objects .get (id = new .id )
395+ dref_list .append (operational_update )
396+ elif new .__class__ .__name__ == "Dref" :
397+ dref = Dref .objects .get (id = new .id )
398+ dref_list .append (dref )
399+ # iterate over the list and get the dref from that
400+ # check the dref in the new list if exists
401+ # annotated dref here
402+ annoatated_drefs = []
403+ for dref in dref_list :
404+ if dref .__class__ .__name__ == "DrefOperationalUpdate" :
405+ # annotate the dref and other operational update for that dref
406+ operational_update = DrefOperationalUpdate .objects .get (id = dref .id )
407+ dref_object = Dref .objects .get (drefoperationalupdate = operational_update .id )
408+ if dref_object not in annoatated_drefs :
409+ annoatated_drefs .append (dref_object )
410+ elif dref .__class__ .__name__ == "Dref" :
411+ dref_object = Dref .objects .get (id = dref .id )
412+ if dref_object not in annoatated_drefs :
413+ annoatated_drefs .append (dref_object )
414+ elif dref .__class__ .__name__ == "DrefFinalReport" :
415+ final_report = DrefFinalReport .objects .get (id = dref .id )
416+ dref_object = Dref .objects .get (dreffinalreport = final_report .id )
417+ if dref_object not in annoatated_drefs :
418+ annoatated_drefs .append (dref_object )
419+ dref_list = []
420+ for dref in annoatated_drefs :
421+ new_dref = Dref .objects .get (id = dref .id )
422+ dref_list .append (new_dref .id )
423+ if len (dref_list ):
424+ return Dref .objects .filter (id__in = dref_list ).order_by ("-created_at" )
425+ else :
426+ dref = Dref .get_for (user ).filter (is_final_report_created = False )
427+ dref_op_update = DrefOperationalUpdate .get_for (user ).filter (dref__is_final_report_created = False )
428+ dref_final_report = DrefFinalReport .get_for (user ).filter (dref__is_final_report_created = False )
429+ result_list = sorted (chain (dref , dref_op_update , dref_final_report ), key = attrgetter ("created_at" ), reverse = True )
430+ dref_list = []
431+ for data in result_list :
432+ if data .__class__ .__name__ == "DrefFinalReport" :
433+ final_report = DrefFinalReport .objects .get (id = data .id )
434+ dref_list .append (final_report )
435+ elif data .__class__ .__name__ == "DrefOperationalUpdate" :
436+ operational_update = DrefOperationalUpdate .objects .get (id = data .id )
437+ dref_list .append (operational_update )
438+ elif data .__class__ .__name__ == "Dref" :
439+ dref = Dref .objects .get (id = data .id )
440+ dref_list .append (dref )
441+ # iterate over the list and get the dref from that
442+ # check the dref in the new list if exists
443+ # annotated dref here
444+ annoatated_drefs = []
445+ for dref in dref_list :
446+ if dref .__class__ .__name__ == "DrefOperationalUpdate" :
447+ # annotate the dref and other operational update for that dref
448+ operational_update = DrefOperationalUpdate .objects .get (id = dref .id )
449+ dref_object = Dref .objects .get (drefoperationalupdate = operational_update .id )
450+ if dref_object not in annoatated_drefs :
451+ annoatated_drefs .append (dref_object )
452+ elif dref .__class__ .__name__ == "Dref" :
453+ dref_object = Dref .objects .get (id = dref .id )
454+ if dref_object not in annoatated_drefs :
455+ annoatated_drefs .append (dref_object )
456+ elif dref .__class__ .__name__ == "DrefFinalReport" :
457+ final_report = DrefFinalReport .objects .get (id = dref .id )
458+ dref_object = Dref .objects .get (dreffinalreport = final_report .id )
459+ if dref_object not in annoatated_drefs :
460+ annoatated_drefs .append (dref_object )
461+ dref_list = []
462+ for dref in annoatated_drefs :
463+ new_dref = Dref .objects .get (id = dref .id )
464+ dref_list .append (new_dref .id )
465+ return Dref .objects .filter (id__in = dref_list ).order_by ("-created_at" )
455466
456467
457468class DrefShareView (views .APIView ):
0 commit comments