From b3aa3c6aa138dda40bcc13d052b63ed5605424cb Mon Sep 17 00:00:00 2001 From: LeandroRoberto Date: Tue, 22 Mar 2016 18:36:29 -0300 Subject: [PATCH] =?UTF-8?q?Refat.=20de=20inser=C3=A3o=20e=20exclus=C3=A3o?= =?UTF-8?q?=20de=20Dispositivos=20Raiz?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- compilacao/forms.py | 47 +-- .../migrations/0046_auto_20160319_1542.py | 25 ++ compilacao/models.py | 36 +- compilacao/views.py | 339 ++++++++++++------ static/js/app.js | 4 +- static/js/compilacao.js | 74 ++-- static/styles/app.scss | 11 + templates/compilacao/dispositivo_form.html | 1 + .../dispositivo_search_fragment_form.html | 2 +- templates/compilacao/text_edit.html | 38 +- templates/compilacao/text_edit_bloco.html | 2 +- templates/compilacao/text_list.html | 4 +- 12 files changed, 402 insertions(+), 181 deletions(-) create mode 100644 compilacao/migrations/0046_auto_20160319_1542.py diff --git a/compilacao/forms.py b/compilacao/forms.py index 13c493c29..3d81a1622 100644 --- a/compilacao/forms.py +++ b/compilacao/forms.py @@ -273,35 +273,41 @@ class DispositivoSearchFragmentForm(ModelForm): label=_('Tipos de...'), required=False) num_ta = forms.IntegerField( - label=_('Núm Texto Articulado'), required=False) + label=_('Número'), required=False) ano_ta = forms.IntegerField( - label=_('Ano Texto Articulado'), required=False) + label=_('Ano'), required=False) - busca_dispositivo = forms.CharField( - label=_('Buscar Dispositivo'), + rotulo_dispositivo = forms.CharField( + label=_('Rótulo'), + required=False) + + texto_dispositivo = forms.CharField( + label=_('Pesquisa Textual'), required=False) def __init__(self, *args, **kwargs): if 'fields_search' in kwargs: fields_search = kwargs['fields_search'].fields - fields_search.append( - Row( - to_column(('tipo_ta', 6)), - to_column(('tipo_model', 6)))) - fields_search.append( + + fields_search.append(Fieldset( + _('Busca por um Dispositivo'), Row( to_column(('num_ta', 6)), - to_column(('ano_ta', 6)))) - fields_search.append( - Row(to_column((FieldWithButtons( - Field( - 'busca_dispositivo', - placeholder=_('Digite palavras, letras, ' - 'números ou algo' - ' que estejam ' - 'no rótulo ou no texto.')), - StrictButton(_('Buscar'), css_class='btn-busca')), 12)))) + to_column(('ano_ta', 6))), + Row( + to_column(('tipo_ta', 6)), + to_column(('tipo_model', 6))), + Row(to_column(('rotulo_dispositivo', 3)), + to_column((FieldWithButtons( + Field( + 'texto_dispositivo', + placeholder=_('Digite palavras, letras, ' + 'números ou algo' + ' que estejam no texto.')), + StrictButton(_('Buscar'), css_class='btn-busca')), 9))) + )) + fields_search.append( Row(to_column( (Div(css_class='result-busca-dispositivo'), 12)))) @@ -587,9 +593,10 @@ class DispositivoEdicaoBasicaForm(ModelForm): self.helper = FormHelper() self.helper.layout = SaplFormLayout( - *layout, label_cancel=_('Retornar para o Editor Sequencial')) + self.helper.layout.fields += layout + super(DispositivoEdicaoBasicaForm, self).__init__(*args, **kwargs) FIELD_NAME_MAPPING = { diff --git a/compilacao/migrations/0046_auto_20160319_1542.py b/compilacao/migrations/0046_auto_20160319_1542.py new file mode 100644 index 000000000..c3fc05c14 --- /dev/null +++ b/compilacao/migrations/0046_auto_20160319_1542.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9 on 2016-03-19 18:42 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('compilacao', '0045_auto_20160311_1117'), + ] + + operations = [ + migrations.AlterField( + model_name='dispositivo', + name='inconstitucionalidade', + field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Declarado Inconstitucional'), + ), + migrations.AlterField( + model_name='dispositivo', + name='texto', + field=models.TextField(blank=True, default='', verbose_name='Texto Original'), + ), + ] diff --git a/compilacao/models.py b/compilacao/models.py index f9bfb61ff..847e2f7ff 100644 --- a/compilacao/models.py +++ b/compilacao/models.py @@ -1,3 +1,4 @@ +from builtins import zip from datetime import datetime from django.contrib.auth.models import User @@ -136,17 +137,22 @@ class TextoArticulado(TimestampedMixin): 'data': defaultfilters.date(self.data, "d \d\e F \d\e Y")} def organizar_ordem_de_dispositivos(self): + dpts = Dispositivo.objects.filter(ta=self) - ordem_max = dpts.last().ordem + if not dpts.exists(): + return + ordem_max = dpts.last().ordem dpts.update(ordem=F('ordem') + ordem_max) + dpts = Dispositivo.objects.filter( + ta=self).values_list('pk', flat=True).order_by('ordem') + count = 0 for d in dpts: count += Dispositivo.INTERVALO_ORDEM - d.ordem = count - d.save() + Dispositivo.objects.filter(pk=d).update(ordem=count) class TipoNota(models.Model): @@ -728,6 +734,20 @@ class Dispositivo(BaseModel, TimestampedMixin): 'º' if self.tipo_dispositivo. rotulo_ordinal >= 0 else '',) + elif irmaos_mesmo_tipo.count() == 1 and\ + irmaos_mesmo_tipo[0].dispositivo0 == 0 and\ + self.dispositivo0 == 1: + irmao = irmaos_mesmo_tipo[0] + irmao.dispositivo0 = 1 + rr = prefixo[0] + rr += irmao.get_nomenclatura_completa() + irmao.rotulo = rr + t.rotulo_sufixo_texto + irmao.save() + r += prefixo[0] + + self.dispositivo0 = 2 + r += self.get_nomenclatura_completa() + else: r += prefixo[0] r += self.get_nomenclatura_completa() @@ -803,19 +823,25 @@ class Dispositivo(BaseModel, TimestampedMixin): return (flag_direcao, flag_variacao) - def transform_in_prior(self): + def transform_in_prior(self, profundidade=-1): numero = self.get_numero_completo() numero.reverse() + if profundidade != -1: + profundidade = len(numero) - profundidade - 1 + for i in range(len(numero)): if not numero[i]: continue + if i > profundidade: + continue + numero[i] -= 1 - numero.reverse() break + numero.reverse() self.set_numero_completo(numero) def set_numero_completo(self, *numero): diff --git a/compilacao/views.py b/compilacao/views.py index 1adf2760a..82dceebbf 100644 --- a/compilacao/views.py +++ b/compilacao/views.py @@ -8,6 +8,7 @@ from django.contrib.auth.decorators import login_required from django.contrib.contenttypes.models import ContentType from django.core.signing import Signer from django.core.urlresolvers import reverse_lazy +from django.db import transaction from django.db.models import Q from django.forms.models import model_to_dict from django.http.response import (HttpResponse, HttpResponseRedirect, @@ -497,7 +498,8 @@ class TextView(ListView, CompMixin): continue if idx + 1 < length: - ano = item.ta_publicado.ano + ano = item.ta_publicado.ano if item.ta_publicado else\ + item.ta.ano if ano in self.itens_de_vigencia: self.itens_de_vigencia[ano].append(item) else: @@ -1024,7 +1026,15 @@ class ActionsEditMixin: try: Dispositivo.objects.filter( ta=dvt.ta, - ta_publicado__isnull=True).update(dispositivo_vigencia=dvt) + ta_publicado__isnull=True).update( + dispositivo_vigencia=dvt, + inicio_vigencia=dvt.inicio_vigencia) + + Dispositivo.objects.filter( + ta_publicado=dvt.ta).update( + dispositivo_vigencia=dvt, + inicio_vigencia=dvt.inicio_vigencia) + return {'message': str(_('Dispositivo de Vigência atualizado ' 'com sucesso!!!'))} except: @@ -1060,13 +1070,21 @@ class ActionsEditMixin: # TODO: a linha abaixo causa atualização da tela inteira... # retirar a linha abaixo e identificar atualizações pontuais data['pai'] = [-1, ] - data['message'] = str(self.remover_dispositivo(base, bloco)) - ta_base.organizar_ordem_de_dispositivos() + try: + with transaction.atomic(): + data['message'] = str(self.remover_dispositivo(base, bloco)) + ta_base.organizar_ordem_de_dispositivos() + except Exception as e: + print(e) + data['pk'] = context['dispositivo_id'] + data['message'] = str(_('Ocorreu um erro ao ' + 'excluir esse Dispositivo')) return data def remover_dispositivo(self, base, bloco): + base_ordem = base.ordem if base.dispositivo_subsequente or base.dispositivo_substituido: p = base.dispositivo_substituido n = base.dispositivo_subsequente @@ -1094,22 +1112,35 @@ class ActionsEditMixin: p.save() base.delete() else: + proxima_articulacao = base.get_proximo_nivel_zero() if not bloco: + # tranferir filhos para primeiro pai possível acima da base + # de exclusão for d in base.dispositivos_filhos_set.all(): # inserções automáticas são excluidas junto com sua base, # independente da escolha do usuário + """ TODO: Criar possibilidade de transferência de filhos + de dispositivos automáticos + ex: na exclusão de artigos, na versão atual, + os caputs serão excluidos automáticamente mesmo que a + exclusão não seja em bloco. O que fazer com os incisos? + transferir para o caput imediatamente acima visto se + tratar de uma exclusão de item?""" d_nivel_old = d.nivel if d.is_relative_auto_insert(): + d.delete() continue # encontrar possível pai que será o primeiro parent # possível dos parents do dispostivo # imediatamente anterior ao dispositivo base + anterior = Dispositivo.objects.order_by('-ordem').filter( ta_id=base.ta_id, - ordem__lt=base.ordem - ).first() + ordem__lt=d.ordem).exclude( + pk=base.pk).exclude( + dispositivo_pai=base).first() if not anterior: return _('Não é possível excluir este Dispositivo sem' @@ -1144,6 +1175,13 @@ class ActionsEditMixin: d.transform_in_next() d.rotulo = d.rotulo_padrao() break + + elif (candidato.tipo_dispositivo == + d.dispositivo_pai.tipo_dispositivo): + d.dispositivo_pai = candidato + d.nivel = candidato.nivel + 1 + break + elif d.tipo_dispositivo.possiveis_pais.filter( pai=candidato.tipo_dispositivo, perfil__padrao=True).exists(): @@ -1154,6 +1192,7 @@ class ActionsEditMixin: else: d.set_numero_completo([1, 0, 0, 0, 0, 0, ]) d.nivel = candidato.nivel + 1 + d.rotulo = d.rotulo_padrao() break if not parents: @@ -1164,97 +1203,171 @@ class ActionsEditMixin: if d.nivel != d_nivel_old: d.organizar_niveis() - if base.nivel: - if not base.tipo_dispositivo.contagem_continua: - pai_base = base.dispositivo_pai - irmaos_posteriores = pai_base.dispositivos_filhos_set.\ - filter( - ordem__gt=base.ordem, - tipo_dispositivo=base.tipo_dispositivo) + pai_base = base.dispositivo_pai + if pai_base: + # Localizar irmaos posteriores do mesmo tipo de base + # se não DCC + if not base.tipo_dispositivo.contagem_continua: + irmaos_posteriores = pai_base.dispositivos_filhos_set.\ + filter( + ordem__gt=base_ordem, + tipo_dispositivo=base.tipo_dispositivo) + + # se DCC + else: + irmaos_posteriores = Dispositivo.objects.order_by( + 'ordem').filter( + ta_id=base.ta_id, + ordem__gt=base_ordem, + tipo_dispositivo_id=base.tipo_dispositivo_id) - # Religar numeração de dispositivos de contagem contínua - # que seram excluidos + if proxima_articulacao: + irmaos_posteriores = irmaos_posteriores.exclude( + ordem__gte=proxima_articulacao.ordem) - proximo_independente_base = irmaos_posteriores.first() - proxima_articulacao = base.get_proximo_nivel_zero() + # excluir e renumerar irmaos + profundidade_base = base.get_profundidade() + base.delete() - if not proximo_independente_base: - proximo_independente_base = Dispositivo.objects.\ - order_by('ordem').filter( - ta_id=base.ta_id, - ordem__gt=base.ordem, - nivel__lte=base.nivel).first() + for irmao in irmaos_posteriores: + irmao.transform_in_prior( + profundidade=profundidade_base) + irmao.rotulo = irmao.rotulo_padrao() + irmao.save() - if proximo_independente_base: - dcc = Dispositivo.objects.order_by('ordem').filter( - ta_id=base.ta_id, - ordem__gt=base.ordem, - ordem__lt=proximo_independente_base.ordem, - tipo_dispositivo__contagem_continua=True) - - religado = {} - - for d in dcc: - if d.tipo_dispositivo.class_css in religado: - continue - religado[ - d.tipo_dispositivo.class_css] = d.dispositivo0 - - if proxima_articulacao: - dcc_a_religar = Dispositivo.objects.filter( - ta_id=d.ta_id, - ordem__gt=proximo_independente_base.ordem, - tipo_dispositivo=d.tipo_dispositivo, - ordem__lt=proxima_articulacao.ordem) - else: - dcc_a_religar = Dispositivo.objects.filter( - ta_id=base.ta_id, - ordem__gt=proximo_independente_base.ordem, - tipo_dispositivo=d.tipo_dispositivo) - - primeiro_a_religar = 0 - for dr in dcc_a_religar: - if not primeiro_a_religar: - primeiro_a_religar = dr.dispositivo0 - - dr.dispositivo0 = ( - dr.dispositivo0 - - primeiro_a_religar + d.dispositivo0) - dr.rotulo = dr.rotulo_padrao() - dr.save() - base.delete() + irmaos = pai_base.dispositivos_filhos_set.\ + filter(tipo_dispositivo=base.tipo_dispositivo) + + if (irmaos.count() == 1 and + ';' in irmaos[0]. + tipo_dispositivo.rotulo_prefixo_texto): + i = irmaos[0] + i.set_numero_completo([0, 0, 0, 0, 0, 0, ]) + i.rotulo = i.rotulo_padrao(local_insert=1) + i.save() else: - proxima_articulacao = base.get_proximo_nivel_zero() + # Renumerar Dispostivos de Contagem Contínua + # de dentro da base se pai + dcc = Dispositivo.objects.order_by('ordem').filter( + ta_id=base.ta_id, + ordem__gt=base.ordem, + tipo_dispositivo__contagem_continua=True) if proxima_articulacao: - irmaos_posteriores = Dispositivo.objects.filter( - ta_id=base.ta_id, - ordem__gt=base.ordem, - tipo_dispositivo=base.tipo_dispositivo, - ordem__lt=proxima_articulacao.ordem) + dcc = dcc.exclude( + ordem__gte=proxima_articulacao.ordem) + + base_adicao = {} + + nivel_zero_anterior = base.get_nivel_zero_anterior() + if nivel_zero_anterior: + nivel_zero_anterior = nivel_zero_anterior.ordem else: - irmaos_posteriores = Dispositivo.objects.filter( - ta_id=base.ta_id, - ordem__gt=base.ordem, - tipo_dispositivo=base.tipo_dispositivo) + nivel_zero_anterior = 0 + + dcc = list(dcc) + for d in dcc: # ultimo DCC do tipo encontrado + + if d.tipo_dispositivo.class_css not in base_adicao: + ultimo_dcc = Dispositivo.objects.order_by( + 'ordem').filter( + ta_id=base.ta_id, + ordem__lt=base.ordem, + ordem__gt=nivel_zero_anterior, + tipo_dispositivo__contagem_continua=True, + tipo_dispositivo=d.tipo_dispositivo).last() + + if not ultimo_dcc: + break + + base_adicao[ + d.tipo_dispositivo.class_css] = ultimo_dcc.\ + dispositivo0 + + d.dispositivo0 += base_adicao[ + d.tipo_dispositivo.class_css] + + d.rotulo = d.rotulo_padrao() + dcc.reverse() + for d in dcc: + d.save() base.delete() - if (len(irmaos_posteriores) == 1 and - ';' in irmaos_posteriores[0]. - tipo_dispositivo.rotulo_prefixo_texto): - i = irmaos_posteriores[0] - i.set_numero_completo([0, 0, 0, 0, 0, 0, ]) - i.rotulo = i.rotulo_padrao(local_insert=1) - i.save() + # em Bloco + else: + + # Religar numeração de dispositivos de contagem contínua + # que serão excluidos + # pbi - proxima base independente + pbi = Dispositivo.objects.\ + order_by('ordem').filter( + ta_id=base.ta_id, + ordem__gt=base_ordem, + nivel__lte=base.nivel).first() + if not pbi: + base.delete() else: - for irmao in irmaos_posteriores: - irmao.transform_in_prior() - irmao.rotulo = irmao.rotulo_padrao() - irmao.save() - else: - proxima_articulacao = base.get_proximo_nivel_zero() + dcc_a_excluir = Dispositivo.objects.order_by( + 'ordem').filter( + ta_id=base.ta_id, + ordem__gte=base_ordem, + ordem__lt=pbi.ordem, + tipo_dispositivo__contagem_continua=True) + + if proxima_articulacao: + dcc_a_excluir = dcc_a_excluir.exclude( + ordem__gte=proxima_articulacao.ordem) + + religado = {} + + for d in dcc_a_excluir: + if d.tipo_dispositivo.class_css in religado: + continue + religado[ + d.tipo_dispositivo.class_css] = d.dispositivo0 + + dcc_a_religar = Dispositivo.objects.filter( + ta_id=d.ta_id, + ordem__gte=pbi.ordem, + tipo_dispositivo=d.tipo_dispositivo) + + if proxima_articulacao: + dcc_a_religar = dcc_a_religar.exclude( + ordem__gte=proxima_articulacao.ordem) + + primeiro_a_religar = 0 + for dr in dcc_a_religar: + if not primeiro_a_religar: + primeiro_a_religar = dr.dispositivo0 + base.delete() + + dr.dispositivo0 = ( + dr.dispositivo0 - + primeiro_a_religar + d.dispositivo0) + dr.rotulo = dr.rotulo_padrao() + + dr.save(clean=base != dr) + if base.pk: + base.delete() + + return '' + + """ + if proxima_articulacao: + irmaos_posteriores = Dispositivo.objects.filter( + ta_id=base.ta_id, + ordem__gt=base.ordem, + tipo_dispositivo=base.tipo_dispositivo, + ordem__lt=proxima_articulacao.ordem) + else: + irmaos_posteriores = Dispositivo.objects.filter( + ta_id=base.ta_id, + ordem__gt=base.ordem, + tipo_dispositivo=base.tipo_dispositivo) + + proxima_articulacao = base.get_proximo_nivel_zero() # Renumerar Dispostivos de Contagem Contínua de dentro da base if not proxima_articulacao: @@ -1305,6 +1418,7 @@ class ActionsEditMixin: base.delete() return '' + """ def add_prior(self, context): return {} @@ -1314,11 +1428,21 @@ class ActionsEditMixin: def add_next(self, context, local_add='add_next'): try: + + dp_auto_insert = None base = Dispositivo.objects.get(pk=context['dispositivo_id']) tipo = TipoDispositivo.objects.get(pk=context['tipo_pk']) variacao = int(context['variacao']) parents = [base, ] + base.get_parents() + if 'perfil_pk' not in context: + perfil_padrao = PerfilEstruturalTextoArticulado.objects.filter( + padrao=True).first() + if perfil_padrao: + context['perfil_pk'] = perfil_padrao.pk + else: + raise Exception('Não existe perfil padrão!') + tipos_dp_auto_insert = tipo.filhos_permitidos.filter( filho_de_insercao_automatica=True, perfil_id=context['perfil_pk']) @@ -1407,8 +1531,6 @@ class ActionsEditMixin: dp.save() - dp_auto_insert = None - # Inserção automática if count_auto_insert: dp_pk = dp.pk @@ -1445,7 +1567,8 @@ class ActionsEditMixin: if filho.nivel > nivel: continue - if filho.dispositivo_pai.ordem >= dp.ordem: + if not filho.dispositivo_pai or\ + filho.dispositivo_pai.ordem >= dp.ordem: continue nivel = filho.nivel @@ -1784,30 +1907,42 @@ class DispositivoSearchFragmentFormView(ListView): def get_queryset(self): try: - busca = '' - if 'busca' in self.request.GET: - busca = self.request.GET['busca'] + if 'initial_ref' in self.request.GET: + initial_ref = self.request.GET['initial_ref'] + if initial_ref: + q = Q(pk=initial_ref) + + result = Dispositivo.objects.filter(q).select_related( + 'ta').exclude( + tipo_dispositivo__dispositivo_de_alteracao=True) + + return result + + texto = '' + rotulo = '' + + if 'texto' in self.request.GET: + texto = self.request.GET['texto'] q = Q(nivel__gt=0) - busca = busca.split(' ') + texto = texto.split(' ') n = 10 - for item in busca: + if 'rotulo' in self.request.GET: + rotulo = self.request.GET['rotulo'] + if rotulo: + q = q & Q(rotulo__icontains=rotulo) + for item in texto: if not item: continue - if q: - q = q & (Q(dispositivo_pai__rotulo__icontains=item) | - Q(rotulo__icontains=item) | - Q(texto__icontains=item) | + q = q & (Q(texto__icontains=item) | Q(texto_atualizador__icontains=item)) n = 50 else: - q = (Q(dispositivo_pai__rotulo__icontains=item) | - Q(rotulo__icontains=item) | - Q(texto__icontains=item) | + q = (Q(texto__icontains=item) | Q(texto_atualizador__icontains=item)) n = 50 @@ -1829,12 +1964,6 @@ class DispositivoSearchFragmentFormView(ListView): q = q & Q(ta__ano=ano_ta) n = 50 - if 'initial_ref' in self.request.GET: - initial_ref = self.request.GET['initial_ref'] - if initial_ref: - q = q & Q(pk=initial_ref) - n = 50 - result = Dispositivo.objects.filter(q).select_related( 'ta').exclude(tipo_dispositivo__dispositivo_de_alteracao=True) diff --git a/static/js/app.js b/static/js/app.js index 71edb18ac..5943024d8 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -1,5 +1,5 @@ function initTinymce() { - removeTinymce(); + removeTinymce(); tinymce.init({ mode : "textareas", force_br_newlines : false, @@ -45,7 +45,7 @@ function autorModal() { height: 300, show: { effect: "blind", - duration: 500 }, + duration: 500}, hide: { effect: "explode", duration: 500 diff --git a/static/js/compilacao.js b/static/js/compilacao.js index 892b53858..b6d2242f4 100644 --- a/static/js/compilacao.js +++ b/static/js/compilacao.js @@ -26,38 +26,42 @@ function insertWaitAjax(element) { var tipo_select = ''; var tipo_form = ''; var configFormSearchTA = function(container, _tipo_form, _tipo_select) { - tipo_select = _tipo_select; - tipo_form = _tipo_form; + tipo_select = _tipo_select; + tipo_form = _tipo_form; var ta_select = $(container+" select[name='tipo_ta']"); $(container+" label[for='id_tipo_model']").html('Tipos de ' + ta_select[0].children[ta_select[0].selectedIndex].innerHTML); - $(container+" select[name='tipo_ta']").change(function(event) { - var url = ''; - url = '/ta/search_fragment_form?action=get_tipos&tipo_ta='+this.value; - - $(container+" label[for='id_tipo_model']").html('Tipos de ' + this.children[this.selectedIndex].innerHTML); - - - var select = $(container+" select[name='tipo_model']"); - select.empty(); - $('').appendTo(select); - - $.get(url).done(function( data ) { - select.empty(); - for(var item in data) { - for (var i in data[item]) - $('').appendTo(select); - } - select.change(onChangeParamTA) - }); - }); - $(container+" input[name='num_ta'], " - + container+" input[name='ano_ta'], " - + container+" select[name='tipo_model'], " - + container+" input[name='busca_dispositivo']" - ).change(onChangeParamTA); - - $(container+" .btn-busca").click(onChangeParamTA); + $(container+" select[name='tipo_ta']").change(function(event) { + var url = ''; + url = '/ta/search_fragment_form?action=get_tipos&tipo_ta='+this.value; + + $(container+" label[for='id_tipo_model']").html('Tipos de ' + this.children[this.selectedIndex].innerHTML); + + + var select = $(container+" select[name='tipo_model']"); + select.empty(); + $('').appendTo(select); + + $.get(url).done(function( data ) { + select.empty(); + + + for(var item in data) { + for (var i in data[item]) + select.append($("').appendTo(select); + } + select.change(onChangeParamTA) + }); + }); + $(container+" input[name='num_ta'], " + + container+" input[name='ano_ta'], " + + container+" select[name='tipo_model'], " + + container+" input[name='texto_dispositivo'], " + + container+" input[name='rotulo_dispositivo']" + ).change(onChangeParamTA); + + $(container+" .btn-busca").click(onChangeParamTA); } var onChangeParamTA = function(event) { @@ -66,12 +70,13 @@ var onChangeParamTA = function(event) { var num_ta = $("input[name='num_ta']").val(); var ano_ta = $("input[name='ano_ta']").val(); var rotulo_dispositivo = $("input[name='rotulo_dispositivo']").val(); - var busca_dispositivo = $("input[name='busca_dispositivo']").val(); + var texto_dispositivo = $("input[name='texto_dispositivo']").val(); var dispositivo_ref = $("#id_dispositivo_ref").val(); + var dispositivo_select_ref = null; $('#id_dispositivo_ref').remove(); if (dispositivo_ref == null) - dispositivo_ref = '' + dispositivo_select_ref = $("input[name='dispositivo_ref']:checked").val() var url = ''; @@ -80,7 +85,7 @@ var onChangeParamTA = function(event) { 'tipo_model' : tipo_model, 'num_ta' : num_ta, 'ano_ta' : ano_ta, - 'busca' : busca_dispositivo, + 'texto' : texto_dispositivo, 'rotulo' : rotulo_dispositivo, 'tipo_form' : tipo_form, 'tipo_select' : tipo_select, @@ -92,6 +97,9 @@ var onChangeParamTA = function(event) { insertWaitAjax('.result-busca-dispositivo') $.get(url, formData).done(function( data ) { $('.result-busca-dispositivo').html(data); - //$("input[name='dispositivo_ref']").first().prop('checked', true); + if (dispositivo_ref != null) + $("input[name='dispositivo_ref']").filter('[value="'+dispositivo_ref+'"]').prop('checked', true); + else if (dispositivo_select_ref != null) + $("input[name='dispositivo_ref']").filter('[value="'+dispositivo_select_ref+'"]').prop('checked', true); }); } diff --git a/static/styles/app.scss b/static/styles/app.scss index 2a1f72c81..9cbfeafb3 100644 --- a/static/styles/app.scss +++ b/static/styles/app.scss @@ -126,3 +126,14 @@ body { margin-bottom: 0; } } + + +fieldset { + + fieldset { + font-size: 95%; + legend { + font-size: 18px; + } + } +} \ No newline at end of file diff --git a/templates/compilacao/dispositivo_form.html b/templates/compilacao/dispositivo_form.html index 2f681de8f..0d585ac59 100644 --- a/templates/compilacao/dispositivo_form.html +++ b/templates/compilacao/dispositivo_form.html @@ -15,6 +15,7 @@
  • {% trans 'Vigência' %}
  • {% trans 'Dispositivo Alterado' %}
  • {% trans 'Dispositivo Alterador' %}
  • +
  • {% trans 'Dispositivo de Vigência' %}
  • {% endblock sections_nav %} diff --git a/templates/compilacao/dispositivo_search_fragment_form.html b/templates/compilacao/dispositivo_search_fragment_form.html index a0f1e5f28..501233d09 100644 --- a/templates/compilacao/dispositivo_search_fragment_form.html +++ b/templates/compilacao/dispositivo_search_fragment_form.html @@ -33,7 +33,7 @@ {% nomenclatura_heranca dpt 1 1 %} - {% elif dpt.tipo_dispositivo.dispositivo_de_articulacao and request.GET.tipo_select != 'select_for_vide'%} + {% elif dpt.tipo_dispositivo.dispositivo_de_articulacao%}
  • diff --git a/templates/compilacao/text_edit.html b/templates/compilacao/text_edit.html index d201c2a98..e72b41eba 100644 --- a/templates/compilacao/text_edit.html +++ b/templates/compilacao/text_edit.html @@ -29,7 +29,7 @@
    {% trans 'Aguarde... Atualizando informações!!!'%}
    -
  • (C) Construtor Estrutural: Neste modo, o editor foca na inserção de Dispositivos e busca deixar mais acessíveis as estas ações.
  • -
  • A Edição Avançada é complexa e sensível a erros. É recomendável o uso cuidadoso e consciente das funcionalidades.
  • +
  • A Edição Avançada é complexa e sensível a erros de edição. É recomendável o uso cuidadoso e consciente das funcionalidades.
  • Gere toda a estrutura básica sem adicionar texto, isso evitará erros estruturais e otimizará seu trabalho por:
    1. Facilitar o trabalho local aí, de seu navegador.
    2. @@ -75,21 +75,35 @@
  • Inserir os Dispositivos na sequência natural é mais produtivo para você, além de ser também mais simples para o algorítmo que controla este processo. Quanto maior a mudança estutural, mais lento será o procedimento.
  • -
  • A exclusão de Dispositivos é um processo moroso e complicado, principalmente se o que está sendo excluido for, ou envolver, os DCC's - Dispositivos de Contagem Continua, como é o caso do Tipo de Dispositivo (Artigo), que é um tipo comum nos Textos Articulados Brasileiros. - As exclusões podem ser diretas, individuais ou em bloco: +
  • A Opção DVt (Dispositivo de Vigência do Texto) redefine o dispositivo em seleção, como o dispositivo de vigência de todos os outros, desde que estes sejam os dispositivos originais do texto.
      -
    1. Diretas: Dispositivos que não possuam itens internos são excluidos diretamente.
    2. -
    3. Individuais: Dispositivos que possuam itens internos e este podem ser reenquadrados no Dispositivo imediatamente anterior
    4. -
    5. Em Bloco: Todo o conteúdo incluído no Dispositivo em edição será excluído.
    6. +
    7. O Dispositivo de Vigência de Dispositivos Alterados são controlados pelos seus Dispositivos Alteradores
    8. +
    9. Ao usar a opção DVt, todas as datas de início de vigência serão reenquadradas para a data de vigência do dispositivo de vigência. Posteriormente, alterações manuais poderão ser feitas.
    - @@ -75,7 +75,7 @@ {% for dispositivo in values %}
  • {% if not forloop.parentloop.first %} - {% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}} + {% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}} {% endif %}
  • {% endfor %}