Commit bdf8fa6b7bafcf776529b03af62ef0c17bc0c840
1 parent
663bcb2b
Exists in
master
and in
2 other branches
solved empty tag for single and multiple topics options
Showing
2 changed files
with
64 additions
and
30 deletions
Show diff stats
reports/forms.py
@@ -29,7 +29,6 @@ class ResourceAndTagForm(forms.Form): | @@ -29,7 +29,6 @@ class ResourceAndTagForm(forms.Form): | ||
29 | initial = kwargs['initial'] | 29 | initial = kwargs['initial'] |
30 | self.fields['resource'].choices = [(classes.__name__.lower(), classes.__name__.lower()) for classes in initial['class_name']] | 30 | self.fields['resource'].choices = [(classes.__name__.lower(), classes.__name__.lower()) for classes in initial['class_name']] |
31 | self.fields['tag'].choices = [(tag.id, tag.name) for tag in initial['tag']] | 31 | self.fields['tag'].choices = [(tag.id, tag.name) for tag in initial['tag']] |
32 | - | ||
33 | 32 | ||
34 | 33 | ||
35 | class CreateInteractionReportForm(forms.Form): | 34 | class CreateInteractionReportForm(forms.Form): |
reports/views.py
@@ -23,6 +23,7 @@ import pandas as pd | @@ -23,6 +23,7 @@ import pandas as pd | ||
23 | import math | 23 | import math |
24 | from io import BytesIO | 24 | from io import BytesIO |
25 | import os | 25 | import os |
26 | +import copy | ||
26 | 27 | ||
27 | class ReportView(LoginRequiredMixin, generic.FormView): | 28 | class ReportView(LoginRequiredMixin, generic.FormView): |
28 | template_name = "reports/create.html" | 29 | template_name = "reports/create.html" |
@@ -46,19 +47,7 @@ class ReportView(LoginRequiredMixin, generic.FormView): | @@ -46,19 +47,7 @@ class ReportView(LoginRequiredMixin, generic.FormView): | ||
46 | context = super(ReportView, self).get_context_data(**kwargs) | 47 | context = super(ReportView, self).get_context_data(**kwargs) |
47 | subject = Subject.objects.get(id=self.request.GET['subject_id']) | 48 | subject = Subject.objects.get(id=self.request.GET['subject_id']) |
48 | 49 | ||
49 | - context['subject'] = subject | ||
50 | - | ||
51 | - topics = subject.topic_subject.all() | ||
52 | - #get all resources associated with topics | ||
53 | - tags = [] | ||
54 | - for topic in topics: | ||
55 | - resources_set = topic.resource_topic.all() | ||
56 | - for resource in resources_set: | ||
57 | - for tag in resource.tags.all(): | ||
58 | - tags.append(tag) | ||
59 | - | ||
60 | - | ||
61 | - classes = Resource.__subclasses__() | 50 | + context['subject'] = subject |
62 | 51 | ||
63 | #set formset | 52 | #set formset |
64 | resourceTagFormSet = formset_factory(ResourceAndTagForm, formset=BaseResourceAndTagFormset) | 53 | resourceTagFormSet = formset_factory(ResourceAndTagForm, formset=BaseResourceAndTagFormset) |
@@ -104,6 +93,10 @@ class ReportView(LoginRequiredMixin, generic.FormView): | @@ -104,6 +93,10 @@ class ReportView(LoginRequiredMixin, generic.FormView): | ||
104 | for tag in resource.tags.all(): | 93 | for tag in resource.tags.all(): |
105 | tags.append(tag) | 94 | tags.append(tag) |
106 | 95 | ||
96 | + | ||
97 | + t = Tag(name=" ") | ||
98 | + t.id = -1 #so I know he choose empyt one | ||
99 | + tags.append(t) | ||
107 | classes = Resource.__subclasses__() | 100 | classes = Resource.__subclasses__() |
108 | amount_of_forms = self.request.POST['form-TOTAL_FORMS'] | 101 | amount_of_forms = self.request.POST['form-TOTAL_FORMS'] |
109 | initial_datum = {'class_name': classes , 'tag': tags} | 102 | initial_datum = {'class_name': classes , 'tag': tags} |
@@ -211,7 +204,7 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -211,7 +204,7 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
211 | #I use this so the system can gather data up to end_date 11h59 p.m. | 204 | #I use this so the system can gather data up to end_date 11h59 p.m. |
212 | end_date = end_date + timedelta(days=1) | 205 | end_date = end_date + timedelta(days=1) |
213 | 206 | ||
214 | - | 207 | + self.used_tags = copy.deepcopy(tags_id) #so I can check whether we are dealing with multiple or single tags (empty option) |
215 | #For each student in the subject | 208 | #For each student in the subject |
216 | for student in students: | 209 | for student in students: |
217 | data[student.id] = [] | 210 | data[student.id] = [] |
@@ -303,8 +296,8 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -303,8 +296,8 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
303 | distinct_days += 1 | 296 | distinct_days += 1 |
304 | 297 | ||
305 | interactions[_('Number of distinct days the user access the subject. ')] = distinct_days | 298 | interactions[_('Number of distinct days the user access the subject. ')] = distinct_days |
306 | - interactions[_("Class")] = "" | ||
307 | - interactions[_("Performance")] = "" | 299 | + interactions[_("Class")] = _("Undefined") |
300 | + interactions[_("Performance")] = _("Undefined") | ||
308 | for value in interactions.values(): | 301 | for value in interactions.values(): |
309 | data[student.id].append(value) | 302 | data[student.id].append(value) |
310 | 303 | ||
@@ -316,13 +309,47 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -316,13 +309,47 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
316 | def get_resources_and_tags_data(self, resources_types, tags, student, subject, topics, init_date, end_date): | 309 | def get_resources_and_tags_data(self, resources_types, tags, student, subject, topics, init_date, end_date): |
317 | data = OrderedDict() | 310 | data = OrderedDict() |
318 | 311 | ||
312 | + new_tags = [] #tags will be replaced by this variable | ||
319 | for i in range(len(resources_types)): | 313 | for i in range(len(resources_types)): |
320 | - | 314 | + |
315 | + if tags[i] == "-1": #it means I should select all of tags available for this kind of resource | ||
316 | + new_tags = set() | ||
317 | + if not isinstance(topics,Topic): | ||
318 | + topics = subject.topic_subject.all() | ||
319 | + for topic in topics: | ||
320 | + resource_set = Resource.objects.select_related(resources_types[i].lower()).filter(topic = topic) | ||
321 | + | ||
322 | + for resource in resource_set: | ||
323 | + if resource._my_subclass == resources_types[i].lower(): | ||
324 | + for tag in resource.tags.all(): | ||
325 | + if tag.name != "": | ||
326 | + new_tags.add(tag) | ||
327 | + else: | ||
328 | + topics = topics | ||
329 | + resource_set = Resource.objects.select_related(resources_types[i].lower()).filter(topic = topics) | ||
330 | + | ||
331 | + for resource in resource_set: | ||
332 | + if resource._my_subclass == resources_types[i].lower(): | ||
333 | + for tag in resource.tags.all(): | ||
334 | + if tag.name != "": | ||
335 | + new_tags.add(tag) | ||
336 | + data = {} | ||
337 | + | ||
338 | + | ||
339 | + new_tags = [tag.id for tag in new_tags] | ||
340 | + tags[i] = new_tags | ||
341 | + for i in range(len(resources_types)): | ||
342 | + original_tags = copy.deepcopy(self.used_tags) #effectiving copy | ||
321 | if isinstance(topics,Topic): | 343 | if isinstance(topics,Topic): |
322 | - resources = Resource.objects.select_related(resources_types[i].lower()).filter(tags__in = tags, topic=topics) | 344 | + if type(tags[i]) == type(list()): |
345 | + resources = Resource.objects.select_related(resources_types[i].lower()).filter(tags__in = tags[i], topic=topics) | ||
346 | + else: | ||
347 | + resources = Resource.objects.select_related(resources_types[i].lower()).filter(tags__in = [tags[i]], topic=topics) | ||
323 | else: | 348 | else: |
324 | - resources = Resource.objects.select_related(resources_types[i].lower()).filter(tags__in = tags, topic__in=topics) | ||
325 | - | 349 | + if type(tags[i]) == type(list()): |
350 | + resources = Resource.objects.select_related(resources_types[i].lower()).filter(tags__in = tags[i], topic__in=topics) | ||
351 | + else: | ||
352 | + resources = Resource.objects.select_related(resources_types[i].lower()).filter(tags__in = [tags[i]], topic__in=topics) | ||
326 | distinct_resources = 0 | 353 | distinct_resources = 0 |
327 | total_count = 0 | 354 | total_count = 0 |
328 | 355 | ||
@@ -425,15 +452,20 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -425,15 +452,20 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
425 | mapping['webconference'] = str(_('Web Conference')) | 452 | mapping['webconference'] = str(_('Web Conference')) |
426 | mapping['ytvideo'] = str(_('YouTube Video')) | 453 | mapping['ytvideo'] = str(_('YouTube Video')) |
427 | mapping['webpage'] = str(_('WebPage')) | 454 | mapping['webpage'] = str(_('WebPage')) |
428 | - data[str(_("number of visualizations of ")) + mapping[str(resources_types[i])] + str(_(" with tag ")) + Tag.objects.get(id=int(tags[i])).name] = total_count | ||
429 | - data[str(_("number of visualizations of distintic ")) + mapping[str(resources_types[i])] + str(_(" with tag ")) + Tag.objects.get(id=int(tags[i])).name] = distinct_resources | ||
430 | - data[str(_("distintic days ")) + mapping[str(resources_types[i])] + str(_(" with tag ")) + Tag.objects.get(id=int(tags[i])).name] = distinct_days | ||
431 | - | ||
432 | - if resources_types[i].lower() in ["ytvideo", "webconference"]: | ||
433 | - data[str(_("hours viewed of ")) + str(resources_types[i]) + str(_(" with tag ")) + Tag.objects.get(id=int(tags[i])).name] = hours_viewed | 455 | + if original_tags[i] != "-1": |
456 | + data[str(_("number of visualizations of ")) + mapping[str(resources_types[i])] + str(_(" with tag ")) + Tag.objects.get(id=int(tags[i])).name] = total_count | ||
457 | + data[str(_("number of visualizations of distintic ")) + mapping[str(resources_types[i])] + str(_(" with tag ")) + Tag.objects.get(id=int(tags[i])).name] = distinct_resources | ||
458 | + data[str(_("distintic days ")) + mapping[str(resources_types[i])] + str(_(" with tag ")) + Tag.objects.get(id=int(tags[i])).name] = distinct_days | ||
459 | + | ||
460 | + if resources_types[i].lower() in ["ytvideo", "webconference"]: | ||
461 | + data[str(_("hours viewed of ")) + str(resources_types[i]) + str(_(" with tag ")) + Tag.objects.get(id=int(tags[i])).name] = hours_viewed | ||
462 | + else: | ||
463 | + data[str(_("number of visualizations of ")) + mapping[str(resources_types[i])] ] = total_count | ||
464 | + data[str(_("number of visualizations of distintic ")) + mapping[str(resources_types[i])] ] = distinct_resources | ||
465 | + data[str(_("distintic days ")) + mapping[str(resources_types[i])]] = distinct_days | ||
434 | 466 | ||
435 | - """data["distinct" + str(resources[i]) + " with tag " + Tag.objects.get(id=int(tags[i])).name] = Log.objects.filter(action="view", resource=resources[i].lower(), | ||
436 | - user_id = student.id, context__contains = {'subject_id': subject.id}).distinct().count()""" | 467 | + if resources_types[i].lower() in ["ytvideo", "webconference"]: |
468 | + data[str(_("hours viewed of ")) + str(resources_types[i]) ] = hours_viewed | ||
437 | 469 | ||
438 | return data | 470 | return data |
439 | 471 | ||
@@ -504,7 +536,10 @@ def get_tags(request): | @@ -504,7 +536,10 @@ def get_tags(request): | ||
504 | 536 | ||
505 | #adding empty tag for the purpose of giving the user this option for adicional behavior | 537 | #adding empty tag for the purpose of giving the user this option for adicional behavior |
506 | tags = list(tags) | 538 | tags = list(tags) |
507 | - tags.append(Tag(name=" ")) | 539 | + #creating empty tag |
540 | + t = Tag(name=" ") | ||
541 | + t.id = -1 #so I know he choose empyt one | ||
542 | + tags.append(t) | ||
508 | data['tags'] = [ {'id':tag.id, 'name':tag.name} for tag in tags] | 543 | data['tags'] = [ {'id':tag.id, 'name':tag.name} for tag in tags] |
509 | return JsonResponse(data) | 544 | return JsonResponse(data) |
510 | 545 |