Browse Source

Merge pull request #98 from interlegis/test_design

refatoração do design base para o menu section-nav + compilacao
pull/153/head
Leandro Roberto da Silva 9 years ago
parent
commit
65dd9fdd37
  1. 327
      compilacao/file2dispositivo.py
  2. 254
      compilacao/forms.py
  3. 349
      compilacao/insert_inicial_TipoDispositivo.sql
  4. 19
      compilacao/migrations/0032_auto_20151213_1538.py
  5. 115
      compilacao/migrations/0033_auto_20151226_1320.py
  6. 18
      compilacao/migrations/0034_auto_20151226_1321.py
  7. 30
      compilacao/migrations/0035_auto_20151226_1349.py
  8. 19
      compilacao/migrations/0036_auto_20151226_1411.py
  9. 19
      compilacao/migrations/0037_auto_20151226_1414.py
  10. 19
      compilacao/migrations/0038_tipotextoarticulado_model.py
  11. 19
      compilacao/migrations/0039_auto_20151226_1433.py
  12. 24
      compilacao/migrations/0040_auto_20160106_1956.py
  13. 39
      compilacao/migrations/0041_auto_20160109_1928.py
  14. 47
      compilacao/migrations/0042_auto_20160110_1620.py
  15. 19
      compilacao/migrations/0043_auto_20160110_1733.py
  16. 175
      compilacao/models.py
  17. 38
      compilacao/templatetags/compilacao_filters.py
  18. 91
      compilacao/urls.py
  19. 324
      compilacao/utils.py
  20. 744
      compilacao/views.py
  21. 54
      compilacao/views2.py
  22. 36
      materia/urls.py
  23. 11
      materia/views.py
  24. 19
      norma/migrations/0009_auto_20160106_1511.py
  25. 3
      norma/models.py
  26. 6
      norma/urls.py
  27. 7
      norma/views.py
  28. 1
      requirements/requirements.txt
  29. 8
      sapl/crud.py
  30. 7
      sapl/settings.py
  31. 27
      sapl/utils.py
  32. BIN
      static/img/ajax-loader.gif
  33. 33
      static/js/app.js
  34. 3
      static/js/compilacao.js
  35. 7
      static/js/compilacao_edit.js
  36. 26
      static/js/compilacao_notas.js
  37. 143
      static/js/compilacao_view.js
  38. 70
      static/styles/app.scss
  39. 96
      static/styles/compilacao.scss
  40. 40
      templates/base.html
  41. 20
      templates/compilacao/confirm_delete.html
  42. 38
      templates/compilacao/detail.html
  43. 15
      templates/compilacao/dispositivo_search_fragment_form.html
  44. 57
      templates/compilacao/edit.html
  45. 6
      templates/compilacao/form.html
  46. 82
      templates/compilacao/index.html
  47. 12
      templates/compilacao/index_bloco_alteracao.html
  48. 82
      templates/compilacao/list.html
  49. 91
      templates/compilacao/publicacao_detail.html
  50. 83
      templates/compilacao/publicacao_list.html
  51. 30
      templates/compilacao/text_edit.html
  52. 18
      templates/compilacao/text_edit_bloco.html
  53. 2
      templates/compilacao/text_edit_blocoalteracao.html
  54. 97
      templates/compilacao/text_list.html
  55. 70
      templates/compilacao/text_list_bloco.html
  56. 13
      templates/compilacao/text_list_blocoalteracao.html
  57. 94
      templates/compilacao/textoarticulado_detail.html
  58. 91
      templates/compilacao/textoarticulado_list.html
  59. 53
      templates/compilacao/tipotextoarticulado_detail.html
  60. 74
      templates/compilacao/tipotextoarticulado_list.html
  61. 2
      templates/crud/detail.html
  62. 1
      templates/index.html
  63. 28
      templates/materia/materialegislativa_detail.html
  64. 11
      templates/norma/normajuridica_detail.html
  65. 5
      templates/parlamentares/parlamentares_detail.html
  66. 10
      templates/sistema.html

327
compilacao/file2dispositivo.py

@ -1,327 +0,0 @@
import re
from odf.element import Node, Text
from odf.opendocument import load
from odf.table import Table, TableCell, TableRow
from odf.text import (List, ListHeader, ListItem, ListLevelStyleBullet,
ListLevelStyleNumber, ListStyle, Note)
from sapl import utils
class Parser(object):
parser_list = []
def parser(self, _filepath):
self.filepath = _filepath
return self.re_parser()
def re_parser(self):
self.parser_list = []
# odt identificado pela extensão ou teste caso o arquivo sem extensão
if self.filepath.endswith('.odt') or\
not re.search(r"(\w+)\.(\w+)", self.filepath):
try:
odtparser = OdtParser()
self.parser_list = odtparser.parser(self.filepath)
return self.parser_list
except Exception as e:
print(e)
# TODO: Continue para outros formatos
pass
# doc identificado pela extensão ou teste caso o arquivo sem extensão
if self.filepath.endswith(('.doc', 'docx')) or\
not re.search(r"(\w+)\.(\w+)", self.filepath):
try:
# TODO
return []
except Exception as e:
# TODO: Continue para outros formatos
pass
return []
def _reduce_terms(self, _nodes=None, level=0):
print(level)
if not _nodes:
nodes = self.parser_list
else:
nodes = _nodes
fstr = True
i = -1
for nd in nodes:
i += 1
# print(nd)
if not _nodes:
fstr = False
if nd[0] == 'table:table':
continue
if isinstance(nd, list):
fstr = False
nodes[i] = self._reduce_terms(nd, level=level + 1)
if fstr:
return ' '.join(nodes)
return nodes
class OdtParser(Parser):
FNC1 = '1'
FNCI = 'I'
FNCi = 'i'
FNCA = 'A'
FNCa = 'a'
FNC8 = '*'
FNCN = 'N'
def re_parser(self):
self.textdoc = load(self.filepath)
self.level_list = 0
self.control_list = {}
# mm = ODF2MoinMoin(self.filepath)
# self.parser_list = [mm.toString(), ]
self.parser_list = self._import_itens(self.textdoc.text, level=0)
# self._reduce_terms()
return self.parser_list
def _import_itens(self, element, level=0):
try:
result = []
for el in element.childNodes:
print(level, el.tagName)
_r = ''
if el.tagName == 'Text':
_r = str(el)
else:
if el.isInstanceOf(Note):
continue
elif el.isInstanceOf(Table):
_r = self._import_table(el, level=level + 1)
elif el.isInstanceOf(List):
_r = self._import_list(el, level=level + 1)
# elif el.isInstanceOf(P):
# _r = [self.extractText(el),]
elif el.hasChildNodes():
_r = self._import_itens(el, level=level + 1)
else:
_r = str(el)
if _r:
if isinstance(_r, str):
result += [_r, ]
else:
result += _r
return result
except Exception as e:
print(e)
def _import_table(self, element, level=0):
result = ''
print(level)
try:
if element.isInstanceOf(Table):
result += '<table width="100%">'
for el in element.childNodes:
_r = ''
if isinstance(el, Text):
_r = str(el)
else:
if el.isInstanceOf(TableRow):
_r = self._import_table(el, level=level + 1)
_r = '<tr>%s</tr>' % (''.join(_r))
result += ''.join(_r)
elif el.isInstanceOf(TableCell):
_r = self._import_table(el, level=level + 1)
if el.getAttribute('numberrowsspanned'):
_r = '<td rowspan="%s">%s</td>' % (
el.getAttribute('numberrowsspanned'),
''.join(_r))
elif el.getAttribute('numbercolumnsspanned'):
_r = '<td colspan="%s">%s</td>' % (
el.getAttribute('numbercolumnsspanned'),
''.join(_r))
else:
_r = '<td>%s</td>' % (''.join(_r))
result += ''.join(_r)
else:
_r = self.extractText(el)
# _r = self._reduce_terms(_r)
if isinstance(_r, list):
result += '<br>'.join(_r)
else:
if _r:
result += _r + '<br>'
if element.isInstanceOf(Table):
result += '</table>'
return [result, ]
except Exception as e:
print(e)
def _import_list(self, element, level=0):
self.level_list += 1
result = []
print(level)
numsufixo = ''
numformat = ''
startvalue = ''
count_list_item = 0
try:
if element.isInstanceOf(List):
_stylename = element.getAttribute('stylename')
if _stylename:
self.stylename = _stylename
liststyles = self.textdoc.getElementsByType(ListStyle)
for liststyle in liststyles:
if liststyle.getAttribute('name') == self.stylename:
break
stylesnumbers = liststyle.getElementsByType(
ListLevelStyleNumber)
for item in stylesnumbers:
if item.getAttribute('level') == str(self.level_list):
numsufixo = item.getAttribute('numsuffix') or ''
numformat = item.getAttribute('numformat') or ''
startvalue = item.getAttribute('startvalue') or ''
break
if not numformat:
stylesbullets = liststyle.getElementsByType(
ListLevelStyleBullet)
for item in stylesbullets:
if item.getAttribute('level') == str(self.level_list):
numformat = '*'
break
_id = element.getAttribute('id')
if _id:
self.id_last_list = _id
if self.id_last_list not in self.control_list:
self.control_list[self.id_last_list] = [0, ] * 10
if _id:
if not element.getAttribute('continuelist') and\
self.level_list == 1:
self.control_list[self.id_last_list] = [0, ] * 10
except Exception as e:
print(e)
try:
flag_first = True
for el in element.childNodes:
prefixo = ''
if isinstance(el, Text):
_r = [str(el), ]
else:
if el.isInstanceOf(ListHeader) or\
el.isInstanceOf(ListItem):
if startvalue and flag_first:
self.control_list[self.id_last_list][
self.level_list - 1] = int(startvalue) - 1
flag_first = False
self.control_list[self.id_last_list][
self.level_list - 1] += 1
count_list_item = self.control_list[self.id_last_list][
self.level_list - 1]
if numformat == OdtParser.FNC1:
prefixo = str(count_list_item)
elif numformat == OdtParser.FNCI:
prefixo = utils.int_to_roman(count_list_item)
elif numformat == OdtParser.FNCi:
prefixo = utils.int_to_roman(
count_list_item).lower()
elif numformat == OdtParser.FNCA:
prefixo = utils.int_to_letter(count_list_item)
elif numformat == OdtParser.FNCa:
prefixo = utils.int_to_letter(
count_list_item).lower()
elif numformat == OdtParser.FNC8:
prefixo = '*'
else:
prefixo = str(count_list_item)
prefixo += numsufixo
_r = self._import_itens(el, level=level + 1)
if _r:
if prefixo:
_r[0] = '%s %s' % (prefixo, _r[0])
result += _r
else:
result += _r
self.level_list -= 1
return result
except Exception as e:
print(e)
def extractText(self, odfElement):
""" Extract text content from an Element, with whitespace represented
properly. Returns the text, with tabs, spaces, and newlines
correctly evaluated. This method recursively descends through the
children of the given element, accumulating text and "unwrapping"
<text:s>, <text:tab>, and <text:line-break> elements along the way.
"""
result = []
if len(odfElement.childNodes) != 0:
for child in odfElement.childNodes:
if child.nodeType == Node.TEXT_NODE:
result.append(child.data)
elif child.nodeType == Node.ELEMENT_NODE:
subElement = child
tagName = subElement.qname
if tagName == (u"urn:oasis:names:tc:opendocument:xmlns:" +
"text:1.0", u"line-break"):
result.append("\n")
elif tagName == (u"urn:oasis:names:tc:opendocument:" +
"xmlns:text:1.0", u"tab"):
result.append("\t")
elif tagName == (u"urn:oasis:names:tc:opendocument:" +
"xmlns:text:1.0", u"s"):
c = subElement.getAttribute('c')
if c:
spaceCount = int(c)
else:
spaceCount = 1
result.append(" " * spaceCount)
else:
result.append(self.extractText(subElement))
return ''.join(result)

254
compilacao/forms.py

@ -1,12 +1,18 @@
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import HTML, Button, Column, Div, Field, Layout, Row from crispy_forms_foundation.layout import (HTML, Column, Div, Fieldset,
Layout, Row)
from crispy_forms_foundation.layout.buttons import Button
from crispy_forms_foundation.layout.fields import Field
from django import forms from django import forms
from django.core.exceptions import NON_FIELD_ERRORS
from django.forms.models import ModelForm from django.forms.models import ModelForm
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from compilacao.models import Dispositivo, Nota, TipoNota, TipoVide, Vide from compilacao.models import (PARTICIPACAO_SOCIAL_CHOICES, Dispositivo, Nota,
from norma.models import TipoNormaJuridica TextoArticulado, TipoNota, TipoTextoArticulado,
from sapl.layout import to_column, to_row TipoVide, Vide, TipoPublicacao,
VeiculoPublicacao, Publicacao)
from compilacao.utils import YES_NO_CHOICES, FormLayout, to_column, to_row
class UpLoadImportFileForm(forms.Form): class UpLoadImportFileForm(forms.Form):
@ -19,6 +25,122 @@ error_messages = {
'invalid': _('URL inválida.') 'invalid': _('URL inválida.')
} }
ta_error_messages = {
'required': _('Este campo é obrigatório'),
}
class TipoTaForm(ModelForm):
sigla = forms.CharField(
label=TipoTextoArticulado._meta.get_field(
'sigla').verbose_name)
descricao = forms.CharField(
label=TipoTextoArticulado._meta.get_field(
'descricao').verbose_name)
participacao_social = forms.NullBooleanField(
label=TipoTextoArticulado._meta.get_field(
'participacao_social').verbose_name,
widget=forms.Select(choices=YES_NO_CHOICES),
required=True)
class Meta:
model = TipoTextoArticulado
fields = ['sigla',
'descricao',
'content_type',
'participacao_social',
]
def __init__(self, *args, **kwargs):
row1 = to_row([
('sigla', 2),
('descricao', 4),
('content_type', 3),
('participacao_social', 3),
])
self.helper = FormHelper()
self.helper.layout = FormLayout(
Fieldset(_('Identificação Básica'),
row1, css_class="large-12"))
super(TipoTaForm, self).__init__(*args, **kwargs)
class TaForm(ModelForm):
tipo_ta = forms.ModelChoiceField(
label=TipoTextoArticulado._meta.verbose_name,
queryset=TipoTextoArticulado.objects.all(),
required=True,
empty_label=None)
numero = forms.IntegerField(
label=TextoArticulado._meta.get_field(
'numero').verbose_name,
required=True)
ano = forms.IntegerField(
label=TextoArticulado._meta.get_field(
'ano').verbose_name,
required=True)
data = forms.DateField(
label=TextoArticulado._meta.get_field(
'data').verbose_name,
input_formats=['%d/%m/%Y'],
required=True,
widget=forms.DateInput(
format='%d/%m/%Y'),
error_messages=ta_error_messages
)
ementa = forms.CharField(
label='',
widget=forms.Textarea,
error_messages=ta_error_messages)
observacao = forms.CharField(
label='',
widget=forms.Textarea,
error_messages=ta_error_messages,
required=False)
participacao_social = forms.NullBooleanField(
label=TextoArticulado._meta.get_field(
'participacao_social').verbose_name,
widget=forms.Select(choices=PARTICIPACAO_SOCIAL_CHOICES),
required=False)
class Meta:
model = TextoArticulado
fields = ['tipo_ta',
'numero',
'ano',
'data',
'ementa',
'observacao',
'participacao_social',
]
def __init__(self, *args, **kwargs):
row1 = to_row([
('tipo_ta', 3),
('numero', 2),
('ano', 2),
('data', 2),
('participacao_social', 3),
])
self.helper = FormHelper()
self.helper.layout = FormLayout(
Fieldset(_('Identificação Básica'), row1, css_class="large-12"),
Fieldset(TextoArticulado._meta.get_field(
'ementa').verbose_name, Column('ementa'), css_class="large-12"),
Fieldset(
TextoArticulado._meta.get_field(
'observacao').verbose_name, Column('observacao'), css_class="large-12"),
)
super(TaForm, self).__init__(*args, **kwargs)
class NotaForm(ModelForm): class NotaForm(ModelForm):
NPRIV = 1 NPRIV = 1
@ -104,7 +226,7 @@ class NotaForm(ModelForm):
('publicidade', 3), ('publicidade', 3),
('publicacao', 3), ('publicacao', 3),
('efetividade', 3), ('efetividade', 3),
(Button('submit', 'Salvar', (Button('submit', _('Salvar'),
css_class='button primary radius'), 3) css_class='button primary radius'), 3)
]) ])
@ -128,21 +250,24 @@ class VideForm(ModelForm):
queryset=Dispositivo.objects.all(), queryset=Dispositivo.objects.all(),
widget=forms.HiddenInput()) widget=forms.HiddenInput())
tipo_norma = forms.ModelChoiceField( tipo_ta = forms.ModelChoiceField(
queryset=TipoNormaJuridica.objects.all(), label=_('Tipo do Texto Articulado'),
queryset=TipoTextoArticulado.objects.all(),
required=False) required=False)
num_norma = forms.IntegerField(label=_('Núm. da Norma'), required=False) num_ta = forms.IntegerField(
ano_norma = forms.IntegerField(label=_('Ano da Norma'), required=False) label=_('Núm Texto Articulado'), required=False)
ano_ta = forms.IntegerField(
label=_('Ano Texto Articulado'), required=False)
texto = forms.CharField( texto = forms.CharField(
label='', label='',
widget=forms.Textarea, widget=forms.Textarea,
error_messages=error_messages,
required=False) required=False)
tipo = forms.ModelChoiceField( tipo = forms.ModelChoiceField(
label=_('Tipo do Vide'), label=TipoVide._meta.verbose_name,
queryset=TipoVide.objects.all(), queryset=TipoVide.objects.all(),
required=True) required=True,
error_messages=error_messages)
busca_dispositivo = forms.CharField( busca_dispositivo = forms.CharField(
label=_('Buscar Dispositivo a Referenciar'), label=_('Buscar Dispositivo a Referenciar'),
@ -157,6 +282,12 @@ class VideForm(ModelForm):
'texto', 'texto',
'tipo', 'tipo',
'pk'] 'pk']
error_messages = {
NON_FIELD_ERRORS: {
'unique_together':
_("Ja existe um Vide deste tipo para o Dispositivo Referido "),
}
}
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
@ -184,9 +315,9 @@ class VideForm(ModelForm):
), 4)), ), 4)),
to_column(( to_column((
Div( Div(
Div(to_column(('tipo_norma', 6))), Div(to_column(('tipo_ta', 6))),
Div(to_column(('num_norma', 3)), Div(to_column(('num_ta', 3)),
to_column(('ano_norma', 3))), to_column(('ano_ta', 3))),
Div(to_column( Div(to_column(
(Field( (Field(
'busca_dispositivo', 'busca_dispositivo',
@ -209,3 +340,96 @@ class VideForm(ModelForm):
) )
super(VideForm, self).__init__(*args, **kwargs) super(VideForm, self).__init__(*args, **kwargs)
class PublicacaoForm(ModelForm):
tipo_publicacao = forms.ModelChoiceField(
label=TipoPublicacao._meta.verbose_name,
queryset=TipoPublicacao.objects.all())
veiculo_publicacao = forms.ModelChoiceField(
label=VeiculoPublicacao._meta.verbose_name,
queryset=VeiculoPublicacao.objects.all())
url_externa = forms.CharField(
label=Publicacao._meta.get_field('url_externa').verbose_name,
required=False)
data = forms.DateField(
label=Publicacao._meta.get_field('data').verbose_name,
input_formats=['%d/%m/%Y'],
required=True,
widget=forms.DateInput(
format='%d/%m/%Y'),
error_messages=error_messages
)
hora = forms.TimeField(
label=Publicacao._meta.get_field('hora').verbose_name,
required=False,
widget=forms.TextInput(
attrs={'class': 'hora_hms'}))
numero = forms.IntegerField(
label=Publicacao._meta.get_field(
'numero').verbose_name,
required=False)
ano = forms.IntegerField(
label=Publicacao._meta.get_field(
'ano').verbose_name)
edicao = forms.IntegerField(
label=Publicacao._meta.get_field(
'edicao').verbose_name,
required=False)
pagina_inicio = forms.IntegerField(
label=Publicacao._meta.get_field(
'pagina_inicio').verbose_name,
required=False)
pagina_fim = forms.IntegerField(
label=Publicacao._meta.get_field(
'pagina_fim').verbose_name,
required=False)
ta = forms.ModelChoiceField(queryset=TextoArticulado.objects.all(),
widget=forms.HiddenInput())
class Meta:
model = Publicacao
fields = ['tipo_publicacao',
'veiculo_publicacao',
'url_externa',
'data',
'hora',
'numero',
'ano',
'edicao',
'pagina_inicio',
'pagina_fim',
'ta']
def __init__(self, *args, **kwargs):
row1 = to_row([
('tipo_publicacao', 4),
('veiculo_publicacao', 6),
('ano', 2),
])
row2 = to_row([
('data', 4),
('hora', 4),
('numero', 2),
('edicao', 2),
])
row3 = to_row([
('pagina_inicio', 2),
('pagina_fim', 2),
('url_externa', 8),
])
self.helper = FormHelper()
self.helper.layout = FormLayout(
Fieldset(Publicacao._meta.verbose_name,
row1, row2, row3, css_class="large-12"))
super(PublicacaoForm, self).__init__(*args, **kwargs)
pass

349
compilacao/insert_inicial_TipoDispositivo.sql

@ -1,349 +0,0 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 9.4.5
-- Dumped by pg_dump version 9.4.5
-- Started on 2015-11-19 19:39:23 BRST
SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET search_path = public, pg_catalog;
--
-- TOC entry 2567 (class 0 OID 40610)
-- Dependencies: 366
-- Data for Name: compilacao_perfilestruturaltextosnormativos; Type: TABLE DATA; Schema: public; Owner: sapl
--
INSERT INTO compilacao_perfilestruturaltextosnormativos (id, nome, padrao, sigla) VALUES (1, 'Perfil Lei Complementar 95', false, 'LC95');
INSERT INTO compilacao_perfilestruturaltextosnormativos (id, nome, padrao, sigla) VALUES (2, 'Perfil Jataí - Goiás', true, 'PJTIGO');
--
-- TOC entry 2575 (class 0 OID 0)
-- Dependencies: 365
-- Name: compilacao_perfilestruturaltextosnormativos_id_seq; Type: SEQUENCE SET; Schema: public; Owner: sapl
--
SELECT pg_catalog.setval('compilacao_perfilestruturaltextosnormativos_id_seq', 2, true);
--
-- TOC entry 2562 (class 0 OID 38245)
-- Dependencies: 204
-- Data for Name: compilacao_tipodispositivo; Type: TABLE DATA; Schema: public; Owner: sapl
--
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 (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 (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 (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 (118, 'Item de Seção', 'itemsecao', '', 'Item ', 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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (3, 'Bloco Alteração', 'bloco_alteracao', '', '', 0, '', '', '', '', '', '', true, '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, '1', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, 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 (2, 'Ementa', 'ementa', '', '', 0, '', '', '', '', '', '', false, 'N', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-', false, false);
--
-- TOC entry 2576 (class 0 OID 0)
-- Dependencies: 205
-- Name: compilacao_tipodispositivo_id_seq; Type: SEQUENCE SET; Schema: public; Owner: sapl
--
SELECT pg_catalog.setval('compilacao_tipodispositivo_id_seq', 28, true);
--
-- TOC entry 2564 (class 0 OID 38253)
-- Dependencies: 206
-- Data for Name: compilacao_tipodispositivorelationship; Type: TABLE DATA; Schema: public; Owner: sapl
--
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, 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, true);
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, 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, 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, true);
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, true);
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, 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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, 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, true);
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, 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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (356, 101, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (357, 102, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (358, 103, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (359, 104, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (360, 111, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (361, 112, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (362, 113, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (363, 114, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (364, 115, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (365, 116, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (366, 117, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (368, 119, 3, false, 1, -1, true);
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, true);
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, true);
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, 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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (126, 1, 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 (127, 2, 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 (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 (147, 125, 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 (146, 124, 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 (145, 123, 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 (144, 122, 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 (143, 121, 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 (142, 120, 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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (221, 120, 119, 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 (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 (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 (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 (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 (322, 118, 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 (326, 118, 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 (329, 118, 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 (331, 118, 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 (353, 118, 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 (367, 118, 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 (333, 119, 118, 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 (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 (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 (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 (118, 113, 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 (129, 101, 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 (130, 102, 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 (131, 103, 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 (132, 104, 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 (133, 111, 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 (134, 112, 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 (135, 113, 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 (136, 114, 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 (137, 115, 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 (138, 116, 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 (139, 117, 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 (141, 119, 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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (253, 1, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (254, 2, 3, false, 1, -1, true);
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, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (256, 125, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (257, 124, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (258, 123, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (259, 122, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (260, 121, 3, false, 1, -1, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (261, 120, 3, false, 1, -1, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, 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, true);
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, true);
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, 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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, true);
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, 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, true);
INSERT INTO compilacao_tipodispositivorelationship (id, filho_permitido_id, pai_id, filho_de_insercao_automatica, perfil_id, quantidade_permitida, permitir_variacao) VALUES (287, 118, 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 (269, 118, 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 (278, 118, 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 (296, 118, 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 (304, 118, 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 (311, 118, 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 (317, 118, 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 (335, 121, 119, false, 1, -1, false);
--
-- TOC entry 2577 (class 0 OID 0)
-- Dependencies: 207
-- Name: compilacao_tipodispositivorelationship_id_seq; Type: SEQUENCE SET; Schema: public; Owner: sapl
--
SELECT pg_catalog.setval('compilacao_tipodispositivorelationship_id_seq', 384, true);
-- Completed on 2015-11-19 19:39:24 BRST
--
-- PostgreSQL database dump complete
--

19
compilacao/migrations/0032_auto_20151213_1538.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0031_merge'),
]
operations = [
migrations.AlterUniqueTogether(
name='vide',
unique_together=set(
[('dispositivo_base', 'dispositivo_ref', 'tipo')]),
),
]

115
compilacao/migrations/0033_auto_20151226_1320.py

@ -0,0 +1,115 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0032_auto_20151213_1538'),
]
operations = [
migrations.CreateModel(
name='PerfilEstruturalTextoArticulado',
fields=[
('id', models.AutoField(serialize=False, auto_created=True, primary_key=True, verbose_name='ID')),
('sigla', models.CharField(unique=True, max_length=10, verbose_name='Sigla')),
('nome', models.CharField(max_length=50, verbose_name='Nome')),
('padrao', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Padrão')),
],
options={
'verbose_name_plural': 'Perfis Estruturais de Textos Articulados',
'verbose_name': 'Perfil Estrutural de Texto Articulado',
'ordering': ['-padrao', 'sigla'],
},
),
migrations.CreateModel(
name='TextoArticulado',
fields=[
('id', models.AutoField(serialize=False, auto_created=True, primary_key=True, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True, verbose_name='created')),
('modified', models.DateTimeField(auto_now=True, verbose_name='modified')),
('data', models.DateField(null=True, verbose_name='Data', blank=True)),
('ementa', models.TextField(verbose_name='Ementa')),
('observacao', models.TextField(null=True, verbose_name='Observação', blank=True)),
('numero', models.PositiveIntegerField(verbose_name='Número')),
('ano', models.PositiveSmallIntegerField(verbose_name='Ano')),
('participacao_social', models.NullBooleanField(choices=[(None, 'Padrão definido no Tipo'), (True, 'Sim'), (False, 'Não')], default=None, verbose_name='Participação Social')),
],
options={
'verbose_name_plural': 'Textos Articulados',
'verbose_name': 'Texto Articulado',
'ordering': ['-data', '-numero'],
},
),
migrations.CreateModel(
name='TipoTextoArticulado',
fields=[
('id', models.AutoField(serialize=False, auto_created=True, primary_key=True, verbose_name='ID')),
('sigla', models.CharField(max_length=3, verbose_name='Sigla')),
('descricao', models.CharField(max_length=50, verbose_name='Descrição')),
('participacao_social', models.NullBooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Participação Social')),
],
options={
'verbose_name_plural': 'Tipos de Texto Articulados',
'verbose_name': 'Tipo de Texto Articulado',
},
),
migrations.AlterModelOptions(
name='dispositivo',
options={'verbose_name_plural': 'Dispositivos', 'verbose_name': 'Dispositivo', 'ordering': ['ta', 'ordem']},
),
migrations.RemoveField(
model_name='publicacao',
name='norma',
),
migrations.AlterField(
model_name='dispositivo',
name='visibilidade',
field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Visibilidade no Texto Articulado Publicado'),
),
migrations.AlterField(
model_name='tipodispositivorelationship',
name='perfil',
field=models.ForeignKey(to='compilacao.PerfilEstruturalTextoArticulado'),
),
migrations.AlterUniqueTogether(
name='dispositivo',
unique_together=set([]),
),
migrations.DeleteModel(
name='PerfilEstruturalTextosNormativos',
),
migrations.AddField(
model_name='textoarticulado',
name='tipo_ta',
field=models.ForeignKey(to='compilacao.TipoTextoArticulado', default=None, blank=True, null=True, verbose_name='Tipo de Texto Articulado'),
),
migrations.RemoveField(
model_name='dispositivo',
name='norma',
),
migrations.RemoveField(
model_name='dispositivo',
name='norma_publicada',
),
migrations.AddField(
model_name='dispositivo',
name='ta',
field=models.ForeignKey(default=1, to='compilacao.TextoArticulado', related_name='dispositivos_set', verbose_name='Texto Articulado'),
preserve_default=False,
),
migrations.AddField(
model_name='dispositivo',
name='ta_publicado',
field=models.ForeignKey(to='compilacao.TextoArticulado', default=None, blank=True, null=True, related_name='dispositivos_alterados_pelo_ta_set', verbose_name='Texto Articulado Publicado'),
),
migrations.AddField(
model_name='publicacao',
name='ta',
field=models.ForeignKey(default=1, to='compilacao.TextoArticulado', verbose_name='Texto Articulado'),
preserve_default=False,
),
]

18
compilacao/migrations/0034_auto_20151226_1321.py

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0033_auto_20151226_1320'),
]
operations = [
migrations.AlterUniqueTogether(
name='dispositivo',
unique_together=set([('ta', 'ordem'), ('ta', 'dispositivo0', 'dispositivo1', 'dispositivo2', 'dispositivo3', 'dispositivo4', 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', 'ta_publicado', 'publicacao')]),
),
]

30
compilacao/migrations/0035_auto_20151226_1349.py

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import builtins
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
('compilacao', '0034_auto_20151226_1321'),
]
operations = [
migrations.AddField(
model_name='textoarticulado',
name='content_type',
field=models.ForeignKey(
to='contenttypes.ContentType', default=142),
preserve_default=False,
),
migrations.AddField(
model_name='textoarticulado',
name='object_id',
field=models.PositiveIntegerField(default=1),
preserve_default=False,
),
]

19
compilacao/migrations/0036_auto_20151226_1411.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0035_auto_20151226_1349'),
]
operations = [
migrations.AlterField(
model_name='textoarticulado',
name='content_type',
field=models.ForeignKey(default=None, null=True, to='contenttypes.ContentType', blank=True),
),
]

19
compilacao/migrations/0037_auto_20151226_1414.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0036_auto_20151226_1411'),
]
operations = [
migrations.AlterField(
model_name='textoarticulado',
name='object_id',
field=models.PositiveIntegerField(blank=True, default=None, null=True),
),
]

19
compilacao/migrations/0038_tipotextoarticulado_model.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0037_auto_20151226_1414'),
]
operations = [
migrations.AddField(
model_name='tipotextoarticulado',
name='model',
field=models.CharField(max_length=50, blank=True, default='', null=True, verbose_name='Modelagem Django'),
),
]

19
compilacao/migrations/0039_auto_20151226_1433.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0038_tipotextoarticulado_model'),
]
operations = [
migrations.AlterField(
model_name='tipotextoarticulado',
name='model',
field=models.CharField(verbose_name='Modelagem Django', default='', blank=True, null=True, max_length=50, unique=True),
),
]

24
compilacao/migrations/0040_auto_20160106_1956.py

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0002_remove_content_type_name'),
('compilacao', '0039_auto_20151226_1433'),
]
operations = [
migrations.RemoveField(
model_name='tipotextoarticulado',
name='model',
),
migrations.AddField(
model_name='tipotextoarticulado',
name='content_type',
field=models.ForeignKey(verbose_name='Modelo Integrado', blank=True, default=None, null=True, to='contenttypes.ContentType'),
),
]

39
compilacao/migrations/0041_auto_20160109_1928.py

@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0040_auto_20160106_1956'),
]
operations = [
migrations.RenameField(
model_name='publicacao',
old_name='publicacao',
new_name='data',
),
migrations.AddField(
model_name='publicacao',
name='ano',
field=models.PositiveIntegerField(null=True, verbose_name='Pg. Início', blank=True),
),
migrations.AddField(
model_name='publicacao',
name='edicao',
field=models.PositiveIntegerField(null=True, verbose_name='Pg. Início', blank=True),
),
migrations.AddField(
model_name='publicacao',
name='numero',
field=models.PositiveIntegerField(null=True, verbose_name='Pg. Início', blank=True),
),
migrations.AddField(
model_name='publicacao',
name='url_externa',
field=models.CharField(max_length=1024, verbose_name='Link para Versão Eletrônica', blank=True),
),
]

47
compilacao/migrations/0042_auto_20160110_1620.py

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import datetime
from django.db import migrations, models
from django.utils.timezone import utc
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0041_auto_20160109_1928'),
]
operations = [
migrations.AddField(
model_name='publicacao',
name='hora',
field=models.TimeField(default=datetime.datetime(
2016, 1, 10, 18, 20, 1, 151209, tzinfo=utc), verbose_name='Horário de Publicação'),
preserve_default=False,
),
migrations.AlterField(
model_name='publicacao',
name='ano',
field=models.PositiveIntegerField(
verbose_name='Ano', blank=True, null=True),
),
migrations.AlterField(
model_name='publicacao',
name='data',
field=models.DateField(verbose_name='Data de Publicação'),
),
migrations.AlterField(
model_name='publicacao',
name='edicao',
field=models.PositiveIntegerField(
verbose_name='Edição', blank=True, null=True),
),
migrations.AlterField(
model_name='publicacao',
name='numero',
field=models.PositiveIntegerField(
verbose_name='Número', blank=True, null=True),
),
]

19
compilacao/migrations/0043_auto_20160110_1733.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('compilacao', '0042_auto_20160110_1620'),
]
operations = [
migrations.AlterField(
model_name='publicacao',
name='hora',
field=models.TimeField(null=True, verbose_name='Horário de Publicação', blank=True),
),
]

175
compilacao/models.py

@ -1,14 +1,16 @@
from datetime import datetime from datetime import datetime
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models from django.db import models
from django.db.models import F, Q from django.db.models import F, Q
from django.db.models.aggregates import Max from django.db.models.aggregates import Max
from django.template import defaultfilters
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from norma.models import NormaJuridica from compilacao import utils
from sapl import utils from compilacao.utils import YES_NO_CHOICES
from sapl.utils import YES_NO_CHOICES
class TimestampedMixin(models.Model): class TimestampedMixin(models.Model):
@ -58,6 +60,72 @@ class BaseModel(models.Model):
raise ValidationError(msg) raise ValidationError(msg)
class TipoTextoArticulado(models.Model):
sigla = models.CharField(max_length=3, verbose_name=_('Sigla'))
descricao = models.CharField(max_length=50, verbose_name=_('Descrição'))
content_type = models.ForeignKey(
ContentType,
blank=True, null=True, default=None,
verbose_name=_('Modelo Integrado'))
participacao_social = models.NullBooleanField(
default=False,
blank=True, null=True,
choices=utils.YES_NO_CHOICES,
verbose_name=_('Participação Social'))
class Meta:
verbose_name = _('Tipo de Texto Articulado')
verbose_name_plural = _('Tipos de Texto Articulados')
def __str__(self):
return self.descricao
PARTICIPACAO_SOCIAL_CHOICES = [
(None, _('Padrão definido no Tipo')),
(True, _('Sim')),
(False, _('Não'))]
class TextoArticulado(TimestampedMixin):
data = models.DateField(blank=True, null=True, verbose_name=_('Data'))
ementa = models.TextField(verbose_name=_('Ementa'))
observacao = models.TextField(
blank=True, null=True, verbose_name=_('Observação'))
numero = models.PositiveIntegerField(verbose_name=_('Número'))
ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'))
tipo_ta = models.ForeignKey(
TipoTextoArticulado,
blank=True, null=True, default=None,
verbose_name=_('Tipo de Texto Articulado'))
participacao_social = models.NullBooleanField(
default=None,
blank=True, null=True,
choices=PARTICIPACAO_SOCIAL_CHOICES,
verbose_name=_('Participação Social'))
content_type = models.ForeignKey(
ContentType,
blank=True, null=True, default=None)
object_id = models.PositiveIntegerField(
blank=True, null=True, default=None)
content_object = GenericForeignKey('content_type', 'object_id')
class Meta:
verbose_name = _('Texto Articulado')
verbose_name_plural = _('Textos Articulados')
ordering = ['-data', '-numero']
def __str__(self):
if self.content_object:
return str(self.content_object)
else:
return _('%(tipo)s%(numero)s de %(data)s') % {
'tipo': self.tipo_ta,
'numero': self.numero,
'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")}
class TipoNota(models.Model): class TipoNota(models.Model):
sigla = models.CharField( sigla = models.CharField(
max_length=10, unique=True, verbose_name=_('Sigla')) max_length=10, unique=True, verbose_name=_('Sigla'))
@ -259,7 +327,7 @@ class TipoDispositivo(BaseModel):
self, pai_relativo, include_relative_autos=True, perfil_pk=None): self, pai_relativo, include_relative_autos=True, perfil_pk=None):
if not perfil_pk: if not perfil_pk:
perfis = PerfilEstruturalTextosNormativos.objects.filter( perfis = PerfilEstruturalTextoArticulado.objects.filter(
padrao=True)[:1] padrao=True)[:1]
if not perfis.exists(): if not perfis.exists():
@ -279,7 +347,7 @@ class TipoDispositivo(BaseModel):
self, base, perfil_pk=None): self, base, perfil_pk=None):
if not perfil_pk: if not perfil_pk:
perfis = PerfilEstruturalTextosNormativos.objects.filter( perfis = PerfilEstruturalTextoArticulado.objects.filter(
padrao=True)[:1] padrao=True)[:1]
if not perfis.exists(): if not perfis.exists():
@ -294,7 +362,7 @@ class TipoDispositivo(BaseModel):
return False return False
class PerfilEstruturalTextosNormativos(BaseModel): class PerfilEstruturalTextoArticulado(BaseModel):
sigla = models.CharField( sigla = models.CharField(
max_length=10, unique=True, verbose_name=_('Sigla')) max_length=10, unique=True, verbose_name=_('Sigla'))
nome = models.CharField(max_length=50, verbose_name=_('Nome')) nome = models.CharField(max_length=50, verbose_name=_('Nome'))
@ -303,8 +371,8 @@ class PerfilEstruturalTextosNormativos(BaseModel):
choices=YES_NO_CHOICES, verbose_name=_('Padrão')) choices=YES_NO_CHOICES, verbose_name=_('Padrão'))
class Meta: class Meta:
verbose_name = _('Perfil Estrutural de Textos Normativos') verbose_name = _('Perfil Estrutural de Texto Articulado')
verbose_name_plural = _('Perfis Estruturais de Textos Normativos') verbose_name_plural = _('Perfis Estruturais de Textos Articulados')
ordering = ['-padrao', 'sigla'] ordering = ['-padrao', 'sigla']
@ -317,7 +385,7 @@ class TipoDispositivoRelationship(BaseModel):
filho_permitido = models.ForeignKey( filho_permitido = models.ForeignKey(
TipoDispositivo, TipoDispositivo,
related_name='possiveis_pais') related_name='possiveis_pais')
perfil = models.ForeignKey(PerfilEstruturalTextosNormativos) perfil = models.ForeignKey(PerfilEstruturalTextoArticulado)
filho_de_insercao_automatica = models.BooleanField( filho_de_insercao_automatica = models.BooleanField(
default=False, default=False,
choices=YES_NO_CHOICES, verbose_name=_('Filho de Inserção Automática')) choices=YES_NO_CHOICES, verbose_name=_('Filho de Inserção Automática'))
@ -352,7 +420,7 @@ class TipoPublicacao(models.Model):
verbose_name_plural = _('Tipos de Publicação') verbose_name_plural = _('Tipos de Publicação')
def __str__(self): def __str__(self):
return self.sigla + ' - ' + self.nome return self.nome
class VeiculoPublicacao(models.Model): class VeiculoPublicacao(models.Model):
@ -369,13 +437,30 @@ class VeiculoPublicacao(models.Model):
class Publicacao(TimestampedMixin): class Publicacao(TimestampedMixin):
norma = models.ForeignKey( ta = models.ForeignKey(
NormaJuridica, verbose_name=_('Norma Jurídica')) TextoArticulado, verbose_name=_('Texto Articulado'))
veiculo_publicacao = models.ForeignKey( veiculo_publicacao = models.ForeignKey(
VeiculoPublicacao, verbose_name=_('Veículo de Publicação')) VeiculoPublicacao, verbose_name=_('Veículo de Publicação'))
tipo_publicacao = models.ForeignKey( tipo_publicacao = models.ForeignKey(
TipoPublicacao, verbose_name=_('Tipo de Publicação')) TipoPublicacao, verbose_name=_('Tipo de Publicação'))
publicacao = models.DateTimeField(verbose_name=_('Data de Publicação'))
data = models.DateField(verbose_name=_('Data de Publicação'))
hora = models.TimeField(
blank=True, null=True, verbose_name=_('Horário de Publicação'))
numero = models.PositiveIntegerField(
blank=True, null=True, verbose_name=_('Número'))
ano = models.PositiveIntegerField(
blank=True, null=True, verbose_name=_('Ano'))
edicao = models.PositiveIntegerField(
blank=True, null=True, verbose_name=_('Edição'))
url_externa = models.CharField(
max_length=1024,
blank=True,
verbose_name=_('Link para Versão Eletrônica'))
pagina_inicio = models.PositiveIntegerField( pagina_inicio = models.PositiveIntegerField(
blank=True, null=True, verbose_name=_('Pg. Início')) blank=True, null=True, verbose_name=_('Pg. Início'))
pagina_fim = models.PositiveIntegerField( pagina_fim = models.PositiveIntegerField(
@ -386,7 +471,10 @@ class Publicacao(TimestampedMixin):
verbose_name_plural = _('Publicações') verbose_name_plural = _('Publicações')
def __str__(self): def __str__(self):
return '%s: %s' % (self.veiculo_publicacao, self.publicacao) return _('%s realizada em %s \n %s') % (
self.tipo_publicacao,
defaultfilters.date(self.data, "d \d\e F \d\e Y"),
self.ta)
class Dispositivo(BaseModel, TimestampedMixin): class Dispositivo(BaseModel, TimestampedMixin):
@ -467,7 +555,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
visibilidade = models.BooleanField( visibilidade = models.BooleanField(
default=False, default=False,
choices=YES_NO_CHOICES, choices=YES_NO_CHOICES,
verbose_name=_('Visibilidade na Norma Publicada')) verbose_name=_('Visibilidade no Texto Articulado Publicado'))
tipo_dispositivo = models.ForeignKey( tipo_dispositivo = models.ForeignKey(
TipoDispositivo, TipoDispositivo,
@ -478,15 +566,15 @@ class Dispositivo(BaseModel, TimestampedMixin):
Publicacao, Publicacao,
blank=True, null=True, default=None, verbose_name=_('Publicação')) blank=True, null=True, default=None, verbose_name=_('Publicação'))
norma = models.ForeignKey( ta = models.ForeignKey(
NormaJuridica, TextoArticulado,
related_name='dispositivos_set', related_name='dispositivos_set',
verbose_name=_('Norma Jurídica')) verbose_name=_('Texto Articulado'))
norma_publicada = models.ForeignKey( ta_publicado = models.ForeignKey(
NormaJuridica, TextoArticulado,
blank=True, null=True, default=None, blank=True, null=True, default=None,
related_name='dispositivos_alterados_pela_norma_set', related_name='dispositivos_alterados_pelo_ta_set',
verbose_name=_('Norma Jurídica Publicada')) verbose_name=_('Texto Articulado Publicado'))
dispositivo_subsequente = models.ForeignKey( dispositivo_subsequente = models.ForeignKey(
'self', 'self',
@ -517,10 +605,10 @@ class Dispositivo(BaseModel, TimestampedMixin):
class Meta: class Meta:
verbose_name = _('Dispositivo') verbose_name = _('Dispositivo')
verbose_name_plural = _('Dispositivos') verbose_name_plural = _('Dispositivos')
ordering = ['norma', 'ordem'] ordering = ['ta', 'ordem']
unique_together = ( unique_together = (
('norma', 'ordem',), ('ta', 'ordem',),
('norma', ('ta',
'dispositivo0', 'dispositivo0',
'dispositivo1', 'dispositivo1',
'dispositivo2', 'dispositivo2',
@ -529,14 +617,14 @@ class Dispositivo(BaseModel, TimestampedMixin):
'dispositivo5', 'dispositivo5',
'tipo_dispositivo', 'tipo_dispositivo',
'dispositivo_pai', 'dispositivo_pai',
'norma_publicada', 'ta_publicado',
'publicacao',), 'publicacao',),
) )
def __str__(self): def __str__(self):
return '%(rotulo)s - %(norma)s' % { return '%(rotulo)s - %(ta)s' % {
'rotulo': (self.rotulo if self.rotulo else self.tipo_dispositivo), 'rotulo': (self.rotulo if self.rotulo else self.tipo_dispositivo),
'norma': self.norma} 'ta': self.ta}
def rotulo_padrao(self, local_insert=0, for_insert_in=0): def rotulo_padrao(self, local_insert=0, for_insert_in=0):
""" """
@ -774,36 +862,37 @@ class Dispositivo(BaseModel, TimestampedMixin):
proximo_bloco = Dispositivo.objects.filter( proximo_bloco = Dispositivo.objects.filter(
ordem__gt=self.ordem, ordem__gt=self.ordem,
nivel__lte=self.nivel, nivel__lte=self.nivel,
norma_id=self.norma_id)[:1] ta_id=self.ta_id)[:1]
elif local == 'add_in': elif local == 'add_in':
proximo_bloco = Dispositivo.objects.filter( proximo_bloco = Dispositivo.objects.filter(
ordem__gt=self.ordem, ordem__gt=self.ordem,
nivel__lte=self.nivel + 1, nivel__lte=self.nivel + 1,
norma_id=self.norma_id).exclude( ta_id=self.ta_id).exclude(
tipo_dispositivo__class_css='caput')[:1] tipo_dispositivo__class_css='caput')[:1]
else: else:
proximo_bloco = Dispositivo.objects.filter( proximo_bloco = Dispositivo.objects.filter(
ordem__gte=self.ordem, ordem__gte=self.ordem,
norma_id=self.norma_id)[:1] ta_id=self.ta_id)[:1]
if proximo_bloco.exists(): if proximo_bloco.exists():
ordem = proximo_bloco[0].ordem ordem = proximo_bloco[0].ordem
proximo_bloco = Dispositivo.objects.order_by('-ordem').filter( proximo_bloco = Dispositivo.objects.order_by('-ordem').filter(
ordem__gte=ordem, ordem__gte=ordem,
norma_id=self.norma_id) ta_id=self.ta_id)
proximo_bloco.update(ordem=F('ordem') + 1) proximo_bloco.update(ordem=F('ordem') + 1)
proximo_bloco.update( proximo_bloco.update(
ordem=F('ordem') + ( ordem=F('ordem') + (
Dispositivo.INTERVALO_ORDEM * espaco_a_criar - 1)) Dispositivo.INTERVALO_ORDEM * espaco_a_criar - 1))
else: else:
# inserção no fim da norma # inserção no fim da ta
ordem_max = Dispositivo.objects.order_by( ordem_max = Dispositivo.objects.order_by(
'ordem').filter(norma_id=self.norma_id).aggregate( 'ordem').filter(
ta_id=self.ta_id).aggregate(
Max('ordem')) Max('ordem'))
if ordem_max['ordem__max'] is None: if ordem_max['ordem__max'] is None:
raise Exception( raise Exception(
'Não existem registros base nesta Norma') 'Não existem registros base neste Texto Articulado')
ordem = ordem_max['ordem__max'] + Dispositivo.INTERVALO_ORDEM ordem = ordem_max['ordem__max'] + Dispositivo.INTERVALO_ORDEM
return ordem return ordem
@ -847,7 +936,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
elif self.dispositivo_pai is None: elif self.dispositivo_pai is None:
irmaos = list(Dispositivo.objects.filter( irmaos = list(Dispositivo.objects.filter(
ordem__gt=self.ordem, ordem__gt=self.ordem,
norma_id=self.norma_id, ta_id=self.ta_id,
tipo_dispositivo_id=self.tipo_dispositivo.pk)) tipo_dispositivo_id=self.tipo_dispositivo.pk))
else: # contagem continua restrita a articulacao else: # contagem continua restrita a articulacao
@ -856,13 +945,13 @@ class Dispositivo(BaseModel, TimestampedMixin):
if proxima_articulacao is None: if proxima_articulacao is None:
irmaos = list(Dispositivo.objects.filter( irmaos = list(Dispositivo.objects.filter(
ordem__gt=self.ordem, ordem__gt=self.ordem,
norma_id=self.norma_id, ta_id=self.ta_id,
tipo_dispositivo_id=self.tipo_dispositivo.pk)) tipo_dispositivo_id=self.tipo_dispositivo.pk))
else: else:
irmaos = list(Dispositivo.objects.filter( irmaos = list(Dispositivo.objects.filter(
Q(ordem__gt=self.ordem) & Q(ordem__gt=self.ordem) &
Q(ordem__lt=proxima_articulacao.ordem), Q(ordem__lt=proxima_articulacao.ordem),
norma_id=self.norma_id, ta_id=self.ta_id,
tipo_dispositivo_id=self.tipo_dispositivo.pk)) tipo_dispositivo_id=self.tipo_dispositivo.pk))
dp_profundidade = self.get_profundidade() dp_profundidade = self.get_profundidade()
@ -943,7 +1032,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
proxima_articulacao = Dispositivo.objects.filter( proxima_articulacao = Dispositivo.objects.filter(
ordem__gt=self.ordem, ordem__gt=self.ordem,
nivel=0, nivel=0,
norma_id=self.norma_id)[:1] ta_id=self.ta_id)[:1]
if not proxima_articulacao.exists(): if not proxima_articulacao.exists():
return None return None
@ -955,7 +1044,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
# pp possiveis_pais # pp possiveis_pais
if not perfil_pk: if not perfil_pk:
perfis = PerfilEstruturalTextosNormativos.objects.filter( perfis = PerfilEstruturalTextoArticulado.objects.filter(
padrao=True)[:1] padrao=True)[:1]
if perfis.exists(): if perfis.exists():
perfil_pk = perfis[0].pk perfil_pk = perfis[0].pk
@ -985,7 +1074,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
dispositivo_base.get_numero_completo()) dispositivo_base.get_numero_completo())
dp.nivel = dispositivo_base.nivel dp.nivel = dispositivo_base.nivel
dp.texto = '' dp.texto = ''
dp.norma = dispositivo_base.norma dp.ta = dispositivo_base.ta
dp.dispositivo_pai = dispositivo_base.dispositivo_pai dp.dispositivo_pai = dispositivo_base.dispositivo_pai
dp.inicio_eficacia = dispositivo_base.inicio_eficacia dp.inicio_eficacia = dispositivo_base.inicio_eficacia
dp.inicio_vigencia = dispositivo_base.inicio_vigencia dp.inicio_vigencia = dispositivo_base.inicio_vigencia
@ -1005,7 +1094,7 @@ class Dispositivo(BaseModel, TimestampedMixin):
tipo_dispositivo_id=tipo_base.pk, tipo_dispositivo_id=tipo_base.pk,
ordem__lte=dispositivo_base.ordem, ordem__lte=dispositivo_base.ordem,
ordem__gt=raiz.ordem, ordem__gt=raiz.ordem,
norma_id=dispositivo_base.norma_id)[:1] ta_id=dispositivo_base.ta_id)[:1]
if disps.exists(): if disps.exists():
dispositivo.set_numero_completo( dispositivo.set_numero_completo(
@ -1048,7 +1137,7 @@ class Vide(TimestampedMixin):
class Meta: class Meta:
verbose_name = _('Vide') verbose_name = _('Vide')
verbose_name_plural = _('Vides') verbose_name_plural = _('Vides')
unique_together = ['dispositivo_base', 'dispositivo_ref'] unique_together = ['dispositivo_base', 'dispositivo_ref', 'tipo']
def __str__(self): def __str__(self):
return _('Vide %s') % self.texto return _('Vide %s') % self.texto

38
compilacao/templatetags/compilacao_filters.py

@ -1,3 +1,4 @@
from compressor.utils import get_class
from django import template from django import template
from django.core.signing import Signer from django.core.signing import Signer
from django.db.models import Q from django.db.models import Q
@ -22,8 +23,9 @@ def get_tipos_dispositivo(pk_atual):
@register.filter @register.filter
def get_field(value_dict, key): def lookup(d, key):
return value_dict[key] skey = str(key)
return d[str(key)] if skey in d else []
@register.simple_tag @register.simple_tag
@ -42,7 +44,7 @@ def dispositivo_desativado(dispositivo, inicio_vigencia, fim_vigencia):
@register.simple_tag @register.simple_tag
def nota_automatica(dispositivo): def nota_automatica(dispositivo):
if dispositivo.norma_publicada is not None: if dispositivo.ta_publicado is not None:
d = dispositivo.dispositivo_atualizador.dispositivo_pai d = dispositivo.dispositivo_atualizador.dispositivo_pai
if dispositivo.texto == Dispositivo.TEXTO_PADRAO_DISPOSITIVO_REVOGADO: if dispositivo.texto == Dispositivo.TEXTO_PADRAO_DISPOSITIVO_REVOGADO:
return 'Revogado pelo %s.' % d return 'Revogado pelo %s.' % d
@ -151,3 +153,33 @@ def nomenclatura_heranca(d, ignore_ultimo=0, ignore_primeiro=0):
d = d.dispositivo_pai d = d.dispositivo_pai
return result return result
@register.simple_tag
def field_verbose_name(instance, field_name):
return instance._meta.get_field(field_name).verbose_name
@register.simple_tag
def fieldclass_verbose_name(class_name, field_name):
cls = get_class(
'compilacao.models.' + class_name)
return cls._meta.get_field(
field_name).verbose_name
@register.simple_tag
def model_verbose_name(class_name):
model = get_class('compilacao.models.' + class_name)
return model._meta.verbose_name
@register.simple_tag
def model_verbose_name_plural(class_name):
model = get_class('compilacao.models.' + class_name)
return model._meta.verbose_name_plural
@register.filter
def urldetail_content_type(obj):
return '%s:detail' % obj.content_type.model

91
compilacao/urls.py

@ -1,70 +1,101 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from compilacao import views from compilacao import views
from compilacao.views import (perfil_estr_txt_norm, tipo_dispositivo_crud, from compilacao.views import (tipo_nota_crud, tipo_publicacao_crud,
tipo_nota_crud, tipo_publicacao_crud,
tipo_vide_crud, veiculo_publicacao_crud) tipo_vide_crud, veiculo_publicacao_crud)
urlpatterns_compilacao = [ urlpatterns_compilacao = [
url(r'^(?P<norma_id>[0-9]+)/compilacao$', url(r'^$', views.TaListView.as_view(), name='ta_list'),
views.CompilacaoView.as_view(), name='compilacao'), url(r'^create$', views.TaCreateView.as_view(), name='ta_create'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/(?P<dispositivo_id>[0-9]+)/$', url(r'^(?P<pk>[0-9]+)$', views.TaDetailView.as_view(), name='ta_detail'),
views.DispositivoView.as_view(), name='dispositivo'), url(r'^(?P<pk>[0-9]+)/edit$',
views.TaUpdateView.as_view(), name='ta_edit'),
url(r'^(?P<pk>[0-9]+)/delete$',
views.TaDeleteView.as_view(), name='ta_delete'),
url(r'^(?P<ta_id>[0-9]+)/text$',
views.TextView.as_view(), name='ta_text'),
url(r'^(?P<ta_id>[0-9]+)/text/vigencia/(?P<sign>.+)/$',
views.TextView.as_view(), name='ta_vigencia'),
url(r'^(?P<ta_id>[0-9]+)/text/edit',
views.TextEditView.as_view(), name='ta_text_edit'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/vigencia/(?P<sign>.+)/$', url(r'^(?P<ta_id>[0-9]+)/text/(?P<dispositivo_id>[0-9]+)/$',
views.CompilacaoView.as_view(), name='vigencia'), views.DispositivoView.as_view(), name='dispositivo'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/edit', url(r'^(?P<ta_id>[0-9]+)/text/(?P<dispositivo_id>[0-9]+)/refresh',
views.CompilacaoEditView.as_view(), name='comp_edit'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/(?P<dispositivo_id>[0-9]+)/refresh',
views.DispositivoEditView.as_view(), name='dispositivo_edit'), views.DispositivoEditView.as_view(), name='dispositivo_edit'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/(?P<dispositivo_id>[0-9]+)/actions', url(r'^(?P<ta_id>[0-9]+)/text/(?P<dispositivo_id>[0-9]+)/actions',
views.ActionsEditView.as_view(), name='dispositivo_actions'), views.ActionsEditView.as_view(), name='dispositivo_actions'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/'
url(r'^(?P<ta_id>[0-9]+)/text/'
'(?P<dispositivo_id>[0-9]+)/nota/create$', '(?P<dispositivo_id>[0-9]+)/nota/create$',
views.NotasCreateView.as_view(), name='nota_create'), views.NotasCreateView.as_view(), name='nota_create'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/' url(r'^(?P<ta_id>[0-9]+)/text/'
'(?P<dispositivo_id>[0-9]+)/nota/(?P<pk>[0-9]+)/edit$', '(?P<dispositivo_id>[0-9]+)/nota/(?P<pk>[0-9]+)/edit$',
views.NotasEditView.as_view(), name='nota_edit'), views.NotasEditView.as_view(), name='nota_edit'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/' url(r'^(?P<ta_id>[0-9]+)/text/'
'(?P<dispositivo_id>[0-9]+)/nota/(?P<pk>[0-9]+)/delete$', '(?P<dispositivo_id>[0-9]+)/nota/(?P<pk>[0-9]+)/delete$',
views.NotasDeleteView.as_view(), name='nota_delete'), views.NotasDeleteView.as_view(), name='nota_delete'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/' url(r'^(?P<ta_id>[0-9]+)/text/'
'(?P<dispositivo_id>[0-9]+)/vide/create$', '(?P<dispositivo_id>[0-9]+)/vide/create$',
views.VideCreateView.as_view(), name='vide_create'), views.VideCreateView.as_view(), name='vide_create'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/' url(r'^(?P<ta_id>[0-9]+)/text/'
'(?P<dispositivo_id>[0-9]+)/vide/(?P<pk>[0-9]+)/edit$', '(?P<dispositivo_id>[0-9]+)/vide/(?P<pk>[0-9]+)/edit$',
views.VideEditView.as_view(), name='vide_edit'), views.VideEditView.as_view(), name='vide_edit'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/' url(r'^(?P<ta_id>[0-9]+)/text/'
'(?P<dispositivo_id>[0-9]+)/vide/(?P<pk>[0-9]+)/delete$', '(?P<dispositivo_id>[0-9]+)/vide/(?P<pk>[0-9]+)/delete$',
views.VideDeleteView.as_view(), name='vide_delete'), views.VideDeleteView.as_view(), name='vide_delete'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/search$', url(r'^(?P<ta_id>[0-9]+)/text/search$',
views.DispositivoSearchFragmentFormView.as_view(), views.DispositivoSearchFragmentFormView.as_view(),
name='search_dispositivo'), name='search_dispositivo'),
]
urlpatterns = [ url(r'^(?P<ta_id>[0-9]+)/publicacao$',
url(r'^norma/', include(urlpatterns_compilacao)), views.PublicacaoListView.as_view(), name='ta_pub_list'),
url(r'^(?P<ta_id>[0-9]+)/publicacao/create$',
views.PublicacaoCreateView.as_view(), name='ta_pub_create'),
url(r'^(?P<ta_id>[0-9]+)/publicacao/(?P<pk>[0-9]+)$',
views.PublicacaoDetailView.as_view(), name='ta_pub_detail'),
url(r'^(?P<ta_id>[0-9]+)/publicacao/(?P<pk>[0-9]+)/edit$',
views.PublicacaoUpdateView.as_view(), name='ta_pub_edit'),
url(r'^(?P<ta_id>[0-9]+)/publicacao/(?P<pk>[0-9]+)/delete$',
views.PublicacaoDeleteView.as_view(), name='ta_pub_delete'),
url(r'^sistema/compilacao/tipo-nota/', url(r'^config/tipo-textoarticulado$',
views.TipoTaListView.as_view(), name='tipo_ta_list'),
url(r'^config/tipo-textoarticulado/create$',
views.TipoTaCreateView.as_view(), name='tipo_ta_create'),
url(r'^config/tipo-textoarticulado/(?P<pk>[0-9]+)$',
views.TipoTaDetailView.as_view(), name='tipo_ta_detail'),
url(r'^config/tipo-textoarticulado/(?P<pk>[0-9]+)/edit$',
views.TipoTaUpdateView.as_view(), name='tipo_ta_edit'),
url(r'^config/tipo-textoarticulado/(?P<pk>[0-9]+)/delete$',
views.TipoTaDeleteView.as_view(), name='tipo_ta_delete'),
url(r'^config/tipo-nota/',
include(tipo_nota_crud.urls)), include(tipo_nota_crud.urls)),
url(r'^sistema/compilacao/tipo-vide/', url(r'^config/tipo-vide/',
include(tipo_vide_crud.urls)), include(tipo_vide_crud.urls)),
url(r'^sistema/compilacao/tipo-publicacao/', url(r'^config/tipo-publicacao/',
include(tipo_publicacao_crud.urls)), include(tipo_publicacao_crud.urls)),
url(r'^sistema/compilacao/tipo-dispositivo/', url(r'^config/veiculo-publicacao/',
include(tipo_dispositivo_crud.urls)),
url(r'^sistema/compilacao/veiculo-publicacao/',
include(veiculo_publicacao_crud.urls)), include(veiculo_publicacao_crud.urls)),
url(r'^sistema/compilacao/perfil-estrutural-textos-normativos/',
include(perfil_estr_txt_norm.urls)), ]
urlpatterns = [
url(r'^ta/', include(urlpatterns_compilacao)),
] ]

324
compilacao/utils.py

@ -0,0 +1,324 @@
from braces.views import FormMessagesMixin
from crispy_forms.helper import FormHelper
from crispy_forms_foundation.layout import Column, Fieldset, Row
from crispy_forms_foundation.layout.base import HTML, Div, Layout
from crispy_forms_foundation.layout.buttons import Submit
from django import forms
from django.conf.urls import url
from django.core.urlresolvers import reverse, reverse_lazy
from django.utils.functional import cached_property
from django.utils.translation import ugettext_lazy as _
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, DeleteView, UpdateView
from django.views.generic.list import ListView
NO_ENTRIES_MSG = _('Não existem registros')
def to_column(name_span):
fieldname, span = name_span
return Column(fieldname, css_class='large-%d' % span)
def to_row(names_spans):
return Row(*list(map(to_column, names_spans)))
def to_fieldsets(fields):
for field in fields:
if isinstance(field, list):
legend, *row_specs = field
rows = [to_row(name_span_list) for name_span_list in row_specs]
yield Fieldset(legend, *rows)
else:
yield field
def make_choices(*choice_pairs):
assert len(choice_pairs) % 2 == 0
ipairs = iter(choice_pairs)
choices = list(zip(ipairs, ipairs))
yield choices
for key, value in choices:
yield key
YES_NO_CHOICES = [(True, _('Sim')), (False, _('Não'))]
def int_to_roman(int_value):
# if isinstance(int_value, type(1)):
# raise TypeError("expected integer, got %s" % type(int_value))
if not 0 < int_value < 4000:
raise ValueError("Argument must be between 1 and 3999")
ints = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1)
nums = ('M', 'CM', 'D', 'CD', 'C', 'XC',
'L', 'XL', 'X', 'IX', 'V', 'IV', 'I')
result = ""
for i in range(len(ints)):
count = int(int_value / ints[i])
result += nums[i] * count
int_value -= ints[i] * count
return result
def int_to_letter(int_value):
result = ''
int_value -= 1
while int_value >= 26:
rest = int_value % 26
int_value = int(int_value / 26) - 1
result = chr(rest + 65) + result
result = chr(int_value + 65) + result
return result
def from_to(start, end):
return list(range(start, end + 1))
def make_pagination(index, num_pages):
'''Make a list of adjacent page ranges interspersed with "None"s
The list starts with [1, 2] and end with [num_pages-1, num_pages].
The list includes [index-1, index, index+1]
"None"s separate those ranges and mean ellipsis (...)
Example: [1, 2, None, 10, 11, 12, None, 29, 30]
'''
PAGINATION_LENGTH = 10
if num_pages <= PAGINATION_LENGTH:
return from_to(1, num_pages)
else:
if index - 1 <= 5:
tail = [num_pages - 1, num_pages]
head = from_to(1, PAGINATION_LENGTH - 3)
else:
if index + 1 >= num_pages - 3:
tail = from_to(index - 1, num_pages)
else:
tail = [index - 1, index, index + 1,
None, num_pages - 1, num_pages]
head = from_to(1, PAGINATION_LENGTH - len(tail) - 1)
return head + [None] + tail
def get_field_display(obj, fieldname):
field = obj._meta.get_field(fieldname)
verbose_name = str(field.verbose_name)
if field.choices:
value = getattr(obj, 'get_%s_display' % fieldname)()
else:
value = getattr(obj, fieldname)
if value is None:
display = ''
elif 'date' in str(type(value)):
display = value.strftime("%d/%m/%Y")
elif 'bool' in str(type(value)):
display = 'Sim' if value else 'Não'
else:
display = str(value)
return verbose_name, display
class FormLayout(Layout):
def __init__(self, *fields):
buttons = Div(
HTML('<a href="{{ view.cancel_url }}"'
' class="button radius alert">%s</a>' % _('Cancelar')),
Submit('submit', _('Enviar'),
css_class='button radius success right'),
css_class='radius clearfix'
)
_fields = list(to_fieldsets(fields)) + \
[Row(Column(buttons, css_class='clearfix'))]
super(FormLayout, self).__init__(*_fields)
class Crud(object):
pass
def build_crud(model, help_path, layout):
crud = Crud()
crud.model = model
crud.help_path = help_path
crud.namespace = model._meta.model_name
class CrispyForm(forms.ModelForm):
class Meta:
model = crud.model
exclude = []
def __init__(self, *args, **kwargs):
super(CrispyForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = FormLayout(*layout)
crud.model_form = CrispyForm
def in_namespace(url_name):
return '%s:%s' % (crud.namespace, url_name)
def make_form_invalid_message(msg):
return '%s %s' % (_('Formulário inválido.'), msg)
class BaseMixin(object):
model = crud.model
verbose_name = crud.model._meta.verbose_name
verbose_name_plural = crud.model._meta.verbose_name_plural
list_url = reverse_lazy(in_namespace('list'))
create_url = reverse_lazy(in_namespace('create'))
help_path = crud.help_path # FIXME
def get_url_for_this_object(self, url_name):
return reverse(in_namespace(url_name), args=(self.object.id,))
@property
def detail_url(self):
return self.get_url_for_this_object('detail')
@property
def update_url(self):
return self.get_url_for_this_object('update')
@property
def delete_url(self):
return self.get_url_for_this_object('delete')
def get_template_names(self):
names = super(BaseMixin, self).get_template_names()
names.append("compilacao/%s.html" %
self.template_name_suffix.lstrip('_'))
return names
class CrudListView(BaseMixin, ListView):
title = BaseMixin.verbose_name_plural
paginate_by = 10
no_entries_msg = NO_ENTRIES_MSG
@cached_property
def field_names(self):
'''The list of field names to display on table
This base implementation returns the field names
in the first fieldset of the layout.
'''
rows = layout[0][1:]
return [fieldname for row in rows for fieldname, __ in row]
def get_rows(self, object_list):
return [[(get_field_display(obj, name)[1],
obj.pk if i == 0 else None)
for i, name in enumerate(self.field_names)]
for obj in object_list
]
def get_context_data(self, **kwargs):
context = super(CrudListView, self).get_context_data(**kwargs)
paginator = context['paginator']
page_obj = context['page_obj']
context['page_range'] = make_pagination(
page_obj.number, paginator.num_pages)
object_list = context['object_list']
context['headers'] = [
self.model._meta.get_field(fieldname).verbose_name
for fieldname in self.field_names]
context['rows'] = self.get_rows(object_list)
context['NO_ENTRIES_MSG'] = NO_ENTRIES_MSG
return context
class CrudCreateView(BaseMixin, FormMessagesMixin, CreateView):
form_class = crud.model_form
title = _('Adicionar %(verbose_name)s') % {
'verbose_name': BaseMixin.verbose_name}
form_valid_message = _('Registro criado com sucesso!')
form_invalid_message = make_form_invalid_message(
_('O registro não foi criado.'))
cancel_url = BaseMixin.list_url
def form_invalid(self, form):
"""
If the form is invalid, re-render the context data with the
data-filled form and errors.
"""
print(form.errors)
return self.render_to_response(self.get_context_data(form=form))
def get_success_url(self):
return self.detail_url
class CrudDetailView(BaseMixin, DetailView):
@property
def title(self):
return self.get_object()
def get_column(self, fieldname, span):
obj = self.get_object()
verbose_name, text = get_field_display(obj, fieldname)
return {
'id': fieldname,
'span': span,
'verbose_name': verbose_name,
'text': text,
}
@property
def fieldsets(self):
return [
{'legend': legend,
'rows': [[self.get_column(fieldname, span)
for fieldname, span in row]
for row in rows]
} for legend, *rows in layout]
class CrudUpdateView(BaseMixin, FormMessagesMixin, UpdateView):
form_class = crud.model_form
form_valid_message = _('Registro alterado com sucesso!')
form_invalid_message = make_form_invalid_message(
_('Suas alterações não foram salvas.'))
@property
def title(self):
return self.get_object()
def get_success_url(self):
return self.detail_url
def cancel_url(self):
return self.detail_url
class CrudDeleteView(BaseMixin, FormMessagesMixin, DeleteView):
form_valid_message = _('Registro excluído com sucesso!')
form_invalid_message = make_form_invalid_message(
_('O registro não foi excluído.'))
def get_success_url(self):
return self.list_url
crud.CrudListView = CrudListView
crud.CrudCreateView = CrudCreateView
crud.CrudDetailView = CrudDetailView
crud.CrudUpdateView = CrudUpdateView
crud.CrudDeleteView = CrudDeleteView
# XXX transform into a property of Crud to enable override
crud.urlpatterns = [
url(r'^$', CrudListView.as_view(), name='list'),
url(r'^create$', CrudCreateView.as_view(), name='create'),
url(r'^(?P<pk>\d+)$', CrudDetailView.as_view(), name='detail'),
url(r'^(?P<pk>\d+)/edit$',
CrudUpdateView.as_view(), name='update'),
url(r'^(?P<pk>\d+)/delete$',
CrudDeleteView.as_view(), name='delete'),
]
crud.urls = crud.urlpatterns, crud.namespace, crud.namespace
return crud

744
compilacao/views.py

File diff suppressed because it is too large

54
compilacao/views2.py

@ -0,0 +1,54 @@
from django.utils.translation import ugettext_lazy as _
from compilacao.models import PerfilEstruturalTextoArticulado, TipoDispositivo
from sapl.crud import build_crud
perfil_estr_txt_norm = build_crud(
PerfilEstruturalTextoArticulado, 'perfil_estrutural', [
[_('Perfil Estrutural de Textos Articulados'),
[('sigla', 2), ('nome', 10)]],
])
tipo_dispositivo_crud = build_crud(
TipoDispositivo, 'tipo_dispositivo', [
[_('Dados Básicos'),
[('nome', 8), ('class_css', 4)]],
[_('Configurações para Edição do Rótulo'),
[('rotulo_prefixo_texto', 3),
('rotulo_sufixo_texto', 3),
('rotulo_ordinal', 3),
('contagem_continua', 3)],
],
[_('Configurações para Renderização de Rótulo e Texto'),
[('rotulo_prefixo_html', 6),
('rotulo_sufixo_html', 6), ],
[('texto_prefixo_html', 4),
('dispositivo_de_articulacao', 4),
('texto_sufixo_html', 4)],
],
[_('Configurações para Nota Automática'),
[('nota_automatica_prefixo_html', 6),
('nota_automatica_sufixo_html', 6),
],
],
[_('Configurações para Variações Numéricas'),
[('formato_variacao0', 12)],
[('rotulo_separador_variacao01', 5), ('formato_variacao1', 7), ],
[('rotulo_separador_variacao12', 5), ('formato_variacao2', 7), ],
[('rotulo_separador_variacao23', 5), ('formato_variacao3', 7), ],
[('rotulo_separador_variacao34', 5), ('formato_variacao4', 7), ],
[('rotulo_separador_variacao45', 5), ('formato_variacao5', 7), ],
],
])

36
materia/urls.py

@ -6,18 +6,33 @@ from materia.views import (AutoriaEditView, AutoriaView,
FormularioCadastroView, FormularioSimplificadoView, FormularioCadastroView, FormularioSimplificadoView,
LegislacaoCitadaEditView, LegislacaoCitadaView, LegislacaoCitadaEditView, LegislacaoCitadaView,
MateriaAnexadaEditView, MateriaAnexadaView, MateriaAnexadaEditView, MateriaAnexadaView,
MateriaLegislativaPesquisaView, NumeracaoEditView, MateriaLegislativaPesquisaView, MateriaTaView,
NumeracaoView, PesquisaMateriaListView, NumeracaoEditView, NumeracaoView,
ProposicaoListView, ProposicaoView, PesquisaMateriaListView, ProposicaoListView,
RelatoriaEditView, RelatoriaView, ProposicaoTaView, ProposicaoView, RelatoriaEditView,
TramitacaoEditView, TramitacaoView, autor_crud, RelatoriaView, TramitacaoEditView, TramitacaoView,
materia_legislativa_crud, orgao_crud, origem_crud, autor_crud, materia_legislativa_crud, orgao_crud,
regime_tramitacao_crud, status_tramitacao_crud, origem_crud, regime_tramitacao_crud,
tipo_autor_crud, tipo_documento_crud, status_tramitacao_crud, tipo_autor_crud,
tipo_fim_relatoria_crud, tipo_materia_crud, tipo_documento_crud, tipo_fim_relatoria_crud,
tipo_proposicao_crud, unidade_tramitacao_crud) tipo_materia_crud, tipo_proposicao_crud,
unidade_tramitacao_crud)
materia_legislativa_patterns = materia_legislativa_crud.urlpatterns
urlpatterns = [ urlpatterns = [
url(r'^materia/', include(materia_legislativa_patterns,
materia_legislativa_crud.namespace,
materia_legislativa_crud.namespace)),
url(r'^materia/(?P<pk>[0-9]+)/ta$',
MateriaTaView.as_view(), name='materia_ta'),
url(r'^materia/proposicao/(?P<pk>[0-9]+)/ta$',
ProposicaoTaView.as_view(), name='proposicao_ta'),
url(r'^sistema/proposicoes/tipo/', include(tipo_proposicao_crud.urls)), url(r'^sistema/proposicoes/tipo/', include(tipo_proposicao_crud.urls)),
url(r'^sistema/proposicoes/autor/', include(autor_crud.urls)), url(r'^sistema/proposicoes/autor/', include(autor_crud.urls)),
url(r'^sistema/materia/tipo/', include(tipo_materia_crud.urls)), url(r'^sistema/materia/tipo/', include(tipo_materia_crud.urls)),
@ -35,7 +50,6 @@ urlpatterns = [
url(r'^sistema/materia/status-tramitacao/', url(r'^sistema/materia/status-tramitacao/',
include(status_tramitacao_crud.urls)), include(status_tramitacao_crud.urls)),
url(r'^sistema/materia/orgao/', include(orgao_crud.urls)), url(r'^sistema/materia/orgao/', include(orgao_crud.urls)),
url(r'^materia/', include(materia_legislativa_crud.urls)),
url(r'^materia/formulario-simplificado', url(r'^materia/formulario-simplificado',
FormularioSimplificadoView.as_view(), FormularioSimplificadoView.as_view(),
name='formulario_simplificado'), name='formulario_simplificado'),

11
materia/views.py

@ -13,10 +13,11 @@ from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic import ListView from django.views.generic import ListView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla import GenericView from vanilla.views import GenericView
import sapl import sapl
from comissoes.models import Comissao, Composicao from comissoes.models import Comissao, Composicao
from compilacao.views import IntegracaoTaView
from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica
from parlamentares.models import Parlamentar from parlamentares.models import Parlamentar
from sapl.crud import build_crud from sapl.crud import build_crud
@ -2018,3 +2019,11 @@ class PesquisaMateriaListView(FormMixin, ListView):
context['page_range'] = sapl.crud.make_pagination( context['page_range'] = sapl.crud.make_pagination(
page_obj.number, paginator.num_pages) page_obj.number, paginator.num_pages)
return context return context
class MateriaTaView(IntegracaoTaView):
model = MateriaLegislativa
class ProposicaoTaView(IntegracaoTaView):
model = Proposicao

19
norma/migrations/0009_auto_20160106_1511.py

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('norma', '0008_normajuridica_texto_integral'),
]
operations = [
migrations.AlterField(
model_name='normajuridica',
name='tipo',
field=models.ForeignKey(verbose_name='Tipo da Norma Juridica', to='norma.TipoNormaJuridica'),
),
]

3
norma/models.py

@ -72,7 +72,8 @@ class NormaJuridica(models.Model):
null=True, null=True,
upload_to=texto_upload_path, upload_to=texto_upload_path,
verbose_name=_('Texto Integral')) verbose_name=_('Texto Integral'))
tipo = models.ForeignKey(TipoNormaJuridica, verbose_name=_('Tipo')) tipo = models.ForeignKey(
TipoNormaJuridica, verbose_name=_('Tipo da Norma Juridica'))
materia = models.ForeignKey(MateriaLegislativa, blank=True, null=True) materia = models.ForeignKey(MateriaLegislativa, blank=True, null=True)
numero = models.PositiveIntegerField(verbose_name=_('Número')) numero = models.PositiveIntegerField(verbose_name=_('Número'))
ano = models.PositiveSmallIntegerField(verbose_name=_('Ano')) ano = models.PositiveSmallIntegerField(verbose_name=_('Ano'))

6
norma/urls.py

@ -1,9 +1,9 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from norma.views import (NormaIncluirView, assunto_norma_crud, from norma.views import (NormaIncluirView, NormaTaView, assunto_norma_crud,
norma_temporario_crud, tipo_norma_crud) norma_temporario_crud, tipo_norma_crud)
norma_url_patterns = norma_temporario_crud.urlpatterns + [] norma_url_patterns = norma_temporario_crud.urlpatterns
# norma_url_patterns = norma_crud.urlpatterns + [] # norma_url_patterns = norma_crud.urlpatterns + []
urlpatterns = [ urlpatterns = [
@ -11,6 +11,8 @@ urlpatterns = [
norma_temporario_crud.namespace, norma_temporario_crud.namespace,
norma_temporario_crud.namespace)), norma_temporario_crud.namespace)),
url(r'^norma/(?P<pk>[0-9]+)/ta$',
NormaTaView.as_view(), name='norma_ta'),
url(r'^sistema/norma/tipo/', include(tipo_norma_crud.urls)), url(r'^sistema/norma/tipo/', include(tipo_norma_crud.urls)),
url(r'^sistema/norma/assunto/', include(assunto_norma_crud.urls)), url(r'^sistema/norma/assunto/', include(assunto_norma_crud.urls)),

7
norma/views.py

@ -10,9 +10,10 @@ from django.utils.html import strip_tags
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla import GenericView from vanilla.views import GenericView
import sapl import sapl
from compilacao.views import IntegracaoTaView
from materia.models import MateriaLegislativa, TipoMateriaLegislativa from materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.crud import build_crud from sapl.crud import build_crud
@ -218,3 +219,7 @@ class NormaIncluirView(FormMixin, GenericView):
return self.form_valid(form) return self.form_valid(form)
else: else:
return self.form_invalid(form) return self.form_invalid(form)
class NormaTaView(IntegracaoTaView):
model = NormaJuridica

1
requirements/requirements.txt

@ -9,7 +9,6 @@ django-crispy-forms
django-extra-views django-extra-views
django-vanilla-views django-vanilla-views
git+git://github.com/interlegis/django-sass-processor.git git+git://github.com/interlegis/django-sass-processor.git
git+git://github.com/LeandroRoberto/odfpy.git
libsass libsass
psycopg2 psycopg2
pytz pytz

8
sapl/crud.py

@ -169,6 +169,14 @@ def build_crud(model, help_path, layout):
_('O registro não foi criado.')) _('O registro não foi criado.'))
cancel_url = BaseMixin.list_url cancel_url = BaseMixin.list_url
def form_invalid(self, form):
"""
If the form is invalid, re-render the context data with the
data-filled form and errors.
"""
print(form.errors)
return self.render_to_response(self.get_context_data(form=form))
def get_success_url(self): def get_success_url(self):
return self.detail_url return self.detail_url

7
sapl/settings.py

@ -59,8 +59,8 @@ INSTALLED_APPS = (
'crispy_forms_foundation', 'crispy_forms_foundation',
'sass_processor', 'sass_processor',
) )
if DEBUG: # if DEBUG:
INSTALLED_APPS += ('debug_toolbar',) # INSTALLED_APPS += ('debug_toolbar',)
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
@ -117,7 +117,7 @@ DATABASES = {
# https://docs.djangoproject.com/en/1.8/topics/i18n/ # https://docs.djangoproject.com/en/1.8/topics/i18n/
LANGUAGE_CODE = 'pt-br' LANGUAGE_CODE = 'pt-br'
TIME_ZONE = 'America/Sao_Paulo' TIME_ZONE = 'America/Sao_Paulo'
USE_I18N = False USE_I18N = True
USE_L10N = False USE_L10N = False
USE_TZ = True USE_TZ = True
# DATE_FORMAT = 'N j, Y' # DATE_FORMAT = 'N j, Y'
@ -160,6 +160,7 @@ BOWER_INSTALLED_APPS = (
'jquery-ui', 'jquery-ui',
'jquery-runner', 'jquery-runner',
'jQuery-Mask-Plugin', 'jQuery-Mask-Plugin',
'jsdiff',
) )
# Additional search paths for SASS files when using the @import statement # Additional search paths for SASS files when using the @import statement

27
sapl/utils.py

@ -37,30 +37,3 @@ def make_choices(*choice_pairs):
yield key yield key
YES_NO_CHOICES = [(True, _('Sim')), (False, _('Não'))] YES_NO_CHOICES = [(True, _('Sim')), (False, _('Não'))]
def int_to_roman(int_value):
# if isinstance(int_value, type(1)):
# raise TypeError("expected integer, got %s" % type(int_value))
if not 0 < int_value < 4000:
raise ValueError("Argument must be between 1 and 3999")
ints = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1)
nums = ('M', 'CM', 'D', 'CD', 'C', 'XC',
'L', 'XL', 'X', 'IX', 'V', 'IV', 'I')
result = ""
for i in range(len(ints)):
count = int(int_value / ints[i])
result += nums[i] * count
int_value -= ints[i] * count
return result
def int_to_letter(int_value):
result = ''
int_value -= 1
while int_value >= 26:
rest = int_value % 26
int_value = int(int_value / 26) - 1
result = chr(rest + 65) + result
result = chr(int_value + 65) + result
return result

BIN
static/img/ajax-loader.gif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

33
static/js/app.js

@ -0,0 +1,33 @@
tinymce.init({selector:'textarea'});
$(document).foundation();
$(document).ready(function(){
$('.dateinput').fdatepicker({
// TODO localize
format: 'dd/mm/yyyy',
language: 'pt',
endDate: '31/12/2100',
todayBtn: true
});
$('.telefone').mask("(99) 9999-9999", {placeholder:"(__) ____ -____"});
$('.cpf').mask("000.000.000-00", {placeholder:"___.___.___-__"});
$('.cep').mask("00000-000", {placeholder:"_____-___"});
$('.rg').mask("0.000.000", {placeholder:"_.___.___"});
$('.titulo_eleitor').mask("0000.0000.0000.0000", {placeholder:"____.____.____.____"});
$('.hora').mask("00:00", {placeholder:"hh:mm"});
$('.hora_hms').mask("00:00:00", {placeholder:"hh:mm:ss"});
var href = location.href.split('?')
$('.masthead .sub-nav a').each(function() {
if (href.length >= 1) {
if (href[0].endsWith($(this).attr('href')))
$(this).parent().addClass('active')
}
});
});

3
static/js/compilacao.js

@ -35,5 +35,6 @@ function ReadCookie(cookieName) {
} }
function insertWaitAjax(element) { function insertWaitAjax(element) {
jQuery(element).append('<div style="text-align:center;"><img src="/static/img/ajax-loader.gif"></div>'); //jQuery(element).append('<div style="text-align:center;"><img src="/static/img/ajax-loader.gif"></div>');
jQuery(element).append('<div style="text-align:center;"><i style="font-size: 200%;"class="fa fa-refresh fa-spin"></i></div>');
} }

7
static/js/compilacao_edit.js

@ -131,6 +131,7 @@ var clickUpdateDispositivo = function(event, __pk_refresh, __pk_edit, __action,
if (flag_actions_vibible == null || flag_actions_vibible) if (flag_actions_vibible == null || flag_actions_vibible)
clearEditSelected(); clearEditSelected();
//$( '#dpt' + pk_refresh+' > .bloco' ).addClass('displaynone' );
$( '#dpt' + pk_refresh ).prepend( data ); $( '#dpt' + pk_refresh ).prepend( data );
} }
@ -166,8 +167,8 @@ var clickUpdateDispositivo = function(event, __pk_refresh, __pk_edit, __action,
if (flag_actions_vibible == null || flag_actions_vibible) { if (flag_actions_vibible == null || flag_actions_vibible) {
$('#dpt'+pk_edit).addClass('dpt-selected'); $('#dpt'+pk_edit).addClass('dpt-selected');
$('html, body').animate({ $('html, body').animate({
scrollTop: $('#dpt' + pk_edit ).offset().top - window.innerHeight / 10 scrollTop: $('#dpt' + pk_edit ).offset().top - window.innerHeight / 9
}, 300); }, 0);
} }
} }
@ -217,6 +218,8 @@ function refreshScreenFocusPk(data) {
} }
function clearEditSelected() { function clearEditSelected() {
$('.bloco' ).removeClass('displaynone' );
$(".container").removeClass('class_color_container'); $(".container").removeClass('class_color_container');
tinymce.remove(); tinymce.remove();
$('.dpt-selected').removeClass('dpt-selected'); $('.dpt-selected').removeClass('dpt-selected');

26
static/js/compilacao_notas.js

@ -21,7 +21,7 @@ function onEventsDneExec(pk) {
$('#dne'+pk+" select[name='tipo']").change(function(event) { $('#dne'+pk+" select[name='tipo']").change(function(event) {
var url = ''; var url = '';
url = 'compilacao/'+pk+'/nota/create?action=modelo_nota&id_tipo='+this.value; url = 'text/'+pk+'/nota/create?action=modelo_nota&id_tipo='+this.value;
$.get(url).done(function( data ) { $.get(url).done(function( data ) {
$('#dne'+pk+" textarea[name='texto']").val(data); $('#dne'+pk+" textarea[name='texto']").val(data);
}); });
@ -40,9 +40,9 @@ function onEventsDneExec(pk) {
onChangeParamNorma(); onChangeParamNorma();
} }
var onChangeParamNorma = function(event) { var onChangeParamNorma = function(event) {
var tipo_norma = $("select[name='tipo_norma']").val(); var tipo_ta = $("select[name='tipo_ta']").val();
var num_norma = $("input[name='num_norma']").val(); var num_ta = $("input[name='num_ta']").val();
var ano_norma = $("input[name='ano_norma']").val(); var ano_ta = $("input[name='ano_ta']").val();
var busca_dispositivo = $("input[name='busca_dispositivo']").val(); var busca_dispositivo = $("input[name='busca_dispositivo']").val();
var dispositivo_ref = $("#id_dispositivo_ref").val(); var dispositivo_ref = $("#id_dispositivo_ref").val();
$('#id_dispositivo_ref').remove(); $('#id_dispositivo_ref').remove();
@ -51,18 +51,18 @@ var onChangeParamNorma = function(event) {
dispositivo_ref = '' dispositivo_ref = ''
var url = ''; var url = '';
var pk = $("select[name='tipo_norma']").closest('.dne').attr('pk') var pk = $("select[name='tipo_ta']").closest('.dne').attr('pk')
var formData = { var formData = {
'tipo_norma' : tipo_norma, 'tipo_ta' : tipo_ta,
'num_norma' : num_norma, 'num_ta' : num_ta,
'ano_norma' : ano_norma, 'ano_ta' : ano_ta,
'busca' : busca_dispositivo, 'busca' : busca_dispositivo,
'tipo_form' : 'radio', 'tipo_form' : 'radio',
'initial_ref' : dispositivo_ref 'initial_ref' : dispositivo_ref
}; };
url = 'compilacao/search'; url = 'text/search';
$('.container-busca').html(''); $('.container-busca').html('');
insertWaitAjax('.container-busca') insertWaitAjax('.container-busca')
$.get(url, formData).done(function( data ) { $.get(url, formData).done(function( data ) {
@ -85,7 +85,7 @@ var onSubmitEditForm = function(event) {
} }
id_edit = $('#id_pk').val(); id_edit = $('#id_pk').val();
url = 'compilacao/'+id_dispositivo+'/'+model+'/' url = 'text/'+id_dispositivo+'/'+model+'/'
if (id_edit == null || id_edit == '') if (id_edit == null || id_edit == '')
url += 'create'; url += 'create';
else else
@ -119,7 +119,7 @@ var onDelete = function(event) {
var id_dispositivo = $(event).closest('.dn').attr('pk'); var id_dispositivo = $(event).closest('.dn').attr('pk');
var id_delete = $(event).attr('pk'); var id_delete = $(event).attr('pk');
var url = 'compilacao/'+id_dispositivo+'/'+model+'/'+id_delete+'/delete'; var url = 'text/'+id_dispositivo+'/'+model+'/'+id_delete+'/delete';
$.get( url, function(data) { $.get( url, function(data) {
$('#dne'+id_dispositivo+' .dne-form').closest('.dpt').html(data) $('#dne'+id_dispositivo+' .dne-form').closest('.dpt').html(data)
@ -140,12 +140,12 @@ function getForm(_this) {
if (_this.className.indexOf('create') >= 0 ) { if (_this.className.indexOf('create') >= 0 ) {
id_dispositivo = $(_this).attr('pk'); id_dispositivo = $(_this).attr('pk');
url = 'compilacao/'+id_dispositivo+'/'+model+'/create'; url = 'text/'+id_dispositivo+'/'+model+'/create';
} }
else if (_this.className.indexOf('edit') >= 0 ) { else if (_this.className.indexOf('edit') >= 0 ) {
var id_edit = $(_this).attr('pk'); var id_edit = $(_this).attr('pk');
id_dispositivo = $(_this).closest('.dn').attr('pk'); id_dispositivo = $(_this).closest('.dn').attr('pk');
url = 'compilacao/'+id_dispositivo+'/'+model+'/'+id_edit+'/edit' url = 'text/'+id_dispositivo+'/'+model+'/'+id_edit+'/edit'
} }
$('#dne'+id_dispositivo).addClass('dne-nota'); $('#dne'+id_dispositivo).addClass('dne-nota');

143
static/js/compilacao_view.js

@ -1,40 +1,159 @@
$( window ).scroll(function() { $( window ).scroll(function() {
if (window.pageYOffset <= 180) if (window.pageYOffset <= 180)
$( "section.vigencias" ).removeClass("fixed"); $( "section.vigencias" ).removeClass("fixed");
else if (!$( "section.vigencias" ).hasClass("fixed")) else if ( ! $( "section.vigencias" ).hasClass("fixed") )
$( "section.vigencias" ).addClass("fixed"); $( "section.vigencias" ).addClass("fixed");
}); });
$(window).load(function() {
setTimeout(function() {
height = $( "section.vigencias" ).height();
$('html, body').animate({
scrollTop: window.pageYOffset - height - 55
}, 300);
}, 100);
});
function textoMultiVigente(item) { function isElementInViewport (el) {
//special bonus for those using jQuery
if (typeof jQuery === "function" && el instanceof jQuery) {
el = el[0];
}
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
);
}
function textoMultiVigente(item, diff) {
var elv = null;
var ldpts = $(".dptt")
for (var i = 0; i < ldpts.length; i++) {
if ($(ldpts[i]).hasClass('displaynone'))
continue;
if (isElementInViewport( ldpts[i])) {
elv = ldpts[i];
break;
}
}
$(".cp .tipo-vigencias a").removeClass("selected") $(".cp .tipo-vigencias a").removeClass("selected")
$(item).addClass("selected") $(item).addClass("selected")
$(".desativado").removeClass("displaynone"); $(".dptt.desativado").removeClass("displaynone");
$(".dtxt").removeClass("displaynone");
$(".dtxt.diff").remove();
$(".link_alterador").removeClass("displaynone"); $(".link_alterador").removeClass("displaynone");
if (diff) {
$(".dtxt[id^='da'").each(function() {
if ( $(this).html().search( /<\/\w+>/g ) > 0)
return;
var pk = $(this).attr('pk')
var pks = $(this).attr('pks')
var a = $('#d'+pks).contents().filter(function () {
return this.nodeType === Node.TEXT_NODE;
});
var b = $('#da'+pk).contents().filter(function () {
return this.nodeType === Node.TEXT_NODE;
});
var diff = JsDiff.diffWordsWithSpace($(a).text(), $(b).text());
if (diff.length > 0) {
$('#d'+pks).closest('.desativado').addClass("displaynone");
var clone = $('#da'+pk).clone();
$('#da'+pk).after( clone );
$('#da'+pk).addClass('displaynone');
$(clone).addClass('diff').html('');
diff.forEach(function(part){
var color = part.added ? '#018' :
part.removed ? '#faa' : '';
var span = document.createElement('span');
var value = part.value;
if (part.removed) {
$(span).addClass('desativado')
value += ' ';
}
else if (part.added) {
$(span).addClass('added')
}
span.appendChild(document.createTextNode(value));
$(clone).append(span);
});
}
});
//textoVigente(item, true);
}
if (elv) {
$('html, body').animate({
scrollTop: $(elv).parent().offset().top - 60
}, 0);
}
} }
function textoVigente(item, link) { function textoVigente(item, link) {
var elv = null;
var ldpts = $(".dptt")
for (var i = 0; i < ldpts.length; i++) {
if ($(ldpts[i]).hasClass('displaynone'))
continue;
if (isElementInViewport( ldpts[i])) {
elv = ldpts[i];
break;
}
}
$(".cp .tipo-vigencias a").removeClass("selected") $(".cp .tipo-vigencias a").removeClass("selected")
$(item).addClass("selected") $(item).addClass("selected")
$(".desativado").addClass("displaynone");
$(".dptt.desativado").addClass("displaynone");
$(".link_alterador").removeClass("displaynone"); $(".link_alterador").removeClass("displaynone");
if (!link) if (!link)
$(".link_alterador").addClass("displaynone"); $(".link_alterador").addClass("displaynone");
if (elv) {
$('html, body').animate({
scrollTop: $(elv).parent().offset().top - 60
}, 0);
}
} }
$(document).ready(function() { $(document).ready(function() {
setTimeout(function() {
var href = location.href.split('#')
if (href.length == 2) {
$('html, body').animate({
scrollTop: $('#dptt' + href[1] ).offset().top - window.innerHeight / 9
}, 0);
}
}, 100);
$("#btn_font_menos").click(function() { $("#btn_font_menos").click(function() {
$(".dpt").css("font-size", "-=1"); $(".dpt").css("font-size", "-=1");
}); });
$("#btn_font_mais").click(function() { $("#btn_font_mais").click(function() {
$(".dpt").css("font-size", "+=1"); $(".dpt").css("font-size", "+=1");
}); });
$(".dpt").each(function() {
var nivel = parseInt($(this).attr('nivel'));
$(this).css('z-index', 20-nivel)
});
}); });

70
static/styles/app.scss

@ -107,6 +107,8 @@ $top-bar-dropdown-radius: $global-radius;
} }
} }
// Our app // Our app
// - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - -
@ -196,15 +198,19 @@ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 1px 4px rgba(0, 0, 0, 0.23);
max-width: 960px; max-width: 960px;
} }
.icon-bar { .icon-bar {
vertical-align: top; vertical-align: top;
} }
.masthead .container {
padding: 10px 0;
background-color: #e3e3e3;
}
.masthead > .container { .masthead > .container {
padding-top: 20px; padding: 0px;
border-bottom: 20px solid $primary-color; max-width: none;
background-color: #ffffff; border-bottom: 1px solid $primary-color;
} }
.masthead__logo { .masthead__logo {
@ -218,19 +224,19 @@ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 1px 4px rgba(0, 0, 0, 0.23);
.masthead__logo img { .masthead__logo img {
width: auto; width: auto;
height: 95px; height: 85px;
} }
.masthead__heading { .masthead__heading {
display: inline-block; display: inline-block;
margin-left: 15px; margin-left: 10px;
vertical-align: middle; vertical-align: top;
} }
.masthead__heading h1 { .masthead__heading h1 {
color: #333333; color: #333333;
text-shadow: 1px 1px 3px #dadada; text-shadow: 1px 1px 3px #dadada;
font-size: 150%; font-size: 130%;
} }
.masthead__heading h2 { .masthead__heading h2 {
@ -238,7 +244,49 @@ box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 1px 4px rgba(0, 0, 0, 0.23);
color: #444444; color: #444444;
text-shadow: 1px 1px 3px #dadada; text-shadow: 1px 1px 3px #dadada;
font-weight: normal; font-weight: normal;
font-size: 100%; font-size: 90%;
}
.masthead .sub-nav {
display: block;
overflow: hidden;
padding-top: 0.25rem;
width: auto;
position: absolute;
bottom: -1px;
margin: 0;
right: 0;
dd {
margin: 0;
border: 1px solid transparent;
border-bottom: 1px solid $primary-color;
border-top: 2px solid transparent;
border-radius: 5px 5px 0px 0px;
a {
color: #18577A;
background-color: transparent;
display: inline-block;
padding: 2px 6px 0;
position: relative;
font-size: 90%;
&:hover {
color: #444;
background-color: transparent;
}
}
&:hover, &.active {
background: #fff;
border: 1px solid $primary-color;
border-bottom: 1px solid #fff;
border-top: 2px solid $primary-color;
}
}
} }
.content { .content {
@ -254,10 +302,6 @@ font-size: 100%;
height: 100%; height: 100%;
background-color: #ffffff; background-color: #ffffff;
} }
.content a:hover {
color: #444444;
}
/* Layout */ /* Layout */
.footer { .footer {

96
static/styles/compilacao.scss

@ -1,7 +1,8 @@
$color_actions: #16407c; $color_actions: #16407c;
$color_actions_border: #CCC; $color_actions_border: #CCC;
$color_buttons: #2980B9;
@mixin background-top-down($top, $bottom) { @mixin background-top-down($top, $bottom) {
background: $top;
background-image: -webkit-linear-gradient(top, $top, $bottom); background-image: -webkit-linear-gradient(top, $top, $bottom);
background-image: -moz-linear-gradient(top, $top, $bottom); background-image: -moz-linear-gradient(top, $top, $bottom);
background-image: -ms-linear-gradient(top, $top, $bottom); background-image: -ms-linear-gradient(top, $top, $bottom);
@ -78,7 +79,7 @@ a:link:after, a:visited:after {
width: 0px; width: 0px;
border-color: transparent transparent #3385CA; border-color: transparent transparent #3385CA;
position: absolute; position: absolute;
top: -0.75rem; top: -0.71rem;
left: 0.9375rem; left: 0.9375rem;
} }
&:hover::before { &:hover::before {
@ -150,6 +151,15 @@ a:link:after, a:visited:after {
border: 1px dotted #ccc; border: 1px dotted #ccc;
} }
} }
.diff {
.desativado, .desativado * {
text-decoration: line-through;
color: #dbb !important;
}
.added {
color: #018;
}
}
.dpt { .dpt {
font-size:1em; font-size:1em;
@ -211,7 +221,6 @@ a:link:after, a:visited:after {
font-size: 1.15em; font-size: 1.15em;
float:left; float:left;
.dptt { .dptt {
z-index: 89;
position: relative; position: relative;
} }
} }
@ -250,6 +259,9 @@ a:link:after, a:visited:after {
&.link_alterador { &.link_alterador {
color: #2980B9; color: #2980B9;
font-size: 0.75em; font-size: 0.75em;
&:hover {
text-decoration: underline;
}
} }
&.desativado { &.desativado {
@extend .desativado; @extend .desativado;
@ -371,16 +383,22 @@ a:link:after, a:visited:after {
.dptt { .dptt {
.dne { .dne {
text-decoration: none; text-decoration: none;
position: relative; position: absolute;
display: block; display: block;
font-size: 0.8rem; font-size: 0.8rem;
font-weight: normal; font-weight: normal;
line-height: 1rem; line-height: 1rem;
text-align: left; text-align: left;
height: 0; height: 0;
transform: scaleY(0); transform: scaleX(0);
transform-origin: top; transform-origin: right;
transition: all 0.3s ease; transition: all 0.3s ease;
top: 0;
left: -1.6em;
right: -1.6em;
background-color: #2980b9;
z-index: 18;
* { * {
font-size: 0.8rem; font-size: 0.8rem;
font-weight: normal; font-weight: normal;
@ -396,27 +414,22 @@ a:link:after, a:visited:after {
clip: rect(0,0,0,0); clip: rect(0,0,0,0);
opacity: 0; opacity: 0;
transition: opacity 1.5s linear, clip 1s linear; transition: opacity 1.5s linear, clip 1s linear;
transition-delay: 0s;
border-collapse:separate; border-collapse:separate;
border-spacing:0.5em; border-spacing: 0;
top: 0px;
right: 0px;
z-index: 19;
li { li {
display: table-cell; display: table-cell;
background-color: $color_buttons;
a { a {
background-color: #DDD; font-size: 155%;
border-radius: 50%; padding: 0.4em 0.8em;
width: 3rem;
height: 3rem;
display: inline-block; display: inline-block;
font-size: 203%; float: right;
line-height: 3rem; color: #fff !important;
text-align: center;
&.btn-nota-create {
background: #ddd url(/static/img/hand-note.png) no-repeat 50% 50%;
}
&.btn-vide-create {
}
&:hover { &:hover {
background-color: #Cdc ; background-color: rgba(0, 0, 0, 0.15);
} }
} }
} }
@ -425,12 +438,15 @@ a:link:after, a:visited:after {
.dne-nota { .dne-nota {
box-shadow: -4px 15px 15px rgba(0, 0, 0, 0.1), 0px 6px 6px rgba(0, 0, 0, 0.23); box-shadow: -4px 15px 15px rgba(0, 0, 0, 0.1), 0px 6px 6px rgba(0, 0, 0, 0.23);
@include background-top-down(#f5f5f5, #eee); @include background-top-down(#f5f5f5, #eee);
position: relative;
transform: scaleY(1); transform: scaleX(1);
height: auto; height: auto;
transition-delay: 0s; left: 0;
right: 0;
margin: 1em 0 2em 0; margin: 1em 0 2em 0;
padding: 0em; padding: 0em;
border: 0px;
z-index: 19;
ul.btns-action { ul.btns-action {
display: none; display: none;
} }
@ -447,7 +463,7 @@ a:link:after, a:visited:after {
} }
.title_form { .title_form {
font-size: 2.5em; font-size: 2.5em;
padding: 0.5em 0.3em 0.2em; padding: 0.5em 0.3em 0.3em;
background: #e5e5e5; background: #e5e5e5;
color: #777; color: #777;
margin-bottom: 0.4em; margin-bottom: 0.4em;
@ -461,6 +477,9 @@ a:link:after, a:visited:after {
border: 0px; border: 0px;
outline:0px; outline:0px;
} }
.alert-box {
margin-bottom: 0;
}
.row:first-of-type { .row:first-of-type {
margin-top: 1em; margin-top: 1em;
display: inline-block; display: inline-block;
@ -561,7 +580,7 @@ a:link:after, a:visited:after {
} }
} }
} }
.norma_title { .ta_title {
padding: 0.15em 0.7em; padding: 0.15em 0.7em;
background-color: rgba(0, 0, 0, 0.15); background-color: rgba(0, 0, 0, 0.15);
margin: 0.1em 0.08em 0 0.1em; margin: 0.1em 0.08em 0 0.1em;
@ -575,15 +594,14 @@ a:link:after, a:visited:after {
} }
&:hover { &:hover {
.dne { .dne {
height: 4.3em; height: 0.1667rem;
transform: scaleY(1); transform: scaleX(1);
transition-delay: 1s; transition-delay: 1s;
ul.btns-action { ul.btns-action {
clip: rect(-100px, 2000px, 2000px, -100px); clip: rect(-100px, 2000px, 2000px, -100px);
opacity: 1; opacity: 1;
transition: opacity 0.5s linear, clip 0s 0.3s; transition: opacity 0.5s linear, clip 0s 0.3s;
transition-delay: 0.5s;
li { li {
a { a {
} }
@ -591,9 +609,8 @@ a:link:after, a:visited:after {
} }
} }
.dne-nota { .dne-nota {
transition-delay: 0s;
height: auto; height: auto;
transition-delay: 0s;
} }
} }
@ -632,6 +649,10 @@ a:link:after, a:visited:after {
.tipo-vigencias { .tipo-vigencias {
border-top: 1px solid #62B5B5; border-top: 1px solid #62B5B5;
position: fixed;
bottom: 0;
transform: translate(-50%,0);
left: 50%;
} }
.vigencias { .vigencias {
@ -781,6 +802,7 @@ a:link:after, a:visited:after {
padding: 2.2em 2.2em 1.6em 2.2em; padding: 2.2em 2.2em 1.6em 2.2em;
box-shadow: -4px 15px 15px rgba(0, 0, 0, 0.1), 0px 6px 6px rgba(0, 0, 0, 0.23); box-shadow: -4px 15px 15px rgba(0, 0, 0, 0.1), 0px 6px 6px rgba(0, 0, 0, 0.23);
@include background-top-down(#eaeaee, #ddd); @include background-top-down(#eaeaee, #ddd);
@ -872,7 +894,7 @@ a:link:after, a:visited:after {
padding: 0.3em; padding: 0.3em;
font-size: 80%; font-size: 80%;
text-align: right; text-align: right;
z-index: 5; z-index: 15;
display: table; display: table;
li { li {
display: table-cell; display: table-cell;
@ -880,7 +902,7 @@ a:link:after, a:visited:after {
} }
.actions_parents { .actions_parents {
z-index: 1; z-index: 11;
top: 0em; top: 0em;
left: 0em; left: 0em;
a { a {
@ -966,7 +988,7 @@ a:link:after, a:visited:after {
.actions_inserts { .actions_inserts {
background: transparent; background: transparent;
position: relative; position: relative;
z-index: 9; z-index: 19;
display: table; display: table;
width: 100%; width: 100%;
@ -1000,7 +1022,7 @@ a:link:after, a:visited:after {
} }
&::before { &::before {
z-index: 10; z-index: 20;
position: absolute; position: absolute;
background: url(/static/img/icon_delete_white.png) no-repeat 50% 50%; background: url(/static/img/icon_delete_white.png) no-repeat 50% 50%;
content:""; content:"";
@ -1173,6 +1195,7 @@ a:link:after, a:visited:after {
cursor: pointer; cursor: pointer;
opacity: 0.7; opacity: 0.7;
transform: rotate(45deg); transform: rotate(45deg);
z-index: 98;
.icon-close{ .icon-close{
background: #FFF; background: #FFF;
@ -1303,7 +1326,8 @@ a:link:after, a:visited:after {
} }
@media print { @media print {
.cp .vigencias { .cp .vigencias, .toggle-topbar, .menu-icon, .button {
display:none; display:none;
} }
} }

40
templates/base.html

@ -88,12 +88,12 @@
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Relatórios</a></li> --> <li class="nav__sub-item"><a class="nav__sub-link" href="#">Relatórios</a></li> -->
</ul> </ul>
</li> </li>
<!-- <li class="nav__item has-dropdown"><a class="nav__link">Normas Jurídicas</a> <li class="nav__item has-dropdown"><a class="nav__link">{% trans 'Legislação'%}</a>
<ul class="nav__sub-nav dropdown"> <ul class="nav__sub-nav dropdown">
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Pesquisar</a></li> <li class="nav__sub-item"><a class="nav__sub-link" href="{% url 'normajuridica:list'%}">{% trans 'Normas Jurídicas'%}</a></li>
<li class="nav__sub-item"><a class="nav__sub-link" href="#">Índice de Assuntos</a></li> <li class="nav__sub-item"><a class="nav__sub-link" href="#">Índice de Assuntos</a></li>
</ul> </ul>
</li> --> </li>
<li class="nav__item has-dropdown"><a class="nav__link">Sistema</a> <li class="nav__item has-dropdown"><a class="nav__link">Sistema</a>
<ul class="nav__sub-nav dropdown"> <ul class="nav__sub-nav dropdown">
<li class="nav__sub-item"><a class="nav__sub-link" href="/sistema">Tabelas Auxiliares</a></li> <li class="nav__sub-item"><a class="nav__sub-link" href="/sistema">Tabelas Auxiliares</a></li>
@ -116,6 +116,7 @@
{# Header #} {# Header #}
{% block main_header %} {% block main_header %}
<header id="masthead" class="masthead page__row"> <header id="masthead" class="masthead page__row">
<div class="container">
<div class="container"> <div class="container">
<a class="masthead__logo" href="#"> <a class="masthead__logo" href="#">
{% if logotipo %} {% if logotipo %}
@ -129,6 +130,13 @@
<h1>{{ parliament_type }} {% trans 'de' %} {{ city }} - {{ state }}</h1> <h1>{{ parliament_type }} {% trans 'de' %} {{ city }} - {{ state }}</h1>
<h2>{% trans 'Sistema de Apoio ao Processo Legislativo' %}</h2> <h2>{% trans 'Sistema de Apoio ao Processo Legislativo' %}</h2>
</div> </div>
{% block sections_nav %}
{% endblock sections_nav %}
</div>
</div> </div>
</header> </header>
{% endblock main_header %} {% endblock main_header %}
@ -158,7 +166,7 @@
{% block title %} {% block title %}
{% if view.title %} {% if view.title %}
<h1>{{ view.title }}</h1> <h1>{{ view.title|linebreaksbr }}</h1>
{% endif %} {% endif %}
{% endblock %} {% endblock %}
@ -211,31 +219,11 @@
<script type="text/javascript" src="{% static 'foundation/js/vendor/fastclick.js' %}"></script> <script type="text/javascript" src="{% static 'foundation/js/vendor/fastclick.js' %}"></script>
<script src="{% static 'tinymce/tinymce.min.js' %}"></script> <script src="{% static 'tinymce/tinymce.min.js' %}"></script>
<script>tinymce.init({selector:'textarea'});</script>
<script>$(document).foundation();</script> <script type="text/javascript" src="{% static 'js/app.js' %}"></script>
<script type="text/javascript">
$(function () {
$('.dateinput').fdatepicker({
// TODO localize
format: 'dd/mm/yyyy',
language: 'pt',
endDate: '31/12/2100',
todayBtn: true
});
});
</script>
<script> <script>
$(document).ready(function(){
$('.telefone').mask("(99) 9999-9999", {placeholder:"(__) ____ -____"});
$('.cpf').mask("000.000.000-00", {placeholder:"___.___.___-__"});
$('.cep').mask("00000-000", {placeholder:"_____-___"});
$('.rg').mask("0.000.000", {placeholder:"_.___.___"});
$('.titulo_eleitor').mask("0000.0000.0000.0000", {placeholder:"____.____.____.____"});
$('.hora').mask("00:00", {placeholder:"hh:mm"});
});
</script> </script>
{% block extra_js %} {% block extra_js %}

20
templates/compilacao/confirm_delete.html

@ -0,0 +1,20 @@
{% extends "base.html" %}
{% load i18n %}
{% block base_content %}
<form action="" method="post">{% csrf_token %}
<div class="callout panel text-center radius clearfix">
<p>
{% blocktrans %}
Confirma exclusão de <br/> "{{ object }}"?
{% endblocktrans %}
</p>
<div class="button-group">
<a href="{{ view.detail_url }}" class="button button radius alert">{% trans 'Cancelar' %}</a>
<input name="submit" value="{% trans 'Confirmar' %}" class="submit button button radius success" type="submit"></li>
</div>
</div>
</form>
{% endblock %}

38
templates/compilacao/detail.html

@ -0,0 +1,38 @@
{% extends "base.html" %}
{% load i18n %}
{% block base_content %}
{# FIXME is this the best markup to use? #}
<div class="clearfix">
{% block actions %}
<dl class="sub-nav right">
<dd><a href="{{ view.update_url }}" class="button">{% trans 'Editar' %}</a></dd>
<dd><a href="{{ view.delete_url }}" class="button alert">{% trans 'Excluir' %}</a></dd>
</dl>
{% endblock actions %}
{% block sections_nav %}{% endblock %}
</div>
{% block detail_content %}
{# TODO replace fieldset for something semantically correct, but with similar visual grouping style #}
{% for fieldset in view.fieldsets %}
<fieldset>
<legend>{{ fieldset.legend }}</legend>
{% for row in fieldset.rows %}
<div class="row">
{% for column in row %}
<div class="columns large-{{ column.span }}">
<div id="div_id_{{ column.id }}" class="holder">
<label>{{ column.verbose_name }}</label> {# TODO replace labels, probably (are they correct here?) #}
<p>{{ column.text }}</p>
</div>
</div>
{% endfor %}
</div>
{% endfor %}
</fieldset>
{% endfor %}
{% endblock detail_content %}
{% endblock base_content %}

15
templates/compilacao/dispositivo_search_fragment_form.html

@ -8,33 +8,30 @@
{% endif %} {% endif %}
{% for dpt in object_list %} {% for dpt in object_list %}
{% ifchanged dpt.norma%} {% ifchanged dpt.ta%}
{% if not forloop.first %}</ul>{% endif %} {% if not forloop.first %}</ul>{% endif %}
<div class="norma_title">{{dpt.norma}}</div> <div class="ta_title">{{dpt.ta}}</div>
<ul> <ul>
{% endifchanged %} {% endifchanged %}
{% if dpt.is_relative_auto_insert and dpt.dispositivo_pai and dpt.dispositivo_pai.nivel != 0 %} {% if dpt.is_relative_auto_insert and dpt.dispositivo_pai.nivel != 0 %}
<li> <li>
<div class="iteminput"> <div class="iteminput">
<input type="{{request.GET.tipo_form}}" name="dispositivo_ref" id="r{{dpt.pk}}" value="{{dpt.pk}}"/> <input type="{{request.GET.tipo_form}}" name="dispositivo_ref" id="r{{dpt.pk}}" value="{{dpt.pk}}"/>
</div> </div>
<div class="itemlabel"> <div class="itemlabel">
<label for="r{{dpt.dispositivo_pai.pk}}">{{dpt.dispositivo_pai.rotulo|safe}} - {{dpt.texto|safe}}</label> <label for="r{{dpt.dispositivo_pai.pk}}">{{dpt.dispositivo_pai.rotulo|safe}} - {{dpt.texto|safe}}</label>
<a target="_blank" href="{% url 'compilacao' dpt.norma.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% nomenclatura_heranca dpt 1 1 %}</a> <a target="_blank" href="{% url 'ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% nomenclatura_heranca dpt 1 1 %}</a>
</div> </div>
</li> </li>
{% endif%} {% elif not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
{% if not dpt.tipo_dispositivo.dispositivo_de_articulacao and not dpt.is_relative_auto_insert %}
<li> <li>
<div class="iteminput"> <div class="iteminput">
<input type="{{request.GET.tipo_form}}" name="dispositivo_ref" id="r{{dpt.pk}}" value="{{dpt.pk}}"/> <input type="{{request.GET.tipo_form}}" name="dispositivo_ref" id="r{{dpt.pk}}" value="{{dpt.pk}}"/>
</div> </div>
<div class="itemlabel"> <div class="itemlabel">
<label for="r{{dpt.pk}}">{{dpt.rotulo|safe}} - {{dpt.texto|safe}}</label> <label for="r{{dpt.pk}}">{{dpt.rotulo|safe}} - {{dpt.texto|safe}}</label>
<a target="_blank" href="{% url 'compilacao' dpt.norma.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% nomenclatura_heranca dpt 1 1 %}</a> <a target="_blank" href="{% url 'ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% nomenclatura_heranca dpt 1 1 %}</a>
</div> </div>
</li> </li>
{% endif%} {% endif%}

57
templates/compilacao/edit.html

@ -1,57 +0,0 @@
{% extends "base.html" %}
{% load i18n %}
{% load compilacao_filters %}
{% load staticfiles %}
{% load sass_tags %}
{% load crispy_forms_tags %}
{% block head_content %}{{block.super}}
<link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css">
<script type="text/javascript" src="{% static 'js/compilacao.js' %}"></script>
<script type="text/javascript" src="{% static 'js/compilacao_edit.js' %}"></script>
{% endblock %}
{% block title%}
<h1><b>Edição:</b> {{ view.get_norma }} - <i>{% trans 'Texto Multivigente' %}</i></h1>
{% endblock %}
{% block base_content %}
<div id="message_block"><div id="msg">{% trans 'Aguarde... Atualizando informações!!!'%}</div></div>
<div class="cpe">
{% include 'compilacao/edit_bloco.html'%}
</div>
{% if user.is_authenticated and False %}
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{% if message %}
<div data-alert="" class="alert-box success radius">
{{message}}
<a href="#" class="close">×</a>
</div>
{% endif %}
<fieldset>
<legend>{% trans 'Parser ODF' %}</legend>
{{ form.as_p }}
<input type="submit" name="import_submit" value="{% trans 'Importar' %}" class="button primary" />
</fieldset>
</form>
{% for parser in parser_list %}
<div class="test_import">
{{ parser|safe}}
</div>
{% endfor %}
{% endif%}
{% endblock base_content %}

6
templates/compilacao/form.html

@ -0,0 +1,6 @@
{% extends "base.html" %}
{% load i18n crispy_forms_tags %}
{% block base_content %}
{% crispy form %}
{% endblock %}

82
templates/compilacao/index.html

@ -1,82 +0,0 @@
{% extends "base.html" %}
{% load i18n %}
{% load compilacao_filters %}
{% load staticfiles %}
{% load sass_tags %}
{% block head_content %}{{block.super}}
<link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css">
<script type="text/javascript" src="{% static 'js/compilacao.js' %}"></script>
<script type="text/javascript" src="{% static 'js/compilacao_view.js' %}"></script>
{# TODO: incluir javascript compilacao_notas apenas se houver usuário conectado e que possua permissão para cadastro de notas #}
<script type="text/javascript" src="{% static 'js/compilacao_notas.js' %}"></script>
{% endblock %}
{% block title%}
<h1>{{ view.get_norma }}</h1>
{% endblock %}
{% block base_content %}
<div class="cp">
<div style="float: right; clear:right;">
<a id="btn_font_menos" title="Diminuir tamanho da letra">a</a>
<a id="btn_font_mais" title="Aumentar tamanho da Letra">A</a>
</div>
{% for key, values in view.get_vigencias.items %}
{% if forloop.first %}
<section class="vigencias">
<nav class="top-bar" data-topbar="" role="navigation">
<section class="top-bar-section">
<ul class="nav left">
{%endif%}
<li class="nav__item has-dropdown">
{% if forloop.first %}
{% for dispositivo in values %}
<a class="nav__link {% if view.inicio_vigencia == dispositivo.inicio_vigencia %}selected{%endif%}" href="{%url 'vigencia' dispositivo.norma.pk dispositivo|get_sign_vigencia %}" title="{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}">{% trans 'Norma Original'%}</a>
{% endfor %}
{% elif forloop.last %}
{% for dispositivo in values %}
<a class="nav__link {% if view.inicio_vigencia == None %}selected{%endif%}" href="{%url 'compilacao' dispositivo.norma.pk %}" title="{% trans 'Compilação atual'%}.&#013;{% trans 'Vigência a partir de'%} {{dispositivo.inicio_vigencia}}&#013;{{dispositivo.norma_publicada}}">{% trans 'Norma Atual'%}</a>
{% endfor %}
{% else %}
<a class="nav__link {% if view.inicio_vigencia.year == key %}selected{%endif%}">{{ key }}</a>
{%endif%}
{% if not forloop.first and not forloop.last %}
<ul class="nav__sub-nav dropdown">
{% for dispositivo in values %}
<li class="nav__sub-item">
{% if not forloop.parentloop.first %}
<a class="nav__sub-link" href="{%url 'vigencia' dispositivo.norma.pk dispositivo|get_sign_vigencia %}" title="{{ dispositivo.norma_publicada }}">{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}</a>
{%endif%}
</li>
{% endfor %}
</ul>
{%endif%}
</li>
{% if forloop.last %}
</ul>
<ul class="nav left tipo-vigencias">
<li><a class="selected" onclick="textoMultiVigente(this);">{% trans 'Texto Multivigente'%}</a></li>
<li><a onclick="textoVigente(this, true);">{% trans 'Texto Vigente COM Links para Normas Alteradoras'%}</a></li>
<li><a onclick="textoVigente(this, false);">{% trans 'Texto Vigente SEM Links para Normas Alteradoras'%}</a></li>
</ul>
</section>
</nav>
</section>
{%endif%}
{% endfor %}
<br>
{% if view.inicio_vigencia != None and view.fim_vigencia != None %}
{% trans 'Vigência entre'%} <b>{{view.inicio_vigencia}}</b> {% trans 'e'%} <b>{{view.fim_vigencia}}</b>.
{%endif%}
{% include 'compilacao/index_bloco.html'%}
</div>
{% endblock base_content %}

12
templates/compilacao/index_bloco_alteracao.html

@ -1,12 +0,0 @@
{% load compilacao_filters %}
{% for ch in dpt.pk|get_bloco_atualizador %}
{% spaceless %}
<div class="dpt" id="d{{ch.id}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}">
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{%url 'compilacao' ch.norma.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }}
</div>
</div>
{% endspaceless %}
{% endfor %}

82
templates/compilacao/list.html

@ -0,0 +1,82 @@
{% extends "base.html" %}
{% load i18n %}
{% block base_content %}
{# FIXME is this the best markup to use? #}
<dl class="sub-nav">
<dd><a href="{{ view.create_url }}">
{% blocktrans with verbose_name=view.verbose_name %} Adicionar {{ verbose_name }} {% endblocktrans %}
</a></dd>
{% block more_buttons %}
{% endblock more_buttons %}
</dl>
{% if not rows %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-hover">
<thead>
<tr>
{% for name in headers %}
<th>{{ name }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for value_list in rows %}
<tr>
{% for value, href in value_list %}
<td>
{% if href %}
<a href="{{ href }}">{{ value }}</a>
{% else %}
{{ value }}
{% endif %}
</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{% if is_paginated %}
<div class="pagination-centered">
<ul class="pagination" role="menubar" aria-label="Pagination">
{% if page_obj.has_previous %}
<li>
<a href="?page={{ page_obj.previous_page_number }}">
<span class="arrow">&laquo;</span>
</a>
</li>
{% else %}
<li class="arrow unavailable" aria-disabled="true"><a href="">&laquo;</a></li>
{% endif %}
{% for page in page_range %}
{% if page %}
<li {% if page == page_obj.number %}class="current"{% endif %}>
<a href="?page={{ page }}">{{ page }}</a>
</li>
{% else %}
<li class="unavailable" aria-disabled="true"><a href="">&hellip;</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li>
<a href="?page={{ page_obj.next_page_number }}">
<span class="arrow">&raquo;</span>
</a>
</li>
{% else %}
<li class="arrow unavailable" aria-disabled="true"><a href="">&raquo;</a></li>
{% endif %}
</ul>
</div>
{% endif %}
{% endblock %}

91
templates/compilacao/publicacao_detail.html

@ -0,0 +1,91 @@
{% extends "base.html" %} {% load i18n %} {% load compilacao_filters %}
{% block base_content %} {# FIXME is this the best markup to use? #}
<div class="clearfix">
{% block actions %}
<ul class="button-group right">
<li><a href="{% url 'ta_pub_edit' object.ta.pk object.pk %}" class="button tiny">{% trans 'Editar' %}</a></li>
<li><a href="{% url 'ta_pub_delete' object.ta.pk object.pk %}" class="button alert tiny">{% trans 'Excluir' %}</a></li>
</ul>
{% endblock actions %}
<dl class="sub-nav left">
{% block sections_nav %}
{% endblock %}
</dl>
</div>
{% block detail_content %} {# TODO replace fieldset for something semantically correct, but with similar visual grouping style #}
<fieldset>
<legend>{%trans 'Identificação Básica'%}</legend>
<div class="row">
<div class="columns large-4">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'tipo_publicacao' %}</label>
<p>{{ object.tipo_publicacao}}</p>
</div>
</div>
<div class="columns large-6">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'veiculo_publicacao' %}</label>
<p>{{ object.veiculo_publicacao}}</p>
</div>
</div>
<div class="columns large-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'ano' %}</label>
<p>{{ object.ano}}</p>
</div>
</div>
</div>
<div class="row">
<div class="columns large-4">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'data' %}</label>
<p>{{ object.data}}</p>
</div>
</div>
<div class="columns large-4">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'hora' %}</label>
<p>{{ object.hora|time:"H:i:s"}}</p>
</div>
</div>
<div class="columns large-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'numero' %}</label>
<p>{{ object.numero|default:''}}</p>
</div>
</div>
<div class="columns large-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'edicao' %}</label>
<p>{{ object.edicao|default:''}}</p>
</div>
</div>
</div>
<div class="row">
<div class="columns large-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'pagina_inicio' %}</label>
<p>{{ object.pagina_inicio|default:''}}</p>
</div>
</div>
<div class="columns large-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'pagina_fim' %}</label>
<p>{{ object.pagina_fim|default:''}}</p>
</div>
</div>
<div class="columns large-8">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'url_externa' %}</label>
<p>{{ object.url_externa|default:''}}</p>
</div>
</div>
</div>
</fieldset>
{% endblock detail_content %}
{% endblock base_content %}

83
templates/compilacao/publicacao_list.html

@ -0,0 +1,83 @@
{% extends "base.html" %}
{% load i18n %}
{% load compilacao_filters %}
{% block base_content %}
<dl class="sub-nav">
<dd><a href="{{ view.create_url }}">
{% trans 'Adicionar'%} {%model_verbose_name 'Publicacao'%}
</a></dd>
{% block more_buttons %}
<dd><a href="{% url 'ta_text' view.kwargs|lookup:'ta_id' %}">{% trans 'Voltar' %}</a></dd>
{% endblock more_buttons %}
</dl>
{% if not object_list %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table">
<thead>
<tr>
<th>{% fieldclass_verbose_name 'Publicacao' 'data' %}</th>
<th>{% fieldclass_verbose_name 'Publicacao' 'hora' %}</th>
<th>{% fieldclass_verbose_name 'Publicacao' 'numero' %}</th>
<th>{% fieldclass_verbose_name 'Publicacao' 'ano' %}</th>
<th>{% fieldclass_verbose_name 'Publicacao' 'edicao' %}</th>
<th>{% fieldclass_verbose_name 'Publicacao' 'veiculo_publicacao' %}</th>
<th>{% fieldclass_verbose_name 'Publicacao' 'tipo_publicacao' %}</th>
</tr>
</thead>
<tbody>
{% for pub in object_list %}
<tr>
<td><a href="{% url 'ta_pub_detail' view.kwargs.ta_id pub.pk%}">{{ pub.data }}</a></td>
<td>{{ pub.hora|time:'H:i:s' }}</td>
<td>{{ pub.numero|default:'' }}</td>
<td>{{ pub.ano|default:'' }}</td>
<td>{{ pub.edicao|default:'' }}</td>
<td>{{ pub.veiculo_publicacao }}</td>
<td>{{ pub.tipo_publicacao}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{%endif%}
{% if is_paginated %}
<div class="pagination-centered">
<ul class="pagination" role="menubar" aria-label="Pagination">
{% if page_obj.has_previous %}
<li>
<a href="?page={{ page_obj.previous_page_number }}">
<span class="arrow">&laquo;</span>
</a>
</li>
{% else %}
<li class="arrow unavailable" aria-disabled="true"><a href="">&laquo;</a></li>
{% endif %}
{% for page in page_range %}
{% if page %}
<li {% if page == page_obj.number %}class="current"{% endif %}>
<a href="?page={{ page }}">{{ page }}</a>
</li>
{% else %}
<li class="unavailable" aria-disabled="true"><a href="">&hellip;</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li>
<a href="?page={{ page_obj.next_page_number }}">
<span class="arrow">&raquo;</span>
</a>
</li>
{% else %}
<li class="arrow unavailable" aria-disabled="true"><a href="">&raquo;</a></li>
{% endif %}
</ul>
</div>
{% endif %}
{% endblock %}

30
templates/compilacao/text_edit.html

@ -0,0 +1,30 @@
{% extends "compilacao/textoarticulado_detail.html" %}
{% load i18n %}
{% load compilacao_filters %}
{% load staticfiles %}
{% load sass_tags %}
{% load crispy_forms_tags %}
{% block head_content %}{{block.super}}
<link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css">
<script type="text/javascript" src="{% static 'js/compilacao.js' %}"></script>
<script type="text/javascript" src="{% static 'js/compilacao_edit.js' %}"></script>
{% endblock %}
{% block title%}
<h1><b>Edição:</b> {{ view.title }} - <i>{% trans 'Texto Multivigente' %}</i></h1>
{% endblock %}
{% block base_content %}{{block.super}}
<div id="message_block"><div id="msg">{% trans 'Aguarde... Atualizando informações!!!'%}</div></div>
<div class="cpe">
{% include 'compilacao/text_edit_bloco.html'%}
</div>
{% endblock base_content %}

18
templates/compilacao/edit_bloco.html → templates/compilacao/text_edit_bloco.html

@ -23,7 +23,7 @@
<li class="edt-tinymce"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:tinymce" title="{% trans 'Editar o texto com TinyMCE'%}">E+</a></li> <li class="edt-tinymce"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:tinymce" title="{% trans 'Editar o texto com TinyMCE'%}">E+</a></li>
{%endif%} {%endif%}
<li class="edt-detail"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:detail" title="{% trans 'TODO: Edição detalhada'%}">E*</a></li> <li class="edt-detail"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:detail" title="{% trans 'TODO: Edição detalhada'%}">E*</a></li>
<li class="edt-construct"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:construct" title="{% trans 'Construçao da estrutura da Norma'%}">C</a></li> <li class="edt-construct"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:construct" title="{% trans 'Construçao da estrutura do Texto Articulado'%}">C</a></li>
</ul> </ul>
<ul class="btns-action actions_right"> <ul class="btns-action actions_right">
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Reduzir nível do Dispositivo'%}">&#10092;</a></li> <li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Reduzir nível do Dispositivo'%}">&#10092;</a></li>
@ -35,7 +35,7 @@
</ul> </ul>
<ul class="btns-action actions_left"> <ul class="btns-action actions_left">
<li><a class="btn-left btn-action" pk="{{dpt.pk}}" title="TODO: Vides...">Vd</a></li> <li><a href ="{% url 'ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="btn-left btn-action" pk="{{dpt.pk}}" title="{% trans 'Ir para Texto'%}">T</a></li>
</ul> </ul>
<ul class="btns-action actions_bottom"> <ul class="btns-action actions_bottom">
{% for perfil in perfil_estrutural_list%} {% for perfil in perfil_estrutural_list%}
@ -46,10 +46,10 @@
<ul class="actions_inserts {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}menu_flutuante{%endif%}"> <ul class="actions_inserts {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}menu_flutuante{%endif%}">
{% if dpt.dispositivo_subsequente == None %} {% if dpt.dispositivo_subsequente == None %}
{% for inserts in view|select_provaveis_inserts:request %} {% for inserts in view|select_provaveis_inserts:request %}
<li class="{{inserts|get_field:'action'}}"><a class="btn-inserts" action="" pk="{{dpt.pk}}">{{inserts|get_field:'icone'|safe}}<span>{{inserts|get_field:'tipo_insert'}}</span></a> <li class="{{inserts|lookup:'action'}}"><a class="btn-inserts" action="" pk="{{dpt.pk}}">{{inserts|lookup:'icone'|safe}}<span>{{inserts|lookup:'tipo_insert'}}</span></a>
<ul id="afe{{dpt.id}}" > <ul id="afe{{dpt.id}}" >
{% for item in inserts|get_field:'itens' %} {% for item in inserts|lookup:'itens' %}
<li><a class="btn-inserts btn-action" action="{{inserts|get_field:'action'}}" pk="{{item|get_field:'dispositivo_base'}}" variacao="{{item|get_field:'variacao'}}" tipo_pk="{{item|get_field:'tipo_pk'}}">{{item|get_field:'provavel'}}</a></li> <li><a class="btn-inserts btn-action" action="{{inserts|lookup:'action'}}" pk="{{item|lookup:'dispositivo_base'}}" variacao="{{item|lookup:'variacao'}}" tipo_pk="{{item|lookup:'tipo_pk'}}">{{item|lookup:'provavel'}}</a></li>
{% endfor %} {% endfor %}
</ul> </ul>
</li> </li>
@ -107,16 +107,16 @@
<div class="bloco {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %} {{ dpt.tipo_dispositivo.class_css }}"> <div class="bloco {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %} {{ dpt.tipo_dispositivo.class_css }}">
{% spaceless %} {% spaceless %}
<div class="de" id="id{{dpt.id}}" pk="{{dpt.pk}}" ordem="{{dpt.ordem}}" name="{{dpt.pk}}" title="{{dpt.pk}}">{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}{{ dpt.rotulo }}{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{% if dpt.texto == '' and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}<span class="semtexto">({{dpt.tipo_dispositivo}} sem texto)</span>{%else%}{{ dpt.texto|safe }}{%endif%}</div> <div class="de" id="id{{dpt.id}}" pk="{{dpt.pk}}" ordem="{{dpt.ordem}}" name="{{dpt.pk}}" title="{{dpt.pk}}">{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}{{ dpt.rotulo }}{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{% if dpt.texto == '' and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}<span class="semtexto">({{dpt.tipo_dispositivo}} sem texto)</span>{%else%}{{ dpt.texto|safe }}{%endif%}</div>
{% if dpt.norma_publicada_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %} {% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{%url 'comp_edit' dpt.norma_publicada.pk %}#{{dpt.dispositivo_atualizador_id}}"> <a class="link_alterador" href="{%url 'ta_text_edit' 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 %} {% nota_automatica dpt %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
</a> </a>
{% endif %} {% endif %}
{% endspaceless %} {% endspaceless %}
{% if view.is_norma_alteradora and dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%} {% if view.is_ta_alterador and dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%}
{%with node=dpt template_name='compilacao/edit_bloco_alteracao.html' %} {%with node=dpt template_name='compilacao/text_edit_blocoalteracao.html' %}
{%include template_name%} {%include template_name%}
{%endwith%} {%endwith%}
{% endif%} {% endif%}

2
templates/compilacao/edit_bloco_alteracao.html → templates/compilacao/text_edit_blocoalteracao.html

@ -3,7 +3,7 @@
{% spaceless %} {% spaceless %}
<div class="dpt" id="d{{ch.id}}"> <div class="dpt" id="d{{ch.id}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}"> <div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}">
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{%url 'comp_edit' ch.norma.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} {{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{%url 'ta_text_edit' ch.ta.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }}
</div> </div>
</div> </div>
{% endspaceless %} {% endspaceless %}

97
templates/compilacao/text_list.html

@ -0,0 +1,97 @@
{% extends "compilacao/textoarticulado_detail.html" %}
{% load i18n %}
{% load compilacao_filters %}
{% load staticfiles %}
{% load sass_tags %}
{% block head_content %}{{block.super}}
<link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css">
<script type="text/javascript" src="{% static 'jsdiff/diff.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/compilacao.js' %}"></script>
<script type="text/javascript" src="{% static 'js/compilacao_view.js' %}"></script>
{% if perms.compilacao.add_nota %}
<script type="text/javascript" src="{% static 'js/compilacao_notas.js' %}"></script>
{% endif %}
{% endblock %}
{% block base_content %}{{block.super}}
<div class="cp">
{% if object_list %}
<ul class="button-group right">
<li><a class="button tiny" id="btn_font_menos" title="Diminuir tamanho da letra">a</a></li>
<li><a class="button tiny" id="btn_font_mais" title="Aumentar tamanho da Letra">A</a></li>
</ul>
{% endif %}
{% for key, values in view.get_vigencias.items %}
{% if forloop.first %}
<section class="vigencias">
<nav class="top-bar" data-topbar="" role="navigation">
<section class="top-bar-section">
<ul class="nav left">
{%endif%}
<li class="nav__item has-dropdown">
{% if forloop.first %}
{% for dispositivo in values %}
<a class="nav__link {% if view.inicio_vigencia == dispositivo.inicio_vigencia %}selected{%endif%}" href="{%url 'ta_vigencia' dispositivo.ta.pk dispositivo|get_sign_vigencia %}" title="{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}">{% trans 'Texto Original'%}</a>
{% endfor %}
{% elif forloop.last %}
{% for dispositivo in values %}
<a class="nav__link {% if view.inicio_vigencia == None %}selected{%endif%}" href="{%url 'ta_text' dispositivo.ta.pk %}" title="{% trans 'Compilação atual'%}.&#013;{% trans 'Vigência a partir de'%} {{dispositivo.inicio_vigencia}}&#013;{{dispositivo.ta_publicado}}">{% trans 'Texto Atual'%}</a>
{% endfor %}
{% else %}
<a class="nav__link {% if view.inicio_vigencia.year == key %}selected{%endif%}">{{ key }}</a>
{%endif%}
{% if not forloop.first and not forloop.last %}
<ul class="nav__sub-nav dropdown">
{% for dispositivo in values %}
<li class="nav__sub-item">
{% if not forloop.parentloop.first %}
<a class="nav__sub-link" href="{%url 'ta_vigencia' dispositivo.ta.pk dispositivo|get_sign_vigencia %}" title="{{ dispositivo.ta_publicado }}">{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}</a>
{%endif%}
</li>
{% endfor %}
</ul>
{%endif%}
</li>
{% if forloop.last %}
</ul>
{% comment %}
<ul class="nav left tipo-vigencias">
<li><a class="selected" onclick="textoMultiVigente(this);" title="">{% trans 'Texto Multivigente'%}</a></li>
<li><a onclick="textoVigente(this, true);">{% trans 'Texto Vigente COM Links para Textos Alteradores'%}</a></li>
<li><a onclick="textoVigente(this, false);">{% trans 'Texto Vigente SEM Links para Textos Alteradores'%}</a></li>
</ul>
{% endcomment %}
<ul class="tipo-vigencias">
<li><a class="selected" onclick="textoMultiVigente(this, false);" title="{% trans 'Texto Multivigente Sequencial'%}">{% trans 'TMS'%}</a></li>
<li><a onclick="textoMultiVigente(this, true);" title="{% trans 'Texto Multivigente Integrado com Realce de Alterações'%}">{% trans 'TMI'%}</a></li>
<li><a onclick="textoVigente(this, true);" title="{% trans 'Texto Vigente COM Links para Textos Alteradores'%}">{% trans 'TVL'%}</a></li>
<li><a onclick="textoVigente(this, false);" title="{% trans 'Texto Vigente'%}">{% trans 'TVT'%}</a></li>
</ul>
</section>
</nav>
</section>
{%endif%}
{% endfor %}
<br>
{% if view.inicio_vigencia != None and view.fim_vigencia != None %}
{% trans 'Vigência entre'%} <b>{{view.inicio_vigencia}}</b> {% trans 'e'%} <b>{{view.fim_vigencia}}</b>.
{%endif%}
{% include 'compilacao/text_list_bloco.html'%}
</div>
{% endblock base_content %}

70
templates/compilacao/index_bloco.html → templates/compilacao/text_list_bloco.html

@ -1,6 +1,8 @@
{% load i18n %} {% load i18n %}
{% load compilacao_filters %} {% load compilacao_filters %}
<div class="display"></div>
{% for dpt in object_list %} {% for dpt in object_list %}
{% if dpt.nivel == view.flag_nivel_old %} {% if dpt.nivel == view.flag_nivel_old %}
</div> </div>
@ -11,26 +13,27 @@
{% if forloop.first and view|isinst:'DispositivoView' %} {% if forloop.first and view|isinst:'DispositivoView' %}
{% else %} {% else %}
<div class="dpt {%if dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%}bloco_alteracao{%endif%}"> <div class="dpt {%if dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%}bloco_alteracao{%endif%}" nivel="{{dpt.nivel}}">
{% endif%} {% endif%}
{% 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 %}"> <div class="dptt {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %}" id="dptt{{dpt.pk}}" >
{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{dpt.pk}}" title="{{dpt.pk}}">{{ dpt.rotulo }}</a>{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto%}{{ dpt.texto|safe }}{%else%}&nbsp;{%endif%} {{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{dpt.pk}}" title="{{dpt.pk}}">{{ dpt.rotulo }}</a>{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}<span class="dtxt" id="d{% if not dpt.dispositivo_subsequente and dpt.dispositivo_substituido %}a{%endif%}{{dpt.pk}}" pks="{{dpt.dispositivo_substituido.pk}}" pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto%}{{ dpt.texto|safe }}{%else%}&nbsp;{%endif%}</span>
{% if dpt.norma_publicada_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %} {% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{%url 'compilacao' dpt.norma_publicada.pk %}#{{dpt.dispositivo_atualizador_id}}"> <a class="link_alterador" href="{%url '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 %} {% nota_automatica dpt %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
</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%}
{% if perms.compilacao.add_nota or perms.compilacao.add_vide %} {% if perms.compilacao.add_nota or perms.compilacao.add_vide or perms.compilacao.change_dispositivo%}
<div class="dne" id="dne{{dpt.pk}}" pk="{{dpt.pk}}">{# TODO: User - dne - Dispostivo Nota Editor - tratar permissão de usuário#} <div class="dne" id="dne{{dpt.pk}}" pk="{{dpt.pk}}">{# TODO: User - dne - Dispostivo Nota Editor - tratar permissão de usuário#}
<ul class="btns-action"> <ul class="btns-action">
{% if perms.compilacao.add_nota %}<li><a class="btn-action btn-nota-create" model="nota" pk="{{dpt.pk}}" title="{% trans 'Adcionar Nota'%}">&nbsp;</a></li>{% endif %} {% if perms.compilacao.change_dispositivo %}<li><a href = "{% url 'ta_text_edit' dpt.ta.pk%}#{{dpt.pk}}" class="btn-action" title="{% trans 'Editar Dispositivo'%}">Ed</a></li>{% endif %}
{% if perms.compilacao.add_vide %}<li><a class="btn-action btn-vide-create" model="vide" pk="{{dpt.pk}}" title="{% trans 'Adcionar Vide'%}">V</a></li>{% endif %} {% if perms.compilacao.add_nota %}<li><a class="btn-action btn-nota-create" model="nota" pk="{{dpt.pk}}" title="{% trans 'Adicionar Nota'%}">N</a></li>{% endif %}
{% if perms.compilacao.add_vide %}<li><a class="btn-action btn-vide-create" model="vide" pk="{{dpt.pk}}" title="{% trans 'Adicionar Vide'%}">V</a></li>{% endif %}
</ul> </ul>
<div class="dne-form"></div> <div class="dne-form"></div>
</div> </div>
@ -41,8 +44,11 @@
{% 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#}
{% if cita and dpt.pk in cita %}
{% for vide in dpt.cita.all %}
{% if cita and cita|lookup:dpt.pk %}
{% for vide in cita|lookup:dpt.pk %}
{%if not forloop.first %}<li class="bullet">&#8226;</li>{%endif%} {%if not forloop.first %}<li class="bullet">&#8226;</li>{%endif%}
<li class="dnli" id="nt{{vide.pk}}"> <li class="dnli" id="nt{{vide.pk}}">
@ -63,10 +69,10 @@
</ul> </ul>
<div class="ntitulo">Vide: </div> <div class="ntitulo">Vide: </div>
<div class="ntexto"> <div class="ntexto">
{% if dpt.is_relative_auto_insert %} {% if vide.dispositivo_ref.dispositivo_pai.nivel != 0 and vide.dispositivo_ref.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao %}
<a href="{%url 'compilacao' vide.dispositivo_ref.dispositivo_pai.norma.pk%}#{{vide.dispositivo_ref.dispositivo_pai.pk }}">{{ vide.dispositivo_ref.dispositivo_pai}}</a> <a href="{%url 'ta_text' vide.dispositivo_ref.dispositivo_pai.ta.pk%}#{{vide.dispositivo_ref.dispositivo_pai.pk }}">{{ vide.dispositivo_ref.dispositivo_pai}}</a>
{% else %} {% else %}
<a href="{%url 'compilacao' vide.dispositivo_ref.norma.pk%}#{{vide.dispositivo_ref.pk }}">{{ vide.dispositivo_ref}}</a> <a href="{%url 'ta_text' vide.dispositivo_ref.ta.pk%}#{{vide.dispositivo_ref.pk }}">{{ vide.dispositivo_ref}}</a>
{% endif %} {% endif %}
{% if vide.texto %} - {{vide.texto}}{% endif %} {% if vide.texto %} - {{vide.texto}}{% endif %}
</div> </div>
@ -74,8 +80,9 @@
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if citado and dpt.pk in citado %} {% if citado and citado|lookup:dpt.pk %}
{% for vide in dpt.citado.all %} {% if cita and cita|lookup:dpt.pk %}<li class="bullet">&#8226;</li>{%endif%}
{% for vide in citado|lookup:dpt.pk %}
{%if not forloop.first %}<li class="bullet">&#8226;</li>{%endif%} {%if not forloop.first %}<li class="bullet">&#8226;</li>{%endif%}
<li class="dnli" id="nt{{vide.pk}}"> <li class="dnli" id="nt{{vide.pk}}">
<ul> <ul>
@ -85,24 +92,19 @@
</ul> </ul>
<div class="ntitulo">Citado em: </div> <div class="ntitulo">Citado em: </div>
<div class="ntexto"> <div class="ntexto">
{% if dpt.is_relative_auto_insert %} {% if vide.dispositivo_base.dispositivo_pai.nivel != 0 and vide.dispositivo_base.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao%}
<a href="{%url 'compilacao' vide.dispositivo_base.dispositivo_pai.norma.pk%}#{{vide.dispositivo_base.dispositivo_pai.pk }}">{{ vide.dispositivo_base.dispositivo_pai}}</a> <a href="{%url 'ta_text' vide.dispositivo_base.dispositivo_pai.ta.pk%}#{{vide.dispositivo_base.dispositivo_pai.pk }}">{{ vide.dispositivo_base.dispositivo_pai}}</a>
{% else %} {% else %}
<a href="{%url 'compilacao' vide.dispositivo_base.norma.pk%}#{{vide.dispositivo_base.pk }}">{{ vide.dispositivo_base}}</a> <a href="{%url 'ta_text' vide.dispositivo_base.ta.pk%}#{{vide.dispositivo_base.pk }}">{{ vide.dispositivo_base}}</a>
{% endif %} {% endif %}
{% if vide.texto %} - {{vide.texto}}{% endif %} {% if vide.texto %} - {{vide.texto}}{% endif %}
</div> </div>
</li> </li>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{%if notas and notas|lookup:dpt.pk and cita and cita|lookup:dpt.pk or notas and notas|lookup:dpt.pk and citado and citado|lookup:dpt.pk %}<li class="bullet">&#8226;</li>{%endif%}
{% if notas and notas|lookup:dpt.pk %}
{%if notas and dpt.pk in notas and dpt.pk in cita or dpt.pk in citado and notas%}<li class="bullet">&#8226;</li>{%endif%} {% for nota in notas|lookup:dpt.pk %}
{% if notas and dpt.pk in notas %}
{% for nota in dpt.notas.all %}
{% if user.is_superuser or nota.publicidade == nota.NPUBL or nota.publicidade == nota.NINST and user.is_authenticated or nota.publicidade = nota.NPRIV and nota.owner == user %} {% if user.is_superuser or nota.publicidade == nota.NPUBL or nota.publicidade == nota.NINST and user.is_authenticated or nota.publicidade = nota.NPRIV and nota.owner == user %}
{%if not forloop.first %}<li class="bullet">&#8226;</li>{%endif%} {%if not forloop.first %}<li class="bullet">&#8226;</li>{%endif%}
@ -127,16 +129,11 @@
{%if nota.titulo %} {%if nota.titulo %}
<div class="ntitulo"> <div class="ntitulo">
{%if nota.url_externa %}<a target="_blank" href="{{nota.url_externa}}">{%endif%} {%if nota.url_externa %}<a target="_blank" href="{{nota.url_externa}}">{%endif%}{{nota.titulo}} - {%if nota.url_externa %}</a>{%endif%}
{{nota.titulo}} -
{%if nota.url_externa %}</a>{%endif%}
</div> </div>
{%endif%} {%endif%}
<div class="ntexto"> <div class="ntexto">
{%if nota.url_externa %}<a target="_blank" href="{{nota.url_externa}}">{%endif%} {%if nota.url_externa %}<a target="_blank" href="{{nota.url_externa}}">{%endif%}{{ nota.texto}}{%if nota.url_externa %}</a>{%endif%}
{{ nota.texto}}
{%if nota.url_externa %}</a>{%endif%}
</div> </div>
{%comment%} {%comment%}
@ -148,9 +145,6 @@
{%endcomment%} {%endcomment%}
</li> </li>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
</ul> </ul>
@ -158,8 +152,8 @@
{% endif%} {% endif%}
</div> </div>
{% endspaceless %} {% endspaceless %}
{% if view.is_norma_alteradora and dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%} {% if view.is_ta_alterador and dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%}
{%with node=dpt template_name='compilacao/index_bloco_alteracao.html' %} {%with node=dpt template_name='compilacao/text_list_blocoalteracao.html' %}
{%include template_name%} {%include template_name%}
{%endwith%} {%endwith%}
{% endif%} {% endif%}

13
templates/compilacao/text_list_blocoalteracao.html

@ -0,0 +1,13 @@
{% load compilacao_filters %}
<i class="fa fa-quote-left fa-2x fa-pull-left fa-border"></i>
{% for ch in dpt.pk|get_bloco_atualizador %}
{% spaceless %}
{% if ch.visibilidade %}
<div class="dpt" id="d{{ch.id}}" nivel="{{ch.nivel}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}">
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{%url 'ta_text' ch.ta.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }}
</div>
</div>
{%endif%}
{% endspaceless %}
{% endfor %}

94
templates/compilacao/textoarticulado_detail.html

@ -0,0 +1,94 @@
{% extends "base.html" %} {% load i18n %} {% load compilacao_filters %}
{% block sections_nav %}
<dl class="sub-nav">
{% if object.content_object%}
<dd><a href="{% url object|urldetail_content_type object.content_object.pk %}"title="{% trans 'Ir para '%}{{object.content_object}}">Início</a></dd>
{%else%}
<dd><a href="{% url 'ta_detail' object.pk %}" {% trans 'Início' %}</a></dd>
{%endif%}
<dd><a href="{% url 'ta_pub_list' object.pk %}">{% model_verbose_name_plural 'Publicacao' %}</a></dd>
<dd><a href="{% url 'ta_text' object.pk %}">{% trans 'Texto' %}</a></dd>
<dd><a href="{% url 'ta_text_edit' object.pk %}">{% trans 'Edição do Texto' %}</a></li>
</dl>
{% endblock %}
{% block base_content %} {# FIXME is this the best markup to use? #}
<div class="clearfix">
{% block actions %}
<ul class="button-group right">
<li><a href="{% url 'ta_edit' object.pk %}" class="button tiny">{% trans 'Edição dos Metadados do Texto Articulado' %}</a></li>
<li><a href="{% url 'ta_delete' object.pk %}" class="button alert tiny">{% trans 'Excluir' %}</a></li>
<li><a href="#" class="button tiny" data-dropdown="drop"><i class="fi-widget"></i></a>
<ul id="drop" class="tiny f-dropdown" data-dropdown-content>
<li><a href="{% url 'tipo_ta_list' %}">{%model_verbose_name_plural 'TipoTextoArticulado'%}</a></li>
<li><a href="{% url 'tipopublicacao:list' %}">{%model_verbose_name_plural 'TipoPublicacao'%}</a></li>
<li><a href="{% url 'veiculopublicacao:list' %}">{%model_verbose_name_plural 'VeiculoPublicacao'%}</a></li>
<li><a href="{% url 'tiponota:list' %}">{%model_verbose_name_plural 'TipoNota'%}</a></li>
<li><a href="{% url 'tipovide:list' %}">{%model_verbose_name_plural 'TipoVide'%}</a></li>
<li><a href="#">TODO: Tipo de Dispositivo</a></li>
<li><a href="#">TODO: Perfil Estrutural de Textos Articulados</a></li>
</ul></li>
</ul>
{% endblock actions %}
</div>
{% block detail_content %} {# TODO replace fieldset for something semantically correct, but with similar visual grouping style #}
<fieldset>
<legend>{%trans 'Identificação Básica'%}</legend>
<div class="row">
<div class="columns large-3">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'tipo_ta' %}</label>
<p>{{ object.tipo_ta}}</p>
</div>
</div>
{% if object.content_object and object.content_object.tipo%}
<div class="columns large-3">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object.content_object 'tipo' %}</label>
<p>{{ object.content_object.tipo}}</p>
</div>
</div>
{%endif%}
<div class="columns large-2">
<div id="div_id_numero" class="holder">
<label>{% field_verbose_name object 'numero' %}</label>
<p>{{ object.numero}}</p>
</div>
</div>
<div class="columns large-2">
<div id="div_id_ano" class="holder">
<label>{% field_verbose_name object 'ano' %}</label>
<p>{{ object.ano}}</p>
</div>
</div>
<div class="columns large-2">
<div id="div_id_data" class="holder">
<label>{% field_verbose_name object 'data' %}</label>
<p>{{ object.data}}</p>
</div>
</div>
</div>
<br>
<div class="row">
<div class="columns large-12">
<div id="div_id_ementa" class="holder">
<label>{% field_verbose_name object 'ementa' %}</label>
<p>{{ object.ementa|safe}}</p>
</div>
</div>
</div>
</fieldset>
{% endblock detail_content %} {% endblock base_content %}

91
templates/compilacao/textoarticulado_list.html

@ -0,0 +1,91 @@
{% extends "base.html" %}
{% load i18n %}
{% load compilacao_filters %}
{% block base_content %}
{# FIXME is this the best markup to use? #}
<a href="#" class="button tiny right" data-dropdown="dropconfig"><i class="fi-widget"></i></a>
<ul id="dropconfig" class="tiny f-dropdown" data-dropdown-content>
<li><a href="{% url 'tipo_ta_list' %}">{%model_verbose_name_plural 'TipoTextoArticulado'%}</a></li>
<li><a href="{% url 'tipopublicacao:list' %}">{%model_verbose_name_plural 'TipoPublicacao'%}</a></li>
<li><a href="{% url 'veiculopublicacao:list' %}">{%model_verbose_name_plural 'VeiculoPublicacao'%}</a></li>
<li><a href="{% url 'tiponota:list' %}">{%model_verbose_name_plural 'TipoNota'%}</a></li>
<li><a href="{% url 'tipovide:list' %}">{%model_verbose_name_plural 'TipoVide'%}</a></li>
<li><a href="#">Tipo de Dispositivo</a></li>
<li><a href="#">Perfil Estrutural de Textos Articulados</a></li>
</ul>
<dl class="sub-nav">
<dd><a href="{{ view.create_url }}">
{% trans 'Adicionar'%} {%model_verbose_name 'TextoArticulado'%}
</a></dd>
{% block more_buttons %}
{% endblock more_buttons %}
</dl>
<table class="table table-hover">
<thead>
<tr>
<th>{% trans 'Tipo'%}</th>
<th>{% trans 'Número'%}</th>
<th>{% trans 'Ano'%}</th>
<th>{% trans 'Data'%}</th>
<th>{% trans 'Ementa'%}</th>
</tr>
</thead>
<tbody>
{% for ta in object_list %}
<tr>
<td><a href="{% url 'ta_detail' ta.pk %}">{{ ta.tipo_ta }}</a></td>
<td>{{ ta.numero }}</td>
<td>{{ ta.ano }}</td>
<td>{{ ta.data }}</td>
<td>{{ ta.ementa|safe }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if is_paginated %}
<div class="pagination-centered">
<ul class="pagination" role="menubar" aria-label="Pagination">
{% if page_obj.has_previous %}
<li>
<a href="?page={{ page_obj.previous_page_number }}">
<span class="arrow">&laquo;</span>
</a>
</li>
{% else %}
<li class="arrow unavailable" aria-disabled="true"><a href="">&laquo;</a></li>
{% endif %}
{% for page in page_range %}
{% if page %}
<li {% if page == page_obj.number %}class="current"{% endif %}>
<a href="?page={{ page }}">{{ page }}</a>
</li>
{% else %}
<li class="unavailable" aria-disabled="true"><a href="">&hellip;</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li>
<a href="?page={{ page_obj.next_page_number }}">
<span class="arrow">&raquo;</span>
</a>
</li>
{% else %}
<li class="arrow unavailable" aria-disabled="true"><a href="">&raquo;</a></li>
{% endif %}
</ul>
</div>
{% endif %}
{% endblock %}

53
templates/compilacao/tipotextoarticulado_detail.html

@ -0,0 +1,53 @@
{% extends "base.html" %} {% load i18n %} {% load compilacao_filters %}
{% block base_content %} {# FIXME is this the best markup to use? #}
{% block sections_nav %}
{% endblock %}
<div class="clearfix">
{% block actions %}
<ul class="button-group right">
<li><a href="{% url 'tipo_ta_edit' object.pk %}" class="button tiny">{% trans 'Editar' %}</a></li>
<li><a href="{% url 'tipo_ta_delete' object.pk %}" class="button alert tiny">{% trans 'Excluir' %}</a></li>
</ul>
{% endblock actions %}
</div>
{% block detail_content %} {# TODO replace fieldset for something semantically correct, but with similar visual grouping style #}
<fieldset>
<legend>{%trans 'Identificação Básica'%}</legend>
<div class="row">
<div class="columns large-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'sigla' %}</label>
<p>{{ object.sigla}}</p>
</div>
</div>
<div class="columns large-4">
<div id="div_id_numero" class="holder">
<label>{% field_verbose_name object 'descricao' %}</label>
<p>{{ object.descricao}}</p>
</div>
</div>
<div class="columns large-3">
<div id="div_id_ano" class="holder">
<label>{% field_verbose_name object 'content_type' %}</label>
<p>{{ object.content_type|default:""}}</p>
</div>
</div>
<div class="columns large-3">
<div id="div_id_ano" class="holder">
<label>{% field_verbose_name object 'participacao_social' %}</label>
<p>{{ object.get_participacao_social_display}}</p>
</div>
</div>
</div>
</fieldset>
{% endblock detail_content %}
{% endblock base_content %}

74
templates/compilacao/tipotextoarticulado_list.html

@ -0,0 +1,74 @@
{% extends "base.html" %}
{% load i18n %}
{% load compilacao_filters %}
{% block base_content %}
<dl class="sub-nav">
<dd><a href="{{ view.create_url }}">
{% trans 'Adicionar'%} {%model_verbose_name 'TipoTextoArticulado'%}
</a></dd>
{% block more_buttons %}
{% endblock more_buttons %}
</dl>
{% if not object_list %}
<p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
<table class="table table-hover" width=100%>
<thead>
<tr>
<th>{% fieldclass_verbose_name 'TipoTextoArticulado' 'sigla' %}</th>
<th>{% fieldclass_verbose_name 'TipoTextoArticulado' 'descricao' %}</th>
<th>{% fieldclass_verbose_name 'TipoTextoArticulado' 'content_type' %}</th>
</tr>
</thead>
<tbody>
{% for tipo_ta in object_list %}
<tr>
<td><a href="{% url 'tipo_ta_detail' tipo_ta.pk %}">{{ tipo_ta.sigla }}</a></td>
<td>{{ tipo_ta.descricao }}</td>
<td>{{ tipo_ta.content_type }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if is_paginated %}
<div class="pagination-centered">
<ul class="pagination" role="menubar" aria-label="Pagination">
{% if page_obj.has_previous %}
<li>
<a href="?page={{ page_obj.previous_page_number }}">
<span class="arrow">&laquo;</span>
</a>
</li>
{% else %}
<li class="arrow unavailable" aria-disabled="true"><a href="">&laquo;</a></li>
{% endif %}
{% for page in page_range %}
{% if page %}
<li {% if page == page_obj.number %}class="current"{% endif %}>
<a href="?page={{ page }}">{{ page }}</a>
</li>
{% else %}
<li class="unavailable" aria-disabled="true"><a href="">&hellip;</a></li>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
<li>
<a href="?page={{ page_obj.next_page_number }}">
<span class="arrow">&raquo;</span>
</a>
</li>
{% else %}
<li class="arrow unavailable" aria-disabled="true"><a href="">&raquo;</a></li>
{% endif %}
</ul>
</div>
{% endif %}
{% endif %}
{% endblock %}

2
templates/crud/detail.html

@ -11,7 +11,7 @@
<dd><a href="{{ view.delete_url }}" class="button alert">{% trans 'Excluir' %}</a></dd> <dd><a href="{{ view.delete_url }}" class="button alert">{% trans 'Excluir' %}</a></dd>
</dl> </dl>
{% endblock actions %} {% endblock actions %}
{% block sections_nav %}{% endblock %}
</div> </div>
{% block detail_content %} {% block detail_content %}

1
templates/index.html

@ -4,4 +4,3 @@
{% block title%} {% block title%}
<h1>Bem-vindo ao SAPL!</h1> <h1>Bem-vindo ao SAPL!</h1>
{% endblock %} {% endblock %}

28
templates/materia/materialegislativa_detail.html

@ -2,15 +2,23 @@
{% load i18n %} {% load i18n %}
{% block sections_nav %} {% block sections_nav %}
<dl class="sub-nav left"> <dl class="sub-nav">
<dd><a href="{% url 'materialegislativa:detail' materialegislativa.id %}" class="button secondary">{% trans 'Início' %}</a></dd> <dd><a href="{% url 'materialegislativa:detail' materialegislativa.id %}">{% trans 'Início' %}</a></dd>
<dd><a href="{% url 'materia_anexada' materialegislativa.id %}" class="button secondary">{% trans 'Anexada' %}</a></dd> <dd><a href="{% url 'materia_anexada' materialegislativa.id %}">{% trans 'Anexada' %}</a></dd>
<dd><a href="{% url 'autoria' materialegislativa.id %}" class="button secondary">{% trans 'Autoria' %}</a></dd> <dd><a href="{% url 'autoria' materialegislativa.id %}">{% trans 'Autoria' %}</a></dd>
<dd><a href="{% url 'despacho_inicial' materialegislativa.id %}" class="button secondary">{% trans 'Despacho Inicial' %}</a></dd> <dd><a href="{% url 'despacho_inicial' materialegislativa.id %}">{% trans 'Despacho Inicial' %}</a></dd>
<dd><a href="{% url 'documento_acessorio' materialegislativa.id %}" class="button secondary">{% trans 'Documento Acessório' %}</a></dd> <dd><a href="{% url 'documento_acessorio' materialegislativa.id %}">{% trans 'Documento Acessório' %}</a></dd>
<dd><a href="{% url 'legislacao_citada' materialegislativa.id %}" class="button secondary">{% trans 'Legislação Citada' %}</a></dd> <dd><a href="{% url 'legislacao_citada' materialegislativa.id %}">{% trans 'Legislação Citada' %}</a></dd>
<dd><a href="{% url 'numeracao' materialegislativa.id %}" class="button secondary">{% trans 'Numeração' %}</a></dd> <dd><a href="{% url 'numeracao' materialegislativa.id %}">{% trans 'Numeração' %}</a></dd>
<dd><a href="{% url 'tramitacao_materia' materialegislativa.id %}" class="button secondary">{% trans 'Tramitação' %}</a></dd> <dd><a href="{% url 'tramitacao_materia' materialegislativa.id %}">{% trans 'Tramitação' %}</a></dd>
<dd><a href="{% url 'relatoria' materialegislativa.id %}" class="button secondary">{% trans 'Relatoria' %}</a></dd> <dd><a href="{% url 'relatoria' materialegislativa.id %}">{% trans 'Relatoria' %}</a></dd>
{% comment %}
Opção adicionada para chamar o TextoArticulado da matéria.
para integração foram necessárias apenas criar a url materia_ta em urls.py
e a view MateriaTaView(IntegracaoTaView) em views.py
Em nada mais a integração interfere em MateriaLegislativa
{% endcomment %}
<dd><a href="{% url 'materia_ta' materialegislativa.id %}">{% trans 'Texto' %}</a></dd>
</dl> </dl>
{% endblock sections_nav %} {% endblock sections_nav %}

11
templates/norma/normajuridica_detail.html

@ -1,7 +1,16 @@
{% extends "crud/detail.html" %} {% extends "crud/detail.html" %}
{% load i18n %} {% load i18n %}
{% block actions %} {% endblock %}
{% block sections_nav %} {% block sections_nav %}
<dl class="sub-nav left"> <dl class="sub-nav left">
<dd><a href="{% url 'normajuridica:detail' object.pk %}" class="button secondary">{% trans 'Início' %}</a></dd>
{% comment %}
Opção adicionada para chamar o TextoArticulado da norma.
para integração foram necessárias apenas criar a url norma_ta em urls.py
e a view NormaTa(IntegracaoTaView) em views.py
Em nada mais a integração interfere em Norma Jurídica
{% endcomment %}
<dd><a href="{% url 'norma_ta' object.pk %}" class="button secondary">{% trans 'Texto' %}</a></dd>
</dl> </dl>
{% endblock sections_nav %} {% endblock sections_nav %}

5
templates/parlamentares/parlamentares_detail.html

@ -1,8 +1,7 @@
{% extends "crud/detail.html" %} {% extends "crud/detail.html" %}
{% load i18n %} {% load i18n %}
{% block actions %} {% endblock %} {% block actions %}
{% block sections_nav %}
<dl class="sub-nav left"> <dl class="sub-nav left">
<dd><a href="{% url 'parlamentares_cadastro' legislatura_id %}" id="incluir-parlamentar" class="button secondary">{% trans 'Incluir Parlamentar' %}</a></dd> <dd><a href="{% url 'parlamentares_cadastro' legislatura_id %}" id="incluir-parlamentar" class="button secondary">{% trans 'Incluir Parlamentar' %}</a></dd>
</dl> </dl>
{% endblock sections_nav %} {% endblock actions %}

10
templates/sistema.html

@ -77,16 +77,6 @@
<li><a href="">Assunto de Norma Jurídica</a></li> <li><a href="">Assunto de Norma Jurídica</a></li>
</ul> </ul>
<h5>Módulo Compilação</h5>
<ul class="small-block-grid-1 medium-block-grid-2 large-block-grid-2">
<li><a href="{% url 'tipodispositivo:list' %}">Tipo de Dispositivo</a></li>
<li><a href="{% url 'tiponota:list' %}">Tipo de Nota</a></li>
<li><a href="{% url 'tipovide:list' %}">Tipo de Vide</a></li>
<li><a href="{% url 'tipopublicacao:list' %}">Tipo de Publicação</a></li>
<li><a href="{% url 'veiculopublicacao:list' %}">Veículo de Públicação</a></li>
<li><a href="{% url 'perfilestruturaltextosnormativos:list' %}">Perfil Estrutural de Textos Normativos</a></li>
</ul>
<h5>Módulo Sessão Plenária</h5> <h5>Módulo Sessão Plenária</h5>
<ul class="small-block-grid-1 medium-block-grid-2 large-block-grid-2"> <ul class="small-block-grid-1 medium-block-grid-2 large-block-grid-2">
<li><a href="{% url 'tiposessaoplenaria:list' %}">Tipo de Sessão Plenária</a></li> <li><a href="{% url 'tiposessaoplenaria:list' %}">Tipo de Sessão Plenária</a></li>

Loading…
Cancel
Save