diff --git a/sapl/compilacao/views.py b/sapl/compilacao/views.py index 2096f9cb0..54693dae1 100644 --- a/sapl/compilacao/views.py +++ b/sapl/compilacao/views.py @@ -1881,27 +1881,30 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): try: Dispositivo.objects.filter( - (Q(ta=dvt.ta) & Q(ta_publicado__isnull=True)) | - Q(ta_publicado=dvt.ta) + ta=dvt.ta, ta_publicado__isnull=True ).update( dispositivo_vigencia=dvt, inicio_vigencia=dvt.inicio_vigencia, inicio_eficacia=dvt.inicio_eficacia) - 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) - d.save() + Dispositivo.objects.filter(ta_publicado=dvt.ta + ).update( + dispositivo_vigencia=dvt, + inicio_vigencia=dvt.inicio_eficacia, + inicio_eficacia=dvt.inicio_eficacia) - if d.dispositivo_subsequente: - ds = d.dispositivo_subsequente - d.fim_vigencia = ds.inicio_vigencia - timedelta(days=1) - d.fim_eficacia = ds.inicio_eficacia - timedelta(days=1) + dps = Dispositivo.objects.filter(dispositivo_vigencia=dvt) + 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() + + if d.dispositivo_subsequente: + ds = d.dispositivo_subsequente + d.fim_vigencia = ds.inicio_vigencia - timedelta(days=1) + d.fim_eficacia = ds.inicio_eficacia - timedelta(days=1) d.save() data = {'pk': dvt.pk, @@ -1948,6 +1951,19 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin): else: raise Exception('Não existe perfil padrão!') + if not base.dispositivo_vigencia and tipo.dispositivo_de_alteracao: + data = {'pk': base.pk, + 'pai': [base.dispositivo_pai.pk, ]} + self.set_message( + data, 'danger', + _('Registros de Compilação só podem ser realizados ' + 'após a conclusão do lançamento deste ' + 'Texto Articulado.\nConclua o Lançamento, defina ' + 'o dispositivo de vigência e as datas de vigência e ' + 'eficácia. Só depois retorne ' + 'realizando Registros de Compilação.'), modal=True) + return data + dp_irmao = None dp_pai = None for dp in parents: @@ -2353,6 +2369,27 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, data.update({'pk': bloco_alteracao.pk, 'pai': [bloco_alteracao.pk, ]}) + if not bloco_alteracao.dispositivo_vigencia: + """ + essa restrição não é necessária pois os lançamentos podem ser + aleatórios, desde que se no fim do lançamento, datas de vigência + e eficácia, bem como o dispositivo de vigência da norma seja + configurado. Como nos primeiros testes com usuários ficou + demonstrado o esquecimento/desconhecimento dessa tarefa, + principalmente em documentos que possuem datas de vigência e/ou + eficácia diferentes da data de publicação. Apesar de já aparecer + na rotina de notificações, achei por bem colocr essa restrição. + """ + self.set_message( + data, 'danger', + _('Registros de Compilação só podem ser realizados ' + 'após a conclusão do lançamento deste ' + 'Texto Articulado.\r\nConclua o Lançamento, defina ' + 'o dispositivo de vigência e as datas de vigência e ' + 'eficácia. Só depois retorne ' + 'realizando Registros de Compilação.'), modal=True) + return data + history = dispositivo_a_alterar.history() for d in history: @@ -2377,11 +2414,10 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, ndp = Dispositivo.new_instance_based_on( dispositivo_a_alterar, dispositivo_a_alterar.tipo_dispositivo) - ndp.auto_inserido = dispositivo_a_alterar.auto_inserido - ndp.rotulo = dispositivo_a_alterar.rotulo ndp.publicacao = bloco_alteracao.publicacao + if not revogacao: ndp.texto = dispositivo_a_alterar.texto else: @@ -2389,12 +2425,8 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, ndp.dispositivo_de_revogacao = True ndp.dispositivo_vigencia = bloco_alteracao.dispositivo_vigencia - if ndp.dispositivo_vigencia: - ndp.inicio_eficacia = ndp.dispositivo_vigencia.inicio_eficacia - ndp.inicio_vigencia = ndp.dispositivo_vigencia.inicio_vigencia - else: - ndp.inicio_eficacia = bloco_alteracao.inicio_eficacia - ndp.inicio_vigencia = bloco_alteracao.inicio_vigencia + ndp.inicio_eficacia = ndp.dispositivo_vigencia.inicio_eficacia + ndp.inicio_vigencia = ndp.dispositivo_vigencia.inicio_eficacia try: ordem = dispositivo_a_alterar.criar_espaco( @@ -2420,6 +2452,7 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, dispositivos_do_bloco = \ bloco_alteracao.dispositivos_alterados_set.order_by( 'ordem_bloco_atualizador') + if dispositivos_do_bloco.exists(): ndp.ordem_bloco_atualizador = dispositivos_do_bloco.last( ).ordem_bloco_atualizador + Dispositivo.INTERVALO_ORDEM diff --git a/sapl/static/styles/compilacao.scss b/sapl/static/styles/compilacao.scss index 946852703..8646401bd 100644 --- a/sapl/static/styles/compilacao.scss +++ b/sapl/static/styles/compilacao.scss @@ -1355,6 +1355,11 @@ a:link:after, a:visited:after { display: inline; } } +.lista-dispositivo { + &.controls-radio-checkbox { + border: 0px; + } +} .cp-nav-parents { & > .dropdown-menu { left: 0;