diff --git a/base/migrations/0001_initial.py b/base/migrations/0001_initial.py index 9518c78f9..8b7f64d04 100644 --- a/base/migrations/0001_initial.py +++ b/base/migrations/0001_initial.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/comissoes/migrations/0001_initial.py b/comissoes/migrations/0001_initial.py index 5f87b599e..42cd116fa 100644 --- a/comissoes/migrations/0001_initial.py +++ b/comissoes/migrations/0001_initial.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/comissoes/migrations/0002_auto_20150729_1310.py b/comissoes/migrations/0002_auto_20150729_1310.py index 7f08b5fe3..eef2e558e 100644 --- a/comissoes/migrations/0002_auto_20150729_1310.py +++ b/comissoes/migrations/0002_auto_20150729_1310.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/compilacao/file2dispositivo.py b/compilacao/file2dispositivo.py new file mode 100644 index 000000000..e6bbb6ae8 --- /dev/null +++ b/compilacao/file2dispositivo.py @@ -0,0 +1,327 @@ +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 += '' + + 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 = '%s' % (''.join(_r)) + result += ''.join(_r) + elif el.isInstanceOf(TableCell): + _r = self._import_table(el, level=level + 1) + if el.getAttribute('numberrowsspanned'): + _r = '' % ( + el.getAttribute('numberrowsspanned'), + ''.join(_r)) + elif el.getAttribute('numbercolumnsspanned'): + _r = '' % ( + el.getAttribute('numbercolumnsspanned'), + ''.join(_r)) + else: + _r = '' % (''.join(_r)) + + result += ''.join(_r) + else: + _r = self.extractText(el) + # _r = self._reduce_terms(_r) + if isinstance(_r, list): + result += '
'.join(_r) + else: + if _r: + result += _r + '
' + + if element.isInstanceOf(Table): + result += '
%s%s%s
' + + 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" + , , and 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) diff --git a/compilacao/forms.py b/compilacao/forms.py index e69de29bb..ff5d31c9f 100644 --- a/compilacao/forms.py +++ b/compilacao/forms.py @@ -0,0 +1,211 @@ +from crispy_forms.helper import FormHelper +from crispy_forms.layout import HTML, Button, Column, Div, Field, Layout, Row +from django import forms +from django.forms.models import ModelForm +from django.utils.translation import ugettext_lazy as _ + +from compilacao.models import Dispositivo, Nota, TipoNota, TipoVide, Vide +from norma.models import TipoNormaJuridica +from sapl.layout import to_column, to_row + + +class UpLoadImportFileForm(forms.Form): + import_file = forms.FileField( + required=True, + label=_('Arquivo formato ODF para Importanção')) + +error_messages = { + 'required': _('Este campo é obrigatório'), + 'invalid': _('URL inválida.') +} + + +class NotaForm(ModelForm): + NPRIV = 1 + NINST = 2 + NPUBL = 3 + + PUBLICIDADE_CHOICES = ( + # Only the owner of the note has visibility. + (NPRIV, _('Nota Privada')), + # All authenticated users have visibility. + (NINST, _('Nota Institucional')), + # All users have visibility. + (NPUBL, _('Nota Pública')), + ) + titulo = forms.CharField(label=' ', required=False) + texto = forms.CharField( + label='', + widget=forms.Textarea, + error_messages=error_messages) + url_externa = forms.URLField( + label='', + required=False, + error_messages=error_messages) + publicidade = forms.ChoiceField( + required=True, + label=_('Publicidade'), + choices=PUBLICIDADE_CHOICES, + widget=forms.Select(attrs={'class': 'selector'})) + + tipo = forms.ModelChoiceField( + required=False, + label=_('Tipo da Nota'), + queryset=TipoNota.objects.all(), + empty_label=None) + + publicacao = forms.DateField( + label=_('Publicação'), + input_formats=['%d/%m/%Y'], + required=True, + widget=forms.DateInput( + format='%d/%m/%Y'), + error_messages=error_messages + ) + efetividade = forms.DateField( + label=_('Efetividade'), + input_formats=['%d/%m/%Y'], + required=True, + widget=forms.DateInput( + format='%d/%m/%Y'), + error_messages=error_messages) + dispositivo = forms.ModelChoiceField(queryset=Dispositivo.objects.all(), + widget=forms.HiddenInput()) + pk = forms.IntegerField(widget=forms.HiddenInput(), + required=False) + + class Meta: + model = Nota + fields = ['titulo', + 'texto', + 'url_externa', + 'publicidade', + 'publicacao', + 'efetividade', + 'tipo', + 'dispositivo', + 'pk' + ] + + def __init__(self, *args, **kwargs): + + row1 = to_row([ + ('tipo', 4), + ]) + row1.append( + Column( + Field( + 'titulo', + placeholder=_('Título da Nota (opcional)') + ), + css_class='columns large-8')) + + row3 = to_row([ + ('publicidade', 3), + ('publicacao', 3), + ('efetividade', 3), + (Button('submit', 'Salvar', + css_class='button primary radius'), 3) + ]) + + self.helper = FormHelper() + self.helper.layout = Layout( + Div(HTML(_('Notas')), css_class='title_form'), + row1, + Field('texto', placeholder=_('Adicionar Nota')), + Field('url_externa', placeholder=_('URL Externa (opcional)')), + row3 + ) + + super(NotaForm, self).__init__(*args, **kwargs) + + +class VideForm(ModelForm): + dispositivo_base = forms.ModelChoiceField( + queryset=Dispositivo.objects.all(), + widget=forms.HiddenInput()) + dispositivo_ref = forms.ModelChoiceField( + queryset=Dispositivo.objects.all(), + widget=forms.HiddenInput()) + + tipo_norma = forms.ModelChoiceField( + queryset=TipoNormaJuridica.objects.all(), + required=False) + num_norma = forms.IntegerField(label=_('Núm. da Norma'), required=False) + ano_norma = forms.IntegerField(label=_('Ano da Norma'), required=False) + + texto = forms.CharField( + label='', + widget=forms.Textarea, + error_messages=error_messages, + required=False) + tipo = forms.ModelChoiceField( + label=_('Tipo do Vide'), + queryset=TipoVide.objects.all(), + required=True) + + busca_dispositivo = forms.CharField( + label=_('Buscar Dispositivo a Referenciar'), + required=False) + pk = forms.IntegerField(widget=forms.HiddenInput(), + required=False) + + class Meta: + model = Vide + fields = ['dispositivo_base', + 'dispositivo_ref', + 'texto', + 'tipo', + 'pk'] + + def __init__(self, *args, **kwargs): + + self.helper = FormHelper() + self.helper.layout = Layout( + + Div(HTML(_('Vides')), css_class='title_form'), + + Row( + to_column(( + Div( + Div(to_column((Field( + 'tipo', + placeholder=_('Selecione um Tipo de Vide')), 12))), + Div(to_column(( + Field( + 'texto', + placeholder=_( + 'Texto Adicional ao Vide')), 12))), + Div(to_column(( + Button( + 'submit', + 'Salvar', + css_class='button primary radius'), 12))) + ), 4)), + to_column(( + Div( + Div(to_column(('tipo_norma', 6))), + Div(to_column(('num_norma', 3)), + to_column(('ano_norma', 3))), + Div(to_column( + (Field( + 'busca_dispositivo', + placeholder=_('Digite palavras, letras, ' + 'números ou algo' + ' que estejam ' + 'no rótulo ou no texto.')), 10)), + to_column(( + Button( + 'buscar', + 'Buscar', + css_class='button btn-busca radius'), 2)) + + ), + to_column( + (Div(css_class='container-busca'), 12)) + ), 8) + ) + ) + ) + + super(VideForm, self).__init__(*args, **kwargs) diff --git a/compilacao/insert_inicial_TipoDispositivo.sql b/compilacao/insert_inicial_TipoDispositivo.sql index 987e0c81f..c37f5f14c 100644 --- a/compilacao/insert_inicial_TipoDispositivo.sql +++ b/compilacao/insert_inicial_TipoDispositivo.sql @@ -1,27 +1,349 @@ -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (1, 'Articulação', 'articulacao', '', '', 0, '.....', '', '', '', '', '', '', True, '1', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (2, 'Ementa', 'ementa', '', '', 0, '.....', '', '', '', '', '', '', False, 'N', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (3, 'Bloco Alteração', 'bloco_alteracao', '', '', 0, '.....', '', '', '', '', '', '', True, '1', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (4, 'Omissis', 'omissis', '', '', 0, '.....', '', '', '', '', '', '', False, '1', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (11, 'Anexo', 'anexo', '', 'Anexo', 0, '-----', '', '
', '', '
', '', '', False, 'I', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (12, 'Parte', 'parte', '', 'Parte', 0, '-----', '', '
', '', '
', '', '', False, 'I', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (13, 'Livro', 'livro', '', 'Livro', 0, '-----', '', '
', '', '
', '', '', False, 'I', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (14, 'Título', 'titulo', '', 'Título', 0, '-----', '', '
', '', '
', '', '', False, 'I', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (15, 'Capítulo', 'capitulo', '', 'Capítulo', 0, '-----', '', '
', '', '
', '', '', False, 'I', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (16, 'Seção', 'secao', '', 'Seção', 0, '-----', '', '
', '', '
', '', '', False, 'I', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (17, 'SubSeção', 'subsecao', '', 'SubSeção', 0, '-----', '', '
', '', '
', '', '', False, '1', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (18, 'Item de Seção', 'itemsecao', '', 'Item', 0, '-----', '', '
', '', '
', '', '', False, '1', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (19, 'Artigo', 'artigo', '', 'Art.', 9, '-----', '', ' – ', '', '', '', '', True, '1', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (20, 'Caput', 'caput', '', '', 0, '', '', '', '', '', '', '', False, 'N', 'N', 'N', 'N', 'N', 'N'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (21, 'Parágrafo', 'paragrafo', '', '§;Parágrafo Único', 9, '-----', '', ' – ', '', '', '', '', False, '1', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (22, 'Inciso', 'inciso', '', '', 0, '.....', '', ' – ', '', '', '', '', False, 'I', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (23, 'Alinea', 'alinea', '', '', 0, '.....', '', ' – ', '', '', '', '', False, 'a', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (24, 'Item', 'item', '', '', 0, '.....', '', ' – ', '', '', '', '', False, '1', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (25, 'Disposições Preliminares', 'disp_preliminares', '', 'Disposições Preliminares', 0, '-----', '', '
', '', '
', '', '', False, 'N', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (26, 'Disposições Gerais', 'disp_gerais', '', 'Disposições Gerais', 0, '-----', '', '
', '', '
', '', '', False, 'N', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (27, 'Disposições Transitórias', 'disp_transitorias', '', 'Disposições Transitórias', 0, '-----', '', '
', '', '
', '', '', False, 'N', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (28, 'Disposições Finais', 'disp_finais', '', 'Disposições Finais', 0, '-----', '', '
', '', '
', '', '', False, 'N', '1', '1', '1', '1', '1'); -insert INTO compilacao_tipodispositivo (id, nome, class_css, rotulo_prefixo_html, rotulo_prefixo_texto, rotulo_ordinal, rotulo_separadores_variacao, 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) VALUES (29, 'Texto Não Estruturado', 'texto_n_estruturado', '', '', 0, '.....', '', '', '', '', '', '',False, '1', '1', '1', '1', '1', '1'); - - - -select setval('compilacao_tipodispositivo_id_seq'::regclass, (select max(id) from compilacao_tipodispositivo)); \ No newline at end of file +-- +-- 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, '', '
', '', '
', '', '', 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, '', '
', '', '
', '', '', 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, '', '
', '', '
', '', '', 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, '', ' – ', '', '', '', '', 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, '', '
', '', '
', '
', '', 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, '', '
', '', '
', '
', '', 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, '', '
', '', '
', '
', '', 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, '', '
', '', '
', '
', '', 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, '', '
', '', '
', '
', '', 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, '', '
', '', '
', '
', '', 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, '', '
', '', '
', '
', '', 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, '', '
', '', '
', '
', '', 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, '', ' – ', '', '', '', '', 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, '', ' – ', '', '', '', '', 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, '', '
', '', '
', '', '', 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, '.', ' – ', '', '', '', '', 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, ')', ' – ', '', '', '', '', 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 +-- + diff --git a/compilacao/migrations/0001_initial.py b/compilacao/migrations/0001_initial.py index d8e06c220..fe763b7f0 100644 --- a/compilacao/migrations/0001_initial.py +++ b/compilacao/migrations/0001_initial.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations from django.conf import settings +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/compilacao/migrations/0002_auto_20150907_2334.py b/compilacao/migrations/0002_auto_20150907_2334.py index f92031d91..da10519c5 100644 --- a/compilacao/migrations/0002_auto_20150907_2334.py +++ b/compilacao/migrations/0002_auto_20150907_2334.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/compilacao/migrations/0003_auto_20150911_1735.py b/compilacao/migrations/0003_auto_20150911_1735.py index 36cfd09af..67ae645a6 100644 --- a/compilacao/migrations/0003_auto_20150911_1735.py +++ b/compilacao/migrations/0003_auto_20150911_1735.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/compilacao/migrations/0004_auto_20150914_0842.py b/compilacao/migrations/0004_auto_20150914_0842.py index 991257507..a871bcc07 100644 --- a/compilacao/migrations/0004_auto_20150914_0842.py +++ b/compilacao/migrations/0004_auto_20150914_0842.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/compilacao/migrations/0005_auto_20150924_1012.py b/compilacao/migrations/0005_auto_20150924_1012.py new file mode 100644 index 000000000..3e4dbe625 --- /dev/null +++ b/compilacao/migrations/0005_auto_20150924_1012.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0004_auto_20150914_0842'), + ] + + operations = [ + migrations.AlterModelOptions( + name='tipodispositivo', + options={'verbose_name_plural': 'Tipos de Dispositivo', 'verbose_name': 'Tipo de Dispositivo', 'ordering': ['id']}, + ), + migrations.RemoveField( + model_name='tipodispositivo', + name='rotulo_separadores_variacao', + ), + migrations.AddField( + model_name='tipodispositivo', + name='rotulo_separador_variacao01', + field=models.CharField(max_length=1, default='-', verbose_name='Separadores entre Numeração e Variação 1', blank=True), + ), + migrations.AddField( + model_name='tipodispositivo', + name='rotulo_separador_variacao12', + field=models.CharField(max_length=1, default='-', verbose_name='Separadores entre Variação 1 e Variação 2', blank=True), + ), + migrations.AddField( + model_name='tipodispositivo', + name='rotulo_separador_variacao23', + field=models.CharField(max_length=1, default='-', verbose_name='Separadores entre Variação 2 e Variação 3', blank=True), + ), + migrations.AddField( + model_name='tipodispositivo', + name='rotulo_separador_variacao34', + field=models.CharField(max_length=1, default='-', verbose_name='Separadores entre Variação 3 e Variação 4', blank=True), + ), + migrations.AddField( + model_name='tipodispositivo', + name='rotulo_separador_variacao45', + field=models.CharField(max_length=1, default='-', verbose_name='Separadores entre Variação 4 e Variação 5', blank=True), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='formato_variacao0', + field=models.CharField(max_length=1, default='1', choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], verbose_name='Formato da Numeração'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='formato_variacao1', + field=models.CharField(max_length=1, default='1', choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], verbose_name='Formato da Variação 1'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='formato_variacao2', + field=models.CharField(max_length=1, default='1', choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], verbose_name='Formato da Variação 2'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='formato_variacao3', + field=models.CharField(max_length=1, default='1', choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], verbose_name='Formato da Variação 3'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='formato_variacao4', + field=models.CharField(max_length=1, default='1', choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], verbose_name='Formato da Variação 4'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='formato_variacao5', + field=models.CharField(max_length=1, default='1', choices=[('1', '1-Numérico'), ('I', 'I-Romano Maiúsculo'), ('i', 'i-Romano Minúsculo'), ('A', 'A-Alfabético Maiúsculo'), ('a', 'a-Alfabético Minúsculo'), ('*', 'Tópico - Sem contagem'), ('N', 'Sem renderização')], verbose_name='Formato da Variação 5'), + ), + ] diff --git a/compilacao/migrations/0006_auto_20150924_1121.py b/compilacao/migrations/0006_auto_20150924_1121.py new file mode 100644 index 000000000..a27cddf2b --- /dev/null +++ b/compilacao/migrations/0006_auto_20150924_1121.py @@ -0,0 +1,54 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0005_auto_20150924_1012'), + ] + + operations = [ + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_ordinal', + field=models.IntegerField(choices=[(-1, 'Numeração Cardinal.'), (0, 'Numeração Ordinal.'), (9, 'Numeração Ordinal até o item nove.')], verbose_name='Tipo de número do rótulo'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_prefixo_texto', + field=models.CharField(blank=True, max_length=30, verbose_name='Prefixo de Edição do rótulo'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_separador_variacao01', + field=models.CharField(blank=True, default='-', max_length=1, verbose_name='Separador entre Numeração e Variação 1'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_separador_variacao12', + field=models.CharField(blank=True, default='-', max_length=1, verbose_name='Separador entre Variação 1 e Variação 2'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_separador_variacao23', + field=models.CharField(blank=True, default='-', max_length=1, verbose_name='Separador entre Variação 2 e Variação 3'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_separador_variacao34', + field=models.CharField(blank=True, default='-', max_length=1, verbose_name='Separador entre Variação 3 e Variação 4'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_separador_variacao45', + field=models.CharField(blank=True, default='-', max_length=1, verbose_name='Separador entre Variação 4 e Variação 5'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_sufixo_texto', + field=models.CharField(blank=True, max_length=30, verbose_name='Sufixo de Edição do rótulo'), + ), + ] diff --git a/compilacao/migrations/0007_auto_20150924_1131.py b/compilacao/migrations/0007_auto_20150924_1131.py new file mode 100644 index 000000000..56d0bcc25 --- /dev/null +++ b/compilacao/migrations/0007_auto_20150924_1131.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', '0006_auto_20150924_1121'), + ] + + operations = [ + migrations.AlterField( + model_name='tipodispositivo', + name='class_css', + field=models.CharField(max_length=20, blank=True, verbose_name='Classe CSS'), + ), + ] diff --git a/compilacao/migrations/0008_auto_20151005_1023.py b/compilacao/migrations/0008_auto_20151005_1023.py new file mode 100644 index 000000000..995d4d9e1 --- /dev/null +++ b/compilacao/migrations/0008_auto_20151005_1023.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0007_auto_20150924_1131'), + ] + + operations = [ + migrations.AddField( + model_name='tipodispositivo', + name='dispositivo_de_articulacao', + field=models.BooleanField(verbose_name='Dispositivo de Articulação (Sem Texto)', default=False, choices=[ + (True, 'Sim'), (False, 'Não')]), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_separador_variacao01', + field=models.CharField( + verbose_name='Separador entre Numeração e Variação 1', default='-', max_length=1), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_separador_variacao12', + field=models.CharField( + verbose_name='Separador entre Variação 1 e Variação 2', default='-', max_length=1), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_separador_variacao23', + field=models.CharField( + verbose_name='Separador entre Variação 2 e Variação 3', default='-', max_length=1), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_separador_variacao34', + field=models.CharField( + verbose_name='Separador entre Variação 3 e Variação 4', default='-', max_length=1), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_separador_variacao45', + field=models.CharField( + verbose_name='Separador entre Variação 4 e Variação 5', default='-', max_length=1), + ), + ] diff --git a/compilacao/migrations/0009_auto_20151007_1635.py b/compilacao/migrations/0009_auto_20151007_1635.py new file mode 100644 index 000000000..1fbc966c8 --- /dev/null +++ b/compilacao/migrations/0009_auto_20151007_1635.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0008_auto_20151005_1023'), + ] + + operations = [ + migrations.AlterField( + model_name='tipodispositivo', + name='rotulo_ordinal', + field=models.IntegerField(choices=[(0, 'Numeração Cardinal.'), (-1, 'Numeração Ordinal.'), (9, 'Numeração Ordinal até o item nove.')], verbose_name='Tipo de número do rótulo'), + ), + migrations.AlterUniqueTogether( + name='dispositivo', + unique_together=set([('norma', 'ordem'), ('norma', 'dispositivo0', 'dispositivo1', 'dispositivo2', 'dispositivo3', 'dispositivo4', 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', 'norma_publicada', 'publicacao')]), + ), + ] diff --git a/compilacao/migrations/0010_auto_20151105_1532.py b/compilacao/migrations/0010_auto_20151105_1532.py new file mode 100644 index 000000000..3a84ae475 --- /dev/null +++ b/compilacao/migrations/0010_auto_20151105_1532.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0009_auto_20151007_1635'), + ] + + operations = [ + migrations.CreateModel( + name='TipoDispositivoRelationship', + fields=[ + ('id', models.AutoField(verbose_name='ID', auto_created=True, primary_key=True, serialize=False)), + ('filho_permitido', models.ForeignKey(related_name='filho_permitido', to='compilacao.TipoDispositivo')), + ('pai', models.ForeignKey(related_name='pai', to='compilacao.TipoDispositivo')), + ], + options={ + 'abstract': False, + }, + ), + migrations.AddField( + model_name='tipodispositivo', + name='relacoes_diretas_pai_filho', + field=models.ManyToManyField(related_name='filhos_permitidos', through='compilacao.TipoDispositivoRelationship', to='compilacao.TipoDispositivo'), + ), + ] diff --git a/compilacao/migrations/0011_auto_20151105_1540.py b/compilacao/migrations/0011_auto_20151105_1540.py new file mode 100644 index 000000000..4c4e0f0f3 --- /dev/null +++ b/compilacao/migrations/0011_auto_20151105_1540.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0010_auto_20151105_1532'), + ] + + operations = [ + migrations.AlterModelOptions( + name='tipodispositivorelationship', + options={'verbose_name': 'Relação Direta Permitida', 'verbose_name_plural': 'Relaçõe Diretas Permitidas', 'ordering': ['pai', 'filho_permitido']}, + ), + migrations.AlterField( + model_name='tipodispositivorelationship', + name='filho_permitido', + field=models.ForeignKey(null=True, to='compilacao.TipoDispositivo', blank=True, default=None, related_name='filho_permitido'), + ), + migrations.AlterUniqueTogether( + name='tipodispositivorelationship', + unique_together=set([('pai', 'filho_permitido')]), + ), + ] diff --git a/compilacao/migrations/0012_auto_20151105_1658.py b/compilacao/migrations/0012_auto_20151105_1658.py new file mode 100644 index 000000000..5ac6c1788 --- /dev/null +++ b/compilacao/migrations/0012_auto_20151105_1658.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0011_auto_20151105_1540'), + ] + + operations = [ + migrations.AddField( + model_name='tipodispositivorelationship', + name='filho_de_insercao_automatica', + field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Filho de Inserção Automática'), + ), + migrations.AlterField( + model_name='tipodispositivo', + name='relacoes_diretas_pai_filho', + field=models.ManyToManyField(to='compilacao.TipoDispositivo', related_name='possiveis_pais', through='compilacao.TipoDispositivoRelationship'), + ), + migrations.AlterField( + model_name='tipodispositivorelationship', + name='filho_permitido', + field=models.ForeignKey(blank=True, default=None, null=True, related_name='pais', to='compilacao.TipoDispositivo'), + ), + migrations.AlterField( + model_name='tipodispositivorelationship', + name='pai', + field=models.ForeignKey(to='compilacao.TipoDispositivo', related_name='filhos_permitidos'), + ), + ] diff --git a/compilacao/migrations/0013_auto_20151106_1843.py b/compilacao/migrations/0013_auto_20151106_1843.py new file mode 100644 index 000000000..5786877e7 --- /dev/null +++ b/compilacao/migrations/0013_auto_20151106_1843.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0012_auto_20151105_1658'), + ] + + operations = [ + migrations.AlterField( + model_name='tipodispositivo', + name='relacoes_diretas_pai_filho', + field=models.ManyToManyField(to='compilacao.TipoDispositivo', related_name='_relacoes_diretas_pai_filho_+', through='compilacao.TipoDispositivoRelationship'), + ), + migrations.AlterField( + model_name='tipodispositivorelationship', + name='filho_permitido', + field=models.ForeignKey(null=True, blank=True, related_name='possiveis_pais', to='compilacao.TipoDispositivo', default=None), + ), + ] diff --git a/compilacao/migrations/0014_auto_20151107_1836.py b/compilacao/migrations/0014_auto_20151107_1836.py new file mode 100644 index 000000000..1e1cf3138 --- /dev/null +++ b/compilacao/migrations/0014_auto_20151107_1836.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', '0013_auto_20151106_1843'), + ] + + operations = [ + migrations.AddField( + model_name='tipodispositivo', + name='quantidade_permitida', + field=models.IntegerField(default=-1, verbose_name='Quantidade permitida dentro de uma Norma'), + ), + ] diff --git a/compilacao/migrations/0015_auto_20151115_2310.py b/compilacao/migrations/0015_auto_20151115_2310.py new file mode 100644 index 000000000..e0ec8b9e6 --- /dev/null +++ b/compilacao/migrations/0015_auto_20151115_2310.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0014_auto_20151107_1836'), + ] + + operations = [ + migrations.AddField( + model_name='tipodispositivo', + name='dispositivo_de_alteracao', + field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Dispositivo de Alteração'), + ), + migrations.AlterField( + model_name='tipodispositivorelationship', + name='filho_permitido', + field=models.ForeignKey(related_name='possiveis_pais', to='compilacao.TipoDispositivo'), + ), + ] diff --git a/compilacao/migrations/0016_auto_20151119_0950.py b/compilacao/migrations/0016_auto_20151119_0950.py new file mode 100644 index 000000000..807940b86 --- /dev/null +++ b/compilacao/migrations/0016_auto_20151119_0950.py @@ -0,0 +1,49 @@ +# -*- 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', '0015_auto_20151115_2310'), + ] + + operations = [ + migrations.CreateModel( + name='PerfilEstruturalTextosNormativos', + fields=[ + ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), + ('nome', models.CharField(max_length=50, verbose_name='Nome')), + ], + options={ + 'verbose_name_plural': 'Perfis Estruturais de Textos Normativos', + 'verbose_name': 'Perfil Estrutural de Textos Normativos', + }, + ), + migrations.RemoveField( + model_name='dispositivo', + name='timestamp', + ), + migrations.AddField( + model_name='dispositivo', + name='created', + field=models.DateTimeField(default=datetime.datetime(2015, 11, 19, 11, 49, 55, 455058, tzinfo=utc), auto_now_add=True, verbose_name='created'), + preserve_default=False, + ), + migrations.AddField( + model_name='dispositivo', + name='modified', + field=models.DateTimeField(auto_now=True, default=datetime.datetime(2015, 11, 19, 11, 50, 5, 86839, tzinfo=utc), verbose_name='modified'), + preserve_default=False, + ), + migrations.AddField( + model_name='tipodispositivorelationship', + name='perfil', + field=models.ForeignKey(blank=True, related_name='+', null=True, default=None, to='compilacao.PerfilEstruturalTextosNormativos'), + ), + ] diff --git a/compilacao/migrations/0017_auto_20151119_1035.py b/compilacao/migrations/0017_auto_20151119_1035.py new file mode 100644 index 000000000..8a902b838 --- /dev/null +++ b/compilacao/migrations/0017_auto_20151119_1035.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0016_auto_20151119_0950'), + ] + + operations = [ + migrations.AddField( + model_name='perfilestruturaltextosnormativos', + name='padrao', + field=models.BooleanField(verbose_name='Padrão', choices=[(True, 'Sim'), (False, 'Não')], default=False), + ), + migrations.AlterField( + model_name='tipodispositivorelationship', + name='perfil', + field=models.ForeignKey(to='compilacao.PerfilEstruturalTextosNormativos'), + ), + migrations.AlterUniqueTogether( + name='tipodispositivorelationship', + unique_together=set([('pai', 'filho_permitido', 'perfil')]), + ), + ] diff --git a/compilacao/migrations/0018_auto_20151119_1052.py b/compilacao/migrations/0018_auto_20151119_1052.py new file mode 100644 index 000000000..00e78daef --- /dev/null +++ b/compilacao/migrations/0018_auto_20151119_1052.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0017_auto_20151119_1035'), + ] + + operations = [ + migrations.RemoveField( + model_name='tipodispositivo', + name='quantidade_permitida', + ), + migrations.AddField( + model_name='tipodispositivorelationship', + name='quantidade_permitida', + field=models.IntegerField(default=-1, verbose_name='Quantidade permitida nesta relação'), + ), + ] diff --git a/compilacao/migrations/0019_auto_20151119_1120.py b/compilacao/migrations/0019_auto_20151119_1120.py new file mode 100644 index 000000000..f5a461faf --- /dev/null +++ b/compilacao/migrations/0019_auto_20151119_1120.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0018_auto_20151119_1052'), + ] + + operations = [ + migrations.AddField( + model_name='perfilestruturaltextosnormativos', + name='sigla', + field=models.CharField(max_length=10, verbose_name='Sigla', default='LC95'), + preserve_default=False, + ), + ] diff --git a/compilacao/migrations/0020_auto_20151119_1126.py b/compilacao/migrations/0020_auto_20151119_1126.py new file mode 100644 index 000000000..d63e4c8d2 --- /dev/null +++ b/compilacao/migrations/0020_auto_20151119_1126.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0019_auto_20151119_1120'), + ] + + operations = [ + migrations.AlterField( + model_name='perfilestruturaltextosnormativos', + name='sigla', + field=models.CharField( + max_length=10, verbose_name='Sigla', unique=True), + ), + ] diff --git a/compilacao/migrations/0021_auto_20151119_1617.py b/compilacao/migrations/0021_auto_20151119_1617.py new file mode 100644 index 000000000..e378f4a60 --- /dev/null +++ b/compilacao/migrations/0021_auto_20151119_1617.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0020_auto_20151119_1126'), + ] + + operations = [ + migrations.AlterModelOptions( + name='perfilestruturaltextosnormativos', + options={'verbose_name': 'Perfil Estrutural de Textos Normativos', 'verbose_name_plural': 'Perfis Estruturais de Textos Normativos', 'ordering': ['-padrao', 'sigla']}, + ), + migrations.AddField( + model_name='tipodispositivorelationship', + name='permitir_variacao', + field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], verbose_name='Permitir Variação Numérica', default=True), + ), + ] diff --git a/compilacao/migrations/0022_auto_20151120_1503.py b/compilacao/migrations/0022_auto_20151120_1503.py new file mode 100644 index 000000000..15eee6015 --- /dev/null +++ b/compilacao/migrations/0022_auto_20151120_1503.py @@ -0,0 +1,33 @@ +# -*- 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', '0021_auto_20151119_1617'), + ] + + operations = [ + migrations.RemoveField( + model_name='publicacao', + name='timestamp', + ), + migrations.AddField( + model_name='publicacao', + name='created', + field=models.DateTimeField(verbose_name='created', auto_now_add=True, default=datetime.datetime(2015, 11, 20, 17, 3, 45, 347063, tzinfo=utc)), + preserve_default=False, + ), + migrations.AddField( + model_name='publicacao', + name='modified', + field=models.DateTimeField(verbose_name='modified', default=datetime.datetime(2015, 11, 20, 17, 3, 51, 67108, tzinfo=utc), auto_now=True), + preserve_default=False, + ), + ] diff --git a/compilacao/migrations/0023_auto_20151120_1529.py b/compilacao/migrations/0023_auto_20151120_1529.py new file mode 100644 index 000000000..1a78f7212 --- /dev/null +++ b/compilacao/migrations/0023_auto_20151120_1529.py @@ -0,0 +1,29 @@ +# -*- 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', '0022_auto_20151120_1503'), + ] + + operations = [ + migrations.AddField( + model_name='vide', + name='created', + field=models.DateTimeField(verbose_name='created', auto_now_add=True, default=datetime.datetime(2015, 11, 20, 17, 29, 27, 32283, tzinfo=utc)), + preserve_default=False, + ), + migrations.AddField( + model_name='vide', + name='modified', + field=models.DateTimeField(verbose_name='modified', auto_now=True, default=datetime.datetime(2015, 11, 20, 17, 29, 31, 856683, tzinfo=utc)), + preserve_default=False, + ), + ] diff --git a/compilacao/migrations/0024_auto_20151120_1814.py b/compilacao/migrations/0024_auto_20151120_1814.py new file mode 100644 index 000000000..47d696f33 --- /dev/null +++ b/compilacao/migrations/0024_auto_20151120_1814.py @@ -0,0 +1,37 @@ +# -*- 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', '0023_auto_20151120_1529'), + ] + + operations = [ + migrations.RemoveField( + model_name='nota', + name='data_criacao', + ), + migrations.RemoveField( + model_name='vide', + name='data_criacao', + ), + migrations.AddField( + model_name='nota', + name='created', + field=models.DateTimeField(auto_now_add=True, default=datetime.datetime(2015, 11, 20, 20, 13, 57, 385520, tzinfo=utc), verbose_name='created'), + preserve_default=False, + ), + migrations.AddField( + model_name='nota', + name='modified', + field=models.DateTimeField(auto_now=True, default=datetime.datetime(2015, 11, 20, 20, 14, 3, 360297, tzinfo=utc), verbose_name='modified'), + preserve_default=False, + ), + ] diff --git a/compilacao/migrations/0025_auto_20151122_1744.py b/compilacao/migrations/0025_auto_20151122_1744.py new file mode 100644 index 000000000..1b69eb301 --- /dev/null +++ b/compilacao/migrations/0025_auto_20151122_1744.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0024_auto_20151120_1814'), + ] + + operations = [ + migrations.RenameField( + model_name='nota', + old_name='efetifidade', + new_name='efetividade', + ), + migrations.AlterField( + model_name='nota', + name='dispositivo', + field=models.ForeignKey(to='compilacao.Dispositivo', related_name='notas', verbose_name='Dispositivo da Nota'), + ), + ] diff --git a/compilacao/migrations/0026_auto_20151122_1756.py b/compilacao/migrations/0026_auto_20151122_1756.py new file mode 100644 index 000000000..9d75c3f91 --- /dev/null +++ b/compilacao/migrations/0026_auto_20151122_1756.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0025_auto_20151122_1744'), + ] + + operations = [ + migrations.AlterModelOptions( + name='nota', + options={'verbose_name': 'Nota', 'ordering': ['publicacao'], 'verbose_name_plural': 'Notas'}, + ), + migrations.AddField( + model_name='nota', + name='titulo', + field=models.CharField(verbose_name='Título', max_length=100, default=''), + ), + migrations.AlterField( + model_name='nota', + name='texto', + field=models.TextField(verbose_name='Texto'), + ), + ] diff --git a/compilacao/migrations/0027_auto_20151130_1632.py b/compilacao/migrations/0027_auto_20151130_1632.py new file mode 100644 index 000000000..81c64d951 --- /dev/null +++ b/compilacao/migrations/0027_auto_20151130_1632.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0026_auto_20151122_1756'), + ] + + operations = [ + migrations.AlterModelOptions( + name='nota', + options={'verbose_name': 'Nota', 'ordering': ['-publicacao', '-modified'], 'verbose_name_plural': 'Notas'}, + ), + migrations.AlterField( + model_name='nota', + name='titulo', + field=models.CharField(verbose_name='Título', default='', blank=True, max_length=100), + ), + migrations.AlterField( + model_name='vide', + name='dispositivo_base', + field=models.ForeignKey(verbose_name='Dispositivo Base', related_name='cita', to='compilacao.Dispositivo'), + ), + migrations.AlterField( + model_name='vide', + name='dispositivo_ref', + field=models.ForeignKey(verbose_name='Dispositivo Referido', related_name='citado', to='compilacao.Dispositivo'), + ), + ] diff --git a/compilacao/migrations/0028_auto_20151201_0042.py b/compilacao/migrations/0028_auto_20151201_0042.py new file mode 100644 index 000000000..990c31fbc --- /dev/null +++ b/compilacao/migrations/0028_auto_20151201_0042.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', '0027_auto_20151130_1632'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='vide', + unique_together=set([('dispositivo_base', 'dispositivo_ref')]), + ), + ] diff --git a/compilacao/migrations/0029_auto_20151201_1611.py b/compilacao/migrations/0029_auto_20151201_1611.py new file mode 100644 index 000000000..34055d72c --- /dev/null +++ b/compilacao/migrations/0029_auto_20151201_1611.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', '0028_auto_20151201_0042'), + ] + + operations = [ + migrations.AlterField( + model_name='nota', + name='publicidade', + field=models.PositiveSmallIntegerField(verbose_name='Nível de Publicidade', choices=[(1, 'Nota Privada'), (2, 'Nota Institucional'), (3, 'Nota Pública')]), + ), + ] diff --git a/compilacao/models.py b/compilacao/models.py index 7688efcb6..e6df58898 100644 --- a/compilacao/models.py +++ b/compilacao/models.py @@ -1,11 +1,63 @@ +from datetime import datetime + from django.contrib.auth.models import User from django.db import models +from django.db.models import F, Q +from django.db.models.aggregates import Max from django.utils.translation import ugettext_lazy as _ from norma.models import NormaJuridica +from sapl import utils from sapl.utils import YES_NO_CHOICES +class TimestampedMixin(models.Model): + created = models.DateTimeField( + verbose_name=_('created'), + editable=False, blank=True, auto_now_add=True) + modified = models.DateTimeField( + verbose_name=_('modified'), editable=False, blank=True, auto_now=True) + + class Meta: + abstract = True + + +class BaseModel(models.Model): + + class Meta: + abstract = True + + def clean(self): + """ + Check for instances with null values in unique_together fields. + """ + from django.core.exceptions import ValidationError + + super(BaseModel, self).clean() + + for field_tuple in self._meta.unique_together[:]: + unique_filter = {} + unique_fields = [] + null_found = False + for field_name in field_tuple: + field_value = getattr(self, field_name) + if getattr(self, field_name) is None: + unique_filter['%s__isnull' % field_name] = True + null_found = True + else: + unique_filter['%s' % field_name] = field_value + unique_fields.append(field_name) + if null_found: + unique_queryset = self.__class__.objects.filter( + **unique_filter) + if self.pk: + unique_queryset = unique_queryset.exclude(pk=self.pk) + if unique_queryset.exists(): + msg = self.unique_error_message( + self.__class__, tuple(unique_fields)) + raise ValidationError(msg) + + class TipoNota(models.Model): sigla = models.CharField( max_length=10, unique=True, verbose_name=_('Sigla')) @@ -34,7 +86,23 @@ class TipoVide(models.Model): return '%s: %s' % (self.sigla, self.nome) -class TipoDispositivo(models.Model): +class TipoDispositivo(BaseModel): + """ + - no attributo rotulo_prefixo_texto, caso haja um ';' (ponto e vírgula), e + só pode haver 1 ';', o método [def rotulo_padrao] considerará que o + rótulo do dispositivo deverá ser escrito com o contéudo após o ';' + caso para o pai do dispositivo em processamento exista apenas + o próprio como filho + + - ao o usuário trocar manualmente o rotulo para a opção após o ';' + necessáriamente o numeração do dispositivo deve ser redusida a 0, + podendo manter as variações + + -tipo de dispositivos com contagem continua são continua porém encapsuladas + em articulação... mudando articulação, reinicia-se a contagem + + - revogação de dispositivo_de_articulacao revogam todo o conteúdo + """ FNC1 = '1' FNCI = 'I' FNCi = 'i' @@ -43,18 +111,32 @@ class TipoDispositivo(models.Model): FNC8 = '*' FNCN = 'N' FORMATO_NUMERACAO_CHOICES = ( - (FNC1, _('(1) Numérico')), - (FNCI, _('(I) Romano Maiúsculo')), - (FNCi, _('(i) Romano Minúsculo')), - (FNCA, _('(A) Alfabético Maiúsculo')), - (FNCa, _('(a) Alfabético Minúsculo')), + (FNC1, _('1-Numérico')), + (FNCI, _('I-Romano Maiúsculo')), + (FNCi, _('i-Romano Minúsculo')), + (FNCA, _('A-Alfabético Maiúsculo')), + (FNCa, _('a-Alfabético Minúsculo')), (FNC8, _('Tópico - Sem contagem')), (FNCN, _('Sem renderização')), ) + # Choice básico. Porém pode ser melhorado dando a opção de digitar outro + # valor maior que zero e diferente de nove. A App de edição de rótulo, + # entenderá que deverá colocar ordinal até o valor armazenado ou em tudo + # se for igual -1. + TNRT = -1 + TNRN = 0 + TNR9 = 9 + TIPO_NUMERO_ROTULO = ( + (TNRN, _('Numeração Cardinal.')), + (TNRT, _('Numeração Ordinal.')), + (TNR9, _('Numeração Ordinal até o item nove.')), + ) + nome = models.CharField( max_length=50, unique=True, verbose_name=_('Nome')) class_css = models.CharField( + blank=True, max_length=20, verbose_name=_('Classe CSS')) rotulo_prefixo_html = models.CharField( @@ -64,17 +146,39 @@ class TipoDispositivo(models.Model): rotulo_prefixo_texto = models.CharField( blank=True, max_length=30, - verbose_name=_('Prefixo de construção do rótulo')) + verbose_name=_('Prefixo de Edição do rótulo')) rotulo_ordinal = models.IntegerField( + choices=TIPO_NUMERO_ROTULO, verbose_name=_('Tipo de número do rótulo')) - rotulo_separadores_variacao = models.CharField( - blank=True, - max_length=5, - verbose_name=_('Separadores das Variações')) + rotulo_separador_variacao01 = models.CharField( + blank=False, + max_length=1, + default="-", + verbose_name=_('Separador entre Numeração e Variação 1')) + rotulo_separador_variacao12 = models.CharField( + blank=False, + max_length=1, + default="-", + verbose_name=_('Separador entre Variação 1 e Variação 2')) + rotulo_separador_variacao23 = models.CharField( + blank=False, + max_length=1, + default="-", + verbose_name=_('Separador entre Variação 2 e Variação 3')) + rotulo_separador_variacao34 = models.CharField( + blank=False, + max_length=1, + default="-", + verbose_name=_('Separador entre Variação 3 e Variação 4')) + rotulo_separador_variacao45 = models.CharField( + blank=False, + max_length=1, + default="-", + verbose_name=_('Separador entre Variação 4 e Variação 5')) rotulo_sufixo_texto = models.CharField( blank=True, max_length=30, - verbose_name=_('Sufixo de construção do rótulo')) + verbose_name=_('Sufixo de Edição do rótulo')) rotulo_sufixo_html = models.CharField( blank=True, max_length=100, @@ -97,6 +201,14 @@ class TipoDispositivo(models.Model): verbose_name=_('Sufixo html da nota automática')) contagem_continua = models.BooleanField( choices=YES_NO_CHOICES, verbose_name=_('Contagem contínua')) + dispositivo_de_articulacao = models.BooleanField( + choices=YES_NO_CHOICES, + default=False, + verbose_name=_('Dispositivo de Articulação (Sem Texto)')) + dispositivo_de_alteracao = models.BooleanField( + choices=YES_NO_CHOICES, + default=False, + verbose_name=_('Dispositivo de Alteração')) formato_variacao0 = models.CharField( max_length=1, choices=FORMATO_NUMERACAO_CHOICES, @@ -128,13 +240,107 @@ class TipoDispositivo(models.Model): default=FNC1, verbose_name=_('Formato da Variação 5')) + relacoes_diretas_pai_filho = models.ManyToManyField( + 'self', + through='TipoDispositivoRelationship', + through_fields=('pai', 'filho_permitido'), + symmetrical=False, + related_name='+') + class Meta: verbose_name = _('Tipo de Dispositivo') verbose_name_plural = _('Tipos de Dispositivo') + ordering = ['id'] def __str__(self): return self.nome + def permitido_inserir_in( + self, pai_relativo, include_relative_autos=True, perfil_pk=None): + + if not perfil_pk: + perfis = PerfilEstruturalTextosNormativos.objects.filter( + padrao=True)[:1] + + if not perfis.exists(): + return False + + perfil_pk = perfis[0].pk + + pp = self.possiveis_pais.filter(pai=pai_relativo, perfil_id=perfil_pk) + if pp.exists(): + if not include_relative_autos: + if pp[0].filho_de_insercao_automatica: + return False + return True + return False + + def permitido_variacao( + self, base, perfil_pk=None): + + if not perfil_pk: + perfis = PerfilEstruturalTextosNormativos.objects.filter( + padrao=True)[:1] + + if not perfis.exists(): + return False + + perfil_pk = perfis[0].pk + + pp = self.possiveis_pais.filter(pai=base, perfil_id=perfil_pk) + if pp.exists(): + if pp[0].permitir_variacao: + return True + return False + + +class PerfilEstruturalTextosNormativos(BaseModel): + sigla = models.CharField( + max_length=10, unique=True, verbose_name=_('Sigla')) + nome = models.CharField(max_length=50, verbose_name=_('Nome')) + padrao = models.BooleanField( + default=False, + choices=YES_NO_CHOICES, verbose_name=_('Padrão')) + + class Meta: + verbose_name = _('Perfil Estrutural de Textos Normativos') + verbose_name_plural = _('Perfis Estruturais de Textos Normativos') + + ordering = ['-padrao', 'sigla'] + + def __str__(self): + return self.nome + + +class TipoDispositivoRelationship(BaseModel): + pai = models.ForeignKey(TipoDispositivo, related_name='filhos_permitidos') + filho_permitido = models.ForeignKey( + TipoDispositivo, + related_name='possiveis_pais') + perfil = models.ForeignKey(PerfilEstruturalTextosNormativos) + filho_de_insercao_automatica = models.BooleanField( + default=False, + choices=YES_NO_CHOICES, verbose_name=_('Filho de Inserção Automática')) + permitir_variacao = models.BooleanField( + default=True, + choices=YES_NO_CHOICES, verbose_name=_('Permitir Variação Numérica')) + + quantidade_permitida = models.IntegerField( + default=-1, + verbose_name=_('Quantidade permitida nesta relação')) + + class Meta: + verbose_name = _('Relação Direta Permitida') + verbose_name_plural = _('Relaçõe Diretas Permitidas') + ordering = ['pai', 'filho_permitido'] + unique_together = ( + ('pai', 'filho_permitido', 'perfil'),) + + def __str__(self): + return '%s - %s' % ( + self.pai.nome, + self.filho_permitido.nome if self.filho_permitido else '') + class TipoPublicacao(models.Model): sigla = models.CharField( @@ -162,7 +368,7 @@ class VeiculoPublicacao(models.Model): return '%s: %s' % (self.sigla, self.nome) -class Publicacao(models.Model): +class Publicacao(TimestampedMixin): norma = models.ForeignKey( NormaJuridica, verbose_name=_('Norma Jurídica')) veiculo_publicacao = models.ForeignKey( @@ -174,7 +380,6 @@ class Publicacao(models.Model): blank=True, null=True, verbose_name=_('Pg. Início')) pagina_fim = models.PositiveIntegerField( blank=True, null=True, verbose_name=_('Pg. Fim')) - timestamp = models.DateTimeField() class Meta: verbose_name = _('Publicação') @@ -184,14 +389,17 @@ class Publicacao(models.Model): return '%s: %s' % (self.veiculo_publicacao, self.publicacao) -class Dispositivo(models.Model): +class Dispositivo(BaseModel, TimestampedMixin): TEXTO_PADRAO_DISPOSITIVO_REVOGADO = _('(Revogado)') + INTERVALO_ORDEM = 1000 ordem = models.PositiveIntegerField( default=0, verbose_name=_('Ordem de Renderização')) ordem_bloco_atualizador = models.PositiveIntegerField( default=0, verbose_name=_('Ordem de Renderização no Bloco Atualizador')) + + # apenas articulacao recebe nivel zero nivel = models.PositiveIntegerField( default=0, blank=True, @@ -261,8 +469,6 @@ class Dispositivo(models.Model): choices=YES_NO_CHOICES, verbose_name=_('Visibilidade na Norma Publicada')) - timestamp = models.DateTimeField() - tipo_dispositivo = models.ForeignKey( TipoDispositivo, related_name='dispositivos_do_tipo_set', @@ -323,6 +529,7 @@ class Dispositivo(models.Model): 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', + 'norma_publicada', 'publicacao',), ) @@ -331,9 +538,500 @@ class Dispositivo(models.Model): 'rotulo': (self.rotulo if self.rotulo else self.tipo_dispositivo), 'norma': self.norma} + def rotulo_padrao(self, local_insert=0, for_insert_in=0): + """ + 0 = Sem inserção - com nomeclatura padrao + 1 = Inserção com transformação de parágrafo único para §1º """ + + r = '' + t = self.tipo_dispositivo + prefixo = t.rotulo_prefixo_texto.split(';') + + if len(prefixo) > 1: + + if for_insert_in: + irmaos_mesmo_tipo = Dispositivo.objects.filter( + tipo_dispositivo=self.tipo_dispositivo, + dispositivo_pai=self) + else: + irmaos_mesmo_tipo = Dispositivo.objects.filter( + tipo_dispositivo=self.tipo_dispositivo, + dispositivo_pai=self.dispositivo_pai) + + if not irmaos_mesmo_tipo.exists(): + r += prefixo[1] + else: + if self.dispositivo0 == 0: + if for_insert_in: + if irmaos_mesmo_tipo.count() == 0: + r += prefixo[0] + r += self.get_nomenclatura_completa() + elif irmaos_mesmo_tipo.count() == 1: + self.transform_in_next() + self.transform_in_next() + r += 'Transformar %s em %s%s e criar %s1%s' % ( + prefixo[1].strip(), + prefixo[0], + self.get_nomenclatura_completa(), + prefixo[0], + 'º' if + self.tipo_dispositivo.rotulo_ordinal >= 0 + else '',) + else: + self.dispositivo0 = 1 + r += prefixo[0] + r += self.get_nomenclatura_completa() + + else: + if local_insert: + r += prefixo[1].strip() + r += self.get_nomenclatura_completa() + else: + self.dispositivo0 = 1 + r += prefixo[0] + r += self.get_nomenclatura_completa() + else: + if local_insert == 1 and irmaos_mesmo_tipo.count() == 1: + + if Dispositivo.objects.filter( + ordem__gt=self.ordem, + ordem__lt=irmaos_mesmo_tipo[0].ordem).exists(): + self.dispositivo0 = 2 + r += 'Transformar %s em %s%s e criar %s1%s' % ( + prefixo[1].strip(), + prefixo[0], + self.get_nomenclatura_completa(), + prefixo[0], + 'º' if + self.tipo_dispositivo.rotulo_ordinal >= 0 + else '',) + else: + r += 'Transformar %s em %s%s e criar %s 2%s' % ( + prefixo[1].strip(), + prefixo[0], + self.get_nomenclatura_completa(), + prefixo[0], + 'º' if + self.tipo_dispositivo. + rotulo_ordinal >= 0 else '',) + else: + r += prefixo[0] + r += self.get_nomenclatura_completa() + else: + r += prefixo[0] + r += self.get_nomenclatura_completa() + + r += t.rotulo_sufixo_texto + + return r + + def get_profundidade(self): + numero = self.get_numero_completo() + for i in range(len(numero)): + if numero[i] != 0 or i == 0: + continue + return i - 1 + return i -class Vide(models.Model): - data_criacao = models.DateTimeField(verbose_name=_('Data de Criação')) + def transform_in_next(self, direcao_variacao=0): + """ + direcao_variacao é lida da seguinte forma: + -1 = reduza 1 variacao e incremente 1 + 1 = aumente 1 variacao e incremente 1 + -2 = reduza 2 variacoes e incremente 1 + 2 = aumente 2 variacoes e incremente 1 + + """ + numero = self.get_numero_completo() + + flag_variacao = 0 + flag_direcao = False + + if direcao_variacao <= 0: + numero.reverse() + for i in range(len(numero)): + if not flag_direcao and numero[i] == 0 and i < len(numero) - 1: + continue + + if direcao_variacao < 0: + numero[i] = 0 + direcao_variacao += 1 + flag_variacao -= 1 + + if i == len(numero) - 1: + flag_direcao = False + else: + flag_direcao = True + continue + break + numero[i] += 1 + numero.reverse() + + elif direcao_variacao > 0: + for i in range(len(numero)): + if numero[i] != 0 or i == 0: + continue + + if direcao_variacao > 0: + numero[i] = 1 + direcao_variacao -= 1 + flag_variacao += 1 + + flag_direcao = True + if direcao_variacao == 0: + break + continue + if not flag_direcao: + flag_direcao = True + numero[i] += 1 + + self.set_numero_completo(numero) + + return (flag_direcao, flag_variacao) + + def set_numero_completo(self, *numero): + numero = numero[0] + self.dispositivo0 = numero[0] + self.dispositivo1 = numero[1] + self.dispositivo2 = numero[2] + self.dispositivo3 = numero[3] + self.dispositivo4 = numero[4] + self.dispositivo5 = numero[5] + + def get_numero_completo(self): + return [ + self.dispositivo0, + self.dispositivo1, + self.dispositivo2, + self.dispositivo3, + self.dispositivo4, + self.dispositivo5] + + def get_nomenclatura_completa(self): + + numero = self.get_numero_completo() + + formato = [ + self.tipo_dispositivo.formato_variacao0, + self.tipo_dispositivo.formato_variacao1, + self.tipo_dispositivo.formato_variacao2, + self.tipo_dispositivo.formato_variacao3, + self.tipo_dispositivo.formato_variacao4, + self.tipo_dispositivo.formato_variacao5] + + separadores = [ + '', + self.tipo_dispositivo.rotulo_separador_variacao01, + self.tipo_dispositivo.rotulo_separador_variacao12, + self.tipo_dispositivo.rotulo_separador_variacao23, + self.tipo_dispositivo.rotulo_separador_variacao34, + self.tipo_dispositivo.rotulo_separador_variacao45] + + numero.reverse() + formato.reverse() + separadores.reverse() + + result = '' + + flag_obrigatorio = False + for i in range(len(numero)): + if not flag_obrigatorio and numero[i] == 0: + continue + flag_obrigatorio = True + + if i + 1 == len(numero) and numero[i] == 0: + continue + + if i + 1 == len(numero) and \ + (self.tipo_dispositivo.rotulo_ordinal == -1 or + 0 < numero[i] <= self.tipo_dispositivo.rotulo_ordinal): + result = 'º' + result + + if formato[i] == TipoDispositivo.FNC1: + result = separadores[i] + str(numero[i]) + result + elif formato[i] == TipoDispositivo.FNCI: + result = separadores[i] + \ + utils.int_to_roman(numero[i]) + result + elif formato[i] == TipoDispositivo.FNCi: + result = separadores[i] + \ + utils.int_to_roman(numero[i]).lower() + result + elif formato[i] == TipoDispositivo.FNCA: + result = separadores[i] + \ + utils.int_to_letter(numero[i]) + result + elif formato[i] == TipoDispositivo.FNCa: + result = separadores[i] + \ + utils.int_to_letter(numero[i]).lower() + result + elif formato[i] == TipoDispositivo.FNC8: + result = separadores[i] + '*' + result + elif formato[i] == TipoDispositivo.FNCN: + result = separadores[i] + result + + return result + + def criar_espaco(self, espaco_a_criar, local): + + if local == 'add_next': + proximo_bloco = Dispositivo.objects.filter( + ordem__gt=self.ordem, + nivel__lte=self.nivel, + norma_id=self.norma_id)[:1] + elif local == 'add_in': + proximo_bloco = Dispositivo.objects.filter( + ordem__gt=self.ordem, + nivel__lte=self.nivel + 1, + norma_id=self.norma_id).exclude( + tipo_dispositivo__class_css='caput')[:1] + else: + proximo_bloco = Dispositivo.objects.filter( + ordem__gte=self.ordem, + norma_id=self.norma_id)[:1] + + if proximo_bloco.exists(): + ordem = proximo_bloco[0].ordem + proximo_bloco = Dispositivo.objects.order_by('-ordem').filter( + ordem__gte=ordem, + norma_id=self.norma_id) + + proximo_bloco.update(ordem=F('ordem') + 1) + proximo_bloco.update( + ordem=F('ordem') + ( + Dispositivo.INTERVALO_ORDEM * espaco_a_criar - 1)) + else: + # inserção no fim da norma + ordem_max = Dispositivo.objects.order_by( + 'ordem').filter(norma_id=self.norma_id).aggregate( + Max('ordem')) + if ordem_max['ordem__max'] is None: + raise Exception( + 'Não existem registros base nesta Norma') + ordem = ordem_max['ordem__max'] + Dispositivo.INTERVALO_ORDEM + return ordem + + def organizar_niveis(self): + if self.dispositivo_pai is None: + self.nivel = 0 + else: + self.nivel = self.dispositivo_pai.nivel + 1 + + filhos = Dispositivo.objects.filter( + dispositivo_pai_id=self.pk) + + for filho in filhos: + filho.nivel = self.nivel + 1 + filho.save() + filho.organizar_niveis() + + def get_parents(self, ordem='desc'): + dp = self + p = [] + while dp.dispositivo_pai is not None: + dp = dp.dispositivo_pai + if ordem == 'desc': + p.append(dp) + else: + p.insert(0, dp) + + return p + + def get_parents_asc(self): + return self.get_parents(ordem='asc') + + def incrementar_irmaos(self, variacao=0, tipoadd=[]): + + if not self.tipo_dispositivo.contagem_continua: + irmaos = list(Dispositivo.objects.filter( + Q(ordem__gt=self.ordem) | Q(dispositivo0=0), + dispositivo_pai_id=self.dispositivo_pai_id, + tipo_dispositivo_id=self.tipo_dispositivo.pk)) + + elif self.dispositivo_pai is None: + irmaos = list(Dispositivo.objects.filter( + ordem__gt=self.ordem, + norma_id=self.norma_id, + tipo_dispositivo_id=self.tipo_dispositivo.pk)) + + else: # contagem continua restrita a articulacao + proxima_articulacao = self.get_proximo_nivel_zero() + + if proxima_articulacao is None: + irmaos = list(Dispositivo.objects.filter( + ordem__gt=self.ordem, + norma_id=self.norma_id, + tipo_dispositivo_id=self.tipo_dispositivo.pk)) + else: + irmaos = list(Dispositivo.objects.filter( + Q(ordem__gt=self.ordem) & + Q(ordem__lt=proxima_articulacao.ordem), + norma_id=self.norma_id, + tipo_dispositivo_id=self.tipo_dispositivo.pk)) + + dp_profundidade = self.get_profundidade() + + irmaos_a_salvar = [] + ultimo_irmao = None + for irmao in irmaos: + + if irmao.ordem <= self.ordem or irmao.dispositivo0 == 0: + irmaos_a_salvar.append(irmao) + continue + + irmao_profundidade = irmao.get_profundidade() + if irmao_profundidade < dp_profundidade: + break + + if irmao.get_numero_completo() < self.get_numero_completo(): + if irmao_profundidade > dp_profundidade: + if ultimo_irmao is None: + irmao.transform_in_next( + dp_profundidade - irmao_profundidade) + irmao.transform_in_next( + irmao_profundidade - dp_profundidade) + else: + irmao.set_numero_completo( + ultimo_irmao.get_numero_completo()) + + irmao.transform_in_next( + irmao_profundidade - + ultimo_irmao.get_profundidade()) + + ultimo_irmao = irmao + else: + irmao.transform_in_next() + irmao.rotulo = irmao.rotulo_padrao() + irmaos_a_salvar.append(irmao) + + elif irmao.get_numero_completo() == self.get_numero_completo(): + irmao_numero = irmao.get_numero_completo() + irmao_numero[dp_profundidade] += 1 + irmao.set_numero_completo(irmao_numero) + irmao.rotulo = irmao.rotulo_padrao() + irmaos_a_salvar.append(irmao) + else: + if dp_profundidade < irmao_profundidade and \ + dp_profundidade > 0 and \ + self.get_numero_completo()[:dp_profundidade] >= \ + irmao.get_numero_completo()[:dp_profundidade] and\ + ultimo_irmao is None: + break + else: + ultimo_irmao = irmao + irmao_numero = irmao.get_numero_completo() + irmao_numero[dp_profundidade] += 1 + irmao.set_numero_completo(irmao_numero) + irmao.rotulo = irmao.rotulo_padrao() + irmaos_a_salvar.append(irmao) + + irmaos_a_salvar.reverse() + for irmao in irmaos_a_salvar: + if (irmao.dispositivo0 == 0 and + irmao.ordem <= self.ordem) and variacao == 0: + irmao.dispositivo0 = 1 + irmao.rotulo = irmao.rotulo_padrao() + self.dispositivo0 = 2 + self.rotulo = self.rotulo_padrao() + elif (irmao.dispositivo0 == 0 and + irmao.ordem > self.ordem) and variacao == 0: + irmao.dispositivo0 = 2 + irmao.rotulo = irmao.rotulo_padrao() + self.dispositivo0 = 1 + self.rotulo = self.rotulo_padrao() + + irmao.clean() + irmao.save() + + def get_proximo_nivel_zero(self): + proxima_articulacao = Dispositivo.objects.filter( + ordem__gt=self.ordem, + nivel=0, + norma_id=self.norma_id)[:1] + + if not proxima_articulacao.exists(): + return None + + return proxima_articulacao[0] + + def is_relative_auto_insert(self, perfil_pk=None): + if self.dispositivo_pai is not None: + # pp possiveis_pais + + if not perfil_pk: + perfis = PerfilEstruturalTextosNormativos.objects.filter( + padrao=True)[:1] + if perfis.exists(): + perfil_pk = perfis[0].pk + + pp = self.tipo_dispositivo.possiveis_pais.filter( + pai=self.dispositivo_pai.tipo_dispositivo, + perfil_id=perfil_pk) + + if pp.exists(): + if pp[0].filho_de_insercao_automatica: + return True + return False + + def get_raiz(self): + dp = self + while dp.dispositivo_pai is not None: + dp = dp.dispositivo_pai + return dp + + @staticmethod + def new_instance_based_on(dispositivo_base, tipo_base): + dp = Dispositivo() + + dp.tipo_dispositivo = tipo_base + + dp.set_numero_completo( + dispositivo_base.get_numero_completo()) + dp.nivel = dispositivo_base.nivel + dp.texto = '' + dp.norma = dispositivo_base.norma + dp.dispositivo_pai = dispositivo_base.dispositivo_pai + dp.inicio_eficacia = dispositivo_base.inicio_eficacia + dp.inicio_vigencia = dispositivo_base.inicio_vigencia + dp.publicacao = dispositivo_base.publicacao + dp.timestamp = datetime.now() + dp.ordem = dispositivo_base.ordem + + return dp + + @staticmethod + def set_numero_for_add_in(dispositivo_base, dispositivo, tipo_base): + + if tipo_base.contagem_continua: + raiz = dispositivo_base.get_raiz() + + disps = Dispositivo.objects.order_by('-ordem').filter( + tipo_dispositivo_id=tipo_base.pk, + ordem__lte=dispositivo_base.ordem, + ordem__gt=raiz.ordem, + norma_id=dispositivo_base.norma_id)[:1] + + if disps.exists(): + dispositivo.set_numero_completo( + disps[0].get_numero_completo()) + dispositivo.transform_in_next() + else: + dispositivo.set_numero_completo([1, 0, 0, 0, 0, 0, ]) + else: + if ';' in tipo_base.rotulo_prefixo_texto: + + if dispositivo != dispositivo_base: + irmaos_mesmo_tipo = Dispositivo.objects.filter( + tipo_dispositivo=tipo_base, + dispositivo_pai=dispositivo_base) + + dispositivo.set_numero_completo([ + 1 if irmaos_mesmo_tipo.exists() else 0, + 0, 0, 0, 0, 0, ]) + else: + dispositivo.set_numero_completo([0, 0, 0, 0, 0, 0, ]) + + else: + dispositivo.set_numero_completo([1, 0, 0, 0, 0, 0, ]) + + +class Vide(TimestampedMixin): texto = models.TextField(verbose_name=_('Texto do Vide')) tipo = models.ForeignKey(TipoVide, verbose_name=_('Tipo do Vide')) @@ -341,50 +1039,54 @@ class Vide(models.Model): dispositivo_base = models.ForeignKey( Dispositivo, verbose_name=_('Dispositivo Base'), - related_name='%(class)s_dispositivo_base') + related_name='cita') dispositivo_ref = models.ForeignKey( Dispositivo, - related_name='%(class)s_dispositivo_ref', + related_name='citado', verbose_name=_('Dispositivo Referido')) class Meta: verbose_name = _('Vide') verbose_name_plural = _('Vides') + unique_together = ['dispositivo_base', 'dispositivo_ref'] def __str__(self): return _('Vide %s') % self.texto -class Nota(models.Model): +class Nota(TimestampedMixin): NPRIV = 1 - NSTRL = 2 - NINST = 3 - NPUBL = 4 + NINST = 2 + NPUBL = 3 + PUBLICIDADE_CHOICES = ( # Only the owner of the note has visibility. (NPRIV, _('Nota Privada')), - # All of the same group have visibility. - (NSTRL, _('Nota Setorial')), # All authenticated users have visibility. (NINST, _('Nota Institucional')), # All users have visibility. (NPUBL, _('Nota Pública')), ) - texto = models.TextField(verbose_name=_('Texto da Nota')) + titulo = models.CharField( + verbose_name=_('Título'), + max_length=100, + default='', + blank=True) + texto = models.TextField(verbose_name=_('Texto')) url_externa = models.CharField( max_length=1024, blank=True, verbose_name=_('Url externa')) - data_criacao = models.DateTimeField(verbose_name=_('Data de Criação')) publicacao = models.DateTimeField(verbose_name=_('Data de Publicação')) - efetifidade = models.DateTimeField(verbose_name=_('Data de Efeito')) + efetividade = models.DateTimeField(verbose_name=_('Data de Efeito')) tipo = models.ForeignKey(TipoNota, verbose_name=_('Tipo da Nota')) dispositivo = models.ForeignKey( Dispositivo, - verbose_name=_('Dispositivo da Nota')) + verbose_name=_('Dispositivo da Nota'), + related_name='notas') owner = models.ForeignKey(User, verbose_name=_('Dono da Nota')) publicidade = models.PositiveSmallIntegerField( @@ -394,9 +1096,10 @@ class Nota(models.Model): class Meta: verbose_name = _('Nota') verbose_name_plural = _('Notas') + ordering = ['-publicacao', '-modified'] def __str__(self): return '%s: %s' % ( self.tipo, - self.PUBLICIDADE_CHOICES[self.publicidade][1] + self.get_publicidade_display() ) diff --git a/compilacao/templatetags/compilacao_filters.py b/compilacao/templatetags/compilacao_filters.py index 49f50e44e..74d3b06ee 100644 --- a/compilacao/templatetags/compilacao_filters.py +++ b/compilacao/templatetags/compilacao_filters.py @@ -2,21 +2,28 @@ from django import template from django.core.signing import Signer from django.db.models import Q -from compilacao.models import Dispositivo +from compilacao.models import Dispositivo, TipoDispositivo register = template.Library() @register.filter -def get_bloco(pk_atualizador): +def get_bloco_atualizador(pk_atualizador): return Dispositivo.objects.order_by('ordem_bloco_atualizador').filter( Q(dispositivo_pai_id=pk_atualizador) | Q(dispositivo_atualizador_id=pk_atualizador)).select_related() @register.filter -def get_field(value, key): - return value[key] +def get_tipos_dispositivo(pk_atual): + + return TipoDispositivo.objects.filter( + id__gte=pk_atual) + + +@register.filter +def get_field(value_dict, key): + return value_dict[key] @register.simple_tag @@ -35,11 +42,12 @@ def dispositivo_desativado(dispositivo, inicio_vigencia, fim_vigencia): @register.simple_tag def nota_automatica(dispositivo): - if dispositivo.norma_publicada is not None and \ - dispositivo.tipo_dispositivo.class_css != 'artigo': + if dispositivo.norma_publicada is not None: d = dispositivo.dispositivo_atualizador.dispositivo_pai if dispositivo.texto == Dispositivo.TEXTO_PADRAO_DISPOSITIVO_REVOGADO: return 'Revogado pelo %s.' % d + elif not dispositivo.dispositivo_substituido: + return 'Inclusão feita pelo %s.' % d else: return 'Alteração feita pelo %s.' % d return '' @@ -52,8 +60,8 @@ def set_nivel_old(view, value): @register.simple_tag -def close_div(value_max, value_min): - return '' * (int(value_max) - int(value_min) + 1) +def close_div(value_max, value_min, varr): + return '' * (int(value_max) - int(value_min) + 1 + varr) @register.filter @@ -61,3 +69,85 @@ def get_sign_vigencia(value): string = "%s,%s" % (value.inicio_vigencia, value.fim_vigencia) signer = Signer() return signer.sign(str(string)) + + +@register.filter +def select_provaveis_inserts(view, request): + return view.select_provaveis_inserts(request) + + +@register.filter +def is_relative_auto_insert(dpt, request): + return dpt.is_relative_auto_insert(request.session['perfil_estrutural']) + + +@register.filter +def isinst(value, class_str): + classe = value.__class__.__name__ + return classe == class_str + + +@register.filter +def render_actions_head(view, d_atual): + + if view.__class__.__name__ != 'DispositivoEditView': + return False + + # Menu + if view.pk_view == view.pk_edit and d_atual.pk == view.pk_view: + return True + + # conteudo e menu no filho + if view.pk_view != view.pk_edit and d_atual.pk == view.pk_edit: + return True + + return False + + +@register.filter +def short_string(str, length): + if len(str) > length: + return str[:length] + '...' + else: + return str + + +@register.filter +def nomenclatura(d): + result = '' + if d.rotulo != '': + if d.tipo_dispositivo.rotulo_prefixo_texto != '': + result = d.rotulo + else: + result = '(' + d.tipo_dispositivo.nome + ' ' + \ + d.rotulo + ')' + else: + result = '(' + d.tipo_dispositivo.nome + \ + d.rotulo_padrao() + ')' + return result + + +@register.simple_tag +def nomenclatura_heranca(d, ignore_ultimo=0, ignore_primeiro=0): + result = '' + while d is not None: + + if ignore_ultimo and d.dispositivo_pai is None: + break + if ignore_primeiro: + ignore_primeiro = 0 + d = d.dispositivo_pai + continue + + if d.rotulo != '': + if d.tipo_dispositivo.rotulo_prefixo_texto != '': + result = d.rotulo + ' ' + result + else: + result = '(' + d.tipo_dispositivo.nome + ' ' + \ + d.rotulo + ')' + ' ' + result + else: + result = '(' + d.tipo_dispositivo.nome + \ + d.rotulo_padrao() + ')' + ' ' + result + d = d.dispositivo_pai + + return result diff --git a/compilacao/urls.py b/compilacao/urls.py index fede9a117..571794788 100644 --- a/compilacao/urls.py +++ b/compilacao/urls.py @@ -1,16 +1,70 @@ -from django.conf.urls import url +from django.conf.urls import include, url from compilacao import views +from compilacao.views import (perfil_estr_txt_norm, tipo_dispositivo_crud, + tipo_nota_crud, tipo_publicacao_crud, + tipo_vide_crud, veiculo_publicacao_crud) -urlpatterns = [ - url(r'^norma/(?P[0-9]+)/compilacao/$', +urlpatterns_compilacao = [ + url(r'^(?P[0-9]+)/compilacao$', views.CompilacaoView.as_view(), name='compilacao'), + url(r'^(?P[0-9]+)/compilacao/(?P[0-9]+)/$', + views.DispositivoView.as_view(), name='dispositivo'), + url(r'^(?P[0-9]+)/compilacao/vigencia/(?P.+)/$', + views.CompilacaoView.as_view(), name='vigencia'), + url(r'^(?P[0-9]+)/compilacao/edit', + views.CompilacaoEditView.as_view(), name='comp_edit'), + url(r'^(?P[0-9]+)/compilacao/(?P[0-9]+)/refresh', + views.DispositivoEditView.as_view(), name='dispositivo_edit'), - url(r'^norma/(?P[0-9]+)/compilacao/vigencia/(?P.+)/$', - views.CompilacaoView.as_view(), name='vigencia'), + url(r'^(?P[0-9]+)/compilacao/(?P[0-9]+)/actions', + views.ActionsEditView.as_view(), name='dispositivo_actions'), - url(r'^norma/(?P[0-9]+)/compilacao/(?P[0-9]+)/$', - views.DispositivoView.as_view(), name='dispositivo'), + url(r'^(?P[0-9]+)/compilacao/' + '(?P[0-9]+)/nota/create$', + views.NotasCreateView.as_view(), name='nota_create'), + + url(r'^(?P[0-9]+)/compilacao/' + '(?P[0-9]+)/nota/(?P[0-9]+)/edit$', + views.NotasEditView.as_view(), name='nota_edit'), + + url(r'^(?P[0-9]+)/compilacao/' + '(?P[0-9]+)/nota/(?P[0-9]+)/delete$', + views.NotasDeleteView.as_view(), name='nota_delete'), + + url(r'^(?P[0-9]+)/compilacao/' + '(?P[0-9]+)/vide/create$', + views.VideCreateView.as_view(), name='vide_create'), + + url(r'^(?P[0-9]+)/compilacao/' + '(?P[0-9]+)/vide/(?P[0-9]+)/edit$', + views.VideEditView.as_view(), name='vide_edit'), + + url(r'^(?P[0-9]+)/compilacao/' + '(?P[0-9]+)/vide/(?P[0-9]+)/delete$', + views.VideDeleteView.as_view(), name='vide_delete'), + + url(r'^(?P[0-9]+)/compilacao/search$', + views.DispositivoSearchFragmentFormView.as_view(), + name='search_dispositivo'), + +] + +urlpatterns = [ + url(r'^norma/', include(urlpatterns_compilacao)), + + url(r'^sistema/compilacao/tipo-nota/', + include(tipo_nota_crud.urls)), + url(r'^sistema/compilacao/tipo-vide/', + include(tipo_vide_crud.urls)), + url(r'^sistema/compilacao/tipo-publicacao/', + include(tipo_publicacao_crud.urls)), + url(r'^sistema/compilacao/tipo-dispositivo/', + include(tipo_dispositivo_crud.urls)), + url(r'^sistema/compilacao/veiculo-publicacao/', + include(veiculo_publicacao_crud.urls)), + url(r'^sistema/compilacao/perfil-estrutural-textos-normativos/', + include(perfil_estr_txt_norm.urls)), ] diff --git a/compilacao/views.py b/compilacao/views.py index a063f9535..ed14100b0 100644 --- a/compilacao/views.py +++ b/compilacao/views.py @@ -1,12 +1,30 @@ from collections import OrderedDict -from datetime import timedelta +from datetime import datetime, timedelta +from os.path import sys +from django.contrib.auth.decorators import login_required from django.core.signing import Signer +from django.core.urlresolvers import reverse +from django.db.models import Q +from django.http.response import (HttpResponse, HttpResponseRedirect, + JsonResponse) +from django.shortcuts import get_object_or_404, render from django.utils.dateparse import parse_date +from django.utils.decorators import method_decorator +from django.utils.translation import ugettext_lazy as _ +from django.views.generic.base import TemplateView +from django.views.generic.edit import FormMixin, UpdateView from django.views.generic.list import ListView +from vanilla.model_views import CreateView -from compilacao.models import Dispositivo +from compilacao import forms +from compilacao.file2dispositivo import Parser +from compilacao.models import (Dispositivo, Nota, + PerfilEstruturalTextosNormativos, + TipoDispositivo, TipoNota, TipoPublicacao, + TipoVide, VeiculoPublicacao, Vide) from norma.models import NormaJuridica +from sapl.crud import build_crud DISPOSITIVO_SELECT_RELATED = ( 'tipo_dispositivo', @@ -16,7 +34,87 @@ DISPOSITIVO_SELECT_RELATED = ( 'dispositivo_atualizador__dispositivo_pai', 'dispositivo_atualizador__dispositivo_pai__norma', 'dispositivo_atualizador__dispositivo_pai__norma__tipo', - 'dispositivo_pai') + 'dispositivo_pai', + 'dispositivo_pai__tipo_dispositivo') + +tipo_nota_crud = build_crud( + TipoNota, 'tipo_nota', [ + + [_('Tipo da Nota'), + [('sigla', 2), ('nome', 10)], + [('modelo', 12)]], + ]) + +tipo_vide_crud = build_crud( + TipoVide, 'tipo_vide', [ + + [_('Tipo de Vide'), + [('sigla', 2), ('nome', 10)]], + ]) + +tipo_publicacao_crud = build_crud( + TipoPublicacao, 'tipo_publicacao', [ + + [_('Tipo de Publicação'), + [('sigla', 2), ('nome', 10)]], + ]) + +perfil_estr_txt_norm = build_crud( + PerfilEstruturalTextosNormativos, 'perfil_estrutural', [ + + [_('Perfil Estrutural de Textos Normativos'), + [('sigla', 2), ('nome', 10)]], + ]) + + +veiculo_publicacao_crud = build_crud( + VeiculoPublicacao, 'veiculo_publicacao', [ + + [_('Veículo de Publicação'), + [('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), ], + + ], + + ]) class CompilacaoView(ListView): @@ -32,6 +130,22 @@ class CompilacaoView(ListView): inicio_vigencia = None fim_vigencia = None + def get_context_data(self, **kwargs): + context = super(CompilacaoView, self).get_context_data(**kwargs) + + vides = Vide.objects.filter( + Q(dispositivo_base__norma_id=self.kwargs['norma_id']) | + Q(dispositivo_ref__norma_id=self.kwargs['norma_id'])) + + context['cita'] = [v.dispositivo_base_id for v in vides] + context['citado'] = [v.dispositivo_ref_id for v in vides] + + notas = Nota.objects.filter( + dispositivo__norma_id=self.kwargs['norma_id']) + + context['notas'] = [n.dispositivo_id for n in notas] + return context + def get_queryset(self): self.flag_alteradora = -1 self.flag_nivel_ini = 0 @@ -54,10 +168,22 @@ class CompilacaoView(ListView): norma_id=self.kwargs['norma_id'], ).select_related(*DISPOSITIVO_SELECT_RELATED) else: - return Dispositivo.objects.filter( + + r = Dispositivo.objects.filter( ordem__gt=0, - norma_id=self.kwargs['norma_id'] - ).select_related(*DISPOSITIVO_SELECT_RELATED) + norma_id=self.kwargs['norma_id'], + ).select_related( + 'tipo_dispositivo', + 'norma_publicada', + 'norma', + 'dispositivo_atualizador', + 'dispositivo_atualizador__dispositivo_pai', + 'dispositivo_atualizador__dispositivo_pai__norma', + 'dispositivo_atualizador__dispositivo_pai__norma__tipo', + 'dispositivo_pai', + 'dispositivo_pai__tipo_dispositivo') + + return r def get_vigencias(self): itens = Dispositivo.objects.filter( @@ -127,7 +253,7 @@ class CompilacaoView(ListView): class DispositivoView(CompilacaoView): # template_name = 'compilacao/index.html' - template_name = 'compilacao/template_render_bloco.html' + template_name = 'compilacao/index_bloco.html' def get_queryset(self): self.flag_alteradora = -1 @@ -145,20 +271,1057 @@ class DispositivoView(CompilacaoView): proximo_bloco = Dispositivo.objects.filter( ordem__gt=bloco.ordem, nivel__lte=bloco.nivel, - norma_publicada=None, norma_id=self.kwargs['norma_id'])[:1] if proximo_bloco.count() == 0: itens = Dispositivo.objects.filter( ordem__gte=bloco.ordem, - norma_publicada=None, norma_id=self.kwargs['norma_id'] ).select_related(*DISPOSITIVO_SELECT_RELATED) else: itens = Dispositivo.objects.filter( ordem__gte=bloco.ordem, ordem__lt=proximo_bloco[0].ordem, - norma_publicada=None, norma_id=self.kwargs['norma_id'] ).select_related(*DISPOSITIVO_SELECT_RELATED) return itens + + +def handle_uploaded_file(f, outfilepath): + with open(outfilepath, 'wb+') as destination: + for chunk in f.chunks(): + destination.write(chunk) + + +class CompilacaoEditView(CompilacaoView, FormMixin): + + template_name = 'compilacao/edit.html' + + flag_alteradora = -1 + + flag_nivel_ini = 0 + flag_nivel_old = -1 + + pk_edit = 0 + pk_view = 0 + + def post(self, request, *args, **kwargs): + form = forms.UpLoadImportFileForm(request.POST, request.FILES) + message = "Arquivo Submetido com sucesso" + + self.object_list = self.get_queryset() + + if form.is_valid(): + try: + f = request.FILES['import_file'] + outfilepath = '/tmp/' + f.name + handle_uploaded_file(f, outfilepath) + + p = Parser() + p.parser(outfilepath) + + except Exception as e: + print(e) + + context = self.get_context_data( + object_list=self.object_list, + form=form, + message=message, + view=self, + parser_list=p.parser_list) + return render(request, self.template_name, context) + else: + context = self.get_context_data( + object_list=self.object_list, + form=form, + message=form.errors, + view=self) + return self.form_invalid(context) + + return self.render_to_response({'form': form}) + + def form_invalid(self, context): + return self.render_to_response(context) + + def get(self, request, *args, **kwargs): + + self.object_list = self.get_queryset() + form_class = forms.UpLoadImportFileForm + self.form = self.get_form(form_class) + context = self.get_context_data( + object_list=self.object_list, + form=self.form) + + return self.render_to_response(context) + + def get_queryset(self): + self.pk_edit = 0 + self.pk_view = 0 + + self.flag_alteradora = -1 + self.flag_nivel_ini = 0 + self.flag_nivel_old = -1 + + result = Dispositivo.objects.filter( + norma_id=self.kwargs['norma_id'] + ).select_related(*DISPOSITIVO_SELECT_RELATED) + + if not result.exists(): + + norma = NormaJuridica.objects.get(pk=self.kwargs['norma_id']) + + td = TipoDispositivo.objects.filter(class_css='articulacao')[0] + a = Dispositivo() + a.nivel = 0 + a.ordem = Dispositivo.INTERVALO_ORDEM + a.ordem_bloco_atualizador = 0 + a.set_numero_completo([1, 0, 0, 0, 0, 0, ]) + a.norma = norma + a.tipo_dispositivo = td + a.inicio_vigencia = norma.data_publicacao + a.inicio_eficacia = norma.data_publicacao + a.timestamp = datetime.now() + a.save() + + td = TipoDispositivo.objects.filter(class_css='ementa')[0] + e = Dispositivo() + e.nivel = 1 + e.ordem = a.ordem + Dispositivo.INTERVALO_ORDEM + e.ordem_bloco_atualizador = 0 + e.set_numero_completo([1, 0, 0, 0, 0, 0, ]) + e.norma = norma + e.tipo_dispositivo = td + e.inicio_vigencia = norma.data_publicacao + e.inicio_eficacia = norma.data_publicacao + e.timestamp = datetime.now() + e.texto = norma.ementa + e.dispositivo_pai = a + e.save() + + a.pk = None + a.nivel = 0 + a.ordem = e.ordem + Dispositivo.INTERVALO_ORDEM + a.ordem_bloco_atualizador = 0 + a.set_numero_completo([2, 0, 0, 0, 0, 0, ]) + a.timestamp = datetime.now() + a.save() + + result = Dispositivo.objects.filter( + norma_id=self.kwargs['norma_id'] + ).select_related(*DISPOSITIVO_SELECT_RELATED) + + return result + + def set_perfil_in_session(self, request=None, perfil_id=0): + if not request: + return None + + if perfil_id: + perfil = PerfilEstruturalTextosNormativos.objects.get( + pk=perfil_id) + request.session['perfil_estrutural'] = perfil.pk + else: + perfis = PerfilEstruturalTextosNormativos.objects.filter( + padrao=True)[:1] + + if not perfis.exists(): + request.session.pop('perfil_estrutural') + else: + request.session['perfil_estrutural'] = perfis[0].pk + + +class DispositivoEditView(CompilacaoEditView): + template_name = 'compilacao/edit_bloco.html' + + def post(self, request, *args, **kwargs): + + d = Dispositivo.objects.get( + pk=self.kwargs['dispositivo_id']) + + texto = request.POST['texto'] + + if d.texto != '': + d.texto = texto + d.save() + return self.get(request, *args, **kwargs) + d.texto = texto.strip() + d.save() + + if texto != '': + dnext = Dispositivo.objects.filter( + norma_id=d.norma_id, + ordem__gt=d.ordem, + texto='', + tipo_dispositivo__dispositivo_de_articulacao=False)[:1] + + if not dnext.exists(): + return self.get(request, *args, **kwargs) + + if dnext[0].nivel > d.nivel: + pais = [d.pk, ] + else: + if dnext[0].dispositivo_pai_id == d.dispositivo_pai_id: + pais = [dnext[0].dispositivo_pai_id, ] + else: + pais = [ + dnext[0].dispositivo_pai_id, d.dispositivo_pai_id, ] + data = {'pk': dnext[0].pk, 'pai': pais} + else: + data = {'pk': d.pk, 'pai': [d.pk, ]} + + return JsonResponse(data, safe=False) + + def get_queryset_perfil_estrutural(self): + perfis = PerfilEstruturalTextosNormativos.objects.all() + return perfis + + def get(self, request, *args, **kwargs): + + try: + if 'perfil_pk' in request.GET: + self.set_perfil_in_session( + request, request.GET['perfil_pk']) + elif 'perfil_estrutural' not in request.session: + self.set_perfil_in_session(request=request) + + self.object_list = self.get_queryset() + + self.perfil_estrutural_list = self.get_queryset_perfil_estrutural() + + context = self.get_context_data( + object_list=self.object_list, + perfil_estrutural_list=self.perfil_estrutural_list + ) + except Exception as e: + print(e) + + return self.render_to_response(context) + + def get_queryset(self): + self.flag_alteradora = -1 + self.flag_nivel_ini = 0 + self.flag_nivel_old = -1 + + try: + self.pk_edit = int(self.request.GET['edit']) + except: + self.pk_edit = 0 + self.pk_view = int(self.kwargs['dispositivo_id']) + + try: + if self.pk_edit == self.pk_view: + bloco = Dispositivo.objects.get( + pk=self.kwargs['dispositivo_id']) + else: + bloco = Dispositivo.objects.get( + pk=self.kwargs['dispositivo_id']) + except Dispositivo.DoesNotExist: + return [] + + self.flag_nivel_old = bloco.nivel - 1 + self.flag_nivel_ini = bloco.nivel + + if self.pk_edit == self.pk_view: + return [bloco, ] + + proximo_bloco = Dispositivo.objects.filter( + ordem__gt=bloco.ordem, + nivel__lte=bloco.nivel, + norma_id=self.kwargs['norma_id'])[:1] + + if proximo_bloco.count() == 0: + itens = Dispositivo.objects.filter( + ordem__gte=bloco.ordem, + norma_id=self.kwargs['norma_id'] + ).select_related(*DISPOSITIVO_SELECT_RELATED) + else: + itens = Dispositivo.objects.filter( + ordem__gte=bloco.ordem, + ordem__lt=proximo_bloco[0].ordem, + norma_id=self.kwargs['norma_id'] + ).select_related(*DISPOSITIVO_SELECT_RELATED) + return itens + + def select_provaveis_inserts(self, request=None): + + try: + + if request and 'perfil_estrutural' not in request.session: + self.set_perfil_in_session(request) + + perfil_pk = request.session['perfil_estrutural'] + + # Não salvar d_base + if self.pk_edit == 0: + base = Dispositivo.objects.get(pk=self.pk_view) + else: + base = Dispositivo.objects.get(pk=self.pk_edit) + + prox_possivel = Dispositivo.objects.filter( + ordem__gt=base.ordem, + nivel__lte=base.nivel, + norma_id=base.norma_id)[:1] + + if prox_possivel.exists(): + prox_possivel = prox_possivel[0] + else: + prox_possivel = None + + result = [{'tipo_insert': 'Inserir Depois', + 'icone': '↷ ', + 'action': 'add_next', + 'itens': []}, + {'tipo_insert': 'Inserir Dentro', + 'icone': '⇲ ', + 'action': 'add_in', + 'itens': []}, + {'tipo_insert': 'Inserir Antes', + 'icone': '↶ ', + 'action': 'add_prior', + 'itens': []} + ] + + # Possíveis inserções sequenciais já existentes + parents = base.get_parents() + parents.insert(0, base) + nivel = sys.maxsize + for dp in parents: + + if dp.nivel >= nivel: + continue + + if dp.is_relative_auto_insert(perfil_pk): + continue + + if prox_possivel and \ + dp.tipo_dispositivo != base.tipo_dispositivo and\ + dp.nivel < prox_possivel.nivel and\ + not prox_possivel.tipo_dispositivo.permitido_inserir_in( + dp.tipo_dispositivo, + perfil_pk=perfil_pk): + + if dp.tipo_dispositivo != prox_possivel.tipo_dispositivo: + continue + + nivel = dp.nivel + + # um do mesmo para inserção antes + if dp == base: + result[2]['itens'].append({ + 'class_css': dp.tipo_dispositivo.class_css, + 'tipo_pk': dp.tipo_dispositivo.pk, + 'variacao': 0, + 'provavel': '%s (%s)' % ( + dp.rotulo_padrao(local_insert=1), + dp.tipo_dispositivo.nome,), + 'dispositivo_base': base.pk}) + + if dp.dispositivo_pai: + flag_pv = dp.tipo_dispositivo.permitido_variacao( + dp.dispositivo_pai.tipo_dispositivo, + perfil_pk=perfil_pk) + else: + flag_pv = False + + r = [] + flag_direcao = 1 + flag_variacao = 0 + while True: + if dp.dispositivo0 == 0: + local_insert = 1 + else: + local_insert = 0 + + rt = dp.transform_in_next(flag_direcao) + if not rt[0]: + break + flag_variacao += rt[1] + r.append({'class_css': dp.tipo_dispositivo.class_css, + 'tipo_pk': dp.tipo_dispositivo.pk, + 'variacao': flag_variacao, + 'provavel': '%s (%s)' % ( + dp.rotulo_padrao(local_insert), + dp.tipo_dispositivo.nome,), + 'dispositivo_base': base.pk}) + + flag_direcao = -1 + + r.reverse() + + if not flag_pv: + r = [r[0], ] + + if len(r) > 0 and dp.tipo_dispositivo.formato_variacao0 == \ + TipoDispositivo.FNCN: + r = [r[0], ] + + if dp.tipo_dispositivo == base.tipo_dispositivo: + result[0]['itens'] += r + else: + result[0]['itens'] += r + result[2]['itens'] += r + + if nivel == 0: + break + + # tipo do dispositivo base + tipb = base.tipo_dispositivo + + for paradentro in [1, 0]: + if paradentro: + # Outros Tipos de Dispositivos PARA DENTRO + otds = TipoDispositivo.objects.order_by( + '-contagem_continua', 'id').all() + else: + # Outros Tipos de Dispositivos PARA FORA + classes_ja_inseridas = [] + for c in result[0]['itens']: + if c['class_css'] not in classes_ja_inseridas: + classes_ja_inseridas.append(c['class_css']) + for c in result[1]['itens']: + if c['class_css'] not in classes_ja_inseridas: + classes_ja_inseridas.append(c['class_css']) + otds = TipoDispositivo.objects.order_by( + '-contagem_continua', 'id').all().exclude( + class_css__in=classes_ja_inseridas) + + for td in otds: + + if paradentro and not td.permitido_inserir_in( + tipb, + include_relative_autos=False, + perfil_pk=perfil_pk): + continue + + base.tipo_dispositivo = td + + if not paradentro: + + flag_insercao = False + for possivelpai in parents: + if td.permitido_inserir_in( + possivelpai.tipo_dispositivo, + include_relative_autos=False, + perfil_pk=perfil_pk): + flag_insercao = True + break + + if not flag_insercao: + continue + + if possivelpai.is_relative_auto_insert(perfil_pk): + continue + + if prox_possivel: + if prox_possivel.nivel == base.nivel: + if prox_possivel.tipo_dispositivo != td and\ + not prox_possivel.tipo_dispositivo.\ + permitido_inserir_in( + td, perfil_pk=perfil_pk): + continue + else: + if possivelpai.tipo_dispositivo != \ + prox_possivel.tipo_dispositivo and\ + not prox_possivel.tipo_dispositivo.\ + permitido_inserir_in( + possivelpai.tipo_dispositivo, + perfil_pk=perfil_pk) and \ + possivelpai.nivel < \ + prox_possivel.nivel: + continue + base.dispositivo_pai = possivelpai + Dispositivo.set_numero_for_add_in( + possivelpai, base, td) + else: + Dispositivo.set_numero_for_add_in(base, base, td) + + r = [{'class_css': td.class_css, + 'tipo_pk': td.pk, + 'variacao': 0, + 'provavel': '%s (%s)' % ( + base.rotulo_padrao(1, paradentro), + td.nome,), + 'dispositivo_base': base.pk}] + + if paradentro == 1: + """if (tipb.class_css == 'caput' and + td.class_css == 'paragrafo'): + result[0]['itens'].insert(0, r[0]) + else:""" + result[1]['itens'] += r + else: + result[2]['itens'] += r + result[0]['itens'] += r + + # if len(result[0]['itens']) < len(result[1]['itens']): + # r = result[0] + # result.remove(result[0]) + # result.insert(1, r) + + # remover temporariamente a opção inserir antes + # confirmar falta de necessidade + if len(result) > 2: + result.pop() + + except Exception as e: + print(e) + + return result + + +class ActionsEditMixin(object): + + def render_to_json_response(self, context, **response_kwargs): + + action = getattr(self, context['action']) + return JsonResponse(action(context), safe=False) + + def delete_item_dispositivo(self, context): + return self.delete_bloco_dispositivo(context) + + def delete_bloco_dispositivo(self, context): + base = Dispositivo.objects.get(pk=context['dispositivo_id']) + + base_anterior = Dispositivo.objects.order_by('-ordem').filter( + norma_id=base.norma_id, + ordem__lt=base.ordem + )[:1] + base.delete() + + if base_anterior.exists(): + if base_anterior[0].dispositivo_pai_id: + data = {'pk': base_anterior[0].pk, 'pai': [ + base_anterior[0].dispositivo_pai_id, ]} + else: + data = {'pk': base_anterior[0].pk, 'pai': [-1, ]} + return data + else: + return {} + + def add_prior(self, context): + return {} + + def add_in(self, context): + return self.add_next(context, local_add='add_in') + + def add_next(self, context, local_add='add_next'): + try: + base = Dispositivo.objects.get(pk=context['dispositivo_id']) + tipo = TipoDispositivo.objects.get(pk=context['tipo_pk']) + variacao = int(context['variacao']) + parents = [base, ] + base.get_parents() + + tipos_dp_auto_insert = tipo.filhos_permitidos.filter( + filho_de_insercao_automatica=True, + perfil_id=context['perfil_pk']) + + count_auto_insert = 0 + for tipoauto in tipos_dp_auto_insert: + qtdp = tipoauto.quantidade_permitida + if qtdp >= 0: + qtdp -= Dispositivo.objects.filter( + norma_id=base.norma_id, + tipo_dispositivo_id=tipoauto.filho_permitido.pk + ).count() + if qtdp > 0: + count_auto_insert += 1 + else: + count_auto_insert += 1 + + dp_irmao = None + dp_pai = None + for dp in parents: + if dp.tipo_dispositivo == tipo: + dp_irmao = dp + break + if tipo.permitido_inserir_in( + dp.tipo_dispositivo, + perfil_pk=context['perfil_pk']): + dp_pai = dp + break + dp_pai = dp + + if dp_irmao is not None: + dp = Dispositivo.new_instance_based_on(dp_irmao, tipo) + dp.transform_in_next(variacao) + else: + # Inserção sem precedente + dp = Dispositivo.new_instance_based_on(dp_pai, tipo) + dp.dispositivo_pai = dp_pai + dp.nivel += 1 + + if tipo.contagem_continua: + ultimo_irmao = Dispositivo.objects.order_by( + '-ordem').filter( + ordem__lte=base.ordem, + tipo_dispositivo_id=tipo.pk, + norma_id=base.norma_id)[:1] + + if not ultimo_irmao.exists(): + dp.set_numero_completo([1, 0, 0, 0, 0, 0, ]) + else: + ultimo_irmao = ultimo_irmao[0] + dp.set_numero_completo( + ultimo_irmao.get_numero_completo()) + dp.transform_in_next() + else: + if ';' in tipo.rotulo_prefixo_texto: + dp.set_numero_completo([0, 0, 0, 0, 0, 0, ]) + else: + dp.set_numero_completo([1, 0, 0, 0, 0, 0, ]) + + # verificar se existe restrição de quantidade de itens + if dp.dispositivo_pai: + pp = dp.tipo_dispositivo.possiveis_pais.filter( + pai_id=dp.dispositivo_pai.tipo_dispositivo_id, + perfil_id=context['perfil_pk']) + + if pp.exists() and pp[0].quantidade_permitida >= 0: + qtd_existente = Dispositivo.objects.filter( + norma_id=dp.norma_id, + tipo_dispositivo_id=dp.tipo_dispositivo_id).count() + + if qtd_existente >= pp[0].quantidade_permitida: + return {'pk': base.pk, + 'pai': [base.dispositivo_pai.pk, ], + 'alert': str(_('Limite de inserções de ' + 'dispositivos deste tipo ' + 'foi excedido.')) + } + + ordem = base.criar_espaco( + espaco_a_criar=1 + count_auto_insert, local=local_add) + + dp.rotulo = dp.rotulo_padrao() + dp.ordem = ordem + dp.incrementar_irmaos(variacao, [local_add, ]) + + dp.clean() + dp.save() + + dp_auto_insert = None + + # Inserção automática + if count_auto_insert: + dp_pk = dp.pk + dp.nivel += 1 + for tipoauto in tipos_dp_auto_insert: + dp.dispositivo_pai_id = dp_pk + dp.pk = None + dp.tipo_dispositivo = tipoauto.filho_permitido + if ';' in dp.tipo_dispositivo.rotulo_prefixo_texto: + dp.set_numero_completo([0, 0, 0, 0, 0, 0, ]) + else: + dp.set_numero_completo([1, 0, 0, 0, 0, 0, ]) + dp.rotulo = dp.rotulo_padrao() + dp.texto = '' + dp.ordem = dp.ordem + Dispositivo.INTERVALO_ORDEM + dp.clean() + dp.save() + dp_auto_insert = dp + dp = Dispositivo.objects.get(pk=dp_pk) + + ''' Reenquadrar todos os dispositivos que possuem pai + antes da inserção atual e que são inferiores a dp, + redirecionando para o novo pai''' + + nivel = sys.maxsize + flag_niveis = False + + if not dp.tipo_dispositivo.dispositivo_de_alteracao: + possiveis_filhos = Dispositivo.objects.filter( + ordem__gt=dp.ordem, + norma_id=dp.norma_id) + + for filho in possiveis_filhos: + + if filho.nivel > nivel: + continue + + if filho.dispositivo_pai.ordem >= dp.ordem: + continue + + nivel = filho.nivel + + if not filho.tipo_dispositivo.permitido_inserir_in( + dp.tipo_dispositivo, + perfil_pk=context['perfil_pk']): + continue + + filho.dispositivo_pai = dp + filho.clean() + filho.save() + flag_niveis = True + + if flag_niveis: + dp.organizar_niveis() + + numtipos = {} + + ''' Renumerar filhos imediatos que + não possuam contagem continua''' + + if flag_niveis: + filhos = Dispositivo.objects.filter( + dispositivo_pai_id=dp.pk) + + for filho in filhos: + + if filho.tipo_dispositivo.contagem_continua: + continue + + if filho.tipo_dispositivo.class_css in numtipos: + if filho.dispositivo_substituido is None: + numtipos[filho.tipo_dispositivo.class_css] += 1 + else: + t = filho.tipo_dispositivo + prefixo = t.rotulo_prefixo_texto.split(';') + if len(prefixo) > 1: + count_irmaos_m_tipo = Dispositivo.objects.filter( + ~Q(pk=filho.pk), + tipo_dispositivo=t, + dispositivo_pai=filho.dispositivo_pai)[:1] + + if count_irmaos_m_tipo.exists(): + numtipos[filho.tipo_dispositivo.class_css] = 1 + else: + numtipos[filho.tipo_dispositivo.class_css] = 0 + else: + numtipos[filho.tipo_dispositivo.class_css] = 1 + + filho.dispositivo0 = numtipos[ + filho.tipo_dispositivo.class_css] + + filho.rotulo = filho.rotulo_padrao() + filho.clean() + filho.save() + + ''' Renumerar dispositivos de + contagem continua, caso a inserção seja uma articulação''' + + numtipos = {} + if dp.nivel == 0: + + proxima_articulacao = Dispositivo.objects.filter( + ordem__gt=dp.ordem, + nivel=0, + norma_id=dp.norma_id)[:1] + + if not proxima_articulacao.exists(): + filhos_continuos = list(Dispositivo.objects.filter( + ordem__gt=dp.ordem, + norma_id=dp.norma_id, + tipo_dispositivo__contagem_continua=True)) + else: + filhos_continuos = list(Dispositivo.objects.filter( + Q(ordem__gt=dp.ordem) & + Q(ordem__lt=proxima_articulacao[0].ordem), + norma_id=dp.norma_id, + tipo_dispositivo__contagem_continua=True)) + + for filho in filhos_continuos: + + if filho.tipo_dispositivo.class_css in numtipos: + if filho.dispositivo_substituido is None: + numtipos[filho.tipo_dispositivo.class_css] += 1 + else: + t = filho.tipo_dispositivo + prefixo = t.rotulo_prefixo_texto.split(';') + if len(prefixo) > 1: + count_irmaos_m_tipo = Dispositivo.objects.filter( + ~Q(pk=filho.pk), + tipo_dispositivo=t, + dispositivo_pai=filho.dispositivo_pai)[:1] + + if count_irmaos_m_tipo.exists(): + numtipos[filho.tipo_dispositivo.class_css] = 1 + else: + numtipos[filho.tipo_dispositivo.class_css] = 0 + else: + numtipos[filho.tipo_dispositivo.class_css] = 1 + + filho.dispositivo0 = numtipos[ + filho.tipo_dispositivo.class_css] + + filho.rotulo = filho.rotulo_padrao() + filho.clean() + filho.save() + + except Exception as e: + print(e) + + if dp_auto_insert is None: + data = self.get_json_for_refresh(dp) + else: + data = self.get_json_for_refresh(dp=dp, dpauto=dp_auto_insert) + + return data + + def get_json_for_refresh(self, dp, dpauto=None): + + if dp.tipo_dispositivo.contagem_continua: + pais = [] + if dp.dispositivo_pai is None: + data = {'pk': dp.pk, 'pai': [-1, ]} + else: + pkfilho = dp.pk + dp = dp.dispositivo_pai + + proxima_articulacao = dp.get_proximo_nivel_zero() + + if proxima_articulacao is not None: + parents = Dispositivo.objects.filter( + norma_id=dp.norma_id, + ordem__gte=dp.ordem, + ordem__lt=proxima_articulacao.ordem, + nivel__lte=dp.nivel) + else: + parents = Dispositivo.objects.filter( + norma_id=dp.norma_id, + ordem__gte=dp.ordem, + nivel__lte=dp.nivel) + + nivel = sys.maxsize + for p in parents: + if p.nivel > nivel: + continue + pais.append(p.pk) + nivel = p.nivel + data = { + 'pk': pkfilho if not dpauto else dpauto.pk, 'pai': pais} + else: + data = {'pk': dp.pk if not dpauto else dpauto.pk, 'pai': [ + dp.dispositivo_pai.pk, ]} + + return data + + +class ActionsEditView(ActionsEditMixin, TemplateView): + + def render_to_response(self, context, **response_kwargs): + context['action'] = self.request.GET['action'] + + if 'tipo_pk' in self.request.GET: + context['tipo_pk'] = self.request.GET['tipo_pk'] + + if 'variacao' in self.request.GET: + context['variacao'] = self.request.GET['variacao'] + + if 'perfil_estrutural' in self.request.session: + context['perfil_pk'] = self.request.session['perfil_estrutural'] + + return self.render_to_json_response(context, **response_kwargs) + + +class DispositivoSuccessUrlMixin(object): + + def get_success_url(self): + return reverse( + 'dispositivo', kwargs={ + 'norma_id': self.kwargs[ + 'norma_id'], + 'dispositivo_id': self.kwargs[ + 'dispositivo_id']}) + + +class NotaMixin(DispositivoSuccessUrlMixin): + + def get_modelo_nota(self, request): + # TODO: permitir edição apenas das notas do usuário conectado + # TODO: tratar revalidação no método post + # TODO: não mostrar botão de edição na interface + if 'action' in request.GET and request.GET['action'] == 'modelo_nota': + tn = TipoNota.objects.get(pk=request.GET['id_tipo']) + return True, tn.modelo + return False, '' + + def get_initial(self): + dispositivo = get_object_or_404( + Dispositivo, pk=self.kwargs.get('dispositivo_id')) + initial = {'dispositivo': dispositivo} + + if 'pk' in self.kwargs: + initial['pk'] = self.kwargs.get('pk') + + return initial + + @method_decorator(login_required) + def dispatch(self, *args, **kwargs): + return super(NotaMixin, self).dispatch(*args, **kwargs) + + +class NotasCreateView(NotaMixin, FormMixin, CreateView): + template_name = 'compilacao/ajax_form.html' + form_class = forms.NotaForm + + def get(self, request, *args, **kwargs): + flag_action, modelo_nota = self.get_modelo_nota(request) + if flag_action: + return HttpResponse(modelo_nota) + + return super(NotasCreateView, self).get(request, *args, **kwargs) + + def post(self, request, *args, **kwargs): + try: + norma_id = kwargs.pop('norma_id') + dispositivo_id = kwargs.pop('dispositivo_id') + form = forms.NotaForm(request.POST, request.FILES, **kwargs) + kwargs['norma_id'] = norma_id + kwargs['dispositivo_id'] = dispositivo_id + + if form.is_valid(): + nt = form.save(commit=False) + nt.owner_id = request.user.pk + nt.save() + self.kwargs['pk'] = nt.pk + return self.form_valid(form) + else: + return self.form_invalid(form) + except Exception as e: + print(e) + return HttpResponse("post") + + +class NotasEditView(NotaMixin, UpdateView): + model = Nota + template_name = 'compilacao/ajax_form.html' + form_class = forms.NotaForm + + def get(self, request, *args, **kwargs): + flag_action, modelo_nota = self.get_modelo_nota(request) + if flag_action: + return HttpResponse(modelo_nota) + + return super(NotasEditView, self).get(request, *args, **kwargs) + + +class NotasDeleteView(NotaMixin, TemplateView): + + def get(self, request, *args, **kwargs): + nt = Nota.objects.get(pk=self.kwargs['pk']) + nt.delete() + return HttpResponseRedirect(self.get_success_url()) + + +class VideMixin(DispositivoSuccessUrlMixin): + + def get_initial(self): + dispositivo_base = get_object_or_404( + Dispositivo, pk=self.kwargs.get('dispositivo_id')) + + initial = {'dispositivo_base': dispositivo_base} + + if 'pk' in self.kwargs: + initial['pk'] = self.kwargs.get('pk') + + return initial + + @method_decorator(login_required) + def dispatch(self, *args, **kwargs): + return super(VideMixin, self).dispatch(*args, **kwargs) + + +class VideCreateView(VideMixin, FormMixin, CreateView): + template_name = 'compilacao/ajax_form.html' + form_class = forms.VideForm + + def post(self, request, *args, **kwargs): + try: + norma_id = kwargs.pop('norma_id') + dispositivo_id = kwargs.pop('dispositivo_id') + form = forms.VideForm(request.POST, request.FILES, **kwargs) + kwargs['norma_id'] = norma_id + kwargs['dispositivo_id'] = dispositivo_id + + if form.is_valid(): + vd = form.save(commit=False) + vd.save() + self.kwargs['pk'] = vd.pk + return self.form_valid(form) + else: + return self.form_invalid(form) + except Exception as e: + print(e) + return HttpResponse("post") + + +class VideEditView(VideMixin, UpdateView): + model = Vide + template_name = 'compilacao/ajax_form.html' + form_class = forms.VideForm + + +class VideDeleteView(VideMixin, TemplateView): + + def get(self, request, *args, **kwargs): + vd = Vide.objects.get(pk=self.kwargs['pk']) + vd.delete() + return HttpResponseRedirect(self.get_success_url()) + + +class DispositivoSearchFragmentFormView(ListView): + template_name = 'compilacao/dispositivo_search_fragment_form.html' + + @method_decorator(login_required) + def dispatch(self, *args, **kwargs): + return super( + DispositivoSearchFragmentFormView, + self).dispatch(*args, **kwargs) + + def get_queryset(self): + try: + busca = '' + + if 'busca' in self.request.GET: + busca = self.request.GET['busca'] + + q = Q(nivel__gt=0) + busca = busca.split(' ') + n = 10 + + for item in busca: + + if not item: + continue + + if q: + q = q & (Q(dispositivo_pai__rotulo__icontains=item) | + Q(rotulo__icontains=item) | + Q(texto__icontains=item) | + Q(texto_atualizador__icontains=item)) + n = 50 + else: + q = (Q(dispositivo_pai__rotulo__icontains=item) | + Q(rotulo__icontains=item) | + Q(texto__icontains=item) | + Q(texto_atualizador__icontains=item)) + n = 50 + + if 'tipo_norma' in self.request.GET: + tipo_norma = self.request.GET['tipo_norma'] + if tipo_norma: + q = q & Q(norma__tipo_id=tipo_norma) + n = 50 + + if 'num_norma' in self.request.GET: + num_norma = self.request.GET['num_norma'] + if num_norma: + q = q & Q(norma__numero=num_norma) + n = 50 + + if 'ano_norma' in self.request.GET: + ano_norma = self.request.GET['ano_norma'] + if ano_norma: + q = q & Q(norma__ano=ano_norma) + n = 50 + + if 'initial_ref' in self.request.GET: + initial_ref = self.request.GET['initial_ref'] + if initial_ref: + q = q & Q(pk=initial_ref) + n = 50 + + return Dispositivo.objects.filter(q)[:n] + + except Exception as e: + print(e) diff --git a/lexml/migrations/0001_initial.py b/lexml/migrations/0001_initial.py index 39d4926f4..6a2e21391 100644 --- a/lexml/migrations/0001_initial.py +++ b/lexml/migrations/0001_initial.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/lexml/migrations/0002_auto_20150806_1614.py b/lexml/migrations/0002_auto_20150806_1614.py index c8629742f..b0ae800e0 100644 --- a/lexml/migrations/0002_auto_20150806_1614.py +++ b/lexml/migrations/0002_auto_20150806_1614.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/materia/migrations/0001_initial.py b/materia/migrations/0001_initial.py index 20976175c..0552b7edb 100644 --- a/materia/migrations/0001_initial.py +++ b/materia/migrations/0001_initial.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/materia/migrations/0002_auto_20150729_1310.py b/materia/migrations/0002_auto_20150729_1310.py index 613e5653f..a9e9b21c3 100644 --- a/materia/migrations/0002_auto_20150729_1310.py +++ b/materia/migrations/0002_auto_20150729_1310.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/materia/migrations/0003_auto_20150729_1717.py b/materia/migrations/0003_auto_20150729_1717.py index 49abc8853..6ffea56bd 100644 --- a/materia/migrations/0003_auto_20150729_1717.py +++ b/materia/migrations/0003_auto_20150729_1717.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/materia/migrations/0004_materialegislativa_texto_original.py b/materia/migrations/0004_materialegislativa_texto_original.py index 163ae0ff2..214864cf8 100644 --- a/materia/migrations/0004_materialegislativa_texto_original.py +++ b/materia/migrations/0004_materialegislativa_texto_original.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models + import materia.models diff --git a/materia/migrations/0005_auto_20150923_0941.py b/materia/migrations/0005_auto_20150923_0941.py index ae62096ef..24148ca2b 100644 --- a/materia/migrations/0005_auto_20150923_0941.py +++ b/materia/migrations/0005_auto_20150923_0941.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/materia/migrations/0006_proposicao_status.py b/materia/migrations/0006_proposicao_status.py index d6f84f45a..9e8678308 100644 --- a/materia/migrations/0006_proposicao_status.py +++ b/materia/migrations/0006_proposicao_status.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/materia/migrations/0007_auto_20151021_1200.py b/materia/migrations/0007_auto_20151021_1200.py index fb3563751..2cdad3b5c 100644 --- a/materia/migrations/0007_auto_20151021_1200.py +++ b/materia/migrations/0007_auto_20151021_1200.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/materia/migrations/0008_auto_20151029_1416.py b/materia/migrations/0008_auto_20151029_1416.py index 530e26990..4ee72acaf 100644 --- a/materia/migrations/0008_auto_20151029_1416.py +++ b/materia/migrations/0008_auto_20151029_1416.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/materia/migrations/0009_auto_20151029_1420.py b/materia/migrations/0009_auto_20151029_1420.py index 771b76392..b831a3885 100644 --- a/materia/migrations/0009_auto_20151029_1420.py +++ b/materia/migrations/0009_auto_20151029_1420.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/materia/migrations/0010_auto_20151117_1551.py b/materia/migrations/0010_auto_20151117_1551.py index 93f67f486..7d64b431d 100644 --- a/materia/migrations/0010_auto_20151117_1551.py +++ b/materia/migrations/0010_auto_20151117_1551.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models + import materia.models diff --git a/norma/migrations/0001_initial.py b/norma/migrations/0001_initial.py index 5ac87c706..1e3be4b19 100644 --- a/norma/migrations/0001_initial.py +++ b/norma/migrations/0001_initial.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/norma/migrations/0002_auto_20150729_1717.py b/norma/migrations/0002_auto_20150729_1717.py index 1695f9460..d2a9cba0f 100644 --- a/norma/migrations/0002_auto_20150729_1717.py +++ b/norma/migrations/0002_auto_20150729_1717.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/norma/migrations/0003_auto_20150906_0239.py b/norma/migrations/0003_auto_20150906_0239.py index 82dafbf88..dff90c71e 100644 --- a/norma/migrations/0003_auto_20150906_0239.py +++ b/norma/migrations/0003_auto_20150906_0239.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/norma/migrations/0004_auto_20150907_0004.py b/norma/migrations/0004_auto_20150907_0004.py index 961acc32c..9a716cabc 100644 --- a/norma/migrations/0004_auto_20150907_0004.py +++ b/norma/migrations/0004_auto_20150907_0004.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/norma/migrations/0005_auto_20150915_1141.py b/norma/migrations/0005_auto_20150915_1141.py index 67ed2e0a1..6d9798f23 100644 --- a/norma/migrations/0005_auto_20150915_1141.py +++ b/norma/migrations/0005_auto_20150915_1141.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/norma/migrations/0006_auto_20151025_1427.py b/norma/migrations/0006_auto_20151025_1427.py new file mode 100644 index 000000000..1a5f7c607 --- /dev/null +++ b/norma/migrations/0006_auto_20151025_1427.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('norma', '0005_auto_20150915_1141'), + ] + + operations = [ + migrations.AlterModelOptions( + name='normajuridica', + options={'ordering': ['-data', '-numero'], 'verbose_name_plural': 'Normas Jurídicas', 'verbose_name': 'Norma Jurídica'}, + ), + ] diff --git a/norma/migrations/0007_auto_20151130_1632.py b/norma/migrations/0007_auto_20151130_1632.py new file mode 100644 index 000000000..745eda239 --- /dev/null +++ b/norma/migrations/0007_auto_20151130_1632.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', '0006_auto_20151025_1427'), + ] + + operations = [ + migrations.AlterField( + model_name='normajuridica', + name='complemento', + field=models.NullBooleanField(verbose_name='Complementar ?', choices=[(True, 'Sim'), (False, 'Não')]), + ), + ] diff --git a/norma/models.py b/norma/models.py index a6f24dce7..d718c3c0d 100644 --- a/norma/models.py +++ b/norma/models.py @@ -3,7 +3,7 @@ from django.template import defaultfilters from django.utils.translation import ugettext_lazy as _ from materia.models import MateriaLegislativa -from sapl.utils import make_choices +from sapl.utils import YES_NO_CHOICES, make_choices class AssuntoNorma(models.Model): @@ -86,7 +86,8 @@ class NormaJuridica(models.Model): observacao = models.TextField( blank=True, null=True, verbose_name=_('Observação')) complemento = models.NullBooleanField( - blank=True, verbose_name=_('Complementar ?')) + blank=True, verbose_name=_('Complementar ?'), + choices=YES_NO_CHOICES) # XXX was a CharField (attention on migrate) assuntos = models.ManyToManyField( AssuntoNorma, @@ -97,7 +98,7 @@ class NormaJuridica(models.Model): class Meta: verbose_name = _('Norma Jurídica') verbose_name_plural = _('Normas Jurídicas') - ordering = ['-data'] + ordering = ['-data', '-numero'] def __str__(self): return _('%(tipo)s nº %(numero)s de %(data)s') % { diff --git a/norma/urls.py b/norma/urls.py index b4fff7815..66ed716cf 100644 --- a/norma/urls.py +++ b/norma/urls.py @@ -1,14 +1,19 @@ -from django.conf.urls import url +from django.conf.urls import include, url -from norma.views import NormaIncluirView, norma_temporario_para_compilacao_crud +from norma.views import (NormaIncluirView, assunto_norma_crud, + norma_temporario_crud, tipo_norma_crud) -norma_url_patterns = norma_temporario_para_compilacao_crud.urlpatterns +norma_url_patterns = norma_temporario_crud.urlpatterns + [] +# norma_url_patterns = norma_crud.urlpatterns + [] urlpatterns = [ - # url(r'^norma/', include(norma_url_patterns, - # norma_temporario_para_compilacao_crud.namespace, - # norma_temporario_para_compilacao_crud.namespace)), - # url(r'^sistema/norma/tipo/', include(tipo_norma_crud.urls)), - # url(r'^sistema/norma/assunto/', include(assunto_norma_crud.urls)), + url(r'^norma/', include(norma_url_patterns, + norma_temporario_crud.namespace, + norma_temporario_crud.namespace)), + + + url(r'^sistema/norma/tipo/', include(tipo_norma_crud.urls)), + url(r'^sistema/norma/assunto/', include(assunto_norma_crud.urls)), + url(r'^norma/incluir', NormaIncluirView.as_view(), name='norma-incluir'), ] diff --git a/norma/views.py b/norma/views.py index 9304f0cc7..00d2598f0 100644 --- a/norma/views.py +++ b/norma/views.py @@ -30,6 +30,7 @@ tipo_norma_crud = build_crud( ]) norma_crud = build_crud( + NormaJuridica, '', [ [_('Identificação Básica'), @@ -47,19 +48,18 @@ norma_crud = build_crud( [('indexacao', 12)], [('observacao', 12)]], - [_('Assuntos (Classificação) [+] '), + [_('Assuntos (Classificação) [+]'), + [('assunto_norma_FIXME', 12)], [('assunto_norma_FIXME', 12)], [('assunto_norma_FIXME', 12)]], ]) -norma_temporario_para_compilacao_crud = build_crud( - NormaJuridica, 'norma', [ +norma_temporario_crud = build_crud( + NormaJuridica, 'normajuridica', [ [_('Identificação Básica'), - [('tipo', 4), ('numero', 4), ('ano', 4)], - [('data', 4), ('esfera_federacao', 4)], - [('data_publicacao', 3)], + [('tipo', 5), ('numero', 2), ('ano', 2), ('data', 3)], [('ementa', 12)]], ]) diff --git a/painel/migrations/0001_initial.py b/painel/migrations/0001_initial.py index a19a4efeb..3b2dfa3c1 100644 --- a/painel/migrations/0001_initial.py +++ b/painel/migrations/0001_initial.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/parlamentares/migrations/0001_initial.py b/parlamentares/migrations/0001_initial.py index 4e176b045..152a92f82 100644 --- a/parlamentares/migrations/0001_initial.py +++ b/parlamentares/migrations/0001_initial.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/parlamentares/migrations/0002_auto_20150729_1310.py b/parlamentares/migrations/0002_auto_20150729_1310.py index 1cb4c1188..102db958e 100644 --- a/parlamentares/migrations/0002_auto_20150729_1310.py +++ b/parlamentares/migrations/0002_auto_20150729_1310.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/parlamentares/migrations/0003_auto_20150729_1717.py b/parlamentares/migrations/0003_auto_20150729_1717.py index 066201542..946e5bb4c 100644 --- a/parlamentares/migrations/0003_auto_20150729_1717.py +++ b/parlamentares/migrations/0003_auto_20150729_1717.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/parlamentares/migrations/0004_auto_20150929_1425.py b/parlamentares/migrations/0004_auto_20150929_1425.py index 7a19d3765..ffb8ca672 100644 --- a/parlamentares/migrations/0004_auto_20150929_1425.py +++ b/parlamentares/migrations/0004_auto_20150929_1425.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/parlamentares/migrations/0005_parlamentar_fotografia.py b/parlamentares/migrations/0005_parlamentar_fotografia.py index c81ab2ef2..db67012a2 100644 --- a/parlamentares/migrations/0005_parlamentar_fotografia.py +++ b/parlamentares/migrations/0005_parlamentar_fotografia.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models + import parlamentares.models diff --git a/parlamentares/migrations/0006_auto_20151119_1318.py b/parlamentares/migrations/0006_auto_20151119_1318.py index f220639a4..443dbcced 100644 --- a/parlamentares/migrations/0006_auto_20151119_1318.py +++ b/parlamentares/migrations/0006_auto_20151119_1318.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/protocoloadm/migrations/0001_initial.py b/protocoloadm/migrations/0001_initial.py index a4a71a154..a9f0277e4 100644 --- a/protocoloadm/migrations/0001_initial.py +++ b/protocoloadm/migrations/0001_initial.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/protocoloadm/migrations/0002_auto_20150729_1717.py b/protocoloadm/migrations/0002_auto_20150729_1717.py index 6e3073134..253bbb0eb 100644 --- a/protocoloadm/migrations/0002_auto_20150729_1717.py +++ b/protocoloadm/migrations/0002_auto_20150729_1717.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/protocoloadm/migrations/0003_documentoacessorioadministrativo_texto_integral.py b/protocoloadm/migrations/0003_documentoacessorioadministrativo_texto_integral.py index 0d80f3f8d..7d41c8776 100644 --- a/protocoloadm/migrations/0003_documentoacessorioadministrativo_texto_integral.py +++ b/protocoloadm/migrations/0003_documentoacessorioadministrativo_texto_integral.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models + import protocoloadm.models diff --git a/protocoloadm/migrations/0004_auto_20151007_1035.py b/protocoloadm/migrations/0004_auto_20151007_1035.py index 909f48138..5be623a0f 100644 --- a/protocoloadm/migrations/0004_auto_20151007_1035.py +++ b/protocoloadm/migrations/0004_auto_20151007_1035.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models + import protocoloadm.models diff --git a/protocoloadm/migrations/0005_auto_20151008_0744.py b/protocoloadm/migrations/0005_auto_20151008_0744.py index a7e93611a..799a501e6 100644 --- a/protocoloadm/migrations/0005_auto_20151008_0744.py +++ b/protocoloadm/migrations/0005_auto_20151008_0744.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models + import protocoloadm.models diff --git a/requirements/requirements.txt b/requirements/requirements.txt index 80547dc4c..7d7abaf98 100644 --- a/requirements/requirements.txt +++ b/requirements/requirements.txt @@ -9,6 +9,7 @@ django-crispy-forms django-extra-views django-vanilla-views git+git://github.com/interlegis/django-sass-processor.git +git+git://github.com/LeandroRoberto/odfpy.git libsass psycopg2 pytz diff --git a/sapl/utils.py b/sapl/utils.py index 62a96c0e2..139a504c2 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -37,3 +37,30 @@ def make_choices(*choice_pairs): 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 diff --git a/sessao/migrations/0001_initial.py b/sessao/migrations/0001_initial.py index 4151a7610..fe4d09a66 100644 --- a/sessao/migrations/0001_initial.py +++ b/sessao/migrations/0001_initial.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/sessao/migrations/0002_auto_20150729_1450.py b/sessao/migrations/0002_auto_20150729_1450.py index df29f69e5..6212c5f3f 100644 --- a/sessao/migrations/0002_auto_20150729_1450.py +++ b/sessao/migrations/0002_auto_20150729_1450.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/sessao/migrations/0003_remove_sessaoplenaria_tipo_expediente.py b/sessao/migrations/0003_remove_sessaoplenaria_tipo_expediente.py index 4dcc588c1..71e92b3d2 100644 --- a/sessao/migrations/0003_remove_sessaoplenaria_tipo_expediente.py +++ b/sessao/migrations/0003_remove_sessaoplenaria_tipo_expediente.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/sessao/migrations/0004_auto_20150806_1614.py b/sessao/migrations/0004_auto_20150806_1614.py index 03d6f8cbb..aaa5fe6c9 100644 --- a/sessao/migrations/0004_auto_20150806_1614.py +++ b/sessao/migrations/0004_auto_20150806_1614.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models + import sessao.models diff --git a/sessao/migrations/0005_remove_presencaordemdia_data_ordem.py b/sessao/migrations/0005_remove_presencaordemdia_data_ordem.py index 4064bdd68..8d73c542e 100644 --- a/sessao/migrations/0005_remove_presencaordemdia_data_ordem.py +++ b/sessao/migrations/0005_remove_presencaordemdia_data_ordem.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/sessao/migrations/0006_auto_20150929_1425.py b/sessao/migrations/0006_auto_20150929_1425.py index 429442f2b..4b438a29f 100644 --- a/sessao/migrations/0006_auto_20150929_1425.py +++ b/sessao/migrations/0006_auto_20150929_1425.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/sessao/migrations/0007_auto_20150929_1426.py b/sessao/migrations/0007_auto_20150929_1426.py index 6233ceb00..d97091ecb 100644 --- a/sessao/migrations/0007_auto_20150929_1426.py +++ b/sessao/migrations/0007_auto_20150929_1426.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/sessao/migrations/0008_auto_20151005_0814.py b/sessao/migrations/0008_auto_20151005_0814.py index d48449e4c..95cc5532a 100644 --- a/sessao/migrations/0008_auto_20151005_0814.py +++ b/sessao/migrations/0008_auto_20151005_0814.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/sessao/migrations/0009_auto_20151005_0934.py b/sessao/migrations/0009_auto_20151005_0934.py index dfb988970..b4d6819d6 100644 --- a/sessao/migrations/0009_auto_20151005_0934.py +++ b/sessao/migrations/0009_auto_20151005_0934.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): diff --git a/static/img/ajax-loader.gif b/static/img/ajax-loader.gif new file mode 100644 index 000000000..812bcf757 Binary files /dev/null and b/static/img/ajax-loader.gif differ diff --git a/static/img/down_arrow_select.jpg b/static/img/down_arrow_select.jpg new file mode 100644 index 000000000..a3a75352d Binary files /dev/null and b/static/img/down_arrow_select.jpg differ diff --git a/static/img/hand-note.png b/static/img/hand-note.png new file mode 100644 index 000000000..43c757bf1 Binary files /dev/null and b/static/img/hand-note.png differ diff --git a/static/img/icon_delete_white.png b/static/img/icon_delete_white.png new file mode 100644 index 000000000..f06892bff Binary files /dev/null and b/static/img/icon_delete_white.png differ diff --git a/static/img/icon_save_white.png b/static/img/icon_save_white.png new file mode 100644 index 000000000..8f9ccbbf1 Binary files /dev/null and b/static/img/icon_save_white.png differ diff --git a/static/js/compilacao.js b/static/js/compilacao.js new file mode 100644 index 000000000..6cd8fc345 --- /dev/null +++ b/static/js/compilacao.js @@ -0,0 +1,39 @@ +function initTinymce() { + + tinymce.init({ + mode : "textareas", + force_br_newlines : false, + force_p_newlines : false, + forced_root_block : '', + plugins: ["table save code"], + menubar: "edit format table tools", + toolbar: "save | undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent", + tools: "inserttable", + save_onsavecallback: onSubmitEditForm, + border_css: "/static/styles/compilacao_tinymce.css", + content_css: "/static/styles/compilacao_tinymce.css" + }); +} + +function SetCookie(cookieName,cookieValue,nDays) { + var today = new Date(); + var expire = new Date(); + if (nDays==null || nDays==0) nDays=1; + expire.setTime(today.getTime() + 3600000*24*nDays); + document.cookie = cookieName+"="+escape(cookieValue) + + ";expires="+expire.toGMTString(); +} + +function ReadCookie(cookieName) { + var theCookie=" "+document.cookie; + var ind=theCookie.indexOf(" "+cookieName+"="); + if (ind==-1) ind=theCookie.indexOf(";"+cookieName+"="); + if (ind==-1 || cookieName=="") return ""; + var ind1=theCookie.indexOf(";",ind+1); + if (ind1==-1) ind1=theCookie.length; + return unescape(theCookie.substring(ind+cookieName.length+2,ind1)); +} + +function insertWaitAjax(element) { + jQuery(element).append('
'); +} diff --git a/static/js/compilacao_edit.js b/static/js/compilacao_edit.js new file mode 100644 index 000000000..1c7cb9226 --- /dev/null +++ b/static/js/compilacao_edit.js @@ -0,0 +1,254 @@ + +var editortype = "textarea"; +var gets = 0; +var onSubmitEditForm = function(event) { + + var texto = ''; + var editorTiny = tinymce.get('editdi_texto'); + + if (editorTiny != null) + texto = editorTiny.getContent(); + else + texto = $('#editdi_texto').val(); + + var formData = { + 'csrfmiddlewaretoken' : $('input[name=csrfmiddlewaretoken]').val(), + 'texto' : texto + }; + + var url = $('.csform form').attr( "action_ajax" ); + $("#message_block").css("display", "block"); + + $.post(url, formData) + .done(function(data) { + + if (typeof data == "string") { + $('.dpt-selected').html(data); + clearEditSelected(); + reloadFunctionClicks(); + return; + } + + clearEditSelected(); + + if (data.pk != null) + refreshScreenFocusPk(data); + else { + alert('Erro na inserção!'); + flag_refresh_all = false; + } + + }).always(function() { + $("#message_block").css("display", "none"); + }); + if (event != null) + event.preventDefault(); +} + + +var clickEditDispositivo = function(event) { + var _pk = event.currentTarget.getAttribute('pk'); + if ($('#dpt'+_pk).hasClass("dpt-selected")) { + clearEditSelected(); + return; + } + clearEditSelected(); + clickUpdateDispositivo(event); +} + +var clickUpdateDispositivo = function(event, __pk_refresh, __pk_edit, __action, flag_actions_vibible, flag_refresh_all) { + + var pk_refresh = __pk_refresh; + var pk_edit = __pk_edit; + var _action = __action; + var _variacao = ''; + var _tipo_pk = ''; + var _perfil_pk = ''; + + if (event != null) { + pk_refresh = event.currentTarget.getAttribute('pk'); + _action = $(this).attr('action'); + _variacao = $(this).attr('variacao'); + _tipo_pk = $(this).attr('tipo_pk'); + _perfil_pk = $(this).attr('perfil_pk'); + } + + if (pk_edit == null) + pk_edit = pk_refresh; + + var url = ''; + if (_action == '') + return; + else if ( _action == null) { + url = pk_refresh+'/refresh?edit='+pk_edit; + } + else if (_action.startsWith('refresh')) { + var str = _action.split(':'); + if (str.length > 1) { + if(_action.endsWith('perfil')) { + url = '&perfil_pk='+_perfil_pk; + $("#message_block").css("display", "block"); + } + else { + editortype = str[1]; + SetCookie("editortype", editortype, 30) + } + } + url = pk_refresh+'/refresh?edit='+pk_edit+url; + + } + else if (_action.startsWith('add_')) { + + url = pk_refresh+'/actions?action='+_action; + url += '&tipo_pk='+_tipo_pk; + url += '&variacao='+_variacao; + + $("#message_block").css("display", "block"); + + } + else if (_action.startsWith('delete_')) { + var r = confirm("Confirma Exclusão deste dispositivo?"); + if (r == true) { + x = "You pressed OK!"; + } else { + return + } + url = pk_refresh+'/actions?action='+_action; + $("#message_block").css("display", "block"); + } + + $.get(url).done(function( data ) { + if ( _action == null || _action.startsWith('refresh')) { + + if (flag_refresh_all) { + if (flag_actions_vibible) + clearEditSelected(); + + $( '#dpt' + pk_refresh ).html( data); + } + else { + //console.log(pk_refresh + ' - '+pk_edit) + if (flag_actions_vibible == null || flag_actions_vibible) + clearEditSelected(); + + $( '#dpt' + pk_refresh ).prepend( data ); + } + + reloadFunctionClicks(); + + var _editortype = editortype; + if ( $('.edt-'+_editortype).length == 0) { + _editortype = 'construct'; + } + + if ( _editortype == 'tinymce' ) { + initTinymce(); + } + else if (_editortype == 'textarea') { + $('.csform form').submit(onSubmitEditForm); + } + else if (_editortype == 'construct') { + $('.csform .btn-salvar').parent().addClass("displaynone"); + $('.csform .btn-salvar, .csform .fields').addClass("displaynone"); + $('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2); + $('.actions_inserts').removeClass('menu_flutuante'); + } + else if (_editortype == 'detail') { + $('.csform .btn-salvar').parent().removeClass("displaynone"); + $('.csform .btn-salvar, .csform .fields').removeClass("displaynone"); + $('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2); + $('.actions_inserts').addClass('menu_flutuante'); + } + + $(".edt-"+_editortype).addClass('selected'); + //$(".container").addClass('class_color_container'); + + if (flag_actions_vibible == null || flag_actions_vibible) { + $('#dpt'+pk_edit).addClass('dpt-selected'); + $('html, body').animate({ + scrollTop: $('#dpt' + pk_edit ).offset().top - window.innerHeight / 10 + }, 300); + } + } + + else if (_action == 'add_next' || _action == 'add_in') { + clearEditSelected(); + if (data.pk != null) { + + if (data.alert != null) + alert(data.alert) + + refreshScreenFocusPk(data); + } + else { + alert('Erro na inserção!'); + } + } + else if (_action.startsWith('delete_')) { + $("#message_block").css("display", "block"); + clearEditSelected(); + if (data.pk != null) { + refreshScreenFocusPk(data); + } + else { + alert('Erro exclusão!'); + } + } + else { + clearEditSelected(); + reloadFunctionClicks(); + } + }).always(function() { + $("#message_block").css("display", "none"); + }); +} + +function refreshScreenFocusPk(data) { + + for (var pai = 0; pai < data.pai.length; pai++) + if (data.pai[pai] != -1) { + clickUpdateDispositivo(null, data.pai[pai], data.pk, 'refresh', pai == 0, true); + } + else { + href = location.href.split('#')[0] + location.href = href+'#'+data.pk + location.reload(true) + } +} + +function clearEditSelected() { + $(".container").removeClass('class_color_container'); + tinymce.remove(); + $('.dpt-selected').removeClass('dpt-selected'); + $('.dpt').css('min-height', ''); + $('.csform').remove(); +} + +function reloadFunctionClicks() { + $('.dpt .de, .btn-action, .btn-edit').off(); + + $('.dpt .de, .btn-edit').on('click', clickEditDispositivo); + + $('.btn-action').on('click', clickUpdateDispositivo); + + $('#editdi_texto').focus(); +} + +$(document).ready(function() { + + editortype = ReadCookie("editortype") + + if (editortype == null || editortype == "") { + editortype = "textarea" + SetCookie("editortype", editortype, 30) + } + + reloadFunctionClicks(); + $("#message_block").css("display", "none"); + + href = location.href.split('#') + if (href.length == 2) { + clickUpdateDispositivo(null, href[1], href[1], 'refresh', true); + } + +}); diff --git a/static/js/compilacao_notas.js b/static/js/compilacao_notas.js new file mode 100644 index 000000000..4c6a09bda --- /dev/null +++ b/static/js/compilacao_notas.js @@ -0,0 +1,179 @@ + +function onEventsDneExec(pk) { + + $('html, body').animate({ + scrollTop: $('#dne' + pk ).offset().top - window.innerHeight / 5 + }, 300); + + $('.dateinput').fdatepicker({ + // TODO localize + format: 'dd/mm/yyyy', + language: 'pt', + endDate: '31/12/2100', + todayBtn: true + }); + + $('#dne'+pk+" .primary").click(onSubmitEditForm); + $('#dne'+pk+" .btn-close-container").click(function(){ + $(this).closest('.dne-nota').removeClass('dne-nota'); + $(this).closest('.dne-form').html(''); + }); + + $('#dne'+pk+" select[name='tipo']").change(function(event) { + var url = ''; + url = 'compilacao/'+pk+'/nota/create?action=modelo_nota&id_tipo='+this.value; + $.get(url).done(function( data ) { + $('#dne'+pk+" textarea[name='texto']").val(data); + }); + }); + + $('#dne'+pk+" select[name='tipo_norma']" + ).change(onChangeParamNorma); + + $('#dne'+pk+" input[name='num_norma'], " + + '#dne'+pk+" input[name='ano_norma'], " + + '#dne'+pk+" input[name='busca_dispositivo']" + ).change(onChangeParamNorma); + + $('#dne'+pk+" .btn-busca").click(onChangeParamNorma); + + onChangeParamNorma(); +} +var onChangeParamNorma = function(event) { + var tipo_norma = $("select[name='tipo_norma']").val(); + var num_norma = $("input[name='num_norma']").val(); + var ano_norma = $("input[name='ano_norma']").val(); + var busca_dispositivo = $("input[name='busca_dispositivo']").val(); + var dispositivo_ref = $("#id_dispositivo_ref").val(); + $('#id_dispositivo_ref').remove(); + + if (dispositivo_ref == null) + dispositivo_ref = '' + + var url = ''; + var pk = $("select[name='tipo_norma']").closest('.dne').attr('pk') + + var formData = { + 'tipo_norma' : tipo_norma, + 'num_norma' : num_norma, + 'ano_norma' : ano_norma, + 'busca' : busca_dispositivo, + 'tipo_form' : 'radio', + 'initial_ref' : dispositivo_ref + }; + + url = 'compilacao/search'; + $('.container-busca').html(''); + insertWaitAjax('.container-busca') + $.get(url, formData).done(function( data ) { + $('.container-busca').html(data); + $("input[name='dispositivo_ref']").first().prop('checked', true); + }); +} + +var onSubmitEditForm = function(event) { + + var url = ''; + var model = 'nota'; + var id_edit = null; + var id_dispositivo = $('#id_dispositivo').val(); + + if (id_dispositivo == null) { // trata-se de um vide + $('#id_dispositivo_ref').remove(); + id_dispositivo = $('#id_dispositivo_base').val(); + model='vide'; + } + + id_edit = $('#id_pk').val(); + url = 'compilacao/'+id_dispositivo+'/'+model+'/' + if (id_edit == null || id_edit == '') + url += 'create'; + else + url += id_edit+'/edit'; + + console.log($('#dne'+id_dispositivo+" form").serialize()); + + $.post( url, $('#dne'+id_dispositivo+" form").serialize(), function(data) { + + if (typeof data == "string") { + if (data.indexOf('= 0) { + $('#dne'+id_dispositivo+' .dne-form').html(data); + onEventsDneExec(id_dispositivo); + } + else { + $('#dne'+id_dispositivo+' .dne-form').closest('.dpt').html(data) + onReadyNotasVides(); + + $('html, body').animate({ + scrollTop: $('#dne' + id_dispositivo ).offset().top - window.innerHeight / 3 + }, 300); + + } + } + } + ); +} +var onDelete = function(event) { + + var model = $(event).attr('model'); + + var id_dispositivo = $(event).closest('.dn').attr('pk'); + var id_delete = $(event).attr('pk'); + var url = 'compilacao/'+id_dispositivo+'/'+model+'/'+id_delete+'/delete'; + + $.get( url, function(data) { + $('#dne'+id_dispositivo+' .dne-form').closest('.dpt').html(data) + onReadyNotasVides(); + } + ); +} + +function getForm(_this) { + + var url = ''; + var model = $(_this).attr('model'); + var id_dispositivo = $('.dne-nota .dne-form').closest('.dne').attr('pk'); + if (id_dispositivo != null) { + $('#dne'+id_dispositivo).removeClass('dne-nota'); + $('#dne'+id_dispositivo+' .dne-form').html(''); + } + + if (_this.className.indexOf('create') >= 0 ) { + id_dispositivo = $(_this).attr('pk'); + url = 'compilacao/'+id_dispositivo+'/'+model+'/create'; + } + else if (_this.className.indexOf('edit') >= 0 ) { + var id_edit = $(_this).attr('pk'); + id_dispositivo = $(_this).closest('.dn').attr('pk'); + url = 'compilacao/'+id_dispositivo+'/'+model+'/'+id_edit+'/edit' + } + + $('#dne'+id_dispositivo).addClass('dne-nota'); + + $.get(url).done(function( data ) { + $('#dne'+id_dispositivo+' .dne-form').html(data); + onEventsDneExec(id_dispositivo); + }).fail(function() { + onReadyNotasVides(); + }); +} + +function onReadyNotasVides() { + + $('.dne-nota').removeClass('dne-nota'); + $('.dne-form').html(''); + + $('.dne .btn-action').off(); + $('.dn .btn-action').off(); + + $('.dne .btn-action, .dn .btn-action').not('.btn-nota-delete').not('.btn-vide-delete').click(function(){ + getForm(this); + }); + + $('.dn .btn-nota-delete, .dn .btn-vide-delete').click(function(){ + onDelete(this); + }); +} +$(document).ready(function() { + onReadyNotasVides() +}); diff --git a/static/js/compilacao_view.js b/static/js/compilacao_view.js new file mode 100644 index 000000000..d196ef3e4 --- /dev/null +++ b/static/js/compilacao_view.js @@ -0,0 +1,40 @@ +$( window ).scroll(function() { + if (window.pageYOffset <= 180) + $( "section.vigencias" ).removeClass("fixed"); + else if (!$( "section.vigencias" ).hasClass("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) { + $(".cp .tipo-vigencias a").removeClass("selected") + $(item).addClass("selected") + $(".desativado").removeClass("displaynone"); + $(".link_alterador").removeClass("displaynone"); +} + +function textoVigente(item, link) { + $(".cp .tipo-vigencias a").removeClass("selected") + $(item).addClass("selected") + $(".desativado").addClass("displaynone"); + $(".link_alterador").removeClass("displaynone"); + if (!link) + $(".link_alterador").addClass("displaynone"); +} + +$(document).ready(function() { + $("#btn_font_menos").click(function() { + $(".dpt").css("font-size", "-=1"); + }); + $("#btn_font_mais").click(function() { + $(".dpt").css("font-size", "+=1"); + }); +}); diff --git a/static/styles/compilacao.scss b/static/styles/compilacao.scss index 972ebad31..f51ab838a 100644 --- a/static/styles/compilacao.scss +++ b/static/styles/compilacao.scss @@ -1,178 +1,1309 @@ +$color_actions: #16407c; +$color_actions_border: #CCC; +@mixin background-top-down($top, $bottom) { + background: $top; + background-image: -webkit-linear-gradient(top, $top, $bottom); + background-image: -moz-linear-gradient(top, $top, $bottom); + background-image: -ms-linear-gradient(top, $top, $bottom); + background-image: -o-linear-gradient(top, $top, $bottom); + background-image: linear-gradient(to bottom, $top, $bottom); +} - -.articulacao div { - background-color: #fff; +@mixin border-radius($radius) { + -webkit-border-radius: $radius; + -moz-border-radius: $radius; + -ms-border-radius: $radius; + -o-border-radius: $radius; + border-radius: $radius; } +@mixin placeholder($color, $opacity, $fontsize, $fontweight) { + &::-webkit-input-placeholder { + color: $color !important; + opacity: $opacity; + font-size:$fontsize; + font-weight: $fontweight; + } + &::-moz-placeholder { + color: $color !important; + opacity: $opacity; + font-size:$fontsize; + font-weight: $fontweight; + } + &::-moz-placeholder { + color: $color !important; + opacity: $opacity; + font-size:$fontsize; + font-weight: $fontweight; + } + &:-ms-input-placeholder { + color: $color !important; + opacity: $opacity; + font-size:$fontsize; + font-weight: $fontweight; + } +} -.dispositivo { - background-color: #ddd !important; - transition: all .4s ease-in-out; - display:inline; +a:link:after, a:visited:after { + content: ""; } +@mixin li_flutuante() { -.dispositivo .ementa { - padding: 4em 0em 3em 50%; - font-weight: bold; - -} + & > ul { + transform: translateY(30px); + transition: transform 0.1s linear, opacity 0.1s linear, clip 0s 0.3s; + clip: rect(0, 0, 0, 0); + opacity: 0; + position:absolute; + margin-left: 0.5em; + box-shadow: 0px 6px 18px rgba(0, 0, 0, 0.19), 0px 2px 6px rgba(0, 0, 0, 0.23); + + -webkit-transition-delay: 0.4s; /* Safari */ + transition-delay: 0.4s; + li { + a { + border-right: 0px !important; + } -.dispositivo .anexo { - font-size: 1.4em; - text-align: center; - font-weight: bold; - margin-top: 3em; -} -.dispositivo .parte { - font-size: 1.5em; - text-align: center; - font-weight: bold; - margin-top: 2em; + &:first-child { + + &::before { + border-width: 0.375rem; + border-style: inset inset solid; + content: ""; + display: block; + height: 0px; + width: 0px; + border-color: transparent transparent #3385CA; + position: absolute; + top: -0.75rem; + left: 0.9375rem; + } + &:hover::before { + border-color: transparent transparent #0A5EA4; + } + } + } + // This bridges the gap between the top bar and a dropdown. + &::after { + content: ""; + position: absolute; + z-index: -1; + left: 0; + top: rem-calc(-25px); + height: rem-calc(25px); + width: 100%; + // This transition is for hover-on. + transition: all 0.3s cubic-bezier(0.55,0,0.1,1); + } + } + &:hover > ul { + + transform: translateY(7px); + // This transition is actually for when we hover-out of the dropdown. + transition: transform 0.4s linear, + opacity 0.4s linear, + clip 0s 0.2s; + opacity: 1; + clip: rect(-100px, 2000px, 2000px, -100px); + + } + } -.dispositivo .livro { - font-size: 1.5em; - text-align: center; - font-weight: bold; - margin-top: 2em; +.test_import:nth-child(even) { + background-color: #ccc; } +#message_block { + display: block; + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-color: rgba(220, 220, 220, 0.75); + z-index:99; -.dispositivo .titulo { - font-size: 1.5em; - text-align: center; - font-weight: bold; - margin-top: 2em; -} + #msg{ + position: relative; + margin: 20% auto; + padding: 1.2em 2em; + max-width: 600px; + text-align: center; + font-size: 1.5em; + color: #677; -.dispositivo .capitulo { - margin-top: 1.5em; - font-size: 1.3em; - text-align: center; - font-weight: bold; + border: 1px solid #eee; + background-color: #fff !important; + box-shadow: 0 1px 2px #999; + } } -.dispositivo .secao { - margin-top: 0.8em; - font-size: 1.2em; - text-align: center; - font-weight: bold; -} -.dispositivo .subsecao, .dispositivo .itemsecao { - margin-top: 0.8em; - font-size: 1.2em; - text-align: center; - font-style: italic; - font-weight: bold; -} +.cp { + .desativado, .desativado * { + text-decoration: line-through; + color: #999 !important; -.dispositivo .artigo { - font-size: 1.15em; - float:left; -} -.dispositivo .caput { - font-size: 1.15em; - margin-bottom: 0.5em; - display: block; -} - -.dispositivo .paragrafo { - margin-left: 1.5em; - font-size: 1.1em; - margin-top: 5px; - margin-bottom: 3px; + table, table td { + border: 1px dotted #ccc; + } + } + + .dpt { + font-size:1em; + transition: all 0.2s ease-in-out; + position: relative; + + + .ementa { + padding: 4em 0em 3em 35%; + font-weight: bold; + } + + .titulo_generico { + text-align: center; + font-weight: bold; + margin-bottom: 1em; + font-size: 1.5em; + margin-top: 3em; + } + + .anexo, + .disp_preliminares, + .disp_gerais, + .disp_transitorias, + .disp_finais, + .parte, + .livro { + @extend .titulo_generico; + } + + .titulo { + @extend .titulo_generico; + margin-top: 2em; + } + + .capitulo { + @extend .titulo_generico; + margin-top: 1.5em; + font-size: 1.3em; + } + + .secao { + @extend .titulo_generico; + margin-top: 1.2em; + margin-bottom: 0.7em; + font-size: 1.2em; + } + + .subsecao, + .itemsecao { + @extend .titulo_generico; + margin-top: 1em; + margin-bottom: 0.6em; + font-size: 1.2em; + font-style: italic; + } + + .artigo { + font-size: 1.15em; + float:left; + .dptt { + z-index: 89; + position: relative; + } + } + + .caput { + margin-top: 0.3333em; + font-size: 1.15em; + } + + .paragrafo { + padding-left: 1.5em; + font-size: 1.1em; + margin-top: 0.2222em; + } + + .inciso { + font-size: 1.1em; + padding-left: 2.5em; + margin-top: 0.1667em; + } + + .alinea { + font-size: 1.0em; + padding-left: 3.5em; + margin-top: 2px; + } + + .item { + font-size: 1.0em; + padding-left: 4.5em; + margin-top: 2px; + } + + a { + color: #444444; + &.link_alterador { + color: #2980B9; + font-size: 0.75em; + } + &.desativado { + @extend .desativado; + } + } + + .bloco_alteracao { + padding-left: 10%; + font-style: italic; + color: #018; + + a { + text-decoration: underline; + } + + a, table, table td { + color: #018 !important; + } + } + + .dn { /* Notas de Dispositivo*/ + font-size: 0.8rem; + font-weight: normal; + line-height: 1rem; + position: relative; + p, ul { + font-size: 0.8rem; + font-weight: normal; + line-height: 1rem; + margin: 0 0 0 0; + list-style: none; + } + + .dnl { /* Lista Notas de Dispositivo*/ + display: block; + text-align: left !important; + + * { + display: inline; + } + + .bullet { + padding: 0 0.333em; + padding-bottom: 0.2em; + display: inline-block; + } + .dnli { + min-height: 2.5em; + &:hover { + ul { + transition: opacity 0.5s linear, clip 0s 0.3s; + clip: auto; + opacity: 1; + background: rgba(230,230,230, 0.9); + } + } + + ul { + transition: opacity 0.5s linear, clip 0s 0.3s; + clip: rect(0, 0, 0, 0); + opacity: 0; + position: absolute; + background: transparent; + right: 0; + padding: 0.5em 0.5em 0em 0.5em; + border: 1px solid #c7e3d3; + border-top: 0px; + li { + display: table-cell; + color: #aaa; + + &:hover { + color: #787; + a{ + color: #27AE60 !important; + } + } + .nowner { + color: #27AE60 !important; + } + } + } + + .ntitulo { + font-weight: bold; + color: #676; + font-size: 90%; + text-decoration: none; + a{ + color: #294 !important; + } + } + .ntexto { + color: #787; + a{ + color: #294 !important; + } + } + } + &:hover { + display: block; + + + * { + display: block; + } + & > .bullet { + display: none; + } + .dnli { + margin-top: 0.5em; + border-top: 1px solid #c7e3d3; + } + } + } + + } + + .dptt { + .dne { + text-decoration: none; + position: relative; + display: block; + font-size: 0.8rem; + font-weight: normal; + line-height: 1rem; + text-align: left; + height: 0; + transform: scaleY(0); + transform-origin: top; + transition: all 0.3s ease; + * { + font-size: 0.8rem; + font-weight: normal; + line-height: 1rem; + text-decoration: none !important; + } + + ul.btns-action { + position: absolute; + margin: 0 0 0 0; + display: table; + list-style: none; + clip: rect(0,0,0,0); + opacity: 0; + transition: opacity 1.5s linear, clip 1s linear; + transition-delay: 0s; + border-collapse:separate; + border-spacing:0.5em; + li { + display: table-cell; + a { + background-color: #DDD; + border-radius: 50%; + width: 3rem; + height: 3rem; + display: inline-block; + font-size: 203%; + line-height: 3rem; + text-align: center; + &.btn-nota-create { + background: #ddd url(/static/img/hand-note.png) no-repeat 50% 50%; + } + &.btn-vide-create { + } + &:hover { + background-color: #Cdc ; + } + } + } + } + } + .dne-nota { + 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); + + transform: scaleY(1); + height: auto; + transition-delay: 0s; + margin: 1em 0 2em 0; + padding: 0em; + ul.btns-action { + display: none; + } + + .dne-form { + .asterisk { + color: transparent; + &::before { + color: red; + content: "\2b25"; + padding: 0 0.333em; + vertical-align: super; + } + } + .title_form { + font-size: 2.5em; + padding: 0.5em 0.3em 0.2em; + background: #e5e5e5; + color: #777; + margin-bottom: 0.4em; + border-bottom: 1px solid #aaa; + } + fieldset { + border: 0px; + } + select { + background: url(/static/img/down_arrow_select.jpg) no-repeat right #ddd; + border: 0px; + outline:0px; + } + .row:first-of-type { + margin-top: 1em; + display: inline-block; + } + .columns { + padding: 0 0.5rem; + } + .input { + border: 0px; + border-bottom: 1px solid #ccc; + margin: 0 0 0 0 ; + padding: 0.5em; + background: #eee; + height: auto; + box-shadow: 0 0 0; + @include placeholder(#777, 1, 100%, normal); + &:focus { + background: #fafafa; + @include placeholder(#456, 1, 100%, normal); + } + } + .textinput{ + @include placeholder(#777, 1, 90%, normal); + &:focus { + background: #fafafa; + @include placeholder(#456, 1, 90%, normal); + } + } + .textinput[name='titulo']{ + @extend .input; + font-size:130%; + font-weight: bold; + border-bottom: 0; + @include placeholder(#777, 1, 100%, bold); + &:focus { + background: #fafafa; + @include placeholder(#777, 1, 100%, bold); + } + } + + .textarea { + @extend .input; + resize: vertical; + font-weight: normal; + } + + .urlinput { + @extend .input; + margin-bottom: 1em; + } + + .button { + width: 100%; + margin-top: 1.6em; + padding: 0; + height: 2.835em; + } + .btn-busca { + margin-top: 1.25em; + } + .container-busca { + ul{ + list-style: none; + display: table; + margin-left: 0; + border-collapse:separate; + border-spacing:1px; + + li { + display: table-row; + + &:nth-child(even) { + background-color: rgba(0, 0, 0, 0.05); + + } + &:nth-child(odd) { + background-color: rgba(0, 0, 0, 0.08); + + } + + .iteminput { + display: table-cell; + padding: 0.5em; + vertical-align: middle; + text-align: center; + + input { + margin: 0; + } + } + + .itemlabel { + display: table-cell; + + padding: 0.5em; + vertical-align: middle; + width: 100%; + } + } + } + .norma_title { + padding: 0.15em 0.7em; + background-color: rgba(0, 0, 0, 0.15); + margin: 0.1em 0.08em 0 0.1em; + } + .nomenclatura_heranca { + font-size: 90%; + color: #057dba; + } + } + } + } + &:hover { + .dne { + height: 4.3em; + transform: scaleY(1); + transition-delay: 1s; + + ul.btns-action { + clip: rect(-100px, 2000px, 2000px, -100px); + opacity: 1; + transition: opacity 0.5s linear, clip 0s 0.3s; + transition-delay: 0.5s; + li { + a { + } + } + } + } + .dne-nota { + transition-delay: 0s; + height: auto; + + } + } + + } + } /* and dpt */ + + .top-bar { + line-height: 1.6rem; + height: auto; + background: #2980B9; + z-index:1; + margin: 0 auto; + max-width: 62.5rem; + } + + .top-bar-section { + li:not(.has-form) { + a:not(.button) { + + @extend .top-bar; + padding: 0 0.43333rem; + + &.selected, &:hover { + background: #1056A0; + } + } + } + } + + ul.nav { + background: #2980B9; + display:block; + width: 100%; + z-index:1; + } + + .tipo-vigencias { + border-top: 1px solid #62B5B5; + } + + .vigencias { + margin: 2.5em 0 0 0; + transition: all .4s ease-in-out; + background: #2980B9; + clear:both; + } + + .fixed{ + + z-index:98; + opacity: 0.2; + transition: all 2s ease-in-out; + -webkit-transition-delay: 3s; /* Safari */ + transition-delay: 3s; + + &:hover { + -webkit-transition-delay: 0s; /* Safari */ + transition-delay: 0s; + transition: all 0.3s ease-in-out; + opacity: 0.9; + + &::-webkit-scrollbar { + width: 10px; + height: 10px; + } + + + &::-webkit-scrollbar-thumb:vertical { + height: 30px; + background-color: rgba(0, 0, 0, 0.1); + } + + } + } +} /* end cp */ + +.cpe { + + @extend .cp; + + margin-bottom: 15em; + margin-left: 0.8em; + + a { + text-decoration: none; + } + + .dpt { + position: relative; + display:block; + + .semtexto { + font-weight: bold; + color: #BFD1F6; + } + + .artigo { + float: none; + } + & > .actions_left { + color: #fff; + position: absolute; + left: -2.6em; + opacity: 0; + transition: all 0.4s ease-in-out; + a { + &.btn-edit { + @include background-top-down(#3498DB, #2980C9); + @include border-radius(7px); + color: #ffffff !important; + font-weight: bold; + padding: 2px 7px 2px 7px; + + &:hover { + @include background-top-down(#3cb0fd, #3498DB); + } + } + } + } + + &:hover > .actions_left { + opacity: 0.5; + background-color: transparent !important; + &::before { + content: ""; + border: inset 0.375rem; + border-color: transparent transparent transparent #3cb0fd; + position: absolute; + display: block; + height: 0; + width: 0; + top: 0.4rem; + right: -0.73rem; + } + &:hover { + opacity: 1; + &::before { + border-color: transparent transparent transparent #3cf0ff; + } + } + } + + + .bloco { + display: block; + clear: both; + *:hover { + color: #27AE60; + } + .de { + cursor: pointer; + } + } + .articulacao{ + margin-left: -0.8em; + margin-top: 2em; + &::before { + content: "Articulação"; + background-color: #eee; + border-bottom: 1px solid #aaa; + padding: 0.333em; + padding-left: 1em; + display:block; + } + } + .bloco_alteracao { + @extend .articulacao; + margin: 0; + padding-top: 3em; + padding-left: 0em; + background: #ddd; + &::before { + content: "Bloco de Alteração"; + + display: block; + } + } + + } /* fim dpt */ + + .dpt-selected { + font-size: 1em; + border: 0px solid $color_actions_border; + margin: 1em -2em 1em -2.8em; + 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); + + @include background-top-down(#eaeaee, #ddd); + + + ul { + list-style: none; + margin: 0; + padding: 0; + } + + .semtexto { + color: #999; + } + + .bloco { + opacity: 0.5; + &:hover { + opacity: 1; + } + a:hover { + background: transparent; + } + + } + + + & > .bloco { + padding: 1em 0; + opacity: 1; + margin: 0 !important; + } + + & > .dpt { + padding: 0; + &:last-child { + padding-bottom: 1em; + } + } + + & > .actions_left { + display: none; + } + + .csform { /* compilacao simple form */ + display: block; + clear: both; + z-index: 9; + position: static; + + .btns-action { + -webkit-animation: fadeIn 1s ease-in-out; + -moz-animation: fadeIn 1s ease-in-out; + -o-animation: fadeIn 1s ease-in-out; + opacity: 1; + + position: absolute; + display: table; + transition: all 0.4s ease-in-out; + + a { + color: $color_actions; + display: block; + background: transparent; + vertical-align: middle; + text-align: center; + font-weight: normal; + text-shadow: 0 0 10px rgba(0,0,0,0.3); + padding: 0.33em 0.4em; + } + + & > li { + position: relative; + display: table-cell; + vertical-align: top; + &:hover { + background-color: rgba(255, 255, 255, 0.5); + & > a { + text-shadow: 0 0 5px #777; + color: #0a5; + } + } + } + } + + .label_status { + position: absolute; + bottom: 0; + right: 0; + color: #889; + padding: 0.3em; + font-size: 80%; + text-align: right; + z-index: 5; + display: table; + li { + display: table-cell; + } + } + + .actions_parents { + z-index: 1; + top: 0em; + left: 0em; + a { + padding: 0.62em; + } + div, li { + font-size: 80%; + display: table-cell; + vertical-align: middle; + border-right: 1px solid $color_actions_border; + } + div { + padding: 0 0.4em; + font-stretch: condensed; + font-variant: small-caps; + font-weight: bold; + text-shadow: 0 0 10px #fff; + } + & > li { + &:hover a{ + color: $color_actions; + font-weight: normal; + } + } + } + + .actions_top { + top: 0em; + right: 0em; + a { + padding-right: 1em; + padding-left: 1em; + } + li { + display: table-cell; + vertical-align: middle; + border-left: 1px solid $color_actions_border; + } + } + + .actions_bottom { + @extend .actions_top; + top: auto; + left: 0; + bottom: 0; + display: inline-block; + border-top: 1px solid $color_actions_border; + a { + padding: 0 0.4em; + } + li { + border: 0px; + border-right: 1px solid $color_actions_border; + } + } + + .actions_right { + top: 2.2em; + right: 0em; + bottom:0; + display: block; + li { + width: 2.2em; + display: block; + border-bottom: 1px solid $color_actions_border; + &:first-child { + border-top: 1px solid $color_actions_border; + } + } + } + + .actions_left { + @extend .actions_right; + right: auto; + left: 0em; + } + + + + + + + .actions_inserts { + background: transparent; + position: relative; + z-index: 9; + display: table; + width: 100%; + + & > li { + display: table-cell; + + &:hover > a { + @include background-top-down(#1c81c4, #0b6dad); + } + & > a { + @include background-top-down(#3498DB, #2980C9); + border-right: 1px solid #fff; + padding: 0.2em; + display: block; + color: white; + text-align: center; + white-space: nowrap; + + + &.btn-excluir { + + text-align: left; + background: #A70808; + color: #c99; + padding-left: 1.7em; + position: relative; + + &:hover { + background-color: #c70808; + color: #ecc; + } + + &::before { + z-index: 10; + position: absolute; + background: url(/static/img/icon_delete_white.png) no-repeat 50% 50%; + content:""; + top: 0; + left: 0; + display: block; + color: black; + margin-left: 0.4em; + height: 100%; + width: 2em; + } + + } /* btn-excluir */ + + &.btn-salvar { + @extend .btn-excluir; + background: #1f8b4d; + color: white; + &:hover { + background: #2d9c5c; + color: white; + } + &::before { + background: url(/static/img/icon_save_white.png) no-repeat 50% 50%; + } + } + span { + padding: 0 0.7em; + } + } + + &:last-child > a{ + border-right: 0px solid #fff; + } + + & > ul { + li { + &:nth-child(even) a { + background: #3385CA; + } + a { + border-right: 1px solid #fff; + display: block; + color: white; + background: #2980C9; + font-size: 80%; + padding: 0.23em 1em; + &:hover { + background: #0a5ea4; + } + } + + } + } + &.add_prior { + @include li_flutuante(); + table-layout: fixed; + } + &.menu_excluir { + @include li_flutuante(); + display: block; + position: static; + + + & > ul { + right: 0.5em; + li { + a { + background-color: #A70808; + &:hover { + background: #c70808; + } + } + &:first-child { + &::before { + border-color: transparent transparent #A70808; + right: 10%; + left: auto; + } + &:hover::before { + border-color: transparent transparent #c70808; + } + } + } + } + + } + + } + } /* actions_inserts */ + + + .menu_flutuante { + & > li { + @include li_flutuante(); + + + &.menu_excluir { + & > ul { + li { + &:first-child { + &::before { + right: auto; + left: 0.9375rem; + } + } + } + } + } + } + } + + textarea { + margin: 0; + resize: vertical; + min-height: 12.6em; + border: 0px; + font-size: 120%; + &:focus { + background: #fff; + } + &::-webkit-input-placeholder { + color: #c70808; + opacity: 0.6; + font-size: 80%; + } + &:-moz-placeholder { /* Firefox 18- */ + color: #c70808; + } + &::-moz-placeholder { /* Firefox 19+ */ + color: #c70808; + } + &:-ms-input-placeholder { + color: #c70808; + opacity: 0.6; + } + } + } /* fim csform*/ + } + + .selected { + background-color: rgba(255, 255, 255, 0.5); + a { + &:hover { + color: $color_actions !important; + font-weight: normal !important; + } + } + } } - -.dispositivo .inciso { - font-size: 1.1em; - margin-left: 2.5em; - margin-top: 5px; - margin-bottom: 3px; +.btn-busca { + background-color: #0093dd; + &:hover { + background-color: #007ebe; + } + &:focus { + background-color: #036190; + } } -.dispositivo .alinea { - font-size: 1.0em; - margin-left: 3.5em; -} +.btn-close-container{ + position: absolute; + background-color: #AAA; + width: 2em; + height: 2em; + border: 0.3em solid #FFF; + top: -0.9em; + right: -0.9em; + border-radius: 50%; + cursor: pointer; + opacity: 0.7; + transform: rotate(45deg); -.dispositivo .item { - font-size: 1.0em; - margin-left: 4.5em; -} + .icon-close{ + background: #FFF; + height: 1.2em; + position: absolute; + width: 0.2em; + top: 0.15em; + left: 0.66em; -.dispositivo .desativado, .dispositivo .desativado * { - text-decoration: line-through; - color: #777 !important; -} -.dispositivo .desativado table, .dispositivo .desativado table td { - border: 1px dotted #ccc; - text-decoration: line-through; + + &::after { + background: #FFF; + content: ""; + height: 0.2em; + left: -0.5em; + position: absolute; + top: 0.48em; + width: 1.2em; + } + } + &:hover{ + opacity: 1; + } } -.dispositivo a { - color: #444444 !important; +.class_color_container { + background: #ddd !important; } -.dispositivo a.link_alterador { - color: #2980B9 !important; - font-size: 0.9rem; +.clear { + clear:both; } - -.dispositivo .bloco_alteracao { - margin-left: 5em; - font-style: italic; +.mce-panel { + border: 0px solid #ccc !important; } - -.dispositivo .bloco_alteracao:hover a { - text-decoration: underline; +.mce-btn button:hover { + background-color: rgba(0,0,0,0.1) !important; + text-shadow: 0 0 5px #fff; + box-shadow: 0 0 5px #777; } - -.dispositivo .bloco_alteracao, -.dispositivo .bloco_alteracao a, -.dispositivo .bloco_alteracao table, -.dispositivo .bloco_alteracao table td { - color: #018 !important; -} - -.compilacao .top-bar-section li:not(.has-form) a:not(.button), -.compilacao .top-bar { - line-height: 1.6rem; - height: auto; - background: #2980B9; - z-index:1; - margin: 0 auto; - max-width: 62.5rem; +.mce-menu { + background: #eee !important; } -.compilacao .top-bar-section li:not(.has-form) a:not(.button).selected, -.compilacao .top-bar-section li:not(.has-form) a:not(.button):hover { - background: #1056A0; +.displaynone { + display: none !important; } -.compilacao .top-bar-section li:not(.has-form) a:not(.button) { - padding: 0 0.43333rem; -} +@media only screen and (max-width: 40.0625em) { -.compilacao ul.nav { - background: #2980B9; - display:block; - width: 100%; - z-index:1; -} -.compilacao .tipo-vigencias { - border-top: 1px solid #62B5B5; -} - -.compilacao .vigencias { - margin: 2.5em 0 0 0; - transition: all .4s ease-in-out; - background: #2980B9; -} + .cp .fixed{ + z-index:98; + position: relative; + } + + .cpe { + .dpt-selected { + margin:1em -1em 1em -1.8em; -.compilacao .fixed{ - z-index:98; + .csform { + .actions_parents, .label_status { + font-size: 80%; + position:static !important; + display: block !important; + padding: 0em; + height: auto !important; + div, li { + display: inline-block !important; + } + } + + .actions_inserts { + & > li { + @include li_flutuante(); + + & > a { + span { + display: none; + } + &.btn-excluir, &.btn-salvar { + padding-left: 0; + min-width: 1em; + &::before { + width: 100%; + margin: 0; + } + } + } + &.add_in, &.add_next, &.add_prior { + position: static; + } + &.add_in > ul { + left: 1em !important; + right: 1em !important; + margin-left: 0; + li:first-child::before { + left: 37%; + } + } + &.add_next > ul { + left: 0 !important; + right: 1em !important; + } + &.add_prior > ul { + left: 1em !important; + right: 0 !important; + margin-left: 0; + margin-right: 0.5em; + li:first-child::before { + right: 42%; + left: auto; + } + } + &.menu_excluir > ul { + left: 10% !important; + right: 0 !important; + margin-left: 0; + margin-right: 0.5em; + li:first-child::before { + right: 27%; + left: auto; + } + } + } + } + } + } + } } -.displaynone { - display: none !important; -} \ No newline at end of file +@media print { + .cp .vigencias { + display:none; + } +} diff --git a/static/styles/compilacao_tinymce.css b/static/styles/compilacao_tinymce.css new file mode 100644 index 000000000..cf39b89ad --- /dev/null +++ b/static/styles/compilacao_tinymce.css @@ -0,0 +1,10 @@ + + +.mce-content-body { + font-family: "Open Sans" "Helvetica Neue", Helvetica, Roboto, Arial, sans-serif; + font-style: normal; + font-weight: normal; + line-height: 1.5; + font-size: 1em; + color: #444444; +} \ No newline at end of file diff --git a/templates/ajuda/impressos.html b/templates/ajuda/impressos.html index db2756275..30884eb35 100644 --- a/templates/ajuda/impressos.html +++ b/templates/ajuda/impressos.html @@ -10,8 +10,11 @@

Impressos


Esta função tem por objetivo a seleção de informações sobre matérias legislativas para a geração de Etiquetas, Fichas ou Guias de Remessa a serem impressas.
-

Etiquetas - Selecionar as matérias por faixa de número de processo ou selecionada por Tipo de matéria e intervalo de datas de entrada. Se a opção escolhida for por faixa de número de processo, informar o intervalo desejado: números inicial e final. Se a opção for a "selecionada", significa que deverão ser indicados o Tipo de Matéria por meio de seleção no combo box e o período desejado, preenchendo as datas inicial e final.

Em seguida, clicar em "gerar" para o sistema proceder à seleção das matérias. O resultado da consulta será a lista de matérias que atendem aos parâmetros informados. Ao lado de cada matéria é apresentado um checkbox, que deve ser assinalado se desejar gerar a etiqueta daquela matéria específica. Uma vez assinaladas as matérias, as quais se deseja gerar as etiquetas, clicar em "gerar" e o sistema irá apresentar as informações das matérias selecionadas já sob o formatado de etiquetas, uma para cada matéria selecionada, que conterá: tipo de matéria, número do processo, data de entrada, autor e o texto da ementa.

Fichas - Os procedimentos necessários para a seleção de matérias e geração das respectivas fichas é análogo aos indicados para a Etiqueta, excetuando-se o formato da saída que será o de uma ficha. Guias de Remessa - Assinalar se a Guia de Remessa será para Indicação ou Requerimento informando, também, a data e o número da sessão correspondente e clicar em "enviar". +

Etiquetas - Selecionar as matérias por faixa de número de processo ou selecionada por Tipo de matéria e intervalo de datas de entrada. Se a opção escolhida for por faixa de número de processo, informar o intervalo desejado: números inicial e final. Se a opção for a "selecionada", significa que deverão ser indicados o Tipo de Matéria por meio de seleção no combo box e o período desejado, preenchendo as datas inicial e final.

+

Em seguida, clicar em "gerar" para o sistema proceder à seleção das matérias. O resultado da consulta será a lista de matérias que atendem aos parâmetros informados. Ao lado de cada matéria é apresentado um checkbox, que deve ser assinalado se desejar gerar a etiqueta daquela matéria específica. Uma vez assinaladas as matérias, as quais se deseja gerar as etiquetas, clicar em "gerar" e o sistema irá apresentar as informações das matérias selecionadas já sob o formatado de etiquetas, uma para cada matéria selecionada, que conterá: tipo de matéria, número do processo, data de entrada, autor e o texto da ementa.

+

Fichas - Os procedimentos necessários para a seleção de matérias e geração das respectivas fichas é análogo aos indicados para a Etiqueta, excetuando-se o formato da saída que será o de uma ficha.

+

Guias de Remessa - Assinalar se a Guia de Remessa será para Indicação ou Requerimento informando, também, a data e o número da sessão correspondente e clicar em "enviar".


-

Após visualizar a lista contendo o resultado da seleção das matérias, colocar o formulário apropriado na impressora, de acordo com a opção escolhida, e acionar a função de impressão do navegador para imprimir efetivamente. +

Após visualizar a lista contendo o resultado da seleção das matérias, colocar o formulário apropriado na impressora, de acordo com a opção escolhida, e acionar a função de impressão do navegador para imprimir efetivamente.

{% endblock base_content %} diff --git a/templates/base.html b/templates/base.html index 17c56aa95..10ee92173 100644 --- a/templates/base.html +++ b/templates/base.html @@ -4,7 +4,7 @@ - + @@ -19,7 +19,6 @@ - {# Scripts #} {# modernizr must be in head (see http://modernizr.com/docs/#installing) #} diff --git a/templates/compilacao/ajax_form.html b/templates/compilacao/ajax_form.html new file mode 100644 index 000000000..52cbf0e30 --- /dev/null +++ b/templates/compilacao/ajax_form.html @@ -0,0 +1,3 @@ +{% load crispy_forms_tags %} +
+{% crispy form form.helper%} diff --git a/templates/compilacao/dispositivo_search_fragment_form.html b/templates/compilacao/dispositivo_search_fragment_form.html new file mode 100644 index 000000000..636818388 --- /dev/null +++ b/templates/compilacao/dispositivo_search_fragment_form.html @@ -0,0 +1,43 @@ +{% load i18n %} +{% load compilacao_filters %} + +{% if object_list.count >= 100 %} +
+ {% trans 'Use argumentos para simplificar listagem...' %} +
+{% endif %} + +{% for dpt in object_list %} + {% ifchanged dpt.norma%} + {% if not forloop.first %}{% endif %} +
{{dpt.norma}}
+
    + {% endifchanged %} + + {% if dpt.is_relative_auto_insert and dpt.dispositivo_pai and dpt.dispositivo_pai.nivel != 0 %} + +
  • +
    + +
    +
    + + {% nomenclatura_heranca dpt 1 1 %} +
    +
  • + {% endif%} + + {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao and not dpt.is_relative_auto_insert %} +
  • +
    + +
    +
    + + {% nomenclatura_heranca dpt 1 1 %} +
    +
  • + {% endif%} + + {% if forloop.last %}
{% endif %} +{% endfor %} diff --git a/templates/compilacao/edit.html b/templates/compilacao/edit.html new file mode 100644 index 000000000..404949703 --- /dev/null +++ b/templates/compilacao/edit.html @@ -0,0 +1,57 @@ +{% extends "base.html" %} +{% load i18n %} +{% load compilacao_filters %} +{% load staticfiles %} +{% load sass_tags %} +{% load crispy_forms_tags %} + + +{% block head_content %}{{block.super}} + + + +{% endblock %} + + +{% block title%} +

Edição: {{ view.get_norma }} - {% trans 'Texto Multivigente' %}

+{% endblock %} + +{% block base_content %} + +
{% trans 'Aguarde... Atualizando informações!!!'%}
+ +
+ {% include 'compilacao/edit_bloco.html'%} +
+ + +{% if user.is_authenticated and False %} +
+ {% csrf_token %} + + {% if message %} +
+ {{message}} + × +
+ {% endif %} + + +
+ {% trans 'Parser ODF' %} + {{ form.as_p }} + +
+
+ +{% for parser in parser_list %} +
+ {{ parser|safe}} +
+{% endfor %} +{% endif%} + + + +{% endblock base_content %} diff --git a/templates/compilacao/edit_bloco.html b/templates/compilacao/edit_bloco.html new file mode 100644 index 000000000..2a188f636 --- /dev/null +++ b/templates/compilacao/edit_bloco.html @@ -0,0 +1,134 @@ +{% load i18n %} +{% load compilacao_filters %} + +{% for dpt in object_list %} + {% if dpt.nivel == view.flag_nivel_old %} + + {% elif dpt.nivel < view.flag_nivel_old %} + {% close_div view.flag_nivel_old dpt.nivel 0 %} + {% endif%} + + {% if forloop.first and view|isinst:'DispositivoEditView' %} + {% else %} +
+ {% endif%} + + + {% if view|render_actions_head:dpt %} +
+
+
    + {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %} +
  • E
  • +
  • E+
  • + {%endif%} +
  • E*
  • +
  • C
  • +
+ + + +
    + {% for perfil in perfil_estrutural_list%} +
  • {{perfil.sigla}}
  • + {% endfor %} +
+ + + +
+ {% csrf_token %} + + + {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %} + + {%endif%} + +
+ +
    +
  • Ordem: {{dpt.ordem}}, Nivel: {{dpt.nivel}}, Número: {{dpt.get_numero_completo}}
  • +
  • .
  • +
+ + +
+
+ {% endif%} + + {% if view.pk_view == 0 and view.pk_edit == 0 or view.pk_edit != view.pk_view %} + + {% if not dpt.rotulo and not dpt.texto %} +
+ E +
+ {% endif %} +
+ {% spaceless %} +
{{ 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 %}({{dpt.tipo_dispositivo}} sem texto){%else%}{{ dpt.texto|safe }}{%endif%}
+ {% if dpt.norma_publicada_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %} + + {{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }} + {% nota_automatica dpt %} + {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }} + + {% endif %} + {% endspaceless %} + {% if view.is_norma_alteradora and dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%} + {%with node=dpt template_name='compilacao/edit_bloco_alteracao.html' %} + {%include template_name%} + {%endwith%} + {% endif%} +
+ {% endif%} + + {% set_nivel_old view dpt.nivel %} + +{% endfor %} + +{% if view|isinst:'DispositivoEditView' %} + {% close_div view.flag_nivel_old view.flag_nivel_ini -1 %} +{% else %} + {% close_div view.flag_nivel_old view.flag_nivel_ini 0 %} +{% endif%} diff --git a/templates/compilacao/edit_bloco_alteracao.html b/templates/compilacao/edit_bloco_alteracao.html new file mode 100644 index 000000000..39b13058d --- /dev/null +++ b/templates/compilacao/edit_bloco_alteracao.html @@ -0,0 +1,10 @@ +{% load compilacao_filters %} +{% for ch in dpt.pk|get_bloco_atualizador %} +{% spaceless %} +
+
+ {{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}{{ ch.rotulo }}{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} +
+
+{% endspaceless %} +{% endfor %} diff --git a/templates/compilacao/index.html b/templates/compilacao/index.html index 3e7c099a9..4e2aee533 100644 --- a/templates/compilacao/index.html +++ b/templates/compilacao/index.html @@ -1,55 +1,39 @@ {% extends "base.html" %} {% load i18n %} {% load compilacao_filters %} +{% load staticfiles %} +{% load sass_tags %} -{% block title%} -

{{ view.get_norma }}

-{% endblock %} - -{% block base_content %} - - -function textoMultiVigente(item) { + - $(".compilacao .tipo-vigencias a").removeClass("selected") - $(item).addClass("selected") - - $(".desativado").removeClass("displaynone"); - $(".link_alterador").removeClass("displaynone"); -} -function textoVigente(item, link) { + {# TODO: incluir javascript compilacao_notas apenas se houver usuário conectado e que possua permissão para cadastro de notas #} + +{% endblock %} - $(".compilacao .tipo-vigencias a").removeClass("selected") - $(item).addClass("selected") - $(".desativado").addClass("displaynone"); - $(".link_alterador").removeClass("displaynone"); +{% block title%} +

{{ view.get_norma }}

+{% endblock %} - if (!link) - $(".link_alterador").addClass("displaynone"); -} +{% block base_content %} +
- +
+ a + A +
-
- {% for key, values in view.get_vigencias.items %} - {% if forloop.first %} + {% for key, values in view.get_vigencias.items %} + {% if forloop.first %}
@@ -95,7 +77,6 @@ function textoVigente(item, link) { {% trans 'Vigência entre'%} {{view.inicio_vigencia}} {% trans 'e'%} {{view.fim_vigencia}}. {%endif%} - -{% include 'compilacao/template_render_bloco.html'%} +{% include 'compilacao/index_bloco.html'%}
-{% endblock base_content %} \ No newline at end of file +{% endblock base_content %} diff --git a/templates/compilacao/index_bloco.html b/templates/compilacao/index_bloco.html new file mode 100644 index 000000000..3cb398859 --- /dev/null +++ b/templates/compilacao/index_bloco.html @@ -0,0 +1,172 @@ +{% load i18n %} +{% load compilacao_filters %} + +{% for dpt in object_list %} + {% if dpt.nivel == view.flag_nivel_old %} +
+ {% elif dpt.nivel < view.flag_nivel_old %} + {% close_div view.flag_nivel_old dpt.nivel 0 %} + {% endif%} + + + {% if forloop.first and view|isinst:'DispositivoView' %} + {% else %} +
+ {% endif%} + + {% spaceless %} +
+
+ {{ 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%}{{ dpt.texto|safe }}{%else%} {%endif%} + {% if dpt.norma_publicada_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %} + + {{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }} + {% nota_automatica dpt %} + {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }} + + {% endif %} + {% if user.is_authenticated and not dpt.tipo_dispositivo.dispositivo_de_articulacao%} + {% if perms.compilacao.add_nota or perms.compilacao.add_vide %} +
{# TODO: User - dne - Dispostivo Nota Editor - tratar permissão de usuário#} +
    + {% if perms.compilacao.add_nota %}
  •  
  • {% endif %} + {% if perms.compilacao.add_vide %}
  • V
  • {% endif %} +
+
+
+ {% endif %} + {% endif%} +
+ + {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao%} +
{# Dispostivo Nota e Vides #} +
    {# Dispostivo Nota Lista#} + {% if cita and dpt.pk in cita %} + {% for vide in dpt.cita.all %} + {%if not forloop.first %}
  • {%endif%} +
  • + +
      + {% if user.is_authenticated %} + {% if perms.compilacao.change_vide %} +
    • Editar
    • +
    • + {%endif%} + {% if perms.compilacao.delete_vide %} +
    • Excluir
    • +
    • + {%endif%} + {% endif %} +
    • {{vide.tipo.nome}}
    • +
    • +
    • {{vide.created|date:"d M Y"}}
    • +
    +
    Vide:
    +
    + {% if dpt.is_relative_auto_insert %} + {{ vide.dispositivo_ref.dispositivo_pai}} + {% else %} + {{ vide.dispositivo_ref}} + {% endif %} + {% if vide.texto %} - {{vide.texto}}{% endif %} +
    +
  • + {% endfor %} + {% endif %} + + {% if citado and dpt.pk in citado %} + {% for vide in dpt.citado.all %} + {%if not forloop.first %}
  • {%endif%} +
  • +
      +
    • {{vide.tipo.nome}}
    • +
    • +
    • {{vide.created|date:"d M Y"}}
    • +
    +
    Citado em:
    +
    + {% if dpt.is_relative_auto_insert %} + {{ vide.dispositivo_base.dispositivo_pai}} + {% else %} + {{ vide.dispositivo_base}} + {% endif %} + {% if vide.texto %} - {{vide.texto}}{% endif %} +
    +
  • + + {% endfor %} + {% endif %} + + + {%if notas and dpt.pk in notas and dpt.pk in cita or dpt.pk in citado and notas%}
  • {%endif%} + + {% 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 not forloop.first %}
  • {%endif%} +
  • +
      + {% if user.is_authenticated %} + {% if user == nota.owner and perms.compilacao.change_nota or user.is_superuser%} +
    • Editar
    • +
    • + {% endif %} + {% if user == nota.owner and perms.compilacao.delete_nota or user.is_superuser %} +
    • Excluir
    • +
    • + {% endif %} + {% endif %} +
    • {{nota.tipo.nome}}
    • +
    • +
    • {%if nota.owner.first_name%}{{nota.owner.first_name}}{%else%}{{nota.owner}}{%endif%}
    • +
    • +
    • {{nota.publicacao|date:"d M Y"}}
    • +
    + + {%if nota.titulo %} +
    + {%if nota.url_externa %}{%endif%} + {{nota.titulo}} - + {%if nota.url_externa %}{%endif%} +
    + {%endif%} + +
    + {%if nota.url_externa %}{%endif%} + {{ nota.texto}} + {%if nota.url_externa %}{%endif%} +
    + + {%comment%} +
      +
    • {{nota.efetividade|date:"d M Y"}}
    • +
    • +
    • {{nota.get_publicidade_display}}
    • +
    + {%endcomment%} +
  • + {% endif %} + + + + {% endfor %} + {% endif %} +
+
+ {% endif%} +
+ {% endspaceless %} + {% if view.is_norma_alteradora and dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%} + {%with node=dpt template_name='compilacao/index_bloco_alteracao.html' %} + {%include template_name%} + {%endwith%} + {% endif%} + {% set_nivel_old view dpt.nivel %} +{% endfor %} +{% if view|isinst:'DispositivoView' %} + {% close_div view.flag_nivel_old view.flag_nivel_ini -1 %} +{% else %} + {% close_div view.flag_nivel_old view.flag_nivel_ini 0 %} +{% endif%} diff --git a/templates/compilacao/bloco_alteracao.html b/templates/compilacao/index_bloco_alteracao.html similarity index 76% rename from templates/compilacao/bloco_alteracao.html rename to templates/compilacao/index_bloco_alteracao.html index 1aae4d260..ef12970ed 100644 --- a/templates/compilacao/bloco_alteracao.html +++ b/templates/compilacao/index_bloco_alteracao.html @@ -1,10 +1,12 @@ {% load compilacao_filters %} -{% for ch in dispositivo.pk|get_bloco %} +{% for ch in dpt.pk|get_bloco_atualizador %} {% spaceless %} -
+
- {{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}{{ ch.rotulo }}{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} -
+ + {{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}{{ ch.rotulo }}{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} + +
{% endspaceless %} -{% endfor %} \ No newline at end of file +{% endfor %} diff --git a/templates/compilacao/template_render_bloco.html b/templates/compilacao/template_render_bloco.html deleted file mode 100644 index accf8086b..000000000 --- a/templates/compilacao/template_render_bloco.html +++ /dev/null @@ -1,35 +0,0 @@ -{% load i18n %} -{% load compilacao_filters %} - -{% for dispositivo in view.get_queryset %} - {% if dispositivo.nivel == view.flag_nivel_old %} -
- {% elif dispositivo.nivel < view.flag_nivel_old %} - {% close_div view.flag_nivel_old dispositivo.nivel %} - {% endif%} -
-
-{% spaceless %} - {{ dispositivo.tipo_dispositivo.rotulo_prefixo_html|safe }} - {{ dispositivo.rotulo }} - {{ dispositivo.tipo_dispositivo.rotulo_sufixo_html|safe }} - {{ dispositivo.tipo_dispositivo.texto_prefixo_html|safe }} - {{ dispositivo.texto|safe }} - - {% if dispositivo.norma_publicada_id != None %} - - {{ dispositivo.tipo_dispositivo.nota_automatica_prefixo_html|safe }} - {% nota_automatica dispositivo %} - {{ dispositivo.tipo_dispositivo.nota_automatica_sufixo_html|safe }} - - {% endif %} -{% endspaceless %} - {% if view.is_norma_alteradora and dispositivo.tipo_dispositivo.class_css == 'bloco_alteracao'%} - {%with node=dispositivo template_name='compilacao/bloco_alteracao.html' %} - {%include template_name%} - {%endwith%} - {% endif%} -
- {% set_nivel_old view dispositivo.nivel %} -{% endfor %} -{% close_div view.flag_nivel_old view.flag_nivel_ini %} \ No newline at end of file diff --git a/templates/sistema.html b/templates/sistema.html index 30b53958e..079cf044c 100644 --- a/templates/sistema.html +++ b/templates/sistema.html @@ -78,6 +78,16 @@
  • Assunto de Norma Jurídica
  • +
    Módulo Compilação
    + +
    Módulo Sessão Plenária