|
|
|
import os
|
|
|
|
from datetime import datetime
|
|
|
|
from random import choice
|
|
|
|
from string import ascii_letters, digits
|
|
|
|
|
|
|
|
from django.contrib import messages
|
|
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
|
|
from django.core.mail import send_mail
|
|
|
|
from django.core.urlresolvers import reverse
|
|
|
|
from django.http.response import HttpResponseRedirect
|
|
|
|
from django.shortcuts import redirect
|
|
|
|
from django.template import Context, loader
|
|
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from django.views.generic import CreateView, FormView, ListView, TemplateView
|
|
|
|
|
|
|
|
import crud.base
|
|
|
|
from base.models import CasaLegislativa
|
|
|
|
from comissoes.models import Comissao, Composicao
|
|
|
|
from compilacao.views import IntegracaoTaView
|
|
|
|
from crud.base import Crud, make_pagination
|
|
|
|
from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica
|
|
|
|
from parlamentares.models import Partido
|
|
|
|
from sapl.utils import get_base_url
|
|
|
|
|
|
|
|
from .forms import (AcompanhamentoMateriaForm, AutoriaForm,
|
|
|
|
DespachoInicialForm, DocumentoAcessorioForm,
|
|
|
|
LegislacaoCitadaForm, MateriaAnexadaForm,
|
|
|
|
MateriaLegislativaPesquisaForm, NumeracaoForm,
|
|
|
|
ProposicaoForm, RelatoriaForm, TramitacaoForm)
|
|
|
|
from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria,
|
|
|
|
DespachoInicial, DocumentoAcessorio, MateriaLegislativa,
|
|
|
|
Numeracao, Orgao, Origem, Proposicao, RegimeTramitacao,
|
|
|
|
Relatoria, StatusTramitacao, TipoAutor, TipoDocumento,
|
|
|
|
TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao,
|
|
|
|
Tramitacao, UnidadeTramitacao)
|
|
|
|
|
|
|
|
OrigemCrud = Crud.build(Origem, 'origem')
|
|
|
|
TipoMateriaCrud = Crud.build(TipoMateriaLegislativa,
|
|
|
|
'tipo_materia_legislativa')
|
|
|
|
RegimeTramitacaoCrud = Crud.build(RegimeTramitacao, 'regime_tramitacao')
|
|
|
|
TipoDocumentoCrud = Crud.build(TipoDocumento, 'tipo_documento')
|
|
|
|
TipoFimRelatoriaCrud = Crud.build(TipoFimRelatoria, 'fim_relatoria')
|
|
|
|
AnexadaCrud = Crud.build(Anexada, '')
|
|
|
|
TipoAutorCrud = Crud.build(TipoAutor, 'tipo_autor')
|
|
|
|
AutorCrud = Crud.build(Autor, 'autor')
|
|
|
|
AutoriaCrud = Crud.build(Autoria, '')
|
|
|
|
DocumentoAcessorioCrud = Crud.build(DocumentoAcessorio, '')
|
|
|
|
NumeracaoCrud = Crud.build(Numeracao, '')
|
|
|
|
OrgaoCrud = Crud.build(Orgao, 'orgao')
|
|
|
|
RelatoriaCrud = Crud.build(Relatoria, '')
|
|
|
|
TipoProposicaoCrud = Crud.build(TipoProposicao, 'tipo_proposicao')
|
|
|
|
ProposicaoCrud = Crud.build(Proposicao, '')
|
|
|
|
StatusTramitacaoCrud = Crud.build(StatusTramitacao, 'status_tramitacao')
|
|
|
|
UnidadeTramitacaoCrud = Crud.build(UnidadeTramitacao, 'unidade_tramitacao')
|
|
|
|
TramitacaoCrud = Crud.build(Tramitacao, '')
|
|
|
|
|
|
|
|
|
|
|
|
class MateriaLegislativaCrud(Crud):
|
|
|
|
model = MateriaLegislativa
|
|
|
|
help_path = 'materia_legislativa'
|
|
|
|
|
|
|
|
class BaseMixin(crud.base.BaseMixin):
|
|
|
|
list_field_names = ['tipo', 'numero', 'ano', 'data_apresentacao']
|
|
|
|
|
|
|
|
|
|
|
|
class MateriaAnexadaView(FormView):
|
|
|
|
template_name = "materia/materia_anexada.html"
|
|
|
|
form_class = MateriaAnexadaForm
|
|
|
|
form_valid_message = _('Matéria anexada com sucesso!')
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
form = MateriaAnexadaForm()
|
|
|
|
materia = MateriaLegislativa.objects.get(
|
|
|
|
id=kwargs['pk'])
|
|
|
|
anexadas = Anexada.objects.filter(
|
|
|
|
materia_principal_id=kwargs['pk'])
|
|
|
|
|
|
|
|
return self.render_to_response({'object': materia,
|
|
|
|
'anexadas': anexadas,
|
|
|
|
'form': form})
|
|
|
|
|
|
|
|
def form_invalid(self,
|
|
|
|
form,
|
|
|
|
request,
|
|
|
|
mat_principal,
|
|
|
|
anexadas,
|
|
|
|
msg='Erro ineseperado.'):
|
|
|
|
messages.add_message(request, messages.ERROR, msg)
|
|
|
|
return self.render_to_response(
|
|
|
|
{'form': form,
|
|
|
|
'object': mat_principal,
|
|
|
|
'anexadas': anexadas})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = self.get_form()
|
|
|
|
|
|
|
|
anexadas = Anexada.objects.filter(
|
|
|
|
materia_principal_id=kwargs['pk'])
|
|
|
|
mat_principal = MateriaLegislativa.objects.get(
|
|
|
|
id=kwargs['pk'])
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
tipo = form.cleaned_data['tipo']
|
|
|
|
numero = form.cleaned_data['numero']
|
|
|
|
ano = form.cleaned_data['ano']
|
|
|
|
data_anexacao = form.cleaned_data['data_anexacao']
|
|
|
|
data_desanexacao = form.cleaned_data['data_desanexacao']
|
|
|
|
|
|
|
|
try:
|
|
|
|
mat_anexada = MateriaLegislativa.objects.get(
|
|
|
|
numero=numero, ano=ano, tipo=tipo)
|
|
|
|
|
|
|
|
if mat_principal.tipo == mat_anexada.tipo:
|
|
|
|
msg = _('A matéria a ser anexada não pode ser do mesmo'
|
|
|
|
' tipo da matéria principal.')
|
|
|
|
self.form_invalid(
|
|
|
|
form, request, mat_principal, anexadas, msg)
|
|
|
|
anexada = Anexada()
|
|
|
|
anexada.materia_principal = mat_principal
|
|
|
|
anexada.materia_anexada = mat_anexada
|
|
|
|
anexada.data_anexacao = data_anexacao
|
|
|
|
if data_desanexacao:
|
|
|
|
anexada.data_desanexacao = data_desanexacao
|
|
|
|
|
|
|
|
anexada.save()
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
msg = _('A matéria a ser anexada não existe no cadastro'
|
|
|
|
' de matérias legislativas.')
|
|
|
|
self.form_invalid(form, request, mat_principal, anexadas, msg)
|
|
|
|
return self.form_valid(form)
|
|
|
|
else:
|
|
|
|
return self.render_to_response(
|
|
|
|
{'form': form,
|
|
|
|
'object': mat_principal,
|
|
|
|
'anexadas': anexadas})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:materia_anexada', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class MateriaAnexadaEditView(FormView):
|
|
|
|
template_name = "materia/materia_anexada_edit.html"
|
|
|
|
form_class = MateriaAnexadaForm
|
|
|
|
|
|
|
|
def form_invalid(self,
|
|
|
|
form,
|
|
|
|
request,
|
|
|
|
mat_principal,
|
|
|
|
msg='Erro ineseperado.'):
|
|
|
|
messages.add_message(request, messages.ERROR, msg)
|
|
|
|
return self.render_to_response(
|
|
|
|
{'form': form, 'object': mat_principal})
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
anexada = Anexada.objects.get(id=kwargs['id'])
|
|
|
|
|
|
|
|
data = {}
|
|
|
|
data['tipo'] = anexada.materia_anexada.tipo
|
|
|
|
data['numero'] = anexada.materia_anexada.numero
|
|
|
|
data['ano'] = anexada.materia_anexada.ano
|
|
|
|
data['data_anexacao'] = anexada.data_anexacao
|
|
|
|
data['data_desanexacao'] = anexada.data_desanexacao
|
|
|
|
|
|
|
|
form = MateriaAnexadaForm(initial=data, excluir=True)
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = self.get_form()
|
|
|
|
|
|
|
|
anexada = Anexada.objects.get(id=kwargs['id'])
|
|
|
|
mat_principal = MateriaLegislativa.objects.get(
|
|
|
|
id=kwargs['pk'])
|
|
|
|
if form.is_valid():
|
|
|
|
if 'Excluir' in request.POST:
|
|
|
|
anexada.delete()
|
|
|
|
return self.form_valid(form)
|
|
|
|
elif 'salvar' in request.POST:
|
|
|
|
|
|
|
|
tipo = form.cleaned_data['tipo']
|
|
|
|
numero = form.cleaned_data['numero']
|
|
|
|
ano = form.cleaned_data['ano']
|
|
|
|
data_anexacao = form.cleaned_data['data_anexacao']
|
|
|
|
|
|
|
|
if 'data_desanexacao' in request.POST:
|
|
|
|
data_desanexacao = form.cleaned_data['data_desanexacao']
|
|
|
|
|
|
|
|
try:
|
|
|
|
mat_anexada = MateriaLegislativa.objects.get(
|
|
|
|
numero=numero, ano=ano, tipo=tipo)
|
|
|
|
|
|
|
|
if mat_principal.tipo == mat_anexada.tipo:
|
|
|
|
msg = _('A matéria a ser anexada não pode ser do mesmo \
|
|
|
|
tipo da matéria principal.')
|
|
|
|
self.form_invalid(form, request, mat_principal, msg)
|
|
|
|
|
|
|
|
anexada.materia_principal = mat_principal
|
|
|
|
anexada.materia_anexada = mat_anexada
|
|
|
|
anexada.data_anexacao = data_anexacao
|
|
|
|
|
|
|
|
if data_desanexacao:
|
|
|
|
anexada.data_desanexacao = data_desanexacao
|
|
|
|
|
|
|
|
anexada.save()
|
|
|
|
return self.form_valid(form)
|
|
|
|
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
msg = _('A matéria a ser anexada não existe no cadastro \
|
|
|
|
de matérias legislativas.')
|
|
|
|
self.form_invalid(form, request, mat_principal, msg)
|
|
|
|
else:
|
|
|
|
return self.render_to_response(
|
|
|
|
{'form': form,
|
|
|
|
'materia': mat_principal})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:materia_anexada', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class DespachoInicialView(CreateView):
|
|
|
|
template_name = "materia/despacho_inicial.html"
|
|
|
|
form_class = DespachoInicialForm
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
despacho = DespachoInicial.objects.filter(materia_id=materia.id)
|
|
|
|
form = DespachoInicialForm()
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'despachos': despacho})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = self.get_form()
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
despacho = DespachoInicial.objects.filter(materia_id=materia.id)
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
despacho = DespachoInicial()
|
|
|
|
despacho.comissao = form.cleaned_data['comissao']
|
|
|
|
despacho.materia = materia
|
|
|
|
despacho.save()
|
|
|
|
return redirect(self.get_success_url())
|
|
|
|
else:
|
|
|
|
return self.render_to_response({'form': form,
|
|
|
|
'object': materia,
|
|
|
|
'despachos': despacho})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:despacho_inicial', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class DespachoInicialEditView(CreateView):
|
|
|
|
template_name = "materia/despacho_inicial_edit.html"
|
|
|
|
form_class = DespachoInicialForm
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
despacho = DespachoInicial.objects.get(id=kwargs['id'])
|
|
|
|
form = DespachoInicialForm(instance=despacho, excluir=True)
|
|
|
|
|
|
|
|
return self.render_to_response({'object': materia, 'form': form})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = self.get_form()
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
despacho = DespachoInicial.objects.get(id=kwargs['id'])
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
if 'Excluir' in request.POST:
|
|
|
|
despacho.delete()
|
|
|
|
elif 'salvar' in request.POST:
|
|
|
|
despacho.comissao = form.cleaned_data['comissao']
|
|
|
|
despacho.materia = materia
|
|
|
|
despacho.save()
|
|
|
|
return redirect(self.get_success_url())
|
|
|
|
else:
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'despacho': despacho,
|
|
|
|
'comissoes': Comissao.objects.all()})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:despacho_inicial', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class LegislacaoCitadaView(FormView):
|
|
|
|
template_name = "materia/legislacao_citada.html"
|
|
|
|
form_class = LegislacaoCitadaForm
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
legislacao = LegislacaoCitada.objects.filter(materia_id=kwargs['pk'])
|
|
|
|
form = LegislacaoCitadaForm()
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'legislacao': legislacao})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = LegislacaoCitadaForm(request.POST)
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
legislacao_list = LegislacaoCitada.objects.filter(
|
|
|
|
materia_id=kwargs['pk'])
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
legislacao = LegislacaoCitada()
|
|
|
|
|
|
|
|
try:
|
|
|
|
norma = NormaJuridica.objects.get(
|
|
|
|
tipo_id=form.cleaned_data['tipo'],
|
|
|
|
numero=form.cleaned_data['numero'],
|
|
|
|
ano=form.cleaned_data['ano'])
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
msg = _('Norma Juridica não existe.')
|
|
|
|
messages.add_message(request, messages.INFO, msg)
|
|
|
|
return self.render_to_response({'form': form,
|
|
|
|
'object': materia,
|
|
|
|
'legislacao': legislacao_list})
|
|
|
|
legislacao.materia = materia
|
|
|
|
legislacao.norma = norma
|
|
|
|
legislacao.disposicoes = form.cleaned_data['disposicoes']
|
|
|
|
legislacao.parte = form.cleaned_data['parte']
|
|
|
|
legislacao.livro = form.cleaned_data['livro']
|
|
|
|
legislacao.titulo = form.cleaned_data['titulo']
|
|
|
|
legislacao.capitulo = form.cleaned_data['capitulo']
|
|
|
|
legislacao.secao = form.cleaned_data['secao']
|
|
|
|
legislacao.subsecao = form.cleaned_data['subsecao']
|
|
|
|
legislacao.artigo = form.cleaned_data['artigo']
|
|
|
|
legislacao.paragrafo = form.cleaned_data['paragrafo']
|
|
|
|
legislacao.inciso = form.cleaned_data['inciso']
|
|
|
|
legislacao.alinea = form.cleaned_data['alinea']
|
|
|
|
legislacao.item = form.cleaned_data['item']
|
|
|
|
|
|
|
|
legislacao.save()
|
|
|
|
return self.form_valid(form)
|
|
|
|
else:
|
|
|
|
return self.render_to_response({'form': form,
|
|
|
|
'object': materia,
|
|
|
|
'legislacao': legislacao_list})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:legislacao_citada', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class LegislacaoCitadaEditView(FormView):
|
|
|
|
template_name = "materia/legislacao_citada_edit.html"
|
|
|
|
form_class = LegislacaoCitadaForm
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:legislacao_citada', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
legislacao = LegislacaoCitada.objects.get(id=kwargs['id'])
|
|
|
|
form = LegislacaoCitadaForm()
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'legislacao': legislacao,
|
|
|
|
'tipos_norma': TipoNormaJuridica.objects.all()})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = LegislacaoCitadaForm(request.POST)
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
legislacao = LegislacaoCitada.objects.get(id=kwargs['id'])
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
if 'excluir' in request.POST:
|
|
|
|
legislacao.delete()
|
|
|
|
return self.form_valid(form)
|
|
|
|
elif 'salvar' in request.POST:
|
|
|
|
try:
|
|
|
|
norma = NormaJuridica.objects.get(
|
|
|
|
tipo_id=form.cleaned_data['tipo'],
|
|
|
|
numero=form.cleaned_data['numero'],
|
|
|
|
ano=form.cleaned_data['ano'])
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
msg = _('Norma Juridica não existe.')
|
|
|
|
messages.add_message(request, messages.INFO, msg)
|
|
|
|
return self.render_to_response(
|
|
|
|
{'form': form,
|
|
|
|
'object': materia,
|
|
|
|
'legislacao': legislacao,
|
|
|
|
'tipos_norma': TipoNormaJuridica.objects.all()})
|
|
|
|
legislacao.materia = materia
|
|
|
|
legislacao.norma = norma
|
|
|
|
legislacao.disposicoes = form.cleaned_data['disposicoes']
|
|
|
|
legislacao.parte = form.cleaned_data['parte']
|
|
|
|
legislacao.livro = form.cleaned_data['livro']
|
|
|
|
legislacao.titulo = form.cleaned_data['titulo']
|
|
|
|
legislacao.capitulo = form.cleaned_data['capitulo']
|
|
|
|
legislacao.secao = form.cleaned_data['secao']
|
|
|
|
legislacao.subsecao = form.cleaned_data['subsecao']
|
|
|
|
legislacao.artigo = form.cleaned_data['artigo']
|
|
|
|
legislacao.paragrafo = form.cleaned_data['paragrafo']
|
|
|
|
legislacao.inciso = form.cleaned_data['inciso']
|
|
|
|
legislacao.alinea = form.cleaned_data['alinea']
|
|
|
|
legislacao.item = form.cleaned_data['item']
|
|
|
|
|
|
|
|
legislacao.save()
|
|
|
|
return self.form_valid(form)
|
|
|
|
else:
|
|
|
|
return self.render_to_response(
|
|
|
|
{'form': form,
|
|
|
|
'object': materia})
|
|
|
|
|
|
|
|
|
|
|
|
class NumeracaoView(CreateView):
|
|
|
|
template_name = "materia/numeracao.html"
|
|
|
|
form_class = NumeracaoForm
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
numeracao = Numeracao.objects.filter(materia_id=kwargs['pk'])
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': self.get_form(),
|
|
|
|
'numeracao': numeracao})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = self.get_form()
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
numeracao_list = Numeracao.objects.filter(
|
|
|
|
materia_id=kwargs['pk'])
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
numeracao = form.save(commit=False)
|
|
|
|
numeracao.materia = materia
|
|
|
|
numeracao.save()
|
|
|
|
return self.form_valid(form)
|
|
|
|
else:
|
|
|
|
return self.render_to_response({'form': form,
|
|
|
|
'object': materia,
|
|
|
|
'numeracao': numeracao_list})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:numeracao', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class NumeracaoEditView(CreateView):
|
|
|
|
template_name = "materia/numeracao_edit.html"
|
|
|
|
form_class = NumeracaoForm
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
numeracao = Numeracao.objects.get(id=kwargs['id'])
|
|
|
|
form = NumeracaoForm(instance=numeracao, excluir=True)
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'numeracao': numeracao})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = self.get_form()
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
numeracao = Numeracao.objects.get(id=kwargs['id'])
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
if 'excluir' in request.POST:
|
|
|
|
numeracao.delete()
|
|
|
|
elif 'salvar' in request.POST:
|
|
|
|
numeracao.materia = materia
|
|
|
|
numeracao.tipo_materia = form.cleaned_data['tipo_materia']
|
|
|
|
numeracao.numero_materia = form.cleaned_data['numero_materia']
|
|
|
|
numeracao.ano_materia = form.cleaned_data['ano_materia']
|
|
|
|
numeracao.data_materia = form.cleaned_data['data_materia']
|
|
|
|
numeracao.save()
|
|
|
|
return redirect(self.get_success_url())
|
|
|
|
else:
|
|
|
|
return self.render_to_response({'form': form,
|
|
|
|
'object': materia,
|
|
|
|
'numeracao': numeracao})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:numeracao', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class DocumentoAcessorioView(CreateView):
|
|
|
|
template_name = "materia/documento_acessorio.html"
|
|
|
|
form_class = DocumentoAcessorioForm
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
docs = DocumentoAcessorio.objects.filter(
|
|
|
|
materia_id=kwargs['pk']).order_by('data')
|
|
|
|
form = DocumentoAcessorioForm()
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'docs': docs})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = self.get_form()
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
docs_list = DocumentoAcessorio.objects.filter(
|
|
|
|
materia_id=kwargs['pk'])
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
documento_acessorio = form.save(commit=False)
|
|
|
|
documento_acessorio.materia = materia
|
|
|
|
documento_acessorio.save()
|
|
|
|
return self.form_valid(form)
|
|
|
|
else:
|
|
|
|
return self.render_to_response({'form': form,
|
|
|
|
'object': materia,
|
|
|
|
'docs': docs_list})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:documento_acessorio', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class AcompanhamentoConfirmarView(TemplateView):
|
|
|
|
|
|
|
|
def get_redirect_url(self):
|
|
|
|
return reverse("sessao:list_pauta_sessao")
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia_id = kwargs['pk']
|
|
|
|
hash_txt = request.GET.get('hash_txt', '')
|
|
|
|
|
|
|
|
acompanhar = AcompanhamentoMateria.objects.get(materia_id=materia_id,
|
|
|
|
hash=hash_txt)
|
|
|
|
acompanhar.confirmado = True
|
|
|
|
acompanhar.save()
|
|
|
|
|
|
|
|
return HttpResponseRedirect(self.get_redirect_url())
|
|
|
|
|
|
|
|
|
|
|
|
class AcompanhamentoExcluirView(TemplateView):
|
|
|
|
|
|
|
|
def get_redirect_url(self):
|
|
|
|
return reverse("sessao:list_pauta_sessao")
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia_id = kwargs['pk']
|
|
|
|
hash_txt = request.GET.get('hash_txt', '')
|
|
|
|
|
|
|
|
try:
|
|
|
|
AcompanhamentoMateria.objects.get(materia_id=materia_id,
|
|
|
|
hash=hash_txt).delete()
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
pass
|
|
|
|
|
|
|
|
return HttpResponseRedirect(self.get_redirect_url())
|
|
|
|
|
|
|
|
|
|
|
|
class DocumentoAcessorioEditView(CreateView):
|
|
|
|
template_name = "materia/documento_acessorio_edit.html"
|
|
|
|
form_class = DocumentoAcessorioForm
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
documento = DocumentoAcessorio.objects.get(id=kwargs['id'])
|
|
|
|
form = DocumentoAcessorioForm(instance=documento, excluir=True)
|
|
|
|
return self.render_to_response({'object': materia, 'form': form})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = self.get_form()
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
documento = DocumentoAcessorio.objects.get(id=kwargs['id'])
|
|
|
|
if form.is_valid():
|
|
|
|
if 'Excluir' in request.POST:
|
|
|
|
documento.delete()
|
|
|
|
elif 'salvar' in request.POST:
|
|
|
|
documento.materia = materia
|
|
|
|
documento.tipo = form.cleaned_data['tipo']
|
|
|
|
documento.data = form.cleaned_data['data']
|
|
|
|
documento.nome = form.cleaned_data['nome']
|
|
|
|
documento.autor = form.cleaned_data['autor']
|
|
|
|
documento.ementa = form.cleaned_data['ementa']
|
|
|
|
documento.save()
|
|
|
|
return redirect(self.get_success_url())
|
|
|
|
else:
|
|
|
|
return self.render_to_response({'form': form,
|
|
|
|
'object': materia,
|
|
|
|
'doc': documento})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:documento_acessorio', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class RelatoriaEditView(FormView):
|
|
|
|
template_name = "materia/relatoria_edit.html"
|
|
|
|
form_class = RelatoriaForm
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:relatoria', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
form = RelatoriaForm()
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
relatoria = Relatoria.objects.get(
|
|
|
|
id=kwargs['id'])
|
|
|
|
composicao = Composicao.objects.filter(
|
|
|
|
comissao=relatoria.comissao).last()
|
|
|
|
parlamentares = composicao.participacao_set.all()
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'relatoria': relatoria,
|
|
|
|
'tipo_fim_relatorias': TipoFimRelatoria.objects.all(),
|
|
|
|
'parlamentares': parlamentares})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = RelatoriaForm(request.POST)
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
relatoria = Relatoria.objects.get(id=kwargs['id'])
|
|
|
|
composicao = Composicao.objects.filter(
|
|
|
|
comissao=relatoria.comissao).last()
|
|
|
|
parlamentares = composicao.participacao_set.all()
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
if 'excluir' in request.POST:
|
|
|
|
relatoria.delete()
|
|
|
|
return self.form_valid(form)
|
|
|
|
elif 'salvar' in request.POST:
|
|
|
|
relatoria.materia = materia
|
|
|
|
relatoria.comissao = relatoria.comissao
|
|
|
|
relatoria.data_designacao_relator = form.cleaned_data[
|
|
|
|
'data_designacao_relator']
|
|
|
|
relatoria.data_destituicao_relator = form.cleaned_data[
|
|
|
|
'data_destituicao_relator']
|
|
|
|
relatoria.parlamentar = form.cleaned_data['parlamentar']
|
|
|
|
relatoria.tipo_fim_relatoria = form.cleaned_data[
|
|
|
|
'tipo_fim_relatoria']
|
|
|
|
relatoria.save()
|
|
|
|
return self.form_valid(form)
|
|
|
|
else:
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'relatoria': relatoria,
|
|
|
|
'tipo_fim_relatorias': TipoFimRelatoria.objects.all(),
|
|
|
|
'parlamentares': parlamentares})
|
|
|
|
|
|
|
|
|
|
|
|
class RelatoriaView(FormView):
|
|
|
|
template_name = "materia/relatoria.html"
|
|
|
|
form_class = RelatoriaForm
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:relatoria', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = RelatoriaForm(request.POST)
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
|
|
|
|
if not materia.tramitacao_set.all():
|
|
|
|
msg = _(
|
|
|
|
'Adicione alguma Tramitação antes de adicionar uma Comissão!')
|
|
|
|
messages.add_message(request, messages.INFO, msg)
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'tipo_fim_relatoria': TipoFimRelatoria.objects.all()
|
|
|
|
})
|
|
|
|
else:
|
|
|
|
relatorias = Relatoria.objects.filter(
|
|
|
|
materia_id=kwargs['pk']).order_by(
|
|
|
|
'-data_designacao_relator')
|
|
|
|
localizacao = Tramitacao.objects.filter(
|
|
|
|
materia=materia).last()
|
|
|
|
|
|
|
|
comissao = Comissao.objects.get(
|
|
|
|
id=localizacao.unidade_tramitacao_destino.comissao.id)
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
relatoria = form.save(commit=False)
|
|
|
|
relatoria.materia = materia
|
|
|
|
relatoria.comissao = comissao
|
|
|
|
relatoria.save()
|
|
|
|
return self.form_valid(form)
|
|
|
|
else:
|
|
|
|
try:
|
|
|
|
composicao = Composicao.objects.get(comissao=comissao)
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
msg = _('Não há composição nesta Comissão!')
|
|
|
|
messages.add_message(request, messages.INFO, msg)
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'relatorias': relatorias,
|
|
|
|
'comissao': comissao})
|
|
|
|
|
|
|
|
parlamentares = composicao.participacao_set.all()
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'relatorias': relatorias,
|
|
|
|
'comissao': comissao,
|
|
|
|
'tipo_fim_relatoria': TipoFimRelatoria.objects.all(),
|
|
|
|
'parlamentares': parlamentares})
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
relatorias = Relatoria.objects.filter(
|
|
|
|
materia_id=kwargs['pk']).order_by('-data_designacao_relator')
|
|
|
|
form = RelatoriaForm()
|
|
|
|
|
|
|
|
localizacao = Tramitacao.objects.filter(
|
|
|
|
materia=materia).last()
|
|
|
|
|
|
|
|
if not materia.tramitacao_set.all():
|
|
|
|
msg = _(
|
|
|
|
'Adicione alguma Tramitação antes de adicionar uma Comissão!')
|
|
|
|
messages.add_message(request, messages.INFO, msg)
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'relatorias': relatorias,
|
|
|
|
'tipo_fim_relatoria': TipoFimRelatoria.objects.all()
|
|
|
|
})
|
|
|
|
elif not localizacao.unidade_tramitacao_destino.comissao:
|
|
|
|
msg = _('O local atual deve ser uma Comissão!')
|
|
|
|
messages.add_message(request, messages.INFO, msg)
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'relatorias': relatorias})
|
|
|
|
else:
|
|
|
|
try:
|
|
|
|
comissao = Comissao.objects.get(
|
|
|
|
id=localizacao.unidade_tramitacao_destino.comissao.id)
|
|
|
|
composicao = Composicao.objects.filter(
|
|
|
|
comissao=comissao).last()
|
|
|
|
if not composicao:
|
|
|
|
msg = _('Não há composição nesta Comissão!')
|
|
|
|
messages.add_message(request, messages.INFO, msg)
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'relatorias': relatorias,
|
|
|
|
'comissao': comissao})
|
|
|
|
parlamentares = composicao.participacao_set.all()
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
msg = _('O local atual deve ser uma Comissão!')
|
|
|
|
messages.add_message(request, messages.INFO, msg)
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'relatorias': relatorias})
|
|
|
|
else:
|
|
|
|
composicao = Composicao.objects.filter(
|
|
|
|
comissao=comissao).last()
|
|
|
|
parlamentares = composicao.participacao_set.all()
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'relatorias': relatorias,
|
|
|
|
'comissao': comissao,
|
|
|
|
'tipo_fim_relatoria': TipoFimRelatoria.objects.all(),
|
|
|
|
'parlamentares': parlamentares})
|
|
|
|
|
|
|
|
|
|
|
|
def load_email_templates(templates, context={}):
|
|
|
|
|
|
|
|
emails = []
|
|
|
|
for t in templates:
|
|
|
|
tpl = loader.get_template(t)
|
|
|
|
email = tpl.render(Context(context))
|
|
|
|
if t.endswith(".html"):
|
|
|
|
email = email.replace('\n', '').replace('\r', '')
|
|
|
|
emails.append(email)
|
|
|
|
return emails
|
|
|
|
|
|
|
|
|
|
|
|
def criar_email_confirmacao(request, casa_legislativa, materia, hash_txt=''):
|
|
|
|
|
|
|
|
if not casa_legislativa:
|
|
|
|
raise ValueError("Casa Legislativa é obrigatória")
|
|
|
|
|
|
|
|
if not materia:
|
|
|
|
raise ValueError("Matéria é obrigatória")
|
|
|
|
|
|
|
|
# FIXME i18n
|
|
|
|
casa_nome = (casa_legislativa.nome + ' de ' +
|
|
|
|
casa_legislativa.municipio + '-' +
|
|
|
|
casa_legislativa.uf)
|
|
|
|
|
|
|
|
base_url = get_base_url(request)
|
|
|
|
materia_url = reverse('materia:acompanhar_materia',
|
|
|
|
kwargs={'pk': materia.id})
|
|
|
|
confirmacao_url = reverse('materia:acompanhar_confirmar',
|
|
|
|
kwargs={'pk': materia.id})
|
|
|
|
|
|
|
|
autores = []
|
|
|
|
for autoria in materia.autoria_set.all():
|
|
|
|
autores.append(autoria.autor.nome)
|
|
|
|
|
|
|
|
templates = load_email_templates(['email/acompanhar.txt',
|
|
|
|
'email/acompanhar.html'],
|
|
|
|
{"casa_legislativa": casa_nome,
|
|
|
|
"logotipo": casa_legislativa.logotipo,
|
|
|
|
"descricao_materia": materia.ementa,
|
|
|
|
"autoria": autores,
|
|
|
|
"hash_txt": hash_txt,
|
|
|
|
"base_url": base_url,
|
|
|
|
"materia": str(materia),
|
|
|
|
"materia_url": materia_url,
|
|
|
|
"confirmacao_url": confirmacao_url, })
|
|
|
|
return templates
|
|
|
|
|
|
|
|
|
|
|
|
def criar_email_tramitacao(request, casa_legislativa, materia, hash_txt=''):
|
|
|
|
|
|
|
|
if not casa_legislativa:
|
|
|
|
raise ValueError("Casa Legislativa é obrigatória")
|
|
|
|
|
|
|
|
if not materia:
|
|
|
|
raise ValueError("Matéria é obrigatória")
|
|
|
|
|
|
|
|
# FIXME i18n
|
|
|
|
casa_nome = (casa_legislativa.nome + ' de ' +
|
|
|
|
casa_legislativa.municipio + '-' +
|
|
|
|
casa_legislativa.uf)
|
|
|
|
|
|
|
|
base_url = get_base_url(request)
|
|
|
|
url_materia = reverse('materia:acompanhar_materia',
|
|
|
|
kwargs={'pk': materia.id})
|
|
|
|
url_excluir = reverse('materia:acompanhar_excluir',
|
|
|
|
kwargs={'pk': materia.id})
|
|
|
|
|
|
|
|
autores = []
|
|
|
|
for autoria in materia.autoria_set.all():
|
|
|
|
autores.append(autoria.autor.nome)
|
|
|
|
|
|
|
|
templates = load_email_templates(['email/tramitacao.txt',
|
|
|
|
'email/tramitacao.html'],
|
|
|
|
{"casa_legislativa": casa_nome,
|
|
|
|
"data_registro": datetime.now().strftime(
|
|
|
|
"%d/%m/%Y"),
|
|
|
|
"cod_materia": materia.id,
|
|
|
|
"logotipo": casa_legislativa.logotipo,
|
|
|
|
"descricao_materia": materia.ementa,
|
|
|
|
"autoria": autores,
|
|
|
|
"data": materia.tramitacao_set.last(
|
|
|
|
).data_tramitacao,
|
|
|
|
"status": materia.tramitacao_set.last(
|
|
|
|
).status,
|
|
|
|
"texto_acao":
|
|
|
|
materia.tramitacao_set.last().texto,
|
|
|
|
"hash_txt": hash_txt,
|
|
|
|
"materia": str(materia),
|
|
|
|
"base_url": base_url,
|
|
|
|
"materia_url": url_materia,
|
|
|
|
"excluir_url": url_excluir})
|
|
|
|
return templates
|
|
|
|
|
|
|
|
|
|
|
|
def enviar_emails(sender, recipients, messages):
|
|
|
|
'''
|
|
|
|
Recipients is a string list of email addresses
|
|
|
|
|
|
|
|
Messages is an array of dicts of the form:
|
|
|
|
{'recipient': 'address', # useless????
|
|
|
|
'subject': 'subject text',
|
|
|
|
'txt_message': 'text message',
|
|
|
|
'html_message': 'html message'
|
|
|
|
}
|
|
|
|
'''
|
|
|
|
|
|
|
|
if len(messages) == 1:
|
|
|
|
# sends an email simultaneously to all recipients
|
|
|
|
send_mail(messages[0]['subject'],
|
|
|
|
messages[0]['txt_message'],
|
|
|
|
sender,
|
|
|
|
recipients,
|
|
|
|
html_message=messages[0]['html_message'],
|
|
|
|
fail_silently=False)
|
|
|
|
|
|
|
|
elif len(recipients) > len(messages):
|
|
|
|
raise ValueError("Message list should have size 1 \
|
|
|
|
or equal recipient list size. \
|
|
|
|
recipients: %s, messages: %s" % (recipients, messages)
|
|
|
|
)
|
|
|
|
|
|
|
|
else:
|
|
|
|
# sends an email simultaneously to all reciepients
|
|
|
|
for (d, m) in zip(recipients, messages):
|
|
|
|
send_mail(m['subject'],
|
|
|
|
m['txt_message'],
|
|
|
|
sender,
|
|
|
|
[d],
|
|
|
|
html_message=m['html_message'],
|
|
|
|
fail_silently=False)
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
def do_envia_email_confirmacao(request, materia, email):
|
|
|
|
#
|
|
|
|
# Envia email de confirmacao para atualizações de tramitação
|
|
|
|
#
|
|
|
|
destinatario = AcompanhamentoMateria.objects.get(materia=materia,
|
|
|
|
email=email,
|
|
|
|
confirmado=False)
|
|
|
|
casa = CasaLegislativa.objects.first()
|
|
|
|
|
|
|
|
sender = 'sapl-test@interlegis.leg.br'
|
|
|
|
# FIXME i18n
|
|
|
|
subject = "[SAPL] " + str(materia) + " - Ative o Acompanhamento da Materia"
|
|
|
|
messages = []
|
|
|
|
recipients = []
|
|
|
|
|
|
|
|
email_texts = criar_email_confirmacao(request,
|
|
|
|
casa,
|
|
|
|
materia,
|
|
|
|
destinatario.hash,)
|
|
|
|
recipients.append(destinatario.email)
|
|
|
|
messages.append({
|
|
|
|
'recipient': destinatario.email,
|
|
|
|
'subject': subject,
|
|
|
|
'txt_message': email_texts[0],
|
|
|
|
'html_message': email_texts[1]
|
|
|
|
})
|
|
|
|
|
|
|
|
enviar_emails(sender, recipients, messages)
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
def do_envia_email_tramitacao(request, materia):
|
|
|
|
#
|
|
|
|
# Envia email de tramitacao para usuarios cadastrados
|
|
|
|
#
|
|
|
|
destinatarios = AcompanhamentoMateria.objects.filter(materia=materia,
|
|
|
|
confirmado=True)
|
|
|
|
casa = CasaLegislativa.objects.first()
|
|
|
|
|
|
|
|
sender = 'sapl-test@interlegis.leg.br'
|
|
|
|
# FIXME i18n
|
|
|
|
subject = "[SAPL] " + str(materia) + \
|
|
|
|
" - Acompanhamento de Materia Legislativa"
|
|
|
|
messages = []
|
|
|
|
recipients = []
|
|
|
|
for destinatario in destinatarios:
|
|
|
|
email_texts = criar_email_tramitacao(request,
|
|
|
|
casa,
|
|
|
|
materia,
|
|
|
|
destinatario.hash,)
|
|
|
|
recipients.append(destinatario.email)
|
|
|
|
messages.append({
|
|
|
|
'recipient': destinatario.email,
|
|
|
|
'subject': subject,
|
|
|
|
'txt_message': email_texts[0],
|
|
|
|
'html_message': email_texts[1]
|
|
|
|
})
|
|
|
|
|
|
|
|
enviar_emails(sender, recipients, messages)
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
class TramitacaoView(CreateView):
|
|
|
|
template_name = "materia/tramitacao.html"
|
|
|
|
form_class = TramitacaoForm
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
tramitacoes = Tramitacao.objects.filter(
|
|
|
|
materia_id=kwargs['pk']).order_by('-data_tramitacao')
|
|
|
|
form = self.get_form()
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'tramitacoes': tramitacoes})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = self.get_form()
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
tramitacoes_list = Tramitacao.objects.filter(
|
|
|
|
materia_id=kwargs['pk']).order_by('-data_tramitacao')
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
ultima_tramitacao = Tramitacao.objects.filter(
|
|
|
|
materia_id=kwargs['pk']).last()
|
|
|
|
if ultima_tramitacao:
|
|
|
|
destino = ultima_tramitacao.unidade_tramitacao_destino
|
|
|
|
cleaned_data = form.cleaned_data['unidade_tramitacao_local']
|
|
|
|
if (destino == cleaned_data):
|
|
|
|
tramitacao = form.save(commit=False)
|
|
|
|
tramitacao.materia = materia
|
|
|
|
tramitacao.save()
|
|
|
|
else:
|
|
|
|
msg = _('A origem da nova tramitação \
|
|
|
|
deve ser igual ao destino da última adicionada!')
|
|
|
|
messages.add_message(request, messages.INFO, msg)
|
|
|
|
return self.render_to_response(
|
|
|
|
{'form': form,
|
|
|
|
'object': materia,
|
|
|
|
'tramitacoes': tramitacoes_list})
|
|
|
|
|
|
|
|
do_envia_email_tramitacao(request, materia)
|
|
|
|
else:
|
|
|
|
tramitacao = form.save(commit=False)
|
|
|
|
tramitacao.materia = materia
|
|
|
|
tramitacao.save()
|
|
|
|
return self.form_valid(form)
|
|
|
|
else:
|
|
|
|
return self.render_to_response({'form': form,
|
|
|
|
'object': materia,
|
|
|
|
'tramitacoes': tramitacoes_list})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:tramitacao_materia', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class TramitacaoEditView(CreateView):
|
|
|
|
template_name = "materia/tramitacao_edit.html"
|
|
|
|
form_class = TramitacaoForm
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
tramitacao = Tramitacao.objects.get(id=kwargs['id'])
|
|
|
|
form = TramitacaoForm(excluir=True, instance=tramitacao)
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'tramitacao': tramitacao})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
tramitacao = Tramitacao.objects.get(id=kwargs['id'])
|
|
|
|
form = self.get_form()
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
if 'excluir' in request.POST:
|
|
|
|
if tramitacao == Tramitacao.objects.filter(
|
|
|
|
materia=materia).last():
|
|
|
|
tramitacao.delete()
|
|
|
|
else:
|
|
|
|
msg = _('Somente a útlima tramitação pode ser deletada!')
|
|
|
|
messages.add_message(request, messages.INFO, msg)
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'tramitacao': tramitacao})
|
|
|
|
elif 'salvar' in request.POST:
|
|
|
|
tramitacao.status = form.cleaned_data['status']
|
|
|
|
tramitacao.turno = form.cleaned_data['turno']
|
|
|
|
tramitacao.urgente = form.cleaned_data['urgente']
|
|
|
|
tramitacao.unidade_tramitacao_destino = form.cleaned_data[
|
|
|
|
'unidade_tramitacao_destino']
|
|
|
|
tramitacao.data_encaminhamento = form.cleaned_data[
|
|
|
|
'data_encaminhamento']
|
|
|
|
tramitacao.data_fim_prazo = form.cleaned_data['data_fim_prazo']
|
|
|
|
tramitacao.texto = form.cleaned_data['texto']
|
|
|
|
|
|
|
|
tramitacao.save()
|
|
|
|
return redirect(self.get_success_url())
|
|
|
|
else:
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form,
|
|
|
|
'tramitacao': tramitacao})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:tramitacao_materia', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class AutoriaView(CreateView):
|
|
|
|
template_name = "materia/autoria.html"
|
|
|
|
form_class = AutoriaForm
|
|
|
|
form_valid_message = _('Autoria cadastrada com sucesso!')
|
|
|
|
model = Autoria
|
|
|
|
|
|
|
|
def get_initial(self):
|
|
|
|
initial = super(AutoriaView, self).get_initial()
|
|
|
|
initial['materia_id'] = self.kwargs['pk']
|
|
|
|
return initial
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
context = super(AutoriaView, self).get_context_data(**kwargs)
|
|
|
|
|
|
|
|
materia = MateriaLegislativa.objects.get(id=self.kwargs['pk'])
|
|
|
|
autorias = Autoria.objects.filter(materia=materia)
|
|
|
|
|
|
|
|
context.update({'object': materia,
|
|
|
|
'autorias': autorias})
|
|
|
|
return context
|
|
|
|
|
|
|
|
def form_valid(self, form):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=form.data['materia_id'])
|
|
|
|
if 'salvar' in self.request.POST:
|
|
|
|
autoria = Autoria()
|
|
|
|
autoria.autor = Autor.objects.get(id=form.data['autor'])
|
|
|
|
autoria.materia = materia
|
|
|
|
autoria.primeiro_autor = form.data['primeiro_autor']
|
|
|
|
|
|
|
|
if form.data['partido']:
|
|
|
|
filiacao_autor = Partido.objects.get(id=form.data['partido'])
|
|
|
|
autoria.partido = filiacao_autor
|
|
|
|
|
|
|
|
autoria.save()
|
|
|
|
|
|
|
|
return redirect(self.get_success_url())
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:autoria', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class AutoriaEditView(CreateView):
|
|
|
|
template_name = "materia/autoria_edit.html"
|
|
|
|
form_class = AutoriaForm
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
autoria = Autoria.objects.get(id=self.kwargs['id'])
|
|
|
|
form = AutoriaForm(instance=autoria, excluir=True)
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
materia = MateriaLegislativa.objects.get(id=kwargs['pk'])
|
|
|
|
form = self.get_form()
|
|
|
|
if form.is_valid():
|
|
|
|
autoria = Autoria.objects.get(id=self.kwargs['id'])
|
|
|
|
if 'salvar' in request.POST:
|
|
|
|
autoria.autor = Autor.objects.get(id=form.data['autor'])
|
|
|
|
autoria.primeiro_autor = form.data['primeiro_autor']
|
|
|
|
if 'partido' in form.data:
|
|
|
|
autoria.partido = Partido.objects.get(
|
|
|
|
id=form.data['partido'])
|
|
|
|
autoria.materia = materia
|
|
|
|
autoria.save()
|
|
|
|
elif 'Excluir' in request.POST:
|
|
|
|
autoria.delete()
|
|
|
|
return redirect(self.get_success_url())
|
|
|
|
else:
|
|
|
|
return self.render_to_response(
|
|
|
|
{'object': materia,
|
|
|
|
'form': form})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
return reverse('materia:autoria', kwargs={'pk': pk})
|
|
|
|
|
|
|
|
|
|
|
|
class ProposicaoListView(ListView):
|
|
|
|
template_name = "materia/proposicao/proposicao_list.html"
|
|
|
|
paginate_by = 10
|
|
|
|
model = Proposicao
|
|
|
|
|
|
|
|
def get_queryset(self):
|
|
|
|
return Proposicao.objects.all().order_by('data_envio',
|
|
|
|
'tipo',
|
|
|
|
'descricao')
|
|
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
|
|
context = super(ProposicaoListView, 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 MateriaLegislativaPesquisaView(FormView):
|
|
|
|
template_name = 'materia/pesquisa_materia.html'
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
return reverse('materia:pesquisar_materia')
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
form = MateriaLegislativaPesquisaForm()
|
|
|
|
return self.render_to_response({'form': form})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
kwargs = {}
|
|
|
|
form = MateriaLegislativaPesquisaForm(request.POST)
|
|
|
|
|
|
|
|
if form.data['tipo']:
|
|
|
|
kwargs['tipo'] = form.data['tipo']
|
|
|
|
|
|
|
|
if form.data['numero']:
|
|
|
|
kwargs['numero'] = form.data['numero']
|
|
|
|
|
|
|
|
if form.data['ano']:
|
|
|
|
kwargs['ano'] = form.data['ano']
|
|
|
|
|
|
|
|
if form.data['numero_protocolo']:
|
|
|
|
kwargs['numero_protocolo'] = form.data['numero_protocolo']
|
|
|
|
|
|
|
|
if (form.data['apresentacao_inicial'] and
|
|
|
|
form.data['apresentacao_final']):
|
|
|
|
kwargs['apresentacao_inicial'] = form.data['apresentacao_inicial']
|
|
|
|
kwargs['apresentacao_final'] = form.data['apresentacao_final']
|
|
|
|
|
|
|
|
if (form.data['publicacao_inicial'] and
|
|
|
|
form.data['publicacao_final']):
|
|
|
|
kwargs['publicacao_inicial'] = form.data['publicacao_inicial']
|
|
|
|
kwargs['publicacao_final'] = form.data['publicacao_final']
|
|
|
|
|
|
|
|
if form.data['local_origem_externa']:
|
|
|
|
kwargs['local_origem_externa'] = form.data['local_origem_externa']
|
|
|
|
|
|
|
|
if form.data['autor']:
|
|
|
|
kwargs['autor'] = form.data['autor']
|
|
|
|
|
|
|
|
if form.data['localizacao']:
|
|
|
|
kwargs['localizacao'] = form.data['localizacao']
|
|
|
|
|
|
|
|
if form.data['em_tramitacao']:
|
|
|
|
kwargs['em_tramitacao'] = form.data['em_tramitacao']
|
|
|
|
|
|
|
|
if form.data['situacao']:
|
|
|
|
kwargs['situacao'] = form.data['situacao']
|
|
|
|
|
|
|
|
request.session['kwargs'] = kwargs
|
|
|
|
|
|
|
|
return redirect('materia:pesquisar_materia_list')
|
|
|
|
|
|
|
|
|
|
|
|
class PesquisaMateriaListView(ListView):
|
|
|
|
template_name = 'materia/pesquisa_materia_list.html'
|
|
|
|
context_object_name = 'materias'
|
|
|
|
model = MateriaLegislativa
|
|
|
|
paginate_by = 10
|
|
|
|
|
|
|
|
def get_queryset(self):
|
|
|
|
kwargs = self.request.session['kwargs']
|
|
|
|
|
|
|
|
materias = MateriaLegislativa.objects.all().order_by(
|
|
|
|
'-numero', '-ano')
|
|
|
|
|
|
|
|
if 'apresentacao_inicial' in kwargs:
|
|
|
|
inicial = datetime.strptime(
|
|
|
|
kwargs['apresentacao_inicial'],
|
|
|
|
'%d/%m/%Y').strftime('%Y-%m-%d')
|
|
|
|
final = datetime.strptime(
|
|
|
|
kwargs['apresentacao_final'],
|
|
|
|
'%d/%m/%Y').strftime('%Y-%m-%d')
|
|
|
|
materias = materias.filter(
|
|
|
|
data_apresentacao__range=(inicial, final))
|
|
|
|
|
|
|
|
if 'publicacao_inicial' in kwargs:
|
|
|
|
inicial = datetime.strptime(
|
|
|
|
kwargs['publicacao_inicial'],
|
|
|
|
'%d/%m/%Y').strftime('%Y-%m-%d')
|
|
|
|
final = datetime.strptime(
|
|
|
|
kwargs['publicacao_final'],
|
|
|
|
'%d/%m/%Y').strftime('%Y-%m-%d')
|
|
|
|
materias = materias.filter(
|
|
|
|
data_publicacao__range=(inicial, final))
|
|
|
|
|
|
|
|
if 'tipo' in kwargs:
|
|
|
|
materias = materias.filter(tipo_id=kwargs['tipo'])
|
|
|
|
|
|
|
|
if 'numero' in kwargs:
|
|
|
|
materias = materias.filter(numero=kwargs['numero'])
|
|
|
|
|
|
|
|
if 'ano' in kwargs:
|
|
|
|
materias = materias.filter(ano=kwargs['ano'])
|
|
|
|
|
|
|
|
if 'numero_protocolo' in kwargs:
|
|
|
|
materias = materias.filter(numero=kwargs['numero_protocolo'])
|
|
|
|
|
|
|
|
if 'em_tramitacao' in kwargs:
|
|
|
|
materias = materias.filter(em_tramitacao=kwargs['em_tramitacao'])
|
|
|
|
|
|
|
|
if 'local_origem_externa' in kwargs:
|
|
|
|
materias = materias.filter(
|
|
|
|
local_origem_externa=kwargs['local_origem_externa'])
|
|
|
|
|
|
|
|
# autor
|
|
|
|
# localizao atual
|
|
|
|
# situacao
|
|
|
|
|
|
|
|
return materias
|
|
|
|
|
|
|
|
|
|
|
|
class ProposicaoView(CreateView):
|
|
|
|
template_name = "materia/proposicao/proposicao.html"
|
|
|
|
form_class = ProposicaoForm
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
return reverse('materia:list_proposicao')
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
return self.render_to_response({'form': self.get_form()})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = self.get_form()
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
proposicao = form.save(commit=False)
|
|
|
|
tipo = TipoProposicao.objects.get(id=form.data['tipo'])
|
|
|
|
if tipo.descricao == 'Parecer':
|
|
|
|
try:
|
|
|
|
materia = MateriaLegislativa.objects.get(
|
|
|
|
tipo_id=int(form.data['tipo_materia']),
|
|
|
|
ano=int(form.data['ano_materia']),
|
|
|
|
numero=int(form.data['numero_materia']))
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
msg = _('Matéria adicionada não existe!')
|
|
|
|
messages.add_message(request, messages.INFO, msg)
|
|
|
|
return self.render_to_response({'form': form})
|
|
|
|
else:
|
|
|
|
proposicao.autor = materia.autoria_set.first().autor
|
|
|
|
proposicao.materia = materia
|
|
|
|
proposicao.save()
|
|
|
|
return redirect(self.get_success_url())
|
|
|
|
else:
|
|
|
|
return self.render_to_response({'form': form})
|
|
|
|
|
|
|
|
|
|
|
|
class ProposicaoEditView(CreateView):
|
|
|
|
template_name = "materia/proposicao/proposicao.html"
|
|
|
|
form_class = ProposicaoForm
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
return reverse('materia:list_proposicao')
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
proposicao = Proposicao.objects.get(id=kwargs['pk'])
|
|
|
|
return self.render_to_response({'form': ProposicaoForm(
|
|
|
|
excluir=True,
|
|
|
|
instance=proposicao)})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = self.get_form()
|
|
|
|
proposicao = Proposicao.objects.get(id=kwargs['pk'])
|
|
|
|
if form.is_valid():
|
|
|
|
if 'Excluir' in request.POST:
|
|
|
|
if proposicao.data_envio:
|
|
|
|
proposicao.data_envio = None
|
|
|
|
proposicao.save()
|
|
|
|
else:
|
|
|
|
proposicao.delete()
|
|
|
|
if 'salvar' or "remover-foto" in request.POST:
|
|
|
|
if 'texto_original' in request.FILES:
|
|
|
|
# if os.unlink(proposicao.texto_original.path):
|
|
|
|
# proposicao.texto_original = None
|
|
|
|
proposicao.texto_original = request.FILES['texto_original']
|
|
|
|
tipo = TipoProposicao.objects.get(id=form.data['tipo'])
|
|
|
|
proposicao.tipo = tipo
|
|
|
|
proposicao.descricao = form.data['descricao']
|
|
|
|
if tipo.descricao == 'Parecer':
|
|
|
|
try:
|
|
|
|
materia = MateriaLegislativa.objects.get(
|
|
|
|
tipo_id=int(form.data['tipo_materia']),
|
|
|
|
ano=int(form.data['ano_materia']),
|
|
|
|
numero=int(form.data['numero_materia']))
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
msg = _('Matéria adicionada não existe!')
|
|
|
|
messages.add_message(request, messages.INFO, msg)
|
|
|
|
return self.render_to_response({'form': form})
|
|
|
|
else:
|
|
|
|
proposicao.autor = materia.autoria_set.first().autor
|
|
|
|
proposicao.materia = materia
|
|
|
|
if not proposicao.data_envio:
|
|
|
|
proposicao.data_envio = datetime.now()
|
|
|
|
if "remover-texto" in request.POST:
|
|
|
|
try:
|
|
|
|
os.unlink(proposicao.texto_original.path)
|
|
|
|
except OSError:
|
|
|
|
pass # Should log this error!!!!!
|
|
|
|
proposicao.texto_original = None
|
|
|
|
proposicao.save()
|
|
|
|
return redirect(self.get_success_url())
|
|
|
|
else:
|
|
|
|
return self.render_to_response({'form': form})
|
|
|
|
|
|
|
|
|
|
|
|
class MateriaTaView(IntegracaoTaView):
|
|
|
|
model = MateriaLegislativa
|
|
|
|
model_type_foreignkey = TipoMateriaLegislativa
|
|
|
|
|
|
|
|
|
|
|
|
class ProposicaoTaView(IntegracaoTaView):
|
|
|
|
model = Proposicao
|
|
|
|
model_type_foreignkey = TipoProposicao
|
|
|
|
|
|
|
|
|
|
|
|
class AcompanhamentoMateriaView(CreateView):
|
|
|
|
template_name = "materia/acompanhamento_materia.html"
|
|
|
|
|
|
|
|
def get_random_chars(self):
|
|
|
|
s = ascii_letters + digits
|
|
|
|
return ''.join(choice(s) for i in range(choice([6, 7])))
|
|
|
|
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
materia = MateriaLegislativa.objects.get(id=pk)
|
|
|
|
|
|
|
|
return self.render_to_response(
|
|
|
|
{'form': AcompanhamentoMateriaForm(),
|
|
|
|
'materia': materia})
|
|
|
|
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
|
|
form = AcompanhamentoMateriaForm(request.POST)
|
|
|
|
pk = self.kwargs['pk']
|
|
|
|
materia = MateriaLegislativa.objects.get(id=pk)
|
|
|
|
|
|
|
|
if form.is_valid():
|
|
|
|
|
|
|
|
email = form.cleaned_data['email']
|
|
|
|
usuario = request.user
|
|
|
|
|
|
|
|
hash_txt = self.get_random_chars()
|
|
|
|
|
|
|
|
try:
|
|
|
|
AcompanhamentoMateria.objects.get(
|
|
|
|
email=email,
|
|
|
|
materia=materia,
|
|
|
|
hash=hash_txt)
|
|
|
|
except ObjectDoesNotExist:
|
|
|
|
acompanhar = form.save(commit=False)
|
|
|
|
acompanhar.hash = hash_txt
|
|
|
|
acompanhar.materia = materia
|
|
|
|
acompanhar.usuario = usuario.username
|
|
|
|
acompanhar.confirmado = False
|
|
|
|
acompanhar.save()
|
|
|
|
|
|
|
|
do_envia_email_confirmacao(request, materia, email)
|
|
|
|
|
|
|
|
else:
|
|
|
|
return self.render_to_response(
|
|
|
|
{'form': form,
|
|
|
|
'materia': materia,
|
|
|
|
'error': _('Essa matéria já está\
|
|
|
|
sendo acompanhada por este e-mail.')})
|
|
|
|
return self.form_valid(form)
|
|
|
|
else:
|
|
|
|
return self.render_to_response(
|
|
|
|
{'form': form,
|
|
|
|
'materia': materia})
|
|
|
|
|
|
|
|
def get_success_url(self):
|
|
|
|
return reverse('sessao:list_pauta_sessao')
|