Repository: interlegis/sapl

Issue:
Fix votações



Discussion:

Resolving patch:
diff --git a/sapl/sessao/forms.py b/sapl/sessao/forms.py
--- a/sapl/sessao/forms.py
+++ b/sapl/sessao/forms.py
@@ -13,7 +13,7 @@
 from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa
 from sapl.utils import RANGE_DIAS_MES, RANGE_MESES, autor_label, autor_modal
 
-from .models import Bancada, ExpedienteMateria, SessaoPlenaria
+from .models import Bancada, ExpedienteMateria, SessaoPlenaria, OrdemDia
 
 
 def pega_anos():
@@ -95,6 +95,39 @@ def save(self, commit=False):
         return expediente
 
 
+class OrdemDiaForm(ExpedienteMateriaForm):
+
+    class Meta:
+        model = OrdemDia
+        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):
+        ordem = super(OrdemDiaForm, self).save(commit)
+        ordem.materia = self.cleaned_data['materia']
+        ordem.save()
+        return ordem
+
+
 class PresencaForm(forms.Form):
     presenca = forms.CharField(required=False, initial=False)
     parlamentar = forms.CharField(required=False, max_length=20)
@@ -108,19 +141,6 @@ class ListMateriaForm(forms.Form):
     error_message = forms.CharField(required=False, label='votacao_aberta')
 
 
-class MateriaOrdemDiaForm(forms.Form):
-    data_sessao = forms.CharField(required=True, label=_('Data da Sessão'))
-    numero_ordem = forms.IntegerField(required=True, label=_('Número Ordem'))
-    tipo_votacao = forms.IntegerField(required=True, label=_('Tipo Votação'))
-    tipo_sessao = forms.IntegerField(required=True, label=_('Tipo da Sessão'))
-    ano_materia = forms.IntegerField(required=True, label=_('Ano Matéria'))
-    numero_materia = forms.IntegerField(required=True,
-                                        label=_('Número Matéria'))
-    tipo_materia = forms.IntegerField(required=True, label=_('Tipo Matéria'))
-    observacao = forms.CharField(required=False, label=_('Ementa'))
-    error_message = forms.CharField(required=False, label=_('Matéria'))
-
-
 class MesaForm(forms.Form):
     parlamentar = forms.IntegerField(required=True)
     cargo = forms.IntegerField(required=True)
diff --git a/sapl/sessao/urls.py b/sapl/sessao/urls.py
--- a/sapl/sessao/urls.py
+++ b/sapl/sessao/urls.py
@@ -3,9 +3,8 @@
 from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
                                AdicionarVariasMateriasOrdemDia,
                                BancadaCrud, CargoBancadaCrud,
-                               EditMateriaOrdemDiaView, ExpedienteMateriaCrud,
-                               ExpedienteView, ListMateriaOrdemDiaView,
-                               MateriaOrdemDiaView, MesaView, OradorCrud,
+                               ExpedienteMateriaCrud, ExpedienteView,
+                               MateriaOrdemDiaCrud, MesaView, OradorCrud,
                                OradorExpedienteCrud, PainelView,
                                PautaExpedienteDetail, PautaOrdemDetail,
                                PautaSessaoDetailView, PautaSessaoListView,
@@ -19,8 +18,10 @@
                                VotacaoNominalExpedienteEditView,
                                VotacaoNominalExpedienteView,
                                VotacaoNominalView, VotacaoView,
-                               abrir_votacao_view,
-                               reordernar_materias_expediente)
+                               abrir_votacao_expediente_view,
+                               abrir_votacao_ordem_view,
+                               reordernar_materias_expediente,
+                               reordernar_materias_ordem)
 
 from .apps import AppConfig
 
@@ -33,13 +34,19 @@
 urlpatterns = [
     url(r'^sessao/', include(SessaoCrud.get_urls() + OradorCrud.get_urls() +
                              OradorExpedienteCrud.get_urls() +
-                             ExpedienteMateriaCrud.get_urls())),
+                             ExpedienteMateriaCrud.get_urls() +
+                             MateriaOrdemDiaCrud.get_urls())),
 
-    url(r'^(?P<pk>\d+)/(?P<spk>\d+)/abrir-votacao$', abrir_votacao_view,
+    url(r'^(?P<pk>\d+)/(?P<spk>\d+)/abrir-votacao-expediente$',
+        abrir_votacao_expediente_view,
+        name="abrir_votacao_exp"),
+    url(r'^(?P<pk>\d+)/(?P<spk>\d+)/abrir-votacao-ordem$',
+        abrir_votacao_ordem_view,
         name="abrir_votacao"),
     url(r'^(?P<pk>\d+)/reordenar-expediente$', reordernar_materias_expediente,
         name="reordenar_expediente"),
-
+    url(r'^(?P<pk>\d+)/reordenar-ordem$', reordernar_materias_ordem,
+        name="reordenar_ordem"),
     url(r'^rest/', include(sessao_rest)),
     url(r'^sistema/sessao-plenaria/tipo/',
         include(TipoSessaoCrud.get_urls())),
@@ -79,14 +86,6 @@
         PresencaOrdemDiaView.as_view(),
         name='presencaordemdia'),
     url(r'^(?P<pk>\d+)/mesa$', MesaView.as_view(), name='mesa'),
-    url(r'^(?P<pk>\d+)/materiaordemdia/list$',
-        ListMateriaOrdemDiaView.as_view(), name='materiaordemdia_list'),
-    url(r'^(?P<pk>\d+)/materiaordemdia/list$',
-        ListMateriaOrdemDiaView.as_view(), name='materiaordemdia_reorder'),
-    url(r'^(?P<pk>\d+)/materiaordemdia/edit/(?P<oid>\d+)$',
-        EditMateriaOrdemDiaView.as_view(), name='materiaordemdia_edit'),
-    url(r'^(?P<pk>\d+)/materiaordemdia/create$',
-        MateriaOrdemDiaView.as_view(), name='materiaordemdia_create'),
     url(r'^(?P<pk>\d+)/resumo$',
         ResumoView.as_view(), name='resumo'),
     url(r'^sessao/pesquisar-sessao$',
@@ -108,7 +107,7 @@
     url(r'^(?P<pk>\d+)/matexp/votnom/edit/(?P<oid>\d+)/(?P<mid>\d+)$',
         VotacaoNominalExpedienteEditView.as_view(),
         name='votacaonominalexpedit'),
-    url(r'^(?P<pk>\d+)/matexp/votsec/(?P<oid>\d+)/(?P<mid>\d+)$',
+    url(r'^(?P<pk>\d+)/matexp/votsimb/(?P<oid>\d+)/(?P<mid>\d+)$',
         VotacaoExpedienteView.as_view(), name='votacaosimbolicaexp'),
     url(r'^(?P<pk>\d+)/matexp/votsec/view/(?P<oid>\d+)/(?P<mid>\d+)$',
         VotacaoExpedienteEditView.as_view(), name='votacaosimbolicaexpedit'),
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -26,11 +26,13 @@
 from sapl.parlamentares.models import Parlamentar
 from sapl.sessao.serializers import SessaoPlenariaSerializer
 
-from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm,
-                    ExpedienteForm, ExpedienteMateriaForm,
-                    ListMateriaForm, MateriaOrdemDiaForm, MesaForm,
-                    PresencaForm, SessaoPlenariaFilterSet, VotacaoEditForm,
-                    VotacaoForm, VotacaoNominalForm)
+from .forms import (AdicionarVariasMateriasFilterSet,
+                    BancadaForm, ExpedienteForm, ExpedienteMateriaForm,
+                    ListMateriaForm, MateriaOrdemDiaForm,
+                    MesaForm, OrdemDiaForm, PresencaForm,
+                    SessaoPlenariaFilterSet, VotacaoEditForm, VotacaoForm,
+                    VotacaoNominalForm)
+
 from .models import (Bancada, CargoBancada, CargoMesa, ExpedienteMateria,
                      ExpedienteSessao, IntegranteMesa, MateriaLegislativa,
                      Orador, OradorExpediente, OrdemDia, PresencaOrdemDia,
@@ -60,6 +62,19 @@ def reordernar_materias_expediente(request, pk):
         reverse('sapl.sessao:expedientemateria_list', kwargs={'pk': pk}))
 
 
+def reordernar_materias_ordem(request, pk):
+    ordens = OrdemDia.objects.filter(
+        sessao_plenaria_id=pk)
+    ordem_num = 1
+    for o in ordens:
+        o.numero_ordem = ordem_num
+        o.save()
+        ordem_num += 1
+
+    return HttpResponseRedirect(
+        reverse('sapl.sessao:ordemdia_list', kwargs={'pk': pk}))
+
+
 class BancadaCrud(Crud):
     model = Bancada
     help_path = ''
@@ -77,7 +92,7 @@ class UpdateView(CrudUpdateView):
         form_class = BancadaForm
 
 
-def abrir_votacao_view(request, pk, spk):
+def abrir_votacao_expediente_view(request, pk, spk):
     existe_votacao_aberta = ExpedienteMateria.objects.filter(
         sessao_plenaria_id=spk, votacao_aberta=True
     ).exists()
@@ -93,6 +108,114 @@ def abrir_votacao_view(request, pk, spk):
         reverse('sapl.sessao:expedientemateria_list', kwargs={'pk': spk}))
 
 
+def abrir_votacao_ordem_view(request, pk, spk):
+    existe_votacao_aberta = OrdemDia.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:
+        ordem = OrdemDia.objects.get(id=pk)
+        ordem.votacao_aberta = True
+        ordem.save()
+    return HttpResponseRedirect(
+        reverse('sapl.sessao:ordemdia_list', kwargs={'pk': spk}))
+
+
+class MateriaOrdemDiaCrud(MasterDetailCrud):
+    model = OrdemDia
+    parent_field = 'sessao_plenaria'
+    help_path = ''
+
+    class BaseMixin(MasterDetailCrud.BaseMixin):
+        list_field_names = ['numero_ordem', 'materia', 'observacao',
+                            'resultado']
+
+    class CreateView(MasterDetailCrud.CreateView):
+        form_class = OrdemDiaForm
+
+    class UpdateView(MasterDetailCrud.UpdateView):
+        form_class = OrdemDiaForm
+
+        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 'OrdemDiaDetail'
+
+    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('sapl.sessao:votacaosimbolica',
+                                          kwargs={
+                                              'pk': obj.sessao_plenaria_id,
+                                              'oid': obj.materia_id,
+                                              'mid': obj.pk})
+                        elif obj.tipo_votacao == 2:
+                            url = reverse('sapl.sessao:votacaonominal',
+                                          kwargs={
+                                              'pk': obj.sessao_plenaria_id,
+                                              'oid': obj.materia_id,
+                                              'mid': obj.pk})
+                        elif obj.tipo_votacao == 3:
+                            url = reverse('sapl.sessao:votacaosecreta',
+                                          kwargs={
+                                              'pk': obj.sessao_plenaria_id,
+                                              'oid': obj.materia_id,
+                                              'mid': obj.pk})
+
+                        btn_registrar = '''
+                            <a href="%s"
+                               class="btn btn-primary"
+                               role="button">Registrar Votação</a>''' % (url)
+                        obj.resultado = btn_registrar
+                    else:
+                        url = reverse('sapl.sessao:abrir_votacao', kwargs={
+                            'pk': obj.pk, 'spk': obj.sessao_plenaria_id})
+                        btn_abrir = '''
+                            Matéria não votada<br />
+                            <a href="%s"
+                               class="btn btn-primary"
+                               role="button">Abrir Votação</a>''' % (url)
+                        obj.resultado = btn_abrir
+                else:
+                    url = ''
+                    if obj.tipo_votacao == 1:
+                        url = reverse('sapl.sessao:votacaosimbolicaedit',
+                                      kwargs={
+                                          'pk': obj.sessao_plenaria_id,
+                                          'oid': obj.materia_id,
+                                          'mid': obj.pk})
+                    elif obj.tipo_votacao == 2:
+                        url = reverse('sapl.sessao:votacaonominaledit',
+                                      kwargs={
+                                          'pk': obj.sessao_plenaria_id,
+                                          'oid': obj.materia_id,
+                                          'mid': obj.pk})
+                    elif obj.tipo_votacao == 3:
+                        url = reverse('sapl.sessao:votacaosecretaedit',
+                                      kwargs={
+                                          'pk': obj.sessao_plenaria_id,
+                                          'oid': obj.materia_id,
+                                          'mid': obj.pk})
+                    obj.resultado = '<a href="%s">%s</a>' % (url,
+                                                             obj.resultado)
+            return [self._as_row(obj) for obj in object_list]
+
+
 class ExpedienteMateriaCrud(MasterDetailCrud):
     model = ExpedienteMateria
     parent_field = 'sessao_plenaria'
@@ -135,7 +258,7 @@ def get_rows(self, object_list):
                                role="button">Registrar Votação</a>''' % (url)
                         obj.resultado = btn_registrar
                     else:
-                        url = reverse('sapl.sessao:abrir_votacao', kwargs={
+                        url = reverse('sapl.sessao:abrir_votacao_exp', kwargs={
                             'pk': obj.pk, 'spk': obj.sessao_plenaria_id})
                         btn_abrir = '''
                             Matéria não votada<br />
@@ -328,284 +451,6 @@ def get_success_url(self):
         return reverse('sapl.sessao:presencaordemdia', kwargs={'pk': pk})
 
 
-class ListMateriaOrdemDiaView(FormMixin, SessaoCrud.CrudDetailView):
-    template_name = 'sessao/materia_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 = OrdemDia.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()
-        context = self.get_context_data(object=self.object)
-
-        pk = self.kwargs['pk']
-        form = ListMateriaForm(request.POST)
-
-        # TODO: Existe uma forma de atualizar em lote de acordo
-        # com a forma abaixo, mas como setar o primeiro para "1"?
-        # OrdemDia.objects.filter(sessao_plenaria_id=pk)
-        # .order_by('numero_ordem').update(numero_ordem=3)
-
-        if 'materia_reorder' in request.POST:
-            ordens = OrdemDia.objects.filter(sessao_plenaria_id=pk)
-            ordem_num = 1
-            for o in ordens:
-                o.numero_ordem = ordem_num
-                o.save()
-                ordem_num += 1
-        elif 'abrir-votacao' in request.POST:
-            existe_votacao_aberta = OrdemDia.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 = OrdemDia.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 = OrdemDia.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
-
-    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 = OrdemDia()
-            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('&nbsp;', ' ',
-                                      strip_tags(request.POST['observacao']))
-            ordemdia.tipo_votacao = request.POST['tipo_votacao']
-            ordemdia.save()
-
-            return self.form_valid(form)
-        else:
-            return self.form_invalid(form)
-
-    def get_success_url(self):
-        pk = self.kwargs['pk']
-        return reverse('sapl.sessao:materiaordemdia_list',
-                       kwargs={'pk': pk})
-
-
-class EditMateriaOrdemDiaView(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 = OrdemDia.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(
-                            '&nbsp;', ' ', 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 = OrdemDia.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('&nbsp;', '  ', obs)
-                ordemdia.save()
-                return self.form_valid(form)
-            else:
-                context = self.get_context_data(object=self.object)
-
-                pk = kwargs['pk']
-                oid = kwargs['oid']
-                ordem = OrdemDia.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(
-                                    '&nbsp;', ' ',
-                                    strip_tags(ordem.observacao)),
-                                'error_message': '', })
-                context.update({'form': form})
-                return self.render_to_response(context)
-        elif 'delete-ordemdia' in request.POST:
-            ordemdia.delete()
-            return self.form_valid(form)
-
-    def get_success_url(self):
-        pk = self.kwargs['pk']
-        return reverse('sapl.sessao:materiaordemdia_list',
-                       kwargs={'pk': pk})
-
-
 class MesaView(FormMixin, SessaoCrud.CrudDetailView):
     template_name = 'sessao/mesa.html'
     form_class = MesaForm
@@ -957,22 +802,21 @@ def post(self, request, *args, **kwargs):
         ordem_id = kwargs['mid']
 
         if(int(request.POST['anular_votacao']) == 1):
-            RegistroVotacao.objects.get(
+            RegistroVotacao.objects.filter(
                 materia_id=materia_id,
-                ordem_id=ordem_id).delete()
+                ordem_id=ordem_id).last().delete()
 
             ordem = OrdemDia.objects.get(
                 sessao_plenaria_id=self.object.id,
                 materia_id=materia_id)
             ordem.votacao_aberta = False
-            ordem.resultado = None
+            ordem.resultado = ''
             ordem.save()
 
         return self.form_valid(form)
 
     def get(self, request, *args, **kwargs):
-        self.object = self.get_object()
-        context = self.get_context_data(object=self.object)
+        context = {}
 
         url = request.get_full_path()
 
@@ -991,15 +835,16 @@ def get(self, request, *args, **kwargs):
         materia = {'materia': ordem.materia, 'ementa': ordem.observacao}
         context.update({'materia': materia})
 
-        votacao = RegistroVotacao.objects.get(
+        votacao = RegistroVotacao.objects.filter(
             materia_id=materia_id,
-            ordem_id=ordem_id)
+            ordem_id=ordem_id).last()
         votacao_existente = {'observacao': sub(
             '&nbsp;', ' ', strip_tags(votacao.observacao)),
             'tipo_resultado':
             votacao.tipo_resultado_votacao_id}
         context.update({'votacao_titulo': titulo,
-                        'votacao': votacao_existente})
+                        'votacao': votacao_existente,
+                        'tipos': self.get_tipos_votacao()})
 
         return self.render_to_response(context)
 
@@ -1009,7 +854,7 @@ def get_tipos_votacao(self):
 
     def get_success_url(self):
         pk = self.kwargs['pk']
-        return reverse('sapl.sessao:materiaordemdia_list',
+        return reverse('sapl.sessao:ordemdia_list',
                        kwargs={'pk': pk})
 
 
@@ -1128,7 +973,7 @@ def get_tipos_votacao(self):
 
     def get_success_url(self):
         pk = self.kwargs['pk']
-        return reverse('sapl.sessao:materiaordemdia_list',
+        return reverse('sapl.sessao:ordemdia_list',
                        kwargs={'pk': pk})
 
 
@@ -1136,17 +981,15 @@ class VotacaoNominalView(FormMixin, SessaoCrud.CrudDetailView):
     template_name = 'sessao/votacao/nominal.html'
 
     def get(self, request, *args, **kwargs):
-        self.object = self.get_object()
-        context = self.get_context_data(object=self.object)
-
         ordem_id = kwargs['mid']
-
         ordem = OrdemDia.objects.get(id=ordem_id)
 
         materia = {'materia': ordem.materia,
                    'ementa': sub(
                        '&nbsp;', ' ', strip_tags(ordem.observacao))}
-        context.update({'materia': materia})
+        context = {'materia': materia, 'object': self.get_object(),
+                   'parlamentares': self.get_parlamentares(),
+                   'tipos': self.get_tipos_votacao()}
 
         return self.render_to_response(context)
 
@@ -1255,7 +1098,7 @@ def get_tipos_votacao(self):
 
     def get_success_url(self):
         pk = self.kwargs['pk']
-        return reverse('sapl.sessao:materiaordemdia_list',
+        return reverse('sapl.sessao:ordemdia_list',
                        kwargs={'pk': pk})
 
 
@@ -1263,8 +1106,7 @@ class VotacaoNominalEditView(FormMixin, SessaoCrud.CrudDetailView):
     template_name = 'sessao/votacao/nominal_edit.html'
 
     def get(self, request, *args, **kwargs):
-        self.object = self.get_object()
-        context = self.get_context_data(object=self.object)
+        context = {}
 
         materia_id = kwargs['oid']
         ordem_id = kwargs['mid']
@@ -1291,7 +1133,8 @@ def get(self, request, *args, **kwargs):
             '&nbsp;', ' ', strip_tags(votacao.observacao)),
             'tipo_resultado':
             votacao.tipo_resultado_votacao_id}
-        context.update({'votacao': votacao_existente})
+        context.update({'votacao': votacao_existente,
+                        'tipos': self.get_tipos_votacao()})
 
         return self.render_to_response(context)
 
@@ -1310,7 +1153,7 @@ def post(self, request, *args, **kwargs):
             ordem = OrdemDia.objects.get(
                 sessao_plenaria_id=self.object.id,
                 materia_id=materia_id)
-            ordem.resultado = None
+            ordem.resultado = ''
             ordem.votacao_aberta = False
             ordem.save()
 
@@ -1332,7 +1175,7 @@ def get_tipos_votacao(self):
 
     def get_success_url(self):
         pk = self.kwargs['pk']
-        return reverse('sapl.sessao:materiaordemdia_list',
+        return reverse('sapl.sessao:ordemdia_list',
                        kwargs={'pk': pk})
 
 
@@ -1340,17 +1183,15 @@ class VotacaoNominalExpedienteView(FormMixin, SessaoCrud.CrudDetailView):
     template_name = 'sessao/votacao/nominal.html'
 
     def get(self, request, *args, **kwargs):
-        self.object = self.get_object()
-        context = self.get_context_data(object=self.object)
-
         expediente_id = kwargs['mid']
-
         expediente = ExpedienteMateria.objects.get(id=expediente_id)
 
         materia = {'materia': expediente.materia,
                    'ementa': sub(
                        '&nbsp;', ' ', strip_tags(expediente.observacao))}
-        context.update({'materia': materia})
+        context = {'materia': materia, 'object': self.get_object(),
+                   'parlamentares': self.get_parlamentares(),
+                   'tipos': self.get_tipos_votacao()}
 
         return self.render_to_response(context)
 
@@ -1465,9 +1306,7 @@ class VotacaoNominalExpedienteEditView(FormMixin, SessaoCrud.CrudDetailView):
     template_name = 'sessao/votacao/nominal_edit.html'
 
     def get(self, request, *args, **kwargs):
-        self.object = self.get_object()
-        context = self.get_context_data(object=self.object)
-
+        context = {}
         materia_id = kwargs['oid']
         expediente_id = kwargs['mid']
 
@@ -1493,7 +1332,8 @@ def get(self, request, *args, **kwargs):
             '&nbsp;', ' ', strip_tags(votacao.observacao)),
             'tipo_resultado':
             votacao.tipo_resultado_votacao_id}
-        context.update({'votacao': votacao_existente})
+        context.update({'votacao': votacao_existente,
+                        'tipos': self.get_tipos_votacao()})
 
         return self.render_to_response(context)
 


Test patch: