diff --git a/materia/forms.py b/materia/forms.py index 9604ad6ca..541079e24 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -146,26 +146,6 @@ class RelatoriaForm(ModelForm): return cleaned_data - class Meta: - model = Relatoria - fields = ['data_designacao_relator', 'comissao', 'parlamentar', - 'data_destituicao_relator', 'tipo_fim_relatoria'] - - widgets = {'comissao': forms.Select(attrs={'disabled': 'disabled'})} - - def clean(self): - cleaned_data = self.cleaned_data - - try: - comissao = Comissao.objects.get(id=self.initial['comissao']) - except ObjectDoesNotExist: - msg = _('A localização atual deve ser uma comissão.') - raise ValidationError(msg) - else: - cleaned_data['comissao'] = comissao - - return cleaned_data - class TramitacaoForm(ModelForm): diff --git a/materia/views.py b/materia/views.py index 1cdfada39..3403a3577 100644 --- a/materia/views.py +++ b/materia/views.py @@ -1,7 +1,6 @@ from datetime import datetime from random import choice from string import ascii_letters, digits -from crispy_layout_mixin import form_actions from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Button @@ -133,35 +132,6 @@ class RelatoriaCrud(MasterDetailCrud): form_class = RelatoriaForm -class RelatoriaCrud(MasterDetailCrud): - model = Relatoria - parent_field = 'materia' - help_path = '' - - class CreateView(MasterDetailCrud.CreateView): - form_class = RelatoriaForm - - def get_initial(self): - materia = MateriaLegislativa.objects.get(id=self.kwargs['pk']) - - loc_atual = Tramitacao.objects.filter( - materia=materia).last() - - if loc_atual is None: - localizacao = 0 - else: - comissao = loc_atual.unidade_tramitacao_destino.comissao - if comissao: - localizacao = comissao.pk - else: - localizacao = 0 - - return {'comissao': localizacao} - - class UpdateView(MasterDetailCrud.UpdateView): - form_class = RelatoriaForm - - class TramitacaoCrud(MasterDetailCrud): model = Tramitacao parent_field = 'materia' diff --git a/parlamentares/forms.py b/parlamentares/forms.py index 984ade37c..dd345345c 100644 --- a/parlamentares/forms.py +++ b/parlamentares/forms.py @@ -71,7 +71,7 @@ def validar_datas(data_filiacao, data_desfiliacao, parlamentar, filiacao): ultima_filiacao = todas_filiacoes.last() # Se ultima filiacao aberta e insercao posterior a esta filiacao if (not ultima_filiacao.data_desfiliacao and - data_filiacao >= ultima_filiacao.data): + data_filiacao >= ultima_filiacao.data): error_msg = _("O parlamentar não pode se filiar \ a novo partido sem antes se \ desfiliar do partido anterior") diff --git a/parlamentares/views.py b/parlamentares/views.py index 89fd88615..70d839ef0 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -28,6 +28,7 @@ TipoMilitarCrud = Crud.build(SituacaoMilitar, 'tipo_situa_militar') DependenteCrud = MasterDetailCrud.build(Dependente, 'parlamentar', '') + class MandatoCrud(MasterDetailCrud): model = Mandato parent_field = 'parlamentar' @@ -36,6 +37,7 @@ class MandatoCrud(MasterDetailCrud): class ListView(MasterDetailCrud.ListView): ordering = ('-legislatura__data_inicio') + class FiliacaoCrud(MasterDetailCrud): model = Filiacao parent_field = 'parlamentar' diff --git a/sessao/forms.py b/sessao/forms.py index d62af30c7..1488097e6 100644 --- a/sessao/forms.py +++ b/sessao/forms.py @@ -1,5 +1,60 @@ from django import forms from django.utils.translation import ugettext_lazy as _ +from django.forms import ModelForm +from .models import ExpedienteMateria +from materia.models import TipoMateriaLegislativa, MateriaLegislativa +from datetime import datetime +from django.core.exceptions import ObjectDoesNotExist, ValidationError + + +class ExpedienteMateriaForm(ModelForm): + + tipo_materia = forms.ModelChoiceField( + label=_('Tipo Matéria'), + required=True, + queryset=TipoMateriaLegislativa.objects.all(), + empty_label='Selecione', + ) + + numero_materia = forms.CharField( + label='Número Matéria', required=True) + + ano_materia = forms.CharField( + label='Ano Matéria', required=True) + + data_ordem = forms.CharField( + initial=datetime.now().strftime('%d/%m/%Y'), + widget=forms.TextInput(attrs={'readonly': 'readonly'})) + + class Meta: + model = ExpedienteMateria + fields = ['data_ordem', 'numero_ordem', 'tipo_materia', 'observacao', + 'numero_materia', 'ano_materia', 'tipo_votacao'] + + def clean_data_ordem(self): + return datetime.now() + + def clean(self): + cleaned_data = self.cleaned_data + try: + materia = MateriaLegislativa.objects.get( + numero=self.cleaned_data['numero_materia'], + ano=self.cleaned_data['ano_materia'], + tipo=self.cleaned_data['tipo_materia']) + except ObjectDoesNotExist: + msg = _('A matéria a ser inclusa não existe no cadastro' + ' de matérias legislativas.') + raise ValidationError(msg) + else: + cleaned_data['materia'] = materia + + return cleaned_data + + def save(self, commit=False): + expediente = super(ExpedienteMateriaForm, self).save(commit) + expediente.materia = self.cleaned_data['materia'] + expediente.save() + return expediente class PresencaForm(forms.Form): @@ -28,18 +83,6 @@ class MateriaOrdemDiaForm(forms.Form): error_message = forms.CharField(required=False, label=_('Matéria')) -class OradorForm(forms.Form): - numero_ordem = forms.IntegerField( - required=True, - label=_('Ordem de pronunciamento')) - parlamentar = forms.CharField(required=False, max_length=20) - url_discurso = forms.CharField(required=False, max_length=100) - - -class OradorDeleteForm(forms.Form): - pass - - class MesaForm(forms.Form): parlamentar = forms.IntegerField(required=True) cargo = forms.IntegerField(required=True) diff --git a/sessao/layouts.yaml b/sessao/layouts.yaml index 650105863..117be72f7 100644 --- a/sessao/layouts.yaml +++ b/sessao/layouts.yaml @@ -39,3 +39,24 @@ RegistroVotacao: - votacao_branco_FIXME ind_votacao_presidente_FIXME - tipo_resultado_votacao - observacao + +Orador: + Orador das Explicações Pessoais: + - numero_ordem parlamentar url_discurso + +OradorExpediente: + Orador do Expediente: + - numero_ordem parlamentar url_discurso + +ExpedienteMateria: + Matéria do Expediente: + - data_ordem numero_ordem + - tipo_materia numero_materia ano_materia + - tipo_votacao + - observacao + +ExpedienteMateriaDetail: + Matérias do Expediente: + - materia + - tipo_votacao + - observacao diff --git a/sessao/urls.py b/sessao/urls.py index 4a50be674..1e5ce368f 100644 --- a/sessao/urls.py +++ b/sessao/urls.py @@ -2,13 +2,11 @@ from django.conf.urls import include, url from django.views.static import serve from sapl import settings -from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView, - ExpedienteOrdemDiaView, ExpedienteView, - ExplicacaoDelete, ExplicacaoEdit, ExplicacaoView, - ListExpedienteOrdemDiaView, ListMateriaOrdemDiaView, - MateriaOrdemDiaView, MesaView, - OradorExpedienteDelete, OradorExpedienteEdit, - OradorExpedienteView, PainelView, +from sessao.views import (EditMateriaOrdemDiaView, + ExpedienteView, + ListMateriaOrdemDiaView, + MateriaOrdemDiaView, MesaView, OradorCrud, + OradorExpedienteCrud, PainelView, PautaExpedienteDetail, PautaOrdemDetail, PautaSessaoDetailView, PautaSessaoListView, PresencaOrdemDiaView, PresencaView, ResumoView, @@ -18,7 +16,7 @@ from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView, VotacaoExpedienteView, VotacaoNominalEditView, VotacaoNominalExpedienteEditView, VotacaoNominalExpedienteView, VotacaoNominalView, - VotacaoView) + VotacaoView, ExpedienteMateriaCrud, abrir_votacao_view) from .apps import AppConfig @@ -29,7 +27,11 @@ sessao_rest = [ ] urlpatterns = [ - url(r'^sessao/', include(SessaoCrud.get_urls())), + url(r'^sessao/', include(SessaoCrud.get_urls() + OradorCrud.get_urls() + + OradorExpedienteCrud.get_urls() + ExpedienteMateriaCrud.get_urls())), + + url(r'^(?P\d+)/(?P\d+)/abrir-votacao$', abrir_votacao_view, + name="abrir_votacao"), url(r'^media/(?P.*)$', serve, {'document_root': settings.MEDIA_ROOT}), @@ -61,12 +63,6 @@ urlpatterns = [ url(r'^(?P\d+)/presencaordemdia$', PresencaOrdemDiaView.as_view(), name='presencaordemdia'), - url(r'^(?P\d+)/oradorexpediente$', - OradorExpedienteView.as_view(), name='oradorexpediente'), - url(r'^(?P\d+)/oradorexpediente/excluir/(?P\d+)$', - OradorExpedienteDelete.as_view(), name='oradorexcluir'), - url(r'^(?P\d+)/oradorexpediente/editar/(?P\d+)$', - OradorExpedienteEdit.as_view(), name='oradoreditar'), url(r'^(?P\d+)/mesa$', MesaView.as_view(), name='mesa'), url(r'^(?P\d+)/materiaordemdia/list$', ListMateriaOrdemDiaView.as_view(), name='materiaordemdia_list'), @@ -76,20 +72,8 @@ urlpatterns = [ EditMateriaOrdemDiaView.as_view(), name='materiaordemdia_edit'), url(r'^(?P\d+)/materiaordemdia/create$', MateriaOrdemDiaView.as_view(), name='materiaordemdia_create'), - url(r'^(?P\d+)/expedienteordemdia/list$', - ListExpedienteOrdemDiaView.as_view(), name='expedienteordemdia_list'), - url(r'^(?P\d+)/expedienteordemdia/edit/(?P\d+)$', - EditExpedienteOrdemDiaView.as_view(), name='expedienteordemdia_edit'), - url(r'^(?P\d+)/expedienteordemdia/create$', - ExpedienteOrdemDiaView.as_view(), name='expedienteordemdia_create'), url(r'^(?P\d+)/resumo$', ResumoView.as_view(), name='resumo'), - url(r'^(?P\d+)/explicacao$', - ExplicacaoView.as_view(), name='explicacao'), - url(r'^(?P\d+)/explicacao/excluir/(?P\d+)$', - ExplicacaoDelete.as_view(), name='explicacaoexcluir'), - url(r'^(?P\d+)/explicacao/editar/(?P\d+)$', - ExplicacaoEdit.as_view(), name='explicacaoeditar'), url(r'^(?P\d+)/matordemdia/votnom/(?P\d+)/(?P\d+)$', VotacaoNominalView.as_view(), name='votacaonominal'), url(r'^(?P\d+)/matordemdia/votnom/edit/(?P\d+)/(?P\d+)$', diff --git a/sessao/views.py b/sessao/views.py index 442136151..99e8d1e63 100644 --- a/sessao/views.py +++ b/sessao/views.py @@ -2,7 +2,7 @@ from datetime import datetime from re import sub from django.contrib import messages -from django.core.exceptions import ObjectDoesNotExist +from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.core.urlresolvers import reverse from django.forms.utils import ErrorList from django.utils.html import strip_tags @@ -12,16 +12,19 @@ from django.views.generic.edit import FormMixin from rest_framework import generics import crud.base +import crud.masterdetail from crud.base import Crud, make_pagination +from crud.masterdetail import MasterDetailCrud from materia.models import (Autoria, DocumentoAcessorio, TipoMateriaLegislativa, Tramitacao) from norma.models import NormaJuridica from parlamentares.models import Parlamentar from sessao.serializers import SessaoPlenariaSerializer +from django.http.response import HttpResponseRedirect from .forms import (ExpedienteForm, ListMateriaForm, MateriaOrdemDiaForm, - MesaForm, OradorDeleteForm, OradorForm, PresencaForm, - VotacaoEditForm, VotacaoForm, VotacaoNominalForm) + MesaForm, PresencaForm, VotacaoEditForm, VotacaoForm, + VotacaoNominalForm, ExpedienteMateriaForm) from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao, IntegranteMesa, MateriaLegislativa, Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, @@ -30,7 +33,6 @@ from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao, VotoParlamentar) TipoSessaoCrud = Crud.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria') -ExpedienteMateriaCrud = Crud.build(ExpedienteMateria, '') OrdemDiaCrud = Crud.build(OrdemDia, '') TipoResultadoVotacaoCrud = Crud.build( TipoResultadoVotacao, 'tipo_resultado_votacao') @@ -38,6 +40,132 @@ TipoExpedienteCrud = Crud.build(TipoExpediente, 'tipo_expediente') RegistroVotacaoCrud = Crud.build(RegistroVotacao, '') +def abrir_votacao_view(request, pk, spk): + existe_votacao_aberta = ExpedienteMateria.objects.filter( + sessao_plenaria_id=spk, votacao_aberta=True + ).exists() + if existe_votacao_aberta: + msg = _('Já existe uma matéria com votação aberta. Para abrir ' + 'outra, termine ou feche a votação existente.') + raise ValidationError(msg) + else: + expediente = ExpedienteMateria.objects.get(id=pk) + expediente.votacao_aberta = True + expediente.save() + return HttpResponseRedirect( + reverse('sessao:expedientemateria_list', kwargs={'pk': spk})) + + +class ExpedienteMateriaCrud(MasterDetailCrud): + model = ExpedienteMateria + parent_field = 'sessao_plenaria' + help_path = '' + + class BaseMixin(MasterDetailCrud.BaseMixin): + list_field_names = ['numero_ordem', 'materia', + 'observacao', 'resultado'] + + class ListView(MasterDetailCrud.ListView): + ordering = ['numero_ordem', 'materia', 'resultado'] + + def get_rows(self, object_list): + for obj in object_list: + if not obj.resultado: + if obj.votacao_aberta: + url = '' + if obj.tipo_votacao == 1: + url = reverse('sessao:votacaosimbolicaexp', + kwargs={ + 'pk': obj.sessao_plenaria_id, + 'oid': obj.materia_id, + 'mid': obj.pk}) + elif obj.tipo_votacao == 2: + url = reverse('sessao:votacaonominalexp', + kwargs={ + 'pk': obj.sessao_plenaria_id, + 'oid': obj.materia_id, + 'mid': obj.pk}) + elif obj.tipo_votacao == 3: + url = reverse('sessao:votacaosecretaexp', + kwargs={ + 'pk': obj.sessao_plenaria_id, + 'oid': obj.materia_id, + 'mid': obj.pk}) + + btn_registrar = ''' + Registrar Votação''' % (url) + obj.resultado = btn_registrar + else: + url = reverse('sessao:abrir_votacao', kwargs={ + 'pk': obj.pk, 'spk': obj.sessao_plenaria_id}) + btn_abrir = ''' + Matéria não votada
+ Abrir Votação''' % (url) + obj.resultado = btn_abrir + else: + url = '' + if obj.tipo_votacao == 1: + url = reverse('sessao:votacaosimbolicaexpedit', + kwargs={ + 'pk': obj.sessao_plenaria_id, + 'oid': obj.materia_id, + 'mid': obj.pk}) + elif obj.tipo_votacao == 2: + url = reverse('sessao:votacaonominalexpedit', + kwargs={ + 'pk': obj.sessao_plenaria_id, + 'oid': bj.materia_id, + 'mid': obj.pk}) + elif obj.tipo_votacao == 3: + url = reverse('sessao:votacaosecretaexpedit', + kwargs={ + 'pk': obj.sessao_plenaria_id, + 'oid': obj.materia_id, + 'mid': obj.pk}) + obj.resultado = '%s' % (url, + obj.resultado) + return [self._as_row(obj) for obj in object_list] + + class CreateView(MasterDetailCrud.CreateView): + form_class = ExpedienteMateriaForm + + class UpdateView(MasterDetailCrud.UpdateView): + form_class = ExpedienteMateriaForm + + def get_initial(self): + self.initial['tipo_materia'] = self.object.materia.tipo.id + self.initial['numero_materia'] = self.object.materia.numero + self.initial['ano_materia'] = self.object.materia.ano + return self.initial + + class DetailView(MasterDetailCrud.DetailView): + + @property + def layout_key(self): + return 'ExpedienteMateriaDetail' + + +class OradorCrud(MasterDetailCrud): + model = '' + parent_field = 'sessao_plenaria' + help_path = '' + + class ListView(MasterDetailCrud.ListView): + ordering = ['numero_ordem', 'parlamentar'] + + +class OradorExpedienteCrud(OradorCrud): + model = OradorExpediente + + +class OradorCrud(OradorCrud): + model = Orador + + class SessaoCrud(Crud): model = SessaoPlenaria help_path = 'sessao_plenaria' @@ -263,107 +391,6 @@ class ListMateriaOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView): return self.get(self, request, args, kwargs) -class ListExpedienteOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView): - template_name = 'sessao/expediente_ordemdia_list.html' - form_class = ListMateriaForm - - def get(self, request, *args, **kwargs): - self.object = self.get_object() - context = self.get_context_data(object=self.object) - - pk = self.kwargs['pk'] - ordem = ExpedienteMateria.objects.filter(sessao_plenaria_id=pk) - - materias_ordem = [] - for o in ordem: - ementa = o.observacao - titulo = o.materia - numero = o.numero_ordem - - autoria = Autoria.objects.filter(materia_id=o.materia_id) - autor = [str(a.autor) for a in autoria] - - mat = {'pk': pk, - 'oid': o.materia_id, - 'ordem_id': o.id, - 'ementa': ementa, - 'titulo': titulo, - 'numero': numero, - 'resultado': o.resultado, - 'autor': autor, - 'votacao_aberta': o.votacao_aberta, - 'tipo_votacao': o.tipo_votacao - } - materias_ordem.append(mat) - - sorted(materias_ordem, key=lambda x: x['numero']) - - context.update({'materias_ordem': materias_ordem}) - - return self.render_to_response(context) - - def post(self, request, *args, **kwargs): - self.object = self.get_object() - pk = self.kwargs['pk'] - form = ListMateriaForm(request.POST) - - if 'materia_reorder' in request.POST: - expedientes = ExpedienteMateria.objects.filter( - sessao_plenaria_id=pk) - exp_num = 1 - for e in expedientes: - e.numero_ordem = exp_num - e.save() - exp_num += 1 - elif 'abrir-votacao' in request.POST: - existe_votacao_aberta = ExpedienteMateria.objects.filter( - sessao_plenaria_id=pk, votacao_aberta=True - ).exists() - - if existe_votacao_aberta: - context = self.get_context_data(object=self.object) - - form._errors = {'error_message': 'error_message'} - context.update({'form': form}) - - pk = self.kwargs['pk'] - ordem = ExpedienteMateria.objects.filter( - sessao_plenaria_id=pk) - - materias_ordem = [] - for o in ordem: - ementa = o.observacao - titulo = o.materia - numero = o.numero_ordem - - autoria = Autoria.objects.filter(materia_id=o.materia_id) - autor = [str(a.autor) for a in autoria] - - mat = {'pk': pk, - 'oid': o.materia_id, - 'ordem_id': o.id, - 'ementa': ementa, - 'titulo': titulo, - 'numero': numero, - 'resultado': o.resultado, - 'autor': autor, - 'votacao_aberta': o.votacao_aberta, - 'tipo_votacao': o.tipo_votacao - } - materias_ordem.append(mat) - - sorted(materias_ordem, key=lambda x: x['numero']) - - context.update({'materias_ordem': materias_ordem}) - return self.render_to_response(context) - else: - ordem_id = request.POST['ordem_id'] - ordem = ExpedienteMateria.objects.get(id=ordem_id) - ordem.votacao_aberta = True - ordem.save() - return self.get(self, request, args, kwargs) - - class MateriaOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView): template_name = 'sessao/materia_ordemdia.html' form_class = MateriaOrdemDiaForm @@ -539,310 +566,6 @@ class EditMateriaOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView): kwargs={'pk': pk}) -class ExpedienteOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView): - template_name = 'sessao/materia_ordemdia.html' - form_class = MateriaOrdemDiaForm - - def get(self, request, *args, **kwargs): - self.object = self.get_object() - context = self.get_context_data(object=self.object) - - now = datetime.now() - - tipo_materia = TipoMateriaLegislativa.objects.all() - data_sessao = now - tipo_sessao = TipoSessaoPlenaria.objects.all() - tipo_votacao = ExpedienteMateria.TIPO_VOTACAO_CHOICES - ano_materia = now.year - - context.update({'data_sessao': data_sessao, - 'tipo_sessao': tipo_sessao, - 'tipo_materia': tipo_materia, - 'tipo_votacao': tipo_votacao, - 'ano_materia': ano_materia, - 'error_message': '', }) - return self.render_to_response(context) - - def post(self, request, *args, **kwargs): - - self.object = self.get_object() - context = self.get_context_data(object=self.object) - form = MateriaOrdemDiaForm(request.POST) - - if form.is_valid(): - try: - materia = MateriaLegislativa.objects.get( - numero=request.POST['numero_materia'], - tipo_id=request.POST['tipo_materia'], - ano=request.POST['ano_materia']) - except ObjectDoesNotExist: - form._errors["error_message"] = ErrorList([u""]) - context.update({'form': form}) - return self.render_to_response(context) - - # TODO: barrar matérias não existentes - # TODO: barrar criação de ordemdia para materias já incluídas - - ordemdia = ExpedienteMateria() - ordemdia.sessao_plenaria_id = self.object.id - ordemdia.materia_id = materia.id - ordemdia.numero_ordem = request.POST['numero_ordem'] - ordemdia.data_ordem = datetime.now() - ordemdia.observacao = sub(' ', ' ', - strip_tags(request.POST['observacao'])) - ordemdia.tipo_votacao = request.POST['tipo_votacao'] - ordemdia.save() - - return self.form_valid(form) - else: - context.update( - {'error_message': _("Não foi possível salvar formulário!")}) - return self.form_invalid(form) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('sessao:expedienteordemdia_list', - kwargs={'pk': pk}) - - -class EditExpedienteOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView): - template_name = 'sessao/materia_ordemdia_edit.html' - form_class = MateriaOrdemDiaForm - - def get(self, request, *args, **kwargs): - self.object = self.get_object() - context = self.get_context_data(object=self.object) - - pk = kwargs['pk'] - oid = kwargs['oid'] - ordem = ExpedienteMateria.objects.get( - sessao_plenaria_id=pk, materia_id=oid) - - materia = MateriaLegislativa.objects.get( - id=ordem.materia_id) - - data_ordem = ordem.data_ordem - tipo_votacao = ExpedienteMateria.TIPO_VOTACAO_CHOICES - tipo_sessao = TipoSessaoPlenaria.objects.all() - tipo_materia = TipoMateriaLegislativa.objects.all() - - context.update({'data_sessao': data_ordem, - 'tipo_sessao': tipo_sessao, - 'tipo_sessao_selected': self.object.tipo, - 'tipo_materia': tipo_materia, - 'tipo_materia_selected': materia.tipo, - 'tipo_votacao': tipo_votacao, - 'tipo_votacao_selected': ordem.tipo_votacao, - 'ano_materia': materia.ano, - 'numero_ordem': ordem.numero_ordem, - 'numero_materia': materia.numero, - 'ordem_id': oid, - 'oid': '', - 'observacao': sub( - ' ', ' ', strip_tags(ordem.observacao)), - 'error_message': '', }) - return self.render_to_response(context) - - def post(self, request, *args, **kwargs): - - self.object = self.get_object() - context = self.get_context_data(object=self.object) - form = MateriaOrdemDiaForm(request.POST) - - pk = kwargs['pk'] - oid = kwargs['oid'] - ordemdia = ExpedienteMateria.objects.get( - sessao_plenaria_id=pk, materia_id=oid) - - if 'update-ordemdia' in request.POST: - if form.is_valid(): - try: - materia = MateriaLegislativa.objects.get( - numero=request.POST['numero_materia'], - tipo_id=request.POST['tipo_materia'], - ano=request.POST['ano_materia']) - except ObjectDoesNotExist: - context.update( - {'error_message': _("Matéria inexistente!")}) - return self.form_invalid(form) - - ordemdia.materia_id = materia.id - ordemdia.numero_ordem = request.POST['numero_ordem'] - ordemdia.tipo_votacao = request.POST['tipo_votacao'] - obs = strip_tags(request.POST['observacao']) - ordemdia.observacao = sub(' ', ' ', obs) - ordemdia.save() - return self.form_valid(form) - else: - context.update( - {'error_message': _( - "Não foi possível salvar formulário!")}) - return self.form_invalid(form) - elif 'delete-ordemdia' in request.POST: - ordemdia.delete() - return self.form_valid(form) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('sessao:expedienteordemdia_list', - kwargs={'pk': pk}) - - -class OradorExpedienteDelete(FormMixin, SessaoCrud.CrudDetailView): - template_name = 'sessao/delete_orador.html' - form_class = OradorDeleteForm - - def post(self, request, *args, **kwargs): - self.object = self.get_object() - - orador_id = kwargs['oid'] - - form = OradorDeleteForm(request.POST) - - if form.is_valid(): - orador = OradorExpediente.objects.get( - sessao_plenaria_id=self.object.id, - parlamentar_id=orador_id) - orador.delete() - return self.form_valid(form) - else: - return self.form_invalid(form) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('sessao:oradorexpediente', kwargs={'pk': pk}) - - -class OradorExpedienteEdit(FormMixin, SessaoCrud.CrudDetailView): - template_name = 'sessao/edit_orador.html' - form_class = OradorForm - - def post(self, request, *args, **kwargs): - self.object = self.get_object() - form = OradorForm(request.POST) - - if form.is_valid(): - orador_id = kwargs['oid'] - - orador = OradorExpediente.objects.get( - sessao_plenaria_id=self.object.id, - parlamentar_id=orador_id) - orador.delete() - - orador = OradorExpediente() - orador.sessao_plenaria_id = self.object.id - orador.numero_ordem = request.POST['numero_ordem'] - orador.parlamentar = Parlamentar.objects.get( - id=orador_id) - orador.url_discurso = request.POST['url_discurso'] - orador.save() - - return self.form_valid(form) - else: - context = self.get_context_data(object=self.object) - orador_id = kwargs['oid'] - - parlamentar = Parlamentar.objects.get(id=orador_id) - orador = OradorExpediente.objects.get( - sessao_plenaria=self.object, parlamentar=parlamentar) - - orador = {'parlamentar': parlamentar, - 'url_discurso': orador.url_discurso} - context.update({'orador': orador}) - context.update({'form': form}) - return self.render_to_response(context) - - def get(self, request, *args, **kwargs): - self.object = self.get_object() - context = self.get_context_data(object=self.object) - - orador_id = kwargs['oid'] - - parlamentar = Parlamentar.objects.get(id=orador_id) - orador = OradorExpediente.objects.get( - sessao_plenaria=self.object, parlamentar=parlamentar) - - orador = {'parlamentar': parlamentar, 'numero_ordem': - orador.numero_ordem, 'url_discurso': orador.url_discurso} - context.update({'orador': orador}) - - return self.render_to_response(context) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('sessao:oradorexpediente', kwargs={'pk': pk}) - - -class OradorExpedienteView(FormMixin, SessaoCrud.CrudDetailView): - template_name = 'sessao/orador_expediente.html' - form_class = OradorForm - - def get(self, request, *args, **kwargs): - self.object = self.get_object() - context = self.get_context_data(object=self.object) - return self.render_to_response(context) - - def post(self, request, *args, **kwargs): - self.object = self.get_object() - form = OradorForm(request.POST) - - if 'adicionar' in request.POST: - if form.is_valid(): - orador = OradorExpediente() - orador.sessao_plenaria_id = self.object.id - orador.numero_ordem = request.POST['numero_ordem'] - orador.parlamentar = Parlamentar.objects.get( - id=request.POST['parlamentar']) - orador.url_discurso = request.POST['url_discurso'] - orador.save() - return self.form_valid(form) - else: - return self.form_invalid(form) - elif 'reordenar' in request.POST: - orador = OradorExpediente.objects.filter( - sessao_plenaria_id=self.object.id) - ordem_num = 1 - for o in orador: - o.numero_ordem = ordem_num - o.save() - ordem_num += 1 - return self.get(self, request, args, kwargs) - - def get_candidatos_orador(self): - self.object = self.get_object() - lista_parlamentares = [] - lista_oradores = [] - - for parlamentar in Parlamentar.objects.all(): - if parlamentar.ativo: - lista_parlamentares.append(parlamentar) - - for orador in OradorExpediente.objects.filter( - sessao_plenaria_id=self.object.id): - parlamentar = Parlamentar.objects.get( - id=orador.parlamentar_id) - lista_oradores.append(parlamentar) - - lista = list(set(lista_parlamentares) - set(lista_oradores)) - lista.sort(key=lambda x: x.nome_parlamentar) - return lista - - def get_oradores(self): - self.object = self.get_object() - - for orador in OradorExpediente.objects.filter( - sessao_plenaria_id=self.object.id): - numero_ordem = orador.numero_ordem - url_discurso = orador.url_discurso - parlamentar = Parlamentar.objects.get( - id=orador.parlamentar_id) - yield(numero_ordem, url_discurso, parlamentar) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('sessao:oradorexpediente', kwargs={'pk': pk}) - - class MesaView(FormMixin, SessaoCrud.CrudDetailView): template_name = 'sessao/mesa.html' form_class = MesaForm @@ -1177,159 +900,6 @@ class ExpedienteView(FormMixin, SessaoCrud.CrudDetailView): return reverse('sessao:expediente', kwargs={'pk': pk}) -class ExplicacaoView(FormMixin, SessaoCrud.CrudDetailView): - template_name = 'sessao/explicacao.html' - form_class = OradorForm - - def get(self, request, *args, **kwargs): - self.object = self.get_object() - context = self.get_context_data(object=self.object) - return self.render_to_response(context) - - def post(self, request, *args, **kwargs): - self.object = self.get_object() - form = OradorForm(request.POST) - - if 'adicionar' in request.POST: - if form.is_valid(): - orador = Orador() - orador.sessao_plenaria_id = self.object.id - orador.numero_ordem = request.POST['numero_ordem'] - orador.parlamentar = Parlamentar.objects.get( - id=request.POST['parlamentar']) - orador.url_discurso = request.POST['url_discurso'] - orador.save() - return self.form_valid(form) - else: - return self.form_invalid(form) - elif 'reordenar' in request.POST: - orador = Orador.objects.filter( - sessao_plenaria_id=self.object.id) - ordem_num = 1 - for o in orador: - o.numero_ordem = ordem_num - o.save() - ordem_num += 1 - return self.get(self, request, args, kwargs) - - def get_candidatos_orador(self): - self.object = self.get_object() - lista_parlamentares = [] - lista_oradores = [] - - for parlamentar in Parlamentar.objects.all(): - if parlamentar.ativo: - lista_parlamentares.append(parlamentar) - - for orador in Orador.objects.filter( - sessao_plenaria_id=self.object.id): - parlamentar = Parlamentar.objects.get( - id=orador.parlamentar_id) - lista_oradores.append(parlamentar) - - lista = list(set(lista_parlamentares) - set(lista_oradores)) - lista.sort(key=lambda x: x.nome_parlamentar) - return lista - - def get_oradores(self): - self.object = self.get_object() - - for orador in Orador.objects.filter( - sessao_plenaria_id=self.object.id).order_by('numero_ordem'): - numero_ordem = orador.numero_ordem - url_discurso = orador.url_discurso - parlamentar = Parlamentar.objects.get( - id=orador.parlamentar_id) - yield(numero_ordem, url_discurso, parlamentar) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('sessao:explicacao', kwargs={'pk': pk}) - - -class ExplicacaoDelete(FormMixin, SessaoCrud.CrudDetailView): - template_name = 'sessao/delete_explicacao.html' - form_class = OradorDeleteForm - - def post(self, request, *args, **kwargs): - self.object = self.get_object() - oid = kwargs['oid'] - form = OradorDeleteForm(request.POST) - - if form.is_valid(): - orador = Orador.objects.get( - sessao_plenaria_id=self.object.id, - parlamentar_id=oid) - orador.delete() - return self.form_valid(form) - else: - return self.form_invalid(form) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('sessao:explicacao', kwargs={'pk': pk}) - - -class ExplicacaoEdit(FormMixin, SessaoCrud.CrudDetailView): - template_name = 'sessao/edit_explicacao.html' - form_class = OradorForm - - def post(self, request, *args, **kwargs): - self.object = self.get_object() - form = OradorForm(request.POST) - - pk = kwargs['pk'] - oid = kwargs['oid'] - - if form.is_valid(): - orador = Orador.objects.get( - sessao_plenaria_id=pk, - parlamentar_id=oid) - orador.delete() - - orador = Orador() - orador.sessao_plenaria_id = pk - orador.numero_ordem = request.POST['numero_ordem'] - orador.parlamentar = Parlamentar.objects.get( - id=oid) - orador.url_discurso = request.POST['url_discurso'] - orador.save() - - return self.form_valid(form) - else: - context = self.get_context_data(object=self.object) - - parlamentar = Parlamentar.objects.get(id=oid) - orador = Orador.objects.get( - sessao_plenaria=self.object, parlamentar=parlamentar) - - explicacao = {'parlamentar': parlamentar, - 'url_discurso': orador.url_discurso} - context.update({'explicacao': explicacao}) - context.update({'form': form}) - return self.render_to_response(context) - - def get(self, request, *args, **kwargs): - self.object = self.get_object() - context = self.get_context_data(object=self.object) - - oid = kwargs['oid'] - - parlamentar = Parlamentar.objects.get(id=oid) - orador = Orador.objects.get( - sessao_plenaria=self.object, parlamentar=parlamentar) - - explicacao = {'parlamentar': parlamentar, 'numero_ordem': - orador.numero_ordem, 'url_discurso': orador.url_discurso} - context.update({'explicacao': explicacao}) - - return self.render_to_response(context) - - def get_success_url(self): - pk = self.kwargs['pk'] - return reverse('sessao:explicacao', kwargs={'pk': pk}) - - class VotacaoEditView(FormMixin, SessaoCrud.CrudDetailView): ''' @@ -1847,7 +1417,7 @@ class VotacaoNominalExpedienteView(FormMixin, SessaoCrud.CrudDetailView): def get_success_url(self): pk = self.kwargs['pk'] - return reverse('sessao:expedienteordemdia_list', + return reverse('sessao:expedientemateria_list', kwargs={'pk': pk}) @@ -1902,7 +1472,7 @@ class VotacaoNominalExpedienteEditView(FormMixin, SessaoCrud.CrudDetailView): expediente = ExpedienteMateria.objects.get( sessao_plenaria_id=self.object.id, materia_id=materia_id) - expediente.resultado = None + expediente.resultado = '' expediente.votacao_aberta = False expediente.save() @@ -1924,7 +1494,7 @@ class VotacaoNominalExpedienteEditView(FormMixin, SessaoCrud.CrudDetailView): def get_success_url(self): pk = self.kwargs['pk'] - return reverse('sessao:expedienteordemdia_list', + return reverse('sessao:expedientemateria_list', kwargs={'pk': pk}) @@ -2045,7 +1615,7 @@ class VotacaoExpedienteView(FormMixin, SessaoCrud.CrudDetailView): def get_success_url(self): pk = self.kwargs['pk'] - return reverse('sessao:expedienteordemdia_list', + return reverse('sessao:expedientemateria_list', kwargs={'pk': pk}) @@ -2060,7 +1630,7 @@ class VotacaoExpedienteEditView(FormMixin, SessaoCrud.CrudDetailView): def get_success_url(self): pk = self.kwargs['pk'] - return reverse('sessao:expedienteordemdia_list', + return reverse('sessao:expedientemateria_list', kwargs={'pk': pk}) def get_tipos_votacao(self): @@ -2118,7 +1688,7 @@ class VotacaoExpedienteEditView(FormMixin, SessaoCrud.CrudDetailView): sessao_plenaria_id=self.object.id, materia_id=materia_id) expediente.votacao_aberta = False - expediente.resultado = None + expediente.resultado = '' expediente.save() return self.form_valid(form) diff --git a/templates/sessao/delete_explicacao.html b/templates/sessao/delete_explicacao.html deleted file mode 100644 index ec7439788..000000000 --- a/templates/sessao/delete_explicacao.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block base_content %} -
{% csrf_token %} -
- -

- {% blocktrans %} - Tem certeza que deseja apagar o orador? - {% endblocktrans %} -

- - - -
-
-{% endblock %} diff --git a/templates/sessao/delete_orador.html b/templates/sessao/delete_orador.html deleted file mode 100644 index a918003a6..000000000 --- a/templates/sessao/delete_orador.html +++ /dev/null @@ -1,21 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} - -{% block base_content %} -
{% csrf_token %} -
- -

- {% blocktrans %} - Tem certeza que deseja apagar o orador? - {% endblocktrans %} -

- - - -
-
-{% endblock %} diff --git a/templates/sessao/edit_explicacao.html b/templates/sessao/edit_explicacao.html deleted file mode 100644 index 0a0a741dd..000000000 --- a/templates/sessao/edit_explicacao.html +++ /dev/null @@ -1,39 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} - -{% block detail_content %} - -
- Editar Orador - {% if form.errors %} -
-

Os seguintes erros foram encontrados:

-
    - {% for field in form %} - {% if field.errors %} -
  • O campo {{field.label}} é obrigatório!
  • - {% endif %} - {% endfor %} -
-
- {% endif %} -
- {% csrf_token %} - -
-
Ordem de pronunciamento
-
Parlamentar
-
URL Discurso
-
-
-
-
-
-
-
- -
-
- -{% endblock detail_content %} diff --git a/templates/sessao/edit_orador.html b/templates/sessao/edit_orador.html deleted file mode 100644 index 352b56c61..000000000 --- a/templates/sessao/edit_orador.html +++ /dev/null @@ -1,39 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} - -{% block detail_content %} - -
- Editar Orador - {% if form.errors %} -
-

Os seguintes erros foram encontrados:

-
    - {% for field in form %} - {% if field.errors %} -
  • O campo {{field.label}} é obrigatório!
  • - {% endif %} - {% endfor %} -
-
- {% endif %} -
- {% csrf_token %} - -
-
Ordem de pronunciamento
-
Parlamentar
-
URL Discurso
-
-
-
-
-
-
-
- -
-
- -{% endblock detail_content %} diff --git a/templates/sessao/explicacao.html b/templates/sessao/explicacao.html deleted file mode 100644 index 48cb37652..000000000 --- a/templates/sessao/explicacao.html +++ /dev/null @@ -1,70 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} - -{% block detail_content %} - -
- Oradores das Explicações Pessoais - - - - - - - - - - {% for numero_ordem, url_discurso, parlamentar in view.get_oradores %} - - - - - - - {% endfor %} -
Ordem de pronunciamentoParlamentarURL DiscursoEditar/Excluir
{{numero_ordem}}{{parlamentar.nome_parlamentar }}{% if not url_discurso %}Orador sem discurso cadastrado{% else %}{{url_discurso}}{% endif %} - Editar - Excluir -
-
- -
- Adicionar Orador - {% if form.errors %} -
-

Os seguintes erros foram encontrados:

-
    - {% for field in form %} - {% if field.errors %} -
  • O campo {{field.label}} é obrigatório!
  • - {% endif %} - {% endfor %} -
-
- {% endif %} -
- {% csrf_token %} - -
-
Ordem de pronunciamento
-
Parlamentar
-
URL Discurso
-
- -
-
- -
-
-
-
- - -
-
-{% endblock detail_content %} diff --git a/templates/sessao/orador_expediente.html b/templates/sessao/orador_expediente.html deleted file mode 100644 index 04285bca2..000000000 --- a/templates/sessao/orador_expediente.html +++ /dev/null @@ -1,70 +0,0 @@ -{% extends "crud/detail.html" %} -{% load i18n %} -{% load crispy_forms_tags %} - -{% block detail_content %} - -
- Oradores do Expediente - - - - - - - - - - {% for numero_ordem, url_discurso, parlamentar in view.get_oradores %} - - - - - - - {% endfor %} -
Ordem de pronunciamentoParlamentarURL DiscursoEditar/Excluir
{{numero_ordem}}{{parlamentar.nome_parlamentar }}{% if not url_discurso %}Orador sem discurso cadastrado{% else %}{{url_discurso}}{% endif %} - Editar - Excluir -
-
- -
- Adicionar Orador - {% if form.errors %} -
-

Os seguintes erros foram encontrados:

-
    - {% for field in form %} - {% if field.errors %} -
  • O campo {{field.label}} é obrigatório!
  • - {% endif %} - {% endfor %} -
-
- {% endif %} -
- {% csrf_token %} - -
-
Ordem de pronunciamento
-
Parlamentar
-
URL Discurso
-
- -
-
- -
-
-
-
- - -
-
-{% endblock detail_content %} diff --git a/templates/sessao/subnav.yaml b/templates/sessao/subnav.yaml index 1b096237a..82c8f7f2a 100644 --- a/templates/sessao/subnav.yaml +++ b/templates/sessao/subnav.yaml @@ -7,16 +7,16 @@ - title: Presença url: presenca - title: Explicações Pessoais - url: explicacao + url: orador_list - title: Expedientes children: - title: Expediente Diversos url: expediente - title: Matérias Expediente - url: expedienteordemdia_list + url: expedientemateria_list - title: Oradores do Expediente - url: oradorexpediente + url: oradorexpediente_list - title: Ordem do Dia children: