Browse Source

Merge pull request #304 from interlegis/compilacao

Refatora Vide para trabalhar com DispositivoSearch
pull/305/head
Leandro Roberto da Silva 9 years ago
committed by LeandroRoberto
parent
commit
95ea3acf19
  1. 113
      compilacao/forms.py
  2. 7
      compilacao/views.py
  3. 1
      materia/test_materia_urls.py
  4. 2
      static/js/compilacao.js
  5. 8
      static/js/compilacao_notas.js
  6. 10
      static/js/compilacao_view.js
  7. 54
      templates/compilacao/layout/dispositivo_checkbox_old.html

113
compilacao/forms.py

@ -264,87 +264,28 @@ class NotaForm(ModelForm):
super(NotaForm, self).__init__(*args, **kwargs) super(NotaForm, self).__init__(*args, **kwargs)
class DispositivoSearchFragmentForm(ModelForm): class VideForm(ModelForm):
tipo_ta = forms.ModelChoiceField(
label=_('Tipo do Texto Articulado'),
queryset=TipoTextoArticulado.objects.all(),
required=False)
tipo_model = forms.ChoiceField(
choices=[],
label=_('Tipos de...'), required=False)
num_ta = forms.IntegerField(
label=_('Número'), required=False)
ano_ta = forms.IntegerField(
label=_('Ano'), required=False)
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(Fieldset(
_('Busca por um Dispositivo'),
Row(
to_column(('num_ta', 6)),
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))))
kwargs.pop('fields_search')
if 'choice_model_type_foreignkey_in_extenal_views' in kwargs:
ch = kwargs.pop('choice_model_type_foreignkey_in_extenal_views')
if 'data' in kwargs:
choice = ch(kwargs['data']['tipo_ta'])
self.base_fields['tipo_model'].choices = choice
elif 'instance' in kwargs and\
isinstance(kwargs['instance'], Dispositivo):
choice = ch(kwargs['instance'].ta.tipo_ta_id)
self.base_fields['tipo_model'].choices = choice
super(DispositivoSearchFragmentForm, self).__init__(*args, **kwargs)
class VideForm(DispositivoSearchFragmentForm):
dispositivo_base = forms.ModelChoiceField( dispositivo_base = forms.ModelChoiceField(
queryset=Dispositivo.objects.all(), queryset=Dispositivo.objects.all(),
widget=forms.HiddenInput()) widget=forms.HiddenInput())
dispositivo_ref = forms.ModelChoiceField( dispositivo_ref = forms.ModelChoiceField(
queryset=Dispositivo.objects.all(), label=Vide._meta.get_field(
widget=forms.HiddenInput()) 'dispositivo_ref').verbose_name,
queryset=Dispositivo.objects.all())
tipo = forms.ModelChoiceField( tipo = forms.ModelChoiceField(
label=TipoVide._meta.verbose_name, label=TipoVide._meta.verbose_name,
queryset=TipoVide.objects.all(), queryset=TipoVide.objects.all(),
required=True, required=True,
error_messages=error_messages) error_messages=error_messages)
texto = forms.CharField(
required=False,
label=Vide._meta.get_field(
'texto').verbose_name,
widget=forms.Textarea())
pk = forms.IntegerField(widget=forms.HiddenInput(), pk = forms.IntegerField(widget=forms.HiddenInput(), required=False)
required=False)
class Meta: class Meta:
model = Vide model = Vide
@ -371,26 +312,34 @@ class VideForm(DispositivoSearchFragmentForm):
css_class='btn-primary pull-right') css_class='btn-primary pull-right')
) )
fields_form = Div( dispositivo_ref = Field(
'dispositivo_ref',
data_sapl_ta='DispositivoSearch',
data_field='dispositivo_ref',
data_type_selection='radio',
template="compilacao/layout/dispositivo_radio.html")
fields_form = []
fields_form.append(Div(
Row(to_column((Field( Row(to_column((Field(
'tipo', 'tipo',
placeholder=_('Selecione um Tipo de Vide')), 12))), placeholder=_('Selecione um Tipo de Vide')), 12))),
Row(to_column((dispositivo_ref, 12))),
Row(to_column((buttons, 12)))))
fields_form.append(Div(
Row(to_column((Field( Row(to_column((Field(
'texto', 'texto',
placeholder=_('Texto Adicional ao Vide')), 12))), placeholder=_('Texto Adicional ao Vide')), 12)))))
Row(to_column((buttons, 12))))
kwargs['fields_search'] = fields_search = Div()
self.helper = FormHelper() self.helper = FormHelper()
self.helper.layout = Layout( self.helper.layout = Layout(
Div( Div(
Div(HTML(_('Vides')), css_class='panel-heading'), Div(HTML(_('Vides')), css_class='panel-heading'),
Div( Div(
to_column(( to_column((fields_form[0], 6)),
fields_form, 4)), to_column((fields_form[1], 6)),
to_column(( css_class="panel-body"
fields_search, 8)), css_class="panel-body"
), ),
css_class="panel panel-primary" css_class="panel panel-primary"
) )
@ -398,6 +347,12 @@ class VideForm(DispositivoSearchFragmentForm):
super(VideForm, self).__init__(*args, **kwargs) super(VideForm, self).__init__(*args, **kwargs)
self.fields['dispositivo_ref'].choices = []
if self.instance and self.instance.dispositivo_ref_id:
self.fields['dispositivo_ref'].choices = [
(self.instance.dispositivo_ref.pk,
self.instance.dispositivo_ref)]
class PublicacaoForm(ModelForm): class PublicacaoForm(ModelForm):

7
compilacao/views.py

@ -400,8 +400,7 @@ class VideMixin(DispositivoSuccessUrlMixin):
def get_initial(self): def get_initial(self):
dispositivo_base = get_object_or_404( dispositivo_base = get_object_or_404(
Dispositivo, pk=self.kwargs.get('dispositivo_id')) Dispositivo, pk=self.kwargs.get('dispositivo_id'))
initial = {'dispositivo_base': dispositivo_base, }
initial = {'dispositivo_base': dispositivo_base}
if 'pk' in self.kwargs: if 'pk' in self.kwargs:
initial['pk'] = self.kwargs.get('pk') initial['pk'] = self.kwargs.get('pk')
@ -440,7 +439,7 @@ class VideCreateView(VideMixin, CreateView):
self.object = None self.object = None
form = self.get_form() form = self.get_form()
return self.render_to_response(self.get_context_data(form=form)) return self.render_to_response(self.get_context_data(form=form))
"""
def get_form_kwargs(self): def get_form_kwargs(self):
kwargs = super(VideCreateView, self).get_form_kwargs() kwargs = super(VideCreateView, self).get_form_kwargs()
@ -451,7 +450,7 @@ class VideCreateView(VideMixin, CreateView):
choice_model_type_foreignkey_in_extenal_views choice_model_type_foreignkey_in_extenal_views
}) })
return kwargs return kwargs"""
class VideEditView(VideMixin, UpdateView): class VideEditView(VideMixin, UpdateView):

1
materia/test_materia_urls.py

@ -1,6 +1,5 @@
import pytest import pytest
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
import pytest
@pytest.mark.parametrize("test_input,kwargs,expected", [ @pytest.mark.parametrize("test_input,kwargs,expected", [

2
static/js/compilacao.js

@ -57,7 +57,7 @@ function DispostivoSearch(opts) {
var dpts = field.find('input'); var dpts = field.find('input');
dpts.off() dpts.off()
dpts.attr('type', 'hidden'); dpts.attr('type', 'hidden');
$('<a class="text-danger" href="#">') $('<a class="text-danger">')
.insertBefore(dpts) .insertBefore(dpts)
.append($('<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>')) .append($('<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>'))
.on('click', function() { .on('click', function() {

8
static/js/compilacao_notas.js

@ -23,9 +23,11 @@ function onEventsDneExec(pk, model) {
}); });
} }
else if (model == 'vide') { else if (model == 'vide') {
configFormSearchTA('#dne'+pk, 'radio', 'select_for_vide');
onChangeParamTA(); DispostivoSearch({
'url_form': '/ta/search_form',
'text_button': 'Definir Dispositivo'
});
} }
} }
@ -38,7 +40,7 @@ var onSubmitEditNVForm = function(event) {
var id_dispositivo = $('#id_dispositivo').val(); var id_dispositivo = $('#id_dispositivo').val();
if (id_dispositivo == null) { // trata-se de um vide if (id_dispositivo == null) { // trata-se de um vide
$('#id_dispositivo_ref').remove(); //$('#id_dispositivo_ref').remove();
id_dispositivo = $('#id_dispositivo_base').val(); id_dispositivo = $('#id_dispositivo_base').val();
model='vide'; model='vide';
} }

10
static/js/compilacao_view.js

@ -136,9 +136,13 @@ $(document).ready(function() {
setTimeout(function() { setTimeout(function() {
var href = location.href.split('#') var href = location.href.split('#')
if (href.length == 2) { if (href.length == 2) {
$('html, body').animate({ try {
scrollTop: $('#dptt' + href[1] ).offset().top - window.innerHeight / 9 $('html, body').animate({
}, 0); scrollTop: $('#dptt' + href[1] ).offset().top - window.innerHeight / 9
}, 0);
}
catch(err) {
}
} }
}, 100); }, 100);

54
templates/compilacao/layout/dispositivo_checkbox_old.html

@ -1,54 +0,0 @@
{% load crispy_forms_filters %}
{% load i18n compilacao_filters common_tags%}
<div class="controls lista-dispositvo"{% if flat_attrs %} {{ flat_attrs|safe }}{% endif %}>
{% include 'bootstrap/layout/field_errors_block.html' %}
{% for choice, dpt in field.field.choices %}
{% ifchanged dpt.ta%}
{% if not forloop.first %}</ul>{% endif %}
<ul id="ta{{dpt.ta.pk}}">
<li class="ta_title">{{dpt.ta}}</li>
{% endifchanged %}
{% if dpt.is_relative_auto_insert %}
<li>
<div class="iteminput">
<input type="{{field.field.widget.attrs|lookup:"data-type-selection"}}" name="{{ field.html_name }}" id="dpt{{dpt.pk}}" value="{{dpt.pk}}" {% if choice in field.value or choice|stringformat:"s" in field.value or choice|stringformat:"s" == field.value|stringformat:"s" %} checked="checked"{% endif %} />
</div>
<div class="itemlabel">
<label for="r{{dpt.dispositivo_pai.pk}}">{{dpt.dispositivo_pai.rotulo|safe}} - {{dpt.texto|safe}}</label>
<a target="_blank" href="{% url 'compilacao:ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca" title="{% trans 'Abrir Texto deste Dispositivo'%}">{% nomenclatura_heranca dpt 1 1 %}</a>
</div>
</li>
{% elif not dpt.tipo_dispositivo.dispositivo_de_articulacao and not dpt.is_relative_auto_insert %}
<li>
<div class="iteminput">
<input type="{{field.field.widget.attrs|lookup:"data-type-selection"}}" name="{{ field.html_name }}" id="dpt{{dpt.pk}}" value="{{dpt.pk}}" {% if choice in field.value or choice|stringformat:"s" in field.value or choice|stringformat:"s" == field.value|stringformat:"s" %} checked="checked"{% endif %} />
</div>
<div class="itemlabel">
<label for="r{{dpt.pk}}">{{dpt.rotulo|safe}} - {{dpt.texto|safe}}</label>
<a target="_blank" href="{% url 'compilacao:ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca" title="{% trans 'Abrir Texto deste Dispositivo'%}">{% nomenclatura_heranca dpt 1 1 %}</a>
</div>
</li>
{% elif dpt.tipo_dispositivo.dispositivo_de_articulacao%}
<li>
<div class="iteminput">
<input type="{{field.field.widget.attrs|lookup:"data-type-selection"}}" name="{{ field.html_name }}" id="dpt{{dpt.pk}}" value="{{dpt.pk}}" {%if choice in field.value or choice|stringformat:"s" in field.value or choice|stringformat:"s" == field.value|stringformat:"s" %} checked="checked"{% endif %} />
</div>
<div class="itemlabel">
<label for="r{{dpt.pk}}">{{dpt.rotulo|safe}} - {% if dpt.tipo_dispositivo.dispositivo_de_articulacao %}{{dpt.dispositivos_filhos_set.all.first.texto|safe}}{% else %}{{dpt.texto|safe}}{% endif %}</label>
<a target="_blank" href="{% url 'compilacao:ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca" title="{% trans 'Abrir Texto deste Dispositivo'%}">{% nomenclatura_heranca dpt 1 1 %}</a>
</div>
</li>
{% endif%}
{% if forloop.last %}</ul>{% endif %}
{% endfor %}
{% include 'bootstrap/layout/help_text.html' %}
</div>
Loading…
Cancel
Save