|
5 | 5 | import django.utils.timezone as timezone |
6 | 6 | from reversion.views import RevisionMixin |
7 | 7 | from django.contrib.auth.models import Permission |
| 8 | +from django.db import models |
8 | 9 |
|
9 | 10 | from rest_framework import ( |
10 | 11 | views, |
@@ -59,8 +60,24 @@ def get_queryset(self): |
59 | 60 | ) |
60 | 61 | if user.is_superuser: |
61 | 62 | return queryset |
62 | | - else: |
63 | | - return Dref.get_for(user) |
| 63 | + elif not user.is_superuser: |
| 64 | + # get current user dref regions |
| 65 | + regions = [0, 1, 2, 3, 4] |
| 66 | + dref_list = [] |
| 67 | + for region in regions: |
| 68 | + codename = f"dref_region_admin_{region}" |
| 69 | + if Permission.objects.filter(group__user=user, codename=codename).exists(): |
| 70 | + _queryset = queryset.filter(country__region=region).distinct() |
| 71 | + dref_list.append(_queryset) |
| 72 | + drefs = [] |
| 73 | + for dref in dref_list: |
| 74 | + id = list(dref.values_list('id', flat=True)) |
| 75 | + new_dref = Dref.objects.filter(id__in=id).first() |
| 76 | + drefs.append(new_dref.id) |
| 77 | + if len(drefs): |
| 78 | + return queryset.filter(models.Q(id__in=drefs) | models.Q(created_by=user)).distinct() |
| 79 | + else: |
| 80 | + return Dref.get_for(user) |
64 | 81 |
|
65 | 82 | @action( |
66 | 83 | detail=True, |
@@ -109,8 +126,24 @@ def get_queryset(self): |
109 | 126 | ) |
110 | 127 | if user.is_superuser: |
111 | 128 | return queryset |
112 | | - else: |
113 | | - return DrefOperationalUpdate.get_for(user) |
| 129 | + elif not user.is_superuser: |
| 130 | + # get current user dref regions |
| 131 | + regions = [0, 1, 2, 3, 4] |
| 132 | + dref_op_list = [] |
| 133 | + for region in regions: |
| 134 | + codename = f"dref_region_admin_{region}" |
| 135 | + if Permission.objects.filter(group__user=user, codename=codename).exists(): |
| 136 | + _queryset = queryset.filter(country__region=region).distinct() |
| 137 | + dref_op_list.append(_queryset) |
| 138 | + ops = [] |
| 139 | + for op in dref_op_list: |
| 140 | + id = list(op.values_list('id', flat=True)) |
| 141 | + new_dref_op = DrefOperationalUpdate.objects.filter(id__in=id).first() |
| 142 | + ops.append(new_dref_op.id) |
| 143 | + if len(ops): |
| 144 | + return queryset.filter(models.Q(id__in=ops) | models.Q(created_by=user)).distinct() |
| 145 | + else: |
| 146 | + return DrefOperationalUpdate.get_for(user) |
114 | 147 |
|
115 | 148 | @action( |
116 | 149 | detail=True, |
@@ -144,8 +177,24 @@ def get_queryset(self): |
144 | 177 | ) |
145 | 178 | if user.is_superuser: |
146 | 179 | return queryset |
147 | | - else: |
148 | | - return DrefFinalReport.get_for(user) |
| 180 | + elif not user.is_superuser: |
| 181 | + # get current user dref regions |
| 182 | + regions = [0, 1, 2, 3, 4] |
| 183 | + dref_final_list = [] |
| 184 | + for region in regions: |
| 185 | + codename = f"dref_region_admin_{region}" |
| 186 | + if Permission.objects.filter(group__user=user, codename=codename).exists(): |
| 187 | + _queryset = queryset.filter(country__region=region).distinct() |
| 188 | + dref_final_list.append(_queryset) |
| 189 | + finals = [] |
| 190 | + for final in dref_final_list: |
| 191 | + id = list(final.values_list('id', flat=True)) |
| 192 | + new_final = DrefFinalReport.objects.filter(id__in=id).first() |
| 193 | + finals.append(new_final.id) |
| 194 | + if len(finals): |
| 195 | + return queryset.filter(models.Q(id__in=finals) | models.Q(created_by=user)).distinct() |
| 196 | + else: |
| 197 | + return DrefFinalReport.get_for(user) |
149 | 198 |
|
150 | 199 | @action( |
151 | 200 | detail=True, |
|
0 commit comments