Commit af21a506a2675c18239f431c9705893d2050cee5
1 parent
f852e9fc
Exists in
master
and in
3 other branches
added support for topic filtering on reports
Showing
1 changed file
with
37 additions
and
12 deletions
Show diff stats
reports/views.py
@@ -139,7 +139,7 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -139,7 +139,7 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
139 | 139 | ||
140 | self.from_mural = params_data['from_mural'] | 140 | self.from_mural = params_data['from_mural'] |
141 | 141 | ||
142 | - context['data'], context['header'] = self.get_mural_data(subject, params_data['init_date'], params_data['end_date'], | 142 | + context['data'], context['header'] = self.get_mural_data(subject, context['topic_name'], params_data['init_date'], params_data['end_date'], |
143 | resources, tags ) | 143 | resources, tags ) |
144 | 144 | ||
145 | 145 | ||
@@ -168,7 +168,15 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -168,7 +168,15 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
168 | 168 | ||
169 | return context | 169 | return context |
170 | 170 | ||
171 | - def get_mural_data(self, subject, init_date, end_date, resources_id, tags_id): | 171 | + """ |
172 | + Subject: subject where the report is being created | ||
173 | + topics_query: it's either one of the topics or all of them | ||
174 | + init_date: When the reports filter of dates stars | ||
175 | + end_date: When the reports filter of dates end | ||
176 | + resources_type_names: resources subclasses name that were selected | ||
177 | + tags_id = ID of tag objects that were selected | ||
178 | + """ | ||
179 | + def get_mural_data(self, subject, topics_query, init_date, end_date, resources_type_names, tags_id): | ||
172 | data = {} | 180 | data = {} |
173 | students = subject.students.all() | 181 | students = subject.students.all() |
174 | formats = ["%d/%m/%Y", "%m/%d/%Y", "%Y-%m-%d"] #so it accepts english and portuguese date formats | 182 | formats = ["%d/%m/%Y", "%m/%d/%Y", "%Y-%m-%d"] #so it accepts english and portuguese date formats |
@@ -179,7 +187,10 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -179,7 +187,10 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
179 | 187 | ||
180 | except ValueError: | 188 | except ValueError: |
181 | pass | 189 | pass |
182 | - | 190 | + if topics_query == _("All"): |
191 | + topics = subject.topic_subject.all() | ||
192 | + else: | ||
193 | + topics = Topic.objects.get(id=topics_query) | ||
183 | header = ['User'] | 194 | header = ['User'] |
184 | 195 | ||
185 | #I use this so the system can gather data up to end_date 11h59 p.m. | 196 | #I use this so the system can gather data up to end_date 11h59 p.m. |
@@ -242,8 +253,8 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -242,8 +253,8 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
242 | 253 | ||
243 | 254 | ||
244 | #VAR08 through VAR_019 of documenttation: | 255 | #VAR08 through VAR_019 of documenttation: |
245 | - if len(resources_id) > 0: | ||
246 | - resources_data = self.get_resources_and_tags_data(resources_id, tags_id, student, subject, init_date, end_date) | 256 | + if len(resources_type_names) > 0: |
257 | + resources_data = self.get_resources_and_tags_data(resources_type_names, tags_id, student, subject, topics, init_date, end_date) | ||
247 | for key, value in resources_data.items(): | 258 | for key, value in resources_data.items(): |
248 | interactions[key] = value | 259 | interactions[key] = value |
249 | 260 | ||
@@ -285,18 +296,32 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -285,18 +296,32 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
285 | header.append(key) | 296 | header.append(key) |
286 | return data, header | 297 | return data, header |
287 | 298 | ||
288 | - def get_resources_and_tags_data(self, resources_types, tags, student, subject, init_date, end_date): | 299 | + def get_resources_and_tags_data(self, resources_types, tags, student, subject, topics, init_date, end_date): |
289 | data = OrderedDict() | 300 | data = OrderedDict() |
290 | - print(tags) | 301 | + |
291 | for i in range(len(resources_types)): | 302 | for i in range(len(resources_types)): |
292 | 303 | ||
293 | - resources = Resource.objects.select_related(resources_types[i].lower()).filter(tags__in = tags, topic__in=subject.topic_subject.all()) | 304 | + if isinstance(topics,Topic): |
305 | + resources = Resource.objects.select_related(resources_types[i].lower()).filter(tags__in = tags, topic=topics) | ||
306 | + else: | ||
307 | + resources = Resource.objects.select_related(resources_types[i].lower()).filter(tags__in = tags, topic__in=topics) | ||
294 | distinct_resources = 0 | 308 | distinct_resources = 0 |
295 | total_count = 0 | 309 | total_count = 0 |
310 | + | ||
296 | for resource in resources: | 311 | for resource in resources: |
297 | - count = Log.objects.filter(action="view", resource=resources_types[i].lower(), | ||
298 | - user_id = student.id, context__contains = {'subject_id': subject.id, | ||
299 | - resources_types[i].lower()+'_id': resource.id}, datetime__range=(init_date, end_date)).count() | 312 | + if isinstance(topics,Topic): |
313 | + #or it selected only one topic to work with | ||
314 | + count = Log.objects.filter(action="view", resource=resources_types[i].lower(), | ||
315 | + user_id = student.id, context__contains = {'subject_id': subject.id, | ||
316 | + resources_types[i].lower()+'_id': resource.id, 'topic_id': topics.id}, datetime__range=(init_date, end_date)).count() | ||
317 | + | ||
318 | + else: | ||
319 | + #or the user selected all | ||
320 | + | ||
321 | + count = Log.objects.filter(action="view", resource=resources_types[i].lower(), | ||
322 | + user_id = student.id, context__contains = {'subject_id': subject.id, | ||
323 | + resources_types[i].lower()+'_id': resource.id}, datetime__range=(init_date, end_date)).count() | ||
324 | + | ||
300 | if count > 0: | 325 | if count > 0: |
301 | distinct_resources += 1 | 326 | distinct_resources += 1 |
302 | total_count += count | 327 | total_count += count |
@@ -368,7 +393,7 @@ def get_tags(request): | @@ -368,7 +393,7 @@ def get_tags(request): | ||
368 | 393 | ||
369 | #adding empty tag for the purpose of giving the user this option for adicional behavior | 394 | #adding empty tag for the purpose of giving the user this option for adicional behavior |
370 | tags = list(tags) | 395 | tags = list(tags) |
371 | - tags.append(Tag(name="")) | 396 | + tags.append(Tag(name=" ")) |
372 | data['tags'] = [ {'id':tag.id, 'name':tag.name} for tag in tags] | 397 | data['tags'] = [ {'id':tag.id, 'name':tag.name} for tag in tags] |
373 | return JsonResponse(data) | 398 | return JsonResponse(data) |
374 | 399 |