Commit 61689fc2d836dc187ee1e3e779e99e31ac26293d

Authored by Jailson Dias
1 parent e2cc437c

criado o model de respostas do aluno e ajustes no template de visualizar enquete…

… pelo aluno #146, #174
courses/templates/subject/form_view_student.html
... ... @@ -17,7 +17,8 @@
17 17 </div>
18 18 <div class="panel-body">
19 19 <p>{{topic.description|linebreaks}}</p>
20   - {% list_topic_foruns request topic %}
  20 + {% list_topic_foruns request topic %}
  21 + {% list_topic_poll request topic %}
21 22 </div>
22 23  
23 24 <div class="modal fade" id="forumModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
... ... @@ -37,4 +38,4 @@
37 38 </div>
38 39 </div>
39 40 </div>
40   -</div>
41 41 \ No newline at end of file
  42 +</div>
... ...
courses/templates/subject/poll_item_actions.html
1   -{% load static i18n %}
  1 +{% load static i18n permission_tags%}
2 2  
3 3 <script src="{% static 'js/modals_requisitions.js'%}"></script>
4 4 <script src="{% static 'js/modal_poll.js'%}"></script>
5 5  
  6 +{% if request.user|has_role:'professor, system_admin'%}
6 7 {% for poll in polls %}
7 8 <li id="poll_{{poll.slug}}"><i class="material-icons">poll</i> <a href="javascript:get('{% url 'course:poll:update_poll' poll.slug %}','#poll','#modal_poll');">{{ poll.name }}</a><a href="javascript:get('{% url 'course:poll:delete_poll' poll.slug %}','#poll','#modal_poll');"><span class="glyphicon glyphicon-remove"></span></a></li>
8 9 {% endfor %}
9 10 <button class="btn btn-primary btn-raised" onclick="javascript:get('{% url 'course:poll:create_poll' topic.slug%}','#poll','#modal_poll');">{% trans '+ Create Poll' %}</button>
  11 +{% else %}
  12 +{% for poll in polls %}
  13 + <li id="poll_{{poll.slug}}"><i class="material-icons">poll</i> <a href="javascript:get('{% url 'course:poll:view_poll' poll.slug %}','#poll','#modal_poll');">{{ poll.name }}</a></li>
  14 +{% endfor %}
  15 +{% endif %}
10 16 <div class="row" id="modal_poll">
11 17  
12 18 </div>
... ...
poll/admin.py
1 1 from django.contrib import admin
2 2  
3   -from .models import Poll, Answer
  3 +from .models import Poll, Answer, AnswersStudent
4 4  
5 5 class PollAdmin(admin.ModelAdmin):
6 6 list_display = ['name', 'slug','limit_date']
... ... @@ -10,5 +10,10 @@ class AnswerAdmin(admin.ModelAdmin):
10 10 list_display = ['answer','order']
11 11 search_fields = ['answer']
12 12  
  13 +class AnswersStudentAdmin(admin.ModelAdmin):
  14 + list_display = ['student','poll','answered_in']
  15 + search_fields = ['student','poll']
  16 +
13 17 admin.site.register(Poll, PollAdmin)
14 18 admin.site.register(Answer, AnswerAdmin)
  19 +admin.site.register(AnswersStudent, AnswersStudentAdmin)
... ...
poll/migrations/0002_answersstudent.py 0 → 100644
... ... @@ -0,0 +1,33 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-10-12 18:26
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.conf import settings
  6 +from django.db import migrations, models
  7 +import django.db.models.deletion
  8 +
  9 +
  10 +class Migration(migrations.Migration):
  11 +
  12 + dependencies = [
  13 + migrations.swappable_dependency(settings.AUTH_USER_MODEL),
  14 + ('poll', '0001_initial'),
  15 + ]
  16 +
  17 + operations = [
  18 + migrations.CreateModel(
  19 + name='AnswersStudent',
  20 + fields=[
  21 + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
  22 + ('status', models.BooleanField(default=False, verbose_name='Answered')),
  23 + ('answered_in', models.DateTimeField(auto_now=True, verbose_name='Answered Date')),
  24 + ('answer', models.ManyToManyField(related_name='answers_stundet', to='poll.Answer', verbose_name='Answers Students')),
  25 + ('poll', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers_stundet', to='poll.Poll', verbose_name='Answers')),
  26 + ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers_stundent', to=settings.AUTH_USER_MODEL, verbose_name='Student')),
  27 + ],
  28 + options={
  29 + 'verbose_name': 'Answer Stundent',
  30 + 'verbose_name_plural': 'Answers Student',
  31 + },
  32 + ),
  33 + ]
... ...
poll/migrations/0003_auto_20161012_1638.py 0 → 100644
... ... @@ -0,0 +1,21 @@
  1 +# -*- coding: utf-8 -*-
  2 +# Generated by Django 1.10 on 2016-10-12 19:38
  3 +from __future__ import unicode_literals
  4 +
  5 +from django.db import migrations, models
  6 +import django.db.models.deletion
  7 +
  8 +
  9 +class Migration(migrations.Migration):
  10 +
  11 + dependencies = [
  12 + ('poll', '0002_answersstudent'),
  13 + ]
  14 +
  15 + operations = [
  16 + migrations.AlterField(
  17 + model_name='answersstudent',
  18 + name='poll',
  19 + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers_stundet', to='poll.Poll', verbose_name='Poll'),
  20 + ),
  21 + ]
... ...
poll/models.py
... ... @@ -27,3 +27,17 @@ class Answer(models.Model):
27 27  
28 28 def __str__(self):
29 29 return str(self.answer) + str("/") + str(self.poll)
  30 +
  31 +class AnswersStudent(models.Model):
  32 + status = models.BooleanField(_("Answered"), default=False)
  33 + poll = models.ForeignKey(Poll, verbose_name = _('Poll'), related_name='answers_stundet')
  34 + answer = models.ManyToManyField(Answer,verbose_name = _('Answers Students'), related_name='answers_stundet')
  35 + student = models.ForeignKey(User, verbose_name = _('Student'), related_name='answers_stundent')
  36 + answered_in = models.DateTimeField(_("Answered Date"),auto_now=True)
  37 +
  38 + class Meta:
  39 + verbose_name = _('Answer Stundent')
  40 + verbose_name_plural = _('Answers Student')
  41 +
  42 + def __str__(self):
  43 + return str(self.student) + str("/") + str(self.poll)
... ...
poll/templates/poll/view.html
... ... @@ -7,19 +7,29 @@
7 7  
8 8 {% block title_poll %}
9 9 <!-- Put your title here!!! -->
10   -<h4 class="modal-title" id="myModalLabel">{{poll}}</h4>
  10 +<h4 class="modal-title" id="myModalLabel">{{poll.name}}</h4>
11 11 {% endblock title_poll %}
12 12  
13 13 {% block content_poll %}
14 14 <!-- Put ONLY your content here!!! -->
15 15 <div class="row">
16 16 <div class="col-md-10 col-md-offset-1">
17   - <h3>{% trans "Limit date:" %} {{poll.limit_date|date:'d/m/y'}}</h3>
  17 + <p>{% trans "Limit date:" %} {{poll.limit_date|date:'d/m/y'}}</p>
  18 + </div>
  19 + <div class="col-md-10 col-md-offset-1">
  20 + <p>{% trans "Status:" %}
  21 + {% if status %}
  22 + {% trans "Poll answered" %}
  23 + {% else %}
  24 + {% trans "Poll don't yet answered" %}
  25 + {% endif %}
18 26 </div>
19 27 </div>
20 28 {% endblock content_poll %}
21 29  
22 30 {% block button_save %}
23 31 <!-- Put curtom buttons here!!! -->
24   -<button type="submite" id="button" form="form" class="btn btn-primary btn-raised">{% trans "Answer" %}</button>
  32 +{% if not status %}
  33 +<button type="button" class="btn btn-primary btn-raised">{% trans "Answer" %}</button>
  34 +{% endif %}
25 35 {% endblock button_save %}
... ...
poll/tests/poll.py
... ... @@ -5,7 +5,7 @@ from django.core.urlresolvers import reverse
5 5  
6 6 from rolepermissions.shortcuts import assign_role
7 7  
8   -from courses.models import Category, Course, Subject, Topic
  8 +from courses.models import CourseCategory, Course, Subject, Topic
9 9 from poll.models import Poll
10 10 from users.models import User
11 11  
... ... @@ -33,7 +33,7 @@ class PollTestCase(TestCase):
33 33 )
34 34 assign_role(self.user_student, 'student')
35 35  
36   - self.category = Category(
  36 + self.category = CourseCategory(
37 37 name = 'Categoria Teste',
38 38 )
39 39 self.category.save()
... ...
poll/views.py
... ... @@ -12,7 +12,7 @@ from django.db.models import Q
12 12 # from django.views.generic.edit import FormMixin
13 13  
14 14 from .forms import PollForm
15   -from .models import Poll, Answer
  15 +from .models import Poll, Answer, AnswersStudent
16 16 from core.mixins import NotificationMixin
17 17 from users.models import User
18 18 from courses.models import Course, Topic
... ... @@ -26,48 +26,14 @@ class ViewPoll(LoginRequiredMixin,generic.DetailView):
26 26 def get_object(self, queryset=None):
27 27 return get_object_or_404(Poll, slug = self.kwargs.get('slug'))
28 28  
29   - def form_invalid(self, form,**kwargs):
30   - context = super(ViewPoll, self).form_invalid(form)
31   - answers = {}
32   - for key in self.request.POST:
33   - if(key != 'csrfmiddlewaretoken' and key != 'name' and key != 'limit_date' and key != 'all_students' and key != 'students'):
34   - answers[key] = self.request.POST[key]
35   -
36   - keys = sorted(answers)
37   - context.context_data['answers'] = answers
38   - context.context_data['keys'] = keys
39   - return context
40   -
41   - def form_valid(self, form):
42   - poll = self.object
43   - poll = form.save(commit = False)
44   - poll.answers.all().delete()
45   - poll.save()
46   -
47   -
48   - for key in self.request.POST:
49   - if(key != 'csrfmiddlewaretoken' and key != 'name' and key != 'limit_date' and key != 'all_students' and key != 'students'):
50   - answer = Answer(answer=self.request.POST[key],order=key,poll=poll)
51   - answer.save()
52   -
53   - return super(ViewPoll, self).form_valid(form)
54   -
55 29 def get_context_data(self, **kwargs):
56 30 context = super(ViewPoll, self).get_context_data(**kwargs)
57 31 poll = self.object
  32 + context["topic"] = poll.topic
58 33 context['course'] = poll.topic.subject.course
59 34 context['subject'] = poll.topic.subject
60 35 context['subjects'] = poll.topic.subject.course.subjects.all()
61   -
62   - answers = {}
63   - for answer in poll.answers.all():
64   - answers[answer.order] = answer.answer
65   -
66   - keys = sorted(answers)
67   - context['answers'] = answers
68   - context['keys'] = keys
69   -
70   - print (context)
  36 + context['status'] = AnswersStudent.objects.get(poll=poll, student=self.request.user).status
71 37 return context
72 38  
73 39  
... ... @@ -93,7 +59,6 @@ class CreatePoll(LoginRequiredMixin,HasRoleMixin,generic.CreateView):
93 59 context.context_data['keys'] = keys
94 60 context.context_data['form'] = form
95 61 context.status_code = 400
96   - print (context)
97 62 # return self.render_to_response(context, status = 400)
98 63 return context
99 64  
... ...