from django import forms from django.utils.translation import ugettext_lazy as _ from django.views.generic.edit import FormMixin from parlamentares.models import Parlamentar from sapl.crud import build_crud from .models import (ExpedienteMateria, ExpedienteSessao, OrdemDia, RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria) tipo_sessao_crud = build_crud( TipoSessaoPlenaria, 'tipo_sessao_plenaria', [ [_('Tipo de Sessão Plenária'), [('nome', 6), ('quorum_minimo', 6)]], ]) sessao_crud = build_crud( SessaoPlenaria, '', [ [_('Dados Básicos'), [('numero', 1), ('tipo', 3), ('legislatura', 4), ('sessao_legislativa', 4)], [('data_inicio', 5), ('hora_inicio', 5), ('iniciada', 2)], [('data_fim', 5), ('hora_fim', 5), ('finalizada', 2)], [('upload_pauta', 6), ('upload_ata', 6)], [('url_audio', 6), ('url_video', 6)]], ]) expediente_materia_crud = build_crud( ExpedienteMateria, '', [ [_('Cadastro de Matérias do Expediente'), [('data_ordem', 4), ('tip_sessao_FIXME', 4), ('numero_ordem', 4)], [('tip_id_basica_FIXME', 4), ('num_ident_basica_FIXME', 4), ('ano_ident_basica_FIXME', 4)], [('tipo_votacao', 12)], [('observacao', 12)]], ]) ordem_dia_crud = build_crud( OrdemDia, '', [ [_('Cadastro de Matérias da Ordem do Dia'), [('data_ordem', 4), ('tip_sessao_FIXME', 4), ('numero_ordem', 4)], [('tip_id_basica_FIXME', 4), ('num_ident_basica_FIXME', 4), ('ano_ident_basica_FIXME', 4)], [('tipo_votacao', 12)], [('observacao', 12)]], ]) tipo_resultado_votacao_crud = build_crud( TipoResultadoVotacao, 'tipo_resultado_votacao', [ [_('Tipo de Resultado da Votação'), [('nome', 12)]], ]) tipo_expediente_crud = build_crud( TipoExpediente, 'tipo_expediente', [ [_('Tipo de Expediente'), [('nome', 12)]], ]) registro_votacao_crud = build_crud( RegistroVotacao, '', [ [_('Votação Simbólica'), [('numero_votos_sim', 3), ('numero_votos_nao', 3), ('numero_abstencoes', 3), ('nao_votou_FIXME', 3)], [('votacao_branco_FIXME', 6), ('ind_votacao_presidente_FIXME', 6)], [('tipo_resultado_votacao', 12)], [('observacao', 12)]], ]) def expediente_form_field(index): return 'ExpedienteForm_%d' % index class ExpedienteForm(forms.Form): def __init__(self, *args, **kwargs): super(ExpedienteForm, self).__init__(*args, **kwargs) for i, values in enumerate(TipoExpediente.objects.all()): self.fields[expediente_form_field(i)] = forms.CharField( widget=forms.Textarea, max_length=100, required=False) class ExpedienteView(FormMixin, sessao_crud.CrudDetailView): template_name = 'sessao/expediente.html' form_class = ExpedienteForm def post(self, request, *args, **kwargs): self.object = self.get_object() form = self.get_form() if form.is_valid(): for i, values in enumerate(TipoExpediente.objects.all()): expediente = ExpedienteSessao() expediente.sessao_plenaria = self.object expediente.tipo = values expediente.conteudo = form.data[expediente_form_field(i)] expediente.save() return self.form_valid(form) else: return self.form_invalid(form) def get_success_url(self): return self.detail_url def get_title_and_fieldnames(self): for i, tipo in enumerate(TipoExpediente.objects.all()): yield tipo.nome, expediente_form_field(i) class PresencaForm(forms.Form): presenca = forms.BooleanField(required=False, initial=False) parlamentar = forms.CharField(required=False, max_length=20) class PresencaView(FormMixin, sessao_crud.CrudDetailView): template_name = 'sessao/presenca.html' form_class = PresencaForm paginate_by = 10 def post(self, request, *args, **kwargs): self.object = self.get_object() form = self.get_form() if form.is_valid(): for parlamentar in Parlamentar.objects.all(): if parlamentar.ativo and form.data["presenca"] == "on": lista_presenca = SessaoPlenariaPresenca() lista_presenca.sessao_plen = self.object lista_presenca.parlamentar = parlamentar lista_presenca.save() return self.form_valid(form) else: return self.form_invalid(form) def get_success_url(self): return self.detail_url def get_parlamentares(self): self.object = self.get_object() for parlamentar in Parlamentar.objects.all(): if parlamentar.ativo: yield parlamentar