Commits

Francisco Souza  committed 1336031

Definição de algumas regras de negócio para efetuação da inscrição.

A classe Inscricao foi acertada, a classe Curso ganhou mais um atributo (indicando se as inscrições estão abertas).

O template de visualização do curso agora só mostra a opção de inscrição caso o curso esteja com as inscrições abertas. Ainda foi feita a validação para o caso do usuário do sistema acessar a URL de inscrição diretamente, na view de inscrição (função "inscricao" do módulo views.py).

Como próximo passo, o formulário de inscrição será finalmente construído. A classe Inscricao ainda está em processo de definição, um levantamento sobre quais fields são importantes está sendo efetuado.

  • Participants
  • Parent commits a539a57

Comments (0)

Files changed (7)

File cursos/forms.py

 from django.contrib.auth.forms import UserCreationForm
 from django.contrib.auth.models import User
 
-from models import Aluno
+from models import Aluno, Curso
 from util.validacoes import validar_cpf
 
 class AlunoForm(forms.ModelForm):

File cursos/models.py

 from django.db import models
 from django.core.urlresolvers import reverse
 from django.contrib.auth.models import User
-from util.signals import curso_pre_save, instrutor_pre_save
+from util.signals import curso_pre_save, instrutor_pre_save, inscricao_post_save
 from django.db.models import signals
 from django.utils.translation import gettext_lazy
 
     descricao = models.TextField()
     carga_horaria = models.IntegerField()
     vagas = models.IntegerField()
+    inscricoes_abertas = models.BooleanField(verbose_name = 'Aceitando inscrições')
     instrutor = models.ForeignKey('Instrutor')
     pre_requisitos = models.TextField()
     slug = models.SlugField(max_length = 100, blank = True, unique = True)
         verbose_name = gettext_lazy('Inscrição')
         verbose_name_plural = gettext_lazy('Inscrições')
 
-    status = models.BooleanField()
+    status = models.BooleanField(verbose_name = 'Confirmada')
+    data_inscricao = models.DateField()
     aluno = models.ForeignKey('Aluno')
     curso = models.ForeignKey('Curso')
 
 # Conectando sinais
 signals.pre_save.connect(instrutor_pre_save, sender = Instrutor)
 signals.pre_save.connect(curso_pre_save, sender = Curso)
+signals.post_save.connect(inscricao_post_save, sender = Inscricao)

File cursos/views.py

 @login_required
 def inscricao(request, slug):
     curso = get_object_or_404(Curso, slug = slug)
+    if not curso.inscricoes_abertas:
+        erro = u'Este curso não está recebendo inscrições.'
     return render_to_response('inscricao.html', locals(), context_instance = RequestContext(request))
 

File media/style.css

 	color: #F00;
 }
 
+.mensagem_erro {
+	font-size: 10pt;
+	color: #F00;
+}
+
 .foto_instrutor {
 	margin-right: 1em;
 	border: 0px;

File templates/curso.html

     <strong>Quantidade de vagas:</strong> {{ curso.vagas }}<br />
     <strong>Inscritos:</strong> {{ curso.inscricao_set.all.count }}</p>
     
-    <p align="center"><a href="{{ curso.get_url_inscricao }}">Inscrever-se</a> | <a href="{% url cursos.views.cursos %}">Voltar para a listagem de cursos</a></p>
+    <p align="center">
+    {% if curso.inscricoes_abertas %}
+        <a href="{{ curso.get_url_inscricao }}">Inscrever-se</a> |
+    {% endif %} <a href="{% url cursos.views.cursos %}">Voltar para a listagem de cursos</a></p>
 {% endblock conteudo %}

File templates/inscricao.html

 {% block titulo %}{{ block.super }} - Inscrição no Curso "{{ curso.titulo }}"{% endblock titulo %}
 
 {% block topo %}
-    <h1>Inscrição no curso "{{ curso.titulo }}"</h1>
+    <h1>
+        {% if erro %}
+            Erro!
+        {% else %}
+            Inscrição no curso "{{ curso.titulo }}"
+        {% endif %}
+    </h1>
 {% endblock topo %}
 
 {% block conteudo %}
-    <p>Em construção.</p>
-    <p align="center"><a href="javascript:history.back();">Voltar</a></p>
+    {% if erro %}
+        <div class="mensagem_erro">{{ erro }}</div>
+    {% else %}
+        <p>Em construção.</p>
+        <p align="center"><a href="javascript:history.back();">Voltar</a></p>
+    {% endif %}
 {% endblock conteudo %}

File util/signals.py

             new_slug = '%s-%d' % (slug, count)
 
         instance.slug = new_slug
+
+def inscricao_post_save(signal, instance, sender, **kwargs):
+    if instance.curso.vagas == instance.curso.inscricao_set.all().count() + 1:
+        instance.curso.inscricoes_abertas = False
+        instance.curso.save()