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.

679 lines
24 KiB

import json
from datetime import date, datetime
from braces.views import FormValidMessageMixin
from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse
Fix #316 316 login simples (#328) * Inicia implementação do login simples * Cria o Login * Melhora a mensagem de erro no Login * Ajusta migração para novas mudanças das models Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Concerta problema de duplicidade Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Arruma conflito com master e traduz textos de info Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Remove global e corrige alguns textos Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Arruma exclusão de stubs desnecessários Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Arruma problema de merge no makemigrations Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Cria função para pegar fields_dict Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Retira código desnecessário * Arruma exclusão de stubs desnecessários Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Arruma problema de merge no makemigrations Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Cria função para pegar fields_dict Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Adiciona datas invalidas à model ProblemaMigracao Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Arruma imports Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Adiciona a ativação/desativação do virtualenv * Ajusta sugestões de correção do PR Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Exclui arquivo de migrate pra resolver conflito Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * Concerta alguns problemas de model e admin Signed-off-by: Luciano Almeida <lucianoalmeida@interlegis.leg.br> * FIX: substitui null por '' ao limpar autor * Init crud legislação citada * Tests * Init crud legislacao * Init crud legislação citada * Valida legislação repetida * Valida legislação igual * Ajeita testes * Init Crud Tramitação * Valida ultima tramitação * Ordena tramitações * Teste delete * Termina validações para deletar uma tramitação * Fix testes * Fix #381 * Adiciona placeholder * Estruturar View e template de pendências. * Refat dos tipos de pendências e rend. dos vides * Alteração na reenderização da mensagem dos Vides. * Ajuste na integração com Compilação * Criar Filtro em Nível de Notificação de Pendências * Fix #398 * Faz o merge de migrations de materia * Fix #397 - Apresentar Filiação Partidária Atual * HOT FIX: filiação vem em ordem decrescente: first() ao invés de last() * Fix #407 * Adiciona o campo Natureza de Processo * Resolve alguns erros apontados pelo check_qa * Adiciona mais um 'guarda' pra preservar ordem decrescente de filiação * Init crud legislação citada * Comeca a implementacao do travis * Modifica o travis * Insere a verificacao com o Travis apos testes em um fork do sapl * Faz a integracao continua com o travis funcionar corretamente * Fix #355 crud relatoria * Init crud legislação citada * Init Crud Tramitação * Init crud relatoria * Disabilita localização atual * Valida localização atual * Fix qa e testes * Init crud documento acessório * Monta layout para autor * Adicona busca de autor na criação de documento acessório * Esconde campo não usado de autor * Define layout documento acessório * Ajusta botão de salvar e cancelar * Fix qa * Adiciona edição de documento acessório * Fix qa e testes * Init crud legislação citada * Init Crud Tramitação * Init crud relatoria * Fix qa e testes * Fix url * Adiciona campo de arquivo em Documento Acessório * Fix #391 refatora pesquisa doc adm django filter (#417) * Refatora a Pesquisa de Documento Adm * Finaliza a refatoracao da pesquisa por documento administrativo * Cria o botao de pesquisa por Documento Administrativo * Faz ir para o menu principal quando clica na logoda aplicacao * Arruma PEP8 * Arruma alguns detalhes * Faz modificacoes propostas pela issue 418 fix #418 * Fix #429 - ordem descrescente de mandato parlamentar (#437) * Ordena Mandato por data_inicio de Legislatura em ordem decrescente * Fix #402 - checagem de filiação partidária (#423) * Fix #402 - checagem de filiação partidária * WIP * WIP * WIP * WIP * Init crud legislação citada * Disabilita localização atual * Valida localização atual * Fix qa e testes * Init crud documento acessório * Monta layout para autor * Adicona busca de autor na criação de documento acessório * Esconde campo não usado de autor * Define layout documento acessório * Fix qa * Remove duplicidade do helper * Modifica row dos botões * Init crud relatoria * Disabilita localização atual * Valida localização atual * Init crud legislação citada * Init Crud Tramitação * Init crud relatoria * Fix qa e testes * Init crud documento acessório * Monta layout para autor * Adicona busca de autor na criação de documento acessório * Define layout documento acessório * Fix url * Adiciona campo de arquivo em Documento Acessório * Init crud proposicao * Muda url de proposição e valida tipo de proposicao para adição de matéria * Muda data inválida para elaboração * Ordena listagem pela data de envio * Valida se uma proposição está sendo enviada ou criada * Valida remoção ou retorno de proposição * Remove código desnecessário * Fix qa * Fix testes * Inicia implementação do login simples * Cria o Login * Melhora a mensagem de erro no Login * Faz algumas das mudancas apontadas na revisao * Tenta arrumar a quebra nos testes * Faz com que todos os testes passem * Muda detalhes na url do template
9 years ago
from django.db.models import Max, Q
9 years ago
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _
from django.views.generic import CreateView, DetailView, FormView, ListView
from django.views.generic.base import TemplateView
from django_filters.views import FilterView
from crud.base import Crud, make_pagination
from materia.models import Proposicao, TipoMateriaLegislativa
from sapl.utils import create_barcode, get_client_ip
from .forms import (AnularProcoloAdmForm, DocumentoAcessorioAdministrativoForm,
DocumentoAdministrativoFilterSet,
DocumentoAdministrativoForm, ProposicaoSimpleForm,
ProtocoloDocumentForm, ProtocoloFilterSet,
ProtocoloMateriaForm, TramitacaoAdmForm)
from .models import (Autor, DocumentoAcessorioAdministrativo,
DocumentoAdministrativo, Protocolo,
StatusTramitacaoAdministrativo,
TipoDocumentoAdministrativo, TramitacaoAdministrativo)
TipoDocumentoAdministrativoCrud = Crud.build(TipoDocumentoAdministrativo,
'')
DocumentoAdministrativoCrud = Crud.build(DocumentoAdministrativo, '')
DocumentoAcessorioAdministrativoCrud = Crud.build(
DocumentoAcessorioAdministrativo, '')
StatusTramitacaoAdministrativoCrud = Crud.build(
StatusTramitacaoAdministrativo, '')
TramitacaoAdministrativoCrud = Crud.build(TramitacaoAdministrativo, '')
ProtocoloDocumentoCrud = Crud.build(Protocolo, '')
# FIXME precisa de uma chave diferente para o layout
ProtocoloMateriaCrud = Crud.build(Protocolo, '')
class ProtocoloPesquisaView(FilterView):
model = Protocolo
filterset_class = ProtocoloFilterSet
paginate_by = 10
def get_filterset_kwargs(self, filterset_class):
super(ProtocoloPesquisaView,
self).get_filterset_kwargs(filterset_class)
kwargs = {'data': self.request.GET or None}
qs = self.get_queryset()
qs = qs.distinct()
kwargs.update({
'queryset': qs,
})
return kwargs
def get_context_data(self, **kwargs):
context = super(ProtocoloPesquisaView,
self).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
return context
def get(self, request, *args, **kwargs):
super(ProtocoloPesquisaView, self).get(request)
# Se a pesquisa estiver quebrando com a paginação
# Olhe esta função abaixo
# Provavelmente você criou um novo campo no Form/FilterSet
# Então a ordem da URL está diferente
data = self.filterset.data
if (data and data.get('numero') is not None):
url = "&"+str(self.request.environ['QUERY_STRING'])
if url.startswith("&page"):
ponto_comeco = url.find('numero=') - 1
url = url[ponto_comeco:]
else:
url = ''
self.filterset.form.fields['o'].label = _('Ordenação')
context = self.get_context_data(filter=self.filterset,
object_list=self.object_list,
filter_url=url,
numero_res=len(self.object_list)
)
return self.render_to_response(context)
class ProtocoloListView(ListView):
template_name = 'protocoloadm/protocolo_list.html'
context_object_name = 'protocolos'
model = Protocolo
paginate_by = 10
def get_queryset(self):
kwargs = self.request.session['kwargs']
return Protocolo.objects.filter(
**kwargs)
def get_context_data(self, **kwargs):
context = super(ProtocoloListView, self).get_context_data(
**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
return context
class AnularProtocoloAdmView(CreateView):
template_name = 'protocoloadm/anular_protocoloadm.html'
form_class = AnularProcoloAdmForm
form_valid_message = _('Protocolo anulado com sucesso!')
def get_success_url(self):
9 years ago
return reverse('protocoloadm:protocolo')
def get_initial(self):
initial_data = {}
initial_data['user_anulacao'] = self.request.user.username
initial_data['ip_anulacao'] = get_client_ip(self.request)
return initial_data
def form_valid(self, form):
protocolo = Protocolo.objects.get(numero=form.cleaned_data['numero'],
ano=form.cleaned_data['ano'])
protocolo.anulado = True
protocolo.justificativa_anulacao = (
form.cleaned_data['justificativa_anulacao'])
protocolo.user_anulacao = form.cleaned_data['user_anulacao']
protocolo.ip_anulacao = form.cleaned_data['ip_anulacao']
protocolo.save()
return redirect(self.get_success_url())
class ProtocoloDocumentoView(FormValidMessageMixin, CreateView):
template_name = "protocoloadm/protocolar_documento.html"
form_class = ProtocoloDocumentForm
form_valid_message = _('Protocolo cadastrado com sucesso!')
def get_success_url(self):
9 years ago
return reverse('protocoloadm:protocolo')
def form_valid(self, form):
f = form.save(commit=False)
if form.cleaned_data['numeracao'] == '1':
numeracao = Protocolo.objects.filter(
ano=date.today().year).aggregate(Max('numero'))
elif form.cleaned_data['numeracao'] == '2':
numeracao = Protocolo.objects.all().aggregate(Max('numero'))
if numeracao['numero__max'] is None:
numeracao['numero__max'] = 0
f.tipo_processo = '0' # TODO validar o significado
f.anulado = False
f.numero = numeracao['numero__max'] + 1
f.ano = datetime.now().year
f.data = datetime.now().strftime('%Y-%m-%d')
f.hora = datetime.now().strftime('%H:%M')
f.timestamp = datetime.now().strftime("%Y-%m-%d %H:%M")
f.save()
return redirect(self.get_success_url())
class CriarDocumentoProtocolo(CreateView):
template_name = "protocoloadm/criar_documento.html"
form_class = DocumentoAdministrativoForm
def get_initial(self):
numero = self.kwargs['pk']
ano = self.kwargs['ano']
protocolo = Protocolo.objects.get(ano=ano, numero=numero)
return self.criar_documento(protocolo)
def get_success_url(self):
return reverse('protocoloadm:protocolo_mostrar',
kwargs={'pk': self.kwargs['pk'],
'ano': self.kwargs['ano']})
def criar_documento(self, protocolo):
numero = Protocolo.objects.filter(
tipo_documento=protocolo.tipo_documento,
ano=protocolo.ano,
anulado=False).aggregate(Max('numero'))
doc = {}
doc['tipo'] = protocolo.tipo_documento
doc['ano'] = protocolo.ano
doc['data'] = protocolo.data
doc['numero_protocolo'] = protocolo.numero
doc['assunto'] = protocolo.assunto_ementa
doc['interessado'] = protocolo.interessado
doc['numero'] = numero['numero__max']
if doc['numero'] is None:
doc['numero'] = 1
else:
doc['numero'] = doc['numero'] + 1
return doc
class ProtocoloMostrarView(TemplateView):
template_name = "protocoloadm/protocolo_mostrar.html"
def get_context_data(self, **kwargs):
context = super(ProtocoloMostrarView, self).get_context_data(**kwargs)
numero = self.kwargs['pk']
ano = self.kwargs['ano']
protocolo = Protocolo.objects.get(ano=ano, numero=numero)
context['protocolo'] = protocolo
return context
class ComprovanteProtocoloView(TemplateView):
template_name = "protocoloadm/comprovante.html"
def get_context_data(self, **kwargs):
context = super(ComprovanteProtocoloView, self).get_context_data(
**kwargs)
numero = self.kwargs['pk']
ano = self.kwargs['ano']
protocolo = Protocolo.objects.get(ano=ano, numero=numero)
# numero is string, padd with zeros left via .zfill()
base64_data = create_barcode(numero.zfill(6))
barcode = 'data:image/png;base64,{0}'.format(base64_data)
autenticacao = _("** NULO **")
if not protocolo.anulado:
# data is not i18n sensitive 'Y-m-d' is the right format.
autenticacao = str(protocolo.tipo_processo) + \
protocolo.data.strftime("%Y/%m/%d") + \
str(protocolo.numero).zfill(6)
context.update({"protocolo": protocolo,
"barcode": barcode,
"autenticacao": autenticacao})
return context
class ProtocoloMateriaView(CreateView):
template_name = "protocoloadm/protocolar_materia.html"
form_class = ProtocoloMateriaForm
form_valid_message = _('Matéria cadastrada com sucesso!')
def get_success_url(self):
return reverse('protocoloadm:protocolo')
def form_valid(self, form):
if self.request.POST['numeracao'] == '1':
numeracao = Protocolo.objects.filter(
ano=date.today().year).aggregate(Max('numero'))
else:
numeracao = Protocolo.objects.all().aggregate(Max('numero'))
if numeracao is None:
numeracao['numero__max'] = 0
protocolo = Protocolo()
protocolo.numero = numeracao['numero__max'] + 1
protocolo.ano = datetime.now().year
protocolo.data = datetime.now().strftime("%Y-%m-%d")
protocolo.hora = datetime.now().strftime("%H:%M")
protocolo.timestamp = datetime.now().strftime("%Y-%m-%d %H:%M")
protocolo.tipo_protocolo = self.request.POST['tipo_protocolo']
protocolo.tipo_processo = '0' # TODO validar o significado
if form.cleaned_data['autor']:
protocolo.autor = form.cleaned_data['autor']
protocolo.anulado = False
protocolo.tipo_materia = TipoMateriaLegislativa.objects.get(
id=self.request.POST['tipo_materia'])
protocolo.numero_paginas = self.request.POST['numero_paginas']
protocolo.observacao = self.request.POST['observacao']
protocolo.save()
return redirect(self.get_success_url())
9 years ago
# TODO: move to Proposicao app
class ProposicaoReceberView(TemplateView):
template_name = "protocoloadm/proposicao_receber.html"
9 years ago
class ProposicoesNaoRecebidasView(ListView):
template_name = "protocoloadm/proposicao_naorecebidas.html"
model = Proposicao
paginate_by = 10
def get_queryset(self):
return Proposicao.objects.filter(data_envio__isnull=False, status='E')
9 years ago
class ProposicoesNaoIncorporadasView(ListView):
template_name = "protocoloadm/proposicao_naoincorporadas.html"
model = Proposicao
paginate_by = 10
def get_queryset(self):
return Proposicao.objects.filter(data_envio__isnull=False,
data_devolucao__isnull=False,
status='D')
class ProposicoesIncorporadasView(ListView):
template_name = "protocoloadm/proposicao_incorporadas.html"
model = Proposicao
paginate_by = 10
def get_queryset(self):
return Proposicao.objects.filter(data_envio__isnull=False,
data_recebimento__isnull=False,
status='I')
9 years ago
class ProposicaoView(TemplateView):
template_name = "protocoloadm/proposicoes.html"
9 years ago
class ProposicaoDetailView(DetailView):
template_name = "protocoloadm/proposicao_view.html"
9 years ago
model = Proposicao
def get(self, request, *args, **kwargs):
9 years ago
proposicao = Proposicao.objects.get(id=kwargs['pk'])
data = { # 'ano': proposicao.ano, # TODO: FIX
'tipo': proposicao.tipo.descricao, # TODO: FIX
'materia': proposicao.materia,
'numero_proposicao': proposicao.numero_proposicao,
'data_envio': proposicao.data_envio,
'data_recebimento': proposicao.data_recebimento,
'descricao': proposicao.descricao}
form = ProposicaoSimpleForm(initial=data)
return self.render_to_response({'form': form})
def get_context_data(self, **kwargs):
context = super(ProposicaoView, self).get_context_data(**kwargs)
context['form'] = ProposicaoSimpleForm
9 years ago
return context
class PesquisarDocumentoAdministrativoView(FilterView):
model = DocumentoAdministrativo
filterset_class = DocumentoAdministrativoFilterSet
paginate_by = 10
def get_filterset_kwargs(self, filterset_class):
super(PesquisarDocumentoAdministrativoView,
self).get_filterset_kwargs(filterset_class)
kwargs = {'data': self.request.GET or None}
qs = self.get_queryset()
qs = qs.distinct()
kwargs.update({
'queryset': qs,
})
return kwargs
def get_context_data(self, **kwargs):
context = super(PesquisarDocumentoAdministrativoView,
self).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
return context
def get(self, request, *args, **kwargs):
super(PesquisarDocumentoAdministrativoView, self).get(request)
# Se a pesquisa estiver quebrando com a paginação
# Olhe esta função abaixo
# Provavelmente você criou um novo campo no Form/FilterSet
# Então a ordem da URL está diferente
data = self.filterset.data
if (data and data.get('tipo') is not None):
url = "&" + str(self.request.environ['QUERY_STRING'])
if url.startswith("&page"):
ponto_comeco = url.find('tipo=') - 1
url = url[ponto_comeco:]
else:
url = ''
self.filterset.form.fields['o'].label = _('Ordenação')
context = self.get_context_data(filter=self.filterset,
object_list=self.object_list,
filter_url=url,
numero_res=len(self.object_list)
)
return self.render_to_response(context)
class DetailDocumentoAdministrativo(DetailView):
template_name = "protocoloadm/detail_doc_adm.html"
def get(self, request, *args, **kwargs):
documento = DocumentoAdministrativo.objects.get(
id=self.kwargs['pk'])
form = DocumentoAdministrativoForm(
instance=documento)
return self.render_to_response({
'form': form,
'pk': kwargs['pk']})
def post(self, request, *args, **kwargs):
if 'Salvar' in request.POST:
form = DocumentoAdministrativoForm(request.POST)
if form.is_valid():
doc = form.save(commit=False)
if 'texto_integral' in request.FILES:
doc.texto_integral = request.FILES['texto_integral']
doc.save()
return self.form_valid(form)
else:
return self.render_to_response({'form': form})
elif 'Excluir' in request.POST:
DocumentoAdministrativo.objects.get(
id=kwargs['pk']).delete()
return HttpResponseRedirect(self.get_success_delete())
return HttpResponseRedirect(self.get_success_url())
def get_success_delete(self):
return reverse('protocoloadm:pesq_doc_adm')
def get_success_url(self):
return reverse('protocoloadm:detail_doc_adm', kwargs={
'pk': self.kwargs['pk']})
class DocumentoAcessorioAdministrativoEditView(FormView):
template_name = "protocoloadm/documento_acessorio_administrativo_edit.html"
def get(self, request, *args, **kwargs):
doc = DocumentoAdministrativo.objects.get(
id=kwargs['pk'])
doc_ace = DocumentoAcessorioAdministrativo.objects.get(
id=kwargs['ano'])
form = DocumentoAcessorioAdministrativoForm(instance=doc_ace,
excluir=True)
return self.render_to_response({'pk': self.kwargs['pk'],
'doc': doc,
'doc_ace': doc_ace,
'form': form})
def post(self, request, *args, **kwargs):
form = DocumentoAcessorioAdministrativoForm(request.POST, excluir=True)
doc_ace = DocumentoAcessorioAdministrativo.objects.get(
id=kwargs['ano'])
if form.is_valid():
if 'Salvar' in request.POST:
if 'arquivo' in request.FILES:
doc_ace.arquivo = request.FILES['arquivo']
doc_ace.documento = DocumentoAdministrativo.objects.get(
id=kwargs['pk'])
doc_ace.tipo = TipoDocumentoAdministrativo.objects.get(
id=form.data['tipo'])
doc_ace.nome = form.data['nome']
doc_ace.autor = form.data['autor']
doc_ace.data = datetime.strptime(
form.data['data'], '%d/%m/%Y')
doc_ace.assunto = form.data['assunto']
doc_ace.save()
elif 'Excluir' in request.POST:
doc_ace.delete()
return self.form_valid(form)
else:
return self.form_invalid(form)
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('protocoloadm:doc_ace_adm', kwargs={'pk': pk})
class DocumentoAcessorioAdministrativoView(FormView):
template_name = "protocoloadm/documento_acessorio_administrativo.html"
def get(self, request, *args, **kwargs):
form = DocumentoAcessorioAdministrativoForm()
doc = DocumentoAdministrativo.objects.get(
id=kwargs['pk'])
doc_ace_null = ''
doc_acessorio = DocumentoAcessorioAdministrativo.objects.filter(
documento_id=kwargs['pk'])
if not doc_acessorio:
doc_ace_null = _('Nenhum documento acessório \
cadastrado para este processo.')
return self.render_to_response({'pk': kwargs['pk'],
'doc': doc,
'doc_ace': doc_acessorio,
'doc_ace_null': doc_ace_null,
'form': form})
def post(self, request, *args, **kwargs):
form = DocumentoAcessorioAdministrativoForm(request.POST)
if form.is_valid():
doc_ace = form.save(commit=False)
if 'arquivo' in request.FILES:
doc_ace.arquivo = request.FILES['arquivo']
doc = DocumentoAdministrativo.objects.get(
id=kwargs['pk'])
doc_ace.documento = doc
doc_ace.save()
return self.form_valid(form)
else:
9 years ago
return self.form_invalid(form)
9 years ago
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('protocoloadm:doc_ace_adm', kwargs={'pk': pk})
class TramitacaoAdmView(FormView):
template_name = "protocoloadm/tramitacao.html"
def get(self, request, *args, **kwargs):
pk = kwargs['pk']
documento = DocumentoAdministrativo.objects.get(id=pk)
tramitacoes = TramitacaoAdministrativo.objects.filter(
documento=documento).order_by('-data_tramitacao')
9 years ago
return self.render_to_response({'documento': documento,
'tramitacoes': tramitacoes})
class TramitacaoAdmIncluirView(FormView):
template_name = "protocoloadm/tramitacao_incluir.html"
def get(self, request, *args, **kwargs):
pk = kwargs['pk']
documento = DocumentoAdministrativo.objects.get(id=pk)
data = {'documento': documento}
form = TramitacaoAdmForm(initial=data)
return self.render_to_response({'documento': documento, 'form': form})
def post(self, request, *args, **kwargs):
pk = kwargs['pk']
form = TramitacaoAdmForm(request.POST or None)
if form.is_valid():
tramitacao = form.save(commit=False)
tramitacao.ultima = False
tramitacao.save()
return HttpResponseRedirect(reverse(
'protocoloadm:tramitacao_adm', kwargs={'pk': pk}))
else:
return self.form_invalid(form)
class TramitacaoAdmEditView(FormView):
template_name = "protocoloadm/tramitacao_edit.html"
def get(self, request, *args, **kwargs):
pk = kwargs['pk']
tramitacao = TramitacaoAdministrativo.objects.get(id=pk)
documento = tramitacao.documento
form = TramitacaoAdmForm(instance=tramitacao)
return self.render_to_response({'documento': documento, 'form': form})
def post(self, request, *args, **kwargs):
pk = kwargs['pk']
tramitacao = TramitacaoAdministrativo.objects.get(id=pk)
form = TramitacaoAdmForm(request.POST, instance=tramitacao)
if form.is_valid():
tramitacao = form.save(commit=False)
tramitacao.ultima = False
tramitacao.save()
9 years ago
return HttpResponseRedirect(
reverse('protocoloadm:tramitacao_adm',
kwargs={'pk': tramitacao.documento.id}))
else:
return self.form_invalid(form)
class TramitacaoAdmDeleteView(DetailView):
template_name = "protocoloadm/tramitacao.html"
def get(self, request, *args, **kwargs):
pk = kwargs['pk']
oid = kwargs['oid']
documento = DocumentoAdministrativo.objects.get(id=pk)
tramitacao = TramitacaoAdministrativo.objects.get(id=oid)
tramitacao.delete()
tramitacoes = TramitacaoAdministrativo.objects.filter(
documento=documento)
9 years ago
return self.render_to_response({'documento': documento,
'tramitacoes': tramitacoes})
def get_nome_autor(request):
nome_autor = ''
if request.method == 'GET':
id = request.GET.get('id', '')
try:
autor = Autor.objects.get(pk=id)
if autor.parlamentar:
nome_autor = autor.parlamentar.nome_parlamentar
elif autor.comissao:
nome_autor = autor.comissao.nome
except ObjectDoesNotExist:
pass
return HttpResponse("{\"nome\":\"" + nome_autor + "\"}",
content_type="application/json; charset=utf-8")
def pesquisa_autores(request):
q = ''
if request.method == 'GET':
q = request.GET.get('q', '')
autor = Autor.objects.filter(
Q(nome__icontains=q) |
Q(parlamentar__nome_parlamentar__icontains=q) |
Q(comissao__nome__icontains=q)
)
autores = []
for a in autor:
nome = ''
if a.nome:
nome = a.nome
elif a.parlamentar:
nome = a.parlamentar.nome_parlamentar
elif a.comissao:
nome = a.comissao.nome
autores.append((a.id, nome))
autores = sorted(autores, key=lambda x: x[1])
return HttpResponse(json.dumps(autores,
sort_keys=True,
ensure_ascii=False),
content_type="application/json; charset=utf-8")