Browse Source

Conclui registro de inclusões

pull/704/head
LeandroRoberto 8 years ago
parent
commit
f81ca5c103
  1. 38
      sapl/compilacao/forms.py
  2. 114
      sapl/compilacao/views.py
  3. 4
      sapl/static/js/compilacao.js
  4. 18
      sapl/static/js/compilacao_edit.js
  5. 5
      sapl/static/styles/compilacao.scss
  6. 1
      sapl/templates/base.html
  7. 18
      sapl/templates/compilacao/ajax_actions_registro_inclusao.html
  8. 2
      sapl/templates/compilacao/layout/dispositivo_checkbox.html
  9. 2
      sapl/templates/compilacao/layout/dispositivo_radio.html

38
sapl/compilacao/forms.py

@ -1357,15 +1357,15 @@ class DispositivoRegistroInclusaoForm(Form):
'Seleção do Dispositivo Base para inclusão ' 'Seleção do Dispositivo Base para inclusão '
'de novo dispositivo.'), 'de novo dispositivo.'),
row_dispositivo, row_dispositivo,
css_class="col-md-6")) css_class="col-md-12"))
layout.append(Field('dispositivo_search_form')) layout.append(Field('dispositivo_search_form'))
layout.append(Div(css_class="allowed_inserts col-md-6")) layout.append(Div(css_class="allowed_inserts col-md-12"))
more = [ more = [
HTML('<a class="btn btn-inverse btn-fechar">%s</a>' % HTML('<a class="btn btn-inverse btn-fechar">%s</a>' %
_('Cancelar')), _('Cancelar')),
] ]
more.append(Submit('salvar', _('Salvar'), css_class='pull-right')) #more.append(Submit('salvar', _('Salvar'), css_class='pull-right'))
buttons = FormActions(*more, css_class='form-group') buttons = FormActions(*more, css_class='form-group')
@ -1378,35 +1378,3 @@ class DispositivoRegistroInclusaoForm(Form):
super(DispositivoRegistroInclusaoForm, self).__init__(*args, **kwargs) super(DispositivoRegistroInclusaoForm, self).__init__(*args, **kwargs)
self.fields['dispositivo_base_para_inclusao'].choices = [] self.fields['dispositivo_base_para_inclusao'].choices = []
class AllowedInsertsFragmentForm(forms.Form):
json_add_next = forms.ChoiceField(
label=_('Inserir Depois'), choices=[],
required=False)
json_add_in = forms.ChoiceField(
label=_('Inserir Dentro'), choices=[],
required=False)
def __init__(self, *args, **kwargs):
kwargs.pop('instance')
allowed_inserts = kwargs['initial'].pop('allowed_inserts')
super(AllowedInsertsFragmentForm, self).__init__(
*args, **kwargs)
self.fields['json_add_next'].widget = forms.RadioSelect()
self.fields['json_add_in'].widget = forms.RadioSelect()
for opcoes in allowed_inserts:
self.fields[opcoes['action']].choices = [
('%s,%s' % (item['tipo_pk'],
item['variacao']),
item['provavel'])
for item in opcoes['itens']]
self.helper = FormHelper()
self.helper.form_tag = False
self.helper.disable_csrf = True

114
sapl/compilacao/views.py

@ -1,6 +1,6 @@
import sys
from collections import OrderedDict from collections import OrderedDict
from datetime import datetime, timedelta from datetime import datetime, timedelta
import sys
from braces.views import FormMessagesMixin from braces.views import FormMessagesMixin
from django import forms from django import forms
@ -23,8 +23,7 @@ from django.views.generic.edit import (CreateView, DeleteView, FormView,
UpdateView) UpdateView)
from django.views.generic.list import ListView from django.views.generic.list import ListView
from sapl.compilacao.forms import (AllowedInsertsFragmentForm, from sapl.compilacao.forms import (DispositivoDefinidorVigenciaForm,
DispositivoDefinidorVigenciaForm,
DispositivoEdicaoAlteracaoForm, DispositivoEdicaoAlteracaoForm,
DispositivoEdicaoBasicaForm, DispositivoEdicaoBasicaForm,
DispositivoEdicaoVigenciaForm, DispositivoEdicaoVigenciaForm,
@ -44,6 +43,7 @@ from sapl.compilacao.utils import (DISPOSITIVO_SELECT_RELATED,
DISPOSITIVO_SELECT_RELATED_EDIT) DISPOSITIVO_SELECT_RELATED_EDIT)
from sapl.crud.base import Crud, CrudListView, make_pagination from sapl.crud.base import Crud, CrudListView, make_pagination
TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota') TipoNotaCrud = Crud.build(TipoNota, 'tipo_nota')
TipoVideCrud = Crud.build(TipoVide, 'tipo_vide') TipoVideCrud = Crud.build(TipoVide, 'tipo_vide')
TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao') TipoPublicacaoCrud = Crud.build(TipoPublicacao, 'tipo_publicacao')
@ -1743,7 +1743,9 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
def json_add_in(self, context): def json_add_in(self, context):
return self.json_add_next(context, local_add='json_add_in') return self.json_add_next(context, local_add='json_add_in')
def json_add_next(self, context, local_add='json_add_next'): def json_add_next(
self,
context, local_add='json_add_next', create_auto_inserts=True):
try: try:
dp_auto_insert = None dp_auto_insert = None
@ -1837,23 +1839,24 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
dp.publicacao = pub_last dp.publicacao = pub_last
dp.save() dp.save()
tipos_dp_auto_insert = tipo.filhos_permitidos.filter(
filho_de_insercao_automatica=True,
perfil_id=context['perfil_pk'])
count_auto_insert = 0 count_auto_insert = 0
for tipoauto in tipos_dp_auto_insert: if create_auto_inserts:
qtdp = tipoauto.quantidade_permitida tipos_dp_auto_insert = tipo.filhos_permitidos.filter(
if qtdp >= 0: filho_de_insercao_automatica=True,
qtdp -= Dispositivo.objects.filter( perfil_id=context['perfil_pk'])
ta_id=dp.ta_id,
dispositivo_pai_id=dp.id, for tipoauto in tipos_dp_auto_insert:
tipo_dispositivo_id=tipoauto.filho_permitido.pk qtdp = tipoauto.quantidade_permitida
).count() if qtdp >= 0:
if qtdp > 0: qtdp -= Dispositivo.objects.filter(
ta_id=dp.ta_id,
dispositivo_pai_id=dp.id,
tipo_dispositivo_id=tipoauto.filho_permitido.pk
).count()
if qtdp > 0:
count_auto_insert += 1
else:
count_auto_insert += 1 count_auto_insert += 1
else:
count_auto_insert += 1
# Inserção automática # Inserção automática
if count_auto_insert: if count_auto_insert:
@ -2006,6 +2009,7 @@ class ActionDispositivoCreateMixin(ActionsCommonsMixin):
except Exception as e: except Exception as e:
print(e) print(e)
return {}
class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin, class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
@ -2022,6 +2026,9 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
if 'variacao' in self.request.GET: if 'variacao' in self.request.GET:
context['variacao'] = self.request.GET['variacao'] context['variacao'] = self.request.GET['variacao']
if 'pk_bloco' in self.request.GET:
context['pk_bloco'] = self.request.GET['pk_bloco']
if 'perfil_estrutural' in self.request.session: if 'perfil_estrutural' in self.request.session:
context['perfil_pk'] = self.request.session['perfil_estrutural'] context['perfil_pk'] = self.request.session['perfil_estrutural']
@ -2069,13 +2076,42 @@ class ActionsEditMixin(ActionDragAndMoveDispositivoAlteradoMixin,
return perfis[0].pk return perfis[0].pk
return None return None
def registra_inclusao(self, bloco_alteracao, dispositivo_base_inclusao): def json_add_next_registra_inclusao(
data = {} self, context, local_add='json_add_next'):
data.update({'pk': bloco_alteracao.pk,
'pai': [bloco_alteracao.pk, ]}) data = self.json_add_next(context,
local_add=local_add,
create_auto_inserts=True)
if data:
bloco_alteracao = Dispositivo.objects.get(pk=context['pk_bloco'])
ndp = Dispositivo.objects.get(pk=data['pk'])
ndp.dispositivo_atualizador = bloco_alteracao
ndp.ta_publicado = bloco_alteracao.ta
ndp.publicacao = bloco_alteracao.publicacao
ndp.dispositivo_vigencia = bloco_alteracao.dispositivo_vigencia
if ndp.dispositivo_vigencia:
ndp.inicio_eficacia = ndp.dispositivo_vigencia.inicio_eficacia
ndp.inicio_vigencia = ndp.dispositivo_vigencia.inicio_vigencia
else:
ndp.inicio_eficacia = bloco_alteracao.inicio_eficacia
ndp.inicio_vigencia = bloco_alteracao.inicio_vigencia
ndp.save()
bloco_alteracao.ordenar_bloco_alteracao()
data.update({'pk': ndp.pk,
'pai': [bloco_alteracao.pk, ]})
return data return data
def json_add_in_registra_inclusao(self, context):
return self.json_add_next_registra_inclusao(
context, local_add='json_add_in')
def registra_revogacao(self, bloco_alteracao, dispositivo_a_revogar): def registra_revogacao(self, bloco_alteracao, dispositivo_a_revogar):
return self.registra_alteracao( return self.registra_alteracao(
bloco_alteracao, bloco_alteracao,
@ -2261,14 +2297,13 @@ class DispositivoDinamicEditView(
self.form_class = DispositivoRegistroRevogacaoForm self.form_class = DispositivoRegistroRevogacaoForm
elif self.action.endswith('_inclusao'): elif self.action.endswith('_inclusao'):
self.form_class = DispositivoRegistroInclusaoForm self.form_class = DispositivoRegistroInclusaoForm
elif self.action.endswith('_radio_allowed_inserts'):
self.form_class = AllowedInsertsFragmentForm
context = self.get_context_data() context = self.get_context_data()
return self.render_to_response(context) return self.render_to_response(context)
elif self.action.startswith('get_actions'): elif self.action.startswith('get_actions'):
self.form_class = None self.form_class = None
self.template_name = 'compilacao/ajax_actions_dinamic_edit.html'
self.object = Dispositivo.objects.get( self.object = Dispositivo.objects.get(
pk=self.kwargs['dispositivo_id']) pk=self.kwargs['dispositivo_id'])
@ -2277,17 +2312,26 @@ class DispositivoDinamicEditView(
context = {} context = {}
context['object'] = self.object context['object'] = self.object
if ta_id == str(self.object.ta_id): if self.action.endswith('_allowed_inserts_registro_inclusao'):
self.template_name = ('compilacao/'
'ajax_actions_registro_inclusao.html')
context['allowed_inserts'] = self.allowed_inserts() context['allowed_inserts'] = self.allowed_inserts()
if 'perfil_pk' in request.GET: else:
self.set_perfil_in_session( self.template_name = ('compilacao/'
request, request.GET['perfil_pk']) 'ajax_actions_dinamic_edit.html')
elif 'perfil_estrutural' not in request.session:
self.set_perfil_in_session(request=request) if ta_id == str(self.object.ta_id):
context['allowed_inserts'] = self.allowed_inserts()
if 'perfil_pk' in request.GET:
self.set_perfil_in_session(
request, request.GET['perfil_pk'])
elif 'perfil_estrutural' not in request.session:
self.set_perfil_in_session(request=request)
context['perfil_estrutural_list' context['perfil_estrutural_list'
] = PerfilEstruturalTextoArticulado.objects.all() ] = PerfilEstruturalTextoArticulado.objects.all()
return self.render_to_response(context) return self.render_to_response(context)
@ -2310,7 +2354,7 @@ class DispositivoDinamicEditView(
data = self.registra_alteracao(d, dispositivo_a_alterar) data = self.registra_alteracao(d, dispositivo_a_alterar)
if formtype == 'get_form_revogacao': elif formtype == 'get_form_revogacao':
dispositivo_a_revogar = Dispositivo.objects.get( dispositivo_a_revogar = Dispositivo.objects.get(
pk=request.POST['dispositivo_revogado']) pk=request.POST['dispositivo_revogado'])

4
sapl/static/js/compilacao.js

@ -148,7 +148,7 @@ function DispostivoSearch(opts) {
var btn_open_search = $('<button>') var btn_open_search = $('<button>')
.text(opts['text_button']) .text(opts['text_button'])
.attr('type','button') .attr('type','button')
.attr('class','btn btn-sm btn-modal-open'); .attr('class','btn btn-sm btn-success btn-modal-open');
button_ds.append(btn_open_search); button_ds.append(btn_open_search);
btn_open_search.on('click', function() { btn_open_search.on('click', function() {
$.get(opts['url_form'], function(data) { $.get(opts['url_form'], function(data) {
@ -222,7 +222,7 @@ function DispostivoSearch(opts) {
modal_ds.modal('hide'); modal_ds.modal('hide');
if ('post_selected' in opts) if ('post_selected' in opts)
opts['post_selected']() opts['post_selected'](opts['params_post_selected'])
}); });

18
sapl/static/js/compilacao_edit.js

@ -33,6 +33,7 @@ function DispositivoEdit() {
'tipo_pk' : this.getAttribute('tipo_pk'), 'tipo_pk' : this.getAttribute('tipo_pk'),
'perfil_pk' : this.getAttribute('perfil_pk'), 'perfil_pk' : this.getAttribute('perfil_pk'),
'variacao' : this.getAttribute('variacao'), 'variacao' : this.getAttribute('variacao'),
'pk_bloco' : this.getAttribute('pk_bloco'),
}; };
var url = pk+'/refresh'; var url = pk+'/refresh';
@ -148,7 +149,9 @@ function DispositivoEdit() {
DispostivoSearch({ DispostivoSearch({
'url_form': url_search, 'url_form': url_search,
'text_button': 'Selecionar', 'text_button': 'Selecionar',
'post_selected': instance.update_radio_allowed_inserts 'post_selected': instance.allowed_inserts_registro_inclusao,
'params_post_selected': {'pk_bloco': _this.attr('pk')}
}); });
instance.scrollTo(_this); instance.scrollTo(_this);
@ -183,15 +186,16 @@ function DispositivoEdit() {
}); });
} }
instance.update_radio_allowed_inserts = function(event) { instance.allowed_inserts_registro_inclusao = function(params) {
dispositivo_base_para_inclusao = $("input[name='dispositivo_base_para_inclusao']") var dispositivo_base_para_inclusao = $("#id"+params.pk_bloco+" input[name='dispositivo_base_para_inclusao']")
if (dispositivo_base_para_inclusao.length == 0) if (dispositivo_base_para_inclusao.length == 0)
return return;
var pk = dispositivo_base_para_inclusao[0].value;
var pk = dispositivo_base_para_inclusao[0].value;
var form_data = { var form_data = {
'action' : 'get_form_radio_allowed_inserts' 'action' : 'get_actions_allowed_inserts_registro_inclusao',
'pk_bloco' : params.pk_bloco
}; };
var url = pk+'/refresh'; var url = pk+'/refresh';
@ -199,8 +203,8 @@ function DispositivoEdit() {
$.get(url, form_data).done(function(data) { $.get(url, form_data).done(function(data) {
$(".allowed_inserts").html(data); $(".allowed_inserts").html(data);
$(".allowed_inserts").find('.btn-action').on('click', instance.bindActionsClick);
}).fail(instance.waitHide).always(instance.waitHide); }).fail(instance.waitHide).always(instance.waitHide);
} }
instance.loadActionsEdit = function(dpt) { instance.loadActionsEdit = function(dpt) {

5
sapl/static/styles/compilacao.scss

@ -1281,7 +1281,7 @@ a:link:after, a:visited:after {
} }
} }
.result-busca-dispositivo, .lista-dispositvo { .result-busca-dispositivo, .lista-dispositivo {
padding: 0 0 1em; padding: 0 0 1em;
min-height: 3em; min-height: 3em;
@ -1342,6 +1342,9 @@ a:link:after, a:visited:after {
display: block; display: block;
margin: 0px; margin: 0px;
} }
.artigo {
float: none;
}
} }
} }
} }

1
sapl/templates/base.html

@ -286,6 +286,7 @@
<script type="text/javascript" src="{% static 'js/jquery.runner.js' %}"></script> <script type="text/javascript" src="{% static 'js/jquery.runner.js' %}"></script>
<script type="text/javascript" src="{% static 'jquery-mask-plugin/dist/jquery.mask.js' %}"></script> <script type="text/javascript" src="{% static 'jquery-mask-plugin/dist/jquery.mask.js' %}"></script>
<script src="{% static 'tinymce/tinymce.min.js' %}"></script> <script src="{% static 'tinymce/tinymce.min.js' %}"></script>
<script type="text/javascript" src="{% static 'jsdiff/diff.min.js' %}"></script> <script type="text/javascript" src="{% static 'jsdiff/diff.min.js' %}"></script>

18
sapl/templates/compilacao/ajax_actions_registro_inclusao.html

@ -0,0 +1,18 @@
{% load i18n %}
{% if object.dispositivo_subsequente == None %}
<div class="row">
{% for inserts in allowed_inserts %}
{% if inserts.itens %}
<div class="col-md-6">
<div class="list-group">
<a class="list-group-item active">{{inserts.icone|safe}}<span>{{inserts.tipo_insert}}</span></a>
{% for item in inserts.itens %}
<a class="btn-action list-group-item" action="{{inserts.action}}_registra_inclusao" pk="{{item.dispositivo_base}}" variacao="{{item.variacao}}" tipo_pk="{{item.tipo_pk}}" pk_bloco="{{request.GET.pk_bloco}}" >{{item.provavel|safe}}</a>
{% endfor %}
</div>
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}

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

@ -1,7 +1,7 @@
{% load crispy_forms_filters %} {% load crispy_forms_filters %}
{% load i18n compilacao_filters common_tags%} {% load i18n compilacao_filters common_tags%}
<div class="controls cp lista-dispositvo"{% if flat_attrs %} {{ flat_attrs|safe }}{% endif %}> <div class="controls cp lista-dispositivo"{% if flat_attrs %} {{ flat_attrs|safe }}{% endif %}>
{% include 'bootstrap/layout/field_errors_block.html' %} {% include 'bootstrap/layout/field_errors_block.html' %}
{% for choice in field.field.choices %} {% for choice in field.field.choices %}

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

@ -2,7 +2,7 @@
{% load i18n compilacao_filters common_tags%} {% load i18n compilacao_filters common_tags%}
<div class="controls lista-dispositvo"{% if flat_attrs %} {{ flat_attrs|safe }}{% endif %}> <div class="controls lista-dispositivo"{% if flat_attrs %} {{ flat_attrs|safe }}{% endif %}>
{% include 'bootstrap/layout/field_errors_block.html' %} {% include 'bootstrap/layout/field_errors_block.html' %}
{% for choice, dpt in field.field.choices %} {% for choice, dpt in field.field.choices %}

Loading…
Cancel
Save