Browse Source

FIX #1319 customizar painel (#1536)

* Adiciona teste de vie em SessaoPlenaria

* Adiciona teste de view no CasaLegislativa e TipoAutor

* Corrigi erros relacionados a PEP8

* Adiciona logotipo no painel

* Arruma o tamanho do logo

* Fix 1319

Adiciona opção para o usuário decidir se quer ou não mostrar o brasão no painel

* Corrige erros referente a PEP8

* Corrige validação da configuração do brasão da Casa Legislativa

Signed-off-by: João Pedro Sconetto <sconetto.joao@gmail.com>
Signed-off-by: Mariana Mendes <mare.s.mendes@gmail.com>

* Adiciona verificação de existência de casa legislativa

Signed-off-by: Mariana Mendes <mare.s.mendes@gmail.com>
pull/1543/head
Mariana Mendes 7 years ago
committed by Edward
parent
commit
46d4eadd9e
  1. 25
      sapl/base/forms.py
  2. 20
      sapl/base/migrations/0009_appconfig_mostrar_brasao_painel.py
  3. 4
      sapl/base/models.py
  4. 14
      sapl/painel/views.py
  5. 3
      sapl/templates/base/layouts.yaml
  6. 15
      sapl/templates/painel/index.html

25
sapl/base/forms.py

@ -623,7 +623,7 @@ class CasaLegislativaForm(ModelForm):
logotipo = self.cleaned_data.get('logotipo', False) logotipo = self.cleaned_data.get('logotipo', False)
if logotipo: if logotipo:
if logotipo.size > MAX_IMAGE_UPLOAD_SIZE: if logotipo.size > MAX_IMAGE_UPLOAD_SIZE:
raise ValidationError("Imagem muito grande. ( > 2mb )") raise ValidationError("Imagem muito grande. ( > 2MB )")
return logotipo return logotipo
@ -642,6 +642,12 @@ class LoginForm(AuthenticationForm):
class ConfiguracoesAppForm(ModelForm): class ConfiguracoesAppForm(ModelForm):
mostrar_brasao_painel = forms.BooleanField(
help_text=_('Sugerimos fortemente que faça o upload de imagens com '\
'o fundo transparente.'),
label=_('Mostrar brasão da Casa no painel?'),
required=False)
class Meta: class Meta:
model = AppConfig model = AppConfig
fields = ['documentos_administrativos', fields = ['documentos_administrativos',
@ -653,7 +659,8 @@ class ConfiguracoesAppForm(ModelForm):
'proposicao_incorporacao_obrigatoria', 'proposicao_incorporacao_obrigatoria',
'cronometro_discurso', 'cronometro_discurso',
'cronometro_aparte', 'cronometro_aparte',
'cronometro_ordem'] 'cronometro_ordem',
'mostrar_brasao_painel']
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(ConfiguracoesAppForm, self).__init__(*args, **kwargs) super(ConfiguracoesAppForm, self).__init__(*args, **kwargs)
@ -661,6 +668,20 @@ class ConfiguracoesAppForm(ModelForm):
self.fields['cronometro_aparte'].widget.attrs['class'] = 'cronometro' self.fields['cronometro_aparte'].widget.attrs['class'] = 'cronometro'
self.fields['cronometro_ordem'].widget.attrs['class'] = 'cronometro' self.fields['cronometro_ordem'].widget.attrs['class'] = 'cronometro'
def clean_mostrar_brasao_painel(self):
mostrar_brasao_painel = self.cleaned_data.get('mostrar_brasao_painel',
False)
casa = CasaLegislativa.objects.first()
if not casa:
raise ValidationError("Não há casa legislativa relacionada")
if (not bool(casa.logotipo) and mostrar_brasao_painel):
raise ValidationError("Não há logitipo configurado para esta "
"Casa legislativa.")
return mostrar_brasao_painel
class RecuperarSenhaForm(PasswordResetForm): class RecuperarSenhaForm(PasswordResetForm):

20
sapl/base/migrations/0009_appconfig_mostrar_brasao_painel.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2017-10-16 20:06
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0008_auto_20170814_1409'),
]
operations = [
migrations.AddField(
model_name='appconfig',
name='mostrar_brasao_painel',
field=models.BooleanField(default=False, verbose_name='Mostrar brasão da Casa no painel?'),
),
]

4
sapl/base/models.py

@ -157,6 +157,10 @@ class AppConfig(models.Model):
blank=True, blank=True,
null=True) null=True)
mostrar_brasao_painel = models.BooleanField(
default=False,
verbose_name=_('Mostrar brasão da Casa no painel?'))
class Meta: class Meta:
verbose_name = _('Configurações da Aplicação') verbose_name = _('Configurações da Aplicação')
verbose_name_plural = _('Configurações da Aplicação') verbose_name_plural = _('Configurações da Aplicação')

14
sapl/painel/views.py

@ -10,6 +10,8 @@ from django.http.response import Http404, HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from sapl.base.models import AppConfig as ConfiguracoesAplicacao
from sapl.base.models import CasaLegislativa
from sapl.crud.base import Crud from sapl.crud.base import Crud
from sapl.painel.apps import AppConfig from sapl.painel.apps import AppConfig
from sapl.parlamentares.models import Votante from sapl.parlamentares.models import Votante
@ -397,6 +399,15 @@ def get_votos(response, materia):
def get_dados_painel(request, pk): def get_dados_painel(request, pk):
sessao = SessaoPlenaria.objects.get(id=pk) sessao = SessaoPlenaria.objects.get(id=pk)
casa = CasaLegislativa.objects.first()
app_config = ConfiguracoesAplicacao.objects.first()
brasao = None
if casa and app_config and (bool(casa.logotipo)):
brasao = casa.logotipo.url \
if app_config.mostrar_brasao_painel else None
response = { response = {
'sessao_plenaria': str(sessao), 'sessao_plenaria': str(sessao),
'sessao_plenaria_data': sessao.data_inicio.strftime('%d/%m/%Y'), 'sessao_plenaria_data': sessao.data_inicio.strftime('%d/%m/%Y'),
@ -404,7 +415,8 @@ def get_dados_painel(request, pk):
'cronometro_aparte': get_cronometro_status(request, 'aparte'), 'cronometro_aparte': get_cronometro_status(request, 'aparte'),
'cronometro_discurso': get_cronometro_status(request, 'discurso'), 'cronometro_discurso': get_cronometro_status(request, 'discurso'),
'cronometro_ordem': get_cronometro_status(request, 'ordem'), 'cronometro_ordem': get_cronometro_status(request, 'ordem'),
'status_painel': sessao.painel_aberto 'status_painel': sessao.painel_aberto,
'brasao': brasao
} }
ordem_dia = get_materia_aberta(pk) ordem_dia = get_materia_aberta(pk)

3
sapl/templates/base/layouts.yaml

@ -23,6 +23,9 @@ AppConfig:
{% trans 'Cronômetros do Painel' %}: {% trans 'Cronômetros do Painel' %}:
- cronometro_discurso cronometro_aparte cronometro_ordem - cronometro_discurso cronometro_aparte cronometro_ordem
{% trans 'Configurações do Painel' %}:
- mostrar_brasao_painel
TipoAutor: TipoAutor:
{% trans 'Tipo Autor' %}: {% trans 'Tipo Autor' %}:
- content_type:4 descricao - content_type:4 descricao

15
sapl/templates/painel/index.html

@ -27,10 +27,16 @@
font-family: Verdana; font-family: Verdana;
} }
} }
.center {
margin: auto;
width: 15%;
}
</style> </style>
</head> </head>
<body> <body>
<audio type="hidden" id="audio" src="{% static 'audio/ring.mp3' %}"> </audio> <audio type="hidden" id="audio" src="{% static 'audio/ring.mp3' %}"></audio>
<h1 id="title"></h1> <h1 id="title"></h1>
<input id="json_url" type="hidden" value="{% url 'sapl.painel:dados_painel' sessao_id %}"> <input id="json_url" type="hidden" value="{% url 'sapl.painel:dados_painel' sessao_id %}">
@ -45,6 +51,10 @@
</tr> </tr>
</table> </table>
<div class="center">
<img src="" id="logo-painel" alt="" width="100%"/>
</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>
<h1><font color="white"><p align="center"><span id="relogio"></span></p></font></h1> <h1><font color="white"><p align="center"><span id="relogio"></span></p></font></h1>
@ -168,6 +178,9 @@
$("#message").text(""); $("#message").text("");
} }
if (data["brasao"] != null)
$("#logo-painel").attr("src", data["brasao"]);
var presentes = $("#parlamentares"); var presentes = $("#parlamentares");
var votacao = $("#votacao"); var votacao = $("#votacao");
$("#votacao").text(''); $("#votacao").text('');

Loading…
Cancel
Save