Browse Source

Merge branch '3.1.x' of https://github.com/interlegis/sapl into 1968-resumo-sessao

pull/2017/head
Mariana Mendes 8 years ago
parent
commit
a1f6eec882
  1. 2
      docker-compose.yml
  2. 4
      gunicorn_start.sh
  3. 8
      sapl/base/forms.py
  4. 1
      sapl/base/views.py
  5. 4
      sapl/materia/forms.py
  6. 12
      sapl/norma/forms.py
  7. 5
      sapl/sessao/forms.py
  8. 30
      sapl/sessao/views.py
  9. 21
      sapl/templates/painel/index.html
  10. 2
      setup.py

2
docker-compose.yml

@ -11,7 +11,7 @@ sapldb:
ports: ports:
- "5432:5432" - "5432:5432"
sapl: sapl:
image: interlegis/sapl:3.1.83 image: interlegis/sapl:3.1.87
restart: always restart: always
environment: environment:
ADMIN_PASSWORD: interlegis ADMIN_PASSWORD: interlegis

4
gunicorn_start.sh

@ -16,8 +16,9 @@ DJANGODIR=/var/interlegis/sapl/ # Django project directory (*
SOCKFILE=/var/interlegis/sapl/run/gunicorn.sock # we will communicate using this unix socket (*) SOCKFILE=/var/interlegis/sapl/run/gunicorn.sock # we will communicate using this unix socket (*)
USER=`whoami` # the user to run as (*) USER=`whoami` # the user to run as (*)
GROUP=`whoami` # the group to run as (*) GROUP=`whoami` # the group to run as (*)
NUM_WORKERS=9 # how many worker processes should Gunicorn spawn (*) NUM_WORKERS=4 # how many worker processes should Gunicorn spawn (*)
# NUM_WORKERS = 2 * CPUS + 1 # NUM_WORKERS = 2 * CPUS + 1
MAX_REQUESTS=100 # number of requests before restarting worker
DJANGO_SETTINGS_MODULE=sapl.settings # which settings file should Django use (*) DJANGO_SETTINGS_MODULE=sapl.settings # which settings file should Django use (*)
DJANGO_WSGI_MODULE=sapl.wsgi # WSGI module name (*) DJANGO_WSGI_MODULE=sapl.wsgi # WSGI module name (*)
@ -41,6 +42,7 @@ test -d $RUNDIR || mkdir -p $RUNDIR
exec gunicorn ${DJANGO_WSGI_MODULE}:application \ exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \ --name $NAME \
--workers $NUM_WORKERS \ --workers $NUM_WORKERS \
--max-requests $MAX_REQUESTS \
--user $USER \ --user $USER \
--access-logfile - \ --access-logfile - \
--error-logfile - \ --error-logfile - \

8
sapl/base/forms.py

@ -528,7 +528,8 @@ class RelatorioAtasFilterSet(django_filters.FilterSet):
@property @property
def qs(self): def qs(self):
parent = super(RelatorioAtasFilterSet, self).qs parent = super(RelatorioAtasFilterSet, self).qs
return parent.distinct().prefetch_related('tipo').order_by('-ano', 'tipo', 'numero') return parent.distinct().prefetch_related('tipo').exclude(
upload_ata='').order_by('-legislatura', 'tipo', 'numero')
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(RelatorioAtasFilterSet, self).__init__( super(RelatorioAtasFilterSet, self).__init__(
@ -729,6 +730,11 @@ class RelatorioMateriasPorAutorFilterSet(django_filters.FilterSet):
autoria__autor = django_filters.CharFilter(widget=forms.HiddenInput()) autoria__autor = django_filters.CharFilter(widget=forms.HiddenInput())
@property
def qs(self):
parent = super(RelatorioMateriasPorAutorFilterSet, self).qs
return parent.distinct().order_by('-ano', '-numero')
class Meta: class Meta:
model = MateriaLegislativa model = MateriaLegislativa
fields = ['tipo', 'data_apresentacao'] fields = ['tipo', 'data_apresentacao']

1
sapl/base/views.py

@ -247,7 +247,6 @@ class RelatorioAtasView(FilterView):
if not self.filterset.form.is_valid(): if not self.filterset.form.is_valid():
return context return context
context['object_list'] = context['object_list'].exclude(upload_ata='')
qr = self.request.GET.copy() qr = self.request.GET.copy()
context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else '' context['filter_url'] = ('&' + qr.urlencode()) if len(qr) > 0 else ''

4
sapl/materia/forms.py

@ -182,9 +182,9 @@ class MateriaLegislativaForm(ModelForm):
if self.instance and self.instance.pk: if self.instance and self.instance.pk:
self.fields['tipo_autor'] = forms.CharField(required=False, self.fields['tipo_autor'] = forms.CharField(required=False,
widget=forms.TextInput(attrs={'disabled': 'disabled'})) widget=forms.HiddenInput())
self.fields['autor'] = forms.CharField(required=False, self.fields['autor'] = forms.CharField(required=False,
widget=forms.TextInput(attrs={'disabled': 'disabled'})) widget=forms.HiddenInput())
def clean(self): def clean(self):
super(MateriaLegislativaForm, self).clean() super(MateriaLegislativaForm, self).clean()

12
sapl/norma/forms.py

@ -125,11 +125,13 @@ class NormaJuridicaForm(ModelForm):
if not self.is_valid(): if not self.is_valid():
return cleaned_data return cleaned_data
norma = NormaJuridica.objects.filter(ano=cleaned_data['ano'], if not self.instance:
numero=cleaned_data['numero'], norma = NormaJuridica.objects.filter(ano=cleaned_data['ano'],
tipo=cleaned_data['tipo']).exists() numero=cleaned_data['numero'],
if norma: tipo=cleaned_data['tipo']).exists()
raise ValidationError("Já existe uma norma de mesmo Tipo, Ano e Número no sistema") if norma:
raise ValidationError("Já existe uma norma de mesmo Tipo, Ano "
"e Número no sistema")
if (cleaned_data['tipo_materia'] and if (cleaned_data['tipo_materia'] and
cleaned_data['numero_materia'] and cleaned_data['numero_materia'] and
cleaned_data['ano_materia']): cleaned_data['ano_materia']):

5
sapl/sessao/forms.py

@ -465,7 +465,6 @@ class OradorExpedienteForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(OradorExpedienteForm, self).__init__(*args, **kwargs) super(OradorExpedienteForm, self).__init__(*args, **kwargs)
legislatura_vigente = SessaoPlenaria.objects.get(pk=kwargs['initial']['id_sessao']).legislatura legislatura_vigente = SessaoPlenaria.objects.get(pk=kwargs['initial']['id_sessao']).legislatura
if legislatura_vigente: if legislatura_vigente:
@ -482,11 +481,13 @@ class OradorExpedienteForm(ModelForm):
return self.cleaned_data return self.cleaned_data
sessao_id = self.initial['id_sessao'] sessao_id = self.initial['id_sessao']
numero = self.initial.get('numero') # Retorna None se inexistente
ordem = OradorExpediente.objects.filter( ordem = OradorExpediente.objects.filter(
sessao_plenaria_id=sessao_id, sessao_plenaria_id=sessao_id,
numero_ordem=cleaned_data['numero_ordem'] numero_ordem=cleaned_data['numero_ordem']
).exists() ).exists()
if ordem:
if ordem and (cleaned_data['numero_ordem'] != numero):
raise ValidationError(_( raise ValidationError(_(
'Já existe orador nesta posição da ordem de pronunciamento')) 'Já existe orador nesta posição da ordem de pronunciamento'))

30
sapl/sessao/views.py

@ -332,6 +332,7 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
resultado_descricao, resultado_descricao,
resultado_observacao)) resultado_observacao))
else: else:
if obj.tipo_votacao == 2: if obj.tipo_votacao == 2:
if is_expediente: if is_expediente:
url = reverse( url = reverse(
@ -354,12 +355,8 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
(url, (url,
resultado_descricao, resultado_descricao,
resultado_observacao)) resultado_observacao))
else:
resultado = ('%s<br/>%s' %
(resultado_descricao,
resultado_observacao))
if obj.tipo_votacao == 1: elif obj.tipo_votacao == 1:
if is_expediente: if is_expediente:
url = reverse( url = reverse(
'sapl.sessao:votacao_simbolica_transparencia', 'sapl.sessao:votacao_simbolica_transparencia',
@ -378,9 +375,9 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
'?&materia=ordem' '?&materia=ordem'
resultado = ('<a href="%s">%s<br/>%s</a>' % resultado = ('<a href="%s">%s<br/>%s</a>' %
(url, (url,
resultado_descricao, resultado_descricao,
resultado_observacao)) resultado_observacao))
else: else:
resultado = ('%s<br/>%s' % resultado = ('%s<br/>%s' %
(resultado_descricao, (resultado_descricao,
@ -388,7 +385,7 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
context['rows'][i][3] = (resultado, None) context['rows'][i][3] = (resultado, None)
return context return context
def get_presencas_generic(model, sessao, legislatura): def get_presencas_generic(model, sessao, legislatura):
presencas = model.objects.filter( presencas = model.objects.filter(
sessao_plenaria=sessao) sessao_plenaria=sessao)
@ -421,15 +418,14 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
form_class = OrdemDiaForm form_class = OrdemDiaForm
def get_initial(self): def get_initial(self):
initial = super(CreateView, self).get_inital() self.initial['data_ordem'] = SessaoPlenaria.objects.get(
initial['data_ordem'] = SessaoPlenaria.objects.get(
pk=self.kwargs['pk']).data_inicio.strftime('%d/%m/%Y') pk=self.kwargs['pk']).data_inicio.strftime('%d/%m/%Y')
max_numero_ordem = OrdemDia.objects.filter( max_numero_ordem = OrdemDia.objects.filter(
sessao_plenaria=self.kwargs['pk']).aggregate( sessao_plenaria=self.kwargs['pk']).aggregate(
Max('numero_ordem'))['numero_ordem__max'] Max('numero_ordem'))['numero_ordem__max']
initial['numero_ordem'] = ( self.initial['numero_ordem'] = (
max_numero_ordem if max_numero_ordem else 0) + 1 max_numero_ordem if max_numero_ordem else 0) + 1
return initial return self.initial
def get_success_url(self): def get_success_url(self):
return reverse('sapl.sessao:ordemdia_list', return reverse('sapl.sessao:ordemdia_list',
@ -551,6 +547,14 @@ class OradorExpedienteCrud(OradorCrud):
kwargs={'pk': self.kwargs['pk']}) kwargs={'pk': self.kwargs['pk']})
class UpdateView(MasterDetailCrud.UpdateView):
form_class = OradorExpedienteForm
def get_initial(self):
return {'id_sessao': self.object.sessao_plenaria.id,
'numero': self.object.numero_ordem}
class OradorCrud(OradorCrud): class OradorCrud(OradorCrud):
model = Orador model = Orador

21
sapl/templates/painel/index.html

@ -57,7 +57,7 @@
</table> </table>
<div class="center"> <div class="center">
<img src="" id="logo-painel" alt="" width="100%"/> <img src="" id="logo-painel" alt="" width="50%"/>
</div> </div>
<h2><font color="red"><p align="center"><span id="message"></span></p></font></h2> <h2><font color="red"><p align="center"><span id="message"></span></p></font></h2>
@ -290,9 +290,15 @@
$('#oradores_list').append( $('#oradores_list').append(
'<center>A listagem de oradores só aparecerá quando o painel estiver aberto.</center>') '<center>A listagem de oradores só aparecerá quando o painel estiver aberto.</center>')
oradores.append('</span>'); oradores.append('</span>');
votacao.append('<span id="votacao">');
$("#votacao").append('<center>A votação só aparecerá quando o painel estiver aberto</center>');
votacao.append('</span>');
} }
if (data['materia_legislativa_texto']){ if (data['materia_legislativa_texto'] && data["status_painel"] == true){
var votacao = $("#votacao") var votacao = $("#votacao")
@ -366,16 +372,21 @@
} }
if (data['materia_legislativa_texto']){ if (data['materia_legislativa_texto']){
$("#materia_legislativa_texto").text(data["materia_legislativa_texto"]); if (data["status_painel"] == true){
$("#materia_legislativa_texto").text(data["materia_legislativa_texto"]);
}
else{
$("#materia_legislativa_texto").text('A Matéria em votação só aparecerá quando o painel estiver aberto');
}
} }
else{ else{
$("#materia_legislativa_texto").text('Não há nehuma matéria votada ou para votação'); $("#materia_legislativa_texto").text('Não há nehuma matéria votada ou para votação');
} }
if (data['observacao_materia']){ if (data['observacao_materia'] && data["status_painel"] == true){
var texto = data['observacao_materia']; var texto = data['observacao_materia'];
if(texto.length > 151) { if(texto.length > 151) {
$("#observacao_materia").text(texto.substr(0, 145).concat('(...)')); $("#observacao_materia").text(texto.substr(0, 145).concat('(...)'));
} }
else{ else{
$("#observacao_materia").text(texto); $("#observacao_materia").text(texto);

2
setup.py

@ -49,7 +49,7 @@ install_requires = [
] ]
setup( setup(
name='interlegis-sapl', name='interlegis-sapl',
version='3.1.83', version='3.1.87',
packages=find_packages(), packages=find_packages(),
include_package_data=True, include_package_data=True,
license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007', license='GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007',

Loading…
Cancel
Save