Browse Source

Bug fix

pull/1398/head
Eduardo Calil 8 years ago
parent
commit
dee3ce2ddc
  1. 2
      docker-compose.yml
  2. 20
      sapl/base/migrations/0008_auto_20170814_1409.py
  3. 6
      sapl/crud/base.py
  4. 19
      sapl/parlamentares/migrations/0005_auto_20170814_1615.py
  5. 4
      sapl/parlamentares/models.py
  6. 76
      sapl/parlamentares/views.py
  7. 32
      sapl/sessao/forms.py
  8. 20
      sapl/sessao/migrations/0011_auto_20170814_1409.py
  9. 23
      sapl/sessao/migrations/0012_auto_20170814_1615.py
  10. 8
      sapl/sessao/models.py
  11. 6
      sapl/sessao/views.py
  12. 2
      sapl/templates/base.html
  13. 6
      sapl/templates/parlamentares/public_composicaomesa_form.html
  14. 10
      sapl/templates/sistema.html

2
docker-compose.yml

@ -10,7 +10,7 @@ sapldb:
ports: ports:
- "5532:5432" - "5532:5432"
sapl: sapl:
image: interlegis/sapl:3.1.18-BETA image: interlegis/sapl:3.1.19-BETA
volumes: volumes:
- sapl_data:/var/interlegis/sapl/data - sapl_data:/var/interlegis/sapl/data
- sapl_media:/var/interlegis/sapl/media - sapl_media:/var/interlegis/sapl/media

20
sapl/base/migrations/0008_auto_20170814_1409.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2017-08-14 14:09
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0007_auto_20170808_0850'),
]
operations = [
migrations.AlterField(
model_name='appconfig',
name='sequencia_numeracao',
field=models.CharField(choices=[('A', 'Sequencial por ano'), ('L', 'Sequencial por legislatura'), ('U', 'Sequencial único')], default='A', max_length=1, verbose_name='Sequência de numeração'),
),
]

6
sapl/crud/base.py

@ -17,8 +17,8 @@ from django.http.response import Http404
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils.decorators import classonlymethod from django.utils.decorators import classonlymethod
from django.utils.encoding import force_text from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import string_concat from django.utils.translation import string_concat
from django.utils.translation import ugettext_lazy as _
from django.views.generic import (CreateView, DeleteView, DetailView, ListView, from django.views.generic import (CreateView, DeleteView, DetailView, ListView,
UpdateView) UpdateView)
from django.views.generic.base import ContextMixin from django.views.generic.base import ContextMixin
@ -30,6 +30,7 @@ from sapl.rules.map_rules import (RP_ADD, RP_CHANGE, RP_DELETE, RP_DETAIL,
from sapl.settings import BASE_DIR from sapl.settings import BASE_DIR
from sapl.utils import normalize from sapl.utils import normalize
logger = logging.getLogger(BASE_DIR.name) logger = logging.getLogger(BASE_DIR.name)
ACTION_LIST, ACTION_CREATE, ACTION_DETAIL, ACTION_UPDATE, ACTION_DELETE = \ ACTION_LIST, ACTION_CREATE, ACTION_DETAIL, ACTION_UPDATE, ACTION_DELETE = \
@ -955,7 +956,8 @@ class CrudAux(Crud):
Se o valor de subnav_template_name é nulo faz o filter subnav Se o valor de subnav_template_name é nulo faz o filter subnav
não abrir o padrão e nem um outro arquivo. não abrir o padrão e nem um outro arquivo.
""" """
context['subnav_template_name'] = self.subnav_template_name if 'subnav_template_name' not in context:
context['subnav_template_name'] = self.subnav_template_name
return context return context
@classonlymethod @classonlymethod

19
sapl/parlamentares/migrations/0005_auto_20170814_1615.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.11 on 2017-08-14 16:15
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('parlamentares', '0004_auto_20170711_1305'),
]
operations = [
migrations.AlterModelOptions(
name='frente',
options={'verbose_name': 'Frente Parlamentar', 'verbose_name_plural': 'Frentes Parlamentares'},
),
]

4
sapl/parlamentares/models.py

@ -554,8 +554,8 @@ class Frente(models.Model):
)) ))
class Meta: class Meta:
verbose_name = _('Frente') verbose_name = _('Frente Parlamentar')
verbose_name_plural = _('Frentes') verbose_name_plural = _('Frentes Parlamentares')
def get_parlamentares(self): def get_parlamentares(self):
return Parlamentar.objects.filter(ativo=True) return Parlamentar.objects.filter(ativo=True)

76
sapl/parlamentares/views.py

@ -1,7 +1,12 @@
import datetime
import json
from django.contrib import messages from django.contrib import messages
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist
from django.core.urlresolvers import reverse, reverse_lazy from django.core.urlresolvers import reverse, reverse_lazy
from django.db.models import F, Q from django.db.models import F, Q
from django.db.models.aggregates import Count
from django.http import JsonResponse from django.http import JsonResponse
from django.http.response import HttpResponseRedirect from django.http.response import HttpResponseRedirect
from django.templatetags.static import static from django.templatetags.static import static
@ -9,13 +14,17 @@ from django.utils.datastructures import MultiValueDictKeyError
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.decorators.clickjacking import xframe_options_exempt from django.views.decorators.clickjacking import xframe_options_exempt
from django.views.generic import FormView from django.views.generic import FormView
from django.views.generic.edit import UpdateView
from sapl.base.models import Autor
from sapl.comissoes.models import Participacao from sapl.comissoes.models import Participacao
from sapl.crud.base import (RP_CHANGE, RP_DETAIL, RP_LIST, Crud, CrudAux, from sapl.crud.base import (RP_CHANGE, RP_DETAIL, RP_LIST, Crud, CrudAux,
CrudBaseForListAndDetailExternalAppView, CrudBaseForListAndDetailExternalAppView,
MasterDetailCrud) MasterDetailCrud)
from sapl.materia.models import Autoria
from sapl.materia.models import Proposicao, Relatoria from sapl.materia.models import Proposicao, Relatoria
from sapl.parlamentares.apps import AppConfig from sapl.parlamentares.apps import AppConfig
from sapl.utils import parlamentares_ativos
from .forms import (FiliacaoForm, LegislaturaCreateForm, LegislaturaUpdateForm, from .forms import (FiliacaoForm, LegislaturaCreateForm, LegislaturaUpdateForm,
MandatoForm, ParlamentarCreateForm, ParlamentarForm, MandatoForm, ParlamentarCreateForm, ParlamentarForm,
@ -25,15 +34,6 @@ from .models import (CargoMesa, Coligacao, ComposicaoColigacao, ComposicaoMesa,
NivelInstrucao, Parlamentar, Partido, SessaoLegislativa, NivelInstrucao, Parlamentar, Partido, SessaoLegislativa,
SituacaoMilitar, TipoAfastamento, TipoDependente, Votante) SituacaoMilitar, TipoAfastamento, TipoDependente, Votante)
from sapl.base.models import Autor
from sapl.materia.models import Autoria
from sapl.utils import parlamentares_ativos
from django.contrib.contenttypes.models import ContentType
from django.db.models.aggregates import Count
import datetime
import json
CargoMesaCrud = CrudAux.build(CargoMesa, 'cargo_mesa') CargoMesaCrud = CrudAux.build(CargoMesa, 'cargo_mesa')
PartidoCrud = CrudAux.build(Partido, 'partidos') PartidoCrud = CrudAux.build(Partido, 'partidos')
@ -190,7 +190,8 @@ class ColigacaoCrud(CrudAux):
ordering = ('-numero_votos', 'nome') ordering = ('-numero_votos', 'nome')
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ColigacaoCrud.ListView, self).get_context_data(kwargs=kwargs) context = super(ColigacaoCrud.ListView, self).get_context_data(
kwargs=kwargs)
rows = context['rows'] rows = context['rows']
coluna_votos_recebidos = 2 coluna_votos_recebidos = 2
for row in rows: for row in rows:
@ -202,15 +203,25 @@ class ColigacaoCrud(CrudAux):
class DetailView(CrudAux.DetailView): class DetailView(CrudAux.DetailView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ColigacaoCrud.DetailView, self).get_context_data(kwargs=kwargs) context = super().get_context_data(kwargs=kwargs)
coligacao = context['coligacao'] coligacao = context['coligacao']
if not coligacao.numero_votos: if not coligacao.numero_votos:
coligacao.numero_votos = '0' coligacao.numero_votos = '0'
context['subnav_template_name'] = \
'parlamentares/subnav_coligacao.yaml'
return context return context
class BaseMixin(CrudAux.BaseMixin): class UpdateView(CrudAux.UpdateView):
subnav_template_name = 'parlamentares/subnav_coligacao.yaml'
def get_context_data(self, **kwargs):
context = super(UpdateView, self).get_context_data(kwargs=kwargs)
context['subnav_template_name'] = \
'parlamentares/subnav_coligacao.yaml'
return context
def json_date_convert(date): def json_date_convert(date):
@ -270,6 +281,7 @@ class FrenteCrud(CrudAux):
list_field_names = ['nome', 'data_criacao', 'parlamentares'] list_field_names = ['nome', 'data_criacao', 'parlamentares']
class CreateView(CrudAux.CreateView): class CreateView(CrudAux.CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
@ -280,6 +292,7 @@ class FrenteCrud(CrudAux):
return context return context
class UpdateView(CrudAux.UpdateView): class UpdateView(CrudAux.UpdateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
@ -318,7 +331,6 @@ class MandatoCrud(MasterDetailCrud):
return context return context
class CreateView(MasterDetailCrud.CreateView): class CreateView(MasterDetailCrud.CreateView):
form_class = MandatoForm form_class = MandatoForm
@ -363,6 +375,7 @@ class LegislaturaCrud(CrudAux):
form_class = LegislaturaUpdateForm form_class = LegislaturaUpdateForm
class DetailView(CrudAux.DetailView): class DetailView(CrudAux.DetailView):
def has_permission(self): def has_permission(self):
return True return True
@ -371,6 +384,7 @@ class LegislaturaCrud(CrudAux):
return super().get(request, *args, **kwargs) return super().get(request, *args, **kwargs)
class ListView(CrudAux.ListView): class ListView(CrudAux.ListView):
def has_permission(self): def has_permission(self):
return True return True
@ -596,7 +610,7 @@ class ParlamentarMateriasView(FormView):
'materia__tipo__sigla', 'materia__tipo__sigla',
'materia__tipo__descricao').annotate( 'materia__tipo__descricao').annotate(
total=Count('materia__tipo__pk')).order_by( total=Count('materia__tipo__pk')).order_by(
'-materia__ano', 'materia__tipo') '-materia__ano', 'materia__tipo')
autor_list = self.get_autoria(autoria) autor_list = self.get_autoria(autoria)
coautor_list = self.get_autoria(coautoria) coautor_list = self.get_autoria(coautoria)
@ -798,24 +812,24 @@ def remove_parlamentar_composicao(request):
'%s.delete_%s' % ( '%s.delete_%s' % (
AppConfig.label, ComposicaoMesa._meta.model_name)): AppConfig.label, ComposicaoMesa._meta.model_name)):
if 'composicao_mesa' in request.POST: if 'composicao_mesa' in request.POST:
try: try:
composicao = ComposicaoMesa.objects.get( composicao = ComposicaoMesa.objects.get(
id=request.POST['composicao_mesa']) id=request.POST['composicao_mesa'])
except ObjectDoesNotExist: except ObjectDoesNotExist:
return JsonResponse(
{'msg': (
'Composição da Mesa não pôde ser removida!', 0)})
composicao.delete()
return JsonResponse(
{'msg': (
'Parlamentar excluido com sucesso!', 1)})
else:
return JsonResponse( return JsonResponse(
{'msg': ( {'msg': (
'Selecione algum parlamentar para ser excluido!', 0)}) 'Composição da Mesa não pôde ser removida!', 0)})
composicao.delete()
return JsonResponse(
{'msg': (
'Parlamentar excluido com sucesso!', 1)})
else:
return JsonResponse(
{'msg': (
'Selecione algum parlamentar para ser excluido!', 0)})
def partido_parlamentar_sessao_legislativa(sessao, parlamentar): def partido_parlamentar_sessao_legislativa(sessao, parlamentar):

32
sapl/sessao/forms.py

@ -51,6 +51,38 @@ ORDENACAO_RESUMO = [('cont_mult', 'Conteúdo Multimídia'),
('oradores_exped', 'Oradores do Expediente'), ('oradores_exped', 'Oradores do Expediente'),
('oradores_expli', 'Oradores das Explicações Pessoais')] ('oradores_expli', 'Oradores das Explicações Pessoais')]
class SessaoPlenariaForm(ModelForm):
class Meta:
model = SessaoPlenaria
exclude = ['cod_andamento_sessao']
def clean(self):
super(SessaoPlenariaForm, self).clean()
instance = self.instance
num = self.cleaned_data['numero']
sl = self.cleaned_data['sessao_legislativa']
leg = self.cleaned_data['legislatura']
sessoes = SessaoPlenaria.objects.filter(numero=num,
sessao_legislativa=sl,
legislatura=leg).\
values_list('id', flat=True)
qtd_sessoes = len(sessoes)
error = ValidationError('Número de Sessão Plenária Existente')
if qtd_sessoes > 0:
if instance.pk: # update
if not instance.pk in sessoes or qtd_sessoes > 1:
raise error
else: # create
raise error
return self.cleaned_data
class BancadaForm(ModelForm): class BancadaForm(ModelForm):

20
sapl/sessao/migrations/0011_auto_20170814_1409.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2017-08-14 14:09
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sessao', '0010_auto_20170810_1033'),
]
operations = [
migrations.AlterField(
model_name='bloco',
name='partidos',
field=models.ManyToManyField(blank=True, to='parlamentares.Partido', verbose_name='Partidos'),
),
]

23
sapl/sessao/migrations/0012_auto_20170814_1615.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.11 on 2017-08-14 16:15
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('sessao', '0011_auto_20170814_1409'),
]
operations = [
migrations.AlterModelOptions(
name='bancada',
options={'ordering': ('-legislatura__numero',), 'verbose_name': 'Bancada Parlamentar', 'verbose_name_plural': 'Bancadas Parlamentares'},
),
migrations.AlterModelOptions(
name='bloco',
options={'verbose_name': 'Bloco Parlamentar', 'verbose_name_plural': 'Blocos Parlamentares'},
),
]

8
sapl/sessao/models.py

@ -59,8 +59,8 @@ class Bancada(models.Model):
)) ))
class Meta: class Meta:
verbose_name = _('Bancada') verbose_name = _('Bancada Parlamentar')
verbose_name_plural = _('Bancadas') verbose_name_plural = _('Bancadas Parlamentares')
ordering = ('-legislatura__numero', ) ordering = ('-legislatura__numero', )
def __str__(self): def __str__(self):
@ -507,8 +507,8 @@ class Bloco(models.Model):
)) ))
class Meta: class Meta:
verbose_name = _('Bloco') verbose_name = _('Bloco Parlamentar')
verbose_name_plural = _('Blocos') verbose_name_plural = _('Blocos Parlamentares')
def __str__(self): def __str__(self):
return self.nome return self.nome

6
sapl/sessao/views.py

@ -37,7 +37,7 @@ from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm
from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm, from .forms import (AdicionarVariasMateriasFilterSet, ExpedienteForm,
ListMateriaForm, MesaForm, OradorExpedienteForm, ListMateriaForm, MesaForm, OradorExpedienteForm,
OradorForm, PautaSessaoFilterSet, PresencaForm, OradorForm, PautaSessaoFilterSet, PresencaForm,
ResumoOrdenacaoForm, SessaoPlenariaFilterSet, ResumoOrdenacaoForm, SessaoPlenariaFilterSet, SessaoPlenariaForm,
VotacaoEditForm, VotacaoForm, VotacaoNominalForm) VotacaoEditForm, VotacaoForm, VotacaoNominalForm)
from .models import (Bancada, Bloco, CargoBancada, CargoMesa, from .models import (Bancada, Bloco, CargoBancada, CargoMesa,
ExpedienteMateria, ExpedienteSessao, IntegranteMesa, ExpedienteMateria, ExpedienteSessao, IntegranteMesa,
@ -542,11 +542,15 @@ class SessaoCrud(Crud):
class UpdateView(Crud.UpdateView): class UpdateView(Crud.UpdateView):
form_class = SessaoPlenariaForm
def get_initial(self): def get_initial(self):
return {'sessao_legislativa': self.object.sessao_legislativa} return {'sessao_legislativa': self.object.sessao_legislativa}
class CreateView(Crud.CreateView): class CreateView(Crud.CreateView):
form_class = SessaoPlenariaForm
@property @property
def cancel_url(self): def cancel_url(self):
return self.search_url return self.search_url

2
sapl/templates/base.html

@ -202,7 +202,7 @@
<br> CEP: <span class="postal-code">{{ cep }}</span> | Telefone: <span>{{ telefone }}</span> <br> CEP: <span class="postal-code">{{ cep }}</span> | Telefone: <span>{{ telefone }}</span>
<br> <br>
<a href="{{endereco_web}}" class="url">{% trans 'Site da Câmara' %}</a> | <a href="{{endereco_web}}" class="url">{% trans 'Site da Câmara' %}</a> |
<a href="{{email}}" class="email">{% trans 'Fale Conosco' %}</a> <a href="mailto:{{email}}" class="email">{% trans 'Fale Conosco' %}</a>
</small> </small>
</address> </address>
{% else %} {% else %}

6
sapl/templates/parlamentares/public_composicaomesa_form.html

@ -46,7 +46,7 @@
{% for p in composicao_mesa %} {% for p in composicao_mesa %}
<tr> <tr>
{% if p.parlamentar.fotografia %} {% if p.parlamentar.fotografia %}
<td><img class="img-responsive" height="84" width="84" src="{{ p.parlamentar.fotografia.url }}"></td> <td><img class="avatar-parlamentar" src="{{ p.parlamentar.fotografia.url }}"></td>
{% else %} {% else %}
<td></td> <td></td>
{% endif %} {% endif %}
@ -119,8 +119,8 @@ function altera_field(id_legislatura, id_sessao=null){
// Garante que a Sessão atual será a selecionada previamente e, no caso em que // Garante que a Sessão atual será a selecionada previamente e, no caso em que
// o campo modificado seja o de Legislatura, que a Sessão seja a última daquela // o campo modificado seja o de Legislatura, que a Sessão seja a última daquela
// legislatura // legislatura
$("#id_sessao_legislativa").val(data['sessao_selecionada']) $("#id_sessao_legislativa").val(data['sessao_selecionada'])
}); });
} }

10
sapl/templates/sistema.html

@ -39,12 +39,12 @@
</div> </div>
<hr /> <hr />
<h2>Módulo Bancadas</h2> <h2>Módulo Bancadas Parlamentares</h2>
<div class="row"> <div class="row">
<div class="col-md-6"><a href="{% url 'sapl.sessao:bancada_list' %}" class="btn btn-link">Bancadas</a></div> <div class="col-md-6"><a href="{% url 'sapl.sessao:bancada_list' %}" class="btn btn-link">Bancadas Parlamentares</a></div>
<div class="col-md-6"><a href="{% url 'sapl.sessao:cargobancada_list' %}" class="btn btn-link">Cargo de Bancada</a></div> <div class="col-md-6"><a href="{% url 'sapl.sessao:cargobancada_list' %}" class="btn btn-link">Cargo de Bancada Parlamentar</a></div>
<div class="col-md-6"><a href="{% url 'sapl.parlamentares:frente_list' %}" class="btn btn-link">Frente</a></div> <div class="col-md-6"><a href="{% url 'sapl.parlamentares:frente_list' %}" class="btn btn-link">Frente Parlamentar</a></div>
<div class="col-md-6"><a href="{% url 'sapl.sessao:bloco_list' %}" class="btn btn-link">Bloco</a></div> <div class="col-md-6"><a href="{% url 'sapl.sessao:bloco_list' %}" class="btn btn-link">Bloco Parlamentar</a></div>
</div> </div>
<hr /> <hr />

Loading…
Cancel
Save