Skip to content

Commit 1a9223c

Browse files
committed
Change logic for normal user
1 parent 8f044b5 commit 1a9223c

File tree

2 files changed

+98
-93
lines changed

2 files changed

+98
-93
lines changed

dref/serializers.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,17 +179,11 @@ class Meta:
179179
]
180180

181181
def get_operational_update_details(self, obj):
182-
type_of_dref = self.context['view'].kwargs.get('type_of_dref')
183-
queryset = DrefOperationalUpdate.objects.filter(dref_id=obj.id)
184-
if type_of_dref:
185-
queryset = queryset.filter(type_of_dref=type_of_dref)
182+
queryset = DrefOperationalUpdate.objects.filter(dref_id=obj.id).order_by('-created_at')
186183
return MiniOperationalUpdateSerializer(queryset, many=True).data
187184

188185
def get_final_report_details(self, obj):
189-
type_of_dref = self.context['view'].kwargs.get('type_of_dref')
190186
queryset = DrefFinalReport.objects.filter(dref_id=obj.id)
191-
if type_of_dref:
192-
queryset = queryset.filter(type_of_dref=type_of_dref)
193187
return MiniDrefFinalReportSerializer(queryset, many=True).data
194188

195189
def get_has_ops_update(self, obj):

dref/views.py

Lines changed: 97 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -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

251259
class 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

457468
class DrefShareView(views.APIView):

0 commit comments

Comments
 (0)