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.
 
 
 
 
 

141 lines
5.0 KiB

from datetime import datetime
from django.shortcuts import redirect
from django.views.generic import FormView, ListView
import crud.base
from compilacao.views import IntegracaoTaView
from crud.base import Crud, make_pagination
from .forms import NormaJuridicaForm, NormaJuridicaPesquisaForm
from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,
TipoNormaJuridica)
AssuntoNormaCrud = Crud.build(AssuntoNorma, 'assunto_norma_juridica')
TipoNormaCrud = Crud.build(TipoNormaJuridica, 'tipo_norma_juridica')
LegislacaoCitadaCrud = Crud.build(LegislacaoCitada, '')
class NormaCrud(Crud):
model = NormaJuridica
help_path = 'norma_juridica'
class UpdateView(crud.base.CrudUpdateView):
form_class = NormaJuridicaForm
@property
def layout_key(self):
return 'NormaJuridicaCreate'
def get_initial(self):
norma = NormaJuridica.objects.get(id=self.kwargs['pk'])
if norma.materia:
self.initial['tipo_materia'] = norma.materia.tipo
self.initial['ano_materia'] = norma.materia.ano
self.initial['numero_materia'] = norma.materia.numero
return self.initial.copy()
class CreateView(crud.base.CrudCreateView):
form_class = NormaJuridicaForm
@property
def layout_key(self):
return 'NormaJuridicaCreate'
class BaseMixin(crud.base.CrudBaseMixin):
list_field_names = ['tipo', 'numero', 'ano', 'ementa']
class NormaPesquisaView(FormView):
template_name = "norma/pesquisa.html"
success_url = "norma:norma_pesquisa"
form_class = NormaJuridicaPesquisaForm
def post(self, request, *args, **kwargs):
form = NormaJuridicaPesquisaForm(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['periodo_inicial'] and form.data['periodo_final']:
kwargs['periodo_inicial'] = form.data['periodo_inicial']
kwargs['periodo_final'] = form.data['periodo_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']
request.session['kwargs'] = kwargs
return redirect('norma:list_pesquisa_norma')
class PesquisaNormaListView(ListView):
template_name = 'norma/list_pesquisa.html'
model = NormaJuridica
paginate_by = 10
def get_queryset(self):
kwargs = self.request.session['kwargs']
normas = NormaJuridica.objects.all().order_by('-ano', '-numero')
if 'periodo_inicial' and 'publicacao_inicial' in kwargs:
periodo_inicial = datetime.strptime(
kwargs['periodo_inicial'],
'%d/%m/%Y').strftime('%Y-%m-%d')
periodo_final = datetime.strptime(
kwargs['periodo_final'],
'%d/%m/%Y').strftime('%Y-%m-%d')
publicacao_inicial = datetime.strptime(
kwargs['publicacao_inicial'],
'%d/%m/%Y').strftime('%Y-%m-%d')
publicacao_final = datetime.strptime(
kwargs['publicacao_final'],
'%d/%m/%Y').strftime('%Y-%m-%d')
normas = normas.filter(
data__range=(periodo_inicial, periodo_final),
data_publicacao__range=(publicacao_inicial, publicacao_final))
if 'periodo_inicial' in kwargs:
inicial = datetime.strptime(kwargs['periodo_inicial'],
'%d/%m/%Y').strftime('%Y-%m-%d')
final = datetime.strptime(kwargs['periodo_inicial'],
'%d/%m/%Y').strftime('%Y-%m-%d')
normas = normas.filter(data__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')
normas = normas.filter(data_publicacao__range=(inicial, final))
if 'tipo' in kwargs:
normas = normas.filter(tipo=kwargs['tipo'])
if 'numero' in kwargs:
normas = normas.filter(numero=kwargs['numero'])
if 'ano' in kwargs:
normas = normas.filter(ano=kwargs['ano'])
return normas
def get_context_data(self, **kwargs):
context = super(PesquisaNormaListView, 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 NormaTaView(IntegracaoTaView):
model = NormaJuridica
model_type_foreignkey = TipoNormaJuridica