@ -9,10 +9,12 @@ from django.conf import settings
from django . contrib import messages
from django . contrib . auth . mixins import PermissionRequiredMixin
from django . contrib . contenttypes . models import ContentType
from django . core . exceptions import ValidationError
from django . core . signing import Signer
from django . core . urlresolvers import reverse , reverse_lazy
from django . db import transaction
from django . db . models import Q
from django . db . models . query import QuerySet
from django . http . response import ( HttpResponse , HttpResponseRedirect ,
JsonResponse , Http404 )
from django . shortcuts import get_object_or_404 , redirect
@ -1525,6 +1527,13 @@ class ActionDeleteDispositivoMixin(ActionsCommonsMixin):
return data
def remover_dispositivo ( self , base , bloco ) :
if base . tipo_dispositivo . dispositivo_de_alteracao :
bloco = False
for d in base . dispositivos_alterados_set . all ( ) :
d . refresh_from_db ( )
self . remover_dispositivo ( d , bloco )
username = self . request . user . username
base_ordem = base . ordem
if base . dispositivo_subsequente or base . dispositivo_substituido :
@ -1836,7 +1845,10 @@ class ActionDeleteDispositivoMixin(ActionsCommonsMixin):
dpts = base . dispositivos_alterados_set . all ( ) . order_by (
' -ordem_bloco_atualizador ' )
for dpt in dpts :
self . remover_dispositivo ( dpt , False )
try :
self . remover_dispositivo ( dpt , False )
except Exception as e :
print ( e )
if base . pk :
"""
@ -2585,17 +2597,20 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
return self . json_add_next_registra_inclusao (
context , local_add = ' json_add_in ' )
def registra_revogacao ( self , bloco_alteracao , dispositivo_a_revogar ) :
def registra_revogacao ( self , bloco_alteracao , dsp_a_rev , em_bloco = False ) :
return self . registra_alteracao (
bloco_alteracao ,
dispositivo_a_revogar ,
revogacao = True
dsp_a_rev ,
revogacao = True ,
em_bloco = em_bloco
)
def registra_alteracao ( self ,
bloco_alteracao ,
dispositivo_a_alterar ,
revogacao = False ) :
dsp_a_alterar ,
revogacao = False ,
em_bloco = False ) :
"""
Caracteristicas :
1 - Se é um dispositivo simples e sem subsequente
@ -2621,14 +2636,69 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
data . update ( { ' pk ' : bloco_alteracao . pk ,
' pai ' : [ bloco_alteracao . pk , ] } )
history = dispositivo_a_alterar . history ( )
if isinstance ( dsp_a_alterar , list ) :
dsps = Dispositivo . objects . filter ( id__in = dsp_a_alterar )
dsps_ids = set ( )
for d in dsps :
ds = d
while ds . dispositivo_subsequente :
ds = ds . dispositivo_subsequente
dsps_ids . add ( ds . pk )
if em_bloco :
proximo_bloco = Dispositivo . objects . filter (
ordem__gt = ds . ordem ,
nivel__lte = ds . nivel ,
ta_id = ds . ta_id ) . first ( )
params = {
' ta_id ' : ds . ta_id ,
' nivel__gte ' : ds . nivel ,
' ordem__gte ' : ds . ordem ,
' dispositivo_subsequente__isnull ' : True
}
if proximo_bloco :
params [ ' ordem__lt ' ] = proximo_bloco . ordem
bloco = Dispositivo . objects . filter (
* * params ) . values_list ( ' id ' , ' auto_inserido ' )
for id , auto in bloco :
if auto :
dsp_pai = Dispositivo . objects . filter (
pk = id
) . values_list ( ' dispositivo_pai ' , flat = True ) . first ( )
if dsp_pai in dsps_ids :
dsps_ids . remove ( dsp_pai )
dsps_ids . add ( id )
dsps_ids = Dispositivo . objects . filter (
id__in = dsps_ids
) . values_list ( ' id ' , flat = " True " )
for dsp in dsps_ids :
with transaction . atomic ( ) :
data . update (
self . registra_alteracao (
bloco_alteracao ,
dsp ,
revogacao
)
)
if ' message ' in data and ' danger ' in data [ ' message ' ] [ ' type ' ] :
return data
return data
dsp_a_alterar = Dispositivo . objects . get (
pk = dsp_a_alterar )
for d in history :
history = dsp_a_alterar . history ( )
for d in list ( history ) :
if d . inicio_vigencia < = bloco_alteracao . inicio_vigencia :
dispositivo_a_alterar = d
dsp_a_alterar = d
break
if ( dispositivo_a_alterar . inicio_vigencia >
if ( dsp_a_alterar . inicio_vigencia >
bloco_alteracao . inicio_vigencia ) :
self . set_message (
data , ' danger ' ,
@ -2637,7 +2707,7 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
' Alterador! ' ) , time = 10000 )
return data
if di spositivo _a_alterar . tipo_dispositivo . dispositivo_de_articulacao \
if dsp_a_alterar . tipo_dispositivo . dispositivo_de_articulacao \
and not revogacao :
self . set_message (
data , ' warning ' ,
@ -2647,13 +2717,13 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
' para o dispositivo que se quer alterar. ' ) , modal = True )
ndp = Dispositivo . new_instance_based_on (
di spositivo _a_alterar , di spositivo _a_alterar . tipo_dispositivo )
ndp . auto_inserido = di spositivo _a_alterar . auto_inserido
ndp . rotulo = di spositivo _a_alterar . rotulo
dsp_a_alterar , dsp_a_alterar . tipo_dispositivo )
ndp . auto_inserido = dsp_a_alterar . auto_inserido
ndp . rotulo = dsp_a_alterar . rotulo
ndp . publicacao = bloco_alteracao . publicacao
if not revogacao :
ndp . texto = di spositivo _a_alterar . texto
ndp . texto = dsp_a_alterar . texto
else :
ndp . texto = Dispositivo . TEXTO_PADRAO_DISPOSITIVO_REVOGADO
ndp . dispositivo_de_revogacao = True
@ -2668,15 +2738,15 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
ndp . inicio_vigencia = bloco_alteracao . inicio_eficacia
try :
ordem = di spositivo _a_alterar . criar_espaco (
espaco_a_criar = 1 , local = ' json_add_in ' )
ordem = dsp_a_alterar . criar_espaco (
espaco_a_criar = 1 , local = ' json_add_in_with_auto ' )
ndp . ordem = ordem
ndp . dispositivo_atualizador = bloco_alteracao
ndp . ta_publicado = bloco_alteracao . ta
p = di spositivo _a_alterar
n = di spositivo _a_alterar . dispositivo_subsequente
p = dsp_a_alterar
n = dsp_a_alterar . dispositivo_subsequente
ndp . dispositivo_substituido = p
ndp . dispositivo_subsequente = n
@ -2711,7 +2781,7 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
n . dispositivo_substituido = ndp
n . save ( )
filhos_diretos = di spositivo _a_alterar . dispositivos_filhos_set
filhos_diretos = dsp_a_alterar . dispositivos_filhos_set
for d in filhos_diretos . all ( ) :
d . dispositivo_pai = ndp
d . save ( )
@ -2728,14 +2798,20 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
self . set_message (
data , ' success ' ,
_ ( ' Dispositivo de Revogação adicionado com sucesso. ' ) )
# data.update({'pk': ndp.pk,
# 'pai': [bloco_alteracao.pk, ]})
except ValidationError as ve :
self . set_message (
data , ' danger ' ,
_ ( ' O dispositivo ( {} - {} ) já existe neste bloco. ' . format (
ndp . tipo_dispositivo ,
ndp . get_nomenclatura_completa ( ) ) ) , time = 10000 )
except Exception as e :
username = self . request . user . username
self . logger . error ( " user= " + username + " . " + str ( e ) )
print ( e )
data . update ( { ' pk ' : ndp . pk ,
' pai ' : [ bloco_alteracao . pk , ] } )
self . set_message (
data , ' danger ' ,
_ ( ' Não é foi possível registrar sua solicitação! ' ) , time = 10000 )
return data
@ -2836,17 +2912,16 @@ class DispositivoDinamicEditView(
formtype = request . POST [ ' formtype ' ]
if formtype == ' get_form_alteracao ' :
dispositivo_a_alterar = Dispositivo . objects . get (
pk = request . POST [ ' dispositivo_alterado ' ] )
data = self . registra_alteracao ( d , dispositivo_a_alterar )
data = self . registra_alteracao (
d , request . POST . getlist ( ' dispositivo_alterado[] ' , [ ] ) )
elif formtype == ' get_form_revogacao ' :
dispositivo_a_revogar = Dispositivo . objects . get (
pk = request . POST [ ' dispositivo_revogado ' ] )
data = self . registra_revogacao ( d , dispositivo_a_revogar )
data = self . registra_revogacao (
d ,
request . POST . getlist ( ' dispositivo_revogado[] ' , [ ] ) ,
request . POST . get ( " revogacao_em_bloco " ) == " True "
)
if formtype == ' get_form_inclusao ' :