mirror of https://github.com/interlegis/sapl.git
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							1960 lines
						
					
					
						
							69 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							1960 lines
						
					
					
						
							69 KiB
						
					
					
				| from datetime import datetime | |
| from re import sub | |
| 
 | |
| from django.contrib import messages | |
| from django.core.exceptions import ObjectDoesNotExist, ValidationError | |
| from django.core.urlresolvers import reverse | |
| from django.forms.utils import ErrorList | |
| from django.http.response import HttpResponseRedirect | |
| from django.utils.html import strip_tags | |
| from django.utils.translation import ugettext_lazy as _ | |
| from django.views.generic import ListView, TemplateView | |
| from django.views.generic.edit import FormMixin | |
| from django_filters.views import FilterView | |
| 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 .forms import (BancadaForm, ExpedienteForm, ExpedienteMateriaForm, | |
|                     ListMateriaForm, MateriaOrdemDiaForm, MesaForm, | |
|                     PresencaForm, SessaoPlenariaFilterSet, VotacaoEditForm, | |
|                     VotacaoForm, VotacaoNominalForm) | |
| from .models import (Bancada, CargoBancada, CargoMesa, ExpedienteMateria, | |
|                      ExpedienteSessao, IntegranteMesa, MateriaLegislativa, | |
|                      Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, | |
|                      RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca, | |
|                      TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria, | |
|                      VotoParlamentar) | |
| 
 | |
| TipoSessaoCrud = Crud.build(TipoSessaoPlenaria, 'tipo_sessao_plenaria') | |
| OrdemDiaCrud = Crud.build(OrdemDia, '') | |
| TipoResultadoVotacaoCrud = Crud.build( | |
|     TipoResultadoVotacao, 'tipo_resultado_votacao') | |
| TipoExpedienteCrud = Crud.build(TipoExpediente, 'tipo_expediente') | |
| RegistroVotacaoCrud = Crud.build(RegistroVotacao, '') | |
| CargoBancadaCrud = Crud.build(CargoBancada, '') | |
| 
 | |
| 
 | |
| def reordernar_materias_expediente(request, pk): | |
|     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 | |
| 
 | |
|     return HttpResponseRedirect( | |
|         reverse('sessao:expedientemateria_list', kwargs={'pk': pk})) | |
| 
 | |
| 
 | |
| class BancadaCrud(Crud): | |
|     model = Bancada | |
|     help_path = '' | |
| 
 | |
|     class BaseMixin(crud.base.CrudBaseMixin): | |
|         list_field_names = ['nome', 'legislatura'] | |
| 
 | |
|     class ListView(crud.base.CrudListView): | |
|         ordering = 'legislatura' | |
| 
 | |
|     class CreateView(crud.base.CrudCreateView): | |
|         form_class = BancadaForm | |
| 
 | |
|     class UpdateView(crud.base.CrudUpdateView): | |
|         form_class = BancadaForm | |
| 
 | |
| 
 | |
| 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 = ''' | |
|                             <a href="%s" | |
|                                class="btn btn-primary" | |
|                                role="button">Registrar Votação</a>''' % (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<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('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': obj.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 = '<a href="%s">%s</a>' % (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' | |
| 
 | |
|     class BaseMixin(crud.base.CrudBaseMixin): | |
|         list_field_names = ['data_inicio', 'legislatura', 'sessao_legislativa', | |
|                             'tipo'] | |
| 
 | |
|     # FIXME!!!! corrigir referencias no codigo e remover isso!!!!! | |
|     # fazer com #230 | |
|     class CrudDetailView(crud.base.CrudDetailView): | |
|         model = SessaoPlenaria | |
|         help_path = 'sessao_plenaria' | |
| 
 | |
|     class ListView(crud.base.CrudListView): | |
|         ordering = ['-data_inicio'] | |
| 
 | |
| 
 | |
| class PresencaMixin: | |
| 
 | |
|     def get_parlamentares(self): | |
|         self.object = self.get_object() | |
| 
 | |
|         presencas = SessaoPlenariaPresenca.objects.filter( | |
|             sessao_plenaria_id=self.object.id | |
|         ) | |
|         presentes = [p.parlamentar for p in presencas] | |
| 
 | |
|         for parlamentar in Parlamentar.objects.filter(ativo=True): | |
|             if parlamentar in presentes: | |
|                 yield (parlamentar, True) | |
|             else: | |
|                 yield (parlamentar, False) | |
| 
 | |
| 
 | |
| class PresencaView(FormMixin, PresencaMixin, SessaoCrud.DetailView): | |
|     template_name = 'sessao/presenca.html' | |
|     form_class = PresencaForm | |
|     model = SessaoPlenaria | |
| 
 | |
|     def post(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         form = self.get_form() | |
| 
 | |
|         if form.is_valid(): | |
|             # Pegar os presentes salvos no banco | |
|             presentes_banco = SessaoPlenariaPresenca.objects.filter( | |
|                 sessao_plenaria_id=self.object.id) | |
| 
 | |
|             # Id dos parlamentares presentes | |
|             marcados = request.POST.getlist('presenca') | |
| 
 | |
|             # Deletar os que foram desmarcadors | |
|             deletar = set(set(presentes_banco) - set(marcados)) | |
|             for d in deletar: | |
|                 SessaoPlenariaPresenca.objects.filter( | |
|                     parlamentar_id=d.parlamentar_id).delete() | |
| 
 | |
|             for p in marcados: | |
|                 sessao = SessaoPlenariaPresenca() | |
|                 sessao.sessao_plenaria = self.object | |
|                 sessao.parlamentar = Parlamentar.objects.get(id=p) | |
|                 sessao.save() | |
| 
 | |
|             msg = _('Presença em Sessão salva com sucesso!') | |
|             messages.add_message(request, messages.SUCCESS, msg) | |
| 
 | |
|             return self.form_valid(form) | |
|         else: | |
|             return self.form_invalid(form) | |
| 
 | |
|     def get_success_url(self): | |
|         pk = self.kwargs['pk'] | |
|         return reverse('sessao:presenca', kwargs={'pk': pk}) | |
| 
 | |
| 
 | |
| class PainelView(TemplateView): | |
|     template_name = 'sessao/painel.html' | |
| 
 | |
| 
 | |
| class PresencaOrdemDiaView(FormMixin, | |
|                            PresencaMixin, | |
|                            SessaoCrud.CrudDetailView): | |
|     template_name = 'sessao/presenca_ordemdia.html' | |
|     form_class = PresencaForm | |
| 
 | |
|     def post(self, request, *args, **kwargs): | |
| 
 | |
|         self.object = self.get_object() | |
|         form = self.get_form() | |
| 
 | |
|         pk = kwargs['pk'] | |
| 
 | |
|         if form.is_valid(): | |
|             # Pegar os presentes salvos no banco | |
|             presentes_banco = PresencaOrdemDia.objects.filter( | |
|                 sessao_plenaria_id=pk) | |
| 
 | |
|             # Id dos parlamentares presentes | |
|             marcados = request.POST.getlist('presenca') | |
| 
 | |
|             # Deletar os que foram desmarcadors | |
|             deletar = set(set(presentes_banco) - set(marcados)) | |
|             for d in deletar: | |
|                 PresencaOrdemDia.objects.filter( | |
|                     parlamentar_id=d.parlamentar_id).delete() | |
| 
 | |
|             for p in marcados: | |
|                 ordem = PresencaOrdemDia() | |
|                 ordem.sessao_plenaria = self.object | |
|                 ordem.parlamentar = Parlamentar.objects.get(id=p) | |
|                 ordem.save() | |
| 
 | |
|             msg = _('Presença em Ordem do Dia salva com sucesso!') | |
|             messages.add_message(request, messages.SUCCESS, msg) | |
| 
 | |
|             return self.form_valid(form) | |
|         else: | |
|             return self.form_invalid(form) | |
| 
 | |
|     def get_success_url(self): | |
|         pk = self.kwargs['pk'] | |
|         return reverse('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(' ', ' ', | |
|                                       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('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( | |
|                             ' ', ' ', 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(' ', '  ', 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( | |
|                                     ' ', ' ', | |
|                                     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('sessao:materiaordemdia_list', | |
|                        kwargs={'pk': pk}) | |
| 
 | |
| 
 | |
| class MesaView(FormMixin, SessaoCrud.CrudDetailView): | |
|     template_name = 'sessao/mesa.html' | |
|     form_class = MesaForm | |
| 
 | |
|     def get(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         context = self.get_context_data(object=self.object) | |
| 
 | |
|         mesa = IntegranteMesa.objects.filter( | |
|             sessao_plenaria=self.object) | |
| 
 | |
|         integrantes = [] | |
|         for m in mesa: | |
|             parlamentar = Parlamentar.objects.get( | |
|                 id=m.parlamentar_id) | |
|             cargo = CargoMesa.objects.get( | |
|                 id=m.cargo_id) | |
|             integrante = {'parlamentar': parlamentar, 'cargo': cargo} | |
|             integrantes.append(integrante) | |
| 
 | |
|         context.update({'integrantes': integrantes}) | |
| 
 | |
|         return self.render_to_response(context) | |
| 
 | |
|     def post(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         form = MesaForm(request.POST) | |
| 
 | |
|         if 'Incluir' in request.POST: | |
|             if form.is_valid(): | |
|                 integrante = IntegranteMesa() | |
|                 integrante.sessao_plenaria_id = self.object.id | |
|                 integrante.parlamentar_id = request.POST['parlamentar'] | |
|                 integrante.cargo_id = request.POST['cargo'] | |
|                 integrante.save() | |
| 
 | |
|                 return self.form_valid(form) | |
| 
 | |
|             else: | |
|                 form.clean() | |
|                 return self.form_valid(form) | |
|         elif 'Excluir' in request.POST: | |
|             if 'composicao_mesa' in request.POST: | |
|                 ids = request.POST['composicao_mesa'].split(':') | |
|                 IntegranteMesa.objects.get( | |
|                     sessao_plenaria_id=self.object.id, | |
|                     parlamentar_id=ids[0], | |
|                     cargo_id=ids[1] | |
|                 ).delete() | |
|             else: | |
|                 pass | |
|                 # TODO display message asking to select a member of list | |
| 
 | |
|         return self.form_valid(form) | |
| 
 | |
|     def get_candidatos_mesa(self): | |
|         self.object = self.get_object() | |
|         lista_parlamentares = [] | |
|         lista_integrantes = [] | |
| 
 | |
|         for parlamentar in Parlamentar.objects.all(): | |
|             if parlamentar.ativo: | |
|                 lista_parlamentares.append(parlamentar) | |
| 
 | |
|         for integrante in IntegranteMesa.objects.filter( | |
|                 sessao_plenaria=self.object): | |
|             parlamentar = Parlamentar.objects.get( | |
|                 id=integrante.parlamentar_id) | |
|             lista_integrantes.append(parlamentar) | |
| 
 | |
|         lista = list(set(lista_parlamentares) - set(lista_integrantes)) | |
|         lista.sort(key=lambda x: x.nome_parlamentar) | |
|         return lista | |
| 
 | |
|     def get_cargos_mesa(self): | |
|         self.object = self.get_object() | |
|         lista_cargos = CargoMesa.objects.all() | |
|         lista_cargos_ocupados = [] | |
| 
 | |
|         for integrante in IntegranteMesa.objects.filter( | |
|                 sessao_plenaria=self.object): | |
|             cargo = CargoMesa.objects.get( | |
|                 id=integrante.cargo_id) | |
|             lista_cargos_ocupados.append(cargo) | |
| 
 | |
|         lista = list(set(lista_cargos) - set(lista_cargos_ocupados)) | |
|         lista.sort(key=lambda x: x.descricao) | |
|         return lista | |
| 
 | |
|     def get_success_url(self): | |
|         pk = self.kwargs['pk'] | |
|         return reverse('sessao:mesa', kwargs={'pk': pk}) | |
| 
 | |
| 
 | |
| class ResumoView(SessaoCrud.CrudDetailView): | |
|     template_name = 'sessao/resumo.html' | |
| 
 | |
|     def get(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         context = self.get_context_data(object=self.object) | |
| 
 | |
|         # ===================================================================== | |
|         # Identificação Básica | |
|         data_inicio = self.object.data_inicio | |
|         abertura = data_inicio.strftime('%d/%m/%Y') if data_inicio else '' | |
| 
 | |
|         data_fim = self.object.data_fim | |
|         encerramento = data_fim.strftime('%d/%m/%Y') if data_fim else '' | |
| 
 | |
|         context.update({'basica': [ | |
|             _('Tipo de Sessão: %(tipo)s') % {'tipo': self.object.tipo}, | |
|             _('Abertura: %(abertura)s') % {'abertura': abertura}, | |
|             _('Encerramento: %(encerramento)s') % { | |
|                 'encerramento': encerramento}, | |
|         ]}) | |
|         # ===================================================================== | |
|         # Conteúdo Multimídia | |
|         if self.object.url_audio: | |
|             context.update({'multimidia_audio': | |
|                             _('Audio: ') + str(self.object.url_audio)}) | |
|         else: | |
|             context.update({'multimidia_audio': _('Audio: Indisponivel')}) | |
| 
 | |
|         if self.object.url_video: | |
|             context.update({'multimidia_video': | |
|                             _('Video: ') + str(self.object.url_video)}) | |
|         else: | |
|             context.update({'multimidia_video': _('Video: Indisponivel')}) | |
| 
 | |
|         # ===================================================================== | |
|         # Mesa Diretora | |
|         mesa = IntegranteMesa.objects.filter( | |
|             sessao_plenaria=self.object) | |
| 
 | |
|         integrantes = [] | |
|         for m in mesa: | |
|             parlamentar = Parlamentar.objects.get( | |
|                 id=m.parlamentar_id) | |
|             cargo = CargoMesa.objects.get( | |
|                 id=m.cargo_id) | |
|             integrante = {'parlamentar': parlamentar, 'cargo': cargo} | |
|             integrantes.append(integrante) | |
| 
 | |
|         context.update({'mesa': integrantes}) | |
| 
 | |
|         # ===================================================================== | |
|         # Presença Sessão | |
|         presencas = SessaoPlenariaPresenca.objects.filter( | |
|             sessao_plenaria_id=self.object.id | |
|         ) | |
| 
 | |
|         parlamentares_sessao = [] | |
|         for p in presencas: | |
|             parlamentar = Parlamentar.objects.get( | |
|                 id=p.parlamentar_id) | |
|             parlamentares_sessao.append(parlamentar) | |
| 
 | |
|         context.update({'presenca_sessao': parlamentares_sessao}) | |
| 
 | |
|         # ===================================================================== | |
|         # Expedientes | |
|         expediente = ExpedienteSessao.objects.filter( | |
|             sessao_plenaria_id=self.object.id) | |
| 
 | |
|         expedientes = [] | |
|         for e in expediente: | |
|             tipo = TipoExpediente.objects.get( | |
|                 id=e.tipo_id) | |
|             conteudo = sub( | |
|                 ' ', ' ', strip_tags(e.conteudo)) | |
| 
 | |
|             ex = {'tipo': tipo, 'conteudo': conteudo} | |
|             expedientes.append(ex) | |
| 
 | |
|         context.update({'expedientes': expedientes}) | |
| 
 | |
|         # ===================================================================== | |
|         # Matérias Expediente | |
|         materias = ExpedienteMateria.objects.filter( | |
|             sessao_plenaria_id=self.object.id) | |
| 
 | |
|         materias_expediente = [] | |
|         for m in materias: | |
|             ementa = m.observacao | |
|             titulo = m.materia | |
|             numero = m.numero_ordem | |
| 
 | |
|             if m.resultado: | |
|                 resultado = m.resultado | |
|             else: | |
|                 resultado = _('Matéria não votada') | |
| 
 | |
|             autoria = Autoria.objects.filter(materia_id=m.materia_id) | |
|             autor = [str(x.autor) for x in autoria] | |
| 
 | |
|             mat = {'ementa': ementa, | |
|                    'titulo': titulo, | |
|                    'numero': numero, | |
|                    'resultado': resultado, | |
|                    'autor': autor | |
|                    } | |
|             materias_expediente.append(mat) | |
| 
 | |
|         context.update({'materia_expediente': materias_expediente}) | |
| 
 | |
|         # ===================================================================== | |
|         # Oradores Expediente | |
|         oradores = [] | |
|         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) | |
|             ora = {'numero_ordem': numero_ordem, | |
|                    'url_discurso': url_discurso, | |
|                    'parlamentar': parlamentar | |
|                    } | |
|             oradores.append(ora) | |
| 
 | |
|         context.update({'oradores': oradores}) | |
| 
 | |
|         # ===================================================================== | |
|         # Presença Ordem do Dia | |
|         presencas = PresencaOrdemDia.objects.filter( | |
|             sessao_plenaria_id=self.object.id | |
|         ) | |
| 
 | |
|         parlamentares_ordem = [] | |
|         for p in presencas: | |
|             parlamentar = Parlamentar.objects.get( | |
|                 id=p.parlamentar_id) | |
|             parlamentares_ordem.append(parlamentar) | |
| 
 | |
|         context.update({'presenca_ordem': parlamentares_ordem}) | |
| 
 | |
|         # ===================================================================== | |
|         # Matérias Ordem do Dia | |
|         ordem = OrdemDia.objects.filter( | |
|             sessao_plenaria_id=self.object.id) | |
| 
 | |
|         materias_ordem = [] | |
|         for o in ordem: | |
|             ementa = o.observacao | |
|             titulo = o.materia | |
|             numero = o.numero_ordem | |
| 
 | |
|             # Verificar resultado | |
|             if o.resultado: | |
|                 resultado = o.resultado | |
|             else: | |
|                 resultado = _('Matéria não votada') | |
| 
 | |
|             autoria = Autoria.objects.filter( | |
|                 materia_id=o.materia_id) | |
|             autor = [str(x.autor) for x in autoria] | |
| 
 | |
|             mat = {'ementa': ementa, | |
|                    'titulo': titulo, | |
|                    'numero': numero, | |
|                    'resultado': resultado, | |
|                    'autor': autor | |
|                    } | |
|             materias_ordem.append(mat) | |
| 
 | |
|         context.update({'materias_ordem': materias_ordem}) | |
| 
 | |
|         return self.render_to_response(context) | |
| 
 | |
| 
 | |
| class ExpedienteView(FormMixin, SessaoCrud.CrudDetailView): | |
|     template_name = 'sessao/expediente.html' | |
|     form_class = ExpedienteForm | |
| 
 | |
|     def post(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         form = ExpedienteForm(request.POST) | |
| 
 | |
|         if form.is_valid(): | |
|             list_tipo = request.POST.getlist('tipo') | |
|             list_conteudo = request.POST.getlist('conteudo') | |
| 
 | |
|             for tipo, conteudo in zip(list_tipo, list_conteudo): | |
|                 try: | |
|                     ExpedienteSessao.objects.get( | |
|                         sessao_plenaria_id=self.object.id, | |
|                         tipo_id=tipo | |
|                     ).delete() | |
|                 except: | |
|                     pass | |
| 
 | |
|                 expediente = ExpedienteSessao() | |
|                 expediente.sessao_plenaria_id = self.object.id | |
|                 expediente.tipo_id = tipo | |
|                 expediente.conteudo = conteudo | |
|                 expediente.save() | |
|             return self.form_valid(form) | |
|         else: | |
|             return self.form_valid(form) | |
| 
 | |
|     def get(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         context = self.get_context_data(object=self.object) | |
| 
 | |
|         tipos = TipoExpediente.objects.all() | |
|         expedientes_sessao = ExpedienteSessao.objects.filter( | |
|             sessao_plenaria_id=self.object.id) | |
| 
 | |
|         expedientes_salvos = [] | |
|         for e in expedientes_sessao: | |
|             expedientes_salvos.append(e.tipo) | |
| 
 | |
|         tipos_null = list(set(tipos) - set(expedientes_salvos)) | |
| 
 | |
|         expedientes = [] | |
|         for e, t in zip(expedientes_sessao, tipos): | |
|             expedientes.append({'tipo': e.tipo, | |
|                                 'conteudo': e.conteudo | |
|                                 }) | |
|         context.update({'expedientes': expedientes}) | |
| 
 | |
|         for e in tipos_null: | |
|             expedientes.append({'tipo': e, | |
|                                 'conteudo': '' | |
|                                 }) | |
| 
 | |
|         context.update({'expedientes': expedientes}) | |
|         return self.render_to_response(context) | |
| 
 | |
|     def get_success_url(self): | |
|         pk = self.kwargs['pk'] | |
|         return reverse('sessao:expediente', kwargs={'pk': pk}) | |
| 
 | |
| 
 | |
| class VotacaoEditView(FormMixin, SessaoCrud.CrudDetailView): | |
| 
 | |
|     ''' | |
|         Votação Simbólica e Secreta | |
|     ''' | |
| 
 | |
|     template_name = 'sessao/votacao/votacao_edit.html' | |
| 
 | |
|     def post(self, request, *args, **kwargs): | |
| 
 | |
|         self.object = self.get_object() | |
|         form = VotacaoEditForm(request.POST) | |
| 
 | |
|         materia_id = kwargs['oid'] | |
|         ordem_id = kwargs['mid'] | |
| 
 | |
|         if(int(request.POST['anular_votacao']) == 1): | |
|             RegistroVotacao.objects.get( | |
|                 materia_id=materia_id, | |
|                 ordem_id=ordem_id).delete() | |
| 
 | |
|             ordem = OrdemDia.objects.get( | |
|                 sessao_plenaria_id=self.object.id, | |
|                 materia_id=materia_id) | |
|             ordem.votacao_aberta = False | |
|             ordem.resultado = None | |
|             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) | |
| 
 | |
|         url = request.get_full_path() | |
| 
 | |
|         if "votsimb" in url: | |
|             titulo = _("Votação Simbólica") | |
|         elif "votsec" in url: | |
|             titulo = _("Votação Secreta") | |
|         else: | |
|             titulo = _("Não definida") | |
| 
 | |
|         materia_id = kwargs['oid'] | |
|         ordem_id = kwargs['mid'] | |
| 
 | |
|         ordem = OrdemDia.objects.get(id=ordem_id) | |
| 
 | |
|         materia = {'materia': ordem.materia, 'ementa': ordem.observacao} | |
|         context.update({'materia': materia}) | |
| 
 | |
|         votacao = RegistroVotacao.objects.get( | |
|             materia_id=materia_id, | |
|             ordem_id=ordem_id) | |
|         votacao_existente = {'observacao': sub( | |
|             ' ', ' ', strip_tags(votacao.observacao)), | |
|             'tipo_resultado': | |
|             votacao.tipo_resultado_votacao_id} | |
|         context.update({'votacao_titulo': titulo, | |
|                         'votacao': votacao_existente}) | |
| 
 | |
|         return self.render_to_response(context) | |
| 
 | |
|     def get_tipos_votacao(self): | |
|         for tipo in TipoResultadoVotacao.objects.all(): | |
|             yield tipo | |
| 
 | |
|     def get_success_url(self): | |
|         pk = self.kwargs['pk'] | |
|         return reverse('sessao:materiaordemdia_list', | |
|                        kwargs={'pk': pk}) | |
| 
 | |
| 
 | |
| class VotacaoView(FormMixin, SessaoCrud.CrudDetailView): | |
| 
 | |
|     ''' | |
|         Votação Simbólica e Secreta | |
|     ''' | |
| 
 | |
|     template_name = 'sessao/votacao/votacao.html' | |
|     form_class = VotacaoForm | |
| 
 | |
|     def get(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         context = self.get_context_data(object=self.object) | |
|         url = request.get_full_path() | |
| 
 | |
|         # TODO: HACK, VERIFICAR MELHOR FORMA DE FAZER ISSO | |
|         if "votsimb" in url: | |
|             titulo = _("Votação Simbólica") | |
|         elif "votsec" in url: | |
|             titulo = _("Votação Secreta") | |
|         else: | |
|             titulo = _("Não definida") | |
| 
 | |
|         ordem_id = kwargs['mid'] | |
|         ordem = OrdemDia.objects.get(id=ordem_id) | |
|         qtde_presentes = PresencaOrdemDia.objects.filter( | |
|             sessao_plenaria_id=self.object.id).count() | |
| 
 | |
|         materia = {'materia': ordem.materia, 'ementa': ordem.observacao} | |
|         context.update({'votacao_titulo': titulo, | |
|                         'materia': materia, | |
|                         'total_presentes': qtde_presentes}) | |
| 
 | |
|         return self.render_to_response(context) | |
| 
 | |
|     def post(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         form = VotacaoForm(request.POST) | |
|         context = self.get_context_data(object=self.object) | |
|         url = request.get_full_path() | |
| 
 | |
|         # ==================================================== | |
|         if "votsimb" in url: | |
|             titulo = _("Votação Simbólica") | |
|         elif "votsec" in url: | |
|             titulo = _("Votação Secreta") | |
|         else: | |
|             titulo = _("Não definida") | |
| 
 | |
|         ordem_id = kwargs['mid'] | |
|         ordem = OrdemDia.objects.get(id=ordem_id) | |
|         qtde_presentes = PresencaOrdemDia.objects.filter( | |
|             sessao_plenaria_id=self.object.id).count() | |
| 
 | |
|         materia = {'materia': ordem.materia, 'ementa': ordem.observacao} | |
|         context.update({'votacao_titulo': titulo, | |
|                         'materia': materia, | |
|                         'total_presentes': qtde_presentes}) | |
|         context.update({'form': form}) | |
|         # ==================================================== | |
| 
 | |
|         if 'cancelar-votacao' in request.POST: | |
|             ordem.votacao_aberta = False | |
|             ordem.save() | |
|             return self.form_valid(form) | |
| 
 | |
|         if form.is_valid(): | |
|             materia_id = kwargs['oid'] | |
|             ordem_id = kwargs['mid'] | |
| 
 | |
|             qtde_presentes = PresencaOrdemDia.objects.filter( | |
|                 sessao_plenaria_id=self.object.id).count() | |
|             qtde_votos = (int(request.POST['votos_sim']) + | |
|                           int(request.POST['votos_nao']) + | |
|                           int(request.POST['abstencoes'])) | |
| 
 | |
|             if (int(request.POST['voto_presidente']) == 0): | |
|                 qtde_presentes -= 1 | |
| 
 | |
|             if (qtde_votos > qtde_presentes or qtde_votos < qtde_presentes): | |
|                 form._errors["total_votos"] = ErrorList([u""]) | |
|                 return self.render_to_response(context) | |
|             elif (qtde_presentes == qtde_votos): | |
|                 try: | |
|                     votacao = RegistroVotacao() | |
|                     votacao.numero_votos_sim = int(request.POST['votos_sim']) | |
|                     votacao.numero_votos_nao = int(request.POST['votos_nao']) | |
|                     votacao.numero_abstencoes = int(request.POST['abstencoes']) | |
|                     votacao.observacao = request.POST['observacao'] | |
|                     votacao.materia_id = materia_id | |
|                     votacao.ordem_id = ordem_id | |
|                     votacao.tipo_resultado_votacao_id = int( | |
|                         request.POST['resultado_votacao']) | |
|                     votacao.save() | |
|                 except: | |
|                     return self.form_invalid(form) | |
|                 else: | |
|                     ordem = OrdemDia.objects.get( | |
|                         sessao_plenaria_id=self.object.id, | |
|                         materia_id=materia_id) | |
|                     resultado = TipoResultadoVotacao.objects.get( | |
|                         id=request.POST['resultado_votacao']) | |
|                     ordem.resultado = resultado.nome | |
|                     ordem.votacao_aberta = False | |
|                     ordem.save() | |
| 
 | |
|                 return self.form_valid(form) | |
|         else: | |
|             return self.render_to_response(context) | |
| 
 | |
|     def get_tipos_votacao(self): | |
|         for tipo in TipoResultadoVotacao.objects.all(): | |
|             yield tipo | |
| 
 | |
|     def get_success_url(self): | |
|         pk = self.kwargs['pk'] | |
|         return reverse('sessao:materiaordemdia_list', | |
|                        kwargs={'pk': pk}) | |
| 
 | |
| 
 | |
| 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( | |
|                        ' ', ' ', strip_tags(ordem.observacao))} | |
|         context.update({'materia': materia}) | |
| 
 | |
|         return self.render_to_response(context) | |
| 
 | |
|     def post(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
| 
 | |
|         ordem_id = kwargs['mid'] | |
|         ordem = OrdemDia.objects.get(id=ordem_id) | |
| 
 | |
|         form = VotacaoNominalForm(request.POST) | |
| 
 | |
|         if 'cancelar-votacao' in request.POST: | |
|             ordem.votacao_aberta = False | |
|             ordem.save() | |
|             return self.form_valid(form) | |
| 
 | |
|         if form.is_valid(): | |
|             materia_id = kwargs['oid'] | |
|             ordem_id = kwargs['mid'] | |
| 
 | |
|             votos_sim = 0 | |
|             votos_nao = 0 | |
|             abstencoes = 0 | |
|             nao_votou = 0 | |
| 
 | |
|             for votos in request.POST.getlist('voto_parlamentar'): | |
|                 v = votos.split(':') | |
|                 voto = v[0] | |
|                 parlamentar_id = v[1] | |
| 
 | |
|                 if(voto == 'sim'): | |
|                     votos_sim += 1 | |
|                 elif(voto == 'nao'): | |
|                     votos_nao += 1 | |
|                 elif(voto == 'abstencao'): | |
|                     abstencoes += 1 | |
|                 elif(voto == 'nao_votou'): | |
|                     nao_votou += 1 | |
| 
 | |
|             try: | |
|                 votacao = RegistroVotacao.objects.get( | |
|                     materia_id=materia_id, | |
|                     ordem_id=ordem_id) | |
|             except ObjectDoesNotExist: | |
|                 pass | |
|             else: | |
|                 votacao.delete() | |
| 
 | |
|             votacao = RegistroVotacao() | |
|             votacao.numero_votos_sim = votos_sim | |
|             votacao.numero_votos_nao = votos_nao | |
|             votacao.numero_abstencoes = abstencoes | |
|             votacao.observacao = request.POST['observacao'] | |
|             votacao.materia_id = materia_id | |
|             votacao.ordem_id = ordem_id | |
|             votacao.tipo_resultado_votacao_id = int( | |
|                 request.POST['resultado_votacao']) | |
|             votacao.save() | |
| 
 | |
|             for votos in request.POST.getlist('voto_parlamentar'): | |
|                 v = votos.split(':') | |
|                 voto = v[0] | |
|                 parlamentar_id = v[1] | |
| 
 | |
|                 voto_parlamentar = VotoParlamentar() | |
|                 if voto == 'sim': | |
|                     voto_parlamentar.voto = _('Sim') | |
|                 elif voto == 'nao': | |
|                     voto_parlamentar.voto = _('Não') | |
|                 elif voto == 'abstencao': | |
|                     voto_parlamentar.voto = _('Abstenção') | |
|                 elif voto == 'nao_votou': | |
|                     voto_parlamentar.voto = _('Não Votou') | |
|                 voto_parlamentar.parlamentar_id = parlamentar_id | |
|                 voto_parlamentar.votacao_id = votacao.id | |
|                 voto_parlamentar.save() | |
| 
 | |
|                 ordem = OrdemDia.objects.get( | |
|                     sessao_plenaria_id=self.object.id, | |
|                     materia_id=materia_id) | |
|                 resultado = TipoResultadoVotacao.objects.get( | |
|                     id=request.POST['resultado_votacao']) | |
|                 ordem.resultado = resultado.nome | |
|                 ordem.votacao_aberta = False | |
|                 ordem.save() | |
| 
 | |
|             return self.form_valid(form) | |
|         else: | |
|             return self.form_invalid(form) | |
| 
 | |
|     def get_parlamentares(self): | |
|         self.object = self.get_object() | |
| 
 | |
|         presencas = PresencaOrdemDia.objects.filter( | |
|             sessao_plenaria_id=self.object.id | |
|         ) | |
|         presentes = [p.parlamentar for p in presencas] | |
| 
 | |
|         for parlamentar in Parlamentar.objects.filter(ativo=True): | |
|             if parlamentar in presentes: | |
|                 yield parlamentar | |
| 
 | |
|     def get_tipos_votacao(self): | |
|         for tipo in TipoResultadoVotacao.objects.all(): | |
|             yield tipo | |
| 
 | |
|     def get_success_url(self): | |
|         pk = self.kwargs['pk'] | |
|         return reverse('sessao:materiaordemdia_list', | |
|                        kwargs={'pk': pk}) | |
| 
 | |
| 
 | |
| 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) | |
| 
 | |
|         materia_id = kwargs['oid'] | |
|         ordem_id = kwargs['mid'] | |
| 
 | |
|         votacao = RegistroVotacao.objects.get( | |
|             materia_id=materia_id, | |
|             ordem_id=ordem_id) | |
|         ordem = OrdemDia.objects.get(id=ordem_id) | |
|         votos = VotoParlamentar.objects.filter(votacao_id=votacao.id) | |
| 
 | |
|         list_votos = [] | |
|         for v in votos: | |
|             parlamentar = Parlamentar.objects.get(id=v.parlamentar_id) | |
|             list_votos.append({'parlamentar': parlamentar, 'voto': v.voto}) | |
| 
 | |
|         context.update({'votos': list_votos}) | |
| 
 | |
|         materia = {'materia': ordem.materia, | |
|                    'ementa': sub( | |
|                        ' ', ' ', strip_tags(ordem.observacao))} | |
|         context.update({'materia': materia}) | |
| 
 | |
|         votacao_existente = {'observacao': sub( | |
|             ' ', ' ', strip_tags(votacao.observacao)), | |
|             'tipo_resultado': | |
|             votacao.tipo_resultado_votacao_id} | |
|         context.update({'votacao': votacao_existente}) | |
| 
 | |
|         return self.render_to_response(context) | |
| 
 | |
|     def post(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         form = VotacaoEditForm(request.POST) | |
| 
 | |
|         materia_id = kwargs['oid'] | |
|         ordem_id = kwargs['mid'] | |
| 
 | |
|         if(int(request.POST['anular_votacao']) == 1): | |
|             registro = RegistroVotacao.objects.get( | |
|                 materia_id=materia_id, | |
|                 ordem_id=ordem_id) | |
| 
 | |
|             ordem = OrdemDia.objects.get( | |
|                 sessao_plenaria_id=self.object.id, | |
|                 materia_id=materia_id) | |
|             ordem.resultado = None | |
|             ordem.votacao_aberta = False | |
|             ordem.save() | |
| 
 | |
|             try: | |
|                 votacao = VotoParlamentar.objects.filter( | |
|                     votacao_id=registro.id) | |
|                 for v in votacao: | |
|                     v.delete() | |
|             except: | |
|                 pass | |
| 
 | |
|             registro.delete() | |
| 
 | |
|         return self.form_valid(form) | |
| 
 | |
|     def get_tipos_votacao(self): | |
|         for tipo in TipoResultadoVotacao.objects.all(): | |
|             yield tipo | |
| 
 | |
|     def get_success_url(self): | |
|         pk = self.kwargs['pk'] | |
|         return reverse('sessao:materiaordemdia_list', | |
|                        kwargs={'pk': pk}) | |
| 
 | |
| 
 | |
| 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( | |
|                        ' ', ' ', strip_tags(expediente.observacao))} | |
|         context.update({'materia': materia}) | |
| 
 | |
|         return self.render_to_response(context) | |
| 
 | |
|     def post(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
| 
 | |
|         expediente_id = kwargs['mid'] | |
|         expediente = ExpedienteMateria.objects.get(id=expediente_id) | |
| 
 | |
|         form = VotacaoNominalForm(request.POST) | |
| 
 | |
|         if 'cancelar-votacao' in request.POST: | |
|             expediente.votacao_aberta = False | |
|             expediente.save() | |
|             return self.form_valid(form) | |
| 
 | |
|         if form.is_valid(): | |
|             materia_id = kwargs['oid'] | |
|             expediente_id = kwargs['mid'] | |
| 
 | |
|             votos_sim = 0 | |
|             votos_nao = 0 | |
|             abstencoes = 0 | |
|             nao_votou = 0 | |
| 
 | |
|             for votos in request.POST.getlist('voto_parlamentar'): | |
|                 v = votos.split(':') | |
|                 voto = v[0] | |
|                 parlamentar_id = v[1] | |
| 
 | |
|                 if(voto == 'sim'): | |
|                     votos_sim += 1 | |
|                 elif(voto == 'nao'): | |
|                     votos_nao += 1 | |
|                 elif(voto == 'abstencao'): | |
|                     abstencoes += 1 | |
|                 elif(voto == 'nao_votou'): | |
|                     nao_votou += 1 | |
| 
 | |
|             try: | |
|                 votacao = RegistroVotacao() | |
|                 votacao.numero_votos_sim = votos_sim | |
|                 votacao.numero_votos_nao = votos_nao | |
|                 votacao.numero_abstencoes = abstencoes | |
|                 votacao.observacao = request.POST['observacao'] | |
|                 votacao.materia_id = materia_id | |
|                 votacao.expediente = expediente | |
|                 votacao.tipo_resultado_votacao_id = int( | |
|                     request.POST['resultado_votacao']) | |
|                 votacao.save() | |
|             except: | |
|                 return self.form_invalid(form) | |
|             else: | |
|                 votacao = RegistroVotacao.objects.get( | |
|                     materia_id=materia_id, | |
|                     expediente_id=expediente) | |
| 
 | |
|                 for votos in request.POST.getlist('voto_parlamentar'): | |
|                     v = votos.split(':') | |
|                     voto = v[0] | |
|                     parlamentar_id = v[1] | |
| 
 | |
|                     voto_parlamentar = VotoParlamentar() | |
|                     if(voto == 'sim'): | |
|                         voto_parlamentar.voto = _('Sim') | |
|                     elif(voto == 'nao'): | |
|                         voto_parlamentar.voto = _('Não') | |
|                     elif(voto == 'abstencao'): | |
|                         voto_parlamentar.voto = _('Abstenção') | |
|                     elif(voto == 'nao_votou'): | |
|                         voto_parlamentar.voto = _('Não Votou') | |
|                     voto_parlamentar.parlamentar_id = parlamentar_id | |
|                     voto_parlamentar.votacao_id = votacao.id | |
|                     voto_parlamentar.save() | |
| 
 | |
|                     expediente = ExpedienteMateria.objects.get( | |
|                         sessao_plenaria_id=self.object.id, | |
|                         materia_id=materia_id) | |
|                     resultado = TipoResultadoVotacao.objects.get( | |
|                         id=request.POST['resultado_votacao']) | |
|                     expediente.resultado = resultado.nome | |
|                     expediente.votacao_aberta = False | |
|                     expediente.save() | |
| 
 | |
|             return self.form_valid(form) | |
|         else: | |
|             return self.form_invalid(form) | |
| 
 | |
|     def get_parlamentares(self): | |
|         self.object = self.get_object() | |
| 
 | |
|         presencas = SessaoPlenariaPresenca.objects.filter( | |
|             sessao_plenaria_id=self.object.id | |
|         ) | |
|         presentes = [p.parlamentar for p in presencas] | |
| 
 | |
|         for parlamentar in Parlamentar.objects.filter(ativo=True): | |
|             if parlamentar in presentes: | |
|                 yield parlamentar | |
| 
 | |
|     def get_tipos_votacao(self): | |
|         for tipo in TipoResultadoVotacao.objects.all(): | |
|             yield tipo | |
| 
 | |
|     def get_success_url(self): | |
|         pk = self.kwargs['pk'] | |
|         return reverse('sessao:expedientemateria_list', | |
|                        kwargs={'pk': pk}) | |
| 
 | |
| 
 | |
| 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) | |
| 
 | |
|         materia_id = kwargs['oid'] | |
|         expediente_id = kwargs['mid'] | |
| 
 | |
|         votacao = RegistroVotacao.objects.get( | |
|             materia_id=materia_id, | |
|             expediente_id=expediente_id) | |
|         expediente = ExpedienteMateria.objects.get(id=expediente_id) | |
|         votos = VotoParlamentar.objects.filter(votacao_id=votacao.id) | |
| 
 | |
|         list_votos = [] | |
|         for v in votos: | |
|             parlamentar = Parlamentar.objects.get(id=v.parlamentar_id) | |
|             list_votos.append({'parlamentar': parlamentar, 'voto': v.voto}) | |
| 
 | |
|         context.update({'votos': list_votos}) | |
| 
 | |
|         materia = {'materia': expediente.materia, | |
|                    'ementa': sub( | |
|                        ' ', ' ', strip_tags(expediente.observacao))} | |
|         context.update({'materia': materia}) | |
| 
 | |
|         votacao_existente = {'observacao': sub( | |
|             ' ', ' ', strip_tags(votacao.observacao)), | |
|             'tipo_resultado': | |
|             votacao.tipo_resultado_votacao_id} | |
|         context.update({'votacao': votacao_existente}) | |
| 
 | |
|         return self.render_to_response(context) | |
| 
 | |
|     def post(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         form = VotacaoEditForm(request.POST) | |
| 
 | |
|         materia_id = kwargs['oid'] | |
|         expediente_id = kwargs['mid'] | |
| 
 | |
|         if(int(request.POST['anular_votacao']) == 1): | |
|             registro = RegistroVotacao.objects.get( | |
|                 materia_id=materia_id, | |
|                 expediente_id=expediente_id) | |
| 
 | |
|             expediente = ExpedienteMateria.objects.get( | |
|                 sessao_plenaria_id=self.object.id, | |
|                 materia_id=materia_id) | |
|             expediente.resultado = '' | |
|             expediente.votacao_aberta = False | |
|             expediente.save() | |
| 
 | |
|             try: | |
|                 votacao = VotoParlamentar.objects.filter( | |
|                     votacao_id=registro.id) | |
|                 for v in votacao: | |
|                     v.delete() | |
|             except: | |
|                 pass | |
| 
 | |
|             registro.delete() | |
| 
 | |
|         return self.form_valid(form) | |
| 
 | |
|     def get_tipos_votacao(self): | |
|         for tipo in TipoResultadoVotacao.objects.all(): | |
|             yield tipo | |
| 
 | |
|     def get_success_url(self): | |
|         pk = self.kwargs['pk'] | |
|         return reverse('sessao:expedientemateria_list', | |
|                        kwargs={'pk': pk}) | |
| 
 | |
| 
 | |
| class VotacaoExpedienteView(FormMixin, SessaoCrud.CrudDetailView): | |
| 
 | |
|     ''' | |
|         Votação Simbólica e Secreta | |
|     ''' | |
| 
 | |
|     template_name = 'sessao/votacao/votacao.html' | |
|     form_class = VotacaoForm | |
| 
 | |
|     def get(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         context = self.get_context_data(object=self.object) | |
|         url = request.get_full_path() | |
| 
 | |
|         # TODO: HACK, VERIFICAR MELHOR FORMA DE FAZER ISSO | |
|         if "votsimb" in url: | |
|             titulo = _("Votação Simbólica") | |
|         elif "votsec" in url: | |
|             titulo = _("Votação Secreta") | |
|         else: | |
|             titulo = _("Não definida") | |
| 
 | |
|         expediente_id = kwargs['mid'] | |
|         expediente = ExpedienteMateria.objects.get(id=expediente_id) | |
|         qtde_presentes = SessaoPlenariaPresenca.objects.filter( | |
|             sessao_plenaria_id=self.object.id).count() | |
| 
 | |
|         materia = {'materia': expediente.materia, | |
|                    'ementa': expediente.observacao} | |
|         context.update({'votacao_titulo': titulo, | |
|                         'materia': materia, | |
|                         'total_presentes': qtde_presentes}) | |
| 
 | |
|         return self.render_to_response(context) | |
| 
 | |
|     def post(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         form = VotacaoForm(request.POST) | |
|         context = self.get_context_data(object=self.object) | |
|         url = request.get_full_path() | |
| 
 | |
|         # ==================================================== | |
|         if "votsimb" in url: | |
|             titulo = _("Votação Simbólica") | |
|         elif "votsec" in url: | |
|             titulo = _("Votação Secreta") | |
|         else: | |
|             titulo = _("Não definida") | |
| 
 | |
|         expediente_id = kwargs['mid'] | |
|         expediente = ExpedienteMateria.objects.get(id=expediente_id) | |
|         qtde_presentes = SessaoPlenariaPresenca.objects.filter( | |
|             sessao_plenaria_id=self.object.id).count() | |
| 
 | |
|         materia = {'materia': expediente.materia, | |
|                    'ementa': expediente.observacao} | |
|         context.update({'votacao_titulo': titulo, | |
|                         'materia': materia, | |
|                         'total_presentes': qtde_presentes}) | |
|         context.update({'form': form}) | |
|         # ==================================================== | |
| 
 | |
|         if 'cancelar-votacao' in request.POST: | |
|             expediente.votacao_aberta = False | |
|             expediente.save() | |
|             return self.form_valid(form) | |
| 
 | |
|         if form.is_valid(): | |
|             materia_id = kwargs['oid'] | |
|             expediente_id = kwargs['mid'] | |
| 
 | |
|             qtde_presentes = SessaoPlenariaPresenca.objects.filter( | |
|                 sessao_plenaria_id=self.object.id).count() | |
|             qtde_votos = (int(request.POST['votos_sim']) + | |
|                           int(request.POST['votos_nao']) + | |
|                           int(request.POST['abstencoes'])) | |
| 
 | |
|             if (int(request.POST['voto_presidente']) == 0): | |
|                 qtde_presentes -= 1 | |
| 
 | |
|             if (qtde_votos > qtde_presentes or qtde_votos < qtde_presentes): | |
|                 form._errors["total_votos"] = ErrorList([u""]) | |
|                 return self.render_to_response(context) | |
|             elif (qtde_presentes == qtde_votos): | |
|                 try: | |
|                     votacao = RegistroVotacao() | |
|                     votacao.numero_votos_sim = int(request.POST['votos_sim']) | |
|                     votacao.numero_votos_nao = int(request.POST['votos_nao']) | |
|                     votacao.numero_abstencoes = int(request.POST['abstencoes']) | |
|                     votacao.observacao = request.POST['observacao'] | |
|                     votacao.materia_id = materia_id | |
|                     votacao.expediente_id = expediente_id | |
|                     votacao.tipo_resultado_votacao_id = int( | |
|                         request.POST['resultado_votacao']) | |
|                     votacao.save() | |
|                 except: | |
|                     return self.form_invalid(form) | |
|                 else: | |
|                     expediente = ExpedienteMateria.objects.get( | |
|                         sessao_plenaria_id=self.object.id, | |
|                         materia_id=materia_id) | |
|                     resultado = TipoResultadoVotacao.objects.get( | |
|                         id=request.POST['resultado_votacao']) | |
|                     expediente.resultado = resultado.nome | |
|                     expediente.votacao_aberta = False | |
|                     expediente.save() | |
| 
 | |
|                 return self.form_valid(form) | |
|         else: | |
|             return self.render_to_response(context) | |
| 
 | |
|     def get_tipos_votacao(self): | |
|         for tipo in TipoResultadoVotacao.objects.all(): | |
|             yield tipo | |
| 
 | |
|     def get_success_url(self): | |
|         pk = self.kwargs['pk'] | |
|         return reverse('sessao:expedientemateria_list', | |
|                        kwargs={'pk': pk}) | |
| 
 | |
| 
 | |
| class VotacaoExpedienteEditView(FormMixin, SessaoCrud.CrudDetailView): | |
| 
 | |
|     ''' | |
|         Votação Simbólica e Secreta | |
|     ''' | |
| 
 | |
|     template_name = 'sessao/votacao/votacao_edit.html' | |
|     form_class = VotacaoEditForm | |
| 
 | |
|     def get_success_url(self): | |
|         pk = self.kwargs['pk'] | |
|         return reverse('sessao:expedientemateria_list', | |
|                        kwargs={'pk': pk}) | |
| 
 | |
|     def get_tipos_votacao(self): | |
|         for tipo in TipoResultadoVotacao.objects.all(): | |
|             yield tipo | |
| 
 | |
|     def get(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         context = self.get_context_data(object=self.object) | |
| 
 | |
|         url = request.get_full_path() | |
| 
 | |
|         if "votsimb" in url: | |
|             titulo = _("Votação Simbólica") | |
|         elif "votsec" in url: | |
|             titulo = _("Votação Secreta") | |
|         else: | |
|             titulo = _("Não definida") | |
| 
 | |
|         materia_id = kwargs['oid'] | |
|         expediente_id = kwargs['mid'] | |
| 
 | |
|         expediente = ExpedienteMateria.objects.get(id=expediente_id) | |
| 
 | |
|         materia = {'materia': expediente.materia, | |
|                    'ementa': expediente.observacao} | |
|         context.update({'materia': materia}) | |
| 
 | |
|         votacao = RegistroVotacao.objects.get( | |
|             materia_id=materia_id, | |
|             expediente_id=expediente_id) | |
|         votacao_existente = {'observacao': sub( | |
|             ' ', ' ', strip_tags(votacao.observacao)), | |
|             'tipo_resultado': | |
|             votacao.tipo_resultado_votacao_id} | |
|         context.update({'votacao_titulo': titulo, | |
|                         'votacao': votacao_existente}) | |
| 
 | |
|         return self.render_to_response(context) | |
| 
 | |
|     def post(self, request, *args, **kwargs): | |
| 
 | |
|         self.object = self.get_object() | |
|         form = VotacaoEditForm(request.POST) | |
| 
 | |
|         materia_id = kwargs['oid'] | |
|         expediente_id = kwargs['mid'] | |
| 
 | |
|         if(int(request.POST['anular_votacao']) == 1): | |
|             RegistroVotacao.objects.get( | |
|                 materia_id=materia_id, | |
|                 expediente_id=expediente_id).delete() | |
| 
 | |
|             expediente = ExpedienteMateria.objects.get( | |
|                 sessao_plenaria_id=self.object.id, | |
|                 materia_id=materia_id) | |
|             expediente.votacao_aberta = False | |
|             expediente.resultado = '' | |
|             expediente.save() | |
| 
 | |
|         return self.form_valid(form) | |
| 
 | |
| 
 | |
| class SessaoListView(ListView): | |
|     template_name = "sessao/sessao_list.html" | |
|     paginate_by = 10 | |
|     model = SessaoPlenaria | |
| 
 | |
|     def get_queryset(self): | |
|         return SessaoPlenaria.objects.all().order_by('-data_inicio') | |
| 
 | |
|     def get_context_data(self, **kwargs): | |
|         context = super(SessaoListView, self).get_context_data(**kwargs) | |
| 
 | |
|         paginator = context['paginator'] | |
|         page_obj = context['page_obj'] | |
| 
 | |
|         context['page_range'] = make_pagination( | |
|             page_obj.number, paginator.num_pages) | |
|         return context | |
| 
 | |
| 
 | |
| class PautaSessaoListView(SessaoListView): | |
|     template_name = "sessao/pauta_sessao_list.html" | |
| 
 | |
| 
 | |
| class PautaSessaoDetailView(SessaoCrud.CrudDetailView): | |
|     template_name = "sessao/pauta_sessao_detail.html" | |
| 
 | |
|     def get(self, request, *args, **kwargs): | |
|         self.object = self.get_object() | |
|         context = self.get_context_data(object=self.object) | |
| 
 | |
|         # ===================================================================== | |
|         # Identificação Básica | |
|         abertura = self.object.data_inicio.strftime('%d/%m/%Y') | |
|         if self.object.data_fim: | |
|             encerramento = self.object.data_fim.strftime('%d/%m/%Y') | |
|         else: | |
|             encerramento = "" | |
| 
 | |
|         context.update({'basica': [ | |
|             _('Tipo de Sessão: %(tipo)s') % {'tipo': self.object.tipo}, | |
|             _('Abertura: %(abertura)s') % {'abertura': abertura}, | |
|             _('Encerramento: %(encerramento)s') % { | |
|                 'encerramento': encerramento}, | |
|         ]}) | |
|         # ===================================================================== | |
|         # Matérias Expediente | |
|         materias = ExpedienteMateria.objects.filter( | |
|             sessao_plenaria_id=self.object.id) | |
| 
 | |
|         materias_expediente = [] | |
|         for m in materias: | |
|             ementa = m.observacao | |
|             titulo = m.materia | |
|             numero = m.numero_ordem | |
| 
 | |
|             if m.resultado: | |
|                 resultado = m.resultado | |
|             else: | |
|                 resultado = _('Matéria não votada') | |
| 
 | |
|             autoria = Autoria.objects.filter(materia_id=m.materia_id) | |
|             autor = [str(x.autor) for x in autoria] | |
| 
 | |
|             mat = {'id': m.id, | |
|                    'ementa': ementa, | |
|                    'titulo': titulo, | |
|                    'numero': numero, | |
|                    'resultado': resultado, | |
|                    'autor': autor | |
|                    } | |
|             materias_expediente.append(mat) | |
| 
 | |
|         context.update({'materia_expediente': materias_expediente}) | |
|         # ===================================================================== | |
|         # Expedientes | |
|         expediente = ExpedienteSessao.objects.filter( | |
|             sessao_plenaria_id=self.object.id) | |
| 
 | |
|         expedientes = [] | |
|         for e in expediente: | |
|             tipo = TipoExpediente.objects.get( | |
|                 id=e.tipo_id) | |
|             conteudo = sub( | |
|                 ' ', ' ', strip_tags(e.conteudo)) | |
| 
 | |
|             ex = {'tipo': tipo, 'conteudo': conteudo} | |
|             expedientes.append(ex) | |
| 
 | |
|         context.update({'expedientes': expedientes}) | |
|         # ===================================================================== | |
|         # Orador Expediente | |
|         oradores = OradorExpediente.objects.filter( | |
|             sessao_plenaria_id=self.object.id).order_by('numero_ordem') | |
|         context.update({'oradores': oradores}) | |
|         # ===================================================================== | |
|         # Matérias Ordem do Dia | |
|         ordem = OrdemDia.objects.filter( | |
|             sessao_plenaria_id=self.object.id) | |
| 
 | |
|         materias_ordem = [] | |
|         for o in ordem: | |
|             ementa = o.observacao | |
|             titulo = o.materia | |
|             numero = o.numero_ordem | |
| 
 | |
|             # Verificar resultado | |
|             if o.resultado: | |
|                 resultado = o.resultado | |
|             else: | |
|                 resultado = _('Matéria não votada') | |
| 
 | |
|             autoria = Autoria.objects.filter( | |
|                 materia_id=o.materia_id) | |
|             autor = [str(x.autor) for x in autoria] | |
| 
 | |
|             mat = {'id': o.id, | |
|                    'ementa': ementa, | |
|                    'titulo': titulo, | |
|                    'numero': numero, | |
|                    'resultado': resultado, | |
|                    'autor': autor | |
|                    } | |
|             materias_ordem.append(mat) | |
| 
 | |
|         context.update({'materias_ordem': materias_ordem}) | |
| 
 | |
|         return self.render_to_response(context) | |
| 
 | |
| 
 | |
| class SessaoPlenariaView(generics.ListAPIView): | |
|     queryset = SessaoPlenaria.objects.all() | |
|     serializer_class = SessaoPlenariaSerializer | |
| 
 | |
| 
 | |
| class PautaExpedienteDetail(SessaoCrud.CrudDetailView): | |
|     template_name = "sessao/pauta/expediente.html" | |
| 
 | |
|     def get(self, request, *args, **kwargs): | |
|         pk = self.kwargs['pk'] | |
| 
 | |
|         expediente = ExpedienteMateria.objects.get(id=pk) | |
|         doc_ace = DocumentoAcessorio.objects.filter( | |
|             materia=expediente.materia) | |
|         tramitacao = Tramitacao.objects.filter( | |
|             materia=expediente.materia) | |
| 
 | |
|         return self.render_to_response( | |
|             {'expediente': expediente, | |
|              'doc_ace': doc_ace, | |
|              'tramitacao': tramitacao}) | |
| 
 | |
| 
 | |
| class PautaOrdemDetail(SessaoCrud.CrudDetailView): | |
|     template_name = "sessao/pauta/ordem.html" | |
| 
 | |
|     def get(self, request, *args, **kwargs): | |
|         pk = self.kwargs['pk'] | |
| 
 | |
|         ordem = OrdemDia.objects.get(id=pk) | |
|         norma = NormaJuridica.objects.filter( | |
|             materia=ordem.materia) | |
|         doc_ace = DocumentoAcessorio.objects.filter( | |
|             materia=ordem.materia) | |
|         tramitacao = Tramitacao.objects.filter( | |
|             materia=ordem.materia) | |
| 
 | |
|         return self.render_to_response( | |
|             {'ordem': ordem, | |
|              'norma': norma, | |
|              'doc_ace': doc_ace, | |
|              'tramitacao': tramitacao}) | |
| 
 | |
| 
 | |
| class PesquisarSessaoPlenariaView(FilterView): | |
|     model = SessaoPlenaria | |
|     filterset_class = SessaoPlenariaFilterSet | |
|     paginate_by = 10 | |
| 
 | |
|     def get_filterset_kwargs(self, filterset_class): | |
|         super(PesquisarSessaoPlenariaView, | |
|               self).get_filterset_kwargs(filterset_class) | |
| 
 | |
|         kwargs = {'data': self.request.GET or None} | |
| 
 | |
|         qs = self.get_queryset() | |
| 
 | |
|         qs = qs.distinct() | |
| 
 | |
|         kwargs.update({ | |
|             'queryset': qs, | |
|         }) | |
|         return kwargs | |
| 
 | |
|     def get_context_data(self, **kwargs): | |
|         context = super(PesquisarSessaoPlenariaView, | |
|                         self).get_context_data(**kwargs) | |
| 
 | |
|         paginator = context['paginator'] | |
|         page_obj = context['page_obj'] | |
| 
 | |
|         context['page_range'] = make_pagination( | |
|             page_obj.number, paginator.num_pages) | |
| 
 | |
|         return context | |
| 
 | |
|     def get(self, request, *args, **kwargs): | |
|         super(PesquisarSessaoPlenariaView, self).get(request) | |
| 
 | |
|         # Se a pesquisa estiver quebrando com a paginação | |
|         # Olhe esta função abaixo | |
|         # Provavelmente você criou um novo campo no Form/FilterSet | |
|         # Então a ordem da URL está diferente | |
|         data = self.filterset.data | |
|         if (data and data.get('data_inicio__year') is not None): | |
|             url = "&" + str(self.request.environ['QUERY_STRING']) | |
|             if url.startswith("&page"): | |
|                 ponto_comeco = url.find('data_inicio__year=') - 1 | |
|                 url = url[ponto_comeco:] | |
|         else: | |
|             url = '' | |
| 
 | |
|         context = self.get_context_data(filter=self.filterset, | |
|                                         object_list=self.object_list, | |
|                                         filter_url=url, | |
|                                         numero_res=len(self.object_list) | |
|                                         ) | |
| 
 | |
|         return self.render_to_response(context)
 | |
| 
 |