Browse Source

Merge branch '3.1.x'

pull/1828/merge
Edward Ribeiro 8 years ago
parent
commit
dd95322b01
  1. 2
      docker-compose.yml
  2. 4
      gunicorn_start.sh
  3. 20
      sapl/audiencia/views.py
  4. 8
      sapl/base/forms.py
  5. 1
      sapl/base/views.py
  6. 21
      sapl/materia/forms.py
  7. 46
      sapl/materia/views.py
  8. 15
      sapl/norma/forms.py
  9. 22
      sapl/norma/views.py
  10. 2
      sapl/parlamentares/forms.py
  11. 11
      sapl/protocoloadm/views.py
  12. 13
      sapl/sessao/forms.py
  13. 49
      sapl/sessao/views.py
  14. 2
      sapl/templates/materia/layouts.yaml
  15. 38
      sapl/templates/materia/materialegislativa_form.html
  16. 17
      sapl/templates/painel/index.html
  17. 10
      sapl/templates/protocoloadm/comprovante.html
  18. 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.81 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 - \

20
sapl/audiencia/views.py

@ -1,15 +1,10 @@
from django.shortcuts import render
from django.http import HttpResponse from django.http import HttpResponse
from django.core.urlresolvers import reverse
from django.db.models import F
from django.views.decorators.clickjacking import xframe_options_exempt from django.views.decorators.clickjacking import xframe_options_exempt
from django.views.generic import ListView from django.views.generic import UpdateView
from sapl.comissoes.forms import ParticipacaoCreateForm, ParticipacaoEditForm from sapl.crud.base import RP_DETAIL, RP_LIST, Crud
from sapl.crud.base import RP_DETAIL, RP_LIST, Crud, CrudAux, MasterDetailCrud
from sapl.materia.models import MateriaLegislativa
from .forms import AudienciaForm from .forms import AudienciaForm
from .models import (AudienciaPublica, TipoAudienciaPublica) from .models import AudienciaPublica
def index(request): def index(request):
return HttpResponse("Audiência Pública") return HttpResponse("Audiência Pública")
@ -36,10 +31,11 @@ class AudienciaCrud(Crud):
form_class = AudienciaForm form_class = AudienciaForm
def get_initial(self): def get_initial(self):
self.initial['tipo_materia'] = self.object.materia.tipo.id initial = super(UpdateView, self).get_initial()
self.initial['numero_materia'] = self.object.materia.numero initial['tipo_materia'] = self.object.materia.tipo.id
self.initial['ano_materia'] = self.object.materia.ano initial['numero_materia'] = self.object.materia.numero
return self.initial initial['ano_materia'] = self.object.materia.ano
return initial
class DeleteView(Crud.DeleteView): class DeleteView(Crud.DeleteView):
pass pass

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('-data_inicio', '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 ''

21
sapl/materia/forms.py

@ -162,6 +162,11 @@ class MateriaSimplificadaForm(ModelForm):
class MateriaLegislativaForm(ModelForm): class MateriaLegislativaForm(ModelForm):
tipo_autor = ModelChoiceField(label=_('Tipo Autor'),
required=False,
queryset=TipoAutor.objects.all(),
empty_label=_('------'), )
autor = forms.ModelChoiceField(required=False, autor = forms.ModelChoiceField(required=False,
empty_label='------', empty_label='------',
queryset=Autor.objects.all() queryset=Autor.objects.all()
@ -172,6 +177,15 @@ class MateriaLegislativaForm(ModelForm):
exclude = ['texto_articulado', 'autores', 'proposicao', exclude = ['texto_articulado', 'autores', 'proposicao',
'anexadas', 'data_ultima_atualizacao'] 'anexadas', 'data_ultima_atualizacao']
def __init__(self, *args, **kwargs):
super(MateriaLegislativaForm, self).__init__(*args, **kwargs)
if self.instance and self.instance.pk:
self.fields['tipo_autor'] = forms.CharField(required=False,
widget=forms.HiddenInput())
self.fields['autor'] = forms.CharField(required=False,
widget=forms.HiddenInput())
def clean(self): def clean(self):
super(MateriaLegislativaForm, self).clean() super(MateriaLegislativaForm, self).clean()
@ -219,12 +233,17 @@ class MateriaLegislativaForm(ModelForm):
return cleaned_data return cleaned_data
def save(self, commit=False): def save(self, commit=False):
if not self.instance.pk:
primeiro_autor = True
else:
primeiro_autor = False
materia = super(MateriaLegislativaForm, self).save(commit) materia = super(MateriaLegislativaForm, self).save(commit)
materia.save() materia.save()
if self.cleaned_data['autor']: if self.cleaned_data['autor']:
autoria = Autoria() autoria = Autoria()
autoria.primeiro_autor = True autoria.primeiro_autor = primeiro_autor
autoria.materia = materia autoria.materia = materia
autoria.autor = self.cleaned_data['autor'] autoria.autor = self.cleaned_data['autor']
autoria.save() autoria.save()

46
sapl/materia/views.py

@ -17,7 +17,7 @@ from django.shortcuts import get_object_or_404, redirect
from django.template import RequestContext, loader from django.template import RequestContext, loader
from django.utils import formats, timezone from django.utils import formats, timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, ListView, TemplateView, UpdateView from django.views.generic import FormView, ListView, TemplateView, CreateView, UpdateView
from django.views.generic.base import RedirectView from django.views.generic.base import RedirectView
from django.views.generic.edit import FormView from django.views.generic.edit import FormView
from django_filters.views import FilterView from django_filters.views import FilterView
@ -1013,18 +1013,19 @@ class TramitacaoCrud(MasterDetailCrud):
'pk': self.kwargs['pk']}) 'pk': self.kwargs['pk']})
def get_initial(self): def get_initial(self):
initial = super(CreateView, self).get_initial()
local = MateriaLegislativa.objects.get( local = MateriaLegislativa.objects.get(
pk=self.kwargs['pk']).tramitacao_set.order_by( pk=self.kwargs['pk']).tramitacao_set.order_by(
'-data_tramitacao', '-data_tramitacao',
'-id').first() '-id').first()
if local: if local:
self.initial['unidade_tramitacao_local' initial['unidade_tramitacao_local'
] = local.unidade_tramitacao_destino.pk ] = local.unidade_tramitacao_destino.pk
else: else:
self.initial['unidade_tramitacao_local'] = '' initial['unidade_tramitacao_local'] = ''
self.initial['data_tramitacao'] = timezone.now().date() initial['data_tramitacao'] = timezone.now().date()
return self.initial return initial
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
@ -1154,9 +1155,10 @@ class DocumentoAcessorioCrud(MasterDetailCrud):
super(MasterDetailCrud.CreateView, self).__init__(**kwargs) super(MasterDetailCrud.CreateView, self).__init__(**kwargs)
def get_initial(self): def get_initial(self):
self.initial['data'] = timezone.now().date() initial = super(CreateView, self).get_initial()
initial['data'] = timezone.now().date()
return self.initial return initial
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super( context = super(
@ -1283,10 +1285,11 @@ class LegislacaoCitadaCrud(MasterDetailCrud):
form_class = LegislacaoCitadaForm form_class = LegislacaoCitadaForm
def get_initial(self): def get_initial(self):
self.initial['tipo'] = self.object.norma.tipo.id initial = super(UpdateView, self).get_initial()
self.initial['numero'] = self.object.norma.numero initial['tipo'] = self.object.norma.tipo.id
self.initial['ano'] = self.object.norma.ano initial['numero'] = self.object.norma.numero
return self.initial initial['ano'] = self.object.norma.ano
return initial
class DetailView(MasterDetailCrud.DetailView): class DetailView(MasterDetailCrud.DetailView):
@ -1319,10 +1322,11 @@ class AnexadaCrud(MasterDetailCrud):
form_class = AnexadaForm form_class = AnexadaForm
def get_initial(self): def get_initial(self):
self.initial['tipo'] = self.object.materia_anexada.tipo.id initial = super(UpdateView, self).get_initial()
self.initial['numero'] = self.object.materia_anexada.numero initial['tipo'] = self.object.materia_anexada.tipo.id
self.initial['ano'] = self.object.materia_anexada.ano initial['numero'] = self.object.materia_anexada.numero
return self.initial initial['ano'] = self.object.materia_anexada.ano
return initial
class DetailView(MasterDetailCrud.DetailView): class DetailView(MasterDetailCrud.DetailView):
@ -1344,16 +1348,18 @@ class MateriaAssuntoCrud(MasterDetailCrud):
form_class = MateriaAssuntoForm form_class = MateriaAssuntoForm
def get_initial(self): def get_initial(self):
self.initial['materia'] = self.kwargs['pk'] initial = super(CreateView, self).get_initial()
return self.initial initial['materia'] = self.kwargs['pk']
return initial
class UpdateView(MasterDetailCrud.UpdateView): class UpdateView(MasterDetailCrud.UpdateView):
form_class = MateriaAssuntoForm form_class = MateriaAssuntoForm
def get_initial(self): def get_initial(self):
self.initial['materia'] = self.get_object().materia initial = super(UpdateView, self).get_initial()
self.initial['assunto'] = self.get_object().assunto initial['materia'] = self.get_object().materia
return self.initial initial['assunto'] = self.get_object().assunto
return initial
class MateriaLegislativaCrud(Crud): class MateriaLegislativaCrud(Crud):

15
sapl/norma/forms.py

@ -83,16 +83,19 @@ class NormaJuridicaForm(ModelForm):
label='Matéria', label='Matéria',
required=False, required=False,
queryset=TipoMateriaLegislativa.objects.all(), queryset=TipoMateriaLegislativa.objects.all(),
empty_label='Selecione' empty_label='Selecione',
widget=forms.Select(attrs={'autocomplete': 'off'})
) )
numero_materia = forms.CharField( numero_materia = forms.CharField(
label='Número Matéria', label='Número Matéria',
required=False required=False,
widget=forms.TextInput(attrs={'autocomplete': 'off'})
) )
ano_materia = forms.ChoiceField( ano_materia = forms.ChoiceField(
label='Ano Matéria', label='Ano Matéria',
required=False, required=False,
choices=ANO_CHOICES, choices=ANO_CHOICES,
widget=forms.Select(attrs={'autocomplete': 'off'})
) )
class Meta: class Meta:
@ -122,7 +125,13 @@ class NormaJuridicaForm(ModelForm):
if not self.is_valid(): if not self.is_valid():
return cleaned_data return cleaned_data
if not self.instance:
norma = NormaJuridica.objects.filter(ano=cleaned_data['ano'],
numero=cleaned_data['numero'],
tipo=cleaned_data['tipo']).exists()
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']):

22
sapl/norma/views.py

@ -7,7 +7,7 @@ from django.http import HttpResponse, JsonResponse
from django.template import RequestContext, loader from django.template import RequestContext, loader
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, ListView, TemplateView, UpdateView from django.views.generic import TemplateView, UpdateView
from django.views.generic.base import RedirectView from django.views.generic.base import RedirectView
from django.views.generic.edit import FormView from django.views.generic.edit import FormView
from django_filters.views import FilterView from django_filters.views import FilterView
@ -51,11 +51,12 @@ class NormaRelacionadaCrud(MasterDetailCrud):
form_class = NormaRelacionadaForm form_class = NormaRelacionadaForm
def get_initial(self): def get_initial(self):
self.initial['tipo'] = self.object.norma_relacionada.tipo.id initial = super(UpdateView, self).get_initial()
self.initial['numero'] = self.object.norma_relacionada.numero initial['tipo'] = self.object.norma_relacionada.tipo.id
self.initial['ano'] = self.object.norma_relacionada.ano initial['numero'] = self.object.norma_relacionada.numero
self.initial['ementa'] = self.object.norma_relacionada.ementa initial['ano'] = self.object.norma_relacionada.ano
return self.initial initial['ementa'] = self.object.norma_relacionada.ementa
return initial
class DetailView(MasterDetailCrud.DetailView): class DetailView(MasterDetailCrud.DetailView):
@ -171,12 +172,13 @@ class NormaCrud(Crud):
layout_key = 'NormaJuridicaCreate' layout_key = 'NormaJuridicaCreate'
def get_initial(self): def get_initial(self):
initial = super(UpdateView, self).get_initial()
norma = NormaJuridica.objects.get(id=self.kwargs['pk']) norma = NormaJuridica.objects.get(id=self.kwargs['pk'])
if norma.materia: if norma.materia:
self.initial['tipo_materia'] = norma.materia.tipo initial['tipo_materia'] = norma.materia.tipo
self.initial['ano_materia'] = norma.materia.ano initial['ano_materia'] = norma.materia.ano
self.initial['numero_materia'] = norma.materia.numero initial['numero_materia'] = norma.materia.numero
return self.initial.copy() return initial
def recuperar_norma(request): def recuperar_norma(request):

2
sapl/parlamentares/forms.py

@ -261,6 +261,8 @@ class FiliacaoForm(ModelForm):
fields = ['partido', fields = ['partido',
'data', 'data',
'data_desfiliacao'] 'data_desfiliacao']
widgets = {'data': forms.DateInput(attrs={'autocomplete': 'off'}),
'data_desfiliacao': forms.DateInput(attrs={'autocomplete': 'off'})}
def clean(self): def clean(self):
super(FiliacaoForm, self).clean() super(FiliacaoForm, self).clean()

11
sapl/protocoloadm/views.py

@ -11,7 +11,7 @@ from django.http.response import HttpResponseRedirect
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, ListView from django.views.generic import ListView, CreateView
from django.views.generic.base import RedirectView, TemplateView from django.views.generic.base import RedirectView, TemplateView
from django.views.generic.edit import FormView from django.views.generic.edit import FormView
from django_filters.views import FilterView from django_filters.views import FilterView
@ -610,18 +610,19 @@ class TramitacaoAdmCrud(MasterDetailCrud):
form_class = TramitacaoAdmForm form_class = TramitacaoAdmForm
def get_initial(self): def get_initial(self):
initial = super(CreateView, self).get_initial()
local = DocumentoAdministrativo.objects.get( local = DocumentoAdministrativo.objects.get(
pk=self.kwargs['pk']).tramitacaoadministrativo_set.order_by( pk=self.kwargs['pk']).tramitacaoadministrativo_set.order_by(
'-data_tramitacao', '-data_tramitacao',
'-id').first() '-id').first()
if local: if local:
self.initial['unidade_tramitacao_local' initial['unidade_tramitacao_local'
] = local.unidade_tramitacao_destino.pk ] = local.unidade_tramitacao_destino.pk
else: else:
self.initial['unidade_tramitacao_local'] = '' initial['unidade_tramitacao_local'] = ''
self.initial['data_tramitacao'] = timezone.now().date() initial['data_tramitacao'] = timezone.now().date()
return self.initial return initial
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)

13
sapl/sessao/forms.py

@ -179,15 +179,17 @@ class ExpedienteMateriaForm(ModelForm):
required=True, required=True,
queryset=TipoMateriaLegislativa.objects.all(), queryset=TipoMateriaLegislativa.objects.all(),
empty_label='Selecione', empty_label='Selecione',
) widget=forms.Select(attrs={'autocomplete': 'off'}))
numero_materia = forms.CharField( numero_materia = forms.CharField(
label='Número Matéria', required=True) label='Número Matéria', required=True,
widget=forms.TextInput(attrs={'autocomplete': 'off'}))
ano_materia = forms.CharField( ano_materia = forms.CharField(
label='Ano Matéria', label='Ano Matéria',
initial=int(data_atual.year), initial=int(data_atual.year),
required=True) required=True,
widget=forms.TextInput(attrs={'autocomplete': 'off'}))
data_ordem = forms.CharField( data_ordem = forms.CharField(
label='Data Sessão', label='Data Sessão',
@ -463,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:
@ -480,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'))

49
sapl/sessao/views.py

@ -16,7 +16,7 @@ from django.utils.decorators import method_decorator
from django.utils.html import strip_tags from django.utils.html import strip_tags
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.views.generic import FormView, ListView, TemplateView from django.views.generic import FormView, ListView, TemplateView, CreateView, UpdateView
from django.views.generic.base import RedirectView from django.views.generic.base import RedirectView
from django.views.generic.detail import DetailView from django.views.generic.detail import DetailView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
@ -329,6 +329,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(
@ -351,12 +352,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',
@ -435,10 +432,11 @@ class MateriaOrdemDiaCrud(MasterDetailCrud):
form_class = OrdemDiaForm form_class = OrdemDiaForm
def get_initial(self): def get_initial(self):
self.initial['tipo_materia'] = self.object.materia.tipo.id initial = super(UpdateView, self).get_initial()
self.initial['numero_materia'] = self.object.materia.numero initial['tipo_materia'] = self.object.materia.tipo.id
self.initial['ano_materia'] = self.object.materia.ano initial['numero_materia'] = self.object.materia.numero
return self.initial initial['ano_materia'] = self.object.materia.ano
return initial
class DetailView(MasterDetailCrud.DetailView): class DetailView(MasterDetailCrud.DetailView):
@ -492,14 +490,15 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
form_class = ExpedienteMateriaForm form_class = ExpedienteMateriaForm
def get_initial(self): def get_initial(self):
self.initial['data_ordem'] = SessaoPlenaria.objects.get( initial = super(CreateView, self).get_initial()
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 = ExpedienteMateria.objects.filter( max_numero_ordem = ExpedienteMateria.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']
self.initial['numero_ordem'] = ( initial['numero_ordem'] = (
max_numero_ordem if max_numero_ordem else 0) + 1 max_numero_ordem if max_numero_ordem else 0) + 1
return self.initial return initial
def get_success_url(self): def get_success_url(self):
return reverse('sapl.sessao:expedientemateria_list', return reverse('sapl.sessao:expedientemateria_list',
@ -509,10 +508,11 @@ class ExpedienteMateriaCrud(MasterDetailCrud):
form_class = ExpedienteMateriaForm form_class = ExpedienteMateriaForm
def get_initial(self): def get_initial(self):
self.initial['tipo_materia'] = self.object.materia.tipo.id initial = super(UpdateView, self).get_initial()
self.initial['numero_materia'] = self.object.materia.numero initial['tipo_materia'] = self.object.materia.tipo.id
self.initial['ano_materia'] = self.object.materia.ano initial['numero_materia'] = self.object.materia.numero
return self.initial initial['ano_materia'] = self.object.materia.ano
return initial
class DetailView(MasterDetailCrud.DetailView): class DetailView(MasterDetailCrud.DetailView):
@ -544,6 +544,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
@ -1146,9 +1154,10 @@ class ResumoOrdenacaoView(PermissionRequiredMixin, FormView):
return reverse('sapl.base:sistema') return reverse('sapl.base:sistema')
def get_initial(self): def get_initial(self):
initial = super(ResumoOrdenacaoView, self).get_initial()
ordenacao = ResumoOrdenacao.objects.first() ordenacao = ResumoOrdenacao.objects.first()
if ordenacao: if ordenacao:
return {'primeiro': ordenacao.primeiro, initial.update({'primeiro': ordenacao.primeiro,
'segundo': ordenacao.segundo, 'segundo': ordenacao.segundo,
'terceiro': ordenacao.terceiro, 'terceiro': ordenacao.terceiro,
'quarto': ordenacao.quarto, 'quarto': ordenacao.quarto,
@ -1157,8 +1166,8 @@ class ResumoOrdenacaoView(PermissionRequiredMixin, FormView):
'setimo': ordenacao.setimo, 'setimo': ordenacao.setimo,
'oitavo': ordenacao.oitavo, 'oitavo': ordenacao.oitavo,
'nono': ordenacao.nono, 'nono': ordenacao.nono,
'decimo': ordenacao.decimo} 'decimo': ordenacao.decimo})
return self.initial.copy() return initial
def form_valid(self, form): def form_valid(self, form):
ordenacao = ResumoOrdenacao.objects.get_or_create()[0] ordenacao = ResumoOrdenacao.objects.get_or_create()[0]

2
sapl/templates/materia/layouts.yaml

@ -23,7 +23,7 @@ MateriaLegislativa:
{% trans 'Identificação Básica' %}: {% trans 'Identificação Básica' %}:
- tipo ano numero - tipo ano numero
- data_apresentacao numero_protocolo tipo_apresentacao - data_apresentacao numero_protocolo tipo_apresentacao
- autor - tipo_autor autor
- texto_original - texto_original
{% trans 'Outras Informações' %}: {% trans 'Outras Informações' %}:
- apelido dias_prazo polemica - apelido dias_prazo polemica

38
sapl/templates/materia/materialegislativa_form.html

@ -22,6 +22,44 @@
} }
} }
$("#id_tipo, #id_ano").change(recuperar_numero_ano); $("#id_tipo, #id_ano").change(recuperar_numero_ano);
function compare(a, b) {
if (a.text < b.text)
return -1;
if (a.text > b.text)
return 1;
return 0;
}
$(document).ready(function() {
$("#id_tipo_autor").change(function() {
var tipo_selecionado = $("#id_tipo_autor").val();
var autor_selecionado = $("#id_autor").val();
$("#id_autor option").remove()
if (tipo_selecionado !== undefined && tipo_selecionado !== null) {
var json_data = {
tipo : tipo_selecionado,
data_relativa : $("#id_data_apresentacao").val()
}
$.getJSON("/api/autor/possiveis", json_data, function(data){
if (data) {
var results = data.sort(compare);
if (results.length > 1) {
$("#id_autor").append("<option>-----</option>");
}
$.each(results, function(idx, obj) {
$("#id_autor")
.append($("<option></option>")
.attr("value", obj.value)
.text(obj.text));
});
$("#id_autor").val(autor_selecionado);
}
});
}
});
$("#id_tipo_autor").trigger('change');
});
</script> </script>
{% endblock %} {% endblock %}

17
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,13 +372,18 @@
} }
if (data['materia_legislativa_texto']){ if (data['materia_legislativa_texto']){
if (data["status_painel"] == true){
$("#materia_legislativa_texto").text(data["materia_legislativa_texto"]); $("#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('(...)'));

10
sapl/templates/protocoloadm/comprovante.html

@ -61,14 +61,14 @@
<th>Data / Horário</th> <th>Data / Horário</th>
<td>{{ protocolo.data|date:"d/m/Y" }} - {{ protocolo.timestamp|date:"H:i:s" }}</td> <td>{{ protocolo.data|date:"d/m/Y" }} - {{ protocolo.timestamp|date:"H:i:s" }}</td>
</tr> </tr>
{% if protocolo.tipo_processo == 0 %} {% if protocolo.tipo_processo == 1 %}
<tr> <tr>
<th>Ementa</th> <th>Ementa</th>
<td>{{ protocolo.assunto_ementa }}</td> <td>{{ protocolo.assunto_ementa }}</td>
</tr> </tr>
<tr> <tr>
<th>Interessado</th> <th>Autor</th>
<td>{{ protocolo.interessado }}</td> <td>{{ protocolo.autor }}</td>
</tr> </tr>
{% endif %} {% endif %}
<tr> <tr>
@ -85,5 +85,9 @@
<th>Número Páginas</th> <th>Número Páginas</th>
<td>{{ protocolo.numero_paginas }}</td> <td>{{ protocolo.numero_paginas }}</td>
</tr> </tr>
<tr>
<th>Comprovante emitido por</th>
<td>{{ request.user.username }}</td>
</tr>
</table> </table>
{% endblock detail_content %} {% endblock detail_content %}

2
setup.py

@ -49,7 +49,7 @@ install_requires = [
] ]
setup( setup(
name='interlegis-sapl', name='interlegis-sapl',
version='3.1.81', 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