Terminando o cadastro de inscrições de caravanas
[cascardo/eventmanager.git] / views.py
index 7639c57..97da703 100644 (file)
--- a/views.py
+++ b/views.py
@@ -17,10 +17,11 @@ License along with this program; if not, write to the
 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.
 """
-from django.shortcuts import render_to_response
+from django.shortcuts import render_to_response, get_object_or_404
 from django.template import RequestContext, Context, loader
 from django.contrib.auth.decorators import login_required, user_passes_test
 from django.contrib.auth.models import Group, User
+from django.newforms import form_for_instance
 from django.core.mail import EmailMessage
 from django.db import transaction
 from django.http import get_host
@@ -50,8 +51,10 @@ def build_response(request, template, extra={}):
     news = Noticia.objects.order_by('-data_criacao')
     menus = Menu.objects.all()
     index_sections = Secao.objects.filter(index=True)
+    login_failed = 'login_failed' in request.GET
     c = {'news': news, 'menu': menus,
-        'index_sections': index_sections}
+        'index_sections': index_sections,
+        'login_failed': login_failed}
     c.update(extra)
     return render_to_response(template, Context(c),
             context_instance=RequestContext(request))
@@ -73,8 +76,8 @@ def cadastro_palestrante(request):
         wrong = False
 
         if not cd['telefone'] and not cd['celular']:
-            badattr['telefone_comercial'] = ['Algum número de telefone '
-                                             'precisa ser informado']
+            badattr['telefone_comercial'] = \
+                    ['Algum número de telefone precisa ser informado']
             wrong = True
 
         # don't save duplicated users...
@@ -121,7 +124,7 @@ def cadastro_palestrante(request):
                 p.area_interesse.add(i)
 
             pid = p.id
-            md5_email = sha.new(cd['emai']).hexdigest()
+            md5_email = sha.new(cd['email']).hexdigest()
             email = '%s <%s>' % (cd['nome_completo'], cd['email'])
             link = '%s/verificar?c=%s&c1=%s' % (get_host(request),
                     pid, md5_email)
@@ -132,6 +135,8 @@ def cadastro_palestrante(request):
                     t.render(c), FROM_EMAIL, [email])
                 m.send()
             except Exception:
+                badattr['email'] = \
+                    ['Desculpe mas não pude enviar o email de confirmação']
                 transaction.rollback()
             else:
                 ok = True
@@ -143,22 +148,118 @@ def cadastro_palestrante(request):
 
 @enable_login_form
 def inscricao(request):
-    post = request.POST
-    post2 = 'post2' in post and post or None
+    return build_response(request, 'inscricao.html')
 
-    # exibe o formulário de inscrição de estudantes.
-    if 'estudante' in post:
-        form = InscricaoEstudante(post2)
 
-    # inscrição normal (sem ser estudante)
-    elif not 'estudante' in post or 'empresa' in post:
-        form = InscricaoNormal(post2)
+@enable_login_form
+@transaction.commit_manually
+def inscricao_individual(request):
+    form = Inscricao(request.POST or None)
+    ok = False
+    if request.POST and form.is_valid():
+        cd = form.cleaned_data
+        badattr = form.errors
+        wrong = False
 
-    # primeiro passo...
-    else:
-        form = Inscricao(post or None)
+        # 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.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()
+
+            ok = True
+            transaction.commit()
+    c = {'form': form, 'ok': ok}
+    return build_response(request, 'inscricao_individual.html', c)
 
-    return build_response(request, 'inscricao.html', {'form': form})
+
+@enable_login_form
+@transaction.commit_manually
+def inscricao_caravana(request):
+    form = InscricaoCaravana(request.POST or None)
+    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
@@ -205,6 +306,32 @@ def meus_trabalhos(request):
     return build_response(request, 'meus_trabalhos.html', c)
 
 
+@login_required
+@user_passes_test(lambda u:u.palestrante_set.count() == 1, login_url='/')
+def editar_trabalho(request, codigo):
+    try:
+        p = Palestrante.objects.get(usuario=request.user)
+    except Palestrante.DoesNotExist:
+        # não palestrante...
+        c = {'palestrante': 0}
+        return build_response(request, 'meus_trabalhos.html', c)
+    trabalho = get_object_or_404(Trabalho, id=codigo, palestrante=p)
+    Formulario = form_for_instance(trabalho)
+    if request.method == 'POST':
+        form = Formulario(request.POST)
+        if form.is_valid():
+            form.save()
+            t = Trabalho.objects.filter(palestrante=p)
+            c = {'trabalhos': t, 'palestrante': 1}
+            c['editado_sucesso']=trabalho.titulo
+            return build_response(request, 'meus_trabalhos.html', c)
+    else:
+        form = Formulario()
+    
+    c = {'formulario':form}
+    return build_response(request, 'editar_trabalho.html', c)
+
+
 @login_required
 def meus_dados(request):
     form = EditarPalestrante(request.POST or None)