Sistema de Apoio ao Processo Legislativo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

595 lines
20 KiB

from datetime import datetime
import django_filters
from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button, Fieldset, Layout
from django import forms
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist, ValidationError
from django.db import transaction
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
7 years ago
from sapl.base.models import Autor, TipoAutor
from sapl.crispy_layout_mixin import form_actions, to_row
from sapl.materia.forms import MateriaLegislativaFilterSet
from sapl.materia.models import (MateriaLegislativa, StatusTramitacao,
TipoMateriaLegislativa)
7 years ago
from sapl.parlamentares.models import Parlamentar, Legislatura, Mandato
from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES,
MateriaPesquisaOrderingFilter, autor_label,
autor_modal, timezone)
7 years ago
from .models import (Bancada, Bloco, ExpedienteMateria, Orador,
OradorExpediente, OrdemDia, SessaoPlenaria,
SessaoPlenariaPresenca, TipoResultadoVotacao)
def recupera_anos():
try:
anos_list = SessaoPlenaria.objects.all().dates('data_inicio', 'year')
8 years ago
# a listagem deve ser em ordem descrescente, mas por algum motivo
# a adicao de .order_by acima depois do all() nao surte efeito
# apos a adicao do .dates(), por isso o reversed() abaixo
anos = [(k.year, k.year) for k in reversed(anos_list)]
return anos
Fix #414 ordem resumo (#1109) * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * add arq sql no instalador de reutil. da app sapl * Conserta erro teste * fix #1092 - Altera o destino dos documentos migrados (#1093) * Altera o destino dos documentos migrados Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Usa a data de matéria em doc acessório Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * ajusta caminho public private * Faz a ordenação para o arquivo impresso * fix #1098 (#1107) * Padroniza tamanho foto para mesa (#1088) * Adiciona permissão a tela de ordenação * Bug Fix * Fix 1104 (#1110) * adiciona poppler-utils (#1113) * Adiciona poppler-utils, onde está pdftotext que é usado por indexador. * redesenha a exibição dos votos na tela de votação nominal #1100 (#1101) * resultado de votação nominal * Update nominal_detail.html * Update nominal_edit.html * Adiciona URL do Interlegis ao rodapé da página. * Somente mostra interessado se Doc Adm e mostra Autor em listagem de pesquisa * HOT-FIX: identificador de protocolo errado * Atualiza código devido a deprecated na drf * HOT-FIX: possível fix para erro de render no search index * Add pesquisa em Autor pelo campo ativo de parlamentar * Gera migração referente ao commit #285d32e Signed-off-by: Eliseu Egewarth <eliseuegewarth@gmail.com> * Add bsc param de Autor nos Models lig via GR a Autor * campo texto para autor documentos acessorios em lote (#1117) * Conserto paliativo para doc acessorio em lote * Conserta DocumentoAcessorioEmLote * fix conserta acessorio em lote (#1119) * Melhorias no detail de protocolo * Captura erro de indexação de arquivo. * Fix #1111 * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * Conserta erro teste * Faz a ordenação para o arquivo impresso * Adiciona permissão a tela de ordenação * Faz o merge das migrations
8 years ago
except Exception:
return []
def ANO_CHOICES():
return [('', '---------')] + recupera_anos()
MES_CHOICES = [('', '---------')] + RANGE_MESES
DIA_CHOICES = [('', '---------')] + RANGE_DIAS_MES
Fix #414 ordem resumo (#1109) * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * add arq sql no instalador de reutil. da app sapl * Conserta erro teste * fix #1092 - Altera o destino dos documentos migrados (#1093) * Altera o destino dos documentos migrados Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Usa a data de matéria em doc acessório Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * ajusta caminho public private * Faz a ordenação para o arquivo impresso * fix #1098 (#1107) * Padroniza tamanho foto para mesa (#1088) * Adiciona permissão a tela de ordenação * Bug Fix * Fix 1104 (#1110) * adiciona poppler-utils (#1113) * Adiciona poppler-utils, onde está pdftotext que é usado por indexador. * redesenha a exibição dos votos na tela de votação nominal #1100 (#1101) * resultado de votação nominal * Update nominal_detail.html * Update nominal_edit.html * Adiciona URL do Interlegis ao rodapé da página. * Somente mostra interessado se Doc Adm e mostra Autor em listagem de pesquisa * HOT-FIX: identificador de protocolo errado * Atualiza código devido a deprecated na drf * HOT-FIX: possível fix para erro de render no search index * Add pesquisa em Autor pelo campo ativo de parlamentar * Gera migração referente ao commit #285d32e Signed-off-by: Eliseu Egewarth <eliseuegewarth@gmail.com> * Add bsc param de Autor nos Models lig via GR a Autor * campo texto para autor documentos acessorios em lote (#1117) * Conserto paliativo para doc acessorio em lote * Conserta DocumentoAcessorioEmLote * fix conserta acessorio em lote (#1119) * Melhorias no detail de protocolo * Captura erro de indexação de arquivo. * Fix #1111 * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * Conserta erro teste * Faz a ordenação para o arquivo impresso * Adiciona permissão a tela de ordenação * Faz o merge das migrations
8 years ago
ORDENACAO_RESUMO = [('cont_mult', 'Conteúdo Multimídia'),
('exp', 'Expedientes'),
('id_basica', 'Identificação Básica'),
('lista_p', 'Lista de Presença'),
('lista_p_o_d', 'Lista de Presença Ordem do Dia'),
('mat_exp', 'Matérias do Expediente'),
('mat_o_d', 'Matérias da Ordem do Dia'),
('mesa_d', 'Mesa Diretora'),
('oradores_exped', 'Oradores do Expediente'),
('oradores_expli', 'Oradores das Explicações Pessoais')]
8 years ago
class SessaoPlenariaForm(ModelForm):
class Meta:
model = SessaoPlenaria
exclude = ['cod_andamento_sessao']
def clean(self):
super(SessaoPlenariaForm, self).clean()
if not self.is_valid():
return self.cleaned_data
8 years ago
instance = self.instance
num = self.cleaned_data['numero']
sl = self.cleaned_data['sessao_legislativa']
leg = self.cleaned_data['legislatura']
tipo = self.cleaned_data['tipo']
8 years ago
error = ValidationError(
"Número de Sessão Plenária já existente "
"para a Legislatura, Sessão Legislativa e Tipo informados. "
"Favor escolher um número distinto.")
8 years ago
sessoes = SessaoPlenaria.objects.filter(numero=num,
sessao_legislativa=sl,
legislatura=leg,
tipo=tipo).\
values_list('id', flat=True)
8 years ago
qtd_sessoes = len(sessoes)
8 years ago
if qtd_sessoes > 0:
if instance.pk: # update
if instance.pk not in sessoes or qtd_sessoes > 1:
8 years ago
raise error
else: # create
8 years ago
raise error
return self.cleaned_data
Fix #414 ordem resumo (#1109) * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * add arq sql no instalador de reutil. da app sapl * Conserta erro teste * fix #1092 - Altera o destino dos documentos migrados (#1093) * Altera o destino dos documentos migrados Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Usa a data de matéria em doc acessório Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * ajusta caminho public private * Faz a ordenação para o arquivo impresso * fix #1098 (#1107) * Padroniza tamanho foto para mesa (#1088) * Adiciona permissão a tela de ordenação * Bug Fix * Fix 1104 (#1110) * adiciona poppler-utils (#1113) * Adiciona poppler-utils, onde está pdftotext que é usado por indexador. * redesenha a exibição dos votos na tela de votação nominal #1100 (#1101) * resultado de votação nominal * Update nominal_detail.html * Update nominal_edit.html * Adiciona URL do Interlegis ao rodapé da página. * Somente mostra interessado se Doc Adm e mostra Autor em listagem de pesquisa * HOT-FIX: identificador de protocolo errado * Atualiza código devido a deprecated na drf * HOT-FIX: possível fix para erro de render no search index * Add pesquisa em Autor pelo campo ativo de parlamentar * Gera migração referente ao commit #285d32e Signed-off-by: Eliseu Egewarth <eliseuegewarth@gmail.com> * Add bsc param de Autor nos Models lig via GR a Autor * campo texto para autor documentos acessorios em lote (#1117) * Conserto paliativo para doc acessorio em lote * Conserta DocumentoAcessorioEmLote * fix conserta acessorio em lote (#1119) * Melhorias no detail de protocolo * Captura erro de indexação de arquivo. * Fix #1111 * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * Conserta erro teste * Faz a ordenação para o arquivo impresso * Adiciona permissão a tela de ordenação * Faz o merge das migrations
8 years ago
class BancadaForm(ModelForm):
class Meta:
model = Bancada
fields = ['legislatura', 'nome', 'partido', 'data_criacao',
'data_extincao', 'descricao']
def clean(self):
super(BancadaForm, self).clean()
if not self.is_valid():
return self.cleaned_data
data = self.cleaned_data
legislatura = data['legislatura']
data_criacao = data['data_criacao']
if data_criacao:
if (data_criacao < legislatura.data_inicio or
data_criacao > legislatura.data_fim):
raise ValidationError(_("Data de criação da bancada fora do intervalo"
" de legislatura informada"))
data_extincao = data['data_extincao']
if data_extincao:
if (data_extincao < legislatura.data_inicio or
data_extincao > legislatura.data_fim):
raise ValidationError(_("Data fim da bancada fora do intervalo de"
" legislatura informada"))
if self.cleaned_data['data_extincao']:
if (self.cleaned_data['data_extincao'] <
self.cleaned_data['data_criacao']):
msg = _('Data de extinção não pode ser menor que a de criação')
raise ValidationError(msg)
return self.cleaned_data
@transaction.atomic
def save(self, commit=True):
bancada = super(BancadaForm, self).save(commit)
content_type = ContentType.objects.get_for_model(Bancada)
object_id = bancada.pk
7 years ago
tipo = TipoAutor.objects.get(descricao__icontains='Bancada')
Autor.objects.create(
content_type=content_type,
object_id=object_id,
tipo=tipo,
nome=bancada.nome
)
return bancada
7 years ago
class BlocoForm(ModelForm):
class Meta:
model = Bloco
fields = ['nome', 'partidos', 'data_criacao',
'data_extincao', 'descricao']
def clean(self):
super(BlocoForm, self).clean()
if not self.is_valid():
return self.cleaned_data
if self.cleaned_data['data_extincao']:
if (self.cleaned_data['data_extincao'] <
self.cleaned_data['data_criacao']):
msg = _('Data de extinção não pode ser menor que a de criação')
raise ValidationError(msg)
return self.cleaned_data
@transaction.atomic
def save(self, commit=True):
bloco = super(BlocoForm, self).save(commit)
content_type = ContentType.objects.get_for_model(Bloco)
object_id = bloco.pk
7 years ago
tipo = TipoAutor.objects.get(descricao__icontains='Bloco')
Autor.objects.create(
content_type=content_type,
object_id=object_id,
tipo=tipo,
nome=bloco.nome
)
return bloco
7 years ago
class ExpedienteMateriaForm(ModelForm):
_model = ExpedienteMateria
data_atual = timezone.now()
tipo_materia = forms.ModelChoiceField(
label=_('Tipo Matéria'),
required=True,
queryset=TipoMateriaLegislativa.objects.all(),
empty_label='Selecione',
widget=forms.Select(attrs={'autocomplete': 'off'}))
numero_materia = forms.CharField(
label='Número Matéria', required=True,
widget=forms.TextInput(attrs={'autocomplete': 'off'}))
ano_materia = forms.CharField(
label='Ano Matéria',
initial=int(data_atual.year),
required=True,
widget=forms.TextInput(attrs={'autocomplete': 'off'}))
data_ordem = forms.CharField(
8 years ago
label='Data Sessão',
initial=datetime.strftime(timezone.now(), '%d/%m/%Y'),
widget=forms.TextInput(attrs={'readonly': 'readonly'}))
class Meta:
model = ExpedienteMateria
fields = ['data_ordem', 'numero_ordem', 'tipo_materia', 'observacao',
'numero_materia', 'ano_materia', 'tipo_votacao']
8 years ago
def clean_numero_ordem(self):
sessao = self.instance.sessao_plenaria
8 years ago
numero_ordem_exists = ExpedienteMateria.objects.filter(
8 years ago
sessao_plenaria=sessao,
8 years ago
numero_ordem=self.cleaned_data['numero_ordem']).exists()
8 years ago
if numero_ordem_exists and not self.instance.pk:
8 years ago
msg = _('Esse número de ordem já existe.')
raise ValidationError(msg)
return self.cleaned_data['numero_ordem']
def clean_data_ordem(self):
8 years ago
return self.instance.sessao_plenaria.data_inicio
def clean(self):
cleaned_data = super(ExpedienteMateriaForm, self).clean()
if not self.is_valid():
return cleaned_data
7 years ago
8 years ago
sessao = self.instance.sessao_plenaria
try:
materia = MateriaLegislativa.objects.get(
numero=self.cleaned_data['numero_materia'],
ano=self.cleaned_data['ano_materia'],
tipo=self.cleaned_data['tipo_materia'])
except ObjectDoesNotExist:
msg = _('A matéria a ser inclusa não existe no cadastro'
' de matérias legislativas.')
raise ValidationError(msg)
else:
cleaned_data['materia'] = materia
exists = self._model.objects.filter(
8 years ago
sessao_plenaria=sessao,
materia=materia).exists()
8 years ago
if exists and not self.instance.pk:
8 years ago
msg = _('Essa matéria já foi cadastrada.')
raise ValidationError(msg)
return cleaned_data
def save(self, commit=False):
expediente = super(ExpedienteMateriaForm, self).save(commit)
expediente.materia = self.cleaned_data['materia']
expediente.save()
return expediente
class OrdemDiaForm(ExpedienteMateriaForm):
_model = OrdemDia
class Meta:
model = OrdemDia
fields = ['data_ordem', 'numero_ordem', 'tipo_materia', 'observacao',
'numero_materia', 'ano_materia', 'tipo_votacao']
def clean_data_ordem(self):
8 years ago
return self.instance.sessao_plenaria.data_inicio
8 years ago
def clean_numero_ordem(self):
sessao = self.instance.sessao_plenaria
numero_ordem_exists = OrdemDia.objects.filter(
sessao_plenaria=sessao,
numero_ordem=self.cleaned_data['numero_ordem']).exists()
8 years ago
if numero_ordem_exists and not self.instance.pk:
8 years ago
msg = _('Esse número de ordem já existe.')
raise ValidationError(msg)
return self.cleaned_data['numero_ordem']
def clean(self):
cleaned_data = super(OrdemDiaForm, self).clean()
if not self.is_valid():
return cleaned_data
return self.cleaned_data
def save(self, commit=False):
ordem = super(OrdemDiaForm, self).save(commit)
ordem.materia = self.cleaned_data['materia']
ordem.save()
return ordem
class PresencaForm(forms.Form):
presenca = forms.CharField(required=False, initial=False)
parlamentar = forms.CharField(required=False, max_length=20)
class ListMateriaForm(forms.Form):
error_message = forms.CharField(required=False, label='votacao_aberta')
class MesaForm(forms.Form):
parlamentar = forms.IntegerField(required=True)
cargo = forms.IntegerField(required=True)
class ExpedienteForm(forms.Form):
conteudo = forms.CharField(required=False, widget=forms.Textarea)
class VotacaoForm(forms.Form):
votos_sim = forms.CharField(label='Sim')
votos_nao = forms.CharField(label='Não')
abstencoes = forms.CharField(label='Abstenções')
total_votos = forms.CharField(required=False, label='total')
resultado_votacao = forms.CharField(label='Resultado da Votação')
class VotacaoNominalForm(forms.Form):
resultado_votacao = forms.ModelChoiceField(label='Resultado da Votação',
required=True,
queryset=TipoResultadoVotacao.objects.all())
class VotacaoEditForm(forms.Form):
pass
class SessaoPlenariaFilterSet(django_filters.FilterSet):
data_inicio__year = django_filters.ChoiceFilter(required=False,
label='Ano',
choices=ANO_CHOICES)
data_inicio__month = django_filters.ChoiceFilter(required=False,
label='Mês',
choices=MES_CHOICES)
data_inicio__day = django_filters.ChoiceFilter(required=False,
label='Dia',
choices=DIA_CHOICES)
titulo = _('Pesquisa de Sessão Plenária')
class Meta:
model = SessaoPlenaria
fields = ['tipo']
def __init__(self, *args, **kwargs):
super(SessaoPlenariaFilterSet, self).__init__(*args, **kwargs)
7 years ago
# pré-popula o campo do formulário com o ano corrente
self.form.fields['data_inicio__year'].initial = timezone.now().year
row1 = to_row(
[('data_inicio__year', 3),
('data_inicio__month', 3),
('data_inicio__day', 3),
('tipo', 3)])
self.form.helper = FormHelper()
self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout(
Fieldset(self.titulo,
row1,
form_actions(label='Pesquisar'))
)
class AdicionarVariasMateriasFilterSet(MateriaLegislativaFilterSet):
8 years ago
o = MateriaPesquisaOrderingFilter()
8 years ago
tramitacao__status = django_filters.ModelChoiceFilter(
required=True,
queryset=StatusTramitacao.objects.all(),
label=_('Status da Matéria'))
class Meta:
model = MateriaLegislativa
8 years ago
fields = ['tramitacao__status',
'numero',
'numero_protocolo',
'ano',
'tipo',
'data_apresentacao',
'data_publicacao',
'autoria__autor__tipo',
# FIXME 'autoria__autor__partido',
'relatoria__parlamentar_id',
'local_origem_externa',
'em_tramitacao',
]
def __init__(self, *args, **kwargs):
super(MateriaLegislativaFilterSet, self).__init__(*args, **kwargs)
self.filters['tipo'].label = 'Tipo de Matéria'
self.filters['autoria__autor__tipo'].label = 'Tipo de Autor'
706 refatorar model autor tipoautor (#739) * Ref Autor, TipoAutor, cria app api DRF - Autor e TipoAutor migrados para app base. - Foram refatorados para GR - Generic Relations - Em TipoAutor: passou se a apontar também para um ContentType que é usado para contextualização de dados da GR em Autor. - A captura da combo de ContentTypes é feita através do apontamento reverso nos models que se queira disponibilizar conceitualmente como Autor - Em Autor: neste commit, o form de create está em desenvolvimento, com o buscador de possiveis autores baseados na seleção do usuário de TipoAutor que, se não possui ContentType, abre o campo nome para insersão, se possui ContentType, abre caixa de busca com atualização jquery de radiobox&#39;s para o usuário selecionar um possível autor. - api rest: para a busca funcionar e como objetivo de futuras implementações em DRF, a app api foi criada, anotada nas configurações gerais de sapl.urls com o prefixo /api. - na api foi criada a uma ListAPIView para pesquisa de possiveis autores baseados no tipo autor enviado, url /api/autor/possiveis/?P&lt;pk&gt;[0-9]*)$ que sem pk devolve a lista de TipoAutor e, com pk, devolve a lista dos registros ligados ao ContentType, filtrados pelo parametro q * Ajusta front para busca por possiveis autores Ajusta front e implementa SaplGenericRelation, uma customização que adiciona o atributo fields_search que possibilita passar para qualquer implementação de busca quais são os campos de busca padrão do do GenericRelation * Conc refatoração no Cada de Autor e Tipos de Autor * Alt backend de perm e pag de drf e ref layout topo * Add procedimento na alteração de username de Autor Na edição de Autores foi adicionado o tratamento por opção do usuário do que deve ser feito com o usuário que está sendo desvinculado no caso de uma alteração do username de um Autor. Foram dadas três opções: 1) Apenas retirar Perfil de Autor do Usuário que está sendo desvinculado 2) Retirar Perfil de Autor e desativar Usuário que está sendo desvinculado 3) Excluir Usuário * Add field cargo em AutorForm para tipos sem CT Cadastro de Autores de Tipos sem ContentType podem adicionar nome, cargo e usuário. * Add Bloco, Bancada, Frente possíveis Tip de Autores * Corrige frase de mensagem no cadastro de Autor * ref buscador modal de Autores c pesq param reversa * Add documentação e faz modificações na api/autor * Ref Crud para Listar GenericRelations * Ref List da aba Proposições para parlamentares * Altera imports de teste na app materia * Corrige comentários da classe AutorListView * Customiza layout do drf docs. * Altera criação do grp Autor para inc list e detail * Remove customização do bootstrap Após fork e ajustes feitos no tema drunken-parrot-ui-flat, alterações feitas nos arquivos deste commit não são mais necessárias, passando a ser renderizado os arquivos que são padrão da biblioteca django-crispy-forms. * Adequa inserção dinamica de radio ao crispy-forms
8 years ago
# self.filters['autoria__autor__partido'].label = 'Partido do Autor'
self.filters['relatoria__parlamentar_id'].label = 'Relatoria'
row1 = to_row(
8 years ago
[('tramitacao__status', 12)])
row2 = to_row(
8 years ago
[('tipo', 12)])
row3 = to_row(
[('numero', 4),
('ano', 4),
('numero_protocolo', 4)])
8 years ago
row4 = to_row(
[('data_apresentacao', 6),
('data_publicacao', 6)])
8 years ago
row5 = to_row(
[('autoria__autor', 0),
(Button('pesquisar',
'Pesquisar Autor',
css_class='btn btn-primary btn-sm'), 2),
(Button('limpar',
'limpar Autor',
css_class='btn btn-primary btn-sm'), 10)])
8 years ago
row6 = to_row(
[('autoria__autor__tipo', 6),
706 refatorar model autor tipoautor (#739) * Ref Autor, TipoAutor, cria app api DRF - Autor e TipoAutor migrados para app base. - Foram refatorados para GR - Generic Relations - Em TipoAutor: passou se a apontar também para um ContentType que é usado para contextualização de dados da GR em Autor. - A captura da combo de ContentTypes é feita através do apontamento reverso nos models que se queira disponibilizar conceitualmente como Autor - Em Autor: neste commit, o form de create está em desenvolvimento, com o buscador de possiveis autores baseados na seleção do usuário de TipoAutor que, se não possui ContentType, abre o campo nome para insersão, se possui ContentType, abre caixa de busca com atualização jquery de radiobox&#39;s para o usuário selecionar um possível autor. - api rest: para a busca funcionar e como objetivo de futuras implementações em DRF, a app api foi criada, anotada nas configurações gerais de sapl.urls com o prefixo /api. - na api foi criada a uma ListAPIView para pesquisa de possiveis autores baseados no tipo autor enviado, url /api/autor/possiveis/?P&lt;pk&gt;[0-9]*)$ que sem pk devolve a lista de TipoAutor e, com pk, devolve a lista dos registros ligados ao ContentType, filtrados pelo parametro q * Ajusta front para busca por possiveis autores Ajusta front e implementa SaplGenericRelation, uma customização que adiciona o atributo fields_search que possibilita passar para qualquer implementação de busca quais são os campos de busca padrão do do GenericRelation * Conc refatoração no Cada de Autor e Tipos de Autor * Alt backend de perm e pag de drf e ref layout topo * Add procedimento na alteração de username de Autor Na edição de Autores foi adicionado o tratamento por opção do usuário do que deve ser feito com o usuário que está sendo desvinculado no caso de uma alteração do username de um Autor. Foram dadas três opções: 1) Apenas retirar Perfil de Autor do Usuário que está sendo desvinculado 2) Retirar Perfil de Autor e desativar Usuário que está sendo desvinculado 3) Excluir Usuário * Add field cargo em AutorForm para tipos sem CT Cadastro de Autores de Tipos sem ContentType podem adicionar nome, cargo e usuário. * Add Bloco, Bancada, Frente possíveis Tip de Autores * Corrige frase de mensagem no cadastro de Autor * ref buscador modal de Autores c pesq param reversa * Add documentação e faz modificações na api/autor * Ref Crud para Listar GenericRelations * Ref List da aba Proposições para parlamentares * Altera imports de teste na app materia * Corrige comentários da classe AutorListView * Customiza layout do drf docs. * Altera criação do grp Autor para inc list e detail * Remove customização do bootstrap Após fork e ajustes feitos no tema drunken-parrot-ui-flat, alterações feitas nos arquivos deste commit não são mais necessárias, passando a ser renderizado os arquivos que são padrão da biblioteca django-crispy-forms. * Adequa inserção dinamica de radio ao crispy-forms
8 years ago
# ('autoria__autor__partido', 6)
])
8 years ago
row7 = to_row(
[('relatoria__parlamentar_id', 6),
('local_origem_externa', 6)])
8 years ago
row8 = to_row(
[('em_tramitacao', 6),
('o', 6)])
8 years ago
row9 = to_row(
[('ementa', 12)])
self.form.helper = FormHelper()
self.form.helper.form_method = 'GET'
self.form.helper.layout = Layout(
Fieldset(_('Pesquisa de Matéria'),
row1, row2, row3,
HTML(autor_label),
HTML(autor_modal),
8 years ago
row4, row5, row6, row7, row8, row9,
form_actions(label='Pesquisar'))
)
8 years ago
class OradorForm(ModelForm):
def __init__(self, *args, **kwargs):
8 years ago
super(OradorForm, self).__init__(*args, **kwargs)
8 years ago
id_sessao = int(self.initial['id_sessao'])
8 years ago
ids = [s.parlamentar.id for
s in SessaoPlenariaPresenca.objects.filter(
sessao_plenaria_id=id_sessao)]
8 years ago
self.fields['parlamentar'].queryset = Parlamentar.objects.filter(
id__in=ids).order_by('nome_parlamentar')
8 years ago
class Meta:
model = Orador
exclude = ['sessao_plenaria']
class OradorExpedienteForm(ModelForm):
def __init__(self, *args, **kwargs):
8 years ago
super(OradorExpedienteForm, self).__init__(*args, **kwargs)
legislatura_vigente = SessaoPlenaria.objects.get(pk=kwargs['initial']['id_sessao']).legislatura
7 years ago
if legislatura_vigente:
7 years ago
self.fields['parlamentar'].queryset = \
Parlamentar.objects.filter(ativo=True,
mandato__legislatura=legislatura_vigente
).order_by('nome_parlamentar')
8 years ago
def clean(self):
super(OradorExpedienteForm, self).clean()
cleaned_data = self.cleaned_data
if not self.is_valid():
return self.cleaned_data
sessao_id = self.initial['id_sessao']
numero = self.initial.get('numero') # Retorna None se inexistente
ordem = OradorExpediente.objects.filter(
sessao_plenaria_id=sessao_id,
numero_ordem=cleaned_data['numero_ordem']
).exists()
if ordem and (cleaned_data['numero_ordem'] != numero):
raise ValidationError(_(
'Já existe orador nesta posição da ordem de pronunciamento'))
return self.cleaned_data
8 years ago
class Meta:
model = OradorExpediente
exclude = ['sessao_plenaria']
class PautaSessaoFilterSet(SessaoPlenariaFilterSet):
titulo = _('Pesquisa de Pauta de Sessão')
Fix #414 ordem resumo (#1109) * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * add arq sql no instalador de reutil. da app sapl * Conserta erro teste * fix #1092 - Altera o destino dos documentos migrados (#1093) * Altera o destino dos documentos migrados Signed-off-by: Luciano Almeida &lt;lucianoalmeida@interlegis.leg.br&gt; * Usa a data de matéria em doc acessório Signed-off-by: Luciano Almeida &lt;lucianoalmeida@interlegis.leg.br&gt; * ajusta caminho public private * Faz a ordenação para o arquivo impresso * fix #1098 (#1107) * Padroniza tamanho foto para mesa (#1088) * Adiciona permissão a tela de ordenação * Bug Fix * Fix 1104 (#1110) * adiciona poppler-utils (#1113) * Adiciona poppler-utils, onde está pdftotext que é usado por indexador. * redesenha a exibição dos votos na tela de votação nominal #1100 (#1101) * resultado de votação nominal * Update nominal_detail.html * Update nominal_edit.html * Adiciona URL do Interlegis ao rodapé da página. * Somente mostra interessado se Doc Adm e mostra Autor em listagem de pesquisa * HOT-FIX: identificador de protocolo errado * Atualiza código devido a deprecated na drf * HOT-FIX: possível fix para erro de render no search index * Add pesquisa em Autor pelo campo ativo de parlamentar * Gera migração referente ao commit #285d32e Signed-off-by: Eliseu Egewarth &lt;eliseuegewarth@gmail.com&gt; * Add bsc param de Autor nos Models lig via GR a Autor * campo texto para autor documentos acessorios em lote (#1117) * Conserto paliativo para doc acessorio em lote * Conserta DocumentoAcessorioEmLote * fix conserta acessorio em lote (#1119) * Melhorias no detail de protocolo * Captura erro de indexação de arquivo. * Fix #1111 * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * Conserta erro teste * Faz a ordenação para o arquivo impresso * Adiciona permissão a tela de ordenação * Faz o merge das migrations
8 years ago
class ResumoOrdenacaoForm(forms.Form):
primeiro = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
segundo = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
terceiro = forms.ChoiceField(label='',
Fix #414 ordem resumo (#1109) * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * add arq sql no instalador de reutil. da app sapl * Conserta erro teste * fix #1092 - Altera o destino dos documentos migrados (#1093) * Altera o destino dos documentos migrados Signed-off-by: Luciano Almeida &lt;lucianoalmeida@interlegis.leg.br&gt; * Usa a data de matéria em doc acessório Signed-off-by: Luciano Almeida &lt;lucianoalmeida@interlegis.leg.br&gt; * ajusta caminho public private * Faz a ordenação para o arquivo impresso * fix #1098 (#1107) * Padroniza tamanho foto para mesa (#1088) * Adiciona permissão a tela de ordenação * Bug Fix * Fix 1104 (#1110) * adiciona poppler-utils (#1113) * Adiciona poppler-utils, onde está pdftotext que é usado por indexador. * redesenha a exibição dos votos na tela de votação nominal #1100 (#1101) * resultado de votação nominal * Update nominal_detail.html * Update nominal_edit.html * Adiciona URL do Interlegis ao rodapé da página. * Somente mostra interessado se Doc Adm e mostra Autor em listagem de pesquisa * HOT-FIX: identificador de protocolo errado * Atualiza código devido a deprecated na drf * HOT-FIX: possível fix para erro de render no search index * Add pesquisa em Autor pelo campo ativo de parlamentar * Gera migração referente ao commit #285d32e Signed-off-by: Eliseu Egewarth &lt;eliseuegewarth@gmail.com&gt; * Add bsc param de Autor nos Models lig via GR a Autor * campo texto para autor documentos acessorios em lote (#1117) * Conserto paliativo para doc acessorio em lote * Conserta DocumentoAcessorioEmLote * fix conserta acessorio em lote (#1119) * Melhorias no detail de protocolo * Captura erro de indexação de arquivo. * Fix #1111 * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * Conserta erro teste * Faz a ordenação para o arquivo impresso * Adiciona permissão a tela de ordenação * Faz o merge das migrations
8 years ago
choices=ORDENACAO_RESUMO)
quarto = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
quinto = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
sexto = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
setimo = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
oitavo = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
nono = forms.ChoiceField(label=_(''),
choices=ORDENACAO_RESUMO)
decimo = forms.ChoiceField(label='10°',
Fix #414 ordem resumo (#1109) * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * add arq sql no instalador de reutil. da app sapl * Conserta erro teste * fix #1092 - Altera o destino dos documentos migrados (#1093) * Altera o destino dos documentos migrados Signed-off-by: Luciano Almeida &lt;lucianoalmeida@interlegis.leg.br&gt; * Usa a data de matéria em doc acessório Signed-off-by: Luciano Almeida &lt;lucianoalmeida@interlegis.leg.br&gt; * ajusta caminho public private * Faz a ordenação para o arquivo impresso * fix #1098 (#1107) * Padroniza tamanho foto para mesa (#1088) * Adiciona permissão a tela de ordenação * Bug Fix * Fix 1104 (#1110) * adiciona poppler-utils (#1113) * Adiciona poppler-utils, onde está pdftotext que é usado por indexador. * redesenha a exibição dos votos na tela de votação nominal #1100 (#1101) * resultado de votação nominal * Update nominal_detail.html * Update nominal_edit.html * Adiciona URL do Interlegis ao rodapé da página. * Somente mostra interessado se Doc Adm e mostra Autor em listagem de pesquisa * HOT-FIX: identificador de protocolo errado * Atualiza código devido a deprecated na drf * HOT-FIX: possível fix para erro de render no search index * Add pesquisa em Autor pelo campo ativo de parlamentar * Gera migração referente ao commit #285d32e Signed-off-by: Eliseu Egewarth &lt;eliseuegewarth@gmail.com&gt; * Add bsc param de Autor nos Models lig via GR a Autor * campo texto para autor documentos acessorios em lote (#1117) * Conserto paliativo para doc acessorio em lote * Conserta DocumentoAcessorioEmLote * fix conserta acessorio em lote (#1119) * Melhorias no detail de protocolo * Captura erro de indexação de arquivo. * Fix #1111 * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * Conserta erro teste * Faz a ordenação para o arquivo impresso * Adiciona permissão a tela de ordenação * Faz o merge das migrations
8 years ago
choices=ORDENACAO_RESUMO)
def __init__(self, *args, **kwargs):
super(ResumoOrdenacaoForm, self).__init__(*args, **kwargs)
row1 = to_row(
[('primeiro', 12)])
row2 = to_row(
[('segundo', 12)])
row3 = to_row(
[('terceiro', 12)])
row4 = to_row(
[('quarto', 12)])
row5 = to_row(
[('quinto', 12)])
row6 = to_row(
[('sexto', 12)])
row7 = to_row(
[('setimo', 12)])
row8 = to_row(
[('oitavo', 12)])
row9 = to_row(
[('nono', 12)])
row10 = to_row(
[('decimo', 12)])
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(_(''),
row1, row2, row3, row4, row5,
row6, row7, row8, row9, row10,
form_actions(label='Atualizar'))
Fix #414 ordem resumo (#1109) * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * add arq sql no instalador de reutil. da app sapl * Conserta erro teste * fix #1092 - Altera o destino dos documentos migrados (#1093) * Altera o destino dos documentos migrados Signed-off-by: Luciano Almeida &lt;lucianoalmeida@interlegis.leg.br&gt; * Usa a data de matéria em doc acessório Signed-off-by: Luciano Almeida &lt;lucianoalmeida@interlegis.leg.br&gt; * ajusta caminho public private * Faz a ordenação para o arquivo impresso * fix #1098 (#1107) * Padroniza tamanho foto para mesa (#1088) * Adiciona permissão a tela de ordenação * Bug Fix * Fix 1104 (#1110) * adiciona poppler-utils (#1113) * Adiciona poppler-utils, onde está pdftotext que é usado por indexador. * redesenha a exibição dos votos na tela de votação nominal #1100 (#1101) * resultado de votação nominal * Update nominal_detail.html * Update nominal_edit.html * Adiciona URL do Interlegis ao rodapé da página. * Somente mostra interessado se Doc Adm e mostra Autor em listagem de pesquisa * HOT-FIX: identificador de protocolo errado * Atualiza código devido a deprecated na drf * HOT-FIX: possível fix para erro de render no search index * Add pesquisa em Autor pelo campo ativo de parlamentar * Gera migração referente ao commit #285d32e Signed-off-by: Eliseu Egewarth &lt;eliseuegewarth@gmail.com&gt; * Add bsc param de Autor nos Models lig via GR a Autor * campo texto para autor documentos acessorios em lote (#1117) * Conserto paliativo para doc acessorio em lote * Conserta DocumentoAcessorioEmLote * fix conserta acessorio em lote (#1119) * Melhorias no detail de protocolo * Captura erro de indexação de arquivo. * Fix #1111 * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * Conserta erro teste * Faz a ordenação para o arquivo impresso * Adiciona permissão a tela de ordenação * Faz o merge das migrations
8 years ago
)
def clean(self):
super(ResumoOrdenacaoForm, self).clean()
if not self.is_valid():
return self.cleaned_data
Fix #414 ordem resumo (#1109) * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * add arq sql no instalador de reutil. da app sapl * Conserta erro teste * fix #1092 - Altera o destino dos documentos migrados (#1093) * Altera o destino dos documentos migrados Signed-off-by: Luciano Almeida &lt;lucianoalmeida@interlegis.leg.br&gt; * Usa a data de matéria em doc acessório Signed-off-by: Luciano Almeida &lt;lucianoalmeida@interlegis.leg.br&gt; * ajusta caminho public private * Faz a ordenação para o arquivo impresso * fix #1098 (#1107) * Padroniza tamanho foto para mesa (#1088) * Adiciona permissão a tela de ordenação * Bug Fix * Fix 1104 (#1110) * adiciona poppler-utils (#1113) * Adiciona poppler-utils, onde está pdftotext que é usado por indexador. * redesenha a exibição dos votos na tela de votação nominal #1100 (#1101) * resultado de votação nominal * Update nominal_detail.html * Update nominal_edit.html * Adiciona URL do Interlegis ao rodapé da página. * Somente mostra interessado se Doc Adm e mostra Autor em listagem de pesquisa * HOT-FIX: identificador de protocolo errado * Atualiza código devido a deprecated na drf * HOT-FIX: possível fix para erro de render no search index * Add pesquisa em Autor pelo campo ativo de parlamentar * Gera migração referente ao commit #285d32e Signed-off-by: Eliseu Egewarth &lt;eliseuegewarth@gmail.com&gt; * Add bsc param de Autor nos Models lig via GR a Autor * campo texto para autor documentos acessorios em lote (#1117) * Conserto paliativo para doc acessorio em lote * Conserta DocumentoAcessorioEmLote * fix conserta acessorio em lote (#1119) * Melhorias no detail de protocolo * Captura erro de indexação de arquivo. * Fix #1111 * Divide o template de resumo em blocos * Cria a funcionalidade * Pequena correcao * Conserta erro teste * Faz a ordenação para o arquivo impresso * Adiciona permissão a tela de ordenação * Faz o merge das migrations
8 years ago
cleaned_data = self.cleaned_data
for c1 in cleaned_data:
i = 0
for c2 in cleaned_data:
if cleaned_data[str(c1)] == cleaned_data[str(c2)]:
i = i + 1
if i > 1:
raise ValidationError(_(
'Não é possível ter campos repetidos'))
return self.cleaned_data