mirror of https://github.com/interlegis/sapl.git
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.
196 lines
7.4 KiB
196 lines
7.4 KiB
from datetime import datetime
|
|
|
|
from django.contrib import messages
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
from django.core.urlresolvers import reverse
|
|
from django.http import HttpResponseRedirect
|
|
from django.shortcuts import redirect
|
|
from django.views.generic import CreateView, ListView
|
|
from vanilla.views import GenericView
|
|
|
|
from compilacao.views import IntegracaoTaView
|
|
from crud import Crud, make_pagination
|
|
from materia.models import MateriaLegislativa
|
|
|
|
from .forms import NormaJuridicaForm, NormaJuridicaPesquisaForm
|
|
from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,
|
|
TipoNormaJuridica)
|
|
|
|
assunto_norma_crud = Crud(AssuntoNorma, 'assunto_norma_juridica')
|
|
tipo_norma_crud = Crud(TipoNormaJuridica, 'tipo_norma_juridica')
|
|
norma_crud = Crud(NormaJuridica, '')
|
|
norma_temporario_crud = Crud(NormaJuridica, 'normajuridica')
|
|
legislacao_citada_crud = Crud(LegislacaoCitada, '')
|
|
|
|
|
|
class NormaPesquisaView(GenericView):
|
|
template_name = "norma/pesquisa.html"
|
|
|
|
def get_success_url(self):
|
|
return reverse('normajuridica:norma_pesquisa')
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
form = NormaJuridicaPesquisaForm()
|
|
return self.render_to_response({'form': form})
|
|
|
|
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['publicação_inicial'] and form.data['publicação_final']:
|
|
kwargs['publicação_inicial'] = form.data['publicação_inicial']
|
|
kwargs['publicação_final'] = form.data['publicação_final']
|
|
|
|
request.session['kwargs'] = kwargs
|
|
return redirect('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')
|
|
publicação_inicial = datetime.strptime(
|
|
kwargs['publicação_inicial'],
|
|
'%d/%m/%Y').strftime('%Y-%m-%d')
|
|
publicação_final = datetime.strptime(
|
|
kwargs['publicação_final'],
|
|
'%d/%m/%Y').strftime('%Y-%m-%d')
|
|
|
|
normas = normas.filter(
|
|
data__range=(periodo_inicial, periodo_final),
|
|
data_publicacao__range=(publicação_inicial, publicação_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 'publicação_inicial' in kwargs:
|
|
inicial = datetime.strptime(kwargs['publicação_inicial'],
|
|
'%d/%m/%Y').strftime('%Y-%m-%d')
|
|
final = datetime.strptime(kwargs['publicação_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 NormaIncluirView(CreateView):
|
|
template_name = "norma/normajuridica_incluir.html"
|
|
form_class = NormaJuridicaForm
|
|
|
|
def get_success_url(self):
|
|
return reverse('normajuridica:list')
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
form = NormaJuridicaForm()
|
|
return self.render_to_response({'form': form})
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
form = self.get_form()
|
|
|
|
if form.is_valid():
|
|
norma = form.save(commit=False)
|
|
|
|
if form.cleaned_data['tipo_materia']:
|
|
try:
|
|
materia = MateriaLegislativa.objects.get(
|
|
tipo_id=form.cleaned_data['tipo_materia'],
|
|
numero=form.cleaned_data['numero_materia'],
|
|
ano=form.cleaned_data['ano_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:
|
|
norma.materia = materia
|
|
norma.timestamp = datetime.now()
|
|
norma.save()
|
|
return HttpResponseRedirect(self.get_success_url())
|
|
else:
|
|
return self.render_to_response({'form': form})
|
|
|
|
|
|
class NormaEditView(CreateView):
|
|
template_name = "norma/normajuridica_incluir.html"
|
|
form_class = NormaJuridicaForm
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
norma = NormaJuridica.objects.get(id=self.kwargs['pk'])
|
|
form = NormaJuridicaForm(instance=norma)
|
|
return self.render_to_response({'form': form})
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
norma = NormaJuridica.objects.get(id=self.kwargs['pk'])
|
|
form = NormaJuridicaForm(instance=norma, data=request.POST)
|
|
|
|
if form.is_valid():
|
|
if form.data['tipo_materia']:
|
|
try:
|
|
materia = MateriaLegislativa.objects.get(
|
|
tipo_id=form.data['tipo_materia'],
|
|
numero=form.data['numero_materia'],
|
|
ano=form.data['ano_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:
|
|
norma.materia = materia
|
|
norma = form.save(commit=False)
|
|
norma.timestamp = datetime.now()
|
|
norma.save()
|
|
return HttpResponseRedirect(self.get_success_url())
|
|
else:
|
|
return self.render_to_response({'form': form})
|
|
|
|
def get_success_url(self):
|
|
return reverse('normajuridica:list')
|
|
|
|
|
|
class NormaTaView(IntegracaoTaView):
|
|
model = NormaJuridica
|
|
model_type_foreignkey = TipoNormaJuridica
|
|
|