|
@ -1,8 +1,12 @@ |
|
|
|
|
|
from collections import OrderedDict |
|
|
|
|
|
from datetime import timedelta |
|
|
|
|
|
|
|
|
from django.views.generic.list import ListView |
|
|
from django.views.generic.list import ListView |
|
|
|
|
|
|
|
|
from compilacao.models import Dispositivo |
|
|
from compilacao.models import Dispositivo |
|
|
from norma.models import NormaJuridica |
|
|
from norma.models import NormaJuridica |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DISPOSITIVO_SELECT_RELATED = ( |
|
|
DISPOSITIVO_SELECT_RELATED = ( |
|
|
'tipo_dispositivo', |
|
|
'tipo_dispositivo', |
|
|
'norma_publicada', |
|
|
'norma_publicada', |
|
@ -22,13 +26,12 @@ class CompilacaoView(ListView): |
|
|
flag_nivel_ini = 0 |
|
|
flag_nivel_ini = 0 |
|
|
flag_nivel_old = -1 |
|
|
flag_nivel_old = -1 |
|
|
|
|
|
|
|
|
itens_de_bloco = [] |
|
|
itens_de_vigencia = {} |
|
|
|
|
|
|
|
|
def get_queryset(self): |
|
|
def get_queryset(self): |
|
|
self.flag_alteradora = -1 |
|
|
self.flag_alteradora = -1 |
|
|
self.flag_nivel_ini = 0 |
|
|
self.flag_nivel_ini = 0 |
|
|
self.flag_nivel_old = -1 |
|
|
self.flag_nivel_old = -1 |
|
|
self.itens_de_bloco = [] |
|
|
|
|
|
|
|
|
|
|
|
if self.is_norma_alteradora(): |
|
|
if self.is_norma_alteradora(): |
|
|
return Dispositivo.objects.filter( |
|
|
return Dispositivo.objects.filter( |
|
@ -41,6 +44,57 @@ class CompilacaoView(ListView): |
|
|
norma_id=self.kwargs['norma_id'] |
|
|
norma_id=self.kwargs['norma_id'] |
|
|
).select_related(*DISPOSITIVO_SELECT_RELATED) |
|
|
).select_related(*DISPOSITIVO_SELECT_RELATED) |
|
|
|
|
|
|
|
|
|
|
|
def get_vigencias(self): |
|
|
|
|
|
itens = Dispositivo.objects.filter( |
|
|
|
|
|
norma_id=self.kwargs['norma_id'], |
|
|
|
|
|
).order_by( |
|
|
|
|
|
'inicio_vigencia' |
|
|
|
|
|
).distinct( |
|
|
|
|
|
'inicio_vigencia' |
|
|
|
|
|
).select_related( |
|
|
|
|
|
'norma_publicada', |
|
|
|
|
|
'norma', |
|
|
|
|
|
'norma_publicada__tipo', |
|
|
|
|
|
'norma__tipo',) |
|
|
|
|
|
|
|
|
|
|
|
ajuste_datas_vigencia = [] |
|
|
|
|
|
|
|
|
|
|
|
for item in itens: |
|
|
|
|
|
ajuste_datas_vigencia.append(item) |
|
|
|
|
|
|
|
|
|
|
|
lenLista = len(ajuste_datas_vigencia) |
|
|
|
|
|
for i in range(lenLista): |
|
|
|
|
|
if i + 1 < lenLista: |
|
|
|
|
|
ajuste_datas_vigencia[ |
|
|
|
|
|
i].fim_vigencia = ajuste_datas_vigencia[ |
|
|
|
|
|
i + 1].inicio_vigencia - timedelta(days=1) |
|
|
|
|
|
else: |
|
|
|
|
|
ajuste_datas_vigencia[i].fim_vigencia = None |
|
|
|
|
|
|
|
|
|
|
|
self.itens_de_vigencia = {} |
|
|
|
|
|
|
|
|
|
|
|
idx = -1 |
|
|
|
|
|
length = len(ajuste_datas_vigencia) |
|
|
|
|
|
for item in ajuste_datas_vigencia: |
|
|
|
|
|
idx += 1 |
|
|
|
|
|
if idx == 0: |
|
|
|
|
|
self.itens_de_vigencia[0] = [item, ] |
|
|
|
|
|
continue |
|
|
|
|
|
|
|
|
|
|
|
if idx + 1 < length: |
|
|
|
|
|
ano = item.norma_publicada.ano |
|
|
|
|
|
if ano in self.itens_de_vigencia: |
|
|
|
|
|
self.itens_de_vigencia[ano].append(item) |
|
|
|
|
|
else: |
|
|
|
|
|
self.itens_de_vigencia[ano] = [item, ] |
|
|
|
|
|
else: |
|
|
|
|
|
self.itens_de_vigencia[9999] = [item, ] |
|
|
|
|
|
|
|
|
|
|
|
self.itens_de_vigencia = OrderedDict( |
|
|
|
|
|
sorted(self.itens_de_vigencia.items(), key=lambda t: t[0])) |
|
|
|
|
|
|
|
|
|
|
|
return self.itens_de_vigencia |
|
|
|
|
|
|
|
|
def get_norma(self): |
|
|
def get_norma(self): |
|
|
return NormaJuridica.objects.select_related('tipo').get( |
|
|
return NormaJuridica.objects.select_related('tipo').get( |
|
|
pk=self.kwargs['norma_id']) |
|
|
pk=self.kwargs['norma_id']) |
|
@ -53,22 +107,14 @@ class CompilacaoView(ListView): |
|
|
return self.flag_alteradora > 0 |
|
|
return self.flag_alteradora > 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DispositivoView(ListView): |
|
|
class DispositivoView(CompilacaoView): |
|
|
# template_name = 'compilacao/index.html' |
|
|
# template_name = 'compilacao/index.html' |
|
|
template_name = 'compilacao/template_render_bloco.html' |
|
|
template_name = 'compilacao/template_render_bloco.html' |
|
|
|
|
|
|
|
|
flag_alteradora = None |
|
|
|
|
|
|
|
|
|
|
|
flag_nivel_ini = 0 |
|
|
|
|
|
flag_nivel_old = -1 |
|
|
|
|
|
|
|
|
|
|
|
itens_de_bloco = [] |
|
|
|
|
|
|
|
|
|
|
|
def get_queryset(self): |
|
|
def get_queryset(self): |
|
|
self.flag_alteradora = -1 |
|
|
self.flag_alteradora = -1 |
|
|
self.flag_nivel_ini = 0 |
|
|
self.flag_nivel_ini = 0 |
|
|
self.flag_nivel_old = -1 |
|
|
self.flag_nivel_old = -1 |
|
|
self.itens_de_bloco = [] |
|
|
|
|
|
|
|
|
|
|
|
try: |
|
|
try: |
|
|
bloco = Dispositivo.objects.get(pk=self.kwargs['dispositivo_id']) |
|
|
bloco = Dispositivo.objects.get(pk=self.kwargs['dispositivo_id']) |
|
@ -98,14 +144,3 @@ class DispositivoView(ListView): |
|
|
norma_id=self.kwargs['norma_id'] |
|
|
norma_id=self.kwargs['norma_id'] |
|
|
).select_related(*DISPOSITIVO_SELECT_RELATED) |
|
|
).select_related(*DISPOSITIVO_SELECT_RELATED) |
|
|
return itens |
|
|
return itens |
|
|
|
|
|
|
|
|
def get_norma(self): |
|
|
|
|
|
return NormaJuridica.objects.select_related('tipo').get( |
|
|
|
|
|
pk=self.kwargs['norma_id']) |
|
|
|
|
|
|
|
|
|
|
|
def is_norma_alteradora(self): |
|
|
|
|
|
if self.flag_alteradora == -1: |
|
|
|
|
|
self.flag_alteradora = Dispositivo.objects.select_related( |
|
|
|
|
|
'dispositivos_alterados_pela_norma_set' |
|
|
|
|
|
).filter(norma_id=self.kwargs['norma_id']).count() |
|
|
|
|
|
return self.flag_alteradora > 0 |
|
|
|
|
|