Terminando o cadastro de inscrições de caravanas
authorLincoln de Sousa <lincoln@archlinux-br.org>
Tue, 25 Sep 2007 00:15:35 +0000 (21:15 -0300)
committerLincoln de Sousa <lincoln@archlinux-br.org>
Tue, 25 Sep 2007 00:15:35 +0000 (21:15 -0300)
eventos/models.py
forms.py
templates/inscricao_caravana.html
views.py

index 6bc01f6..3dd623e 100644 (file)
@@ -95,6 +95,7 @@ class Participante(models.Model):
     bairro = models.CharField(maxlength=100)
     cidade = models.CharField(maxlength=100)
     uf = models.CharField(maxlength=3)
+    usuario = models.ForeignKey(User)
 
     class Admin:
         pass
@@ -103,6 +104,17 @@ class Participante(models.Model):
         return self.nome
 
 
+class Caravana(models.Model):
+    coordenador = models.ForeignKey(Participante)
+    participantes = models.TextField()
+
+    class Admin:
+        pass
+
+    def __str__(self):
+        return str(self.coordenador)
+
+
 class CategoriaTrabalho(models.Model):
     nome = models.CharField(maxlength=100)
 
index 9a60daf..ed1034d 100644 (file)
--- a/forms.py
+++ b/forms.py
@@ -102,12 +102,6 @@ class EditarSenha(forms.Form):
     nova_senha_2 = forms.CharField(max_length=100, widget=PasswordInput(),
         label='Conferir Senha')
 
-class InscricaoCaravana(forms.Form):
-    lista_nomes = forms.CharField(label='Lista de nomes',
-        widget=forms.Textarea(), help_text='Um participante por linha, '
-        'informando nome completo e email no seguine formato: '
-        'Nome Completo &lt;email@server.domain&gt;')
-
 class InscricaoBase(forms.Form):
     nome_completo = forms.CharField(max_length=100)
     rg = forms.CharField(max_length=100)
@@ -130,5 +124,8 @@ class Inscricao(InscricaoBase):
     inscricao_comercial = forms.BooleanField(required=False,
         label='Inscrição Comercial')
 
-class InscricaoCoordenador(InscricaoBase):
-    pass
+class InscricaoCaravana(InscricaoBase):
+    lista_nomes = forms.CharField(label='Lista de nomes',
+        widget=forms.Textarea(), help_text='Um participante por linha, '
+        'informando nome completo e email no seguine formato: '
+        'Nome Completo &lt;email@server.domain&gt;')
index e3b529d..38fd346 100644 (file)
@@ -6,16 +6,12 @@
 {% if ok %}
 
 <div class="confirmation">
-    <p>Cadastro efetuado com sucesso, você já foi autenticado.</p>
+    <p>Cadastro efetuado com sucesso.</p>
 </div>
 
 {% else %}
 
 <form id="cadastro" method="post" action=".">
-    <h3>Dados do coordenador da caravana</h3>
-    {{ form_coordenador.as_p }}
-
-    <h3>Dados dos participantes da caravana</h3>
     {{ form.as_p }}
 
     <input type="submit" value="Ok" />
index b6d3471..97da703 100644 (file)
--- a/views.py
+++ b/views.py
@@ -204,11 +204,62 @@ def inscricao_individual(request):
 
 
 @enable_login_form
+@transaction.commit_manually
 def inscricao_caravana(request):
-    form_coordenador = InscricaoCoordenador(request.POST or None)
     form = InscricaoCaravana(request.POST or None)
-    return build_response(request, 'inscricao_caravana.html',
-        {'form_coordenador': form_coordenador, 'form': form})
+    ok = False
+    if request.POST and form.is_valid():
+        cd = form.cleaned_data
+        badattr = form.errors
+        wrong = False
+
+        # don't save duplicated users...
+        try:
+            User.objects.get(username=cd['nome_usuario'])
+            badattr['nome_usuario'] = ['Este nome de usuário já existe!']
+            wrong = True
+            transaction.rollback()
+        except User.DoesNotExist:
+            pass
+
+        if not wrong and cd['senha'] != cd['senha_2']:
+            badattr['senha_2'] = ['A senha não confere']
+            wrong = True
+            transaction.rollback()
+
+        if not wrong:
+            group = Group.objects.get_or_create(name='participantes')[0]
+
+            user = User(username=cd['nome_usuario'], email=cd['email'])
+            user.set_password(cd['senha'])
+            user.is_active = False
+            user.save()
+            user.groups.add(group)
+
+            p = Participante()
+            p.usuario = user
+            p.nome = cd['nome_completo']
+            p.rg = cd['rg']
+            p.email = cd['email']
+            p.rua = cd['rua']
+            p.numero = cd['numero']
+            p.bairro = cd['bairro']
+            p.cidade = cd['cidade']
+            p.uf = cd['uf']
+            p.telefone = cd['telefone']
+            p.home_page = cd['home_page']
+            p.save()
+
+            c = Caravana()
+            c.coordenador = p
+            c.participantes = cd['lista_nomes']
+            c.save()
+
+            ok = True
+            transaction.commit()
+
+    c = {'form': form, 'ok': ok}
+    return build_response(request, 'inscricao_caravana.html', c)
 
 
 @login_required