Skip to content

Commit ef4b1a2

Browse files
committed
Fix compute progress for optional, non-empty values (#1336)
1 parent 1d29d96 commit ef4b1a2

2 files changed

Lines changed: 11 additions & 9 deletions

File tree

rdmo/projects/progress.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ def resolve_conditions(catalog, values, sets):
3939
return conditions
4040

4141

42-
def compute_sets(values):
42+
def compute_sets(values_list):
4343
# compute sets from values (including empty values)
4444
sets = defaultdict(set)
45-
for attribute, set_prefix, set_index in values.distinct_list():
45+
for attribute, set_prefix, set_index in values_list:
4646
sets[attribute].add((set_prefix, set_index))
4747
return sets
4848

@@ -90,7 +90,7 @@ def compute_navigation(section, project, snapshot=None):
9090
values = project.values.filter(snapshot=snapshot).select_related('attribute', 'option')
9191

9292
# compute sets from values (including empty values)
93-
sets = compute_sets(values)
93+
sets = compute_sets(values.distinct_list())
9494

9595
# resolve all conditions to get a dict mapping conditions to set_indexes
9696
conditions = resolve_conditions(project.catalog, values, sets)
@@ -146,19 +146,21 @@ def compute_progress(project, snapshot=None):
146146
values = project.values.filter(snapshot=snapshot).select_related('attribute', 'option')
147147

148148
# compute sets from values (including empty values)
149-
sets = compute_sets(values)
149+
sets = compute_sets(values.distinct_list())
150150

151151
# resolve all conditions to get a dict mapping conditions to set_indexes
152152
conditions = resolve_conditions(project.catalog, values, sets)
153153

154-
# query distinct, non empty set values
155-
values_list = values.exclude_empty().distinct_list()
154+
# query distinct, non empty set values and compute sets again
155+
non_empty_values = values.exclude_empty()
156+
non_empty_values_list = non_empty_values.distinct_list()
157+
non_empty_sets = compute_sets(non_empty_values_list)
156158

157159
# count the total number of questions, taking sets and conditions into account
158-
counts = count_questions(project.catalog, sets, conditions)
160+
counts = count_questions(project.catalog, non_empty_sets, conditions)
159161

160162
# filter the values_list for the attributes, and compute the total sum of counts
161-
count = sum(1 for value in values_list if value[0] in counts)
163+
count = sum(1 for value in non_empty_values_list if value[0] in counts)
162164
total = sum(counts.values())
163165

164166
return count, total

rdmo/projects/viewsets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -700,7 +700,7 @@ def retrieve(self, request, *args, **kwargs):
700700
catalog = self.project.catalog
701701
values = self.project.values.filter(snapshot=None).select_related('attribute', 'option')
702702

703-
sets = compute_sets(values)
703+
sets = compute_sets(values.distinct_list())
704704
resolved_conditions = resolve_conditions(catalog, values, sets)
705705

706706
# check if the current page meets conditions

0 commit comments

Comments
 (0)