Browse Source

Fix #2927 - Matérias apenas lidas, mas não votadas

pull/2953/head
Cesar Carvalho 6 years ago
parent
commit
68b1b96f8f
  1. 37
      sapl/sessao/forms.py
  2. 1
      sapl/sessao/models.py
  3. 7
      sapl/sessao/urls.py
  4. 51
      sapl/sessao/views.py
  5. 19
      sapl/templates/sessao/expedientemateria_form.html
  6. 1
      sapl/templates/sessao/layouts.yaml
  7. 3
      sapl/templates/sessao/votacao/leitura_form.html

37
sapl/sessao/forms.py

@ -358,6 +358,8 @@ class ExpedienteMateriaForm(ModelForm):
initial=datetime.strftime(timezone.now(), '%d/%m/%Y'), initial=datetime.strftime(timezone.now(), '%d/%m/%Y'),
widget=forms.TextInput(attrs={'readonly': 'readonly'})) widget=forms.TextInput(attrs={'readonly': 'readonly'}))
apenas_leitura = forms.BooleanField(label='Apenas Leitura', required=False)
class Meta: class Meta:
model = ExpedienteMateria model = ExpedienteMateria
fields = ['data_ordem', 'numero_ordem', 'tipo_materia', 'observacao', fields = ['data_ordem', 'numero_ordem', 'tipo_materia', 'observacao',
@ -493,7 +495,7 @@ class VotacaoForm(forms.Form):
resultado_votacao = forms.CharField(label='Resultado da Votação') resultado_votacao = forms.CharField(label='Resultado da Votação')
def clean(self): def clean(self):
cleaned_data = super(VotacaoForm, self).clean() cleaned_data = super().clean()
if not self.is_valid(): if not self.is_valid():
return cleaned_data return cleaned_data
@ -598,7 +600,7 @@ class AdicionarVariasMateriasFilterSet(MateriaLegislativaFilterSet):
] ]
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(MateriaLegislativaFilterSet, self).__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.filters['tipo'].label = 'Tipo de Matéria' self.filters['tipo'].label = 'Tipo de Matéria'
self.filters['autoria__autor__tipo'].label = 'Tipo de Autor' self.filters['autoria__autor__tipo'].label = 'Tipo de Autor'
@ -1023,3 +1025,34 @@ class JustificativaAusenciaForm(ModelForm):
justificativa.materias_do_expediente.clear() justificativa.materias_do_expediente.clear()
justificativa.materias_da_ordem_do_dia.clear() justificativa.materias_da_ordem_do_dia.clear()
return justificativa return justificativa
class ExpedienteLeitura(forms.Form):
materia = forms.CharField(
label='Matéria',
widget=forms.TextInput(attrs={'readonly': 'readonly'}))
materia__ementa = forms.CharField(
label='Ementa',
widget=forms.TextInput(attrs={'readonly': 'readonly'}))
observacao = forms.CharField(required=False, label='Observação', widget=forms.Textarea,)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
row1 = to_row(
[('materia', 12)])
row2 = to_row(
[('materia__ementa', 12)])
row3 = to_row(
[('observacao', 12)])
self.helper = SaplFormHelper()
self.helper.form_method = 'POST'
self.helper.layout = Layout(
Fieldset(_('Leitura de Matéria'),
row1, row2, row3,
form_actions(label='Salvar'))
)

1
sapl/sessao/models.py

@ -303,6 +303,7 @@ class AbstractOrdemDia(models.Model):
(1, 'simbolica', 'Simbólica'), (1, 'simbolica', 'Simbólica'),
(2, 'nominal', 'Nominal'), (2, 'nominal', 'Nominal'),
(3, 'secreta', 'Secreta'), (3, 'secreta', 'Secreta'),
(4, 'leitura', 'Leitura')
) )
sessao_plenaria = models.ForeignKey(SessaoPlenaria, sessao_plenaria = models.ForeignKey(SessaoPlenaria,

7
sapl/sessao/urls.py

@ -34,7 +34,8 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
sessao_legislativa_legislatura_ajax, sessao_legislativa_legislatura_ajax,
VotacaoEmBlocoOrdemDia, VotacaoEmBlocoExpediente, VotacaoEmBlocoOrdemDia, VotacaoEmBlocoExpediente,
VotacaoEmBlocoSimbolicaView, VotacaoEmBlocoNominalView, VotacaoEmBlocoSimbolicaView, VotacaoEmBlocoNominalView,
recuperar_nome_tipo_sessao) recuperar_nome_tipo_sessao,
ExpedienteLeituraView)
from .apps import AppConfig from .apps import AppConfig
@ -192,4 +193,8 @@ urlpatterns = [
url(r'^sessao/mudar-ordem-materia-sessao/', url(r'^sessao/mudar-ordem-materia-sessao/',
mudar_ordem_materia_sessao, mudar_ordem_materia_sessao,
name='mudar_ordem_materia_sessao'), name='mudar_ordem_materia_sessao'),
url(r'^sessao/(?P<pk>\d+)/matexp/leitura/(?P<oid>\d+)/(?P<mid>\d+)$',
ExpedienteLeituraView.as_view(), name='leituraexp'),
] ]

51
sapl/sessao/views.py

@ -34,7 +34,7 @@ from sapl.materia.views import MateriaLegislativaPesquisaView
from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato, from sapl.parlamentares.models import (Filiacao, Legislatura, Mandato,
Parlamentar, SessaoLegislativa) Parlamentar, SessaoLegislativa)
from sapl.sessao.apps import AppConfig from sapl.sessao.apps import AppConfig
from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm from sapl.sessao.forms import ExpedienteMateriaForm, OrdemDiaForm, ExpedienteLeitura
from sapl.utils import show_results_filter_set, remover_acentos, get_client_ip from sapl.utils import show_results_filter_set, remover_acentos, get_client_ip
from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm, from .forms import (AdicionarVariasMateriasFilterSet, BancadaForm,
@ -276,6 +276,13 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.pk, 'oid': obj.pk,
'mid': obj.materia_id}) 'mid': obj.materia_id})
elif obj.tipo_votacao == 4:
url = reverse('sapl.sessao:leituraexp',
kwargs={
'pk': obj.sessao_plenaria_id,
'oid': obj.pk,
'mid': obj.materia_id})
else: else:
if obj.tipo_votacao == 1: if obj.tipo_votacao == 1:
url = reverse('sapl.sessao:votacaosimbolica', url = reverse('sapl.sessao:votacaosimbolica',
@ -295,13 +302,22 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
'pk': obj.sessao_plenaria_id, 'pk': obj.sessao_plenaria_id,
'oid': obj.pk, 'oid': obj.pk,
'mid': obj.materia_id}) 'mid': obj.materia_id})
if has_permission: if has_permission:
if not obj.tipo_votacao == 4:
btn_registrar = ''' btn_registrar = '''
<form action="%s"> <form action="%s">
<input type="submit" class="btn btn-primary" <input type="submit" class="btn btn-primary"
value="Registrar Votação" /> value="Registrar Votação" />
</form>''' % ( </form>''' % (
url) url)
else:
btn_registrar = '''
<form action="%s">
<input type="submit" class="btn btn-primary"
value="Registrar Leitura" />
</form>''' % (
url)
resultado = btn_registrar resultado = btn_registrar
else: else:
@ -319,12 +335,20 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
}) + '?tipo_materia=ordem' }) + '?tipo_materia=ordem'
if has_permission: if has_permission:
if not obj.tipo_votacao == 4:
btn_abrir = ''' btn_abrir = '''
Matéria não votada<br /> Matéria não votada<br />
<a href="%s" <a href="%s"
class="btn btn-primary" class="btn btn-primary"
role="button">Abrir Votação</a>''' % (url) role="button">Abrir Votação</a>''' % (url)
resultado = btn_abrir resultado = btn_abrir
else:
btn_abrir = '''
Matéria não lida<br />
<a href="%s"
class="btn btn-primary"
role="button">Abrir para Leitura</a>''' % (url)
resultado = btn_abrir
else: else:
resultado = '''Não há resultado''' resultado = '''Não há resultado'''
@ -4319,3 +4343,28 @@ class RetiradaPautaCrud(MasterDetailCrud):
class DeleteView(MasterDetailCrud.DeleteView): class DeleteView(MasterDetailCrud.DeleteView):
pass pass
class ExpedienteLeituraView(FormView):
template_name = 'sessao/votacao/leitura_form.html'
form_class = ExpedienteLeitura
success_url = '/'
def get_initial(self):
initial = super().get_initial()
sessao = SessaoPlenaria.objects.get(id=self.kwargs['pk'])
expediente = ExpedienteMateria.objects.get(id=self.kwargs['oid'])
materia = MateriaLegislativa.objects.get(id=self.kwargs['mid'])
return {'materia': materia, 'materia__ementa':materia.ementa}
def form_valid(self, form):
expediente = ExpedienteMateria.objects.get(id=self.kwargs['oid'])
expediente.resultado = "Matéria lida"
expediente.votacao_aberta = False
expediente.save()
return super().form_valid(form)
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('sapl.sessao:expedientemateria_list',
kwargs={'pk': pk})

19
sapl/templates/sessao/expedientemateria_form.html

@ -32,11 +32,26 @@
}); });
} }
} }
var fields = ["#id_tipo_materia", "#id_numero_materia", "#id_ano_materia"] var fields = ["#id_tipo_materia", "#id_numero_materia", "#id_ano_materia"];
for (i = 0; i < fields.length; i++) { for (i = 0; i < fields.length; i++) {
$(fields[i]).change(recuperar_materia); $(fields[i]).change(recuperar_materia);
} }
recuperar_materia() recuperar_materia();
$(document).ready(function(){
$("select[name='tipo_votacao']").children("option[value='4']").remove();
$('#id_apenas_leitura').change(function(event){
$('#div_id_tipo_votacao').toggle();
if($('#id_apenas_leitura').prop('checked')){
$("select[name='tipo_votacao']").append(new Option('Leitura', '4'));
$("select[name='tipo_votacao']").val('4');
}
else{
$("select[name='tipo_votacao']").children("option[value='4']").remove();
$("select[name='tipo_votacao']").val('1');
}
})
});
</script> </script>
{% endblock %} {% endblock %}

1
sapl/templates/sessao/layouts.yaml

@ -59,6 +59,7 @@ ExpedienteMateria:
- data_ordem numero_ordem - data_ordem numero_ordem
- tipo_materia numero_materia ano_materia - tipo_materia numero_materia ano_materia
- tipo_votacao - tipo_votacao
- apenas_leitura
- observacao - observacao
OrdemDia: OrdemDia:

3
sapl/templates/sessao/votacao/leitura_form.html

@ -0,0 +1,3 @@
{% extends "crud/form.html" %}
{% load i18n %}
Loading…
Cancel
Save