Commit 2280108afce775e19ec37d91d2585628ec440338
1 parent
94ff89ba
Exists in
master
and in
3 other branches
committing for saving important progress
Showing
7 changed files
with
106 additions
and
11 deletions
Show diff stats
reports/forms.py
@@ -7,9 +7,16 @@ from django.forms.formsets import BaseFormSet | @@ -7,9 +7,16 @@ from django.forms.formsets import BaseFormSet | ||
7 | class ResourceAndTagForm(forms.Form): | 7 | class ResourceAndTagForm(forms.Form): |
8 | 8 | ||
9 | resource = forms.ChoiceField(label=_("Resources"), required=True) | 9 | resource = forms.ChoiceField(label=_("Resources"), required=True) |
10 | - tag = forms.ChoiceField(label=_('Tag')) | ||
11 | - | 10 | + tag = forms.ChoiceField(label=_('Tag'), required=True) |
12 | 11 | ||
12 | + def __init__(self, *args, **kwargs): | ||
13 | + super(ResourceAndTagForm, self).__init__(*args, **kwargs) | ||
14 | + if kwargs.get('initial'): | ||
15 | + initial = kwargs['initial'] | ||
16 | + print(initial) | ||
17 | + self.fields['resource'].choices = [(resource.id, resource.name) for resource in initial['resource']] | ||
18 | + self.fields['tag'].choices = [(tag.id, tag.name) for tag in initial['tag']] | ||
19 | + | ||
13 | 20 | ||
14 | class CreateInteractionReportForm(forms.Form): | 21 | class CreateInteractionReportForm(forms.Form): |
15 | topic = forms.ChoiceField( label= _("Topics to select data from")) | 22 | topic = forms.ChoiceField( label= _("Topics to select data from")) |
reports/templates/reports/_form.html
@@ -51,12 +51,29 @@ | @@ -51,12 +51,29 @@ | ||
51 | 51 | ||
52 | <div id="resources" class="panel-collapse collapse"> | 52 | <div id="resources" class="panel-collapse collapse"> |
53 | {{ resource_tag_formset.management_form }} | 53 | {{ resource_tag_formset.management_form }} |
54 | + {{ resource_tag_formset.non_form_errors }} | ||
54 | 55 | ||
55 | {% for resource_tag_form in resource_tag_formset %} | 56 | {% for resource_tag_form in resource_tag_formset %} |
56 | <div class="resource-tag-formset"> | 57 | <div class="resource-tag-formset"> |
57 | {% for field in resource_tag_form %} | 58 | {% for field in resource_tag_form %} |
58 | <label>{{field.label}}</label> | 59 | <label>{{field.label}}</label> |
59 | {% render_field field class="form-control" %} | 60 | {% render_field field class="form-control" %} |
61 | + | ||
62 | + {% if field.errors %} | ||
63 | + <div class="row"> | ||
64 | + </br> | ||
65 | + <div class="alert alert-danger alert-dismissible" role="alert"> | ||
66 | + <button type="button" class="close" data-dismiss="alert" aria-label="Close"> | ||
67 | + <span aria-hidden="true">×</span> | ||
68 | + </button> | ||
69 | + <ul> | ||
70 | + {% for error in field.errors %} | ||
71 | + <li>{{ error }}</li> | ||
72 | + {% endfor %} | ||
73 | + </ul> | ||
74 | + </div> | ||
75 | + </div> | ||
76 | + {% endif %} | ||
60 | {% endfor %} | 77 | {% endfor %} |
61 | </div> | 78 | </div> |
62 | {% endfor %} | 79 | {% endfor %} |
reports/templates/reports/create.html
@@ -49,9 +49,31 @@ | @@ -49,9 +49,31 @@ | ||
49 | 49 | ||
50 | <script type="text/javascript" src="{% static "reports/js/report.js" %}"></script> | 50 | <script type="text/javascript" src="{% static "reports/js/report.js" %}"></script> |
51 | <script> | 51 | <script> |
52 | + | ||
53 | + var subject_id = "{{subject.id}}"; | ||
52 | $('.resource-tag-formset').formset({ | 54 | $('.resource-tag-formset').formset({ |
53 | addText: 'add data source', | 55 | addText: 'add data source', |
54 | - deleteText: 'remove data source' | 56 | + deleteText: 'remove data source', |
57 | + added: function(object){ | ||
58 | + $.get("{% url 'subjects:reports:get_resource_and_tags' %}?subject_id={{subject.id}}", function(data){ | ||
59 | + fields = object.children("select"); | ||
60 | + | ||
61 | + for(var j = 0; j < data.resources.length; j++){ | ||
62 | + fields[0].options[fields[0].options.length] = new Option(data.resources[j].name,data.resources[j].id); | ||
63 | + | ||
64 | + } | ||
65 | + //Modify tags fields | ||
66 | + fields[0].onchange = function(item){ | ||
67 | + //it request all tags associated with that resource | ||
68 | + $.get("{% url 'subjects:reports:get_tags' %}?resource_id="+item.target.value, function(data){ | ||
69 | + fields[1].options.length = 0; | ||
70 | + for(var j = 0; j < data.tags.length; j++){ | ||
71 | + fields[1].options[fields[1].options.length] = new Option(data.tags[j].name,data.tags[j].id); | ||
72 | + } | ||
73 | + }); | ||
74 | + }; | ||
75 | + }); | ||
76 | + }, | ||
55 | }); | 77 | }); |
56 | </script> | 78 | </script> |
57 | {% endblock content %} | 79 | {% endblock content %} |
58 | \ No newline at end of file | 80 | \ No newline at end of file |
reports/urls.py
@@ -5,4 +5,6 @@ from . import views | @@ -5,4 +5,6 @@ from . import views | ||
5 | urlpatterns = [ | 5 | urlpatterns = [ |
6 | url(r'^create/interactions/$', views.ReportView.as_view(), name='create_interaction'), | 6 | url(r'^create/interactions/$', views.ReportView.as_view(), name='create_interaction'), |
7 | url(r'^view/interactions/$', views.ViewReportView.as_view(), name='view_report'), | 7 | url(r'^view/interactions/$', views.ViewReportView.as_view(), name='view_report'), |
8 | + url(r'^get/resources/$', views.get_resources, name='get_resource_and_tags'), | ||
9 | + url(r'^get/tags/$', views.get_tags, name='get_tags'), | ||
8 | ] | 10 | ] |
9 | \ No newline at end of file | 11 | \ No newline at end of file |
reports/views.py
@@ -15,7 +15,7 @@ from datetime import datetime, date | @@ -15,7 +15,7 @@ from datetime import datetime, date | ||
15 | from subjects.models import Subject | 15 | from subjects.models import Subject |
16 | from .forms import CreateInteractionReportForm, ResourceAndTagForm | 16 | from .forms import CreateInteractionReportForm, ResourceAndTagForm |
17 | from log.models import Log | 17 | from log.models import Log |
18 | -from topics.models import Resource | 18 | +from topics.models import Resource, Topic |
19 | 19 | ||
20 | from django.forms import formset_factory | 20 | from django.forms import formset_factory |
21 | 21 | ||
@@ -55,10 +55,11 @@ class ReportView(LoginRequiredMixin, generic.FormView): | @@ -55,10 +55,11 @@ class ReportView(LoginRequiredMixin, generic.FormView): | ||
55 | resources.append(resource) | 55 | resources.append(resource) |
56 | context['resources'] = resources | 56 | context['resources'] = resources |
57 | context['tags'] = tags | 57 | context['tags'] = tags |
58 | - | 58 | + |
59 | 59 | ||
60 | #set formset | 60 | #set formset |
61 | - resourceTagFormSet = formset_factory(ResourceAndTagForm, extra= 1) | 61 | + resourceTagFormSet = formset_factory(ResourceAndTagForm, extra = 1) |
62 | + resourceTagFormSet = resourceTagFormSet(initial=[{'resource':resources, 'tag':tags}]) | ||
62 | context['resource_tag_formset'] = resourceTagFormSet | 63 | context['resource_tag_formset'] = resourceTagFormSet |
63 | return context | 64 | return context |
64 | 65 | ||
@@ -72,6 +73,10 @@ class ReportView(LoginRequiredMixin, generic.FormView): | @@ -72,6 +73,10 @@ class ReportView(LoginRequiredMixin, generic.FormView): | ||
72 | get_params += key + "=" + str(value) + "&" | 73 | get_params += key + "=" + str(value) + "&" |
73 | 74 | ||
74 | 75 | ||
76 | + for form_data in self.formset_data: | ||
77 | + for key, value in form_data.items(): | ||
78 | + get_params += key + "=" + str(value) + "&" | ||
79 | + | ||
75 | #retrieving subject id for data purposes | 80 | #retrieving subject id for data purposes |
76 | for key, value in self.request.GET.items(): | 81 | for key, value in self.request.GET.items(): |
77 | get_params += key + "=" + str(value) | 82 | get_params += key + "=" + str(value) |
@@ -84,10 +89,24 @@ class ReportView(LoginRequiredMixin, generic.FormView): | @@ -84,10 +89,24 @@ class ReportView(LoginRequiredMixin, generic.FormView): | ||
84 | POST variables and then checked for validity. | 89 | POST variables and then checked for validity. |
85 | """ | 90 | """ |
86 | form = self.get_form() | 91 | form = self.get_form() |
87 | - print(form) | ||
88 | - if form.is_valid(): | ||
89 | - print(form) | 92 | + |
93 | + subject = Subject.objects.get(id=self.request.GET['subject_id']) | ||
94 | + | ||
95 | + topics = subject.topic_subject.all() | ||
96 | + #get all resources associated with topics | ||
97 | + resources = [] | ||
98 | + tags = [] | ||
99 | + for topic in topics: | ||
100 | + resources_set = topic.resource_topic.all() | ||
101 | + for resource in resources_set: | ||
102 | + for tag in resource.tags.all(): | ||
103 | + tags.append(tag) | ||
104 | + resources.append(resource) | ||
105 | + resourceTagFormSet = formset_factory(ResourceAndTagForm, extra= 1) | ||
106 | + resources_formset = resourceTagFormSet(self.request.POST, initial=[{'resource':resources, 'tag':tags}]) | ||
107 | + if form.is_valid() and resources_formset.is_valid(): | ||
90 | self.form_data = form.cleaned_data | 108 | self.form_data = form.cleaned_data |
109 | + self.formset_data = resources_formset.cleaned_data | ||
91 | return self.form_valid(form) | 110 | return self.form_valid(form) |
92 | else: | 111 | else: |
93 | return self.form_invalid(form) | 112 | return self.form_invalid(form) |
@@ -208,3 +227,33 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | @@ -208,3 +227,33 @@ class ViewReportView(LoginRequiredMixin, generic.TemplateView): | ||
208 | return data, header | 227 | return data, header |
209 | 228 | ||
210 | 229 | ||
230 | + | ||
231 | +def get_resources(request): | ||
232 | + subject = Subject.objects.get(id=request.GET['subject_id']) | ||
233 | + | ||
234 | + topics = subject.topic_subject.all() | ||
235 | + #get all resources associated with topics | ||
236 | + resources = [] | ||
237 | + tags = [] | ||
238 | + for topic in topics: | ||
239 | + resources_set = topic.resource_topic.all() | ||
240 | + for resource in resources_set: | ||
241 | + for tag in resource.tags.all(): | ||
242 | + tags.append(tag) | ||
243 | + resources.append(resource) | ||
244 | + | ||
245 | + data = {} | ||
246 | + | ||
247 | + data['resources']= [ {'id':resource.id, 'name':resource.name} for resource in resources] | ||
248 | + return JsonResponse(data) | ||
249 | + | ||
250 | + | ||
251 | +def get_tags(request): | ||
252 | + resource = Resource.objects.get(id=request.GET['resource_id']) | ||
253 | + data = {} | ||
254 | + tags = [] | ||
255 | + | ||
256 | + for tag in resource.tags.all(): | ||
257 | + tags.append(tag) | ||
258 | + data['tags'] = [ {'id':tag.id, 'name':tag.name} for tag in tags] | ||
259 | + return JsonResponse(data) |
subjects/forms.py
@@ -175,7 +175,6 @@ class UpdateSubjectForm(forms.ModelForm): | @@ -175,7 +175,6 @@ class UpdateSubjectForm(forms.ModelForm): | ||
175 | def clean_subscribe_begin(self): | 175 | def clean_subscribe_begin(self): |
176 | subscribe_begin = self.cleaned_data['subscribe_begin'] | 176 | subscribe_begin = self.cleaned_data['subscribe_begin'] |
177 | 177 | ||
178 | - print (self.instance.subscribe_begin, "################################") | ||
179 | if subscribe_begin < datetime.datetime.today().date() and subscribe_begin < self.instance.subscribe_begin: | 178 | if subscribe_begin < datetime.datetime.today().date() and subscribe_begin < self.instance.subscribe_begin: |
180 | self._errors['subscribe_begin'] = [_('This date must be today or after')] | 179 | self._errors['subscribe_begin'] = [_('This date must be today or after')] |
181 | return ValueError | 180 | return ValueError |
topics/views.py
@@ -57,7 +57,6 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): | @@ -57,7 +57,6 @@ class CreateView(LoginRequiredMixin, LogMixin, generic.edit.CreateView): | ||
57 | subject = get_object_or_404(Subject, slug = slug) | 57 | subject = get_object_or_404(Subject, slug = slug) |
58 | 58 | ||
59 | self.object.subject = subject | 59 | self.object.subject = subject |
60 | - print (subject.topic_subject.count()) | ||
61 | self.object.order = subject.topic_subject.count() + 1 | 60 | self.object.order = subject.topic_subject.count() + 1 |
62 | 61 | ||
63 | self.object.save() | 62 | self.object.save() |