X-Git-Url: http://git.cascardo.info/?p=cascardo%2Feventmanager.git;a=blobdiff_plain;f=views.py;h=6b370ff2d2d914535bc30dccfaa39a804919da24;hp=1c1024b25d983d954e08afd62fd48d8aa013a4fc;hb=b909209c1ef96b1f577bb5a270d33d8a6a273a7d;hpb=5b6c9d9790b7d70bfe187050981da5b43acbd3f6 diff --git a/views.py b/views.py index 1c1024b..6b370ff 100644 --- a/views.py +++ b/views.py @@ -21,15 +21,22 @@ 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.contrib.auth import authenticate, login +from django.contrib.admin.views.decorators import staff_member_required from django.newforms import form_for_instance +from django.core.exceptions import ObjectDoesNotExist from django.core.mail import EmailMessage from django.db import transaction from django.http import get_host +from django.conf import settings from eventmanager.decorators import enable_login_form -from eventmanager.forms import * from eventmanager.conteudo.models import Noticia, Menu, Secao from eventmanager.eventos.models import * +from eventmanager.forms import * +from eventmanager.controllers import * + +from datetime import datetime import sha FROM_EMAIL = 'Emsl 2007 ' @@ -70,79 +77,63 @@ def index(request): def cadastro_palestrante(request): form = CadastroPalestrante(request.POST or None) ok = False + c = {'form': form} if request.POST and form.is_valid(): cd = form.cleaned_data badattr = form.errors - wrong = False - if not cd['telefone'] and not cd['celular']: - badattr['telefone_comercial'] = \ - ['Algum número de telefone precisa ser informado'] - wrong = True - - # don't save duplicated users... + group = Group.objects.get_or_create(name='palestrantes')[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 = Palestrante() + p.usuario = user + + p.nome = cd['nome_completo'] + p.email = cd['email'] + p.telefone = cd['telefone'] + p.celular = cd['celular'] + p.instituicao = cd['instituicao'] + p.rua = cd['rua'] + p.numero = cd['numero'] + p.bairro = cd['bairro'] + p.cidade = cd['cidade'] + p.uf = cd['uf'] + p.minicurriculo = cd['minicurriculo'] + p.curriculo = cd['curriculo'] + p.save() + + for i in cd.get('area_interesse', []): + p.area_interesse.add(i) + + pid = p.id + 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) + t = loader.get_template('email-palestrante.html') + ec = Context(dict(fulano=['nome_usuario'], link=link)) + + # to be shown in template... + c.update({'email': email}) 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 cd['senha'] != cd['senha_2']: - badattr['senha_2'] = ['A senha não confere'] - wrong = True + # XXX: maybe is not a good so prety put things hardcoded =( + m = EmailMessage('Encontro Mineiro de Software Livre', + t.render(ec), 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 + c.update({'ok': ok}) + transaction.commit() - if not wrong: - group = Group.objects.get_or_create(name='palestrantes')[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 = Palestrante() - p.usuario = user - - p.nome = cd['nome_completo'] - p.email = cd['email'] - p.telefone = cd['telefone'] - p.celular = cd['celular'] - p.instituicao = cd['instituicao'] - p.rua = cd['rua'] - p.numero = cd['numero'] - p.bairro = cd['bairro'] - p.cidade = cd['cidade'] - p.uf = cd['uf'] - p.minicurriculo = cd['minicurriculo'] - p.curriculo = cd['curriculo'] - p.save() - - for i in cd.get('area_interesse', []): - p.area_interesse.add(i) - - pid = p.id - 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) - t = loader.get_template('email-palestrante.html') - c = Context(dict(fulano=['nome_usuario'], link=link)) - try: - m = EmailMessage('Encontro Mineiro de Software Livre', - 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 - transaction.commit() - - c = {'form': form, 'ok': ok} return build_response(request, 'cadastro.html', c) @@ -158,58 +149,141 @@ def inscricao_individual(request): 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() - import pdb; pdb.set_trace() - 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() + 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.cep = cd['cep'] + p.refbanco = 0 + p.telefone = cd['telefone'] + p.home_page = cd['home_page'] + p.comercial = cd['inscricao_comercial'] + p.cpf_cnpj = cd['cpf_cnpj'] + p.save() + + u = authenticate(username=cd['nome_usuario'], password=cd['senha']) + login(request, u) + transaction.commit() + ok = True - ok = True - transaction.commit() c = {'form': form, 'ok': ok} return build_response(request, 'inscricao_individual.html', c) @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 + 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.cep = cd['cep'] + p.refbanco = 0 + p.telefone = cd['telefone'] + p.home_page = cd['home_page'] + p.comercial = False # yeah, always false! + p.cpf_cnpj = '' + p.save() + + c = Caravana() + c.coordenador = p + c.participantes = cd['lista_nomes'] + c.save() + + ok = True + u = authenticate(username=cd['nome_usuario'], password=cd['senha']) + login(request, u) + transaction.commit() + + c = {'form': form, 'ok': ok} + return build_response(request, 'inscricao_caravana.html', c) + + +@enable_login_form +def inscricao_boleto(request): + # dynamic values of the form + now = datetime.now() + today = datetime.date(now) + first_date = datetime.date(datetime(2007, 10, 16)) + c = {} + + p = request.user.participante_set.get() + ca = p.caravana_set.all() and p.caravana_set.get() + + initial = {} + + if p.refbanco == 0: + # o número refTran deve ser gerado a cada novo boleto e deve ser único, + # mesmo para os testes + refs = [x.refbanco for x in Participante.objects.all()] + new_ref = len(refs) + while new_ref in refs or new_ref <= settings.MIN_REF_TRAN: + new_ref += 1 + + # este dado precisa ser persistente para que possa ser comparado logo acima + p.refbanco = new_ref + p.save() + else: + new_ref = p.refbanco + + initial['refTran'] = '1458197%s' % str(new_ref).zfill(10) + if today <= first_date: + initial['dtVenc'] = '16102007' + if not p.comercial: + initial['valor'] = '3500' + else: + initial['valor'] = '8000' + + # caso seja uma caravana... + if ca and len(ca.parsed_participantes()) >= 10: + # sim, o valor aqui é 25 -- Desconto + initial['valor'] = '%s00' % (len(ca.parsed_participantes()) * 25) + c.update({'caravana': 1}) + else: + initial['valor'] = '5000' + initial['dtVenc'] = '17102007' + + initial['nome'] = p.nome + initial['endereco'] = '%s, %s - %s' % (p.rua, p.numero, p.bairro) + initial['cidade'] = p.cidade + initial['uf'] = p.uf + initial['cep'] = p.cep + + form = Boleto(request.POST or None, initial=initial) + c.update({'form': form}) + c.update(initial) + return build_response(request, 'inscricao_boleto.html', c) @login_required @@ -227,7 +301,7 @@ def submeter_trabalho(request): t.descricao_curta = cd['descricao_curta'] t.descricao_longa = cd['descricao_longa'] t.recursos = cd['recursos'] - t.evento = Evento.objects.get(pk=1) # let the hammer play arround! + t.evento = Evento.objects.get(pk=1) # XXX: let the hammer play arround! t.save() logged_in = request.user.palestrante_set.get() @@ -250,22 +324,20 @@ def meus_trabalhos(request): # não palestrante... c = {'palestrante': 0} return build_response(request, 'meus_trabalhos.html', c) - t = Trabalho.objects.filter(palestrante=p) c = {'trabalhos': t, 'palestrante': 1} 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): +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) + trabalho = get_object_or_404(Trabalho, id=codigo,palestrante=p) Formulario = form_for_instance(trabalho) if request.method == 'POST': form = Formulario(request.POST) @@ -281,27 +353,86 @@ def editar_trabalho(request, codigo): c = {'formulario':form} return build_response(request, 'editar_trabalho.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) + + form = Formulario(request.POST or None) + if request.POST and 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) + + c = {'formulario': form} + return build_response(request, 'editar_trabalho.html', c) @login_required def meus_dados(request): - form = EditarPalestrante(request.POST or None) - palestrante = request.user.palestrante_set.get() - ok = False + try: + entity = request.user.palestrante_set.get() + except Palestrante.DoesNotExist: + entity = request.user.participante_set.get() + + FormKlass = form_for_instance(entity) - for name, field in form.fields.items(): - field.initial = getattr(palestrante, name) + # ugly hammer to hide some fields... + del FormKlass.base_fields['usuario'] + ok = False + form = FormKlass(request.POST or None) if request.POST and form.is_valid(): - cd = form.cleaned_data - for name, field in form.fields.items(): - setattr(palestrante, name, cd[name]) - palestrante.save() + form.save() ok = True - c = {'form': form, 'ok': ok} - return build_response(request, 'editar_palestrante.html', c) + c = {'form': form, 'ok': ok, 'title': entity.__class__.__name__} + return build_response(request, 'editar_usuario.html', c) + + +@enable_login_form +def dados_palestrante(request, codigo): + d = {} + try: + d = {'dados_usuario': Palestrante.objects.get(id=codigo)} + except ObjectDoesNotExist: + d = {} + return build_response(request, 'dados_palestrante.html', d) + + +@enable_login_form +def dados_palestra(request, codigo): + try: + d = {'dados_palestra': Trabalho.objects.get(id=codigo)} + except ObjectDoesNotExist: + d = {} + return build_response(request, 'dados_palestra.html',d) +@enable_login_form +def programacao(request): + ap = Trabalho.objects.filter(aprovado=True) + ord = ap.order_by('dia', 'time_start', 'room') + d = {'aprovadas': ord} + return build_response(request, 'programacao.html',d) + +@enable_login_form +@staff_member_required +def grade(request): + ap = Trabalho.objects.filter(aprovado=True) + ord = ap.order_by('dia', 'time_start', 'room') + d = {'aprovadas': ord} + return build_response(request, 'grade.html', d) + @enable_login_form def chamada_trabalhos(request): return build_response(request, 'chamada_trabalhos.html')