Browse Source

Merge pull request #704 from interlegis/compilacao

Conclui integração de compilacao com sapl:
Adiciona configuração de ativação da compilação de Textos Articulados a base de configurações do sapl... model sapl.base.models.AppConfig
Adiciona rotina de carga inicial das configurações mediante parametrização que segue Lei Federal Brasileira - Lei Complementar 95 - já com um perfil opcional para variação numérica de Dispositivos.
pull/713/head
Leandro Roberto da Silva 8 years ago
committed by GitHub
parent
commit
2b57e2129b
  1. 7
      sapl/base/forms.py
  2. 30
      sapl/base/migrations/0020_auto_20161006_0950.py
  3. 20
      sapl/base/migrations/0021_auto_20161006_1019.py
  4. 15
      sapl/base/models.py
  5. 231
      sapl/compilacao/compilacao_data_tables.sql
  6. 98
      sapl/compilacao/forms.py
  7. 20
      sapl/compilacao/migrations/0055_dispositivo_dispositivo_de_revogacao.py
  8. 21
      sapl/compilacao/migrations/0056_auto_20161006_1251.py
  9. 42
      sapl/compilacao/models.py
  10. 2
      sapl/compilacao/templatetags/compilacao_filters.py
  11. 5
      sapl/compilacao/urls.py
  12. 358
      sapl/compilacao/views.py
  13. 44
      sapl/materia/views.py
  14. 22
      sapl/norma/views.py
  15. 6
      sapl/static/js/compilacao.js
  16. 132
      sapl/static/js/compilacao_edit.js
  17. 6
      sapl/static/styles/compilacao.scss
  18. 1
      sapl/templates/base.html
  19. 2
      sapl/templates/base/layouts.yaml
  20. 4
      sapl/templates/compilacao/ajax_actions_dinamic_edit.html
  21. 18
      sapl/templates/compilacao/ajax_actions_registro_inclusao.html
  22. 2
      sapl/templates/compilacao/layout/dispositivo_checkbox.html
  23. 2
      sapl/templates/compilacao/layout/dispositivo_radio.html
  24. 2
      sapl/templates/compilacao/layouts.yaml
  25. 5
      sapl/templates/compilacao/text_edit_bloco.html
  26. 2
      sapl/templates/compilacao/text_list.html
  27. 12
      sapl/templates/compilacao/text_list_bloco.html
  28. 2
      sapl/templates/compilacao/textoarticulado_menu_config.html
  29. 4
      sapl/templates/materia/subnav.yaml
  30. 4
      sapl/templates/norma/subnav.yaml

7
sapl/base/forms.py

@ -1,4 +1,3 @@
import django_filters
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button, Fieldset, Layout from crispy_forms.layout import HTML, Button, Fieldset, Layout
from django import forms from django import forms
@ -7,6 +6,7 @@ from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.forms import ModelForm from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
import django_filters
from sapl.crispy_layout_mixin import form_actions, to_row from sapl.crispy_layout_mixin import form_actions, to_row
from sapl.materia.models import MateriaLegislativa from sapl.materia.models import MateriaLegislativa
@ -272,4 +272,7 @@ class ConfiguracoesAppForm(ModelForm):
model = AppConfig model = AppConfig
fields = ['documentos_administrativos', fields = ['documentos_administrativos',
'sequencia_numeracao', 'sequencia_numeracao',
'painel_aberto'] 'painel_aberto',
'texto_articulado_proposicao',
'texto_articulado_materia',
'texto_articulado_norma']

30
sapl/base/migrations/0020_auto_20161006_0950.py

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-06 12:50
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0019_auto_20160928_1951'),
]
operations = [
migrations.AddField(
model_name='appconfig',
name='texto_articulado_materia',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Usar Textos Articulados para Matérias'),
),
migrations.AddField(
model_name='appconfig',
name='texto_articulado_norma',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Usar Textos Articulados para Normas'),
),
migrations.AddField(
model_name='appconfig',
name='texto_articulado_proposicao',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Usar Textos Articulados para Proposições'),
),
]

20
sapl/base/migrations/0021_auto_20161006_1019.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-06 13:19
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('base', '0020_auto_20161006_0950'),
]
operations = [
migrations.AlterField(
model_name='appconfig',
name='texto_articulado_norma',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, verbose_name='Usar Textos Articulados para Normas'),
),
]

15
sapl/base/models.py

@ -7,11 +7,12 @@ from django.contrib.contenttypes.models import ContentType
from django.core import exceptions from django.core import exceptions
from django.db import models, router from django.db import models, router
from django.db.utils import DEFAULT_DB_ALIAS from django.db.utils import DEFAULT_DB_ALIAS
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import string_concat from django.utils.translation import string_concat
from django.utils.translation import ugettext_lazy as _
from sapl.utils import UF, YES_NO_CHOICES from sapl.utils import UF, YES_NO_CHOICES
TIPO_DOCUMENTO_ADMINISTRATIVO = (('O', _('Ostensivo')), TIPO_DOCUMENTO_ADMINISTRATIVO = (('O', _('Ostensivo')),
('R', _('Restritivo'))) ('R', _('Restritivo')))
@ -98,6 +99,18 @@ class AppConfig(models.Model):
verbose_name=_('Painel aberto para usuário anônimo'), verbose_name=_('Painel aberto para usuário anônimo'),
choices=YES_NO_CHOICES, default=False) choices=YES_NO_CHOICES, default=False)
texto_articulado_proposicao = models.BooleanField(
verbose_name=_('Usar Textos Articulados para Proposições'),
choices=YES_NO_CHOICES, default=False)
texto_articulado_materia = models.BooleanField(
verbose_name=_('Usar Textos Articulados para Matérias'),
choices=YES_NO_CHOICES, default=False)
texto_articulado_norma = models.BooleanField(
verbose_name=_('Usar Textos Articulados para Normas'),
choices=YES_NO_CHOICES, default=True)
class Meta: class Meta:
verbose_name = _('Configurações da Aplicação') verbose_name = _('Configurações da Aplicação')
verbose_name_plural = _('Configurações da Aplicação') verbose_name_plural = _('Configurações da Aplicação')

231
sapl/compilacao/compilacao_data_tables.sql

@ -0,0 +1,231 @@
INSERT INTO compilacao_perfilestruturaltextoarticulado (id, sigla, nome, padrao) VALUES (2, 'LC95-v', 'Lei Complementar 95 com Variação', false);
INSERT INTO compilacao_perfilestruturaltextoarticulado (id, sigla, nome, padrao) VALUES (1, 'LC95', 'Lei Complementar 95', true);
SELECT pg_catalog.setval('compilacao_perfilestruturaltextoarticulado_id_seq', 2, true);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (1, 'Articulação', 'articulacao', '', '', 0, '', '', '', '', '', '', true, 'N', 'N', 'N', 'N', 'N', 'N', '-', '-', '-', '-', '-', true, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (2, 'Ementa', 'ementa', '', '', 0, '', '', '', '', '', '', false, 'N', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (101, 'Disposições Preliminares', 'disp_preliminares', '', 'Disposições Preliminares', 0, '', '<br>', '', '<br>', '', '', false, 'N', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (102, 'Disposições Gerais', 'disp_gerais', '', 'Disposições Gerais', 0, '', '<br>', '', '<br>', '', '', false, 'N', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (103, 'Disposições Transitórias', 'disp_transitorias', '', 'Disposições Transitórias', 0, '', '<br>', '', '<br>', '', '', false, 'N', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (104, 'Disposições Finais', 'disp_finais', '', 'Disposições Finais', 0, '', '<br>', '', '<br>', '', '', false, 'N', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (111, 'Anexo', 'anexo', '', 'Anexo ', 0, '', '<br>', '', '<br>', '<br>', '', false, 'I', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (112, 'Parte', 'parte', '', 'Parte ', 0, '', '<br>', '', '<br>', '<br>', '', false, 'I', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (113, 'Livro', 'livro', '', 'Livro ', 0, '', '<br>', '', '<br>', '<br>', '', false, 'I', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (114, 'Título', 'titulo', '', 'Título ', 0, '', '<br>', '', '<br>', '<br>', '', false, 'I', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (115, 'Capítulo', 'capitulo', '', 'Capítulo ', 0, '', '<br>', '', '<br>', '<br>', '', false, 'I', 'A', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (116, 'Seção', 'secao', '', 'Seção ', 0, '', '<br>', '', '<br>', '<br>', '', false, 'I', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (117, 'SubSeção', 'subsecao', '', 'SubSeção ', 0, '', '<br>', '', '<br>', '<br>', '', false, '1', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (119, 'Artigo', 'artigo', '', 'Art. ', 9, '.', '&nbsp;&ndash;&nbsp;', '', '', '', '', true, '1', 'A', '1', '1', '1', '1', '-', '-', '-', '-', '-', true, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (120, 'Caput', 'caput', '', '', 0, '', '', '', '', '', '', false, 'N', 'N', 'N', 'N', 'N', 'N', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (121, 'Parágrafo', 'paragrafo', '', '§ ;Parágrafo Único ', 9, '', '&nbsp;&ndash;&nbsp;', '', '', '', '', false, '1', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (122, 'Inciso', 'inciso', '', '', 0, '', '&nbsp;&ndash;&nbsp;', '', '', '', '', false, 'I', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (123, 'Alinea', 'alinea', '', '', 0, ')', '&nbsp;&ndash;&nbsp;', '', '', '', '', false, 'a', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (124, 'Item', 'item', '', '', 0, '', '&nbsp;&ndash;&nbsp;', '', '', '', '', false, '1', '1', '1', '1', '1', '1', '.', '.', '.', '.', '.', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (125, 'Texto Não Estruturado', 'texto_n_estruturado', '', '', 0, '', '', '', '', '', '', false, 'N', 'N', 'N', 'N', 'N', 'N', '-', '-', '-', '-', '-', false, false);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (3, 'Bloco Alteração', 'bloco_alteracao', '', '', 0, '', '', '', '', '', '', false, 'N', 'N', 'N', 'N', 'N', 'N', '-', '-', '-', '-', '-', true, true);
INSERT INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_sufixo_texto, rotulo_sufixo_html, texto_prefixo_html, texto_sufixo_html, nota_automatica_prefixo_html, nota_automatica_sufixo_html, contagem_continua, formato_variacao0, formato_variacao1, formato_variacao2, formato_variacao3, formato_variacao4, formato_variacao5, rotulo_separador_variacao01, rotulo_separador_variacao12, rotulo_separador_variacao23, rotulo_separador_variacao34, rotulo_separador_variacao45, dispositivo_de_articulacao, dispositivo_de_alteracao) VALUES (4, 'Omissis', 'omissis', '', '', 0, '', '', '', '', '', '', false, 'N', 'N', 'N', 'N', 'N', 'N', '-', '-', '-', '-', '-', false, true);
SELECT pg_catalog.setval('compilacao_tipodispositivo_id_seq', 125, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (117, 112, 1, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (119, 114, 1, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (120, 115, 1, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (121, 116, 1, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (122, 117, 1, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (124, 119, 1, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (125, 125, 1, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (128, 4, 3, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (148, 111, 101, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (149, 112, 101, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (150, 113, 101, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (151, 114, 101, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (152, 115, 101, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (153, 116, 101, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (154, 117, 101, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (156, 119, 101, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (157, 111, 102, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (158, 112, 102, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (160, 114, 102, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (161, 115, 102, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (162, 116, 102, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (163, 117, 102, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (165, 119, 102, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (166, 111, 103, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (167, 112, 103, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (168, 113, 103, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (169, 114, 103, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (170, 115, 103, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (171, 116, 103, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (172, 117, 103, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (175, 111, 104, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (176, 112, 104, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (177, 113, 104, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (178, 114, 104, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (179, 115, 104, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (180, 116, 104, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (181, 117, 104, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (183, 119, 104, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (185, 112, 111, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (186, 113, 111, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (187, 114, 111, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (188, 115, 111, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (189, 116, 111, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (192, 119, 111, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (193, 113, 112, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (194, 114, 112, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (195, 115, 112, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (196, 116, 112, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (197, 117, 112, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (199, 119, 112, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (200, 114, 113, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (201, 115, 113, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (202, 116, 113, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (203, 117, 113, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (318, 119, 113, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (206, 115, 114, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (207, 116, 114, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (208, 117, 114, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (319, 115, 114, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (320, 116, 114, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (211, 116, 115, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (210, 119, 114, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (212, 117, 115, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (321, 117, 114, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (214, 119, 115, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (215, 117, 116, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (217, 119, 116, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (219, 119, 117, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (243, 3, 119, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (222, 121, 119, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (226, 125, 119, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (251, 3, 120, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (227, 122, 120, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (228, 123, 120, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (229, 124, 120, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (230, 125, 120, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (247, 3, 121, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (232, 123, 121, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (233, 124, 121, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (234, 125, 121, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (248, 3, 122, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (235, 123, 122, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (236, 124, 122, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (237, 125, 122, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (249, 3, 123, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (238, 124, 123, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (239, 125, 123, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (250, 3, 124, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (240, 125, 124, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (112, 101, 1, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (113, 102, 1, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (115, 104, 1, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (116, 111, 1, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (344, 103, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (346, 111, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (345, 104, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (347, 112, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (349, 114, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (350, 115, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (351, 116, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (352, 117, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (354, 119, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (355, 125, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (255, 4, 3, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (262, 111, 101, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (263, 112, 101, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (264, 113, 101, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (265, 114, 101, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (266, 115, 101, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (267, 116, 101, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (268, 117, 101, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (270, 119, 101, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (271, 111, 102, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (272, 112, 102, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (273, 113, 102, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (274, 114, 102, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (275, 115, 102, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (276, 116, 102, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (277, 117, 102, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (279, 119, 102, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (280, 111, 103, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (281, 112, 103, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (282, 113, 103, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (283, 114, 103, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (284, 115, 103, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (285, 116, 103, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (286, 117, 103, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (174, 119, 103, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (288, 119, 103, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (289, 111, 104, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (290, 112, 104, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (292, 114, 104, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (293, 115, 104, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (294, 116, 104, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (295, 117, 104, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (297, 119, 104, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (298, 112, 111, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (299, 113, 111, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (300, 114, 111, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (301, 115, 111, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (302, 116, 111, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (303, 117, 111, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (305, 119, 111, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (306, 113, 112, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (307, 114, 112, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (308, 115, 112, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (309, 116, 112, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (310, 117, 112, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (312, 119, 112, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (313, 114, 113, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (314, 115, 113, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (315, 116, 113, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (316, 117, 113, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (205, 119, 113, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (323, 119, 114, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (324, 116, 115, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (325, 117, 115, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (328, 117, 116, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (330, 119, 116, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (332, 119, 117, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (379, 3, 119, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (335, 121, 119, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (336, 125, 119, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (384, 3, 120, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (337, 122, 120, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (338, 123, 120, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (339, 124, 120, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (340, 125, 120, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (380, 3, 121, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (369, 122, 121, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (370, 123, 121, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (371, 124, 121, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (231, 122, 121, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (372, 125, 121, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (373, 123, 122, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (374, 124, 122, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (375, 125, 122, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (382, 3, 123, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (376, 124, 123, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (377, 125, 123, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (383, 3, 124, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (378, 125, 124, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (111, 2, 1, true, 2, 1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (341, 2, 1, true, 1, 1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (343, 102, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (114, 103, 1, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (342, 101, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (348, 113, 1, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (159, 113, 102, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (291, 113, 104, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (190, 117, 111, false, 2, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (327, 119, 115, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (381, 3, 122, false, 1, -1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (334, 120, 119, true, 1, 1, false);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (221, 120, 119, true, 2, 1, true);
SELECT pg_catalog.setval('compilacao_tipodispositivorelationship_id_seq', 384, true);
INSERT INTO compilacao_tiponota (id, sigla, nome, modelo) VALUES (1, 'NE', 'Nota Explicativa', '');
INSERT INTO compilacao_tiponota (id, sigla, nome, modelo) VALUES (2, 'NI', 'Nota de Inconstitucionalidade', 'Declaração de Inconstitucionalidade conforme n...');
SELECT pg_catalog.setval('compilacao_tiponota_id_seq', 2, true);
INSERT INTO compilacao_tipopublicacao (id, sigla, nome) VALUES (2, 'RPUB', 'Republicação');
INSERT INTO compilacao_tipopublicacao (id, sigla, nome) VALUES (3, 'RET', 'Retificação');
INSERT INTO compilacao_tipopublicacao (id, sigla, nome) VALUES (1, 'PUB', 'Publicação');
SELECT pg_catalog.setval('compilacao_tipopublicacao_id_seq', 3, true);
INSERT INTO compilacao_tipovide (id, sigla, nome) VALUES (1, 'RS', 'Referência Simples');
SELECT pg_catalog.setval('compilacao_tipovide_id_seq', 1, true);

98
sapl/compilacao/forms.py

@ -1280,3 +1280,101 @@ class DispositivoRegistroAlteracaoForm(Form):
super(DispositivoRegistroAlteracaoForm, self).__init__(*args, **kwargs) super(DispositivoRegistroAlteracaoForm, self).__init__(*args, **kwargs)
self.fields['dispositivo_alterado'].choices = [] self.fields['dispositivo_alterado'].choices = []
class DispositivoRegistroRevogacaoForm(Form):
dispositivo_revogado = forms.ModelChoiceField(
label=_('Dispositivo a ser revogado'),
required=False,
queryset=Dispositivo.objects.all())
dispositivo_search_form = forms.CharField(widget=forms.HiddenInput(),
required=False)
def __init__(self, *args, **kwargs):
layout = []
kwargs.pop('instance')
kwargs['initial'].pop('editor_type')
row_dispositivo = Field(
'dispositivo_revogado',
data_sapl_ta='DispositivoSearch',
data_field='dispositivo_revogado',
data_type_selection='radio',
template="compilacao/layout/dispositivo_radio.html")
layout.append(Fieldset(_('Registro de Revogação - '
'Seleção do Dispositivo a ser Revogado'),
row_dispositivo,
css_class="col-md-12"))
layout.append(Field('dispositivo_search_form'))
more = [
HTML('<a class="btn btn-inverse btn-fechar">%s</a>' %
_('Cancelar')),
]
more.append(Submit('salvar', _('Salvar'), css_class='pull-right'))
buttons = FormActions(*more, css_class='form-group')
_fields = [Div(*layout, css_class="row-fluid")] + \
[to_row([(buttons, 12)])]
self.helper = FormHelper()
self.helper.layout = Layout(*_fields)
super(DispositivoRegistroRevogacaoForm, self).__init__(*args, **kwargs)
self.fields['dispositivo_revogado'].choices = []
class DispositivoRegistroInclusaoForm(Form):
dispositivo_base_para_inclusao = forms.ModelChoiceField(
label=_('Dispositivo Base para inclusão de novo dispositivo'),
required=False,
queryset=Dispositivo.objects.all())
dispositivo_search_form = forms.CharField(widget=forms.HiddenInput(),
required=False)
def __init__(self, *args, **kwargs):
layout = []
kwargs.pop('instance')
kwargs['initial'].pop('editor_type')
row_dispositivo = Field(
'dispositivo_base_para_inclusao',
data_sapl_ta='DispositivoSearch',
data_field='dispositivo_base_para_inclusao',
data_type_selection='radio',
template="compilacao/layout/dispositivo_radio.html")
layout.append(Fieldset(_('Registro de Inclusão - '
'Seleção do Dispositivo Base para inclusão '
'de novo dispositivo.'),
row_dispositivo,
css_class="col-md-12"))
layout.append(Field('dispositivo_search_form'))
layout.append(Div(css_class="allowed_inserts col-md-12"))
more = [
HTML('<a class="btn btn-inverse btn-fechar">%s</a>' %
_('Cancelar')),
]
#more.append(Submit('salvar', _('Salvar'), css_class='pull-right'))
buttons = FormActions(*more, css_class='form-group')
_fields = [Div(*layout, css_class="row-fluid")] + \
[to_row([(buttons, 12)])]
self.helper = FormHelper()
self.helper.layout = Layout(*_fields)
super(DispositivoRegistroInclusaoForm, self).__init__(*args, **kwargs)
self.fields['dispositivo_base_para_inclusao'].choices = []

20
sapl/compilacao/migrations/0055_dispositivo_dispositivo_de_revogacao.py

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-09-20 11:57
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0054_auto_20160916_1424'),
]
operations = [
migrations.AddField(
model_name='dispositivo',
name='dispositivo_de_revogacao',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Dispositivo de Revogação'),
),
]

21
sapl/compilacao/migrations/0056_auto_20161006_1251.py

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-10-06 15:51
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0055_dispositivo_dispositivo_de_revogacao'),
]
operations = [
migrations.AlterField(
model_name='tipotextoarticulado',
name='content_type',
field=models.OneToOneField(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='Modelo Integrado'),
),
]

42
sapl/compilacao/models.py

@ -71,9 +71,9 @@ class BaseModel(models.Model):
class TipoTextoArticulado(models.Model): class TipoTextoArticulado(models.Model):
sigla = models.CharField(max_length=3, verbose_name=_('Sigla')) sigla = models.CharField(max_length=3, verbose_name=_('Sigla'))
descricao = models.CharField(max_length=50, verbose_name=_('Descrição')) descricao = models.CharField(max_length=50, verbose_name=_('Descrição'))
content_type = models.ForeignKey( content_type = models.OneToOneField(
ContentType, ContentType,
blank=True, null=True, default=None, null=True, default=None,
verbose_name=_('Modelo Integrado')) verbose_name=_('Modelo Integrado'))
participacao_social = models.NullBooleanField( participacao_social = models.NullBooleanField(
default=False, default=False,
@ -132,7 +132,7 @@ class TextoArticulado(TimestampedMixin):
'numero': self.numero, 'numero': self.numero,
'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")} 'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")}
def ordenar_dispositivos(self): def reagrupar_ordem_de_dispositivos(self):
dpts = Dispositivo.objects.filter(ta=self) dpts = Dispositivo.objects.filter(ta=self)
@ -150,6 +150,37 @@ class TextoArticulado(TimestampedMixin):
count += Dispositivo.INTERVALO_ORDEM count += Dispositivo.INTERVALO_ORDEM
Dispositivo.objects.filter(pk=d).update(ordem=count) Dispositivo.objects.filter(pk=d).update(ordem=count)
def reordenar_dispositivos(self):
dpts = Dispositivo.objects.filter(ta=self)
if not dpts.exists():
return
ordem_max = dpts.last().ordem
dpts.update(ordem=F('ordem') + ordem_max)
raizes = Dispositivo.objects.filter(
ta=self,
dispositivo_pai__isnull=True).values_list(
'pk', flat=True).order_by('ordem')
count = []
count.append(Dispositivo.INTERVALO_ORDEM)
def update(dpk):
Dispositivo.objects.filter(pk=dpk).update(ordem=count[0])
count[0] = count[0] + Dispositivo.INTERVALO_ORDEM
filhos = Dispositivo.objects.filter(
dispositivo_pai_id=dpk).values_list(
'pk', flat=True).order_by('ordem')
for dpk in filhos:
update(dpk)
for dpk in raizes:
update(dpk)
class TipoNota(models.Model): class TipoNota(models.Model):
sigla = models.CharField( sigla = models.CharField(
@ -587,6 +618,11 @@ class Dispositivo(BaseModel, TimestampedMixin):
choices=YES_NO_CHOICES, choices=YES_NO_CHOICES,
verbose_name=_('Visibilidade no Texto Articulado Publicado')) verbose_name=_('Visibilidade no Texto Articulado Publicado'))
dispositivo_de_revogacao = models.BooleanField(
default=False,
choices=YES_NO_CHOICES,
verbose_name=_('Dispositivo de Revogação'))
tipo_dispositivo = models.ForeignKey( tipo_dispositivo = models.ForeignKey(
TipoDispositivo, TipoDispositivo,
related_name='dispositivos_do_tipo_set', related_name='dispositivos_do_tipo_set',

2
sapl/compilacao/templatetags/compilacao_filters.py

@ -86,7 +86,7 @@ def nota_automatica(dispositivo, ta_pub_list):
ta_publicado = ta_pub_list[dispositivo.ta_publicado_id] if\ ta_publicado = ta_pub_list[dispositivo.ta_publicado_id] if\
ta_pub_list else dispositivo.ta_publicado ta_pub_list else dispositivo.ta_publicado
if dispositivo.texto == Dispositivo.TEXTO_PADRAO_DISPOSITIVO_REVOGADO: if dispositivo.dispositivo_de_revogacao:
return _('Revogado pelo %s - %s.') % ( return _('Revogado pelo %s - %s.') % (
d, ta_publicado) d, ta_publicado)
elif not dispositivo.dispositivo_substituido_id: elif not dispositivo.dispositivo_substituido_id:

5
sapl/compilacao/urls.py

@ -2,7 +2,8 @@ from django.conf.urls import include, url
from sapl.compilacao import views from sapl.compilacao import views
from sapl.compilacao.views import (TipoNotaCrud, TipoPublicacaoCrud, from sapl.compilacao.views import (TipoNotaCrud, TipoPublicacaoCrud,
TipoVideCrud, VeiculoPublicacaoCrud) TipoVideCrud, VeiculoPublicacaoCrud,
TipoDispositivoCrud)
from .apps import AppConfig from .apps import AppConfig
@ -122,5 +123,7 @@ urlpatterns = [
include(TipoPublicacaoCrud.get_urls())), include(TipoPublicacaoCrud.get_urls())),
url(r'^ta/config/veiculo-publicacao/', url(r'^ta/config/veiculo-publicacao/',
include(VeiculoPublicacaoCrud.get_urls())), include(VeiculoPublicacaoCrud.get_urls())),
url(r'^ta/config/tipo-dispositivo/',
include(TipoDispositivoCrud.get_urls())),
] ]

358
sapl/compilacao/views.py

@ -1,22 +1,26 @@
import sys
from collections import OrderedDict from collections import OrderedDict
from datetime import datetime, timedelta from datetime import datetime, timedelta
import logging
import sys
from braces.views import FormMessagesMixin from braces.views import FormMessagesMixin
from django import forms from django import forms
from django.conf import settings
from django.contrib import messages
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.signing import Signer from django.core.signing import Signer
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.db import transaction from django.db import transaction, connection
from django.db.models import Q from django.db.models import Q
from django.db.utils import IntegrityError
from django.http.response import (HttpResponse, HttpResponseRedirect, from django.http.response import (HttpResponse, HttpResponseRedirect,
JsonResponse) JsonResponse)
from django.shortcuts import get_object_or_404, redirect from django.shortcuts import get_object_or_404, redirect
from django.utils.dateparse import parse_date from django.utils.dateparse import parse_date
from django.utils.decorators import method_decorator from django.utils.decorators import method_decorator
from django.utils.encoding import force_text from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _, string_concat
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django.views.generic.detail import DetailView from django.views.generic.detail import DetailView
from django.views.generic.edit import (CreateView, DeleteView, FormView, from django.views.generic.edit import (CreateView, DeleteView, FormView,
@ -28,6 +32,8 @@ from sapl.compilacao.forms import (DispositivoDefinidorVigenciaForm,
DispositivoEdicaoBasicaForm, DispositivoEdicaoBasicaForm,
DispositivoEdicaoVigenciaForm, DispositivoEdicaoVigenciaForm,
DispositivoRegistroAlteracaoForm, DispositivoRegistroAlteracaoForm,
DispositivoRegistroInclusaoForm,
DispositivoRegistroRevogacaoForm,
DispositivoSearchModalForm, NotaForm, DispositivoSearchModalForm, NotaForm,
PublicacaoForm, TaForm, PublicacaoForm, TaForm,
TextNotificacoesForm, TipoTaForm, VideForm) TextNotificacoesForm, TipoTaForm, VideForm)
@ -41,15 +47,66 @@ from sapl.compilacao.utils import (DISPOSITIVO_SELECT_RELATED,
DISPOSITIVO_SELECT_RELATED_EDIT) DISPOSITIVO_SELECT_RELATED_EDIT)
from sapl.crud.base import Crud, CrudListView, make_pagination from sapl.crud.base import Crud, CrudListView, make_pagination
TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota') TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota')
TipoVideCrud = Crud.build(TipoVide, 'tipo_vide') TipoVideCrud = Crud.build(TipoVide, 'tipo_vide')
TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao') TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao')
VeiculoPublicacaoCrud = Crud.build(VeiculoPublicacao, 'veiculo_publicacao') VeiculoPublicacaoCrud = Crud.build(VeiculoPublicacao, 'veiculo_publicacao')
TipoDispositivoCrud = Crud.build(
TipoDispositivo, 'tipo_dispositivo')
logger = logging.getLogger(__name__)
def get_integrations_view_names():
result = []
modules = sys.modules
for key, value in modules.items():
if key.endswith('.views'):
for v in value.__dict__.values():
if hasattr(v, '__bases__'):
for base in v.__bases__:
if base == IntegracaoTaView:
result.append(v)
return result
def choice_models_in_extenal_views():
integrations_view_names = get_integrations_view_names()
result = [(None, '-------------'), ]
for item in integrations_view_names:
if hasattr(item, 'model') and hasattr(item, 'model_type_foreignkey'):
ct = ContentType.objects.filter(
model=item.model.__name__.lower(),
app_label=item.model._meta.app_label)
if ct.exists():
result.append((
ct[0].pk,
item.model._meta.verbose_name_plural))
return result
class IntegracaoTaView(TemplateView): class IntegracaoTaView(TemplateView):
def get(self, *args, **kwargs): def get_redirect_deactivated(self):
messages.error(
self.request,
_('O modulo de Textos Articulados está desativado.'))
return redirect('/')
def get(self, request, *args, **kwargs):
try:
if settings.DEBUG or not TipoDispositivo.objects.exists():
self.import_pattern()
except Exception as e:
logger.error(
string_concat(
_('Ocorreu erro na importação do arquivo base dos Tipos de'
'Dispositivos, entre outras informações iniciais.'),
str(e)))
return self.get_redirect_deactivated()
item = get_object_or_404(self.model, pk=kwargs['pk']) item = get_object_or_404(self.model, pk=kwargs['pk'])
related_object_type = ContentType.objects.get_for_model(item) related_object_type = ContentType.objects.get_for_model(item)
@ -57,6 +114,9 @@ class IntegracaoTaView(TemplateView):
object_id=item.pk, object_id=item.pk,
content_type=related_object_type) content_type=related_object_type)
tipo_ta = TipoTextoArticulado.objects.filter(
content_type=related_object_type)
if not ta.exists(): if not ta.exists():
ta = TextoArticulado() ta = TextoArticulado()
tipo_ta = TipoTextoArticulado.objects.filter( tipo_ta = TipoTextoArticulado.objects.filter(
@ -102,36 +162,86 @@ class IntegracaoTaView(TemplateView):
return redirect(to=reverse_lazy('sapl.compilacao:ta_text', return redirect(to=reverse_lazy('sapl.compilacao:ta_text',
kwargs={'ta_id': ta.pk})) kwargs={'ta_id': ta.pk}))
class Meta: """msg = messages.error if not request.user.is_anonymous(
abstract = True ) else messages.info
msg(request,
_('A funcionalidade de Textos Articulados está desativada.'))
def get_integrations_view_names(): if not request.user.is_anonymous():
result = [] msg(
modules = sys.modules request,
for key, value in modules.items(): _('Para ativá-la, os Tipos de Textos devem ser criados.'))
if key.endswith('.views'):
for v in value.__dict__.values():
if hasattr(v, '__bases__'):
for base in v.__bases__:
if base == IntegracaoTaView:
result.append(v)
return result
msg(request,
_('Sua tela foi redirecionada para a tela de '
'cadastro de Textos Articulados.'))
def choice_models_in_extenal_views(): return redirect(to=reverse_lazy('sapl.compilacao:tipo_ta_list',
integrations_view_names = get_integrations_view_names() kwargs={}))
result = [(None, '-------------'), ] else:
for item in integrations_view_names:
if hasattr(item, 'model') and hasattr(item, 'model_type_foreignkey'): return redirect(to=reverse_lazy(
ct = ContentType.objects.filter( '%s:%s_detail' % (
model=item.model.__name__.lower(), item._meta.app_config.name, item._meta.model_name),
app_label=item.model._meta.app_label) kwargs={'pk': item.pk}))"""
if ct.exists():
result.append(( def import_pattern(self):
ct[0].pk,
item.model._meta.verbose_name_plural)) from unipath import Path
return result
compilacao_app = Path(__file__).ancestor(1)
print(compilacao_app)
with open(compilacao_app + '/compilacao_data_tables.sql', 'r') as f:
lines = f.readlines()
lines = [line.rstrip('\n') for line in lines]
with connection.cursor() as cursor:
for line in lines:
try:
cursor.execute(line)
except IntegrityError as e:
if not settings.DEBUG:
logger.error(
string_concat(
_('Ocorreu erro na importação: '),
line,
str(e)))
integrations_view_names = get_integrations_view_names()
def cria_sigla(verbose_name):
verbose_name = verbose_name.upper().split()
if len(verbose_name) == 1:
verbose_name = verbose_name[0]
sigla = ''
for letra in verbose_name:
if letra in 'BCDFGHJKLMNPQRSTVWXYZ':
sigla += letra
else:
sigla = ''.join([palavra[0] for palavra in verbose_name])
return sigla[:3]
for view in integrations_view_names:
try:
tipo = TipoTextoArticulado()
tipo.sigla = cria_sigla(
view.model._meta.verbose_name
if view.model._meta.verbose_name
else view.model._meta.model_name)
tipo.descricao = view.model._meta.verbose_name
tipo.content_type = ContentType.objects.get_by_natural_key(
view.model._meta.app_label, view.model._meta.model_name)
tipo.save()
except IntegrityError as e:
if not settings.DEBUG:
logger.error(
string_concat(
_('Ocorreu erro na criação tipo de ta: '),
str(e)))
class Meta:
abstract = True
class CompMixin: class CompMixin:
@ -983,8 +1093,7 @@ class TextEditView(TemplateView):
ta_publicado = lista_ta_publicado[dispositivo.ta_publicado_id] if\ ta_publicado = lista_ta_publicado[dispositivo.ta_publicado_id] if\
lista_ta_publicado else dispositivo.ta_publicado lista_ta_publicado else dispositivo.ta_publicado
if dispositivo.texto == \ if dispositivo.dispositivo_de_revogacao:
Dispositivo.TEXTO_PADRAO_DISPOSITIVO_REVOGADO:
return _('Revogado pelo %s - %s.') % ( return _('Revogado pelo %s - %s.') % (
d, ta_publicado) d, ta_publicado)
elif not dispositivo.dispositivo_substituido_id: elif not dispositivo.dispositivo_substituido_id:
@ -1170,7 +1279,7 @@ class ActionDeleteDispositivoMixin(ActionsCommonsMixin):
else: else:
self.set_message(data, 'success', _( self.set_message(data, 'success', _(
'Exclusão efetuada com sucesso!'), modal=True) 'Exclusão efetuada com sucesso!'), modal=True)
ta_base.ordenar_dispositivos() ta_base.reagrupar_ordem_de_dispositivos()
except Exception as e: except Exception as e:
data['pk'] = self.kwargs['dispositivo_id'] data['pk'] = self.kwargs['dispositivo_id']
self.set_message(data, 'danger', str(e), modal=True) self.set_message(data, 'danger', str(e), modal=True)
@ -1459,7 +1568,7 @@ class ActionDeleteDispositivoMixin(ActionsCommonsMixin):
class ActionDispositivoCreateMixin(ActionsCommonsMixin): class ActionDispositivoCreateMixin(ActionsCommonsMixin):
def allowed_inserts(self): def allowed_inserts(self, _base=None):
request = self.request request = self.request
try: try:
if request and 'perfil_estrutural' not in request.session: if request and 'perfil_estrutural' not in request.session:
@ -1467,7 +1576,8 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
perfil_pk = request.session['perfil_estrutural'] perfil_pk = request.session['perfil_estrutural']
base = Dispositivo.objects.get(pk=self.kwargs['dispositivo_id']) base = Dispositivo.objects.get(
pk=self.kwargs['dispositivo_id'] if not _base else _base)
prox_possivel = Dispositivo.objects.filter( prox_possivel = Dispositivo.objects.filter(
ordem__gt=base.ordem, ordem__gt=base.ordem,
@ -1740,7 +1850,9 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
def json_add_in(self, context): def json_add_in(self, context):
return self.json_add_next(context, local_add='json_add_in') return self.json_add_next(context, local_add='json_add_in')
def json_add_next(self, context, local_add='json_add_next'): def json_add_next(
self,
context, local_add='json_add_next', create_auto_inserts=True):
try: try:
dp_auto_insert = None dp_auto_insert = None
@ -1834,23 +1946,24 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
dp.publicacao = pub_last dp.publicacao = pub_last
dp.save() dp.save()
tipos_dp_auto_insert = tipo.filhos_permitidos.filter(
filho_de_insercao_automatica=True,
perfil_id=context['perfil_pk'])
count_auto_insert = 0 count_auto_insert = 0
for tipoauto in tipos_dp_auto_insert: if create_auto_inserts:
qtdp = tipoauto.quantidade_permitida tipos_dp_auto_insert = tipo.filhos_permitidos.filter(
if qtdp >= 0: filho_de_insercao_automatica=True,
qtdp -= Dispositivo.objects.filter( perfil_id=context['perfil_pk'])
ta_id=dp.ta_id,
dispositivo_pai_id=dp.id, for tipoauto in tipos_dp_auto_insert:
tipo_dispositivo_id=tipoauto.filho_permitido.pk qtdp = tipoauto.quantidade_permitida
).count() if qtdp >= 0:
if qtdp > 0: qtdp -= Dispositivo.objects.filter(
ta_id=dp.ta_id,
dispositivo_pai_id=dp.id,
tipo_dispositivo_id=tipoauto.filho_permitido.pk
).count()
if qtdp > 0:
count_auto_insert += 1
else:
count_auto_insert += 1 count_auto_insert += 1
else:
count_auto_insert += 1
# Inserção automática # Inserção automática
if count_auto_insert: if count_auto_insert:
@ -2003,6 +2116,7 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
except Exception as e: except Exception as e:
print(e) print(e)
return {}
class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
@ -2019,6 +2133,9 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
if 'variacao' in self.request.GET: if 'variacao' in self.request.GET:
context['variacao'] = self.request.GET['variacao'] context['variacao'] = self.request.GET['variacao']
if 'pk_bloco' in self.request.GET:
context['pk_bloco'] = self.request.GET['pk_bloco']
if 'perfil_estrutural' in self.request.session: if 'perfil_estrutural' in self.request.session:
context['perfil_pk'] = self.request.session['perfil_estrutural'] context['perfil_pk'] = self.request.session['perfil_estrutural']
@ -2066,7 +2183,67 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
return perfis[0].pk return perfis[0].pk
return None return None
def registra_alteracao(self, bloco_alteracao, dispositivo_a_alterar): def json_add_next_registra_inclusao(
self, context, local_add='json_add_next'):
base = Dispositivo.objects.get(pk=self.kwargs['dispositivo_id'])
bloco_alteracao = Dispositivo.objects.get(pk=context['pk_bloco'])
data = {}
data.update({'pk': bloco_alteracao.pk,
'pai': [bloco_alteracao.pk, ]})
"""if bloco_alteracao.inicio_vigencia < base.inicio_vigencia:
self.set_message(
data, 'danger',
_('O Dispositivo Base para inclusão possui início de vigência '
'anterior ao bloco de alteração atual. Um bloco de '
'alteração não pode ser retroativo!'), time=10000)
return data"""
data = self.json_add_next(context,
local_add=local_add,
create_auto_inserts=True)
if data:
ndp = Dispositivo.objects.get(pk=data['pk'])
ndp.dispositivo_atualizador = bloco_alteracao
ndp.ta_publicado = bloco_alteracao.ta
ndp.publicacao = bloco_alteracao.publicacao
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.save()
bloco_alteracao.ordenar_bloco_alteracao()
data.update({'pk': ndp.pk,
'pai': [bloco_alteracao.pk, ]})
return data
def json_add_in_registra_inclusao(self, context):
return self.json_add_next_registra_inclusao(
context, local_add='json_add_in')
def registra_revogacao(self, bloco_alteracao, dispositivo_a_revogar):
return self.registra_alteracao(
bloco_alteracao,
dispositivo_a_revogar,
revogacao=True
)
def registra_alteracao(self,
bloco_alteracao,
dispositivo_a_alterar,
revogacao=False):
""" """
Caracteristicas: Caracteristicas:
1 - Se é um dispositivo simples e sem subsequente 1 - Se é um dispositivo simples e sem subsequente
@ -2096,10 +2273,10 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
for d in history: for d in history:
"""FIXME: A comparação "<" deverá ser mudada para """FIXME: A comparação "<" deverá ser mudada para
"<=" caso um seja necessário permitir duas alterações "<=" caso seja necessário permitir duas alterações
com mesmo inicio_vigencia no mesmo dispositivo. Neste Caso, com mesmo inicio_vigencia no mesmo dispositivo. Neste Caso,
a sequencia correta ficará a cargo dos reposicionamentos entre a sequencia correta ficará a cargo dos reposicionamentos e
dispositivos de mesmo nível, (a ser implementado) entre dispositivos de mesmo nível,
""" """
if d.inicio_vigencia < bloco_alteracao.inicio_vigencia: if d.inicio_vigencia < bloco_alteracao.inicio_vigencia:
dispositivo_a_alterar = d dispositivo_a_alterar = d
@ -2118,8 +2295,12 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
dispositivo_a_alterar, dispositivo_a_alterar.tipo_dispositivo) dispositivo_a_alterar, dispositivo_a_alterar.tipo_dispositivo)
ndp.rotulo = dispositivo_a_alterar.rotulo ndp.rotulo = dispositivo_a_alterar.rotulo
ndp.texto = dispositivo_a_alterar.texto
ndp.publicacao = bloco_alteracao.publicacao ndp.publicacao = bloco_alteracao.publicacao
if not revogacao:
ndp.texto = dispositivo_a_alterar.texto
else:
ndp.texto = Dispositivo.TEXTO_PADRAO_DISPOSITIVO_REVOGADO
ndp.dispositivo_de_revogacao = True
ndp.dispositivo_vigencia = bloco_alteracao.dispositivo_vigencia ndp.dispositivo_vigencia = bloco_alteracao.dispositivo_vigencia
if ndp.dispositivo_vigencia: if ndp.dispositivo_vigencia:
@ -2167,9 +2348,16 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
d.dispositivo_pai = ndp d.dispositivo_pai = ndp
d.save() d.save()
self.set_message( ndp.ta.reordenar_dispositivos()
data, 'success',
_('Dispositivo de Alteração adicionado com sucesso.')) if not revogacao:
self.set_message(
data, 'success',
_('Dispositivo de Alteração adicionado com sucesso.'))
else:
self.set_message(
data, 'success',
_('Dispositivo de Revogação adicionado com sucesso.'))
except Exception as e: except Exception as e:
print(e) print(e)
@ -2193,8 +2381,13 @@ class DispositivoDinamicEditView(
if 'action' in self.request.GET: if 'action' in self.request.GET:
initial.update({'editor_type': self.request.GET['action']}) initial.update({'editor_type': self.request.GET['action']})
if self.action.startswith('get_form_'):
if self.action.endswith('_radio_allowed_inserts'):
initial.update({'allowed_inserts': self.allowed_inserts()})
initial.update({'dispositivo_search_form': reverse_lazy( initial.update({'dispositivo_search_form': reverse_lazy(
'sapl.compilacao:dispositivo_search_form')}) 'sapl.compilacao:dispositivo_search_form')})
return initial return initial
def get_form(self, form_class=None): def get_form(self, form_class=None):
@ -2221,11 +2414,17 @@ class DispositivoDinamicEditView(
self.form_class = DispositivoEdicaoBasicaForm self.form_class = DispositivoEdicaoBasicaForm
elif self.action.endswith('_alteracao'): elif self.action.endswith('_alteracao'):
self.form_class = DispositivoRegistroAlteracaoForm self.form_class = DispositivoRegistroAlteracaoForm
elif self.action.endswith('_revogacao'):
self.form_class = DispositivoRegistroRevogacaoForm
elif self.action.endswith('_inclusao'):
self.form_class = DispositivoRegistroInclusaoForm
context = self.get_context_data() context = self.get_context_data()
return self.render_to_response(context) return self.render_to_response(context)
elif self.action.startswith('get_actions'): elif self.action.startswith('get_actions'):
self.form_class = None self.form_class = None
self.template_name = 'compilacao/ajax_actions_dinamic_edit.html'
self.object = Dispositivo.objects.get( self.object = Dispositivo.objects.get(
pk=self.kwargs['dispositivo_id']) pk=self.kwargs['dispositivo_id'])
@ -2234,17 +2433,26 @@ class DispositivoDinamicEditView(
context = {} context = {}
context['object'] = self.object context['object'] = self.object
if ta_id == str(self.object.ta_id): if self.action.endswith('_allowed_inserts_registro_inclusao'):
self.template_name = ('compilacao/'
'ajax_actions_registro_inclusao.html')
context['allowed_inserts'] = self.allowed_inserts() context['allowed_inserts'] = self.allowed_inserts()
if 'perfil_pk' in request.GET: else:
self.set_perfil_in_session( self.template_name = ('compilacao/'
request, request.GET['perfil_pk']) 'ajax_actions_dinamic_edit.html')
elif 'perfil_estrutural' not in request.session:
self.set_perfil_in_session(request=request) if ta_id == str(self.object.ta_id):
context['allowed_inserts'] = self.allowed_inserts()
context['perfil_estrutural_list' if 'perfil_pk' in request.GET:
] = PerfilEstruturalTextoArticulado.objects.all() self.set_perfil_in_session(
request, request.GET['perfil_pk'])
elif 'perfil_estrutural' not in request.session:
self.set_perfil_in_session(request=request)
context['perfil_estrutural_list'
] = PerfilEstruturalTextoArticulado.objects.all()
return self.render_to_response(context) return self.render_to_response(context)
@ -2267,6 +2475,20 @@ class DispositivoDinamicEditView(
data = self.registra_alteracao(d, dispositivo_a_alterar) data = self.registra_alteracao(d, dispositivo_a_alterar)
elif formtype == 'get_form_revogacao':
dispositivo_a_revogar = Dispositivo.objects.get(
pk=request.POST['dispositivo_revogado'])
data = self.registra_revogacao(d, dispositivo_a_revogar)
if formtype == 'get_form_inclusao':
dispositivo_base_para_inclusao = Dispositivo.objects.get(
pk=request.POST['dispositivo_base_para_inclusao'])
data = self.registra_inclusao(d, dispositivo_base_para_inclusao)
elif formtype == 'get_form_base': elif formtype == 'get_form_base':
texto = request.POST['texto'].strip() texto = request.POST['texto'].strip()
texto_atualizador = request.POST['texto_atualizador'].strip() texto_atualizador = request.POST['texto_atualizador'].strip()

44
sapl/materia/views.py

@ -24,7 +24,7 @@ from django.views.generic import CreateView, ListView, TemplateView, UpdateView
from django.views.generic.base import RedirectView from django.views.generic.base import RedirectView
from django_filters.views import FilterView from django_filters.views import FilterView
from sapl.base.models import CasaLegislativa from sapl.base.models import CasaLegislativa, AppConfig
from sapl.compilacao.views import IntegracaoTaView from sapl.compilacao.views import IntegracaoTaView
from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row from sapl.crispy_layout_mixin import SaplFormLayout, form_actions, to_row
from sapl.crud.base import (ACTION_CREATE, ACTION_DELETE, ACTION_DETAIL, from sapl.crud.base import (ACTION_CREATE, ACTION_DELETE, ACTION_DETAIL,
@ -72,6 +72,38 @@ TipoAutorCrud = CrudAux.build(
TipoAutor, 'regime_tramitacao') TipoAutor, 'regime_tramitacao')
class MateriaTaView(IntegracaoTaView):
model = MateriaLegislativa
model_type_foreignkey = TipoMateriaLegislativa
"""
Para manter a app compilacao isolada das outras aplicações,
este get foi implementado para tratar uma prerrogativa externa
de usuário.
"""
def get(self, request, *args, **kwargs):
if AppConfig.attr('texto_articulado_materia'):
return IntegracaoTaView.get(self, request, *args, **kwargs)
else:
return self.get_redirect_deactivated()
class ProposicaoTaView(IntegracaoTaView):
model = Proposicao
model_type_foreignkey = TipoProposicao
def get(self, request, *args, **kwargs):
"""
Para manter a app compilacao isolada das outras aplicações,
este get foi implementado para tratar uma prerrogativa externa
de usuário.
"""
if AppConfig.attr('texto_articulado_proposicao'):
return IntegracaoTaView.get(self, request, *args, **kwargs)
else:
return self.get_redirect_deactivated()
def recuperar_materia(request): def recuperar_materia(request):
tipo = TipoMateriaLegislativa.objects.get(pk=request.GET['tipo']) tipo = TipoMateriaLegislativa.objects.get(pk=request.GET['tipo'])
materia = MateriaLegislativa.objects.filter(tipo=tipo).last() materia = MateriaLegislativa.objects.filter(tipo=tipo).last()
@ -970,16 +1002,6 @@ class MateriaLegislativaPesquisaView(FilterView):
return context return context
class MateriaTaView(IntegracaoTaView):
model = MateriaLegislativa
model_type_foreignkey = TipoMateriaLegislativa
class ProposicaoTaView(IntegracaoTaView):
model = Proposicao
model_type_foreignkey = TipoProposicao
class AcompanhamentoMateriaView(PermissionRequiredMixin, CreateView): class AcompanhamentoMateriaView(PermissionRequiredMixin, CreateView):
template_name = "materia/acompanhamento_materia.html" template_name = "materia/acompanhamento_materia.html"
permission_required = permissoes_materia() permission_required = permissoes_materia()

22
sapl/norma/views.py

@ -5,6 +5,7 @@ from django.shortcuts import redirect
from django.views.generic import FormView, ListView from django.views.generic import FormView, ListView
from django.views.generic.base import RedirectView from django.views.generic.base import RedirectView
from sapl.base.models import AppConfig
from sapl.compilacao.views import IntegracaoTaView from sapl.compilacao.views import IntegracaoTaView
from sapl.crud.base import RP_DETAIL, RP_LIST, Crud, CrudAux, make_pagination from sapl.crud.base import RP_DETAIL, RP_LIST, Crud, CrudAux, make_pagination
from sapl.norma.forms import NormaJuridicaForm from sapl.norma.forms import NormaJuridicaForm
@ -23,6 +24,22 @@ TipoNormaCrud = CrudAux.build(
list_field_names=['equivalente_lexml', 'sigla', 'descricao']) list_field_names=['equivalente_lexml', 'sigla', 'descricao'])
class NormaTaView(IntegracaoTaView):
model = NormaJuridica
model_type_foreignkey = TipoNormaJuridica
def get(self, request, *args, **kwargs):
"""
Para manter a app compilacao isolada das outras aplicações,
este get foi implementado para tratar uma prerrogativa externa
de usuário.
"""
if AppConfig.attr('texto_articulado_norma'):
return IntegracaoTaView.get(self, request, *args, **kwargs)
else:
return self.get_redirect_deactivated()
class NormaCrud(Crud): class NormaCrud(Crud):
model = NormaJuridica model = NormaJuridica
help_path = 'norma_juridica' help_path = 'norma_juridica'
@ -179,8 +196,3 @@ class PesquisaNormaListView(ListView):
context['page_range'] = make_pagination( context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages) page_obj.number, paginator.num_pages)
return context return context
class NormaTaView(IntegracaoTaView):
model = NormaJuridica
model_type_foreignkey = TipoNormaJuridica

6
sapl/static/js/compilacao.js

@ -148,7 +148,7 @@ function DispostivoSearch(opts) {
var btn_open_search = $('<button>') var btn_open_search = $('<button>')
.text(opts['text_button']) .text(opts['text_button'])
.attr('type','button') .attr('type','button')
.attr('class','btn btn-sm btn-modal-open'); .attr('class','btn btn-sm btn-success btn-modal-open');
button_ds.append(btn_open_search); button_ds.append(btn_open_search);
btn_open_search.on('click', function() { btn_open_search.on('click', function() {
$.get(opts['url_form'], function(data) { $.get(opts['url_form'], function(data) {
@ -220,6 +220,10 @@ function DispostivoSearch(opts) {
onChangeFieldSelects(); onChangeFieldSelects();
modal_ds.modal('hide'); modal_ds.modal('hide');
if ('post_selected' in opts)
opts['post_selected'](opts['params_post_selected'])
}); });
modal_ds.modal('show'); modal_ds.modal('show');

132
sapl/static/js/compilacao_edit.js

@ -33,6 +33,7 @@ function DispositivoEdit() {
'tipo_pk' : this.getAttribute('tipo_pk'), 'tipo_pk' : this.getAttribute('tipo_pk'),
'perfil_pk' : this.getAttribute('perfil_pk'), 'perfil_pk' : this.getAttribute('perfil_pk'),
'variacao' : this.getAttribute('variacao'), 'variacao' : this.getAttribute('variacao'),
'pk_bloco' : this.getAttribute('pk_bloco'),
}; };
var url = pk+'/refresh'; var url = pk+'/refresh';
@ -138,6 +139,74 @@ function DispositivoEdit() {
}); });
} }
instance.get_form_inclusao = function () {
var _this = $(this);
_this.off('get_form_inclusao');
$('.dpt-actions, .dpt-actions-bottom').html('');
var dpt_form = _this.children().filter('.dpt-form').children().first();
var url_search = dpt_form[0]['id_dispositivo_search_form'].value;
DispostivoSearch({
'url_form': url_search,
'text_button': 'Selecionar',
'post_selected': instance.allowed_inserts_registro_inclusao,
'params_post_selected': {'pk_bloco': _this.attr('pk')}
});
instance.scrollTo(_this);
dpt_form.submit(instance.onSubmitFormRegistraInclusao);
var btn_fechar = _this.find('.btn-fechar');
btn_fechar.on('click', function() {
instance.clearEditSelected();
instance.triggerBtnDptEdit(_this.attr('pk'));
});
}
instance.get_form_revogacao = function () {
var _this = $(this);
_this.off('get_form_revogacao');
$('.dpt-actions, .dpt-actions-bottom').html('');
var dpt_form = _this.children().filter('.dpt-form').children().first();
var url_search = dpt_form[0]['id_dispositivo_search_form'].value;
DispostivoSearch({
'url_form': url_search,
'text_button': 'Selecionar'
});
instance.scrollTo(_this);
dpt_form.submit(instance.onSubmitFormRegistraRevogacao);
var btn_fechar = _this.find('.btn-fechar');
btn_fechar.on('click', function() {
instance.clearEditSelected();
instance.triggerBtnDptEdit(_this.attr('pk'));
});
}
instance.allowed_inserts_registro_inclusao = function(params) {
var dispositivo_base_para_inclusao = $("#id"+params.pk_bloco+" input[name='dispositivo_base_para_inclusao']")
if (dispositivo_base_para_inclusao.length == 0)
return;
var pk = dispositivo_base_para_inclusao[0].value;
var form_data = {
'action' : 'get_actions_allowed_inserts_registro_inclusao',
'pk_bloco' : params.pk_bloco
};
var url = pk+'/refresh';
instance.waitShow();
$.get(url, form_data).done(function(data) {
$(".allowed_inserts").html(data);
$(".allowed_inserts").find('.btn-action').on('click', instance.bindActionsClick);
}).fail(instance.waitHide).always(instance.waitHide);
}
instance.loadActionsEdit = function(dpt) { instance.loadActionsEdit = function(dpt) {
var pk = dpt.attr('pk'); var pk = dpt.attr('pk');
var url = pk+'/refresh?action=get_actions'; var url = pk+'/refresh?action=get_actions';
@ -258,8 +327,70 @@ function DispositivoEdit() {
}); });
if (event != null) if (event != null)
event.preventDefault(); event.preventDefault();
}
instance.onSubmitFormRegistraInclusao = function(event) {
var _this = this;
var form_data = {
'csrfmiddlewaretoken' : this['csrfmiddlewaretoken'].value,
'dispositivo_base_para_inclusao' : this['dispositivo_base_para_inclusao'].value,
'formtype': 'get_form_inclusao',
};
var url = $(this).closest('.dpt').attr( "pk" )+'/refresh';
instance.waitShow();
$.post(url, form_data)
.done(function(data) {
instance.clearEditSelected();
if (data.pk != null) {
instance.refreshScreenFocusPk(data);
instance.message(data);
}
else {
alert('Erro na resposta!');
}
}).always(function() {
instance.waitHide();
});
if (event != null)
event.preventDefault();
} }
instance.onSubmitFormRegistraRevogacao = function(event) {
var _this = this;
var form_data = {
'csrfmiddlewaretoken' : this['csrfmiddlewaretoken'].value,
'dispositivo_revogado' : this['dispositivo_revogado'].value,
'formtype': 'get_form_revogacao',
};
var url = $(this).closest('.dpt').attr( "pk" )+'/refresh';
instance.waitShow();
$.post(url, form_data)
.done(function(data) {
instance.clearEditSelected();
if (data.pk != null) {
instance.refreshScreenFocusPk(data);
instance.message(data);
}
else {
alert('Erro na resposta!');
}
}).always(function() {
instance.waitHide();
});
if (event != null)
event.preventDefault();
}
instance.onSubmitEditFormBase = function(event) { instance.onSubmitEditFormBase = function(event) {
var _this = this; var _this = this;
@ -417,6 +548,7 @@ function DispositivoEdit() {
instance.init = function() { instance.init = function() {
$('.dpt-actions-fixed').first().css('opacity','1');
editortype = ReadCookie("editortype"); editortype = ReadCookie("editortype");
if (editortype == null || editortype == '') { if (editortype == null || editortype == '') {
editortype = "textarea" editortype = "textarea"

6
sapl/static/styles/compilacao.scss

@ -1281,7 +1281,7 @@ a:link:after, a:visited:after {
} }
} }
.result-busca-dispositivo, .lista-dispositvo { .result-busca-dispositivo, .lista-dispositivo {
padding: 0 0 1em; padding: 0 0 1em;
min-height: 3em; min-height: 3em;
@ -1297,6 +1297,7 @@ a:link:after, a:visited:after {
border-collapse:separate; border-collapse:separate;
border-bottom: 1px solid white; border-bottom: 1px solid white;
width: 100%;
&.ta_title { &.ta_title {
background-color: rgba(0, 0, 0, 0.15); background-color: rgba(0, 0, 0, 0.15);
@ -1341,6 +1342,9 @@ a:link:after, a:visited:after {
display: block; display: block;
margin: 0px; margin: 0px;
} }
.artigo {
float: none;
}
} }
} }
} }

1
sapl/templates/base.html

@ -286,6 +286,7 @@
<script type="text/javascript" src="{% static 'js/jquery.runner.js' %}"></script> <script type="text/javascript" src="{% static 'js/jquery.runner.js' %}"></script>
<script type="text/javascript" src="{% static 'jquery-mask-plugin/dist/jquery.mask.js' %}"></script> <script type="text/javascript" src="{% static 'jquery-mask-plugin/dist/jquery.mask.js' %}"></script>
<script src="{% static 'tinymce/tinymce.min.js' %}"></script> <script src="{% static 'tinymce/tinymce.min.js' %}"></script>
<script type="text/javascript" src="{% static 'jsdiff/diff.min.js' %}"></script> <script type="text/javascript" src="{% static 'jsdiff/diff.min.js' %}"></script>

2
sapl/templates/base/layouts.yaml

@ -13,3 +13,5 @@ CasaLegislativa:
AppConfig: AppConfig:
{% trans 'Configurações da Aplicação' %}: {% trans 'Configurações da Aplicação' %}:
- documentos_administrativos sequencia_numeracao painel_aberto - documentos_administrativos sequencia_numeracao painel_aberto
{% trans 'Textos Articulados' %}:
- texto_articulado_proposicao texto_articulado_materia texto_articulado_norma

4
sapl/templates/compilacao/ajax_actions_dinamic_edit.html

@ -53,7 +53,7 @@
{% endif %} {% endif %}
</div> </div>
<div class="btn-group " role="group"> <div class="btn-group " role="group">
{% if object.dispositivo_subsequente == None %} {% if not object.dispositivo_subsequente %}
{% for perfil in perfil_estrutural_list%} {% for perfil in perfil_estrutural_list%}
<button type="button" class="btn-action btn-perfis btn btn-xs {%if request.session.perfil_estrutural == perfil.pk%}btn-primary{%else%}btn-default{%endif%}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" pk="{{object.pk}}" perfil_pk="{{perfil.pk}}" action="json_get_perfis" title="{{perfil.nome}}"> <button type="button" class="btn-action btn-perfis btn btn-xs {%if request.session.perfil_estrutural == perfil.pk%}btn-primary{%else%}btn-default{%endif%}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" pk="{{object.pk}}" perfil_pk="{{perfil.pk}}" action="json_get_perfis" title="{{perfil.nome}}">
{{perfil.sigla}} {{perfil.sigla}}
@ -61,7 +61,7 @@
{% endfor %} {% endfor %}
{%endif%} {%endif%}
</div> </div>
{% if not object.ta_publicado%} {% if not object.ta_publicado and not object.dispositivo_subsequente and not object.tipo_dispositivo.dispositivo_de_alteracao%}
<div class="btn-group " role="group"> <div class="btn-group " role="group">
<button type="button" class="btn-action btn btn-xs radius-right {% if object.pk == object.dispositivo_vigencia_id %}btn-primary{%else%}btn-default{%endif%}" pk="{{object.pk}}" action="json_set_dvt" title="{% if object.pk == object.dispositivo_vigencia_id %}{% trans 'Dispositivo de Vigência Atual'%}{%else%}{% trans 'Tornar este o Dispositivo de Vigência de todo o Texto Articulado.'%}{%endif%}"> <button type="button" class="btn-action btn btn-xs radius-right {% if object.pk == object.dispositivo_vigencia_id %}btn-primary{%else%}btn-default{%endif%}" pk="{{object.pk}}" action="json_set_dvt" title="{% if object.pk == object.dispositivo_vigencia_id %}{% trans 'Dispositivo de Vigência Atual'%}{%else%}{% trans 'Tornar este o Dispositivo de Vigência de todo o Texto Articulado.'%}{%endif%}">
DVt DVt

18
sapl/templates/compilacao/ajax_actions_registro_inclusao.html

@ -0,0 +1,18 @@
{% load i18n %}
{% if object.dispositivo_subsequente == None %}
<div class="row">
{% for inserts in allowed_inserts %}
{% if inserts.itens %}
<div class="col-md-6">
<div class="list-group">
<a class="list-group-item active">{{inserts.icone|safe}}<span>{{inserts.tipo_insert}}</span></a>
{% for item in inserts.itens %}
<a class="btn-action list-group-item" action="{{inserts.action}}_registra_inclusao" pk="{{item.dispositivo_base}}" variacao="{{item.variacao}}" tipo_pk="{{item.tipo_pk}}" pk_bloco="{{request.GET.pk_bloco}}" >{{item.provavel|safe}}</a>
{% endfor %}
</div>
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}

2
sapl/templates/compilacao/layout/dispositivo_checkbox.html

@ -1,7 +1,7 @@
{% load crispy_forms_filters %} {% load crispy_forms_filters %}
{% load i18n compilacao_filters common_tags%} {% load i18n compilacao_filters common_tags%}
<div class="controls cp lista-dispositvo"{% if flat_attrs %} {{ flat_attrs|safe }}{% endif %}> <div class="controls cp lista-dispositivo"{% if flat_attrs %} {{ flat_attrs|safe }}{% endif %}>
{% include 'bootstrap/layout/field_errors_block.html' %} {% include 'bootstrap/layout/field_errors_block.html' %}
{% for choice in field.field.choices %} {% for choice in field.field.choices %}

2
sapl/templates/compilacao/layout/dispositivo_radio.html

@ -2,7 +2,7 @@
{% load i18n compilacao_filters common_tags%} {% load i18n compilacao_filters common_tags%}
<div class="controls lista-dispositvo"{% if flat_attrs %} {{ flat_attrs|safe }}{% endif %}> <div class="controls lista-dispositivo"{% if flat_attrs %} {{ flat_attrs|safe }}{% endif %}>
{% include 'bootstrap/layout/field_errors_block.html' %} {% include 'bootstrap/layout/field_errors_block.html' %}
{% for choice, dpt in field.field.choices %} {% for choice, dpt in field.field.choices %}

2
sapl/templates/compilacao/layouts.yaml

@ -27,7 +27,7 @@ TipoDispositivo:
- rotulo_prefixo_texto rotulo_sufixo_texto rotulo_ordinal contagem_continua - rotulo_prefixo_texto rotulo_sufixo_texto rotulo_ordinal contagem_continua
{% trans 'Configurações para Renderização de Rótulo e Texto' %}: {% trans 'Configurações para Renderização de Rótulo e Texto' %}:
- rotulo_prefixo_html rotulo_sufixo_html - rotulo_prefixo_html rotulo_sufixo_html
- texto_prefixo_html dispositivo_de_articulacao texto_sufixo_html - texto_prefixo_html dispositivo_de_articulacao dispositivo_de_alteracao texto_sufixo_html
{% trans 'Configurações para Nota Automática' %}: {% trans 'Configurações para Nota Automática' %}:
- nota_automatica_prefixo_html nota_automatica_sufixo_html - nota_automatica_prefixo_html nota_automatica_sufixo_html
{% trans 'Configurações para Variações Numéricas' %}: {% trans 'Configurações para Variações Numéricas' %}:

5
sapl/templates/compilacao/text_edit_bloco.html

@ -4,9 +4,10 @@
{% dispositivotree dispositivos_list %} {% dispositivotree dispositivos_list %}
<div class="dpt" id="id{{node.dpt.id}}" pk="{{node.dpt.pk}}" ordem="{{node.dpt.ordem}}" name="{{node.dpt.pk}}" title="{{node.dpt.pk}} - {{node.dpt.ordem}}" formtype="get_form_base"> <div class="dpt" id="id{{node.dpt.id}}" pk="{{node.dpt.pk}}" ordem="{{node.dpt.ordem}}" name="{{node.dpt.pk}}" title="{{node.dpt.pk}} - {{node.dpt.ordem}}" formtype="get_form_base">
<div class="dpt-actions"></div> <div class="dpt-actions">
</div>
<div class="dpt-actions-fixed"> <div class="dpt-actions-fixed">
<a class="btn-dpt-edit btn btn-default btn-sm" pk="{{node.dpt.pk}}" title=""><span class="deactivate">{% trans 'Editar'%}</span><span class="activate">{% trans 'Em Edição'%}:</span> {{ node.td.nome }} {{ node.dpt.rotulo }}</a> <a class="btn-dpt-edit btn btn-default btn-sm" pk="{{node.dpt.pk}}" title=""><span class="deactivate">{% trans 'Editar'%} </span><span class="activate">{% trans 'Em Edição'%}: </span>{% if not node.td.rotulo_prefixo_texto %}{{ node.td.nome }} {% endif %}{{ node.dpt.rotulo }}</a>
<div class="btn-group"> <div class="btn-group">
<a class="btn-dpt-edit btn btn-warning btn-sm activate" pk="{{node.dpt.pk}}" action="editor-help" data-toggle="modal" data-target="#modal-help"><span class="deactivate"></span><span class="activate"><i class="fa fa-question" aria-hidden="true"></i></span></a> <a class="btn-dpt-edit btn btn-warning btn-sm activate" pk="{{node.dpt.pk}}" action="editor-help" data-toggle="modal" data-target="#modal-help"><span class="deactivate"></span><span class="activate"><i class="fa fa-question" aria-hidden="true"></i></span></a>
</div> </div>

2
sapl/templates/compilacao/text_list.html

@ -65,7 +65,7 @@
<br> <br>
{% if view.ta_vigencia %} {% if view.ta_vigencia %}
<small>{% trans 'Dada por '%}<a href="{% url 'sapl.compilacao:ta_text' view.ta_vigencia %}">{{ta_pub_list|lookup:view.ta_vigencia}}</a></small> <small>{% trans 'Dada por '%}<a href="{% url 'sapl.compilacao:ta_text' view.ta_vigencia %}">{{ta_pub_list|lookup:view.ta_vigencia}}</a></small>
{% elif view.ta_vigencia != 0 %} {% elif view.ta_vigencia and view.ta_vigencia != 0%}
<small>{% trans 'Dada por '%}<a href="{% url 'sapl.compilacao:ta_text' dispositivo.ta_publicado.pk %}">{{dispositivo.ta_publicado}}</a></small> <small>{% trans 'Dada por '%}<a href="{% url 'sapl.compilacao:ta_text' dispositivo.ta_publicado.pk %}">{{dispositivo.ta_publicado}}</a></small>
{% endif %} {% endif %}
</span> </span>

12
sapl/templates/compilacao/text_list_bloco.html

@ -19,7 +19,9 @@
{% spaceless %} {% spaceless %}
<div class="{{ dpt.tipo_dispositivo.class_css }}"> <div class="{{ dpt.tipo_dispositivo.class_css }}">
<div class="dptt {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %}" id="dptt{{dpt.pk}}" > <div class="dptt {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %}" id="dptt{{dpt.pk}}" >
{% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
{% if not dpt.tipo_dispositivo.dispositivo_de_articulacao or dpt.tipo_dispositivo.dispositivo_de_articulacao and dpt.dispositivo_subsequente %}
{% if dpt.auto_inserido %} {% if dpt.auto_inserido %}
{{ dpt.dispositivo_pai.tipo_dispositivo.rotulo_prefixo_html|safe }} {{ dpt.dispositivo_pai.tipo_dispositivo.rotulo_prefixo_html|safe }}
<a class="dpt-link" name="{{dpt.pk}}">{{ dpt.dispositivo_pai.rotulo }}</a> <a class="dpt-link" name="{{dpt.pk}}">{{ dpt.dispositivo_pai.rotulo }}</a>
@ -30,12 +32,16 @@
{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }} {{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}
{% endif %} {% endif %}
{% endif %} {% endif %}
<span class="dtxt" id="d{% if not dpt.dispositivo_subsequente_id and dpt.dispositivo_substituido_id %}a{% endif %}{{dpt.pk}}" pks="{{dpt.dispositivo_substituido_id|default:''}}" pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span> <span class="dtxt" id="d{% if not dpt.dispositivo_subsequente_id and dpt.dispositivo_substituido_id %}a{% endif %}{{dpt.pk}}" pks="{{dpt.dispositivo_substituido_id|default:''}}" pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if dpt.ta_publicado_id and not dpt.tipo_dispositivo.dispositivo_de_articulacao %} {% if dpt.ta_publicado_id %}
<a class="nota-alteracao" href="{%url 'sapl.compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}"> <a class="nota-alteracao" href="{%url 'sapl.compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt ta_pub_list %} {% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
{% if dpt.tipo_dispositivo.dispositivo_de_articulacao and dpt.dispositivo_substituido %}
&nbsp;
{% endif %}
</a> </a>
{% endif %} {% endif %}
{% if user.is_authenticated and not dpt.tipo_dispositivo.dispositivo_de_articulacao%} {% if user.is_authenticated and not dpt.tipo_dispositivo.dispositivo_de_articulacao%}
@ -52,7 +58,7 @@
{% endif %} {% endif %}
</div> </div>
{% if not dpt.tipo_dispositivo.dispositivo_de_articulacao%} {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<div class="dn" id="dn{{dpt.pk}}" pk="{{dpt.pk}}">{# Dispostivo Nota e Vides #} <div class="dn" id="dn{{dpt.pk}}" pk="{{dpt.pk}}">{# Dispostivo Nota e Vides #}
<ul class="dnl">{# Dispostivo Nota Lista#} <ul class="dnl">{# Dispostivo Nota Lista#}

2
sapl/templates/compilacao/textoarticulado_menu_config.html

@ -9,6 +9,6 @@
<li><a href="{% url 'sapl.compilacao:veiculopublicacao_list' %}">{%model_verbose_name_plural 'sapl.compilacao.models.VeiculoPublicacao'%}</a></li> <li><a href="{% url 'sapl.compilacao:veiculopublicacao_list' %}">{%model_verbose_name_plural 'sapl.compilacao.models.VeiculoPublicacao'%}</a></li>
<li><a href="{% url 'sapl.compilacao:tiponota_list' %}">{%model_verbose_name_plural 'sapl.compilacao.models.TipoNota'%}</a></li> <li><a href="{% url 'sapl.compilacao:tiponota_list' %}">{%model_verbose_name_plural 'sapl.compilacao.models.TipoNota'%}</a></li>
<li><a href="{% url 'sapl.compilacao:tipovide_list' %}">{%model_verbose_name_plural 'sapl.compilacao.models.TipoVide'%}</a></li> <li><a href="{% url 'sapl.compilacao:tipovide_list' %}">{%model_verbose_name_plural 'sapl.compilacao.models.TipoVide'%}</a></li>
<li><a href="#">TODO: Tipo de Dispositivo</a></li> <li><a href="{% url 'sapl.compilacao:tipodispositivo_list' %}">{%model_verbose_name_plural 'sapl.compilacao.models.TipoDispositivo'%}</a></li>
<li><a href="#">TODO: Perfil Estrutural de Textos Articulados</a></li> <li><a href="#">TODO: Perfil Estrutural de Textos Articulados</a></li>
</ul> </ul>

4
sapl/templates/materia/subnav.yaml

@ -1,4 +1,4 @@
{% load i18n %} {% load i18n common_tags %}
- title: {% trans 'Início' %} - title: {% trans 'Início' %}
url: materialegislativa_detail url: materialegislativa_detail
- title: {% trans 'Anexada' %} - title: {% trans 'Anexada' %}
@ -18,5 +18,7 @@
url: tramitacao_list url: tramitacao_list
- title: {% trans 'Relatoria' %} - title: {% trans 'Relatoria' %}
url: relatoria_list url: relatoria_list
{% if 'texto_articulado_materia'|get_config_attr %}
- title: {% trans 'Texto' %} - title: {% trans 'Texto' %}
url: materia_ta url: materia_ta
{% endif %}

4
sapl/templates/norma/subnav.yaml

@ -1,4 +1,4 @@
{% load i18n %} {% load i18n common_tags%}
- title: {% trans 'Início' %} - title: {% trans 'Início' %}
url: normajuridica_detail url: normajuridica_detail
@ -6,5 +6,7 @@
# para integração foram necessárias apenas criar a url norma_ta em urls.py # para integração foram necessárias apenas criar a url norma_ta em urls.py
# e a view NormaTaView(IntegracaoTaView) em views.py # e a view NormaTaView(IntegracaoTaView) em views.py
# Em nada mais a integração interfere em NormaJuridica # Em nada mais a integração interfere em NormaJuridica
{% if 'texto_articulado_norma'|get_config_attr %}
- title: {% trans 'Texto' %} - title: {% trans 'Texto' %}
url: norma_ta url: norma_ta
{% endif %}

Loading…
Cancel
Save