Skip to content

Commit daa0b16

Browse files
fix: cycle and module stats when issues are archived (#2185)
* fix: cycle and module stats when issues are archived * fix: added draft filter --------- Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
1 parent 0005ff5 commit daa0b16

File tree

3 files changed

+198
-36
lines changed

3 files changed

+198
-36
lines changed

apiserver/plane/api/views/cycle.py

Lines changed: 108 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -102,48 +102,84 @@ def get_queryset(self):
102102
.select_related("workspace")
103103
.select_related("owned_by")
104104
.annotate(is_favorite=Exists(subquery))
105-
.annotate(total_issues=Count("issue_cycle"))
105+
.annotate(
106+
total_issues=Count(
107+
"issue_cycle",
108+
filter=Q(
109+
issue_cycle__issue__archived_at__isnull=True,
110+
issue_cycle__issue__is_draft=False,
111+
),
112+
)
113+
)
106114
.annotate(
107115
completed_issues=Count(
108116
"issue_cycle__issue__state__group",
109-
filter=Q(issue_cycle__issue__state__group="completed"),
117+
filter=Q(
118+
issue_cycle__issue__state__group="completed",
119+
issue_cycle__issue__archived_at__isnull=True,
120+
issue_cycle__issue__is_draft=False,
121+
),
110122
)
111123
)
112124
.annotate(
113125
cancelled_issues=Count(
114126
"issue_cycle__issue__state__group",
115-
filter=Q(issue_cycle__issue__state__group="cancelled"),
127+
filter=Q(
128+
issue_cycle__issue__state__group="cancelled",
129+
issue_cycle__issue__archived_at__isnull=True,
130+
issue_cycle__issue__is_draft=False,
131+
),
116132
)
117133
)
118134
.annotate(
119135
started_issues=Count(
120136
"issue_cycle__issue__state__group",
121-
filter=Q(issue_cycle__issue__state__group="started"),
137+
filter=Q(
138+
issue_cycle__issue__state__group="started",
139+
issue_cycle__issue__archived_at__isnull=True,
140+
issue_cycle__issue__is_draft=False,
141+
),
122142
)
123143
)
124144
.annotate(
125145
unstarted_issues=Count(
126146
"issue_cycle__issue__state__group",
127-
filter=Q(issue_cycle__issue__state__group="unstarted"),
147+
filter=Q(
148+
issue_cycle__issue__state__group="unstarted",
149+
issue_cycle__issue__archived_at__isnull=True,
150+
issue_cycle__issue__is_draft=False,
151+
),
128152
)
129153
)
130154
.annotate(
131155
backlog_issues=Count(
132156
"issue_cycle__issue__state__group",
133-
filter=Q(issue_cycle__issue__state__group="backlog"),
157+
filter=Q(
158+
issue_cycle__issue__state__group="backlog",
159+
issue_cycle__issue__archived_at__isnull=True,
160+
issue_cycle__issue__is_draft=False,
161+
),
134162
)
135163
)
136164
.annotate(total_estimates=Sum("issue_cycle__issue__estimate_point"))
137165
.annotate(
138166
completed_estimates=Sum(
139167
"issue_cycle__issue__estimate_point",
140-
filter=Q(issue_cycle__issue__state__group="completed"),
168+
filter=Q(
169+
issue_cycle__issue__state__group="completed",
170+
issue_cycle__issue__archived_at__isnull=True,
171+
issue_cycle__issue__is_draft=False,
172+
),
141173
)
142174
)
143175
.annotate(
144176
started_estimates=Sum(
145177
"issue_cycle__issue__estimate_point",
146-
filter=Q(issue_cycle__issue__state__group="started"),
178+
filter=Q(
179+
issue_cycle__issue__state__group="started",
180+
issue_cycle__issue__archived_at__isnull=True,
181+
issue_cycle__issue__is_draft=False,
182+
),
147183
)
148184
)
149185
.prefetch_related(
@@ -196,17 +232,30 @@ def list(self, request, slug, project_id):
196232
.annotate(assignee_id=F("assignees__id"))
197233
.annotate(avatar=F("assignees__avatar"))
198234
.values("display_name", "assignee_id", "avatar")
199-
.annotate(total_issues=Count("assignee_id"))
235+
.annotate(
236+
total_issues=Count(
237+
"assignee_id",
238+
filter=Q(archived_at__isnull=True, is_draft=False),
239+
),
240+
)
200241
.annotate(
201242
completed_issues=Count(
202243
"assignee_id",
203-
filter=Q(completed_at__isnull=False),
244+
filter=Q(
245+
completed_at__isnull=False,
246+
archived_at__isnull=True,
247+
is_draft=False,
248+
),
204249
)
205250
)
206251
.annotate(
207252
pending_issues=Count(
208253
"assignee_id",
209-
filter=Q(completed_at__isnull=True),
254+
filter=Q(
255+
completed_at__isnull=True,
256+
archived_at__isnull=True,
257+
is_draft=False,
258+
),
210259
)
211260
)
212261
.order_by("display_name")
@@ -222,17 +271,30 @@ def list(self, request, slug, project_id):
222271
.annotate(color=F("labels__color"))
223272
.annotate(label_id=F("labels__id"))
224273
.values("label_name", "color", "label_id")
225-
.annotate(total_issues=Count("label_id"))
274+
.annotate(
275+
total_issues=Count(
276+
"label_id",
277+
filter=Q(archived_at__isnull=True, is_draft=False),
278+
)
279+
)
226280
.annotate(
227281
completed_issues=Count(
228282
"label_id",
229-
filter=Q(completed_at__isnull=False),
283+
filter=Q(
284+
completed_at__isnull=False,
285+
archived_at__isnull=True,
286+
is_draft=False,
287+
),
230288
)
231289
)
232290
.annotate(
233291
pending_issues=Count(
234292
"label_id",
235-
filter=Q(completed_at__isnull=True),
293+
filter=Q(
294+
completed_at__isnull=True,
295+
archived_at__isnull=True,
296+
is_draft=False,
297+
),
236298
)
237299
)
238300
.order_by("label_name")
@@ -385,17 +447,30 @@ def retrieve(self, request, slug, project_id, pk):
385447
.values(
386448
"first_name", "last_name", "assignee_id", "avatar", "display_name"
387449
)
388-
.annotate(total_issues=Count("assignee_id"))
450+
.annotate(
451+
total_issues=Count(
452+
"assignee_id",
453+
filter=Q(archived_at__isnull=True, is_draft=False),
454+
),
455+
)
389456
.annotate(
390457
completed_issues=Count(
391458
"assignee_id",
392-
filter=Q(completed_at__isnull=False),
459+
filter=Q(
460+
completed_at__isnull=False,
461+
archived_at__isnull=True,
462+
is_draft=False,
463+
),
393464
)
394465
)
395466
.annotate(
396467
pending_issues=Count(
397468
"assignee_id",
398-
filter=Q(completed_at__isnull=True),
469+
filter=Q(
470+
completed_at__isnull=True,
471+
archived_at__isnull=True,
472+
is_draft=False,
473+
),
399474
)
400475
)
401476
.order_by("first_name", "last_name")
@@ -412,17 +487,30 @@ def retrieve(self, request, slug, project_id, pk):
412487
.annotate(color=F("labels__color"))
413488
.annotate(label_id=F("labels__id"))
414489
.values("label_name", "color", "label_id")
415-
.annotate(total_issues=Count("label_id"))
490+
.annotate(
491+
total_issues=Count(
492+
"label_id",
493+
filter=Q(archived_at__isnull=True, is_draft=False),
494+
),
495+
)
416496
.annotate(
417497
completed_issues=Count(
418498
"label_id",
419-
filter=Q(completed_at__isnull=False),
499+
filter=Q(
500+
completed_at__isnull=False,
501+
archived_at__isnull=True,
502+
is_draft=False,
503+
),
420504
)
421505
)
422506
.annotate(
423507
pending_issues=Count(
424508
"label_id",
425-
filter=Q(completed_at__isnull=True),
509+
filter=Q(
510+
completed_at__isnull=True,
511+
archived_at__isnull=True,
512+
is_draft=False,
513+
),
426514
)
427515
)
428516
.order_by("label_name")

apiserver/plane/api/views/module.py

Lines changed: 76 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
from plane.utils.issue_filters import issue_filters
4141
from plane.utils.analytics_plot import burndown_plot
4242

43+
4344
class ModuleViewSet(BaseViewSet):
4445
model = Module
4546
permission_classes = [
@@ -78,35 +79,63 @@ def get_queryset(self):
7879
queryset=ModuleLink.objects.select_related("module", "created_by"),
7980
)
8081
)
81-
.annotate(total_issues=Count("issue_module"))
82+
.annotate(
83+
total_issues=Count(
84+
"issue_module",
85+
filter=Q(
86+
issue_module__issue__archived_at__isnull=True,
87+
issue_module__issue__is_draft=False,
88+
),
89+
),
90+
)
8291
.annotate(
8392
completed_issues=Count(
8493
"issue_module__issue__state__group",
85-
filter=Q(issue_module__issue__state__group="completed"),
94+
filter=Q(
95+
issue_module__issue__state__group="completed",
96+
issue_module__issue__archived_at__isnull=True,
97+
issue_module__issue__is_draft=False,
98+
),
8699
)
87100
)
88101
.annotate(
89102
cancelled_issues=Count(
90103
"issue_module__issue__state__group",
91-
filter=Q(issue_module__issue__state__group="cancelled"),
104+
filter=Q(
105+
issue_module__issue__state__group="cancelled",
106+
issue_module__issue__archived_at__isnull=True,
107+
issue_module__issue__is_draft=False,
108+
),
92109
)
93110
)
94111
.annotate(
95112
started_issues=Count(
96113
"issue_module__issue__state__group",
97-
filter=Q(issue_module__issue__state__group="started"),
114+
filter=Q(
115+
issue_module__issue__state__group="started",
116+
issue_module__issue__archived_at__isnull=True,
117+
issue_module__issue__is_draft=False,
118+
),
98119
)
99120
)
100121
.annotate(
101122
unstarted_issues=Count(
102123
"issue_module__issue__state__group",
103-
filter=Q(issue_module__issue__state__group="unstarted"),
124+
filter=Q(
125+
issue_module__issue__state__group="unstarted",
126+
issue_module__issue__archived_at__isnull=True,
127+
issue_module__issue__is_draft=False,
128+
),
104129
)
105130
)
106131
.annotate(
107132
backlog_issues=Count(
108133
"issue_module__issue__state__group",
109-
filter=Q(issue_module__issue__state__group="backlog"),
134+
filter=Q(
135+
issue_module__issue__state__group="backlog",
136+
issue_module__issue__archived_at__isnull=True,
137+
issue_module__issue__is_draft=False,
138+
),
110139
)
111140
)
112141
.order_by(order_by, "name")
@@ -179,18 +208,36 @@ def retrieve(self, request, slug, project_id, pk):
179208
.annotate(assignee_id=F("assignees__id"))
180209
.annotate(display_name=F("assignees__display_name"))
181210
.annotate(avatar=F("assignees__avatar"))
182-
.values("first_name", "last_name", "assignee_id", "avatar", "display_name")
183-
.annotate(total_issues=Count("assignee_id"))
211+
.values(
212+
"first_name", "last_name", "assignee_id", "avatar", "display_name"
213+
)
214+
.annotate(
215+
total_issues=Count(
216+
"assignee_id",
217+
filter=Q(
218+
archived_at__isnull=True,
219+
is_draft=False,
220+
),
221+
)
222+
)
184223
.annotate(
185224
completed_issues=Count(
186225
"assignee_id",
187-
filter=Q(completed_at__isnull=False),
226+
filter=Q(
227+
completed_at__isnull=False,
228+
archived_at__isnull=True,
229+
is_draft=False,
230+
),
188231
)
189232
)
190233
.annotate(
191234
pending_issues=Count(
192235
"assignee_id",
193-
filter=Q(completed_at__isnull=True),
236+
filter=Q(
237+
completed_at__isnull=True,
238+
archived_at__isnull=True,
239+
is_draft=False,
240+
),
194241
)
195242
)
196243
.order_by("first_name", "last_name")
@@ -206,17 +253,33 @@ def retrieve(self, request, slug, project_id, pk):
206253
.annotate(color=F("labels__color"))
207254
.annotate(label_id=F("labels__id"))
208255
.values("label_name", "color", "label_id")
209-
.annotate(total_issues=Count("label_id"))
256+
.annotate(
257+
total_issues=Count(
258+
"label_id",
259+
filter=Q(
260+
archived_at__isnull=True,
261+
is_draft=False,
262+
),
263+
),
264+
)
210265
.annotate(
211266
completed_issues=Count(
212267
"label_id",
213-
filter=Q(completed_at__isnull=False),
268+
filter=Q(
269+
completed_at__isnull=False,
270+
archived_at__isnull=True,
271+
is_draft=False,
272+
),
214273
)
215274
)
216275
.annotate(
217276
pending_issues=Count(
218277
"label_id",
219-
filter=Q(completed_at__isnull=True),
278+
filter=Q(
279+
completed_at__isnull=True,
280+
archived_at__isnull=True,
281+
is_draft=False,
282+
),
220283
)
221284
)
222285
.order_by("label_name")
@@ -494,7 +557,6 @@ def get_queryset(self):
494557

495558

496559
class ModuleFavoriteViewSet(BaseViewSet):
497-
498560
serializer_class = ModuleFavoriteSerializer
499561
model = ModuleFavorite
500562

0 commit comments

Comments
 (0)