Browse Source

Redir Sel de Disp Alterados dentro do histórico

Redireciona Seleção de Dispositivos a ser alterado para o intervalo vazio
de Dispositivos alerados cujo intervalo de datas de inicio de vigência
relativo esteja o bloco de alteração.
pull/590/head
LeandroRoberto 8 years ago
parent
commit
9e13e8d310
  1. 21
      sapl/compilacao/forms.py
  2. 10
      sapl/compilacao/models.py
  3. 2
      sapl/compilacao/templatetags/compilacao_filters.py
  4. 27
      sapl/compilacao/views.py
  5. 6
      sapl/static/styles/compilacao.scss
  6. 6
      sapl/templates/compilacao/dispositivo_form_search_fragment.html
  7. 2
      sapl/templates/compilacao/layout/dispositivo_checkbox.html
  8. 2
      sapl/templates/compilacao/layout/dispositivo_radio.html
  9. 4
      sapl/templates/compilacao/text_edit_bloco.html
  10. 2
      sapl/templates/compilacao/text_notificacoes.html

21
sapl/compilacao/forms.py

@ -1125,6 +1125,19 @@ class DispositivoEdicaoAlteracaoForm(ModelForm):
'Dispositivo sem haver um ' 'Dispositivo sem haver um '
'Dispositivo Alterador.')) 'Dispositivo Alterador.'))
"""if dst.inicio_vigencia > self.instance.inicio_vigencia:
raise ValidationError(_('Não é permitido substituir um '
'Dispositivo que sua data de início '
'de vigência é superior a do dispositivo '
'em edição.'))
if dsq.inicio_vigencia <= self.instance.fim_vigencia:
raise ValidationError(_('Não é permitido possuir um Dispositivo '
'Subsequente que sua data de início '
'de vigência seja inferior a data de fim '
'de vigência do dispositivo em edição.'))
"""
def save(self): def save(self):
data = self.cleaned_data data = self.cleaned_data
@ -1135,17 +1148,23 @@ class DispositivoEdicaoAlteracaoForm(ModelForm):
ndsq = data['dispositivo_subsequente'] ndsq = data['dispositivo_subsequente']
nda = data['dispositivo_atualizador'] nda = data['dispositivo_atualizador']
# Se o dispositivo substituído foi trocado na edição
if ndst != od.dispositivo_substituido: if ndst != od.dispositivo_substituido:
# Se existia uma substituído, limpar seu subsequente e suas datas
# de fim de vigencia e eficacia
if od.dispositivo_substituido: if od.dispositivo_substituido:
odst = od.dispositivo_substituido odst = od.dispositivo_substituido
odst.dispositivo_subsequente = None odst.dispositivo_subsequente = None
odst.fim_vigencia = None odst.fim_vigencia = None
odst.fim_eficacia = None odst.fim_eficacia = None
odst.save() odst.save()
# se foi selecionado um dispositivo para ser substituído
# self.instance é seu subsequente
if ndst: if ndst:
# e se esse novo substituido possuia um outro sequente
if ndst.dispositivo_subsequente: if ndst.dispositivo_subsequente:
# o substituido desse subsequente não é mais ndst
ndst.dispositivo_subsequente.dispositivo_substituido = None ndst.dispositivo_subsequente.dispositivo_substituido = None
ndst.dispositivo_subsequente.save() ndst.dispositivo_subsequente.save()

10
sapl/compilacao/models.py

@ -1149,6 +1149,16 @@ class Dispositivo(BaseModel, TimestampedMixin):
dp = dp.dispositivo_pai dp = dp.dispositivo_pai
return dp return dp
def history(self):
primeiro = self
while primeiro.dispositivo_substituido:
primeiro = primeiro.dispositivo_substituido
yield primeiro
while primeiro.dispositivo_subsequente:
primeiro = primeiro.dispositivo_subsequente
yield primeiro
@staticmethod @staticmethod
def new_instance_based_on(dispositivo_base, tipo_base): def new_instance_based_on(dispositivo_base, tipo_base):
dp = Dispositivo() dp = Dispositivo()

2
sapl/compilacao/templatetags/compilacao_filters.py

@ -212,7 +212,7 @@ def heranca(request, d, ignore_ultimo=0, ignore_primeiro=0):
ta_id = str(d.ta_id) ta_id = str(d.ta_id)
d_pk = str(d.pk) d_pk = str(d.pk)
if ta_id not in ta_dpts_parents or d_pk not in ta_dpts_parents[ta_id]: if ta_id not in ta_dpts_parents or d_pk not in ta_dpts_parents[ta_id]:
print('recarregando estrutura temporaria de heranças') #print('recarregando estrutura temporaria de heranças')
dpts_parents = {} dpts_parents = {}
ta_dpts_parents[ta_id] = dpts_parents ta_dpts_parents[ta_id] = dpts_parents
update_dispositivos_parents(dpts_parents, ta_id) update_dispositivos_parents(dpts_parents, ta_id)

27
sapl/compilacao/views.py

@ -2077,6 +2077,26 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
perfil_pk = self.request.session['perfil_estrutural'] perfil_pk = self.request.session['perfil_estrutural']
data = {} data = {}
data.update({'pk': bloco_alteracao.pk,
'pai': [bloco_alteracao.pk, ]})
history = list(dispositivo_a_alterar.history())
history.reverse()
for d in history:
if d.inicio_vigencia < bloco_alteracao.inicio_vigencia:
dispositivo_a_alterar = d
break
if (dispositivo_a_alterar.inicio_vigencia >
bloco_alteracao.inicio_vigencia):
self.set_message(
data, 'danger',
_('Não é possível alterar um Dispositivo com início de '
'Vigência posterior a data de Vigência do Dispositivo '
'Alterador!'), time=10000)
return data
ndp = Dispositivo.new_instance_based_on( ndp = Dispositivo.new_instance_based_on(
dispositivo_a_alterar, dispositivo_a_alterar.tipo_dispositivo) dispositivo_a_alterar, dispositivo_a_alterar.tipo_dispositivo)
@ -2093,7 +2113,6 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
ndp.inicio_vigencia = bloco_alteracao.inicio_vigencia ndp.inicio_vigencia = bloco_alteracao.inicio_vigencia
try: try:
with transaction.atomic():
ordem = dispositivo_a_alterar.criar_espaco( ordem = dispositivo_a_alterar.criar_espaco(
espaco_a_criar=1, local='json_add_in') espaco_a_criar=1, local='json_add_in')
@ -2120,6 +2139,9 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
p.save() p.save()
if n: if n:
# a ordem desse objeto foi alterada pela função criar_espaco
# deve ser recarregado para atualização
n.refresh_from_db()
n.dispositivo_substituido = ndp n.dispositivo_substituido = ndp
n.save() n.save()
@ -3020,7 +3042,8 @@ class TextNotificacoesView(CompMixin, ListView, FormView):
_('Dispositivo está substituindo um Dispositivo que não ' _('Dispositivo está substituindo um Dispositivo que não '
'possui este como seu Dispositivo Subsequente.')) 'possui este como seu Dispositivo Subsequente.'))
padd(r, type_notificacao, padd(r,
type_notificacao,
'sapl.compilacao:dispositivo_edit_alteracao', 'sapl.compilacao:dispositivo_edit_alteracao',
r.dispositivo_subsequente and r.dispositivo_subsequente and
r.dispositivo_subsequente.dispositivo_substituido != r, r.dispositivo_subsequente.dispositivo_substituido != r,

6
sapl/static/styles/compilacao.scss

@ -396,7 +396,7 @@ a:link:after, a:visited:after {
& > a { & > a {
color: #444444; color: #444444;
&.nota-alteracao { &.nota-alteracao {
color: #2980B9; color: #02baf2;
font-size: 0.75em; font-size: 0.75em;
&:hover { &:hover {
text-decoration: underline; text-decoration: underline;
@ -519,6 +519,10 @@ a:link:after, a:visited:after {
table, table td { table, table td {
border: 1px dotted #ccc; border: 1px dotted #ccc;
} }
a.nota-alteracao * {
color: #02baf2 !important;
}
} }
.dpt { .dpt {
display: block; display: block;

6
sapl/templates/compilacao/dispositivo_form_search_fragment.html

@ -40,7 +40,7 @@
{{ dpt.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }} {{ dpt.dispositivo_pai.tipo_dispositivo.rotulo_sufixo_html|safe }}
<span class="dtxt" id="d{% if not dpt.dispositivo_pai.dispositivo_subsequente_id and dpt.dispositivo_pai.dispositivo_substituido_id %}a{% endif %}{{dpt.dispositivo_pai.pk}}" pks="{{dpt.dispositivo_pai.dispositivo_substituido_id|default:''}}" pk="{{dpt.dispositivo_pai.pk}}">{{ dpt.dispositivo_pai.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.dispositivo_pai.texto %}{{ dpt.dispositivo_pai.texto|safe }}{%else%}{%if not dpt.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span> <span class="dtxt" id="d{% if not dpt.dispositivo_pai.dispositivo_subsequente_id and dpt.dispositivo_pai.dispositivo_substituido_id %}a{% endif %}{{dpt.dispositivo_pai.pk}}" pks="{{dpt.dispositivo_pai.dispositivo_substituido_id|default:''}}" pk="{{dpt.dispositivo_pai.pk}}">{{ dpt.dispositivo_pai.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.dispositivo_pai.texto %}{{ dpt.dispositivo_pai.texto|safe }}{%else%}{%if not dpt.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if dpt.dispositivo_pai.ta_publicado_id %} {% if dpt.dispositivo_pai.ta_publicado_id %}
<a class="link_alterador" href="{% url 'sapl.compilacao:ta_text' dpt.dispositivo_pai.ta_publicado.pk %}#{{dpt.dispositivo_pai.dispositivo_atualizador_id}}"> <a class="nota-alteracao" href="{% url 'sapl.compilacao:ta_text' dpt.dispositivo_pai.ta_publicado.pk %}#{{dpt.dispositivo_pai.dispositivo_atualizador_id}}">
{{ dpt.dispositivo_pai.tipo_dispositivo.nota_automatica_prefixo_html|safe }} {{ dpt.dispositivo_pai.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt.dispositivo_pai ta_pub_list %} {% nota_automatica dpt.dispositivo_pai ta_pub_list %}
{{ dpt.dispositivo_pai.tipo_dispositivo.nota_automatica_sufixo_html|safe }} {{ dpt.dispositivo_pai.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
@ -72,7 +72,7 @@
pks="{{dpt.dispositivo_substituido_id|default:''}}" pks="{{dpt.dispositivo_substituido_id|default:''}}"
pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span> pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if dpt.ta_publicado_id %} {% if dpt.ta_publicado_id %}
<a class="link_alterador" href="{% url 'sapl.compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}"> <a class="nota-alteracao" href="{% url 'sapl.compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt ta_pub_list %} {% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
@ -108,7 +108,7 @@
{{ df.tipo_dispositivo.rotulo_sufixo_html|safe }} {{ df.tipo_dispositivo.rotulo_sufixo_html|safe }}
<span class="dtxt" id="d{% if not df.dispositivo_subsequente_id and df.dispositivo_substituido_id %}a{% endif %}{{df.pk}}" pks="{{df.dispositivo_substituido_id|default:''}}" pk="{{df.pk}}">{{ df.tipo_dispositivo.texto_prefixo_html|safe }}{%if df.texto %}{{ df.texto|safe }}{%else%}{%if not df.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span> <span class="dtxt" id="d{% if not df.dispositivo_subsequente_id and df.dispositivo_substituido_id %}a{% endif %}{{df.pk}}" pks="{{df.dispositivo_substituido_id|default:''}}" pk="{{df.pk}}">{{ df.tipo_dispositivo.texto_prefixo_html|safe }}{%if df.texto %}{{ df.texto|safe }}{%else%}{%if not df.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if df.ta_publicado_id %} {% if df.ta_publicado_id %}
<a class="link_alterador" href="{% url 'sapl.compilacao:ta_text' df.ta_publicado.pk %}#{{df.dispositivo_atualizador_id}}"> <a class="nota-alteracao" href="{% url 'sapl.compilacao:ta_text' df.ta_publicado.pk %}#{{df.dispositivo_atualizador_id}}">
{{ df.tipo_dispositivo.nota_automatica_prefixo_html|safe }} {{ df.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica df ta_pub_list %} {% nota_automatica df ta_pub_list %}
{{ df.tipo_dispositivo.nota_automatica_sufixo_html|safe }} {{ df.tipo_dispositivo.nota_automatica_sufixo_html|safe }}

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

@ -34,7 +34,7 @@
{{ choice.1.tipo_dispositivo.rotulo_sufixo_html|safe }} {{ choice.1.tipo_dispositivo.rotulo_sufixo_html|safe }}
<span class="dtxt" id="d{% if not choice.1.dispositivo_subsequente_id and choice.1.dispositivo_substituido_id %}a{% endif %}{{choice.1.pk}}" pks="{{choice.1.dispositivo_substituido_id|default:''}}" pk="{{choice.1.pk}}">{{ choice.1.tipo_dispositivo.texto_prefixo_html|safe }}{%if choice.1.texto %}{{ choice.1.texto|safe }}{%else%}{%if not choice.1.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span> <span class="dtxt" id="d{% if not choice.1.dispositivo_subsequente_id and choice.1.dispositivo_substituido_id %}a{% endif %}{{choice.1.pk}}" pks="{{choice.1.dispositivo_substituido_id|default:''}}" pk="{{choice.1.pk}}">{{ choice.1.tipo_dispositivo.texto_prefixo_html|safe }}{%if choice.1.texto %}{{ choice.1.texto|safe }}{%else%}{%if not choice.1.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if choice.1.ta_publicado_id and not choice.1.tipo_dispositivo.dispositivo_de_articulacao %} {% if choice.1.ta_publicado_id and not choice.1.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" target="_blank" href="{% url 'sapl.compilacao:ta_text' choice.1.ta_publicado.pk %}#{{choice.1.dispositivo_atualizador_id}}"> <a class="nota-alteracao" target="_blank" href="{% url 'sapl.compilacao:ta_text' choice.1.ta_publicado.pk %}#{{choice.1.dispositivo_atualizador_id}}">
{{ choice.1.tipo_dispositivo.nota_automatica_prefixo_html|safe }} {{ choice.1.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica choice.1 ta_pub_list %} {% nota_automatica choice.1 ta_pub_list %}
{{ choice.1.tipo_dispositivo.nota_automatica_sufixo_html|safe }} {{ choice.1.tipo_dispositivo.nota_automatica_sufixo_html|safe }}

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

@ -30,7 +30,7 @@
pks="{{dpt.dispositivo_substituido_id|default:''}}" pks="{{dpt.dispositivo_substituido_id|default:''}}"
pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span> pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{% if dpt.ta_publicado_id and not dpt.tipo_dispositivo.dispositivo_de_articulacao %} {% if dpt.ta_publicado_id and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{%url 'compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}"> <a class="nota-alteracao" href="{%url 'compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt ta_pub_list %} {% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}

4
sapl/templates/compilacao/text_edit_bloco.html

@ -99,7 +99,7 @@
{% endif %} {% endif %}
<<<<<<< d5a8cdb5d563a8353942e0dc3c3b2484bd636ea6:templates/compilacao/text_edit_bloco.html <<<<<<< d5a8cdb5d563a8353942e0dc3c3b2484bd636ea6:templates/compilacao/text_edit_bloco.html
{% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %} {% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{% url 'compilacao:ta_text_edit' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}"> <a class="nota-alteracao" href="{% url 'compilacao:ta_text_edit' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt ta_pub_list %} {% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
@ -113,7 +113,7 @@
<div class="de" id="id{{dpt.id}}" pk="{{dpt.pk}}" ordem="{{dpt.ordem}}" name="{{dpt.pk}}" title="{{dpt.pk}} - {{dpt.ordem}}">{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}{{ dpt.rotulo }}{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{% if dpt.texto == '' and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}<span class="semtexto">({{dpt.tipo_dispositivo}} sem texto)</span>{%else%}{{ dpt.texto|safe }}{%endif%}</div> <div class="de" id="id{{dpt.id}}" pk="{{dpt.pk}}" ordem="{{dpt.ordem}}" name="{{dpt.pk}}" title="{{dpt.pk}} - {{dpt.ordem}}">{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}{{ dpt.rotulo }}{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{% if dpt.texto == '' and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}<span class="semtexto">({{dpt.tipo_dispositivo}} sem texto)</span>{%else%}{{ dpt.texto|safe }}{%endif%}</div>
{% endif %} {% endif %}
{% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %} {% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<a class="link_alterador" href="{% url 'sapl.compilacao:ta_text_edit' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}"> <a class="nota-alteracao" href="{% url 'sapl.compilacao:ta_text_edit' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt ta_pub_list %} {% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}

2
sapl/templates/compilacao/text_notificacoes.html

@ -32,7 +32,7 @@
pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span> pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto %}{{ dpt.texto|safe }}{%else%}{%if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}&nbsp;{% endif %}{% endif %}</span>
{%if dpt.ta_publicado_id %} {%if dpt.ta_publicado_id %}
<a class="link_alterador clearfix" href="{%url 'compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}"> <a class="nota-alteracao clearfix" href="{%url 'compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }} {{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% nota_automatica dpt None %} {% nota_automatica dpt None %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}</a> {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}</a>

Loading…
Cancel
Save