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. 73
      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 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):
data = self.cleaned_data
@ -1135,17 +1148,23 @@ class DispositivoEdicaoAlteracaoForm(ModelForm):
ndsq = data['dispositivo_subsequente']
nda = data['dispositivo_atualizador']
# Se o dispositivo substituído foi trocado na edição
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:
odst = od.dispositivo_substituido
odst.dispositivo_subsequente = None
odst.fim_vigencia = None
odst.fim_eficacia = None
odst.save()
# se foi selecionado um dispositivo para ser substituído
# self.instance é seu subsequente
if ndst:
# e se esse novo substituido possuia um outro sequente
if ndst.dispositivo_subsequente:
# o substituido desse subsequente não é mais ndst
ndst.dispositivo_subsequente.dispositivo_substituido = None
ndst.dispositivo_subsequente.save()

10
sapl/compilacao/models.py

@ -1149,6 +1149,16 @@ class Dispositivo(BaseModel, TimestampedMixin):
dp = dp.dispositivo_pai
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
def new_instance_based_on(dispositivo_base, tipo_base):
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)
d_pk = str(d.pk)
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 = {}
ta_dpts_parents[ta_id] = dpts_parents
update_dispositivos_parents(dpts_parents, ta_id)

73
sapl/compilacao/views.py

@ -2077,6 +2077,26 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
perfil_pk = self.request.session['perfil_estrutural']
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(
dispositivo_a_alterar, dispositivo_a_alterar.tipo_dispositivo)
@ -2093,35 +2113,37 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
ndp.inicio_vigencia = bloco_alteracao.inicio_vigencia
try:
with transaction.atomic():
ordem = dispositivo_a_alterar.criar_espaco(
espaco_a_criar=1, local='json_add_in')
ordem = dispositivo_a_alterar.criar_espaco(
espaco_a_criar=1, local='json_add_in')
ndp.ordem = ordem
ndp.dispositivo_atualizador = bloco_alteracao
ndp.ta_publicado = bloco_alteracao.ta
ndp.ordem = ordem
ndp.dispositivo_atualizador = bloco_alteracao
ndp.ta_publicado = bloco_alteracao.ta
p = dispositivo_a_alterar
n = dispositivo_a_alterar.dispositivo_subsequente
p = dispositivo_a_alterar
n = dispositivo_a_alterar.dispositivo_subsequente
ndp.dispositivo_substituido = p
ndp.dispositivo_subsequente = n
ndp.dispositivo_substituido = p
ndp.dispositivo_subsequente = n
if n:
ndp.fim_eficacia = n.inicio_eficacia - \
timedelta(days=1)
ndp.fim_vigencia = n.inicio_vigencia - \
timedelta(days=1)
ndp.save()
p.dispositivo_subsequente = ndp
p.fim_eficacia = ndp.inicio_eficacia - timedelta(days=1)
p.fim_vigencia = ndp.inicio_vigencia - timedelta(days=1)
p.save()
if n:
ndp.fim_eficacia = n.inicio_eficacia - \
timedelta(days=1)
ndp.fim_vigencia = n.inicio_vigencia - \
timedelta(days=1)
ndp.save()
if n:
n.dispositivo_substituido = ndp
n.save()
p.dispositivo_subsequente = ndp
p.fim_eficacia = ndp.inicio_eficacia - timedelta(days=1)
p.fim_vigencia = ndp.inicio_vigencia - timedelta(days=1)
p.save()
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.save()
filhos_diretos = dispositivo_a_alterar.dispositivos_filhos_set
for d in filhos_diretos.all():
@ -3020,7 +3042,8 @@ class TextNotificacoesView(CompMixin, ListView, FormView):
_('Dispositivo está substituindo um Dispositivo que não '
'possui este como seu Dispositivo Subsequente.'))
padd(r, type_notificacao,
padd(r,
type_notificacao,
'sapl.compilacao:dispositivo_edit_alteracao',
r.dispositivo_subsequente and
r.dispositivo_subsequente.dispositivo_substituido != r,

6
sapl/static/styles/compilacao.scss

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

6
sapl/templates/compilacao/dispositivo_form_search_fragment.html

@ -40,7 +40,7 @@
{{ 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>
{% 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 }}
{% nota_automatica dpt.dispositivo_pai ta_pub_list %}
{{ dpt.dispositivo_pai.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
@ -72,7 +72,7 @@
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>
{% 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 }}
{% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
@ -108,7 +108,7 @@
{{ 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>
{% 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 }}
{% nota_automatica df ta_pub_list %}
{{ 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 }}
<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 %}
<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 }}
{% nota_automatica choice.1 ta_pub_list %}
{{ 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:''}}"
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 %}
<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 }}
{% nota_automatica dpt ta_pub_list %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}

4
sapl/templates/compilacao/text_edit_bloco.html

@ -99,7 +99,7 @@
{% endif %}
<<<<<<< d5a8cdb5d563a8353942e0dc3c3b2484bd636ea6:templates/compilacao/text_edit_bloco.html
{% 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 }}
{% nota_automatica dpt ta_pub_list %}
{{ 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>
{% endif %}
{% 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 }}
{% nota_automatica dpt ta_pub_list %}
{{ 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>
{%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 }}
{% nota_automatica dpt None %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}</a>

Loading…
Cancel
Save