diff --git a/compilacao/insert_inicial_TipoDispositivo.sql b/compilacao/insert_inicial_TipoDispositivo.sql index 987e0c81f..bc4dd8023 100644 --- a/compilacao/insert_inicial_TipoDispositivo.sql +++ b/compilacao/insert_inicial_TipoDispositivo.sql @@ -1,27 +1,27 @@ -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'); +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) 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_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) 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_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) 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_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) 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_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) 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_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) 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_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) 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_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) 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_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) 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_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) 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_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) 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_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) 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_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) VALUES (29, 'Texto Não Estruturado', 'texto_n_estruturado', '', '', 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_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) 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_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) 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_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) 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_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) 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_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) 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_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) 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_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) 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_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) 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_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) 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_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) VALUES (15, 'Capítulo', 'capitulo', '', 'Capítulo', -1, '', '
', '', '
', '
', '', false, 'I', '1', '1', '1', '1', '1', '-', '-', '-', '-', '-'); +SELECT pg_catalog.setval('compilacao_tipodispositivo_id_seq', 28, true); -select setval('compilacao_tipodispositivo_id_seq'::regclass, (select max(id) from compilacao_tipodispositivo)); \ No newline at end of file diff --git a/compilacao/migrations/0005_auto_20150924_1012.py b/compilacao/migrations/0005_auto_20150924_1012.py new file mode 100644 index 000000000..bf712fe02 --- /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 models, migrations + + +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..df4fe2fd4 --- /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 models, migrations + + +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..8866b0d92 --- /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 models, migrations + + +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..a701292f2 --- /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 models, migrations + + +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/models.py b/compilacao/models.py index 7688efcb6..17c0f1ae5 100644 --- a/compilacao/models.py +++ b/compilacao/models.py @@ -1,11 +1,50 @@ from django.contrib.auth.models import User from django.db import models +from django.db.models import F +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 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')) @@ -35,6 +74,34 @@ class TipoVide(models.Model): class TipoDispositivo(models.Model): + """ + - ids fazem parte da lógica do desenvolvimento quanto a + simulação de hierarquia + - ids de 1 a 100 são reservados. + - São registros inseridos e usados no desenvolvimento + + + - para class_css articulacao, omissis, ementa, + bloco_alteracao, artigo, caput e paragrafo + são palavras chaves usadas no código e de existência obrigatória. + + - apenas articulacao recebe nivel zero + + - 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 +110,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 +145,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 +200,10 @@ 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)')) formato_variacao0 = models.CharField( max_length=1, choices=FORMATO_NUMERACAO_CHOICES, @@ -131,6 +238,7 @@ class TipoDispositivo(models.Model): class Meta: verbose_name = _('Tipo de Dispositivo') verbose_name_plural = _('Tipos de Dispositivo') + ordering = ['id'] def __str__(self): return self.nome @@ -184,14 +292,17 @@ class Publicacao(models.Model): return '%s: %s' % (self.veiculo_publicacao, self.publicacao) -class Dispositivo(models.Model): +class Dispositivo(BaseModel): 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, @@ -323,6 +434,7 @@ class Dispositivo(models.Model): 'dispositivo5', 'tipo_dispositivo', 'dispositivo_pai', + 'norma_publicada', 'publicacao',), ) @@ -331,6 +443,277 @@ class Dispositivo(models.Model): 'rotulo': (self.rotulo if self.rotulo else self.tipo_dispositivo), 'norma': self.norma} + def rotulo_padrao(self, for_insertion=False, + d_base_for_insertion=None, + insert_next=False): + r = '' + t = self.tipo_dispositivo + + prefixo = t.rotulo_prefixo_texto.split(';') + + if len(prefixo) > 1: + + if for_insertion and \ + d_base_for_insertion is not None and \ + d_base_for_insertion.pk != self.pk and \ + d_base_for_insertion.tipo_dispositivo.pk <= t.pk: + + count_irmaos_mesmo_tipo = Dispositivo.objects.filter( + tipo_dispositivo=self.tipo_dispositivo, + dispositivo_pai=self).count() + else: + count_irmaos_mesmo_tipo = Dispositivo.objects.filter( + tipo_dispositivo=self.tipo_dispositivo, + dispositivo_pai=self.dispositivo_pai).count() + + if count_irmaos_mesmo_tipo > 1 and self.dispositivo0 != 0: + r += prefixo[0] + r += self.get_nomenclatura_completa() + elif count_irmaos_mesmo_tipo == 1 and for_insertion: + numero = self.get_numero_completo() + + if not insert_next: + self.transform_in_next() + self.transform_in_next() + r += 'Transformar %s em %s%s e criar %s 1%s' % ( + prefixo[1].strip(), + prefixo[0], + self.get_nomenclatura_completa(), + prefixo[0], + 'º' if + self.tipo_dispositivo.rotulo_ordinal >= 0 else '',) + else: + if numero[0] != 0: + self.transform_in_next() + r += 'Transformar %s em %s 1%s e criar %s%s' % ( + prefixo[1].strip(), + prefixo[0], + 'º' if + self.tipo_dispositivo.rotulo_ordinal >= 0 else '', + prefixo[0], + self.get_nomenclatura_completa()) + else: + r += '%s%s' % ( + prefixo[1].strip(), + self.get_nomenclatura_completa()) + + self.set_numero_completo(numero) + else: + r += prefixo[1].strip() + 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 + + 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_apos(self, espaco_a_criar): + + proximo_bloco = Dispositivo.objects.filter( + ordem__gt=self.ordem, + nivel__lte=self.nivel, + norma_id=self.norma_id)[:1] + + if proximo_bloco.count() != 0: + 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): + dp = self + p = [] + while dp.dispositivo_pai is not None: + dp = dp.dispositivo_pai + p.append(dp) + + return p + + def recalcular_ordem(self): + try: + dispositivos = Dispositivo.objects.order_by('-ordem').filter( + norma_id=self.norma_id) + except Exception as e: + a = 1 + a += 1 + ordem = dispositivos.count() * 1000 + for d in dispositivos: + d.ordem = ordem + d.save() + ordem -= 1000 + class Vide(models.Model): data_criacao = models.DateTimeField(verbose_name=_('Data de Criação')) diff --git a/compilacao/templatetags/compilacao_filters.py b/compilacao/templatetags/compilacao_filters.py index 49f50e44e..1a8feb527 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 @@ -52,8 +59,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 +68,47 @@ def get_sign_vigencia(value): string = "%s,%s" % (value.inicio_vigencia, value.fim_vigencia) signer = Signer() return signer.sign(str(string)) + + +@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 + + # Apenas Menu actions head + if view.pk_add == 0 and d_atual.pk == view.pk_view: + return True + + # Menu e conteudo + if view.pk_view == view.pk_add and d_atual.pk == view.pk_view: + return True + + # conteudo e menu no filho + if view.pk_view != view.pk_add and d_atual.pk == view.pk_add: + return True + + return False + + +@register.simple_tag +def nomenclatura_heranca(d): + result = '' + while d is not None: + 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..540d1adc9 100644 --- a/compilacao/urls.py +++ b/compilacao/urls.py @@ -1,16 +1,42 @@ -from django.conf.urls import url +from django.conf.urls import url, include +from django.contrib.auth.decorators import permission_required from compilacao import views +from compilacao.views import (tipo_nota_crud, tipo_vide_crud, + tipo_publicacao_crud, veiculo_publicacao_crud, + tipo_dispositivo_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'), +] + +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)), ] diff --git a/compilacao/views.py b/compilacao/views.py index a063f9535..c0444c585 100644 --- a/compilacao/views.py +++ b/compilacao/views.py @@ -1,12 +1,21 @@ from collections import OrderedDict from datetime import timedelta +from os.path import sys from django.core.signing import Signer +from django.db.models import Q +from django.db.models.aggregates import Max +from django.http.response import JsonResponse from django.utils.dateparse import parse_date +from django.utils.translation import ugettext_lazy as _ +from django.views.generic.base import TemplateView from django.views.generic.list import ListView -from compilacao.models import Dispositivo +from compilacao.models import Dispositivo, TipoNota, TipoVide, TipoPublicacao,\ + VeiculoPublicacao, TipoDispositivo from norma.models import NormaJuridica +from sapl.crud import build_crud + DISPOSITIVO_SELECT_RELATED = ( 'tipo_dispositivo', @@ -16,7 +25,83 @@ 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)]], + ]) + + +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): @@ -127,7 +212,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 +230,616 @@ 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 + + +class CompilacaoEditView(CompilacaoView): + template_name = 'compilacao/edit.html' + + flag_alteradora = -1 + + flag_nivel_ini = 0 + flag_nivel_old = -1 + + pk_add = 0 + pk_view = 0 + + def get_queryset(self): + self.pk_add = 0 + self.pk_view = 0 + + self.flag_alteradora = -1 + self.flag_nivel_ini = 0 + self.flag_nivel_old = -1 + + return Dispositivo.objects.filter( + ordem__gt=0, + norma_id=self.kwargs['norma_id'] + ).select_related(*DISPOSITIVO_SELECT_RELATED) + + +class DispositivoEditView(DispositivoView): + template_name = 'compilacao/edit_bloco.html' + + def get_queryset(self): + self.flag_alteradora = -1 + self.flag_nivel_ini = 0 + self.flag_nivel_old = -1 + + try: + self.pk_add = int(self.request.GET['pkadd']) + except: + self.pk_add = 0 + self.pk_view = int(self.kwargs['dispositivo_id']) + + try: + if self.pk_add == 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_add == 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): + + # Não salvar d_base + if self.pk_add == 0: + d_base = Dispositivo.objects.get(pk=self.pk_view) + else: + d_base = Dispositivo.objects.get(pk=self.pk_add) + + result = [{'tipo_insert': 'Inserir Depois', + 'action': 'add_next', + 'itens': []}, + {'tipo_insert': 'TODO: Inserir Dentro', + 'action': 'add_in', + 'itens': []}, + {'tipo_insert': 'TODO: Inserir Antes', + 'action': 'add_prior', + 'itens': []} + ] + + disps = Dispositivo.objects.order_by( + '-ordem').filter( + ordem__lte=d_base.ordem, + norma_id=d_base.norma_id) + + nivel = sys.maxsize + for d in disps: + + if d.nivel >= nivel: + continue + + if d.tipo_dispositivo.class_css == 'caput': + continue + + nivel = d.nivel + + r = [] + + if d == d_base: + result[2]['itens'].append({ + 'class_css': d.tipo_dispositivo.class_css, + 'tipo_pk': d.pk, + 'variacao': 0, + 'provavel': '%s (%s)' % ( + d.rotulo_padrao(True, d, False), + d.tipo_dispositivo.nome,), + 'dispositivo_base': d_base.pk}) + + flag_direcao = 1 + flag_variacao = 0 + while True: + # rt resultado da transformacao + rt = d.transform_in_next(flag_direcao) + if not rt[0]: + break + flag_variacao += rt[1] + r.append({'class_css': d.tipo_dispositivo.class_css, + 'tipo_pk': d.tipo_dispositivo.pk, + 'variacao': flag_variacao, + 'provavel': '%s (%s)' % ( + d.rotulo_padrao( + True, d_base, True), + d.tipo_dispositivo.nome,), + 'dispositivo_base': d_base.pk}) + + flag_direcao = -1 + + r.reverse() + + if len(r) > 0 and d.tipo_dispositivo.class_css == 'articulacao': + r = [r[0], ] + + if d.tipo_dispositivo == d_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 = d_base.tipo_dispositivo + + for mudarnivel in [1, 0]: + if mudarnivel: + # Outros Tipos de Dispositivos PARA DENTRO + otds = TipoDispositivo.objects.order_by('-contagem_continua', 'id').filter( + Q(id__gt=100) & Q(id__gt=d_base.tipo_dispositivo_id)) + 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']) + otds = TipoDispositivo.objects.order_by('-contagem_continua', 'id').filter( + id__gt=100, + id__lt=d_base.tipo_dispositivo_id).exclude( + class_css__in=classes_ja_inseridas) + + for td in otds: + + if (tipb.class_css == 'caput' and + td.class_css == 'paragrafo'): + continue + + d_base.tipo_dispositivo = td + + disps = Dispositivo.objects.filter( + tipo_dispositivo_id=td.pk, + dispositivo_pai_id=d_base.pk).aggregate( + Max('dispositivo0'), + Max('dispositivo1'), + Max('dispositivo2'), + Max('dispositivo3'), + Max('dispositivo4'), + Max('dispositivo5')) + + if disps['dispositivo0__max'] is not None: + d_base.set_numero_completo([ + disps['dispositivo0__max'], + disps['dispositivo1__max'], + disps['dispositivo2__max'], + disps['dispositivo3__max'], + disps['dispositivo4__max'], + disps['dispositivo5__max'], + ]) + + d_base.transform_in_next() + else: + if ';' in td.rotulo_prefixo_texto: + d_base.set_numero_completo([0, 0, 0, 0, 0, 0, ]) + else: + d_base.set_numero_completo([1, 0, 0, 0, 0, 0, ]) + + r = [{'class_css': td.class_css, + 'tipo_pk': td.pk, + 'variacao': 0, + 'provavel': '%s (%s)' % ( + d_base.rotulo_padrao(True, None, True), + td.nome,), + 'dispositivo_base': d_base.pk}] + + if mudarnivel == 1: + result[1]['itens'] += r + else: + if td.pk < tipb.pk and td.class_css != 'caput': + result[2]['itens'] += r + result[0]['itens'] += r + + # retira inserir após e inserir antes + if tipb.class_css == 'caput': + result.pop() + result.remove(result[0]) + + if tipb.class_css == 'articulacao': + r = result[0] + result.remove(result[0]) + result.insert(1, r) + + return result + + +class ActionsEditMixin(object): + + def render_to_json_response(self, context, **response_kwargs): + + if context['action'] == 'add_next': + return JsonResponse(self.add_next(context), safe=False) + elif context['action'] == 'add_in': + return JsonResponse(self.add_in(context), safe=False) + elif context['action'] == 'add_prior': + return JsonResponse(self.add_prior(context), safe=False) + else: + return JsonResponse({}, safe=False) + + def add_prior(self, context): + pass + + def add_in(self, context): + pass + + def add_next(self, context): + try: + base = Dispositivo.objects.get(pk=context['dispositivo_id']) + dp = Dispositivo.objects.get(pk=context['dispositivo_id']) + + tipo = TipoDispositivo.objects.get(pk=context['tipo_pk']) + + while dp.dispositivo_pai is not None and \ + dp.tipo_dispositivo_id != tipo.pk: + dp = dp.dispositivo_pai + + # Inserção interna a uma articulação um tipo já existente + # ou de uma articulacao + if dp.dispositivo_pai is not None or \ + tipo.class_css == 'articulacao': + + dp.transform_in_next(int(context['variacao'])) + dp.rotulo = dp.rotulo_padrao() + dp.texto = '' + dp.pk = None + dp.norma_publicada = None + + if dp.tipo_dispositivo.class_css == 'artigo': + ordem = base.criar_espaco_apos(espaco_a_criar=2) + else: + ordem = base.criar_espaco_apos(espaco_a_criar=1) + + dp.ordem = ordem + + # Incrementar irmãos + + if not tipo.contagem_continua: + irmaos = list(Dispositivo.objects.filter( + dispositivo_pai_id=dp.dispositivo_pai_id, + ordem__gt=dp.ordem, + tipo_dispositivo_id=tipo.pk)) + elif tipo.class_css == 'articulacao': + irmaos = list(Dispositivo.objects.filter( + ordem__gt=dp.ordem, + norma_id=dp.norma_id, + tipo_dispositivo_id=tipo.pk)) + else: # contagem continua restrita a articulacao + + proxima_articulacao = Dispositivo.objects.filter( + ordem__gt=dp.ordem, + nivel=0, + norma_id=dp.norma_id)[:1] + + if not proxima_articulacao.exists(): + irmaos = list(Dispositivo.objects.filter( + ordem__gt=dp.ordem, + norma_id=dp.norma_id, + tipo_dispositivo_id=tipo.pk)) + else: + irmaos = list(Dispositivo.objects.filter( + Q(ordem__gt=dp.ordem) & + Q(ordem__lt=proxima_articulacao[0].ordem), + norma_id=dp.norma_id, + tipo_dispositivo_id=tipo.pk)) + + dp_profundidade = dp.get_profundidade() + + irmaos_a_salvar = [] + ultimo_irmao = None + for irmao in irmaos: + irmao_profundidade = irmao.get_profundidade() + if irmao_profundidade < dp_profundidade: + break + + if irmao.get_numero_completo() < dp.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) + else: + 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: + irmao.clean() + irmao.save() + + dp.clean() + dp.save() + + # Inserção automática do caput para artigos + if dp.tipo_dispositivo.class_css == 'artigo': + tipocaput = TipoDispositivo.objects.filter( + class_css='caput') + dp.dispositivo_pai_id = dp.pk + dp.pk = None + dp.nivel += 1 + dp.tipo_dispositivo = tipocaput[0] + dp.set_numero_completo([1, 0, 0, 0, 0, 0, ]) + dp.rotulo = dp.rotulo_padrao() + dp.texto = '' + + dp.ordem = ordem + Dispositivo.INTERVALO_ORDEM + dp.clean() + dp.save() + dp = Dispositivo.objects.get(pk=dp.dispositivo_pai_id) + + # Inserção de dispositivo sem precedente de mesmo tipo + else: + dp = Dispositivo.objects.get(pk=context['dispositivo_id']) + + # Encontrar primeiro irmão que contem um pai compativel + while True: + if dp.dispositivo_pai is not None and \ + dp.dispositivo_pai.tipo_dispositivo_id > tipo.pk: + dp = dp.dispositivo_pai + else: + break + + dp.tipo_dispositivo = tipo + + dp.pk = None + dp.norma_publicada = None + + if tipo.contagem_continua: + ultimo_irmao = Dispositivo.objects.order_by('-ordem').filter( + ordem__lte=dp.ordem, + tipo_dispositivo_id=tipo.pk, + norma_id=dp.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, ]) + dp.rotulo = dp.rotulo_padrao() + dp.texto = '' + dp.ordem = base.criar_espaco_apos(espaco_a_criar=1) + + # Incrementar irmãos + irmaos = Dispositivo.objects.order_by('-ordem').filter( + dispositivo_pai_id=dp.dispositivo_pai_id, + ordem__gt=dp.ordem, + tipo_dispositivo_id=tipo.pk) + + ''' inserção sem precedente é feita sem variação + portanto, não deve ser usado o transform_next() para + incrementar, e sim, apenas somar no atributo dispositivo0 + dada a possibilidade de existir irmãos com viariação''' + for irmao in irmaos: + irmao.dispositivo0 += 1 + irmao.rotulo = irmao.rotulo_padrao() + irmao.clean() + irmao.save() + + dp.clean() + dp.save() + + ''' Reenquadrar todos os dispositivos que possuem pai + antes da inserção atual e que são inferiores a dp, + redirecionando para o novo pai''' + + possiveis_filhos = Dispositivo.objects.filter( + ordem__gt=dp.ordem, + norma_id=dp.norma_id) + + nivel = sys.maxsize + flag_niveis = False + for filho in possiveis_filhos: + + if filho.nivel > nivel: + continue + + if filho.tipo_dispositivo_id <= dp.tipo_dispositivo_id: + break + + if filho.dispositivo_pai.ordem >= dp.ordem: + continue + + nivel = filho.nivel + + 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 tipo.class_css == 'articulacao': + + 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) + + # data = serializers.serialize('json', dp) + if tipo.contagem_continua: + # pais a atualizar + + pais = [] + + if dp.dispositivo_pai is None: + data = {'pk': dp.pk, 'pai': [-1, ]} + else: + pkfilho = dp.pk + dp = dp.dispositivo_pai + + 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, 'pai': pais} + else: + data = {'pk': dp.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'] + context['tipo_pk'] = self.request.GET['tipo_pk'] + context['variacao'] = self.request.GET['variacao'] + return self.render_to_json_response(context, **response_kwargs) diff --git a/sapl/utils.py b/sapl/utils.py index 62a96c0e2..10962a55e 100644 --- a/sapl/utils.py +++ b/sapl/utils.py @@ -1,7 +1,10 @@ +from builtins import TypeError + from django.apps import apps from django.contrib import admin from django.utils.translation import ugettext_lazy as _ + # SAPL business apps # This is a dependency order: each entry depends only on previous ones # The order is important for migration code @@ -37,3 +40,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/static/styles/compilacao.scss b/static/styles/compilacao.scss index 972ebad31..eb0e25287 100644 --- a/static/styles/compilacao.scss +++ b/static/styles/compilacao.scss @@ -1,28 +1,53 @@ -.articulacao div { - background-color: #fff; +#message_block { + + display: none; + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + background-color: rgba(220, 220, 220, 0.75); + z-index:99; } +#message_block #msg{ + position: relative; + margin: 25% auto; + padding: 1.2em 2em; + max-width: 600px; + text-align: center; + font-size: 1.5em; + color: #677; -.dispositivo { - background-color: #ddd !important; - transition: all .4s ease-in-out; - display:inline; + border: 1px solid #eee; + background-color: #fff !important; + box-shadow: 0 1px 2px #999; +} + +.dispositivo { + font-size:1em; + transition: all 0.2s ease-in-out; } .dispositivo .ementa { - padding: 4em 0em 3em 50%; + padding: 4em 0em 3em 35%; font-weight: bold; } -.dispositivo .anexo { - font-size: 1.4em; +.dispositivo .anexo, +.dispositivo .disp_preliminares, +.dispositivo .disp_gerais, +.dispositivo .disp_transitorias, +.dispositivo .disp_finais { + font-size: 1.5em; text-align: center; font-weight: bold; margin-top: 3em; + margin-bottom: 1em; } .dispositivo .parte { @@ -30,12 +55,14 @@ text-align: center; font-weight: bold; margin-top: 2em; + margin-bottom: 1em; } .dispositivo .livro { font-size: 1.5em; text-align: center; font-weight: bold; margin-top: 2em; + margin-bottom: 1em; } .dispositivo .titulo { @@ -43,9 +70,11 @@ text-align: center; font-weight: bold; margin-top: 2em; + margin-bottom: 1em; } -.dispositivo .capitulo { +.dispositivo .capitulo { + margin-bottom: 1em; margin-top: 1.5em; font-size: 1.3em; text-align: center; @@ -53,14 +82,16 @@ } .dispositivo .secao { - margin-top: 0.8em; + margin-top: 1.2em; + margin-bottom: 0.7em; font-size: 1.2em; text-align: center; font-weight: bold; } .dispositivo .subsecao, .dispositivo .itemsecao { - margin-top: 0.8em; + margin-top: 1em; + margin-bottom: 0.6em; font-size: 1.2em; text-align: center; font-style: italic; @@ -69,43 +100,45 @@ .dispositivo .artigo { font-size: 1.15em; - float:left; + float:left; } .dispositivo .caput { - font-size: 1.15em; - margin-bottom: 0.5em; + margin-top: 0.3333em; + font-size: 1.15em; display: block; } .dispositivo .paragrafo { - margin-left: 1.5em; + padding-left: 1.5em; font-size: 1.1em; - margin-top: 5px; - margin-bottom: 3px; + margin-top: 0.2222em; } .dispositivo .inciso { font-size: 1.1em; - margin-left: 2.5em; - margin-top: 5px; - margin-bottom: 3px; + padding-left: 2.5em; + margin-top: 0.1667em; } .dispositivo .alinea { font-size: 1.0em; - margin-left: 3.5em; + padding-left: 3.5em; + margin-top: 2px; } .dispositivo .item { font-size: 1.0em; - margin-left: 4.5em; + padding-left: 4.5em; + margin-top: 2px; } -.dispositivo .desativado, .dispositivo .desativado * { +.compilacaoedit .desativado, .compilacaoedit .desativado *, +.compilacao .desativado, .compilacao .desativado * { text-decoration: line-through; color: #777 !important; } -.dispositivo .desativado table, .dispositivo .desativado table td { +.compilacaoedit .desativado table, .compilacaoedit .desativado table td, +.compilacao .desativado table, .compilacao .desativado table td { border: 1px dotted #ccc; text-decoration: line-through; } @@ -115,11 +148,11 @@ } .dispositivo a.link_alterador { color: #2980B9 !important; - font-size: 0.9rem; + font-size: 0.75em; } .dispositivo .bloco_alteracao { - margin-left: 5em; + padding-left: 5em; font-style: italic; } @@ -134,6 +167,7 @@ color: #018 !important; } + .compilacao .top-bar-section li:not(.has-form) a:not(.button), .compilacao .top-bar { line-height: 1.6rem; @@ -167,6 +201,7 @@ margin: 2.5em 0 0 0; transition: all .4s ease-in-out; background: #2980B9; + clear:both; } .compilacao .fixed{ @@ -175,4 +210,332 @@ .displaynone { display: none !important; +} + + +.compilacaoedit { + margin-left: 0.8em; + z-index: 1; +} + + +.compilacaoedit .articulacao{ + + margin-left: -0.8em; + margin-top: 2em; +} + +.compilacaoedit .articulacao::before { + content: "Articulação"; + background-color: #eee; + border-bottom: 1px solid #aaa; + padding: 0.333em; + padding-left: 1em; + display:block; +} + +.compilacaoedit .editclick .articulacao::before { + display: none; +} +.compilacaoedit .editdi { + display: block; + clear: left; +} + +.compilacaoedit .edit { + position: relative; + display:block; + background-color: transparent !important; + border: 0px none #fff; +} +.compilacaoedit .edit .artigo { + float: none; +} + +.compilacaoedit .edit > .actions { + color: #fff; + position: absolute; + padding: 0 0.2em; + left: -2.1em; + opacity: 0; + transition: all 0.4s ease-in-out; +} + +.compilacaoedit .edit > .actions a.btn-action { + background: #3498db; + background-image: -webkit-linear-gradient(top, #3498db, #2980b9); + background-image: -moz-linear-gradient(top, #3498db, #2980b9); + background-image: -ms-linear-gradient(top, #3498db, #2980b9); + background-image: -o-linear-gradient(top, #3498db, #2980b9); + background-image: linear-gradient(to bottom, #3498db, #2980b9); + -webkit-border-radius: 7; + -moz-border-radius: 7; + border-radius: 7px; + color: #ffffff !important; + font-size: 18px; + font-weight: bold; + padding: 2px 6px 2px 7px; + text-decoration: none; +} + +.compilacaoedit .edit > .actions a.btn-action:hover { + background: #3cb0fd; + background-image: -webkit-linear-gradient(top, #3cb0fd, #3498db); + background-image: -moz-linear-gradient(top, #3cb0fd, #3498db); + background-image: -ms-linear-gradient(top, #3cb0fd, #3498db); + background-image: -o-linear-gradient(top, #3cb0fd, #3498db); + background-image: linear-gradient(to bottom, #3cb0fd, #3498db); + text-decoration: none; +} +.compilacaoedit .edit:hover > .actions { + z-index: 9; + opacity: 0.5; + background-color: transparent !important +} + +.compilacaoedit .edit:hover > .actions:hover { + opacity: 1; +} + +.compilacaoedit .edit:hover > .actions:hover::before { + + border-color: transparent transparent transparent #78F9FF; +} + +.compilacaoedit .edit:hover > .actions::before { + border: inset 0.375rem; + content: ""; + display: block; + height: 0; + width: 0; + border-color: transparent transparent transparent #78F9FF; + position: absolute; + top: 0.53rem; + right: -0.51rem; +} + +.compilacaoedit .edit *:hover { + background-color: #eee; +} + +.compilacaoedit .editclick > .label_pai { + position: absolute; + color: #999; + top: -1.7em; + left: 0; + right: 0; + width: auto; + height: auto; +} + +.compilacaoedit .editclick { + border: 2.1em solid #eee; + padding: 1em; + margin: 1em -2em 1em -2.8em; + z-index: 1; + background-color: #fff !important; + box-shadow: 0 1px 2px #aaa; +} + +.compilacaoedit .editclick > .actions { + display: none; +} + + +.compilacaoedit .actions_head { + color: #fff; + position: relative; + opacity: 0; + transition: all 0.4s ease-in-out; + border-bottom: 1px solid #2980b9; + z-index: 9; + margin: -1em -1em 2em -1em; +} + +.compilacaoedit .actions_head ul { + margin-left: 0; + } + +.compilacaoedit .actions_head li { + font-weight: normal !important; + display: inline-block; + position: relative; + white-space:nowrap; + max-width:something; + } +.compilacaoedit .actions_head > li.left { + border-left: 1px solid white; + } + + +.compilacaoedit .actions_head > li.right{ + width: 3em; + text-align: center; + clear:right; +} + + + +.compilacaoedit .actions_head li ul { + display: none; + position:absolute; + top: auto; + } + +.compilacaoedit .actions_head li:hover ul{ + display: block; + } + +.compilacaoedit .actions_head li:hover ul li{ + display: block; + background: #3498db; + background-image: none; +} + + +.compilacaoedit .actions_head a.btn-action { + background: #3498db; + background-image: -webkit-linear-gradient(top, #3498db, #2980b9); + background-image: -moz-linear-gradient(top, #3498db, #2980b9); + background-image: -ms-linear-gradient(top, #3498db, #2980b9); + background-image: -o-linear-gradient(top, #3498db, #2980b9); + background-image: linear-gradient(to bottom, #3498db, #2980b9); + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0px; + color: #ffffff !important; + font-size: 0.8em; + padding: 1px 6px 2px 7px; + text-decoration: none; + display: block; +} + +.compilacaoedit .actions_head a.btn-action:hover { + background: #3cb0fd; + background-image: -webkit-linear-gradient(top, #3cb0fd, #3498db); + background-image: -moz-linear-gradient(top, #3cb0fd, #3498db); + background-image: -ms-linear-gradient(top, #3cb0fd, #3498db); + background-image: -o-linear-gradient(top, #3cb0fd, #3498db); + background-image: linear-gradient(to bottom, #3cb0fd, #3498db); + text-decoration: none; +} + +.compilacaoedit .actions_head > li > a.btn-action { + font-weight: bold; + font-size: 1em; +} + +.compilacaoedit .actions_head { + z-index: 99; + opacity: 0.5; +} + +.compilacaoedit .actions_head:hover { + opacity: 1; +} + +.compilacaoedit .actions_insert { + opacity: 1; + display: block; +} + +.compilacaoedit .actions_insert li { + opacity: 1; + display: block; +} + +.compilacaoedit .actions_insert > li.right{ + opacity: 1; + width: 3em; + text-align: center; + clear:right; +} + +.compilacaoedit .actions_insert > li.left:nth-child(1), +.compilacaoedit .actions_insert > li.left:nth-child(2) { + opacity: 1; + display: block; + min-width: 35%; + max-width: 35%; +} +.compilacaoedit .actions_insert li.left:nth-child(1) ul, +.compilacaoedit .actions_insert li.left:nth-child(2) ul { + + display: block; + position: relative; + +} + +.compilacaoedit .actions_insert li.left:nth-child(3):hover ul { + right: 0; + box-shadow: -3px 3px 1.5em #336; +} + + + + + + + +.compilacaoedit .actions_footer { + color: #fff; + position: absolute; + top: 100%; + left: -2em; + opacity: 0; + transition: all 0.4s ease-in-out; + clip: rect(0,0,0,0); +} + +.compilacaoedit .actions_footer ul { + margin-left: 0; + margin-bottom: 0; +} + +.compilacaoedit .actions_footer li { + display: block; + height: auto !important; +} + +.compilacaoedit .editclick > .actions_footer a.btn-action { + background: #3498db; + + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0px; + color: #ffffff !important; + font-size: 12px; + padding: 1px 6px 1px 7px; + text-decoration: none; + display: block; +} + +.compilacaoedit .editclick > .actions_footer a.btn-action:hover { + background: #3cb0fd; + + text-decoration: none; +} +.compilacaoedit .editclick > .actions_footer { + z-index: 99; + opacity: 0.5; + clip: rect(0,0,0,0); +} + +.compilacaoedit .editclick > .actions_footer:hover { + opacity: 1; + clip: auto +} + +.clear { + clear:both; + height: 0; + width: 0; +} + + + +@media print { + .compilacao .vigencias { + display:none; + } } \ No newline at end of file diff --git a/templates/compilacao/edit.html b/templates/compilacao/edit.html new file mode 100644 index 000000000..54845b8c4 --- /dev/null +++ b/templates/compilacao/edit.html @@ -0,0 +1,154 @@ +{% extends "base.html" %} +{% load i18n %} +{% load compilacao_filters %} + +{% block title%} +

Edição: {{ view.get_norma }}

+{% endblock %} + +{% block base_content %} + + +
Aguarde... Atualizando informações!!!
+
+ {% include 'compilacao/edit_bloco.html'%} +
+{% endblock base_content %} \ No newline at end of file diff --git a/templates/compilacao/edit_bloco.html b/templates/compilacao/edit_bloco.html new file mode 100644 index 000000000..b3b4c555f --- /dev/null +++ b/templates/compilacao/edit_bloco.html @@ -0,0 +1,94 @@ +{% load i18n %} +{% load compilacao_filters %} + +{% for dispositivo in object_list %} + {% if dispositivo.nivel == view.flag_nivel_old %} + + {% elif dispositivo.nivel < view.flag_nivel_old %} + {% close_div view.flag_nivel_old dispositivo.nivel 0 %} + {% endif%} + + {% if forloop.first and view|isinst:'DispositivoEditView' %} + {% else %} +
+ {% endif%} + + {% if view|render_actions_head:dispositivo %} + + + + +
+
Em Edição: {% nomenclatura_heranca dispositivo %}
+
{ordem:{{dispositivo.ordem}}, nivel:{{dispositivo.nivel}}}
+
+ {% endif%} + + + {% if view.pk_view == 0 and view.pk_add == 0 or view.pk_add != view.pk_view%} + +
+ E +
+ + + +
+ + + {% endif%} + + {% set_nivel_old view dispositivo.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%} \ No newline at end of file diff --git a/templates/compilacao/bloco_alteracao.html b/templates/compilacao/edit_bloco_alteracao.html similarity index 87% rename from templates/compilacao/bloco_alteracao.html rename to templates/compilacao/edit_bloco_alteracao.html index 1aae4d260..d438e02af 100644 --- a/templates/compilacao/bloco_alteracao.html +++ b/templates/compilacao/edit_bloco_alteracao.html @@ -1,5 +1,5 @@ {% load compilacao_filters %} -{% for ch in dispositivo.pk|get_bloco %} +{% for ch in dispositivo.pk|get_bloco_atualizador %} {% spaceless %}
diff --git a/templates/compilacao/index.html b/templates/compilacao/index.html index 3e7c099a9..d694f657a 100644 --- a/templates/compilacao/index.html +++ b/templates/compilacao/index.html @@ -3,47 +3,51 @@ {% load compilacao_filters %} {% block title%} -

{{ view.get_norma }}

+

{{ view.get_norma }}

{% endblock %} {% block base_content %} -
+ + +
+--- ++++ +
+ {% for key, values in view.get_vigencias.items %} {% if forloop.first %}
@@ -84,7 +88,7 @@ function textoVigente(item, link) {
  • {% trans 'Texto Multivigente'%}
  • {% trans 'Texto Vigente COM Links para Normas Alteradoras'%}
  • {% trans 'Texto Vigente SEM Links para Normas Alteradoras'%}
  • - +
    @@ -96,6 +100,8 @@ function textoVigente(item, link) { {%endif%} -{% include 'compilacao/template_render_bloco.html'%} + + +{% include 'compilacao/index_bloco.html'%}
    {% endblock base_content %} \ No newline at end of file diff --git a/templates/compilacao/template_render_bloco.html b/templates/compilacao/index_bloco.html similarity index 52% rename from templates/compilacao/template_render_bloco.html rename to templates/compilacao/index_bloco.html index accf8086b..0f5297575 100644 --- a/templates/compilacao/template_render_bloco.html +++ b/templates/compilacao/index_bloco.html @@ -1,21 +1,16 @@ {% load i18n %} {% load compilacao_filters %} -{% for dispositivo in view.get_queryset %} +{% for dispositivo in object_list %} {% if dispositivo.nivel == view.flag_nivel_old %}
    {% elif dispositivo.nivel < view.flag_nivel_old %} - {% close_div view.flag_nivel_old dispositivo.nivel %} + {% close_div view.flag_nivel_old dispositivo.nivel 0 %} {% 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 }} - + {{ 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 }} @@ -25,11 +20,11 @@ {% endif %} {% endspaceless %} {% if view.is_norma_alteradora and dispositivo.tipo_dispositivo.class_css == 'bloco_alteracao'%} - {%with node=dispositivo template_name='compilacao/bloco_alteracao.html' %} + {%with node=dispositivo template_name='compilacao/index_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 +{% close_div view.flag_nivel_old view.flag_nivel_ini 0 %} \ No newline at end of file diff --git a/templates/compilacao/index_bloco_alteracao.html b/templates/compilacao/index_bloco_alteracao.html new file mode 100644 index 000000000..d438e02af --- /dev/null +++ b/templates/compilacao/index_bloco_alteracao.html @@ -0,0 +1,10 @@ +{% load compilacao_filters %} +{% for ch in dispositivo.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 %} \ No newline at end of file diff --git a/templates/sistema.html b/templates/sistema.html index 30b53958e..d86b83cf4 100644 --- a/templates/sistema.html +++ b/templates/sistema.html @@ -78,6 +78,15 @@
  • Assunto de Norma Jurídica
  • +
    Módulo Compilação
    + +
    Módulo Sessão Plenária