@ -1,6 +1,6 @@
import sys
from collections import OrderedDict
from datetime import datetime , timedelta
import sys
from braces . views import FormMessagesMixin
from django import forms
@ -10,7 +10,6 @@ from django.core.signing import Signer
from django . core . urlresolvers import reverse_lazy
from django . db import transaction
from django . db . models import Q
from django . forms . models import model_to_dict
from django . http . response import ( HttpResponse , HttpResponseRedirect ,
JsonResponse )
from django . shortcuts import get_object_or_404 , redirect
@ -19,15 +18,16 @@ from django.utils.decorators import method_decorator
from django . utils . translation import ugettext_lazy as _
from django . views . generic . base import TemplateView
from django . views . generic . detail import DetailView
from django . views . generic . edit import CreateView , DeleteView , UpdateView , \
FormView
from django . views . generic . edit import ( CreateView , DeleteView , FormView ,
UpdateView )
from django . views . generic . list import ListView
from compilacao . forms import ( DispositivoEdicaoBasicaForm , NotaForm ,
PublicacaoForm , TaForm , TipoTaForm , VideForm ,
from compilacao . forms import ( DispositivoDefinidorVigenciaForm ,
DispositivoEdicaoAlteracaoForm ,
DispositivoEdicaoBasicaForm ,
DispositivoEdicaoVigenciaForm ,
DispositivoSearchModalForm ,
DispositivoDefinidorVigencia Form)
DispositivoSearchModalForm , NotaForm ,
PublicacaoForm , TaForm , TipoTaForm , Vide Form)
from compilacao . models import ( Dispositivo , Nota ,
PerfilEstruturalTextoArticulado , Publicacao ,
TextoArticulado , TipoDispositivo , TipoNota ,
@ -36,7 +36,6 @@ from compilacao.models import (Dispositivo, Nota,
from compilacao . utils import DISPOSITIVO_SELECT_RELATED
from crud . base import Crud , CrudListView , make_pagination
TipoNotaCrud = Crud . build ( TipoNota , ' tipo_nota ' )
TipoVideCrud = Crud . build ( TipoVide , ' tipo_vide ' )
TipoPublicacaoCrud = Crud . build ( TipoPublicacao , ' tipo_publicacao ' )
@ -1283,13 +1282,13 @@ class ActionsEditMixin:
dps = Dispositivo . objects . filter ( dispositivo_vigencia_id = dvt . pk ,
ta_publicado_id = dvt . ta_id )
with transaction . atomic ( ) :
for d in dps :
if d . dispositivo_substituido :
ds = d . dispositivo_substituido
ds . fim_vigencia = d . inicio_vigencia - timedelta ( days = 1 )
ds . fim_eficacia = d . inicio_eficacia - timedelta ( days = 1 )
ds . save ( )
d . save ( )
if d . dispositivo_subsequente :
ds = d . dispositivo_subsequente
@ -1616,72 +1615,6 @@ class ActionsEditMixin:
return ' '
"""
if proxima_articulacao :
irmaos_posteriores = Dispositivo . objects . filter (
ta_id = base . ta_id ,
ordem__gt = base . ordem ,
tipo_dispositivo = base . tipo_dispositivo ,
ordem__lt = proxima_articulacao . ordem )
else :
irmaos_posteriores = Dispositivo . objects . filter (
ta_id = base . ta_id ,
ordem__gt = base . ordem ,
tipo_dispositivo = base . tipo_dispositivo )
proxima_articulacao = base . get_proximo_nivel_zero ( )
# Renumerar Dispostivos de Contagem Contínua de dentro da base
if not proxima_articulacao :
dcc = Dispositivo . objects . order_by ( ' ordem ' ) . filter (
ta_id = base . ta_id ,
ordem__gt = base . ordem ,
tipo_dispositivo__contagem_continua = True )
else :
dcc = Dispositivo . objects . order_by ( ' ordem ' ) . filter (
ta_id = base . ta_id ,
ordem__gt = base . ordem ,
ordem__lt = proxima_articulacao . ordem ,
tipo_dispositivo__contagem_continua = True )
base_adicao = { }
nivel_zero_anterior = base . get_nivel_zero_anterior ( )
if nivel_zero_anterior :
nivel_zero_anterior = nivel_zero_anterior . ordem
else :
nivel_zero_anterior = 0
dcc = list ( dcc )
for d in dcc : # ultimo DCC do tipo encontrado
if d . tipo_dispositivo . class_css not in base_adicao :
ultimo_dcc = Dispositivo . objects . order_by (
' ordem ' ) . filter (
ta_id = base . ta_id ,
ordem__lt = base . ordem ,
ordem__gt = nivel_zero_anterior ,
tipo_dispositivo__contagem_continua = True ,
tipo_dispositivo = d . tipo_dispositivo ) . last ( )
if not ultimo_dcc :
break
base_adicao [
d . tipo_dispositivo . class_css ] = ultimo_dcc . \
dispositivo0
d . dispositivo0 + = base_adicao [ d . tipo_dispositivo . class_css ]
d . rotulo = d . rotulo_padrao ( )
dcc . reverse ( )
for d in dcc :
d . save ( )
base . delete ( )
return ' '
"""
def add_prior ( self , context ) :
return { }
@ -1694,6 +1627,9 @@ class ActionsEditMixin:
dp_auto_insert = None
base = Dispositivo . objects . get ( pk = context [ ' dispositivo_id ' ] )
tipo = TipoDispositivo . objects . get ( pk = context [ ' tipo_pk ' ] )
pub_last = Publicacao . objects . order_by (
' data ' , ' hora ' ) . filter ( ta = base . ta ) . last ( )
variacao = int ( context [ ' variacao ' ] )
parents = [ base , ] + base . get_parents ( )
@ -1791,6 +1727,7 @@ class ActionsEditMixin:
dp . ordem = ordem
dp . incrementar_irmaos ( variacao , [ local_add , ] , force = False )
dp . publicacao = pub_last
dp . save ( )
# Inserção automática
@ -1808,6 +1745,8 @@ class ActionsEditMixin:
dp . rotulo = dp . rotulo_padrao ( )
dp . texto = ' '
dp . ordem = dp . ordem + Dispositivo . INTERVALO_ORDEM
dp . publicacao = pub_last
dp . save ( )
dp_auto_insert = dp
dp = Dispositivo . objects . get ( pk = dp_pk )
@ -1841,7 +1780,6 @@ class ActionsEditMixin:
continue
filho . dispositivo_pai = dp
filho . clean ( )
filho . save ( )
flag_niveis = True
@ -1982,79 +1920,11 @@ class ActionsEditView(ActionsEditMixin, TemplateView):
if ' perfil_estrutural ' in self . request . session :
context [ ' perfil_pk ' ] = self . request . session [ ' perfil_estrutural ' ]
return self . render_to_json_response ( context , * * response_kwargs )
class DispositivoEdicaoBasicaView ( FormMessagesMixin , UpdateView ) :
model = Dispositivo
template_name = ' compilacao/dispositivo_form_edicao_basica.html '
form_class = DispositivoEdicaoBasicaForm
form_valid_message = _ ( ' Alterações no Dispositivo realizadas com sucesso! ' )
form_invalid_message = _ ( ' Houve erro em registrar '
' as alterações no Dispositivo ' )
@property
def cancel_url ( self ) :
return reverse_lazy (
' compilacao:ta_text_edit ' ,
kwargs = { ' ta_id ' : self . kwargs [ ' ta_id ' ] } ) + ' # ' + str ( self . object . pk )
def get_success_url ( self ) :
return reverse_lazy (
' compilacao:dispositivo_edit ' ,
kwargs = { ' ta_id ' : self . kwargs [ ' ta_id ' ] , ' pk ' : self . kwargs [ ' pk ' ] } )
def get_url_this_view ( self ) :
return ' compilacao:dispositivo_edit '
def run_actions ( self , request ) :
if ' action ' in request . GET and \
request . GET [ ' action ' ] == ' atualiza_rotulo ' :
try :
d = Dispositivo . objects . get ( pk = self . kwargs [ ' pk ' ] )
d . dispositivo0 = int ( request . GET [ ' dispositivo0 ' ] )
d . dispositivo1 = int ( request . GET [ ' dispositivo1 ' ] )
d . dispositivo2 = int ( request . GET [ ' dispositivo2 ' ] )
d . dispositivo3 = int ( request . GET [ ' dispositivo3 ' ] )
d . dispositivo4 = int ( request . GET [ ' dispositivo4 ' ] )
d . dispositivo5 = int ( request . GET [ ' dispositivo5 ' ] )
d . rotulo = d . rotulo_padrao ( )
numero = d . get_numero_completo ( ) [ 1 : ]
zerar = False
for i in range ( len ( numero ) ) :
if not numero [ i ] :
zerar = True
if zerar :
numero [ i ] = 0
if zerar :
d . set_numero_completo ( [ d . dispositivo0 , ] + numero )
d . rotulo = d . rotulo_padrao ( )
except :
return True , JsonResponse ( { ' message ' : str (
_ ( ' Ocorreu erro na atualização do rótulo ' ) ) } , safe = False )
return True , JsonResponse ( {
' rotulo ' : d . rotulo ,
' dispositivo0 ' : d . dispositivo0 ,
' dispositivo1 ' : d . dispositivo1 ,
' dispositivo2 ' : d . dispositivo2 ,
' dispositivo3 ' : d . dispositivo3 ,
' dispositivo4 ' : d . dispositivo4 ,
' dispositivo5 ' : d . dispositivo5 } , safe = False )
if ' herancas ' in self . request . session :
del self . request . session [ ' herancas ' ]
del self . request . session [ ' herancas_fila ' ]
return False , ' '
def get ( self , request , * args , * * kwargs ) :
flag_action , render_json_response = self . run_actions ( request )
if flag_action :
return render_json_response
return UpdateView . get ( self , request , * args , * * kwargs )
return self . render_to_json_response ( context , * * response_kwargs )
class DispositivoSearchFragmentFormView ( ListView ) :
@ -2078,7 +1948,10 @@ class DispositivoSearchFragmentFormView(ListView):
def get_queryset ( self ) :
try :
n = 50
n = 10
if ' max_results ' in self . request . GET :
n = int ( self . request . GET [ ' max_results ' ] )
q = Q ( )
if ' initial_ref ' in self . request . GET :
initial_ref = self . request . GET [ ' initial_ref ' ]
@ -2132,7 +2005,7 @@ class DispositivoSearchFragmentFormView(ListView):
if ano_ta :
q = q & Q ( ta__ano = ano_ta )
if not q . children :
if not q . children and not n :
n = 10
q = q & Q ( nivel__gt = 0 )
@ -2141,16 +2014,35 @@ class DispositivoSearchFragmentFormView(ListView):
' -ta__ano ' ,
' -ta__numero ' ,
' ta ' ,
' ordem ' ) . filter ( q ) . select_related ( ' ta ' ) . exclude (
' ordem ' ) . filter ( q ) . select_related ( ' ta ' )
if ' data_type_selection ' in self . request . GET and \
self . request . GET [ ' data_type_selection ' ] == ' checkbox ' :
result = result . exclude (
tipo_dispositivo__dispositivo_de_alteracao = True )
else :
if ' data_function ' in self . request . GET and \
self . request . GET [ ' data_function ' ] == ' alterador ' :
result = result . exclude (
tipo_dispositivo__dispositivo_de_alteracao = False ,
)
result = result . exclude (
tipo_dispositivo__dispositivo_de_articulacao = False ,
)
print ( str ( result . query ) )
def resultados ( r ) :
if num_ta and ano_ta and not rotulo and not str_texto and \
if n :
return r [ : n ]
else :
return r
""" if num_ta and ano_ta and not rotulo and not str_texto and \
' data_type_selection ' in self . request . GET and \
self . request . GET [ ' data_type_selection ' ] == ' checkbox ' :
return r
else :
return r [ : n ]
return r [ : n ] """
if ' tipo_model ' not in self . request . GET :
return resultados ( result )
@ -2214,6 +2106,78 @@ class DispositivoSearchModalView(FormView):
form_class = DispositivoSearchModalForm
class DispositivoEdicaoBasicaView ( FormMessagesMixin , UpdateView ) :
model = Dispositivo
template_name = ' compilacao/dispositivo_form_edicao_basica.html '
form_class = DispositivoEdicaoBasicaForm
form_valid_message = _ ( ' Alterações no Dispositivo realizadas com sucesso! ' )
form_invalid_message = _ ( ' Houve erro em registrar '
' as alterações no Dispositivo ' )
@property
def cancel_url ( self ) :
return reverse_lazy (
' compilacao:ta_text_edit ' ,
kwargs = { ' ta_id ' : self . kwargs [ ' ta_id ' ] } ) + ' # ' + str ( self . object . pk )
def get_success_url ( self ) :
return reverse_lazy (
' compilacao:dispositivo_edit ' ,
kwargs = { ' ta_id ' : self . kwargs [ ' ta_id ' ] , ' pk ' : self . kwargs [ ' pk ' ] } )
def get_url_this_view ( self ) :
return ' compilacao:dispositivo_edit '
def run_actions ( self , request ) :
if ' action ' in request . GET and \
request . GET [ ' action ' ] == ' atualiza_rotulo ' :
try :
d = Dispositivo . objects . get ( pk = self . kwargs [ ' pk ' ] )
d . dispositivo0 = int ( request . GET [ ' dispositivo0 ' ] )
d . dispositivo1 = int ( request . GET [ ' dispositivo1 ' ] )
d . dispositivo2 = int ( request . GET [ ' dispositivo2 ' ] )
d . dispositivo3 = int ( request . GET [ ' dispositivo3 ' ] )
d . dispositivo4 = int ( request . GET [ ' dispositivo4 ' ] )
d . dispositivo5 = int ( request . GET [ ' dispositivo5 ' ] )
d . rotulo = d . rotulo_padrao ( )
numero = d . get_numero_completo ( ) [ 1 : ]
zerar = False
for i in range ( len ( numero ) ) :
if not numero [ i ] :
zerar = True
if zerar :
numero [ i ] = 0
if zerar :
d . set_numero_completo ( [ d . dispositivo0 , ] + numero )
d . rotulo = d . rotulo_padrao ( )
except :
return True , JsonResponse ( { ' message ' : str (
_ ( ' Ocorreu erro na atualização do rótulo ' ) ) } , safe = False )
return True , JsonResponse ( {
' rotulo ' : d . rotulo ,
' dispositivo0 ' : d . dispositivo0 ,
' dispositivo1 ' : d . dispositivo1 ,
' dispositivo2 ' : d . dispositivo2 ,
' dispositivo3 ' : d . dispositivo3 ,
' dispositivo4 ' : d . dispositivo4 ,
' dispositivo5 ' : d . dispositivo5 } , safe = False )
return False , ' '
def get ( self , request , * args , * * kwargs ) :
flag_action , render_json_response = self . run_actions ( request )
if flag_action :
return render_json_response
return UpdateView . get ( self , request , * args , * * kwargs )
class DispositivoEdicaoVigenciaView ( FormMessagesMixin , UpdateView ) :
model = Dispositivo
template_name = ' compilacao/dispositivo_form_vigencia.html '
@ -2281,12 +2245,50 @@ class DispositivoDefinidorVigenciaView(FormMessagesMixin, FormView):
form = self . get_form ( )
if form . is_valid ( ) :
dvs = form . cleaned_data [ ' dispositivo_vigencia ' ]
try :
with transaction . atomic ( ) :
self . object . dispositivos_vigencias_set . clear ( )
for item in dvs :
d = Dispositivo . objects . get ( pk = item )
self . object . dispositivos_vigencias_set . add ( d )
return self . form_valid ( form )
except :
return self . form_invalid ( form )
else :
return self . form_invalid ( form )
class DispositivoEdicaoAlteracaoView ( FormMessagesMixin , UpdateView ) :
model = Dispositivo
template_name = ' compilacao/dispositivo_form_alteracao.html '
form_class = DispositivoEdicaoAlteracaoForm
form_valid_message = _ ( ' Alterações no Dispositivo realizadas com sucesso! ' )
form_invalid_message = _ ( ' Houve erro em registrar '
' as alterações no Dispositivo ' )
@property
def cancel_url ( self ) :
return reverse_lazy (
' compilacao:ta_text_edit ' ,
kwargs = { ' ta_id ' : self . kwargs [ ' ta_id ' ] } ) + ' # ' + str ( self . object . pk )
def get_url_this_view ( self ) :
return ' compilacao:dispositivo_edit_alteracao '
def get_success_url ( self ) :
return reverse_lazy (
' compilacao:dispositivo_edit_alteracao ' ,
kwargs = { ' ta_id ' : self . kwargs [ ' ta_id ' ] , ' pk ' : self . kwargs [ ' pk ' ] } )
def post ( self , request , * args , * * kwargs ) :
self . object = get_object_or_404 ( Dispositivo , pk = kwargs [ ' pk ' ] )
form = self . get_form ( )
if form . is_valid ( ) :
try :
with transaction . atomic ( ) :
return self . form_valid ( form )
except :
return self . form_invalid ( form )
else :
return self . form_invalid ( form )