diff --git a/sapl/sessao/migrations/0005_auto_20170601_1246.py b/sapl/sessao/migrations/0005_auto_20170601_1246.py
new file mode 100644
index 000000000..842f99319
--- /dev/null
+++ b/sapl/sessao/migrations/0005_auto_20170601_1246.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2017-06-01 12:46
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+from datetime import datetime
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('sessao', '0004_votonominal_registro_votacao'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='votonominal',
+ name='registro_votacao',
+ ),
+ migrations.AddField(
+ model_name='votoparlamentar',
+ name='data_hora',
+ field=models.DateTimeField(auto_now_add=True, blank=True, null=True, verbose_name='Data/Hora'),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='votoparlamentar',
+ name='ip',
+ field=models.CharField(blank=True, max_length=30, null=True, verbose_name='IP'),
+ ),
+ migrations.AddField(
+ model_name='votoparlamentar',
+ name='user',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL),
+ ),
+ ]
diff --git a/sapl/sessao/migrations/0006_auto_20170601_1257.py b/sapl/sessao/migrations/0006_auto_20170601_1257.py
new file mode 100644
index 000000000..6d43c17d0
--- /dev/null
+++ b/sapl/sessao/migrations/0006_auto_20170601_1257.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2017-06-01 12:57
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('sessao', '0005_auto_20170601_1246'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='votonominal',
+ name='votacao',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessao.RegistroVotacao'),
+ ),
+ migrations.AlterField(
+ model_name='votoparlamentar',
+ name='votacao',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sessao.RegistroVotacao'),
+ ),
+ ]
diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py
index 6d43127fd..c2ad8d19b 100644
--- a/sapl/sessao/models.py
+++ b/sapl/sessao/models.py
@@ -412,20 +412,25 @@ class RegistroVotacao(models.Model):
@reversion.register()
class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar
- votacao = models.ForeignKey(RegistroVotacao, on_delete=models.PROTECT)
+ votacao = models.ForeignKey(RegistroVotacao,
+ blank=True,
+ null=True)
parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT)
voto = models.CharField(max_length=10)
user = models.ForeignKey(get_settings_auth_user_model(),
on_delete=models.PROTECT,
null=True,
- black=True)
+ blank=True)
ip = models.CharField(verbose_name=_('IP'),
max_length=30,
null=True,
- black=True)
+ blank=True)
data_hora = models.DateTimeField(
- verbose_name=_('Data/Hora'), auto_now_add=True)
+ verbose_name=_('Data/Hora'),
+ auto_now_add=True,
+ blank=True,
+ null=True)
class Meta:
verbose_name = _('Registro de Votação de Parlamentar')
@@ -436,6 +441,31 @@ class VotoParlamentar(models.Model): # RegistroVotacaoParlamentar
'votacao': self.votacao, 'parlamentar': self.parlamentar}
+@reversion.register()
+class VotoNominal(models.Model):
+ parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT)
+ voto = models.CharField(verbose_name=_('Voto'), max_length=10)
+ votacao = models.ForeignKey(RegistroVotacao,
+ blank=True,
+ null=True)
+
+ sessao = models.ForeignKey(SessaoPlenaria, on_delete=models.PROTECT)
+ materia = models.ForeignKey(MateriaLegislativa, on_delete=models.PROTECT)
+
+ user = models.ForeignKey(get_settings_auth_user_model(),
+ on_delete=models.PROTECT)
+ ip = models.CharField(verbose_name=_('IP'), max_length=30)
+ data_hora = models.DateTimeField(
+ verbose_name=_('Data/Hora'), auto_now_add=True)
+
+ class Meta:
+ verbose_name = _('Registro do Voto do Parlamentar')
+ verbose_name_plural = _('Registros dos Votos dos Parlamentares')
+
+ def __str__(self):
+ return '%s - %s' % (self.parlamentar.nome_parlamentar, self.voto)
+
+
@reversion.register()
class SessaoPlenariaPresenca(models.Model):
sessao_plenaria = models.ForeignKey(SessaoPlenaria,
diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py
index 6b2fc1c6d..cf83e74c3 100644
--- a/sapl/sessao/views.py
+++ b/sapl/sessao/views.py
@@ -190,20 +190,20 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
url = reverse('sapl.sessao:votacaosimbolica',
kwargs={
'pk': obj.sessao_plenaria_id,
- 'oid': obj.materia_id,
- 'mid': obj.pk})
+ 'oid': obj.pk,
+ 'mid': obj.materia_id})
elif obj.tipo_votacao == 2:
url = reverse('sapl.sessao:votacaonominal',
kwargs={
'pk': obj.sessao_plenaria_id,
- 'oid': obj.materia_id,
- 'mid': obj.pk})
+ 'oid': obj.pk,
+ 'mid': obj.materia_id})
elif obj.tipo_votacao == 3:
url = reverse('sapl.sessao:votacaosecreta',
kwargs={
'pk': obj.sessao_plenaria_id,
- 'oid': obj.materia_id,
- 'mid': obj.pk})
+ 'oid': obj.pk,
+ 'mid': obj.materia_id})
if self.request.user.has_module_perms(AppConfig.label):
btn_registrar = '''
%s
%s' %
- (url,
- resultado_descricao,
- resultado_observacao))
+ (url,
+ resultado_descricao,
+ resultado_observacao))
else:
obj.resultado = ('%s
%s' %
- (resultado_descricao,
- resultado_observacao))
+ (resultado_descricao,
+ resultado_observacao))
return [self._as_row(obj) for obj in object_list]
@@ -310,20 +310,20 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
url = reverse('sapl.sessao:votacaosimbolicaexp',
kwargs={
'pk': obj.sessao_plenaria_id,
- 'oid': obj.materia_id,
- 'mid': obj.pk})
+ 'oid': obj.pk,
+ 'mid': obj.materia_id})
elif obj.tipo_votacao == 2:
url = reverse('sapl.sessao:votacaonominalexp',
kwargs={
'pk': obj.sessao_plenaria_id,
- 'oid': obj.materia_id,
- 'mid': obj.pk})
+ 'oid': obj.pk,
+ 'mid': obj.materia_id})
elif obj.tipo_votacao == 3:
url = reverse('sapl.sessao:votacaosecretaexp',
kwargs={
'pk': obj.sessao_plenaria_id,
- 'oid': obj.materia_id,
- 'mid': obj.pk})
+ 'oid': obj.pk,
+ 'mid': obj.materia_id})
if self.request.user.has_module_perms(AppConfig.label):
btn_registrar = '''
@@ -355,20 +355,20 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
'sapl.sessao:votacaosimbolicaexpedit',
kwargs={
'pk': obj.sessao_plenaria_id,
- 'oid': obj.materia_id,
- 'mid': obj.pk})
+ 'oid': obj.pk,
+ 'mid': obj.materia_id})
elif obj.tipo_votacao == 2:
url = reverse('sapl.sessao:votacaonominalexpedit',
kwargs={
'pk': obj.sessao_plenaria_id,
- 'oid': obj.materia_id,
- 'mid': obj.pk})
+ 'oid': obj.pk,
+ 'mid': obj.materia_id})
elif obj.tipo_votacao == 3:
url = reverse('sapl.sessao:votacaosecretaexpedit',
kwargs={
'pk': obj.sessao_plenaria_id,
- 'oid': obj.materia_id,
- 'mid': obj.pk})
+ 'oid': obj.pk,
+ 'mid': obj.materia_id})
obj.resultado = ('%s
%s' %
(url,
resultado_descricao,
@@ -378,8 +378,8 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
url = reverse('sapl.sessao:votacaonominalexpdetail',
kwargs={
'pk': obj.sessao_plenaria_id,
- 'oid': obj.materia_id,
- 'mid': obj.pk})
+ 'oid': obj.pk,
+ 'mid': obj.materia_id})
obj.resultado = ('%s
%s' %
(url,
resultado_descricao,
@@ -761,8 +761,8 @@ class ListMateriaOrdemDiaView(FormMixin, DetailView):
autor = [str(a.autor) for a in autoria]
mat = {'pk': pk,
- 'oid': o.materia_id,
- 'ordem_id': o.id,
+ 'oid': o.id,
+ 'ordem_id': o.materia_id,
'ementa': ementa,
'titulo': titulo,
'numero': numero,
@@ -821,8 +821,8 @@ class ListMateriaOrdemDiaView(FormMixin, DetailView):
autor = [str(a.autor) for a in autoria]
mat = {'pk': pk,
- 'oid': o.materia_id,
- 'ordem_id': o.id,
+ 'oid': o.id,
+ 'ordem_id': o.materia_id,
'ementa': ementa,
'titulo': titulo,
'numero': numero,
@@ -1388,8 +1388,8 @@ class VotacaoEditView(SessaoPermissionMixin):
self.object = self.get_object()
form = VotacaoEditForm(request.POST)
- materia_id = kwargs['oid']
- ordem_id = kwargs['mid']
+ materia_id = kwargs['mid']
+ ordem_id = kwargs['oid']
if(int(request.POST['anular_votacao']) == 1):
RegistroVotacao.objects.filter(
@@ -1417,8 +1417,8 @@ class VotacaoEditView(SessaoPermissionMixin):
else:
titulo = _("Não definida")
- materia_id = kwargs['oid']
- ordem_id = kwargs['mid']
+ materia_id = kwargs['mid']
+ ordem_id = kwargs['oid']
ordem = OrdemDia.objects.get(id=ordem_id)
@@ -1471,7 +1471,7 @@ class VotacaoView(SessaoPermissionMixin):
else:
titulo = _("Não definida")
- ordem_id = kwargs['mid']
+ ordem_id = kwargs['oid']
ordem = OrdemDia.objects.get(id=ordem_id)
qtde_presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.object.id).count()
@@ -1497,7 +1497,7 @@ class VotacaoView(SessaoPermissionMixin):
else:
titulo = _("Não definida")
- ordem_id = kwargs['mid']
+ ordem_id = kwargs['oid']
ordem = OrdemDia.objects.get(id=ordem_id)
qtde_presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.object.id).count()
@@ -1515,8 +1515,8 @@ class VotacaoView(SessaoPermissionMixin):
return self.form_valid(form)
if form.is_valid():
- materia_id = kwargs['oid']
- ordem_id = kwargs['mid']
+ materia_id = kwargs['mid']
+ ordem_id = kwargs['oid']
qtde_presentes = PresencaOrdemDia.objects.filter(
sessao_plenaria_id=self.object.id).count()
@@ -1568,85 +1568,115 @@ class VotacaoView(SessaoPermissionMixin):
kwargs={'pk': pk})
-def fechar_votacao_materia(presentes, ordem=None, expediente=None):
+def fechar_votacao_materia(ordem=None, expediente=None):
if ordem:
- for p in presentes:
- try:
- voto_nominal = VotoNominal.objects.get(
- parlamentar=p.parlamentar,
- registro_votacao__ordem=ordem)
- except ObjectDoesNotExist:
- pass
- else:
- registro_votacao = voto_nominal.registro_votacao
+ registro_votacao = RegistroVotacao.objects.filter(ordem=ordem)
- registro_votacao.delete()
- voto_nominal.delete()
+ for r in registro_votacao:
+ r.delete()
ordem.votacao_aberta = False
ordem.save()
elif expediente:
- for p in presentes:
- try:
- voto_nominal = VotoNominal.objects.get(
- parlamentar=p.parlamentar,
- registro_votacao__expediente=expediente)
- except ObjectDoesNotExist:
- pass
- else:
- registro_votacao = voto_nominal.registro_votacao
+ registro_votacao = RegistroVotacao.objects.filter(
+ expediente=expediente)
- registro_votacao.delete()
- voto_nominal.delete()
+ for r in registro_votacao:
+ r.delete()
expediente.votacao_aberta = False
expediente.save()
-class VotacaoNominalView(SessaoPermissionMixin):
+class VotacaoNominalAbstract(SessaoPermissionMixin):
template_name = 'sessao/votacao/nominal.html'
+ ordem = None
+ expediente = None
def get(self, request, *args, **kwargs):
- ordem_id = kwargs['mid']
- ordem = OrdemDia.objects.get(id=ordem_id)
- total = PresencaOrdemDia.objects.filter(
- sessao_plenaria_id=ordem.sessao_plenaria_id).count()
+ if self.ordem:
+ ordem_id = kwargs['oid']
+ if RegistroVotacao.objects.filter(ordem_id=ordem_id).exists():
+ msg = _('Esta matéria já foi votada!')
+ messages.add_message(request, messages.ERROR, msg)
+ return HttpResponseRedirect(reverse(
+ 'sapl.sessao:ordemdia_list', kwargs={'pk': kwargs['pk']}))
+
+ try:
+ ordem = OrdemDia.objects.get(id=ordem_id)
+ except ObjectDoesNotExist:
+ raise Http404()
+
+ total = PresencaOrdemDia.objects.filter(
+ sessao_plenaria_id=ordem.sessao_plenaria_id).count()
+
+ tipo_materia_votacao = ordem
+
+ elif self.expediente:
+ expediente_id = kwargs['oid']
+ if (RegistroVotacao.objects.filter(
+ expediente_id=expediente_id).exists()):
+ msg = _('Esta matéria já foi votada!')
+ messages.add_message(request, messages.ERROR, msg)
+ return HttpResponseRedirect(reverse(
+ 'sapl.sessao:expedientemateria_list',
+ kwargs={'pk': kwargs['pk']}))
+
+ try:
+ expediente = ExpedienteMateria.objects.get(id=expediente_id)
+ except ObjectDoesNotExist:
+ raise Http404()
- materia = {'materia': ordem.materia,
+ total = SessaoPlenariaPresenca.objects.filter(
+ sessao_plenaria_id=expediente.sessao_plenaria_id).count()
+
+ tipo_materia_votacao = expediente
+
+ materia = {'materia': tipo_materia_votacao.materia,
'ementa': sub(
- ' ', ' ', strip_tags(ordem.observacao))}
+ ' ', ' ', strip_tags(
+ tipo_materia_votacao.observacao))}
context = {'materia': materia, 'object': self.get_object(),
- 'parlamentares': self.get_parlamentares(ordem.materia),
- 'tipos': self.get_tipos_votacao(),
- 'total': total}
+ 'parlamentares': self.get_parlamentares(
+ tipo_materia_votacao.materia),
+ 'tipos': self.get_tipos_votacao(),
+ 'total': total}
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
self.object = self.get_object()
- ordem_id = kwargs['mid']
+ if self.ordem:
+ ordem_id = kwargs['oid']
+ try:
+ ordem = OrdemDia.objects.get(id=ordem_id)
+ except ObjectDoesNotExist:
+ raise Http404()
+
+ tipo_materia_votacao = ordem
- try:
- ordem = OrdemDia.objects.get(id=ordem_id)
- except ObjectDoesNotExist:
- raise Http404()
+ elif self.expediente:
+ expediente_id = kwargs['oid']
+ try:
+ expediente = ExpedienteMateria.objects.get(id=expediente_id)
+ except ObjectDoesNotExist:
+ raise Http404()
+
+ tipo_materia_votacao = expediente
form = VotacaoNominalForm(request.POST)
if 'cancelar-votacao' in request.POST:
- presentes = PresencaOrdemDia.objects.filter(
- sessao_plenaria_id=ordem.sessao_plenaria_id)
-
- fechar_votacao_materia(presentes, ordem=ordem)
+ if self.ordem:
+ fechar_votacao_materia(ordem=ordem)
+ elif self.expediente:
+ fechar_votacao_materia(expediente=expediente)
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
@@ -1668,16 +1698,19 @@ class VotacaoNominalView(SessaoPermissionMixin):
# Caso todas as opções sejam 'Não votou', fecha a votação
if nao_votou == len(request.POST.getlist('voto_parlamentar')):
- presentes = PresencaOrdemDia.objects.filter(
- sessao_plenaria_id=ordem.sessao_plenaria_id)
-
- fechar_votacao_materia(presentes, ordem=ordem)
+ if self.ordem:
+ fechar_votacao_materia(ordem=ordem)
+ elif self.expediente:
+ fechar_votacao_materia(expediente=expediente)
return self.form_valid(form)
- votacao = RegistroVotacao.objects.filter(
- materia_id=materia_id,
- ordem_id=ordem_id)
+ if self.ordem:
+ votacao = RegistroVotacao.objects.filter(
+ ordem_id=ordem_id)
+ elif self.expediente:
+ votacao = RegistroVotacao.objects.filter(
+ expediente_id=expediente_id)
# Remove todas as votação desta matéria, caso existam
for v in votacao:
@@ -1688,8 +1721,14 @@ class VotacaoNominalView(SessaoPermissionMixin):
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
+
+ if self.ordem:
+ votacao.materia_id = ordem.materia.id
+ votacao.ordem_id = ordem_id
+ elif self.expediente:
+ votacao.materia_id = expediente.materia.id
+ votacao.expediente_id = expediente_id
+
votacao.tipo_resultado_votacao_id = int(
request.POST['resultado_votacao'])
votacao.save()
@@ -1705,14 +1744,12 @@ class VotacaoNominalView(SessaoPermissionMixin):
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()
+
+ tipo_materia_votacao.resultado = resultado.nome
+ tipo_materia_votacao.votacao_aberta = False
+ tipo_materia_votacao.save()
return self.form_valid(form)
else:
@@ -1726,13 +1763,18 @@ class VotacaoNominalView(SessaoPermissionMixin):
)
presentes = [p.parlamentar for p in presencas]
+ if self.ordem:
+ voto_parlamentar = VotoParlamentar.objects.filter(
+ votacao__ordem=self.kwargs['oid'])
+ elif self.expediente:
+ voto_parlamentar = VotoParlamentar.objects.filter(
+ votacao__expediente=self.kwargs['oid'])
+
for parlamentar in Parlamentar.objects.filter(ativo=True):
if parlamentar in presentes:
try:
- voto = VotoNominal.objects.get(
- parlamentar=parlamentar,
- sessao=self.object.pk,
- materia=materia)
+ voto = voto_parlamentar.get(
+ parlamentar=parlamentar)
except ObjectDoesNotExist:
yield [parlamentar, None]
else:
@@ -1744,31 +1786,47 @@ class VotacaoNominalView(SessaoPermissionMixin):
def get_success_url(self):
pk = self.kwargs['pk']
- return reverse('sapl.sessao:ordemdia_list',
- kwargs={'pk': pk})
+
+ if self.ordem:
+ return reverse('sapl.sessao:ordemdia_list',
+ kwargs={'pk': pk})
+ elif self.expediente:
+ return reverse('sapl.sessao:expedientemateria_list',
+ kwargs={'pk': pk})
-class VotacaoNominalEditView(SessaoPermissionMixin):
+class VotacaoNominalEditAbstract(SessaoPermissionMixin):
template_name = 'sessao/votacao/nominal_edit.html'
def get(self, request, *args, **kwargs):
context = {}
- materia_id = kwargs['oid']
- ordem_id = kwargs['mid']
+ if self.ordem:
+ ordem_id = kwargs['oid']
- try:
- votacao = RegistroVotacao.objects.get(
- materia_id=materia_id,
- ordem_id=ordem_id)
- except ObjectDoesNotExist:
- raise Http404()
- except MultipleObjectsReturned:
- votacao = RegistroVotacao.objects.filter(
- materia_id=materia_id,
- ordem_id=ordem_id).first()
+ try:
+ ordem = OrdemDia.objects.get(id=ordem_id)
+ votacao = RegistroVotacao.objects.get(
+ ordem_id=ordem_id)
+ except ObjectDoesNotExist:
+ raise Http404()
+
+ materia = ordem.materia
+ observacao = ordem.observacao
+
+ elif self.expediente:
+ expediente_id = kwargs['oid']
+
+ try:
+ expediente = ExpedienteMateria.objects.get(id=expediente_id)
+ votacao = RegistroVotacao.objects.get(
+ expediente_id=expediente_id)
+ except ObjectDoesNotExist:
+ raise Http404()
+
+ materia = expediente.materia
+ observacao = expediente.observacao
- ordem = OrdemDia.objects.get(id=ordem_id)
votos = VotoParlamentar.objects.filter(votacao_id=votacao.id)
list_votos = []
@@ -1778,9 +1836,9 @@ class VotacaoNominalEditView(SessaoPermissionMixin):
context.update({'votos': list_votos})
- materia = {'materia': ordem.materia,
+ materia = {'materia': materia,
'ementa': sub(
- ' ', ' ', strip_tags(ordem.observacao))}
+ ' ', ' ', strip_tags(observacao))}
context.update({'materia': materia})
votacao_existente = {'observacao': sub(
@@ -1797,197 +1855,39 @@ class VotacaoNominalEditView(SessaoPermissionMixin):
self.object = self.get_object()
form = VotacaoEditForm(request.POST)
- materia_id = kwargs['oid']
- ordem_id = kwargs['mid']
+ if self.ordem:
+ ordem_id = kwargs['oid']
- sessao = self.object
- ordem = ExpedienteMateria.objects.get(id=ordem_id)
- presentes = PresencaOrdemDia.objects.filter(
- sessao_plenaria_id=ordem.sessao_plenaria_id)
- for p in presentes:
try:
- voto = VotoNominal.objects.get(
- parlamentar=p.parlamentar,
- sessao=self.object.pk,
- materia=materia_id)
+ ordem = OrdemDia.objects.get(id=ordem_id)
except ObjectDoesNotExist:
- pass
- else:
- voto.delete()
-
- 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 = ''
- ordem.votacao_aberta = False
- ordem.save()
-
- registro.delete()
-
- try:
- votacao = VotoParlamentar.objects.filter(
- votacao_id=registro.id)
- for v in votacao:
- v.delete()
- except:
- pass
-
- 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('sapl.sessao:ordemdia_list',
- kwargs={'pk': pk})
-
-
-class VotacaoNominalExpedienteView(SessaoPermissionMixin):
- template_name = 'sessao/votacao/nominal.html'
-
- def get(self, request, *args, **kwargs):
- expediente_id = kwargs['mid']
- expediente = ExpedienteMateria.objects.get(id=expediente_id)
- total = SessaoPlenariaPresenca.objects.filter(
- sessao_plenaria_id=expediente.sessao_plenaria_id).count()
-
- materia = {'materia': expediente.materia,
- 'ementa': sub(
- ' ', ' ', strip_tags(expediente.observacao))}
- context = {'materia': materia, 'object': self.get_object(),
- 'parlamentares': self.get_parlamentares(expediente.materia),
- 'tipos': self.get_tipos_votacao(),
- 'total': total}
-
- return self.render_to_response(context)
-
- def post(self, request, *args, **kwargs):
- self.object = self.get_object()
-
- expediente_id = kwargs['mid']
-
- try:
- expediente = ExpedienteMateria.objects.get(id=expediente_id)
- except ObjectDoesNotExist:
- raise Http404()
-
- form = VotacaoNominalForm(request.POST)
-
- if 'cancelar-votacao' in request.POST:
- presentes = SessaoPlenariaPresenca.objects.filter(
- sessao_plenaria_id=expediente.sessao_plenaria_id)
-
- fechar_votacao_materia(presentes, expediente=expediente)
-
- 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 == 'Não'):
- votos_nao += 1
- elif(voto == 'Abstenção'):
- abstencoes += 1
- elif(voto == 'Não Votou'):
- nao_votou += 1
-
- # Caso todas as opções sejam 'Não votou', fecha a votação
- if nao_votou == len(request.POST.getlist('voto_parlamentar')):
- presentes = SessaoPlenariaPresenca.objects.filter(
- sessao_plenaria_id=expediente.sessao_plenaria_id)
-
- fechar_votacao_materia(presentes, expediente=expediente)
-
- return self.form_valid(form)
-
- votacao = RegistroVotacao.objects.filter(
- materia_id=materia_id,
- expediente=expediente)
+ raise Http404()
- # Remove todas as votação desta matéria, caso existam
- for v in votacao:
- v.delete()
+ elif self.expediente:
+ expediente_id = kwargs['oid']
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()
- voto_parlamentar.voto = voto
- 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()
+ expediente = ExpedienteMateria.objects.get(id=expediente_id)
+ except ObjectDoesNotExist:
+ raise Http404()
- return self.form_valid(form)
- else:
- return self.form_invalid(form)
+ if(int(request.POST['anular_votacao']) == 1):
+ if self.ordem:
+ registro = RegistroVotacao.objects.get(
+ ordem=ordem)
+ materia_votacao = registro.ordem
+ elif self.expediente:
+ registro = RegistroVotacao.objects.get(
+ expediente=expediente)
+ materia_votacao = registro.expediente
+
+ materia_votacao.resultado = ''
+ materia_votacao.votacao_aberta = False
+ materia_votacao.save()
- def get_parlamentares(self, materia):
- self.object = self.get_object()
- presencas = SessaoPlenariaPresenca.objects.filter(
- sessao_plenaria_id=self.object.id
- )
- presentes = [p.parlamentar for p in presencas]
+ registro.delete()
- for parlamentar in Parlamentar.objects.filter(ativo=True):
- if parlamentar in presentes:
- try:
- voto = VotoNominal.objects.get(
- parlamentar=parlamentar,
- sessao=self.object.pk,
- materia=materia)
- except ObjectDoesNotExist:
- yield [parlamentar, None]
- else:
- yield [parlamentar, voto.voto]
+ return self.form_valid(form)
def get_tipos_votacao(self):
for tipo in TipoResultadoVotacao.objects.all():
@@ -1995,108 +1895,42 @@ class VotacaoNominalExpedienteView(SessaoPermissionMixin):
def get_success_url(self):
pk = self.kwargs['pk']
- return reverse('sapl.sessao:expedientemateria_list',
- kwargs={'pk': pk})
-
-
-class VotacaoNominalExpedienteEditView(SessaoPermissionMixin):
- template_name = 'sessao/votacao/nominal_edit.html'
-
- def get(self, request, *args, **kwargs):
- context = {}
- 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)),
- 'resultado': votacao.tipo_resultado_votacao.nome,
- 'tipo_resultado':
- votacao.tipo_resultado_votacao_id}
- context.update({'votacao': votacao_existente,
- 'tipos': self.get_tipos_votacao()})
+ if self.ordem:
+ return reverse('sapl.sessao:ordemdia_list',
+ kwargs={'pk': pk})
+ elif self.expediente:
+ return reverse('sapl.sessao:expedientemateria_list',
+ kwargs={'pk': pk})
- return self.render_to_response(context)
- def post(self, request, *args, **kwargs):
- self.object = self.get_object()
- form = VotacaoEditForm(request.POST)
+class VotacaoNominalView(VotacaoNominalAbstract):
+ ordem = True
+ expediente = False
- materia_id = kwargs['oid']
- expediente_id = kwargs['mid']
- sessao = self.object
- expediente = ExpedienteMateria.objects.get(id=expediente_id)
- presentes = SessaoPlenariaPresenca.objects.filter(
- sessao_plenaria_id=expediente.sessao_plenaria_id)
- for p in presentes:
- try:
- voto = VotoNominal.objects.get(
- parlamentar=p.parlamentar,
- sessao=self.object.pk,
- materia=materia_id)
- except ObjectDoesNotExist:
- pass
- else:
- voto.delete()
+class VotacaoNominalExpedienteView(VotacaoNominalAbstract):
+ expediente = True
+ ordem = False
- 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
+class VotacaoNominalEditView(VotacaoNominalEditAbstract):
+ ordem = True
+ expediente = False
- registro.delete()
- return self.form_valid(form)
+class VotacaoNominalExpedienteEditView(VotacaoNominalEditAbstract):
+ expediente = True
+ ordem = False
- def get_tipos_votacao(self):
- for tipo in TipoResultadoVotacao.objects.all():
- yield tipo
-
- def get_success_url(self):
- pk = self.kwargs['pk']
- return reverse('sapl.sessao:expedientemateria_list',
- kwargs={'pk': pk})
class VotacaoNominalExpedienteDetailView(DetailView):
template_name = 'sessao/votacao/nominal_detail.html'
def get(self, request, *args, **kwargs):
context = {}
- materia_id = kwargs['oid']
- expediente_id = kwargs['mid']
+ materia_id = kwargs['mid']
+ expediente_id = kwargs['oid']
votacao = RegistroVotacao.objects.get(
materia_id=materia_id,
@@ -2158,7 +1992,7 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
else:
titulo = _("Não definida")
- expediente_id = kwargs['mid']
+ expediente_id = kwargs['oid']
expediente = ExpedienteMateria.objects.get(id=expediente_id)
qtde_presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.object.id).count()
@@ -2185,7 +2019,7 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
else:
titulo = _("Não definida")
- expediente_id = kwargs['mid']
+ expediente_id = kwargs['oid']
expediente = ExpedienteMateria.objects.get(id=expediente_id)
qtde_presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.object.id).count()
@@ -2204,8 +2038,8 @@ class VotacaoExpedienteView(SessaoPermissionMixin):
return self.form_valid(form)
if form.is_valid():
- materia_id = kwargs['oid']
- expediente_id = kwargs['mid']
+ materia_id = kwargs['mid']
+ expediente_id = kwargs['oid']
qtde_presentes = SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=self.object.id).count()
@@ -2288,8 +2122,8 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin):
else:
titulo = _("Não definida")
- materia_id = kwargs['oid']
- expediente_id = kwargs['mid']
+ materia_id = kwargs['mid']
+ expediente_id = kwargs['oid']
expediente = ExpedienteMateria.objects.get(id=expediente_id)
@@ -2320,8 +2154,8 @@ class VotacaoExpedienteEditView(SessaoPermissionMixin):
self.object = self.get_object()
form = VotacaoEditForm(request.POST)
- materia_id = kwargs['oid']
- expediente_id = kwargs['mid']
+ materia_id = kwargs['mid']
+ expediente_id = kwargs['oid']
if(int(request.POST['anular_votacao']) == 1):
try: