Browse Source

Merge pull request #213 from interlegis/compilacao

Compilacao - ajustes para bootstrap
pull/216/head
Leandro Roberto da Silva 9 years ago
parent
commit
a7fc49a5a5
  1. 3
      base/templatetags/common_tags.py
  2. 180
      compilacao/forms.py
  3. 32
      compilacao/models.py
  4. 13
      compilacao/templatetags/compilacao_filters.py
  5. 19
      compilacao/urls.py
  6. 266
      compilacao/views.py
  7. 2
      materia/views.py
  8. 8
      norma/urls.py
  9. 1
      norma/views.py
  10. 3
      sapl/layout.py
  11. 2
      static/js/app.js
  12. 56
      static/js/compilacao.js
  13. 436
      static/js/compilacao_edit.js
  14. 327
      static/js/compilacao_notas.js
  15. 116
      static/js/compilacao_view.js
  16. 2254
      static/styles/compilacao.scss
  17. 21
      templates/base.html
  18. 1
      templates/compilacao/ajax_form.html
  19. 20
      templates/compilacao/confirm_delete.html
  20. 61
      templates/compilacao/dispositivo_search_fragment_form.html
  21. 159
      templates/compilacao/publicacao_detail.html
  22. 59
      templates/compilacao/publicacao_list.html
  23. 34
      templates/compilacao/text_edit.html
  24. 239
      templates/compilacao/text_edit_bloco.html
  25. 14
      templates/compilacao/text_edit_blocoalteracao.html
  26. 178
      templates/compilacao/text_list.html
  27. 305
      templates/compilacao/text_list_bloco.html
  28. 11
      templates/compilacao/text_list_blocoalteracao.html
  29. 123
      templates/compilacao/textoarticulado_detail.html
  30. 58
      templates/compilacao/textoarticulado_list.html
  31. 16
      templates/compilacao/textoarticulado_menu_config.html
  32. 91
      templates/compilacao/tipotextoarticulado_detail.html
  33. 62
      templates/compilacao/tipotextoarticulado_list.html
  34. 35
      templates/crud/confirm_delete.html
  35. 11
      templates/norma/normajuridica_detail.html

3
base/templatetags/common_tags.py

@ -29,8 +29,7 @@ def model_verbose_name_plural(class_name):
@register.filter @register.filter
def lookup(d, key): def lookup(d, key):
skey = str(key) return d[key] if key in d else []
return d[str(key)] if skey in d else []
@register.filter @register.filter

180
compilacao/forms.py

@ -1,26 +1,20 @@
from crispy_forms.bootstrap import FieldWithButtons, FormActions, StrictButton
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms_foundation.layout import (HTML, Column, Div, Fieldset, from crispy_forms.layout import (HTML, Button, Column, Div, Field, Fieldset,
Layout, Row) Layout, Row)
from crispy_forms_foundation.layout.buttons import Button
from crispy_forms_foundation.layout.fields import Field
from django import forms from django import forms
from django.core.exceptions import NON_FIELD_ERRORS from django.core.exceptions import NON_FIELD_ERRORS
from django.forms.models import ModelForm from django.forms.models import ModelForm
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from compilacao.models import (PARTICIPACAO_SOCIAL_CHOICES, Dispositivo, Nota, from compilacao.models import (NOTAS_PUBLICIDADE_CHOICES,
PARTICIPACAO_SOCIAL_CHOICES, Dispositivo, Nota,
Publicacao, TextoArticulado, TipoNota, Publicacao, TextoArticulado, TipoNota,
TipoPublicacao, TipoTextoArticulado, TipoVide, TipoPublicacao, TipoTextoArticulado, TipoVide,
VeiculoPublicacao, Vide) VeiculoPublicacao, Vide)
from sapl.layout import SaplFormLayout, to_column, to_row from sapl.layout import SaplFormLayout, to_column, to_row
from sapl.utils import YES_NO_CHOICES from sapl.utils import YES_NO_CHOICES
class UpLoadImportFileForm(forms.Form):
import_file = forms.FileField(
required=True,
label=_('Arquivo formato ODF para Importanção'))
error_messages = { error_messages = {
'required': _('Este campo é obrigatório'), 'required': _('Este campo é obrigatório'),
'invalid': _('URL inválida.') 'invalid': _('URL inválida.')
@ -145,41 +139,30 @@ class TaForm(ModelForm):
class NotaForm(ModelForm): class NotaForm(ModelForm):
NPRIV = 1
NINST = 2 titulo = forms.CharField(
NPUBL = 3 label=Nota._meta.get_field('titulo').verbose_name, required=False)
PUBLICIDADE_CHOICES = (
# Only the owner of the note has visibility.
(NPRIV, _('Nota Privada')),
# All authenticated users have visibility.
(NINST, _('Nota Institucional')),
# All users have visibility.
(NPUBL, _('Nota Pública')),
)
titulo = forms.CharField(label=' ', required=False)
texto = forms.CharField( texto = forms.CharField(
label='', label=Nota._meta.get_field('texto').verbose_name,
widget=forms.Textarea, widget=forms.Textarea,
error_messages=error_messages) error_messages=error_messages)
url_externa = forms.URLField( url_externa = forms.URLField(
label='', label=Nota._meta.get_field('url_externa').verbose_name,
required=False, required=False,
error_messages=error_messages) error_messages=error_messages)
publicidade = forms.ChoiceField( publicidade = forms.ChoiceField(
required=True, required=True,
label=_('Publicidade'), label=Nota._meta.get_field('publicidade').verbose_name,
choices=PUBLICIDADE_CHOICES, choices=NOTAS_PUBLICIDADE_CHOICES,
widget=forms.Select(attrs={'class': 'selector'})) widget=forms.Select(attrs={'class': 'selector'}))
tipo = forms.ModelChoiceField( tipo = forms.ModelChoiceField(
required=False, label=Nota._meta.get_field('tipo').verbose_name,
label=_('Tipo da Nota'),
queryset=TipoNota.objects.all(), queryset=TipoNota.objects.all(),
empty_label=None) empty_label=None)
publicacao = forms.DateField( publicacao = forms.DateField(
label=_('Publicação'), label=Nota._meta.get_field('publicacao').verbose_name,
input_formats=['%d/%m/%Y'], input_formats=['%d/%m/%Y'],
required=True, required=True,
widget=forms.DateInput( widget=forms.DateInput(
@ -187,7 +170,7 @@ class NotaForm(ModelForm):
error_messages=error_messages error_messages=error_messages
) )
efetividade = forms.DateField( efetividade = forms.DateField(
label=_('Efetividade'), label=Nota._meta.get_field('efetividade').verbose_name,
input_formats=['%d/%m/%Y'], input_formats=['%d/%m/%Y'],
required=True, required=True,
widget=forms.DateInput( widget=forms.DateInput(
@ -225,20 +208,39 @@ class NotaForm(ModelForm):
css_class='col-md-8')) css_class='col-md-8'))
row3 = to_row([ row3 = to_row([
('publicidade', 3), ('publicidade', 6),
('publicacao', 3), ('publicacao', 3),
('efetividade', 3), ('efetividade', 3),
(Button('submit', _('Salvar'),
css_class='btn btn-primary'), 3)
]) ])
buttons = FormActions(
HTML('<a class="btn btn-inverse btn-close-container">'
'%s</a>' % _('Cancelar')),
Button(
'submit-form',
'Salvar',
css_class='btn btn-primary pull-right')
)
self.helper = FormHelper() self.helper = FormHelper()
self.helper.layout = Layout( self.helper.layout = Layout(
Div(HTML(_('Notas')), css_class='title_form'),
row1, Div(
Field('texto', placeholder=_('Adicionar Nota')), Div(HTML(_('Notas')), css_class='panel-heading'),
Field('url_externa', placeholder=_('URL Externa (opcional)')), Div(
row3 row1,
to_row([(Field(
'texto',
placeholder=_('Adicionar Nota')), 12)]),
to_row([(Field(
'url_externa',
placeholder=_('URL Externa (opcional)')), 12)]),
row3,
to_row([(buttons, 12)]),
css_class="panel-body"
),
css_class="panel panel-primary"
)
) )
super(NotaForm, self).__init__(*args, **kwargs) super(NotaForm, self).__init__(*args, **kwargs)
@ -256,6 +258,11 @@ class VideForm(ModelForm):
label=_('Tipo do Texto Articulado'), label=_('Tipo do Texto Articulado'),
queryset=TipoTextoArticulado.objects.all(), queryset=TipoTextoArticulado.objects.all(),
required=False) required=False)
tipo_model = forms.ChoiceField(
choices=[],
label=_('Tipos de...'), required=False)
num_ta = forms.IntegerField( num_ta = forms.IntegerField(
label=_('Núm Texto Articulado'), required=False) label=_('Núm Texto Articulado'), required=False)
ano_ta = forms.IntegerField( ano_ta = forms.IntegerField(
@ -293,54 +300,63 @@ class VideForm(ModelForm):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.helper = FormHelper() buttons = FormActions(
self.helper.layout = Layout( HTML('<a class="btn btn-inverse btn-close-container">'
'%s</a>' % _('Cancelar')),
Button(
'submit-form',
'Salvar',
css_class='btn-primary pull-right')
)
Div(HTML(_('Vides')), css_class='title_form'), fields_form = Div(
Row(to_column((Field(
'tipo',
placeholder=_('Selecione um Tipo de Vide')), 12))),
Row(to_column((Field(
'texto',
placeholder=_('Texto Adicional ao Vide')), 12))),
Row(to_column((buttons, 12))))
fields_search = Div(
Row(
to_column(('tipo_ta', 6)),
to_column(('tipo_model', 6))),
Row( Row(
to_column(( to_column(('num_ta', 6)),
Div( to_column(('ano_ta', 6))),
Div(to_column((Field( Row(to_column((FieldWithButtons(
'tipo', Field(
placeholder=_('Selecione um Tipo de Vide')), 12))), 'busca_dispositivo',
Div(to_column(( placeholder=_('Digite palavras, letras, '
Field( 'números ou algo'
'texto', ' que estejam '
placeholder=_( 'no rótulo ou no texto.')),
'Texto Adicional ao Vide')), 12))), StrictButton("Buscar", css_class='btn-busca')), 12))),
Div(to_column(( Row(to_column(
Button( (Div(css_class='container-busca'), 12)))
'submit', )
'Salvar',
css_class='btn btn-primary'), 12))) self.helper = FormHelper()
), 4)), self.helper.layout = Layout(
to_column(( Div(
Div( Div(HTML(_('Vides')), css_class='panel-heading'),
Div(to_column(('tipo_ta', 6))), Div(
Div(to_column(('num_ta', 3)), to_column((
to_column(('ano_ta', 3))), fields_form, 4)),
Div(to_column( to_column((
(Field( fields_search, 8)), css_class="panel-body"
'busca_dispositivo', ),
placeholder=_('Digite palavras, letras, ' css_class="panel panel-primary"
'números ou algo'
' que estejam '
'no rótulo ou no texto.')), 10)),
to_column((
Button(
'buscar',
'Buscar',
css_class='btn btn-primary btn-busca'), 2))
),
to_column(
(Div(css_class='container-busca'), 12))
), 8)
)
) )
) )
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
super(VideForm, self).__init__(*args, **kwargs) super(VideForm, self).__init__(*args, **kwargs)

32
compilacao/models.py

@ -473,7 +473,7 @@ class Publicacao(TimestampedMixin):
verbose_name_plural = _('Publicações') verbose_name_plural = _('Publicações')
def __str__(self): def __str__(self):
return _('%s realizada em %s \n %s') % ( return _('%s realizada em %s \n <small>%s</small>') % (
self.tipo_publicacao, self.tipo_publicacao,
defaultfilters.date(self.data, "d \d\e F \d\e Y"), defaultfilters.date(self.data, "d \d\e F \d\e Y"),
self.ta) self.ta)
@ -624,9 +624,8 @@ class Dispositivo(BaseModel, TimestampedMixin):
) )
def __str__(self): def __str__(self):
return '%(rotulo)s - %(ta)s' % { return '%(rotulo)s' % {
'rotulo': (self.rotulo if self.rotulo else self.tipo_dispositivo), 'rotulo': (self.rotulo if self.rotulo else self.tipo_dispositivo)}
'ta': self.ta}
def rotulo_padrao(self, local_insert=0, for_insert_in=0): def rotulo_padrao(self, local_insert=0, for_insert_in=0):
""" """
@ -1145,20 +1144,25 @@ class Vide(TimestampedMixin):
return _('Vide %s') % self.texto return _('Vide %s') % self.texto
NPRIV = 1
NINST = 2
NPUBL = 3
NOTAS_PUBLICIDADE_CHOICES = (
# Only the owner of the note has visibility.
(NPRIV, _('Nota Privada')),
# All authenticated users have visibility.
(NINST, _('Nota Institucional')),
# All users have visibility.
(NPUBL, _('Nota Pública')),
)
class Nota(TimestampedMixin): class Nota(TimestampedMixin):
NPRIV = 1 NPRIV = 1
NINST = 2 NINST = 2
NPUBL = 3 NPUBL = 3
PUBLICIDADE_CHOICES = (
# Only the owner of the note has visibility.
(NPRIV, _('Nota Privada')),
# All authenticated users have visibility.
(NINST, _('Nota Institucional')),
# All users have visibility.
(NPUBL, _('Nota Pública')),
)
titulo = models.CharField( titulo = models.CharField(
verbose_name=_('Título'), verbose_name=_('Título'),
max_length=100, max_length=100,
@ -1181,7 +1185,7 @@ class Nota(TimestampedMixin):
owner = models.ForeignKey(User, verbose_name=_('Dono da Nota')) owner = models.ForeignKey(User, verbose_name=_('Dono da Nota'))
publicidade = models.PositiveSmallIntegerField( publicidade = models.PositiveSmallIntegerField(
choices=PUBLICIDADE_CHOICES, choices=NOTAS_PUBLICIDADE_CHOICES,
verbose_name=_('Nível de Publicidade')) verbose_name=_('Nível de Publicidade'))
class Meta: class Meta:

13
compilacao/templatetags/compilacao_filters.py

@ -36,15 +36,18 @@ def dispositivo_desativado(dispositivo, inicio_vigencia, fim_vigencia):
@register.simple_tag @register.simple_tag
def nota_automatica(dispositivo): def nota_automatica(dispositivo, ta_pub_list):
if dispositivo.ta_publicado is not None: if dispositivo.ta_publicado is not None:
d = dispositivo.dispositivo_atualizador.dispositivo_pai d = dispositivo.dispositivo_atualizador.dispositivo_pai
if dispositivo.texto == Dispositivo.TEXTO_PADRAO_DISPOSITIVO_REVOGADO: if dispositivo.texto == Dispositivo.TEXTO_PADRAO_DISPOSITIVO_REVOGADO:
return 'Revogado pelo %s.' % d return 'Revogado pelo %s - %s.' % (
elif not dispositivo.dispositivo_substituido: d, ta_pub_list[dispositivo.ta_publicado_id])
return 'Inclusão feita pelo %s.' % d elif not dispositivo.dispositivo_substituido_id:
return 'Inclusão feita pelo %s - %s.' % (
d, ta_pub_list[dispositivo.ta_publicado_id])
else: else:
return 'Alteração feita pelo %s.' % d return 'Alteração feita pelo %s - %s.' % (
d, ta_pub_list[dispositivo.ta_publicado_id])
return '' return ''

19
compilacao/urls.py

@ -16,6 +16,7 @@ urlpatterns_compilacao = [
url(r'^(?P<ta_id>[0-9]+)/text$', url(r'^(?P<ta_id>[0-9]+)/text$',
views.TextView.as_view(), name='ta_text'), views.TextView.as_view(), name='ta_text'),
url(r'^(?P<ta_id>[0-9]+)/text/vigencia/(?P<sign>.+)/$', url(r'^(?P<ta_id>[0-9]+)/text/vigencia/(?P<sign>.+)/$',
views.TextView.as_view(), name='ta_vigencia'), views.TextView.as_view(), name='ta_vigencia'),
@ -85,17 +86,19 @@ urlpatterns_compilacao = [
url(r'^config/tipo-textoarticulado/(?P<pk>[0-9]+)/delete$', url(r'^config/tipo-textoarticulado/(?P<pk>[0-9]+)/delete$',
views.TipoTaDeleteView.as_view(), name='tipo_ta_delete'), views.TipoTaDeleteView.as_view(), name='tipo_ta_delete'),
url(r'^config/tipo-nota/',
]
urlpatterns = [
url(r'^ta/', include(urlpatterns_compilacao, 'compilacao', 'compilacao')),
url(r'^ta/config/tipo-nota/',
include(tipo_nota_crud.urls)), include(tipo_nota_crud.urls)),
url(r'^config/tipo-vide/', url(r'^ta/config/tipo-vide/',
include(tipo_vide_crud.urls)), include(tipo_vide_crud.urls)),
url(r'^config/tipo-publicacao/', url(r'^ta/config/tipo-publicacao/',
include(tipo_publicacao_crud.urls)), include(tipo_publicacao_crud.urls)),
url(r'^config/veiculo-publicacao/', url(r'^ta/config/veiculo-publicacao/',
include(veiculo_publicacao_crud.urls)), include(veiculo_publicacao_crud.urls)),
] ]
urlpatterns = [
url(r'^ta/', include(urlpatterns_compilacao)),
]

266
compilacao/views.py

@ -7,7 +7,7 @@ from django import forms
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.signing import Signer from django.core.signing import Signer
from django.core.urlresolvers import reverse, reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.db.models import Q from django.db.models import Q
from django.http.response import (HttpResponse, HttpResponseRedirect, from django.http.response import (HttpResponse, HttpResponseRedirect,
JsonResponse) JsonResponse)
@ -38,7 +38,9 @@ DISPOSITIVO_SELECT_RELATED = (
'dispositivo_atualizador__dispositivo_pai__ta', 'dispositivo_atualizador__dispositivo_pai__ta',
'dispositivo_atualizador__dispositivo_pai__ta__tipo_ta', 'dispositivo_atualizador__dispositivo_pai__ta__tipo_ta',
'dispositivo_pai', 'dispositivo_pai',
'dispositivo_pai__tipo_dispositivo') 'dispositivo_pai__tipo_dispositivo',
'ta_publicado',
'ta',)
tipo_nota_crud = build_crud( tipo_nota_crud = build_crud(
TipoNota, 'tipo_nota', [ TipoNota, 'tipo_nota', [
@ -174,7 +176,8 @@ class IntegracaoTaView(TemplateView):
ta.save() ta.save()
return redirect(to=reverse_lazy('ta_text', kwargs={'ta_id': ta.pk})) return redirect(to=reverse_lazy('compilacao:ta_text',
kwargs={'ta_id': ta.pk}))
class Meta: class Meta:
abstract = True abstract = True
@ -193,17 +196,18 @@ def get_integrations_view_names():
return result return result
def choice_extenal_views(): def choice_models_in_extenal_views():
integrations_view_names = get_integrations_view_names() integrations_view_names = get_integrations_view_names()
result = [(None, '-------------'), ] result = [(None, '-------------'), ]
for item in integrations_view_names: for item in integrations_view_names:
ct = ContentType.objects.filter( if hasattr(item, 'model') and hasattr(item, 'model_type_foreignkey'):
model=item.model.__name__.lower(), ct = ContentType.objects.filter(
app_label=item.model._meta.app_label) model=item.model.__name__.lower(),
if ct.exists(): app_label=item.model._meta.app_label)
result.append(( if ct.exists():
ct[0].pk, result.append((
item.model._meta.verbose_name_plural)) ct[0].pk,
item.model._meta.verbose_name_plural))
return result return result
@ -228,7 +232,7 @@ class TipoTaListView(ListView):
@property @property
def create_url(self): def create_url(self):
return reverse_lazy('tipo_ta_create') return reverse_lazy('compilacao:tipo_ta_create')
class TipoTaCreateView(FormMessagesMixin, CreateView): class TipoTaCreateView(FormMessagesMixin, CreateView):
@ -242,17 +246,18 @@ class TipoTaCreateView(FormMessagesMixin, CreateView):
self.object = None self.object = None
form = self.get_form() form = self.get_form()
form.fields['content_type'] = forms.ChoiceField( form.fields['content_type'] = forms.ChoiceField(
choices=choice_extenal_views(), choices=choice_models_in_extenal_views(),
label=_('Modelo Integrado'), required=False) label=_('Modelo Integrado'), required=False)
return self.render_to_response(self.get_context_data(form=form)) return self.render_to_response(self.get_context_data(form=form))
def get_success_url(self): def get_success_url(self):
return reverse_lazy('tipo_ta_detail', kwargs={'pk': self.object.id}) return reverse_lazy('compilacao:tipo_ta_detail',
kwargs={'pk': self.object.id})
@property @property
def cancel_url(self): def cancel_url(self):
return reverse_lazy('tipo_ta_list') return reverse_lazy('compilacao:tipo_ta_list')
class TipoTaDetailView(CompMixin, DetailView): class TipoTaDetailView(CompMixin, DetailView):
@ -268,28 +273,31 @@ class TipoTaUpdateView(CompMixin, UpdateView):
self.object = self.get_object() self.object = self.get_object()
form = self.get_form() form = self.get_form()
form.fields['content_type'] = forms.ChoiceField( form.fields['content_type'] = forms.ChoiceField(
choices=choice_extenal_views(), choices=choice_models_in_extenal_views(),
label=_('Modelo Integrado'), required=False) label=_('Modelo Integrado'), required=False)
return self.render_to_response(self.get_context_data(form=form)) return self.render_to_response(self.get_context_data(form=form))
def get_success_url(self): def get_success_url(self):
return reverse_lazy('tipo_ta_detail', kwargs={'pk': self.kwargs['pk']}) return reverse_lazy('compilacao:tipo_ta_detail',
kwargs={'pk': self.kwargs['pk']})
@property @property
def cancel_url(self): def cancel_url(self):
return reverse_lazy('tipo_ta_detail', kwargs={'pk': self.kwargs['pk']}) return reverse_lazy('compilacao:tipo_ta_detail',
kwargs={'pk': self.kwargs['pk']})
class TipoTaDeleteView(CompMixin, DeleteView): class TipoTaDeleteView(CompMixin, DeleteView):
model = TipoTextoArticulado model = TipoTextoArticulado
template_name = "compilacao/confirm_delete.html" template_name = "crud/confirm_delete.html"
@property @property
def detail_url(self): def detail_url(self):
return reverse_lazy('tipo_ta_detail', kwargs={'pk': self.kwargs['pk']}) return reverse_lazy('compilacao:tipo_ta_detail',
kwargs={'pk': self.kwargs['pk']})
def get_success_url(self): def get_success_url(self):
return reverse_lazy('tipo_ta_list') return reverse_lazy('compilacao:tipo_ta_list')
class TaListView(ListView): class TaListView(ListView):
@ -303,7 +311,7 @@ class TaListView(ListView):
@property @property
def create_url(self): def create_url(self):
return reverse_lazy('ta_create') return reverse_lazy('compilacao:ta_create')
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(TaListView, self).get_context_data(**kwargs) context = super(TaListView, self).get_context_data(**kwargs)
@ -321,7 +329,8 @@ class TaDetailView(DetailView):
def title(self): def title(self):
if self.get_object().content_object: if self.get_object().content_object:
return _( return _(
'Metadados para o Texto Articulado da %s - %s') % ( 'Metadados para o Texto Articulado de %s\n'
'<small>%s</small>') % (
self.get_object().content_object._meta.verbose_name_plural, self.get_object().content_object._meta.verbose_name_plural,
self.get_object().content_object) self.get_object().content_object)
else: else:
@ -336,11 +345,12 @@ class TaCreateView(FormMessagesMixin, CreateView):
form_invalid_message = _('O registro não foi criado.') form_invalid_message = _('O registro não foi criado.')
def get_success_url(self): def get_success_url(self):
return reverse_lazy('ta_detail', kwargs={'pk': self.object.id}) return reverse_lazy('compilacao:ta_detail',
kwargs={'pk': self.object.id})
@property @property
def cancel_url(self): def cancel_url(self):
return reverse_lazy('ta_list') return reverse_lazy('compilacao:ta_list')
class TaUpdateView(CompMixin, UpdateView): class TaUpdateView(CompMixin, UpdateView):
@ -357,23 +367,26 @@ class TaUpdateView(CompMixin, UpdateView):
return self.render_to_response(self.get_context_data(form=form)) return self.render_to_response(self.get_context_data(form=form))
def get_success_url(self): def get_success_url(self):
return reverse_lazy('ta_detail', kwargs={'pk': self.kwargs['pk']}) return reverse_lazy('compilacao:ta_detail',
kwargs={'pk': self.kwargs['pk']})
@property @property
def cancel_url(self): def cancel_url(self):
return reverse_lazy('ta_detail', kwargs={'pk': self.kwargs['pk']}) return reverse_lazy('compilacao:ta_detail',
kwargs={'pk': self.kwargs['pk']})
class TaDeleteView(CompMixin, DeleteView): class TaDeleteView(CompMixin, DeleteView):
model = TextoArticulado model = TextoArticulado
template_name = "compilacao/confirm_delete.html" template_name = "crud/confirm_delete.html"
@property @property
def detail_url(self): def detail_url(self):
return reverse_lazy('ta_detail', kwargs={'pk': self.kwargs['pk']}) return reverse_lazy('compilacao:ta_detail',
kwargs={'pk': self.kwargs['pk']})
def get_success_url(self): def get_success_url(self):
return reverse_lazy('ta_list') return reverse_lazy('compilacao:ta_list')
class TextView(ListView, CompMixin): class TextView(ListView, CompMixin):
@ -444,9 +457,9 @@ class TextView(ListView, CompMixin):
context['cita'] = {} context['cita'] = {}
for c in cita: for c in cita:
if str(c.dispositivo_base_id) not in context['cita']: if c.dispositivo_base_id not in context['cita']:
context['cita'][str(c.dispositivo_base_id)] = [] context['cita'][c.dispositivo_base_id] = []
context['cita'][str(c.dispositivo_base_id)].append(c) context['cita'][c.dispositivo_base_id].append(c)
citado = Vide.objects.filter( citado = Vide.objects.filter(
Q(dispositivo_ref__ta_id=self.kwargs['ta_id'])).\ Q(dispositivo_ref__ta_id=self.kwargs['ta_id'])).\
@ -458,9 +471,9 @@ class TextView(ListView, CompMixin):
context['citado'] = {} context['citado'] = {}
for c in citado: for c in citado:
if str(c.dispositivo_ref_id) not in context['citado']: if c.dispositivo_ref_id not in context['citado']:
context['citado'][str(c.dispositivo_ref_id)] = [] context['citado'][c.dispositivo_ref_id] = []
context['citado'][str(c.dispositivo_ref_id)].append(c) context['citado'][c.dispositivo_ref_id].append(c)
notas = Nota.objects.filter( notas = Nota.objects.filter(
dispositivo__ta_id=self.kwargs['ta_id']).select_related( dispositivo__ta_id=self.kwargs['ta_id']).select_related(
@ -468,9 +481,19 @@ class TextView(ListView, CompMixin):
context['notas'] = {} context['notas'] = {}
for n in notas: for n in notas:
if str(n.dispositivo_id) not in context['notas']: if n.dispositivo_id not in context['notas']:
context['notas'][str(n.dispositivo_id)] = [] context['notas'][n.dispositivo_id] = []
context['notas'][str(n.dispositivo_id)].append(n) context['notas'][n.dispositivo_id].append(n)
tas_pub = [d.ta_publicado for d in self.object_list if d.ta_publicado]
tas_pub = set(tas_pub)
ta_pub_list = {}
for ta in tas_pub:
ta_pub_list[ta.pk] = str(ta)
context['ta_pub_list'] = ta_pub_list
# context['vigencias'] = self.get_vigencias()
return context return context
def get_queryset(self): def get_queryset(self):
@ -601,7 +624,7 @@ class DispositivoView(TextView):
return itens return itens
class TextEditView(TextView): class TextEditView(ListView, CompMixin):
template_name = 'compilacao/text_edit.html' template_name = 'compilacao/text_edit.html'
flag_alteradora = -1 flag_alteradora = -1
@ -611,14 +634,27 @@ class TextEditView(TextView):
pk_edit = 0 pk_edit = 0
pk_view = 0 pk_view = 0
"""
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
self.object_list = self.get_queryset() return ListView.get(self, request, *args, **kwargs)
context = self.get_context_data(
object_list=self.object_list)
return self.render_to_response(context)""" def get_context_data(self, **kwargs):
context = super(TextEditView, self).get_context_data(**kwargs)
ta = TextoArticulado.objects.get(pk=self.kwargs['ta_id'])
self.object = ta
context['object'] = self.object
tas_pub = [d.ta_publicado for d in self.object_list if d.ta_publicado]
tas_pub = set(tas_pub)
ta_pub_list = {}
for ta in tas_pub:
ta_pub_list[ta.pk] = str(ta)
context['ta_pub_list'] = ta_pub_list
return context
def get_queryset(self): def get_queryset(self):
self.pk_edit = 0 self.pk_edit = 0
@ -722,7 +758,8 @@ class DispositivoEditView(TextEditView):
if not dnext.exists(): if not dnext.exists():
dnext = [] dnext = []
dnext[0] = d dnext.append(d)
pais = [d.dispositivo_pai_id, ]
else: else:
if dnext[0].nivel > d.nivel: if dnext[0].nivel > d.nivel:
@ -1385,8 +1422,8 @@ class ActionsEditView(ActionsEditMixin, TemplateView):
class DispositivoSuccessUrlMixin(object): class DispositivoSuccessUrlMixin(object):
def get_success_url(self): def get_success_url(self):
return reverse( return reverse_lazy(
'dispositivo', kwargs={ 'compilacao:dispositivo', kwargs={
'ta_id': self.kwargs[ 'ta_id': self.kwargs[
'ta_id'], 'ta_id'],
'dispositivo_id': self.kwargs[ 'dispositivo_id': self.kwargs[
@ -1428,6 +1465,7 @@ class NotasCreateView(NotaMixin, CreateView):
return super(NotasCreateView, self).get(request, *args, **kwargs) return super(NotasCreateView, self).get(request, *args, **kwargs)
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.object = None
try: try:
ta_id = kwargs.pop('ta_id') ta_id = kwargs.pop('ta_id')
dispositivo_id = kwargs.pop('dispositivo_id') dispositivo_id = kwargs.pop('dispositivo_id')
@ -1487,30 +1525,58 @@ class VideMixin(DispositivoSuccessUrlMixin):
return super(VideMixin, self).dispatch(*args, **kwargs) return super(VideMixin, self).dispatch(*args, **kwargs)
def choice_model_type_foreignkey_in_extenal_views(id_tipo_ta=None):
result = [(None, '-------------'), ]
if not id_tipo_ta:
return result
tipo_ta = TipoTextoArticulado.objects.get(pk=id_tipo_ta)
integrations_view_names = get_integrations_view_names()
for item in integrations_view_names:
if hasattr(item, 'model_type_foreignkey'):
if (tipo_ta.content_type.model == item.model.__name__.lower() and
tipo_ta.content_type.app_label ==
item.model._meta.app_label):
for i in item.model_type_foreignkey.objects.all():
result.append((i.pk, i))
return result
class VideCreateView(VideMixin, CreateView): class VideCreateView(VideMixin, CreateView):
model = Vide model = Vide
template_name = 'compilacao/ajax_form.html' template_name = 'compilacao/ajax_form.html'
form_class = VideForm form_class = VideForm
def post_old(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
try: self.object = None
self.object = None
ta_id = kwargs.pop('ta_id')
dispositivo_id = kwargs.pop('dispositivo_id')
form = VideForm(request.POST, request.FILES, **kwargs)
kwargs['ta_id'] = ta_id
kwargs['dispositivo_id'] = dispositivo_id
if form.is_valid(): if 'action' in request.GET and request.GET['action'] == 'get_tipos':
vd = form.save(commit=False) result = choice_model_type_foreignkey_in_extenal_views(
vd.save() id_tipo_ta=request.GET['tipo_ta'])
self.kwargs['pk'] = vd.pk
return self.form_valid(form) itens = []
else: for i in result:
return self.form_invalid(form) item = {}
except Exception as e: item[i[0] if i[0] else ''] = str(i[1])
print(e) itens.append(item)
return HttpResponse("error post") return JsonResponse(itens, safe=False)
form = self.get_form()
return self.render_to_response(self.get_context_data(form=form))
def get_form_kwargs(self):
kwargs = super(VideCreateView, self).get_form_kwargs()
if 'choice_model_type_foreignkey_in_extenal_views' not in kwargs:
kwargs.update({
'choice_model_type_foreignkey_in_extenal_views':
choice_model_type_foreignkey_in_extenal_views
})
return kwargs
class VideEditView(VideMixin, UpdateView): class VideEditView(VideMixin, UpdateView):
@ -1589,7 +1655,59 @@ class DispositivoSearchFragmentFormView(ListView):
q = q & Q(pk=initial_ref) q = q & Q(pk=initial_ref)
n = 50 n = 50
return Dispositivo.objects.filter(q)[:n] result = Dispositivo.objects.filter(q).select_related('ta')
if 'tipo_model' not in self.request.GET:
return result[:n]
tipo_model = self.request.GET['tipo_model']
if not tipo_model:
return result[:n]
integrations_view_names = get_integrations_view_names()
tipo_ta = TipoTextoArticulado.objects.get(pk=tipo_ta)
model_class = None
for item in integrations_view_names:
if hasattr(item, 'model_type_foreignkey') and\
hasattr(item, 'model'):
if (tipo_ta.content_type.model ==
item.model.__name__.lower() and
tipo_ta.content_type.app_label ==
item.model._meta.app_label):
model_class = item.model
model_type_class = item.model_type_foreignkey
tipo_model = item.model_type_foreignkey.objects.get(
pk=tipo_model)
break
if not model_class:
return result[:n]
column_field = ''
for field in model_class._meta.fields:
if field.related_model == model_type_class:
column_field = field.column
break
if not column_field:
return result[:n]
r = []
for d in result:
if not d.ta.content_object or\
not hasattr(d.ta.content_object, column_field):
continue
if tipo_model.pk == getattr(d.ta.content_object, column_field):
r.append(d)
if len(r) == n:
break
return r
except Exception as e: except Exception as e:
print(e) print(e)
@ -1613,7 +1731,7 @@ class PublicacaoListView(ListView):
@property @property
def create_url(self): def create_url(self):
return reverse_lazy( return reverse_lazy(
'ta_pub_create', 'compilacao:ta_pub_create',
kwargs={'ta_id': self.kwargs['ta_id']}) kwargs={'ta_id': self.kwargs['ta_id']})
def get_queryset(self): def get_queryset(self):
@ -1635,7 +1753,7 @@ class PublicacaoCreateView(FormMessagesMixin, CreateView):
def get_success_url(self): def get_success_url(self):
return reverse_lazy( return reverse_lazy(
'ta_pub_detail', 'compilacao:ta_pub_detail',
kwargs={ kwargs={
'pk': self.object.id, 'pk': self.object.id,
'ta_id': self.kwargs['ta_id']}) 'ta_id': self.kwargs['ta_id']})
@ -1643,7 +1761,7 @@ class PublicacaoCreateView(FormMessagesMixin, CreateView):
@property @property
def cancel_url(self): def cancel_url(self):
return reverse_lazy( return reverse_lazy(
'ta_pub_list', 'compilacao:ta_pub_list',
kwargs={'ta_id': self.kwargs['ta_id']}) kwargs={'ta_id': self.kwargs['ta_id']})
def get_initial(self): def get_initial(self):
@ -1668,7 +1786,7 @@ class PublicacaoUpdateView(CompMixin, UpdateView):
return self.render_to_response(self.get_context_data(form=form)) return self.render_to_response(self.get_context_data(form=form))
def get_success_url(self): def get_success_url(self):
return reverse_lazy('ta_pub_detail', return reverse_lazy('compilacao:ta_pub_detail',
kwargs={ kwargs={
'pk': self.object.id, 'pk': self.object.id,
'ta_id': self.kwargs['ta_id']}) 'ta_id': self.kwargs['ta_id']})
@ -1680,15 +1798,15 @@ class PublicacaoUpdateView(CompMixin, UpdateView):
class PublicacaoDeleteView(CompMixin, DeleteView): class PublicacaoDeleteView(CompMixin, DeleteView):
model = Publicacao model = Publicacao
template_name = "compilacao/confirm_delete.html" template_name = "crud/confirm_delete.html"
@property @property
def detail_url(self): def detail_url(self):
return reverse_lazy('ta_pub_detail', return reverse_lazy('compilacao:ta_pub_detail',
kwargs={ kwargs={
'pk': self.object.id, 'pk': self.object.id,
'ta_id': self.kwargs['ta_id']}) 'ta_id': self.kwargs['ta_id']})
def get_success_url(self): def get_success_url(self):
return reverse_lazy('ta_pub_list', return reverse_lazy('compilacao:ta_pub_list',
kwargs={'ta_id': self.kwargs['ta_id']}) kwargs={'ta_id': self.kwargs['ta_id']})

2
materia/views.py

@ -1486,7 +1486,9 @@ class ProposicaoView(FormMixin, GenericView):
class MateriaTaView(IntegracaoTaView): class MateriaTaView(IntegracaoTaView):
model = MateriaLegislativa model = MateriaLegislativa
model_type_foreignkey = TipoMateriaLegislativa
class ProposicaoTaView(IntegracaoTaView): class ProposicaoTaView(IntegracaoTaView):
model = Proposicao model = Proposicao
model_type_foreignkey = TipoProposicao

8
norma/urls.py

@ -3,17 +3,17 @@ from django.conf.urls import include, url
from norma.views import (NormaIncluirView, NormaTaView, assunto_norma_crud, from norma.views import (NormaIncluirView, NormaTaView, assunto_norma_crud,
norma_temporario_crud, tipo_norma_crud) norma_temporario_crud, tipo_norma_crud)
norma_url_patterns = norma_temporario_crud.urlpatterns
# norma_url_patterns = norma_crud.urlpatterns + [] # norma_url_patterns = norma_crud.urlpatterns + []
norma_url_patterns = norma_temporario_crud.urlpatterns + [
url(r'^norma/(?P<pk>[0-9]+)/ta$',
NormaTaView.as_view(), name='ta')
]
urlpatterns = [ urlpatterns = [
url(r'^norma/', include(norma_url_patterns, url(r'^norma/', include(norma_url_patterns,
norma_temporario_crud.namespace, norma_temporario_crud.namespace,
norma_temporario_crud.namespace)), norma_temporario_crud.namespace)),
url(r'^norma/(?P<pk>[0-9]+)/ta$',
NormaTaView.as_view(), name='norma_ta'),
url(r'^sistema/norma/tipo/', include(tipo_norma_crud.urls)), url(r'^sistema/norma/tipo/', include(tipo_norma_crud.urls)),
url(r'^sistema/norma/assunto/', include(assunto_norma_crud.urls)), url(r'^sistema/norma/assunto/', include(assunto_norma_crud.urls)),

1
norma/views.py

@ -125,3 +125,4 @@ class NormaIncluirView(FormMixin, GenericView):
class NormaTaView(IntegracaoTaView): class NormaTaView(IntegracaoTaView):
model = NormaJuridica model = NormaJuridica
model_type_foreignkey = TipoNormaJuridica

3
sapl/layout.py

@ -23,7 +23,8 @@ def to_fieldsets(fields):
def form_actions(more=[], save_label=_('Salvar')): def form_actions(more=[], save_label=_('Salvar')):
return FormActions(Submit('salvar', save_label), *more) return FormActions(
Submit('salvar', save_label, css_class='pull-right'), *more)
class SaplFormLayout(Layout): class SaplFormLayout(Layout):

2
static/js/app.js

@ -13,7 +13,7 @@ function refreshMask() {
$('.rg').mask("0.000.000", {placeholder:"_.___.___"}); $('.rg').mask("0.000.000", {placeholder:"_.___.___"});
$('.titulo_eleitor').mask("0000.0000.0000.0000", {placeholder:"____.____.____.____"}); $('.titulo_eleitor').mask("0000.0000.0000.0000", {placeholder:"____.____.____.____"});
$('.hora').mask("00:00", {placeholder:"hh:mm"}); $('.hora').mask("00:00", {placeholder:"hh:mm"});
$('.hora_hms').mask("00:00:00", {placeholder:"hh:mm:ss"}); $('.hora_hms').mask("00:00:00", {placeholder:"hh:mm:ss"});
} }
$(document).ready(function(){ $(document).ready(function(){

56
static/js/compilacao.js

@ -1,40 +1,40 @@
function initTinymce() { function initTinymce() {
tinymce.init({ tinymce.init({
mode : "textareas", mode : "textareas",
force_br_newlines : false, force_br_newlines : false,
force_p_newlines : false, force_p_newlines : false,
forced_root_block : '', forced_root_block : '',
plugins: ["table save code"], plugins: ["table save code"],
menubar: "edit format table tools", menubar: "edit format table tools",
toolbar: "save | undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent", toolbar: "save | undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent",
tools: "inserttable", tools: "inserttable",
save_onsavecallback: onSubmitEditForm, save_onsavecallback: onSubmitEditForm,
border_css: "/static/styles/compilacao_tinymce.css", border_css: "/static/styles/compilacao_tinymce.css",
content_css: "/static/styles/compilacao_tinymce.css" content_css: "/static/styles/compilacao_tinymce.css"
}); });
} }
function SetCookie(cookieName,cookieValue,nDays) { function SetCookie(cookieName,cookieValue,nDays) {
var today = new Date(); var today = new Date();
var expire = new Date(); var expire = new Date();
if (nDays==null || nDays==0) nDays=1; if (nDays==null || nDays==0) nDays=1;
expire.setTime(today.getTime() + 3600000*24*nDays); expire.setTime(today.getTime() + 3600000*24*nDays);
document.cookie = cookieName+"="+escape(cookieValue) document.cookie = cookieName+"="+escape(cookieValue)
+ ";expires="+expire.toGMTString(); + ";expires="+expire.toGMTString();
} }
function ReadCookie(cookieName) { function ReadCookie(cookieName) {
var theCookie=" "+document.cookie; var theCookie=" "+document.cookie;
var ind=theCookie.indexOf(" "+cookieName+"="); var ind=theCookie.indexOf(" "+cookieName+"=");
if (ind==-1) ind=theCookie.indexOf(";"+cookieName+"="); if (ind==-1) ind=theCookie.indexOf(";"+cookieName+"=");
if (ind==-1 || cookieName=="") return ""; if (ind==-1 || cookieName=="") return "";
var ind1=theCookie.indexOf(";",ind+1); var ind1=theCookie.indexOf(";",ind+1);
if (ind1==-1) ind1=theCookie.length; if (ind1==-1) ind1=theCookie.length;
return unescape(theCookie.substring(ind+cookieName.length+2,ind1)); return unescape(theCookie.substring(ind+cookieName.length+2,ind1));
} }
function insertWaitAjax(element) { function insertWaitAjax(element) {
//jQuery(element).append('<div style="text-align:center;"><img src="/static/img/ajax-loader.gif"></div>'); //jQuery(element).append('<div style="text-align:center;"><img src="/static/img/ajax-loader.gif"></div>');
jQuery(element).append('<div style="text-align:center;"><i style="font-size: 200%;"class="fa fa-refresh fa-spin"></i></div>'); jQuery(element).append('<div style="text-align:center;"><i style="font-size: 200%;"class="fa fa-refresh fa-spin"></i></div>');
} }

436
static/js/compilacao_edit.js

@ -3,255 +3,255 @@ var editortype = "textarea";
var gets = 0; var gets = 0;
var onSubmitEditForm = function(event) { var onSubmitEditForm = function(event) {
var texto = ''; var texto = '';
var editorTiny = tinymce.get('editdi_texto'); var editorTiny = tinymce.get('editdi_texto');
if (editorTiny != null) if (editorTiny != null)
texto = editorTiny.getContent(); texto = editorTiny.getContent();
else else
texto = $('#editdi_texto').val(); texto = $('#editdi_texto').val();
var formData = { var formData = {
'csrfmiddlewaretoken' : $('input[name=csrfmiddlewaretoken]').val(), 'csrfmiddlewaretoken' : $('input[name=csrfmiddlewaretoken]').val(),
'texto' : texto 'texto' : texto
}; };
var url = $('.csform form').attr( "action_ajax" ); var url = $('.csform form').attr( "action_ajax" );
$("#message_block").css("display", "block"); $("#message_block").css("display", "block");
$.post(url, formData) $.post(url, formData)
.done(function(data) { .done(function(data) {
if (typeof data == "string") { if (typeof data == "string") {
$('.dpt-selected').html(data); $('.dpt-selected').html(data);
clearEditSelected(); clearEditSelected();
reloadFunctionClicks(); reloadFunctionClicks();
return; return;
} }
clearEditSelected(); clearEditSelected();
if (data.pk != null) if (data.pk != null)
refreshScreenFocusPk(data); refreshScreenFocusPk(data);
else { else {
alert('Erro na inserção!'); alert('Erro na inserção!');
flag_refresh_all = false; flag_refresh_all = false;
} }
}).always(function() { }).always(function() {
$("#message_block").css("display", "none"); $("#message_block").css("display", "none");
}); });
if (event != null) if (event != null)
event.preventDefault(); event.preventDefault();
} }
var clickEditDispositivo = function(event) { var clickEditDispositivo = function(event) {
var _pk = event.currentTarget.getAttribute('pk'); var _pk = event.currentTarget.getAttribute('pk');
if ($('#dpt'+_pk).hasClass("dpt-selected")) { if ($('#dpt'+_pk).hasClass("dpt-selected")) {
clearEditSelected(); clearEditSelected();
return; return;
} }
clearEditSelected(); clearEditSelected();
clickUpdateDispositivo(event); clickUpdateDispositivo(event);
} }
var clickUpdateDispositivo = function(event, __pk_refresh, __pk_edit, __action, flag_actions_vibible, flag_refresh_all) { var clickUpdateDispositivo = function(event, __pk_refresh, __pk_edit, __action, flag_actions_vibible, flag_refresh_all) {
var pk_refresh = __pk_refresh; var pk_refresh = __pk_refresh;
var pk_edit = __pk_edit; var pk_edit = __pk_edit;
var _action = __action; var _action = __action;
var _variacao = ''; var _variacao = '';
var _tipo_pk = ''; var _tipo_pk = '';
var _perfil_pk = ''; var _perfil_pk = '';
if (event != null) { if (event != null) {
pk_refresh = event.currentTarget.getAttribute('pk'); pk_refresh = event.currentTarget.getAttribute('pk');
_action = $(this).attr('action'); _action = $(this).attr('action');
_variacao = $(this).attr('variacao'); _variacao = $(this).attr('variacao');
_tipo_pk = $(this).attr('tipo_pk'); _tipo_pk = $(this).attr('tipo_pk');
_perfil_pk = $(this).attr('perfil_pk'); _perfil_pk = $(this).attr('perfil_pk');
} }
if (pk_edit == null) if (pk_edit == null)
pk_edit = pk_refresh; pk_edit = pk_refresh;
var url = ''; var url = '';
if (_action == '') if (_action == '')
return; return;
else if ( _action == null) { else if ( _action == null) {
url = pk_refresh+'/refresh?edit='+pk_edit; url = pk_refresh+'/refresh?edit='+pk_edit;
} }
else if (_action.startsWith('refresh')) { else if (_action.startsWith('refresh')) {
var str = _action.split(':'); var str = _action.split(':');
if (str.length > 1) { if (str.length > 1) {
if(_action.endsWith('perfil')) { if(_action.endsWith('perfil')) {
url = '&perfil_pk='+_perfil_pk; url = '&perfil_pk='+_perfil_pk;
$("#message_block").css("display", "block"); $("#message_block").css("display", "block");
} }
else { else {
editortype = str[1]; editortype = str[1];
SetCookie("editortype", editortype, 30) SetCookie("editortype", editortype, 30)
} }
} }
url = pk_refresh+'/refresh?edit='+pk_edit+url; url = pk_refresh+'/refresh?edit='+pk_edit+url;
} }
else if (_action.startsWith('add_')) { else if (_action.startsWith('add_')) {
url = pk_refresh+'/actions?action='+_action; url = pk_refresh+'/actions?action='+_action;
url += '&tipo_pk='+_tipo_pk; url += '&tipo_pk='+_tipo_pk;
url += '&variacao='+_variacao; url += '&variacao='+_variacao;
$("#message_block").css("display", "block"); $("#message_block").css("display", "block");
} }
else if (_action.startsWith('delete_')) { else if (_action.startsWith('delete_')) {
var r = confirm("Confirma Exclusão deste dispositivo?"); var r = confirm("Confirma Exclusão deste dispositivo?");
if (r == true) { if (r == true) {
x = "You pressed OK!"; x = "You pressed OK!";
} else { } else {
return return
} }
url = pk_refresh+'/actions?action='+_action; url = pk_refresh+'/actions?action='+_action;
$("#message_block").css("display", "block"); $("#message_block").css("display", "block");
} }
$.get(url).done(function( data ) { $.get(url).done(function( data ) {
if ( _action == null || _action.startsWith('refresh')) { if ( _action == null || _action.startsWith('refresh')) {
if (flag_refresh_all) { if (flag_refresh_all) {
if (flag_actions_vibible) if (flag_actions_vibible)
clearEditSelected(); clearEditSelected();
$( '#dpt' + pk_refresh ).html( data); $( '#dpt' + pk_refresh ).html( data);
} }
else { else {
//console.log(pk_refresh + ' - '+pk_edit) //console.log(pk_refresh + ' - '+pk_edit)
if (flag_actions_vibible == null || flag_actions_vibible) if (flag_actions_vibible == null || flag_actions_vibible)
clearEditSelected(); clearEditSelected();
//$( '#dpt' + pk_refresh+' > .bloco' ).addClass('displaynone' ); //$( '#dpt' + pk_refresh+' > .bloco' ).addClass('displaynone' );
$( '#dpt' + pk_refresh ).prepend( data ); $( '#dpt' + pk_refresh ).prepend( data );
} }
reloadFunctionClicks(); reloadFunctionClicks();
var _editortype = editortype; var _editortype = editortype;
if ( $('.edt-'+_editortype).length == 0) { if ( $('.edt-'+_editortype).length == 0) {
_editortype = 'construct'; _editortype = 'construct';
} }
if ( _editortype == 'tinymce' ) { if ( _editortype == 'tinymce' ) {
initTinymce(); initTinymce();
} }
else if (_editortype == 'textarea') { else if (_editortype == 'textarea') {
$('.csform form').submit(onSubmitEditForm); $('.csform form').submit(onSubmitEditForm);
} }
else if (_editortype == 'construct') { else if (_editortype == 'construct') {
$('.csform .btn-salvar').parent().addClass("displaynone"); $('.csform .btn-salvar').parent().addClass("displaynone");
$('.csform .btn-salvar, .csform .fields').addClass("displaynone"); $('.csform .btn-salvar, .csform .fields').addClass("displaynone");
$('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2); $('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2);
$('.actions_inserts').removeClass('menu_flutuante'); $('.actions_inserts').removeClass('menu_flutuante');
} }
else if (_editortype == 'detail') { else if (_editortype == 'detail') {
$('.csform .btn-salvar').parent().removeClass("displaynone"); $('.csform .btn-salvar').parent().removeClass("displaynone");
$('.csform .btn-salvar, .csform .fields').removeClass("displaynone"); $('.csform .btn-salvar, .csform .fields').removeClass("displaynone");
$('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2); $('#dpt'+pk_refresh).css('min-height', $('.actions_right').height()*2);
$('.actions_inserts').addClass('menu_flutuante'); $('.actions_inserts').addClass('menu_flutuante');
} }
$(".edt-"+_editortype).addClass('selected'); $(".edt-"+_editortype).addClass('selected');
//$(".container").addClass('class_color_container'); //$(".container").addClass('class_color_container');
if (flag_actions_vibible == null || flag_actions_vibible) { if (flag_actions_vibible == null || flag_actions_vibible) {
$('#dpt'+pk_edit).addClass('dpt-selected'); $('#dpt'+pk_edit).addClass('dpt-selected');
$('html, body').animate({ $('html, body').animate({
scrollTop: $('#dpt' + pk_edit ).offset().top - window.innerHeight / 9 scrollTop: $('#dpt' + pk_edit ).offset().top - window.innerHeight / 9
}, 0); }, 0);
} }
} }
else if (_action == 'add_next' || _action == 'add_in') { else if (_action == 'add_next' || _action == 'add_in') {
clearEditSelected(); clearEditSelected();
if (data.pk != null) { if (data.pk != null) {
if (data.alert != null) if (data.alert != null)
alert(data.alert) alert(data.alert)
refreshScreenFocusPk(data); refreshScreenFocusPk(data);
} }
else { else {
alert('Erro na inserção!'); alert('Erro na inserção!');
} }
} }
else if (_action.startsWith('delete_')) { else if (_action.startsWith('delete_')) {
$("#message_block").css("display", "block"); $("#message_block").css("display", "block");
clearEditSelected(); clearEditSelected();
if (data.pk != null) { if (data.pk != null) {
refreshScreenFocusPk(data); refreshScreenFocusPk(data);
} }
else { else {
alert('Erro exclusão!'); alert('Erro exclusão!');
} }
} }
else { else {
clearEditSelected(); clearEditSelected();
reloadFunctionClicks(); reloadFunctionClicks();
} }
}).always(function() { }).always(function() {
$("#message_block").css("display", "none"); $("#message_block").css("display", "none");
}); });
} }
function refreshScreenFocusPk(data) { function refreshScreenFocusPk(data) {
for (var pai = 0; pai < data.pai.length; pai++) for (var pai = 0; pai < data.pai.length; pai++)
if (data.pai[pai] != -1) { if (data.pai[pai] != -1) {
clickUpdateDispositivo(null, data.pai[pai], data.pk, 'refresh', pai == 0, true); clickUpdateDispositivo(null, data.pai[pai], data.pk, 'refresh', pai == 0, true);
} }
else { else {
href = location.href.split('#')[0] href = location.href.split('#')[0]
location.href = href+'#'+data.pk location.href = href+'#'+data.pk
location.reload(true) location.reload(true)
} }
} }
function clearEditSelected() { function clearEditSelected() {
$('.bloco' ).removeClass('displaynone' ); $('.bloco' ).removeClass('displaynone' );
$(".container").removeClass('class_color_container'); $(".container").removeClass('class_color_container');
tinymce.remove(); tinymce.remove();
$('.dpt-selected').removeClass('dpt-selected'); $('.dpt-selected').removeClass('dpt-selected');
$('.dpt').css('min-height', ''); $('.dpt').css('min-height', '');
$('.csform').remove(); $('.csform').remove();
} }
function reloadFunctionClicks() { function reloadFunctionClicks() {
$('.dpt .de, .btn-action, .btn-edit').off(); $('.dpt .de, .btn-action, .btn-edit').off();
$('.dpt .de, .btn-edit').on('click', clickEditDispositivo); $('.dpt .de, .btn-edit').on('click', clickEditDispositivo);
$('.btn-action').on('click', clickUpdateDispositivo); $('.btn-action').on('click', clickUpdateDispositivo);
$('#editdi_texto').focus(); $('#editdi_texto').focus();
} }
$(document).ready(function() { $(document).ready(function() {
editortype = ReadCookie("editortype") editortype = ReadCookie("editortype")
if (editortype == null || editortype == "") { if (editortype == null || editortype == "") {
editortype = "textarea" editortype = "textarea"
SetCookie("editortype", editortype, 30) SetCookie("editortype", editortype, 30)
} }
reloadFunctionClicks(); reloadFunctionClicks();
$("#message_block").css("display", "none"); $("#message_block").css("display", "none");
href = location.href.split('#') href = location.href.split('#')
if (href.length == 2) { if (href.length == 2) {
clickUpdateDispositivo(null, href[1], href[1], 'refresh', true); clickUpdateDispositivo(null, href[1], href[1], 'refresh', true);
} }
}); });

327
static/js/compilacao_notas.js

@ -1,179 +1,200 @@
function onEventsDneExec(pk) { function onEventsDneExec(pk, model) {
$('html, body').animate({ $('html, body').animate({
scrollTop: $('#dne' + pk ).offset().top - window.innerHeight / 5 scrollTop: $('#dne' + pk ).offset().top - window.innerHeight / 5
}, 300); }, 300);
$('.dateinput').fdatepicker({ refreshDatePicker()
// TODO localize
format: 'dd/mm/yyyy', $('#dne'+pk+" #button-id-submit-form").click(onSubmitEditForm);
language: 'pt', $('#dne'+pk+" .btn-close-container").click(function(){
endDate: '31/12/2100', $(this).closest('.dne-nota').removeClass('dne-nota');
todayBtn: true $(this).closest('.dne-form').html('');
}); });
$('#dne'+pk+" .primary").click(onSubmitEditForm); if (model == 'nota') {
$('#dne'+pk+" .btn-close-container").click(function(){ $('#dne'+pk+" select[name='tipo']").change(function(event) {
$(this).closest('.dne-nota').removeClass('dne-nota'); var url = '';
$(this).closest('.dne-form').html(''); url = 'text/'+pk+'/nota/create?action=modelo_nota&id_tipo='+this.value;
}); $.get(url).done(function( data ) {
$('#dne'+pk+" textarea[name='texto']").val(data);
$('#dne'+pk+" select[name='tipo']").change(function(event) { });
var url = ''; });
url = 'text/'+pk+'/nota/create?action=modelo_nota&id_tipo='+this.value; }
$.get(url).done(function( data ) { else if (model == 'vide') {
$('#dne'+pk+" textarea[name='texto']").val(data); $('#dne'+pk+" select[name='tipo_ta']").change(function(event) {
}); var url = '';
}); url = 'text/'+pk+'/vide/create?action=get_tipos&tipo_ta='+this.value;
$('#dne'+pk+" select[name='tipo_norma']" $('#dne'+pk+" label[for='id_tipo_model']").html('Tipos de ' + this.children[this.selectedIndex].innerHTML);
).change(onChangeParamNorma);
$('#dne'+pk+" input[name='num_norma'], " var select = $('#dne'+pk+" select[name='tipo_model']");
+ '#dne'+pk+" input[name='ano_norma'], " select.empty();
+ '#dne'+pk+" input[name='busca_dispositivo']" $('<option value="">Carregando...</option>').appendTo(select);
).change(onChangeParamNorma);
$.get(url).done(function( data ) {
$('#dne'+pk+" .btn-busca").click(onChangeParamNorma); select.empty();
for(var item in data) {
onChangeParamNorma(); for (var i in data[item])
$('<option value="'+i+'">'+data[item][i]+'</option>').appendTo(select);
}
});
});
$('#dne'+pk+" input[name='num_norma'], "
+ '#dne'+pk+" input[name='ano_norma'], "
+ '#dne'+pk+" input[name='busca_dispositivo']"
).change(onChangeParamNorma);
$('#dne'+pk+" .btn-busca").click(onChangeParamNorma);
onChangeParamNorma();
}
} }
var onChangeParamNorma = function(event) { var onChangeParamNorma = function(event) {
var tipo_ta = $("select[name='tipo_ta']").val(); var tipo_ta = $("select[name='tipo_ta']").val();
var num_ta = $("input[name='num_ta']").val(); var tipo_model = $("select[name='tipo_model']").val();
var ano_ta = $("input[name='ano_ta']").val(); var num_ta = $("input[name='num_ta']").val();
var busca_dispositivo = $("input[name='busca_dispositivo']").val(); var ano_ta = $("input[name='ano_ta']").val();
var dispositivo_ref = $("#id_dispositivo_ref").val(); var busca_dispositivo = $("input[name='busca_dispositivo']").val();
$('#id_dispositivo_ref').remove(); var dispositivo_ref = $("#id_dispositivo_ref").val();
$('#id_dispositivo_ref').remove();
if (dispositivo_ref == null)
dispositivo_ref = '' if (dispositivo_ref == null)
dispositivo_ref = ''
var url = '';
var pk = $("select[name='tipo_ta']").closest('.dne').attr('pk') var url = '';
var pk = $("select[name='tipo_ta']").closest('.dne').attr('pk')
var formData = {
'tipo_ta' : tipo_ta, var formData = {
'num_ta' : num_ta, 'tipo_ta' : tipo_ta,
'ano_ta' : ano_ta, 'tipo_model' : tipo_model,
'busca' : busca_dispositivo, 'num_ta' : num_ta,
'tipo_form' : 'radio', 'ano_ta' : ano_ta,
'initial_ref' : dispositivo_ref 'busca' : busca_dispositivo,
}; 'tipo_form' : 'radio',
'initial_ref' : dispositivo_ref
url = 'text/search'; };
$('.container-busca').html('');
insertWaitAjax('.container-busca') url = 'text/search';
$.get(url, formData).done(function( data ) { $('.container-busca').html('');
$('.container-busca').html(data); insertWaitAjax('.container-busca')
$("input[name='dispositivo_ref']").first().prop('checked', true); $.get(url, formData).done(function( data ) {
}); $('.container-busca').html(data);
$("input[name='dispositivo_ref']").first().prop('checked', true);
});
} }
var onSubmitEditForm = function(event) { var onSubmitEditForm = function(event) {
var url = ''; var url = '';
var model = 'nota'; var model = 'nota';
var id_edit = null; var id_edit = null;
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';
} }
id_edit = $('#id_pk').val(); id_edit = $('#id_pk').val();
url = 'text/'+id_dispositivo+'/'+model+'/' url = 'text/'+id_dispositivo+'/'+model+'/'
if (id_edit == null || id_edit == '') if (id_edit == null || id_edit == '')
url += 'create'; url += 'create';
else else
url += id_edit+'/edit'; url += id_edit+'/edit';
console.log($('#dne'+id_dispositivo+" form").serialize()); console.log($('#dne'+id_dispositivo+" form").serialize());
$.post( url, $('#dne'+id_dispositivo+" form").serialize(), function(data) { $.post( url, $('#dne'+id_dispositivo+" form").serialize(), function(data) {
if (typeof data == "string") { if (typeof data == "string") {
if (data.indexOf('<form') >= 0) { if (data.indexOf('<form') >= 0) {
$('#dne'+id_dispositivo+' .dne-form').html(data); $('#dne'+id_dispositivo+' .dne-form').html(data);
onEventsDneExec(id_dispositivo); onEventsDneExec(id_dispositivo, model);
} }
else { else {
$('#dne'+id_dispositivo+' .dne-form').closest('.dpt').html(data) $('#dne'+id_dispositivo+' .dne-form').closest('.dpt').html(data)
onReadyNotasVides(); onReadyNotasVides();
try {
$('html, body').animate({ $('html, body').animate({
scrollTop: $('#dne' + id_dispositivo ).offset().top - window.innerHeight / 3 scrollTop: $('#dne' + id_dispositivo ).offset().top - window.innerHeight / 3
}, 300); }, 300);
}
} catch(err) {
} console.log(err.message);
} }
);
}
}
}
);
} }
var onDelete = function(event) { var onDelete = function(event) {
var model = $(event).attr('model'); var model = $(event).attr('model');
var id_dispositivo = $(event).closest('.dn').attr('pk'); var id_dispositivo = $(event).closest('.dn').attr('pk');
var id_delete = $(event).attr('pk'); var id_delete = $(event).attr('pk');
var url = 'text/'+id_dispositivo+'/'+model+'/'+id_delete+'/delete'; var url = 'text/'+id_dispositivo+'/'+model+'/'+id_delete+'/delete';
$.get( url, function(data) { $.get( url, function(data) {
$('#dne'+id_dispositivo+' .dne-form').closest('.dpt').html(data) $('#dne'+id_dispositivo+' .dne-form').closest('.dpt').html(data)
onReadyNotasVides(); onReadyNotasVides();
} }
); );
} }
function getForm(_this) { function getForm(_this) {
var url = ''; var url = '';
var model = $(_this).attr('model'); var model = $(_this).attr('model');
var id_dispositivo = $('.dne-nota .dne-form').closest('.dne').attr('pk'); var id_dispositivo = $('.dne-nota .dne-form').closest('.dne').attr('pk');
if (id_dispositivo != null) { if (id_dispositivo != null) {
$('#dne'+id_dispositivo).removeClass('dne-nota'); $('#dne'+id_dispositivo).removeClass('dne-nota');
$('#dne'+id_dispositivo+' .dne-form').html(''); $('#dne'+id_dispositivo+' .dne-form').html('');
} }
if (_this.className.indexOf('create') >= 0 ) { if (_this.className.indexOf('create') >= 0 ) {
id_dispositivo = $(_this).attr('pk'); id_dispositivo = $(_this).attr('pk');
url = 'text/'+id_dispositivo+'/'+model+'/create'; url = 'text/'+id_dispositivo+'/'+model+'/create';
} }
else if (_this.className.indexOf('edit') >= 0 ) { else if (_this.className.indexOf('edit') >= 0 ) {
var id_edit = $(_this).attr('pk'); var id_edit = $(_this).attr('pk');
id_dispositivo = $(_this).closest('.dn').attr('pk'); id_dispositivo = $(_this).closest('.dn').attr('pk');
url = 'text/'+id_dispositivo+'/'+model+'/'+id_edit+'/edit' url = 'text/'+id_dispositivo+'/'+model+'/'+id_edit+'/edit'
} }
$('#dne'+id_dispositivo).addClass('dne-nota'); $('#dne'+id_dispositivo).addClass('dne-nota');
$.get(url).done(function( data ) { $.get(url).done(function( data ) {
$('#dne'+id_dispositivo+' .dne-form').html(data); $('#dne'+id_dispositivo+' .dne-form').html(data);
onEventsDneExec(id_dispositivo); onEventsDneExec(id_dispositivo, model);
}).fail(function() { }).fail(function() {
onReadyNotasVides(); onReadyNotasVides();
}); });
} }
function onReadyNotasVides() { function onReadyNotasVides() {
$('.dne-nota').removeClass('dne-nota'); $('.dne-nota').removeClass('dne-nota');
$('.dne-form').html(''); $('.dne-form').html('');
$('.dne .btn-action').off(); $('.dne .btn-action').off();
$('.dn .btn-action').off(); $('.dn .btn-action').off();
$('.dne .btn-action, .dn .btn-action').not('.btn-nota-delete').not('.btn-vide-delete').click(function(){ $('.dne .btn-action, .dn .btn-action').not('.btn-nota-delete').not('.btn-vide-delete').click(function(){
getForm(this); getForm(this);
}); });
$('.dn .btn-nota-delete, .dn .btn-vide-delete').click(function(){ $('.dn .btn-nota-delete, .dn .btn-vide-delete').click(function(){
onDelete(this); onDelete(this);
}); });
} }
$(document).ready(function() { $(document).ready(function() {
onReadyNotasVides() onReadyNotasVides()
}); });

116
static/js/compilacao_view.js

@ -24,23 +24,27 @@ function isElementInViewport (el) {
} }
function textoMultiVigente(item, diff) { function textoMultiVigente(item, diff) {
var elv = null; var elv = null;
var ldpts = $(".dptt") var ldpts = $(".dptt")
for (var i = 0; i < ldpts.length; i++) { for (var i = 0; i < ldpts.length; i++) {
if ($(ldpts[i]).hasClass('displaynone')) if ($(ldpts[i]).hasClass('displaynone'))
continue; continue;
if (isElementInViewport( ldpts[i])) { if (isElementInViewport( ldpts[i])) {
elv = ldpts[i]; if (i+1 < ldpts.length)
break; elv = ldpts[i+1];
} else {
} elv = ldpts[i];
}
$(".cp .tipo-vigencias a").removeClass("selected") break;
$(item).addClass("selected") }
$(".dptt.desativado").removeClass("displaynone"); }
$(".dtxt").removeClass("displaynone");
$(".dtxt.diff").remove(); $(".cp .tipo-vigencias a").removeClass("selected")
$(".link_alterador").removeClass("displaynone"); $(item).addClass("selected")
$(".dptt.desativado").removeClass("displaynone");
$(".dtxt").removeClass("displaynone");
$(".dtxt.diff").remove();
$(".link_alterador").removeClass("displaynone");
if (diff) { if (diff) {
$(".dtxt[id^='da'").each(function() { $(".dtxt[id^='da'").each(function() {
@ -99,61 +103,65 @@ function textoMultiVigente(item, diff) {
} }
if (elv) { if (elv) {
$('html, body').animate({ $('html, body').animate({
scrollTop: $(elv).parent().offset().top - 60 scrollTop: $(elv).parent().offset().top - 60
}, 0); }, 0);
} }
} }
function textoVigente(item, link) { function textoVigente(item, link) {
var elv = null; var elv = null;
var ldpts = $(".dptt") var ldpts = $(".dptt")
for (var i = 0; i < ldpts.length; i++) { for (var i = 0; i < ldpts.length; i++) {
if ($(ldpts[i]).hasClass('displaynone')) if ($(ldpts[i]).hasClass('displaynone'))
continue; continue;
if (isElementInViewport( ldpts[i])) { if (isElementInViewport( ldpts[i])) {
elv = ldpts[i]; if (i+1 < ldpts.length)
break; elv = ldpts[i+1];
} else {
} elv = ldpts[i];
}
$(".cp .tipo-vigencias a").removeClass("selected") break;
$(item).addClass("selected") }
}
$(".dptt.desativado").addClass("displaynone");
$(".link_alterador").removeClass("displaynone"); $(".cp .tipo-vigencias a").removeClass("selected")
if (!link) $(item).addClass("selected")
$(".link_alterador").addClass("displaynone");
$(".dptt.desativado").addClass("displaynone");
if (elv) { $(".link_alterador").removeClass("displaynone");
$('html, body').animate({ if (!link)
scrollTop: $(elv).parent().offset().top - 60 $(".link_alterador").addClass("displaynone");
}, 0);
if (elv) {
$('html, body').animate({
scrollTop: $(elv).parent().offset().top - 60
}, 0);
} }
} }
$(document).ready(function() { $(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({ $('html, body').animate({
scrollTop: $('#dptt' + href[1] ).offset().top - window.innerHeight / 9 scrollTop: $('#dptt' + href[1] ).offset().top - window.innerHeight / 9
}, 0); }, 0);
} }
}, 100); }, 100);
$("#btn_font_menos").click(function() { $("#btn_font_menos").click(function() {
$(".dpt").css("font-size", "-=1"); $(".dpt").css("font-size", "-=1");
}); });
$("#btn_font_mais").click(function() { $("#btn_font_mais").click(function() {
$(".dpt").css("font-size", "+=1"); $(".dpt").css("font-size", "+=1");
}); });
$(".dpt").each(function() { $(".dpt.bloco_alteracao .dpt").each(function() {
var nivel = parseInt($(this).attr('nivel')); var nivel = parseInt($(this).attr('nivel'));
$(this).css('z-index', 20-nivel) $(this).css('z-index', 15-nivel)
}); });
}); });

2254
static/styles/compilacao.scss

File diff suppressed because it is too large

21
templates/base.html

@ -154,9 +154,13 @@
{% endblock %} {% endblock %}
{% block title %} {% block title %}
{% if view.title %} <h1 class="page-header">
<h1 class="page-header">{{ view.title|linebreaksbr }}</h1> {% if view.title %}
{% endif %} {{ view.title|safe|linebreaksbr }}
{% else %}
{{ title|safe|linebreaksbr }}
{% endif %}
</h1>
{% endblock %} {% endblock %}
</div> </div>
@ -217,15 +221,18 @@
{% block foot_js %} {% block foot_js %}
<!-- Bootstrap core JavaScript ================================================== --> <!-- Bootstrap core JavaScript ================================================== -->
<!-- Placed at the end of the document so the pages load faster --> <!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script type="text/javascript" src="{% static 'jquery/dist/jquery.min.js' %}"></script>
<script type="text/javascript" src="{% static 'bootstrap-sass/assets/javascripts/bootstrap.min.js' %}"></script> <script type="text/javascript" src="{% static 'bootstrap-sass/assets/javascripts/bootstrap.min.js' %}"></script>
<script type="text/javascript" src="{% static 'jQuery-runner/build/jquery.runner.js' %}"></script>
<script type="text/javascript" src="{% static 'jquery-mask-plugin/dist/jquery.mask.js' %}"></script>
<script src="{% static 'jquery-ui/jquery-ui.min.js' %}"></script> <script type="text/javascript" src="{% static 'jquery-ui/jquery-ui.min.js' %}"></script>
<script type="text/javascript" src="{% static 'jquery-ui/ui/i18n/datepicker-pt-BR.js' %}"></script> <script type="text/javascript" src="{% static 'jquery-ui/ui/i18n/datepicker-pt-BR.js' %}"></script>
<script type="text/javascript" src="{% static 'jQuery-runner/build/jquery.runner.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 'js/app.js' %}"></script> <script type="text/javascript" src="{% static 'js/app.js' %}"></script>
{% block extra_js %}{% endblock %} {% block extra_js %}{% endblock %}

1
templates/compilacao/ajax_form.html

@ -1,3 +1,2 @@
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
<div class="btn-close-container"><div class="icon-close"></div></div>
{% crispy form form.helper%} {% crispy form form.helper%}

20
templates/compilacao/confirm_delete.html

@ -1,20 +0,0 @@
{% extends "base.html" %}
{% load i18n %}
{% block base_content %}
<form action="" method="post">{% csrf_token %}
<div class="callout panel text-center radius clearfix">
<p>
{% blocktrans %}
Confirma exclusão de <br/> "{{ object }}"?
{% endblocktrans %}
</p>
<div class="button-group">
<a href="{{ view.detail_url }}" class="button button radius alert">{% trans 'Cancelar' %}</a>
<input name="submit" value="{% trans 'Confirmar' %}" class="submit button button radius success" type="submit"></li>
</div>
</div>
</form>
{% endblock %}

61
templates/compilacao/dispositivo_search_fragment_form.html

@ -2,39 +2,38 @@
{% load compilacao_filters %} {% load compilacao_filters %}
{% if object_list.count >= 100 %} {% if object_list.count >= 100 %}
<div class="alert-box success radius"> <div class="alert-box success radius">
{% trans 'Use argumentos para simplificar listagem...' %} {% trans 'Use argumentos para simplificar listagem...' %}
</div> </div>
{% endif %} {% endif %}
{% for dpt in object_list %} {% for dpt in object_list %}
{% ifchanged dpt.ta%} {% ifchanged dpt.ta%}
{% if not forloop.first %}</ul>{% endif %} {% if not forloop.first %}</ul>{% endif %}
<div class="ta_title">{{dpt.ta}}</div> <div class="ta_title">{{dpt.ta}}</div>
<ul> <ul>
{% endifchanged %} {% endifchanged %}
{% if dpt.is_relative_auto_insert and dpt.dispositivo_pai.nivel != 0 %} {% if dpt.is_relative_auto_insert and dpt.dispositivo_pai.nivel != 0 %}
<li> <li>
<div class="iteminput"> <div class="iteminput">
<input type="{{request.GET.tipo_form}}" name="dispositivo_ref" id="r{{dpt.pk}}" value="{{dpt.pk}}"/> <input type="{{request.GET.tipo_form}}" name="dispositivo_ref" id="r{{dpt.pk}}" value="{{dpt.pk}}"/>
</div> </div>
<div class="itemlabel"> <div class="itemlabel">
<label for="r{{dpt.dispositivo_pai.pk}}">{{dpt.dispositivo_pai.rotulo|safe}} - {{dpt.texto|safe}}</label> <label for="r{{dpt.dispositivo_pai.pk}}">{{dpt.dispositivo_pai.rotulo|safe}} - {{dpt.texto|safe}}</label>
<a target="_blank" href="{% url 'ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% nomenclatura_heranca dpt 1 1 %}</a> <a target="_blank" href="{% url 'compilacao:ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% nomenclatura_heranca dpt 1 1 %}</a>
</div> </div>
</li> </li>
{% elif not dpt.tipo_dispositivo.dispositivo_de_articulacao %} {% elif not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<li> <li>
<div class="iteminput"> <div class="iteminput">
<input type="{{request.GET.tipo_form}}" name="dispositivo_ref" id="r{{dpt.pk}}" value="{{dpt.pk}}"/> <input type="{{request.GET.tipo_form}}" name="dispositivo_ref" id="r{{dpt.pk}}" value="{{dpt.pk}}"/>
</div> </div>
<div class="itemlabel"> <div class="itemlabel">
<label for="r{{dpt.pk}}">{{dpt.rotulo|safe}} - {{dpt.texto|safe}}</label> <label for="r{{dpt.pk}}">{{dpt.rotulo|safe}} - {{dpt.texto|safe}}</label>
<a target="_blank" href="{% url 'ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% nomenclatura_heranca dpt 1 1 %}</a> <a target="_blank" href="{% url 'compilacao:ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="nomenclatura_heranca">{% nomenclatura_heranca dpt 1 1 %}</a>
</div> </div>
</li> </li>
{% endif%} {% endif%}
{% if forloop.last %}</ul>{% endif %}
{% if forloop.last %}</ul>{% endif %}
{% endfor %} {% endfor %}

159
templates/compilacao/publicacao_detail.html

@ -1,92 +1,91 @@
{% extends "base.html" %} {% load i18n %} {% load compilacao_filters %} {% extends "base.html" %}
{% load i18n %}
{% load compilacao_filters %}
{% load common_tags %} {% load common_tags %}
{% block base_content %} {# FIXME is this the best markup to use? #} {% block base_content %}
<div class="clearfix"> <div class="clearfix">
{% block actions %} {% block actions %}
<ul class="button-group right">
<li><a href="{% url 'ta_pub_edit' object.ta.pk object.pk %}" class="button tiny">{% trans 'Editar' %}</a></li>
<li><a href="{% url 'ta_pub_delete' object.ta.pk object.pk %}" class="button alert tiny">{% trans 'Excluir' %}</a></li>
</ul>
{% endblock actions %}
<div class="actions btn-group pull-right" role="group"> <div class="actions btn-group pull-right" role="group">
{% block sections_nav %} <a href="{% url 'compilacao:ta_pub_edit' object.ta.pk object.pk %}" class="btn btn-default">{% trans 'Editar' %}</a>
{% endblock %} <a href="{% url 'compilacao:ta_pub_delete' object.ta.pk object.pk %}" class="btn btn-default">{% trans 'Excluir' %}</a>
</div> </div>
</div> {% endblock actions %}
</div>
<div class="actions btn-group pull-right" role="group">
{% block sections_nav %}
{% endblock %}
</div>
{% block detail_content %} {# TODO replace fieldset for something semantically correct, but with similar visual grouping style #} {% block detail_content %} {# TODO replace fieldset for something semantically correct, but with similar visual grouping style #}
<fieldset> <fieldset>
<legend>{%trans 'Identificação Básica'%}</legend> <legend>{%trans 'Identificação Básica'%}</legend>
<div class="row">
<div class="row"> <div class="col-md-4">
<div class="col-md-4"> <div id="div_id_tipo" class="holder">
<div id="div_id_tipo" class="holder"> <label>{% field_verbose_name object 'tipo_publicacao' %}</label>
<label>{% field_verbose_name object 'tipo_publicacao' %}</label> <p>{{ object.tipo_publicacao}}</p>
<p>{{ object.tipo_publicacao}}</p> </div>
</div>
</div>
<div class="col-md-6">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'veiculo_publicacao' %}</label>
<p>{{ object.veiculo_publicacao}}</p>
</div>
</div>
<div class="col-md-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'ano' %}</label>
<p>{{ object.ano}}</p>
</div>
</div>
</div> </div>
<div class="row"> <div class="col-md-6">
<div class="col-md-4"> <div id="div_id_tipo" class="holder">
<div id="div_id_tipo" class="holder"> <label>{% field_verbose_name object 'veiculo_publicacao' %}</label>
<label>{% field_verbose_name object 'data' %}</label> <p>{{ object.veiculo_publicacao}}</p>
<p>{{ object.data}}</p> </div>
</div>
</div>
<div class="col-md-4">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'hora' %}</label>
<p>{{ object.hora|time:"H:i:s"}}</p>
</div>
</div>
<div class="col-md-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'numero' %}</label>
<p>{{ object.numero|default:''}}</p>
</div>
</div>
<div class="col-md-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'edicao' %}</label>
<p>{{ object.edicao|default:''}}</p>
</div>
</div>
</div> </div>
<div class="row"> <div class="col-md-2">
<div class="col-md-2"> <div id="div_id_tipo" class="holder">
<div id="div_id_tipo" class="holder"> <label>{% field_verbose_name object 'ano' %}</label>
<label>{% field_verbose_name object 'pagina_inicio' %}</label> <p>{{ object.ano}}</p>
<p>{{ object.pagina_inicio|default:''}}</p> </div>
</div> </div>
</div> </div>
<div class="col-md-2"> <div class="row">
<div id="div_id_tipo" class="holder"> <div class="col-md-4">
<label>{% field_verbose_name object 'pagina_fim' %}</label> <div id="div_id_tipo" class="holder">
<p>{{ object.pagina_fim|default:''}}</p> <label>{% field_verbose_name object 'data' %}</label>
</div> <p>{{ object.data}}</p>
</div> </div>
<div class="col-md-8"> </div>
<div id="div_id_tipo" class="holder"> <div class="col-md-4">
<label>{% field_verbose_name object 'url_externa' %}</label> <div id="div_id_tipo" class="holder">
<p>{{ object.url_externa|default:''}}</p> <label>{% field_verbose_name object 'hora' %}</label>
</div> <p>{{ object.hora|time:"H:i:s"}}</p>
</div> </div>
</div> </div>
<div class="col-md-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'numero' %}</label>
<p>{{ object.numero|default:''}}</p>
</div>
</div>
<div class="col-md-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'edicao' %}</label>
<p>{{ object.edicao|default:''}}</p>
</div>
</div>
</div>
<div class="row">
<div class="col-md-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'pagina_inicio' %}</label>
<p>{{ object.pagina_inicio|default:''}}</p>
</div>
</div>
<div class="col-md-2">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'pagina_fim' %}</label>
<p>{{ object.pagina_fim|default:''}}</p>
</div>
</div>
<div class="col-md-8">
<div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'url_externa' %}</label>
<p>{{ object.url_externa|default:''}}</p>
</div>
</div>
</div>
</fieldset> </fieldset>
{% endblock detail_content %} {% endblock detail_content %}
{% endblock base_content %} {% endblock base_content %}

59
templates/compilacao/publicacao_list.html

@ -5,45 +5,44 @@
{% block base_content %} {% block base_content %}
<div class="actions btn-group pull-right" role="group"> <div class="actions btn-group pull-right" role="group">
<a href="{{ view.create_url }}" class="btn btn-default"> <a href="{{ view.create_url }}" class="btn btn-default">
{% trans 'Adicionar'%} {%model_verbose_name 'compilacao.models.Publicacao'%} {% trans 'Adicionar'%} {%model_verbose_name 'compilacao.models.Publicacao'%}
</a> </a>
{% block more_buttons %} <a href="{% url 'compilacao:ta_text' view.kwargs.ta_id %}" class="btn btn-default">
<a href="{% url 'ta_text' view.kwargs|lookup:'ta_id' %}" class="btn btn-default">{% trans 'Voltar' %}</a> {% trans 'Voltar' %}
</a>
</div>
{% endblock more_buttons %} {% if not object_list %}
</div> <p>{{ NO_ENTRIES_MSG }}</p>
{% else %}
{% if not object_list %} <table class="table">
<p>{{ NO_ENTRIES_MSG }}</p> <thead>
{% else %}
<table class="table">
<thead>
<tr> <tr>
<th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'data' %}</th> <th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'data' %}</th>
<th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'hora' %}</th> <th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'hora' %}</th>
<th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'numero' %}</th> <th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'numero' %}</th>
<th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'ano' %}</th> <th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'ano' %}</th>
<th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'edicao' %}</th> <th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'edicao' %}</th>
<th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'veiculo_publicacao' %}</th> <th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'veiculo_publicacao' %}</th>
<th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'tipo_publicacao' %}</th> <th>{% fieldclass_verbose_name 'compilacao.models.Publicacao' 'tipo_publicacao' %}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for pub in object_list %} {% for pub in object_list %}
<tr> <tr>
<td><a href="{% url 'ta_pub_detail' view.kwargs.ta_id pub.pk%}">{{ pub.data }}</a></td> <td><a href="{% url 'compilacao:ta_pub_detail' view.kwargs.ta_id pub.pk%}">{{ pub.data }}</a></td>
<td>{{ pub.hora|time:'H:i:s' }}</td> <td>{{ pub.hora|time:'H:i:s' }}</td>
<td>{{ pub.numero|default:'' }}</td> <td>{{ pub.numero|default:'' }}</td>
<td>{{ pub.ano|default:'' }}</td> <td>{{ pub.ano|default:'' }}</td>
<td>{{ pub.edicao|default:'' }}</td> <td>{{ pub.edicao|default:'' }}</td>
<td>{{ pub.veiculo_publicacao }}</td> <td>{{ pub.veiculo_publicacao }}</td>
<td>{{ pub.tipo_publicacao}}</td> <td>{{ pub.tipo_publicacao}}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
{%endif%} {%endif%}
{% include 'paginacao.html'%} {% include 'paginacao.html'%}
{% endblock %} {% endblock %}

34
templates/compilacao/text_edit.html

@ -6,26 +6,36 @@
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% load common_tags %} {% load common_tags %}
{% block head_content %}{{block.super}} {% block head_content %}{{block.super}}
<link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css"> <link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css">
<script type="text/javascript" src="{% static 'js/compilacao.js' %}"></script>
<script type="text/javascript" src="{% static 'js/compilacao_edit.js' %}"></script>
{% endblock %} {% endblock %}
{% block title%} {% block title%}
<h1><b>Edição:</b> {{ view.title }} - <i>{% trans 'Texto Multivigente' %}</i></h1> <h1><b>Edição:</b> {{ view.title }} - <i>{% trans 'Texto Multivigente' %}</i></h1>
{% endblock %} {% endblock %}
{% block base_content %}{{block.super}}
<div id="message_block"><div id="msg">{% trans 'Aguarde... Atualizando informações!!!'%}</div></div> <div id="message_block"><div id="msg">{% trans 'Aguarde... Atualizando informações!!!'%}</div></div>
{% block actions %}
<div class="clearfix">
<div class="actions btn-toolbar pull-right" role="toolbar">
<div class="actions btn-group" role="group">
<a href="{% url 'compilacao:ta_edit' object.pk %}" class="btn btn-default">{% trans 'Editar Metadados do Texto Articulado' %}</a>
</div>
{% include 'compilacao/textoarticulado_menu_config.html' %}
</div>
</div>
{% endblock actions %}
<div class="cpe"> {% block base_content %}{{block.super}}
{% include 'compilacao/text_edit_bloco.html'%}
</div> <div class="cp cpe">
{% include 'compilacao/text_edit_bloco.html'%}
</div>
{% endblock base_content %} {% endblock base_content %}
{% block foot_js %}
{{block.super}}
<script type="text/javascript" src="{% static 'js/compilacao.js' %}"></script>
<script type="text/javascript" src="{% static 'js/compilacao_edit.js' %}"></script>
{% endblock %}

239
templates/compilacao/text_edit_bloco.html

@ -3,133 +3,128 @@
{% load common_tags %} {% load common_tags %}
{% for dpt in object_list %} {% for dpt in object_list %}
{% if dpt.nivel == view.flag_nivel_old %} {% if dpt.nivel == view.flag_nivel_old %}
</div> </div>
{% elif dpt.nivel < view.flag_nivel_old %} {% elif dpt.nivel < view.flag_nivel_old %}
{% close_div view.flag_nivel_old dpt.nivel 0 %} {% close_div view.flag_nivel_old dpt.nivel 0 %}
{% endif%} {% endif%}
{% if forloop.first and view|isinst:'DispositivoEditView' %} {% if forloop.first and view|isinst:'DispositivoEditView' %}
{% else %} {% else %}
<div class="dpt" id="dpt{{dpt.pk}}" pk="{{dpt.pk}}"> <div class="dpt" id="dpt{{dpt.pk}}" pk="{{dpt.pk}}">
{% endif%} {% endif%}
{% if view|render_actions_head:dpt %}
{% if view|render_actions_head:dpt %} <div class="csform">
<div class="csform"> <form method="post" action="" action_ajax="{{dpt.pk}}/refresh">
<form method="post" action="" action_ajax="{{dpt.pk}}/refresh"> <ul class="btns-action actions_top">
<ul class="btns-action actions_top"> {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
{% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %} <li class="edt-textarea"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:textarea" title="{% trans 'Edição simples apenas do texto'%}">E</a></li>
<li class="edt-textarea"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:textarea" title="{% trans 'Edição simples apenas do texto'%}">E</a></li> <li class="edt-tinymce"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:tinymce" title="{% trans 'Editar o texto com TinyMCE'%}">E+</a></li>
<li class="edt-tinymce"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:tinymce" title="{% trans 'Editar o texto com TinyMCE'%}">E+</a></li> {%endif%}
{%endif%} <li class="edt-detail"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:detail" title="{% trans 'TODO: Edição detalhada'%}">E*</a></li>
<li class="edt-detail"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:detail" title="{% trans 'TODO: Edição detalhada'%}">E*</a></li> <li class="edt-construct"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:construct" title="{% trans 'Construçao da estrutura do Texto Articulado'%}">C</a></li>
<li class="edt-construct"><a class="btn-top btn-action" pk="{{dpt.pk}}" action="refresh:construct" title="{% trans 'Construçao da estrutura do Texto Articulado'%}">C</a></li> </ul>
</ul> <ul class="btns-action actions_right">
<ul class="btns-action actions_right"> <li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Reduzir nível do Dispositivo'%}">&#10092;</a></li>
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Reduzir nível do Dispositivo'%}">&#10092;</a></li> <li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Aumentar nível do Dispositivo'%}">&#10093;</a></li>
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Aumentar nível do Dispositivo'%}">&#10093;</a></li> <li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Subir uma posição'%}">&#8593;</a></li>
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Subir uma posição'%}">&#8593;</a></li> <li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Descer uma posição'%}">&#8595;</a></li>
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Descer uma posição'%}">&#8595;</a></li> <li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Subir uma posição com todos os subniveis'%}">&#8648;</a></li>
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Subir uma posição com todos os subniveis'%}">&#8648;</a></li> <li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Descer uma posição com todos os subniveis'%}">&#8650;</a></li>
<li><a class="btn-right btn-action" pk="{{dpt.pk}}" action="refresh" title="{% trans 'TODO: Descer uma posição com todos os subniveis'%}">&#8650;</a></li> </ul>
</ul>
<ul class="btns-action actions_left">
<ul class="btns-action actions_left"> <li><a href ="{% url 'compilacao:ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="btn-left btn-action" pk="{{dpt.pk}}" title="{% trans 'Ir para Texto'%}">T</a></li>
<li><a href ="{% url 'ta_text' dpt.ta.pk%}#{{dpt.pk}}" class="btn-left btn-action" pk="{{dpt.pk}}" title="{% trans 'Ir para Texto'%}">T</a></li> </ul>
</ul> <ul class="btns-action actions_bottom">
<ul class="btns-action actions_bottom"> {% for perfil in perfil_estrutural_list%}
{% for perfil in perfil_estrutural_list%} <li class="{%if request.session.perfil_estrutural == perfil.pk%}selected{%endif%}"><a class="btn-bottom btn-action" pk="{{dpt.pk}}" perfil_pk="{{perfil.pk}}" action="refresh:perfil" title="{{perfil.nome}}">{{perfil.sigla}}</a></li>
<li class="{%if request.session.perfil_estrutural == perfil.pk%}selected{%endif%}"><a class="btn-bottom btn-action" pk="{{dpt.pk}}" perfil_pk="{{perfil.pk}}" action="refresh:perfil" title="{{perfil.nome}}">{{perfil.sigla}}</a></li> {% endfor %}
{% endfor %} </ul>
</ul>
<ul class="actions_inserts {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}menu_flutuante{%endif%}">
<ul class="actions_inserts {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}menu_flutuante{%endif%}"> {% if dpt.dispositivo_subsequente == None %}
{% if dpt.dispositivo_subsequente == None %} {% for inserts in view|select_provaveis_inserts:request %}
{% for inserts in view|select_provaveis_inserts:request %} <li class="{{inserts.action}}"><a class="btn-inserts" action="" pk="{{dpt.pk}}">{{inserts.icone|safe}}<span>{{inserts.tipo_insert}}</span></a>
<li class="{{inserts|lookup:'action'}}"><a class="btn-inserts" action="" pk="{{dpt.pk}}">{{inserts|lookup:'icone'|safe}}<span>{{inserts|lookup:'tipo_insert'}}</span></a> <ul id="afe{{dpt.id}}" >
<ul id="afe{{dpt.id}}" > {% for item in inserts.itens %}
{% for item in inserts|lookup:'itens' %} <li><a class="btn-inserts btn-action" action="{{inserts|lookup:'action'}}" pk="{{item.dispositivo_base}}" variacao="{{item.variacao}}" tipo_pk="{{item.tipo_pk}}">{{item.provavel}}</a></li>
<li><a class="btn-inserts btn-action" action="{{inserts|lookup:'action'}}" pk="{{item|lookup:'dispositivo_base'}}" variacao="{{item|lookup:'variacao'}}" tipo_pk="{{item|lookup:'tipo_pk'}}">{{item|lookup:'provavel'}}</a></li> {% endfor %}
{% endfor %} </ul>
</ul> </li>
</li> {% endfor %}
{% endfor %} {%endif%}
{%endif%}
{% if not dpt|is_relative_auto_insert:request %}
<li class="menu_excluir"><a {% if not dpt.dispositivos_filhos_set.exists %}class="btn-excluir btn-action" action="delete_item_dispositivo" pk={{dpt.pk}}{%else%}class="btn-excluir"{%endif%}>&nbsp;<span>Excluir</span></a>
{% if not dpt|is_relative_auto_insert:request %} {% if dpt.dispositivos_filhos_set.exists %}
<li class="menu_excluir"><a {% if not dpt.dispositivos_filhos_set.exists %}class="btn-excluir btn-action" action="delete_item_dispositivo" pk={{dpt.pk}}{%else%}class="btn-excluir"{%endif%}>&nbsp;<span>Excluir</span></a> <ul>
{% if dpt.dispositivos_filhos_set.exists %} <li><a href="#" class="btn-excluir btn-action" action="delete_item_dispositivo_todo" pk={{dpt.pk}}>TODO: Excluir apenas este dispositivo</a></li>
<ul> <li><a href="#" class="btn-excluir btn-action" action="delete_bloco_dispositivo" pk={{dpt.pk}}>Excluir toda a estrutura deste dispositivo</a></li>
<li><a href="#" class="btn-excluir btn-action" action="delete_item_dispositivo_todo" pk={{dpt.pk}}>TODO: Excluir apenas este dispositivo</a></li> </ul>
<li><a href="#" class="btn-excluir btn-action" action="delete_bloco_dispositivo" pk={{dpt.pk}}>Excluir toda a estrutura deste dispositivo</a></li> {% endif %}
</ul> </li>
{% endif %} {% endif %}
</li>
{% endif %} <li><a onclick="onSubmitEditForm()" class="btn-salvar">&nbsp<span>Salvar</span></a></li>
</ul>
<li><a onclick="onSubmitEditForm()" class="btn-salvar">&nbsp<span>Salvar</span></a></li>
</ul> <div class="fields">
{% csrf_token %}
<div class="fields">
{% csrf_token %} {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
<textarea id="editdi_texto" placeholder="{% trans "Insirir o texto do dispositivo aqui... Use, nos menus das bordas de edição, 'E+' ou 'E*' para outras opções de editores."%}" name="texto" rows="7">{{ dpt.texto|safe }}</textarea>
{%endif%}
{% if not dpt.tipo_dispositivo.dispositivo_de_articulacao %} </div>
<textarea id="editdi_texto" placeholder="{% trans "Insirir o texto do dispositivo aqui... Use, nos menus das bordas de edição, 'E+' ou 'E*' para outras opções de editores."%}" name="texto" rows="7">{{ dpt.texto|safe }}</textarea>
{%endif%} <ul class="label_status" >
<li>Ordem: {{dpt.ordem}}, Nivel: {{dpt.nivel}}, Número: {{dpt.get_numero_completo}}</li>
</div> <li><a>.</a></li>
</ul>
<ul class="label_status" >
<li>Ordem: {{dpt.ordem}}, Nivel: {{dpt.nivel}}, Número: {{dpt.get_numero_completo}}</li> <ul class="btns-action actions_parents">
<li><a>.</a></li> <div>Em Edição:</div>
</ul> {%for parent in dpt.get_parents_asc %}
<li><a action="refresh" pk="{{parent.pk}}" ordem="{{parent.ordem}}" name="{{parent.pk}}" title="{{parent.texto|short_string:50}}" class="btn-parents btn-action">{{parent|nomenclatura}}</a></li>
<ul class="btns-action actions_parents"> {%endfor %}
<div>Em Edição:</div> <li class="selected"><a action="refresh" pk="{{dpt.pk}}" ordem="{{dpt.ordem}}" name="{{dpt.pk}}" title="{{dpt.texto|short_string:50}}" class="btn-parents btn-action">{{dpt|nomenclatura}}</a></li>
{%for parent in dpt.get_parents_asc %} </ul>
<li><a action="refresh" pk="{{parent.pk}}" ordem="{{parent.ordem}}" name="{{parent.pk}}" title="{{parent.texto|short_string:50}}" class="btn-parents btn-action">{{parent|nomenclatura}}</a></li> </form>
{%endfor %}
<li class="selected"><a action="refresh" pk="{{dpt.pk}}" ordem="{{dpt.ordem}}" name="{{dpt.pk}}" title="{{dpt.texto|short_string:50}}" class="btn-parents btn-action">{{dpt|nomenclatura}}</a></li>
</ul>
</form>
</div> </div>
{% endif%} {% endif%}
{% if view.pk_view == 0 and view.pk_edit == 0 or view.pk_edit != view.pk_view %} {% if view.pk_view == 0 and view.pk_edit == 0 or view.pk_edit != view.pk_view %}
{% if not dpt.rotulo and not dpt.texto %}
{% if not dpt.rotulo and not dpt.texto %} <div class="btns-action actions_left">
<div class="btns-action actions_left"> <a class="btn-edit" pk="{{dpt.pk}}" title="Edição do dispositivo: {{ dpt.tipo_dispositivo.nome }} {{ dpt.rotulo }}">E</a>
<a class="btn-edit" pk="{{dpt.pk}}" title="Edição do dispositivo: {{ dpt.tipo_dispositivo.nome }} {{ dpt.rotulo }}">E</a> </div>
</div> {% endif %}
{% endif %} <div class="bloco {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %} {{ dpt.tipo_dispositivo.class_css }}">
<div class="bloco {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %} {{ dpt.tipo_dispositivo.class_css }}"> {% spaceless %}
{% spaceless %} <div class="de" id="id{{dpt.id}}" pk="{{dpt.pk}}" ordem="{{dpt.ordem}}" name="{{dpt.pk}}" title="{{dpt.pk}}">{{ 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.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> {% 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="compilacao:ta_text_edit' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
<a class="link_alterador" href="{%url '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 %} {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }} </a>
</a> {% endif %}
{% endif %} {% endspaceless %}
{% endspaceless %} {% if view.is_ta_alterador and dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%}
{% if view.is_ta_alterador and dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%} {%with node=dpt template_name='compilacao/text_edit_blocoalteracao.html' %}
{%with node=dpt template_name='compilacao/text_edit_blocoalteracao.html' %} {%include template_name%}
{%include template_name%} {%endwith%}
{%endwith%} {% endif%}
{% endif%} </div>
</div> {% endif%}
{% endif%}
{% set_nivel_old view dpt.nivel %} {% set_nivel_old view dpt.nivel %}
{% endfor %} {% endfor %}
{% if view|isinst:'DispositivoEditView' %} {% if view|isinst:'DispositivoEditView' %}
{% close_div view.flag_nivel_old view.flag_nivel_ini -1 %} {% close_div view.flag_nivel_old view.flag_nivel_ini -1 %}
{% else %} {% else %}
{% close_div view.flag_nivel_old view.flag_nivel_ini 0 %} {% close_div view.flag_nivel_old view.flag_nivel_ini 0 %}
{% endif%} {% endif%}

14
templates/compilacao/text_edit_blocoalteracao.html

@ -1,11 +1,11 @@
{% load compilacao_filters %} {% load compilacao_filters %}
{% load common_tags %} {% load common_tags %}
{% for ch in dpt.pk|get_bloco_atualizador %} {% for ch in dpt.pk|get_bloco_atualizador %}
{% spaceless %} {% spaceless %}
<div class="dpt" id="d{{ch.id}}"> <div class="dpt" id="d{{ch.id}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}"> <div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}">
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{%url 'ta_text_edit' ch.ta.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} {{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="compilacao:ta_text_edit' ch.ta.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }}
</div> </div>
</div> </div>
{% endspaceless %} {% endspaceless %}
{% endfor %} {% endfor %}

178
templates/compilacao/text_list.html

@ -5,94 +5,102 @@
{% load staticfiles %} {% load staticfiles %}
{% load sass_tags %} {% load sass_tags %}
{% block head_content %}{{block.super}} {% block head_content %}
<link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css"> {{block.super}}
<script type="text/javascript" src="{% static 'jsdiff/diff.min.js' %}"></script> <link rel="stylesheet" href="{% sass_src 'styles/compilacao.scss' %}" type="text/css">
<script type="text/javascript" src="{% static 'js/compilacao.js' %}"></script>
<script type="text/javascript" src="{% static 'js/compilacao_view.js' %}"></script>
{% if perms.compilacao.add_nota %}
<script type="text/javascript" src="{% static 'js/compilacao_notas.js' %}"></script>
{% endif %}
{% endblock %} {% endblock %}
{% block base_content %}
{% block actions %}
{% block base_content %}{{block.super}} <div class="clearfix">
<div class="actions btn-group pull-right" role="group">
<div class="cp"> <a href="{% url 'compilacao:ta_text_edit' object.pk %}" class="btn btn-default">{% trans 'Editar Texto' %}</a>
{% if object_list %} </div>
<ul class="button-group right"> </div>
<li><a class="button tiny" id="btn_font_menos" title="Diminuir tamanho da letra">a</a></li> {% endblock actions %}
<li><a class="button tiny" id="btn_font_mais" title="Aumentar tamanho da Letra">A</a></li>
{% block detail_content %}
{{block.super}}
{% endblock %}
<div class="cp">
{% if object_list %}
<div class="clearfix">
<div class="actions btn-group pull-right" role="group">
<a class="btn btn-default" id="btn_font_menos" title="Diminuir tamanho da letra">a</a>
<a class="btn btn-default" id="btn_font_mais" title="Aumentar tamanho da Letra">A</a>
</div>
</div>
{% endif %}
{% for key, values in view.get_vigencias.items %}
{% if forloop.first %}
<ul class="nav nav-pills cp-vigencias">
{% for dispositivo in values %}
<li class="{% if view.inicio_vigencia == dispositivo.inicio_vigencia %}active{%endif%}">
<a href="{%url 'compilacao:ta_vigencia' dispositivo.ta_id dispositivo|get_sign_vigencia %}" title="{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}">{% trans 'Texto Original'%}</a>
</li>
{% endfor %}
{% elif forloop.last %}
{% for dispositivo in values %}
<li class="{% if not view.inicio_vigencia%}active{% endif %}">
<a href="{%url 'compilacao:ta_text' dispositivo.ta_id %}" title="{% trans 'Compilação atual'%}.&#013;{% trans 'Vigência a partir de'%} {{dispositivo.inicio_vigencia}}&#013;{% if dispositivo.ta_publicado_id in ta_pub_list %}{{ ta_pub_list|lookup:dispositivo.ta_publicado_id }}{%else%}{{dispositivo.ta_publicado}}{%endif%}">{% trans 'Texto Atual'%}</a>
</li>
{% if forloop.parentloop.last %}
</ul>
{% if view.inicio_vigencia and view.fim_vigencia %}
<span class="vigencia-active">
{% blocktrans with inicio_vigencia=view.inicio_vigencia fim_vigencia=view.fim_vigencia ta_publicado=dispositivo.ta_publicado%}
Vigência entre <b>{{inicio_vigencia}}</b> e <b>{{fim_vigencia}}</b>.
<br>
<small>Dada pela {{ta_publicado}}</small>
</span>
{% endblocktrans%}
{% else%}
<span class="vigencia-active">
{% blocktrans with inicio_vigencia=dispositivo.inicio_vigencia ta_publicado=dispositivo.ta_publicado%}
Vigência a partir de <b>{{inicio_vigencia}}</b>.
<br>
<small>Dada pela {{ta_publicado}}</small>
{% endblocktrans %}
</span>
{%endif%}
{% endif%}
{% endfor %}
{% else %}
<li class="{% if values.inicio_vigencia.year == key %}active{% endif %}"><a data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">{{ key }}</a>
<ul class="dropdown-menu">
{% for dispositivo in values %}
<li>
{% if not forloop.parentloop.first %}
<a href="{%url 'compilacao:ta_vigencia' dispositivo.ta_id dispositivo|get_sign_vigencia %}" title="{% if dispositivo.ta_publicado_id in ta_pub_list%}{{ ta_pub_list|lookup:dispositivo.ta_publicado_id }}{%else%}{{dispositivo.ta_publicado}}{%endif%}">{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}</a>
{% endif %}
</li>
{% endfor %}
</ul> </ul>
{% endif %} </li>
{% endif %}
{% for key, values in view.get_vigencias.items %} {% endfor %}
{% if forloop.first %}
<section class="vigencias"> <ul class="tipo-vigencias">
<nav class="top-bar" data-topbar="" role="navigation"> <li><a class="selected" onclick="textoMultiVigente(this, false);" title="{% trans 'Texto Multivigente Sequencial'%}">{% trans 'TMS'%}</a></li>
<section class="top-bar-section"> <li><a onclick="textoMultiVigente(this, true);" title="{% trans 'Texto Multivigente Integrado com Realce de Alterações'%}">{% trans 'TMI'%}</a></li>
<ul class="nav left"> <li><a onclick="textoVigente(this, true);" title="{% trans 'Texto Vigente COM Links para Textos Alteradores'%}">{% trans 'TVL'%}</a></li>
{%endif%} <li><a onclick="textoVigente(this, false);" title="{% trans 'Texto Vigente'%}">{% trans 'TVT'%}</a></li>
<li class="nav__item has-dropdown"> </ul>
{% if forloop.first %}
{% for dispositivo in values %} {% include 'compilacao/text_list_bloco.html'%}
<a class="nav__link {% if view.inicio_vigencia == dispositivo.inicio_vigencia %}selected{%endif%}" href="{%url 'ta_vigencia' dispositivo.ta.pk dispositivo|get_sign_vigencia %}" title="{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}">{% trans 'Texto Original'%}</a> </div>
{% endfor %} {% endblock base_content %}
{% elif forloop.last %}
{% for dispositivo in values %}
<a class="nav__link {% if view.inicio_vigencia == None %}selected{%endif%}" href="{%url 'ta_text' dispositivo.ta.pk %}" title="{% trans 'Compilação atual'%}.&#013;{% trans 'Vigência a partir de'%} {{dispositivo.inicio_vigencia}}&#013;{{dispositivo.ta_publicado}}">{% trans 'Texto Atual'%}</a>
{% endfor %}
{% else %}
<a class="nav__link {% if view.inicio_vigencia.year == key %}selected{%endif%}">{{ key }}</a>
{%endif%}
{% if not forloop.first and not forloop.last %}
<ul class="nav__sub-nav dropdown">
{% for dispositivo in values %}
<li class="nav__sub-item">
{% if not forloop.parentloop.first %}
<a class="nav__sub-link" href="{%url 'ta_vigencia' dispositivo.ta.pk dispositivo|get_sign_vigencia %}" title="{{ dispositivo.ta_publicado }}">{% trans 'Vigência entre'%} {{dispositivo.inicio_vigencia}} {% trans 'e'%} {{dispositivo.fim_vigencia}}</a>
{%endif%}
</li>
{% endfor %}
</ul>
{%endif%}
</li>
{% if forloop.last %}
</ul>
{% comment %}
<ul class="nav left tipo-vigencias">
<li><a class="selected" onclick="textoMultiVigente(this);" title="">{% trans 'Texto Multivigente'%}</a></li>
<li><a onclick="textoVigente(this, true);">{% trans 'Texto Vigente COM Links para Textos Alteradores'%}</a></li>
<li><a onclick="textoVigente(this, false);">{% trans 'Texto Vigente SEM Links para Textos Alteradores'%}</a></li>
</ul>
{% endcomment %}
<ul class="tipo-vigencias">
<li><a class="selected" onclick="textoMultiVigente(this, false);" title="{% trans 'Texto Multivigente Sequencial'%}">{% trans 'TMS'%}</a></li>
<li><a onclick="textoMultiVigente(this, true);" title="{% trans 'Texto Multivigente Integrado com Realce de Alterações'%}">{% trans 'TMI'%}</a></li>
<li><a onclick="textoVigente(this, true);" title="{% trans 'Texto Vigente COM Links para Textos Alteradores'%}">{% trans 'TVL'%}</a></li>
<li><a onclick="textoVigente(this, false);" title="{% trans 'Texto Vigente'%}">{% trans 'TVT'%}</a></li>
</ul>
</section>
</nav>
</section>
{%endif%}
{% endfor %}
<br>
{% if view.inicio_vigencia != None and view.fim_vigencia != None %}
{% trans 'Vigência entre'%} <b>{{view.inicio_vigencia}}</b> {% trans 'e'%} <b>{{view.fim_vigencia}}</b>.
{%endif%}
{% include 'compilacao/text_list_bloco.html'%} {% block foot_js %}
</div> {{block.super}}
{% endblock base_content %} <script type="text/javascript" src="{% static 'js/compilacao.js' %}"></script>
<script type="text/javascript" src="{% static 'js/compilacao_view.js' %}"></script>
{% if perms.compilacao.add_nota %}
<script type="text/javascript" src="{% static 'js/compilacao_notas.js' %}"></script>
{% endif %}
{% endblock %}

305
templates/compilacao/text_list_bloco.html

@ -2,166 +2,177 @@
{% load compilacao_filters %} {% load compilacao_filters %}
{% load common_tags %} {% load common_tags %}
<div class="display"></div>
{% for dpt in object_list %} {% for dpt in object_list %}
{% if dpt.nivel == view.flag_nivel_old %} {% if dpt.nivel == view.flag_nivel_old %}
</div> </div>
{% elif dpt.nivel < view.flag_nivel_old %} {% elif dpt.nivel < view.flag_nivel_old %}
{% close_div view.flag_nivel_old dpt.nivel 0 %} {% close_div view.flag_nivel_old dpt.nivel 0 %}
{% endif%} {% endif%}
{% if forloop.first and view|isinst:'DispositivoView' %} {% if forloop.first and view|isinst:'DispositivoView' %}
{% else %} {% else %}
<div class="dpt {%if dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%}bloco_alteracao{%endif%}" nivel="{{dpt.nivel}}"> <div class="dpt {%if dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%}bloco_alteracao{% endif %}" nivel="{{dpt.nivel}}">
{% endif%} {% endif%}
{% spaceless %} {% spaceless %}
<div class="{{ dpt.tipo_dispositivo.class_css }}"> <div class="{{ dpt.tipo_dispositivo.class_css }}">
<div class="dptt {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %}" id="dptt{{dpt.pk}}" > <div class="dptt {% dispositivo_desativado dpt view.inicio_vigencia view.fim_vigencia %}" id="dptt{{dpt.pk}}" >
{{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{dpt.pk}}" title="{{dpt.pk}}">{{ dpt.rotulo }}</a>{{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}<span class="dtxt" id="d{% if not dpt.dispositivo_subsequente and dpt.dispositivo_substituido %}a{%endif%}{{dpt.pk}}" pks="{{dpt.dispositivo_substituido.pk}}" pk="{{dpt.pk}}">{{ dpt.tipo_dispositivo.texto_prefixo_html|safe }}{%if dpt.texto%}{{ dpt.texto|safe }}{%else%}&nbsp;{%endif%}</span> {{ dpt.tipo_dispositivo.rotulo_prefixo_html|safe }}
{% if dpt.ta_publicado_id != None and not dpt.tipo_dispositivo.dispositivo_de_articulacao %} <a name="{{dpt.pk}}" title="{{dpt.pk}}">{{ dpt.rotulo }}</a>
<a class="link_alterador" href="{%url 'ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}"> {{ dpt.tipo_dispositivo.rotulo_sufixo_html|safe }}
{{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }} <span class="dtxt" id="d{% if not dpt.dispositivo_subsequente_id and dpt.dispositivo_substituido_id %}a{% endif %}{{dpt.pk}}" 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>
{% nota_automatica dpt %} {% if dpt.ta_publicado_id and not dpt.tipo_dispositivo.dispositivo_de_articulacao %}
{{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }} <a class="link_alterador" href="{%url 'compilacao:ta_text' dpt.ta_publicado.pk %}#{{dpt.dispositivo_atualizador_id}}">
</a> {{ dpt.tipo_dispositivo.nota_automatica_prefixo_html|safe }}
{% endif %} {% nota_automatica dpt ta_pub_list %}
{% if user.is_authenticated and not dpt.tipo_dispositivo.dispositivo_de_articulacao%} {{ dpt.tipo_dispositivo.nota_automatica_sufixo_html|safe }}
{% if perms.compilacao.add_nota or perms.compilacao.add_vide or perms.compilacao.change_dispositivo%} </a>
<div class="dne" id="dne{{dpt.pk}}" pk="{{dpt.pk}}">{# TODO: User - dne - Dispostivo Nota Editor - tratar permissão de usuário#} {% endif %}
<ul class="btns-action"> {% if user.is_authenticated and not dpt.tipo_dispositivo.dispositivo_de_articulacao%}
{% if perms.compilacao.change_dispositivo %}<li><a href = "{% url 'ta_text_edit' dpt.ta.pk%}#{{dpt.pk}}" class="btn-action" title="{% trans 'Editar Dispositivo'%}">Ed</a></li>{% endif %} {% if perms.compilacao.add_nota or perms.compilacao.add_vide or perms.compilacao.change_dispositivo%}
{% if perms.compilacao.add_nota %}<li><a class="btn-action btn-nota-create" model="nota" pk="{{dpt.pk}}" title="{% trans 'Adicionar Nota'%}">N</a></li>{% endif %} <div class="dne" id="dne{{dpt.pk}}" pk="{{dpt.pk}}">
{% if perms.compilacao.add_vide %}<li><a class="btn-action btn-vide-create" model="vide" pk="{{dpt.pk}}" title="{% trans 'Adicionar Vide'%}">V</a></li>{% endif %} <ul class="btns-action">
</ul> {% if perms.compilacao.change_dispositivo %}<li><a href = "{% url 'compilacao:ta_text_edit' dpt.ta.pk%}#{{dpt.pk}}" class="btn-action" title="{% trans 'Editar Dispositivo'%}">Ed</a></li>{% endif %}
<div class="dne-form"></div> {% if perms.compilacao.add_nota %}<li><a class="btn-action btn-nota-create" model="nota" pk="{{dpt.pk}}" title="{% trans 'Adicionar Nota'%}">N</a></li>{% endif %}
</div> {% if perms.compilacao.add_vide %}<li><a class="btn-action btn-vide-create" model="vide" pk="{{dpt.pk}}" title="{% trans 'Adicionar Vide'%}">V</a></li>{% endif %}
{% endif %} </ul>
{% endif%} <div class="dne-form clearfix"></div>
</div> </div>
{% endif %}
{% endif %}
</div>
{% if not dpt.tipo_dispositivo.dispositivo_de_articulacao%} {% if not dpt.tipo_dispositivo.dispositivo_de_articulacao%}
<div class="dn" id="dn{{dpt.pk}}" pk="{{dpt.pk}}">{# Dispostivo Nota e Vides #} <div class="dn" id="dn{{dpt.pk}}" pk="{{dpt.pk}}">{# Dispostivo Nota e Vides #}
<ul class="dnl">{# Dispostivo Nota Lista#} <ul class="dnl">{# Dispostivo Nota Lista#}
{% if cita and cita|lookup:dpt.pk %}
{% for vide in cita|lookup:dpt.pk %}
{% if cita and cita|lookup:dpt.pk %} {%if not forloop.first %}
{% for vide in cita|lookup:dpt.pk %} <li class="bullet">&#8226;</li>
{% endif %}
<li class="dnli" id="nt{{vide.pk}}">
{%if not forloop.first %}<li class="bullet">&#8226;</li>{%endif%} <ul>
<li class="dnli" id="nt{{vide.pk}}"> {% if user.is_authenticated %}
{% if perms.compilacao.change_vide %}
<li><a class="btn-action btn-vide-edit" model="vide" pk="{{vide.pk}}">Editar</a></li>
<li class="bullet">&#8226;</li>
{% endif %}
{% if perms.compilacao.delete_vide %}
<li><a class="btn-action btn-vide-delete" model="vide" pk="{{vide.pk}}">Excluir</a></li>
<li class="bullet">&#8226;</li>
{% endif %}
{% endif %}
<li class="ntipo">{{vide.tipo.nome}}</li>
<li class="bullet">&#8226;</li>
<li class="npublicacao" title="{% trans 'Data de Criação'%}">{{vide.created|date:"d M Y"}}</li>
</ul>
<div class="ntitulo">Vide: </div>
<div class="ntexto">
{% if vide.dispositivo_ref.dispositivo_pai.nivel != 0 and vide.dispositivo_ref.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao %}
<a href="{%url 'compilacao:ta_text' vide.dispositivo_ref.dispositivo_pai.ta.pk%}#{{vide.dispositivo_ref.dispositivo_pai.pk }}">{{ vide.dispositivo_ref.dispositivo_pai}}</a>
{% else %}
<a href="{%url 'compilacao:ta_text' vide.dispositivo_ref.ta.pk%}#{{vide.dispositivo_ref.pk }}">{{ vide.dispositivo_ref}}</a>
{% endif %}
{% if vide.texto %} - {{vide.texto}}{% endif %}
</div>
</li>
{% endfor %}
{% endif %}
<ul> {% if citado and citado|lookup:dpt.pk %}
{% if user.is_authenticated %} {% if cita and cita|lookup:dpt.pk %}
{% if perms.compilacao.change_vide %} <li class="bullet">&#8226;</li>
<li><a class="btn-action btn-vide-edit" model="vide" pk="{{vide.pk}}">Editar</a></li> {% endif %}
<li class="bullet">&#8226;</li>
{%endif%}
{% if perms.compilacao.delete_vide %}
<li><a class="btn-action btn-vide-delete" model="vide" pk="{{vide.pk}}">Excluir</a></li>
<li class="bullet">&#8226;</li>
{%endif%}
{% endif %}
<li class="ntipo">{{vide.tipo.nome}}</li>
<li class="bullet">&#8226;</li>
<li class="npublicacao" title="{% trans 'Data de Criação'%}">{{vide.created|date:"d M Y"}}</li>
</ul>
<div class="ntitulo">Vide: </div>
<div class="ntexto">
{% if vide.dispositivo_ref.dispositivo_pai.nivel != 0 and vide.dispositivo_ref.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao %}
<a href="{%url 'ta_text' vide.dispositivo_ref.dispositivo_pai.ta.pk%}#{{vide.dispositivo_ref.dispositivo_pai.pk }}">{{ vide.dispositivo_ref.dispositivo_pai}}</a>
{% else %}
<a href="{%url 'ta_text' vide.dispositivo_ref.ta.pk%}#{{vide.dispositivo_ref.pk }}">{{ vide.dispositivo_ref}}</a>
{% endif %}
{% if vide.texto %} - {{vide.texto}}{% endif %}
</div>
</li>
{% endfor %}
{% endif %}
{% if citado and citado|lookup:dpt.pk %} {% for vide in citado|lookup:dpt.pk %}
{% if cita and cita|lookup:dpt.pk %}<li class="bullet">&#8226;</li>{%endif%} {%if not forloop.first %}
{% for vide in citado|lookup:dpt.pk %} <li class="bullet">&#8226;</li>
{%if not forloop.first %}<li class="bullet">&#8226;</li>{%endif%} {% endif %}
<li class="dnli" id="nt{{vide.pk}}"> <li class="dnli" id="nt{{vide.pk}}">
<ul> <ul>
<li class="ntipo">{{vide.tipo.nome}}</li> <li class="ntipo">{{vide.tipo.nome}}</li>
<li class="bullet">&#8226;</li> <li class="bullet">&#8226;</li>
<li class="npublicacao" title="{% trans 'Data de Criação'%}">{{vide.created|date:"d M Y"}}</li> <li class="npublicacao" title="{% trans 'Data de Criação'%}">{{vide.created|date:"d M Y"}}</li>
</ul> </ul>
<div class="ntitulo">Citado em: </div> <div class="ntitulo">Citado em: </div>
<div class="ntexto"> <div class="ntexto">
{% if vide.dispositivo_base.dispositivo_pai.nivel != 0 and vide.dispositivo_base.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao%} {% if vide.dispositivo_base.dispositivo_pai.nivel != 0 and vide.dispositivo_base.dispositivo_pai.tipo_dispositivo.dispositivo_de_articulacao%}
<a href="{%url 'ta_text' vide.dispositivo_base.dispositivo_pai.ta.pk%}#{{vide.dispositivo_base.dispositivo_pai.pk }}">{{ vide.dispositivo_base.dispositivo_pai}}</a> <a href="{%url 'compilacao:ta_text' vide.dispositivo_base.dispositivo_pai.ta.pk%}#{{vide.dispositivo_base.dispositivo_pai.pk }}">{{ vide.dispositivo_base.dispositivo_pai}}</a>
{% else %} {% else %}
<a href="{%url 'ta_text' vide.dispositivo_base.ta.pk%}#{{vide.dispositivo_base.pk }}">{{ vide.dispositivo_base}}</a> <a href="{%url 'compilacao:ta_text' vide.dispositivo_base.ta.pk%}#{{vide.dispositivo_base.pk }}">{{ vide.dispositivo_base}}</a>
{% endif %} {% endif %}
{% if vide.texto %} - {{vide.texto}}{% endif %} {% if vide.texto %} - {{vide.texto}}{% endif %}
</div> </div>
</li> </li>
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{%if notas and notas|lookup:dpt.pk and cita and cita|lookup:dpt.pk or notas and notas|lookup:dpt.pk and citado and citado|lookup:dpt.pk %}<li class="bullet">&#8226;</li>{%endif%} {%if notas and notas|lookup:dpt.pk and cita and cita|lookup:dpt.pk or notas and notas|lookup:dpt.pk and citado and citado|lookup:dpt.pk %}
{% if notas and notas|lookup:dpt.pk %} <li class="bullet">&#8226;</li>
{% for nota in notas|lookup:dpt.pk %} {% endif %}
{% if notas and notas|lookup:dpt.pk %}
{% for nota in notas|lookup:dpt.pk %}
{% if user.is_superuser or nota.publicidade == nota.NPUBL or nota.publicidade == nota.NINST and user.is_authenticated or nota.publicidade = nota.NPRIV and nota.owner == user %} {% if user.is_superuser or nota.publicidade == nota.NPUBL or nota.publicidade == nota.NINST and user.is_authenticated or nota.publicidade == nota.NPRIV and nota.owner == user %}
{%if not forloop.first %}<li class="bullet">&#8226;</li>{%endif%} {%if not forloop.first %}
<li class="dnli" id="nt{{nota.pk}}"> <li class="bullet">&#8226;</li>
<ul> {% endif %}
{% if user.is_authenticated %} <li class="dnli" id="nt{{nota.pk}}">
{% if user == nota.owner and perms.compilacao.change_nota or user.is_superuser%} <ul>
<li><a class="btn-action btn-nota-edit" model="nota" pk="{{nota.pk}}">Editar</a></li> {% if user.is_authenticated %}
<li class="bullet">&#8226;</li> {% if user == nota.owner and perms.compilacao.change_nota or user.is_superuser%}
{% endif %} <li><a class="btn-action btn-nota-edit" model="nota" pk="{{nota.pk}}">Editar</a></li>
{% if user == nota.owner and perms.compilacao.delete_nota or user.is_superuser %} <li class="bullet">&#8226;</li>
<li><a class="btn-action btn-nota-delete" model="nota" pk="{{nota.pk}}">Excluir</a></li> {% endif %}
<li class="bullet">&#8226;</li> {% if user == nota.owner and perms.compilacao.delete_nota or user.is_superuser %}
{% endif %} <li><a class="btn-action btn-nota-delete" model="nota" pk="{{nota.pk}}">Excluir</a></li>
{% endif %} <li class="bullet">&#8226;</li>
<li class="ntipo">{{nota.tipo.nome}}</li> {% endif %}
<li class="bullet">&#8226;</li> {% endif %}
<li class="nowner" title="{% trans 'Criado Por' %}">{%if nota.owner.first_name%}{{nota.owner.first_name}}{%else%}{{nota.owner}}{%endif%}</li> <li class="ntipo">{{nota.tipo.nome}}</li>
<li class="bullet">&#8226;</li> <li class="bullet">&#8226;</li>
<li class="npublicacao" title="{% trans 'Data de Publicação'%}">{{nota.publicacao|date:"d M Y"}}</li> <li class="nowner" title="{% trans 'Criado Por' %}">{%if nota.owner.first_name%}{{nota.owner.first_name}}{%else%}{{nota.owner}}{% endif %}</li>
</ul> <li class="bullet">&#8226;</li>
<li class="npublicacao" title="{% trans 'Data de Publicação'%}">{{nota.publicacao|date:"d M Y"}}</li>
</ul>
{%if nota.titulo %} {%if nota.titulo %}
<div class="ntitulo"> <div class="ntitulo">
{%if nota.url_externa %}<a target="_blank" href="{{nota.url_externa}}">{%endif%}{{nota.titulo}} - {%if nota.url_externa %}</a>{%endif%} {%if nota.url_externa %}<a target="_blank" href="{{nota.url_externa}}">{% endif %}{{nota.titulo}} - {%if nota.url_externa %}</a>{% endif %}
</div> </div>
{%endif%} {% endif %}
<div class="ntexto"> <div class="ntexto">
{%if nota.url_externa %}<a target="_blank" href="{{nota.url_externa}}">{%endif%}{{ nota.texto}}{%if nota.url_externa %}</a>{%endif%} {%if nota.url_externa %}<a target="_blank" href="{{nota.url_externa}}">{% endif %}{{ nota.texto}}{%if nota.url_externa %}</a>{% endif %}
</div> </div>
{%comment%} {%comment%}
<ul> <ul>
<li class="nefetividade" title="{% trans 'Data de Efetividade'%}">{{nota.efetividade|date:"d M Y"}}</li> <li class="nefetividade" title="{% trans 'Data de Efetividade'%}">{{nota.efetividade|date:"d M Y"}}</li>
<li class="bullet">&#8226;</li> <li class="bullet">&#8226;</li>
<li class="npublicidade">{{nota.get_publicidade_display}}</li> <li class="npublicidade">{{nota.get_publicidade_display}}</li>
</ul> </ul>
{%endcomment%} {%endcomment%}
</li> </li>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
</ul> </ul>
</div> </div>
{% endif%} {% endif%}
</div> </div>
{% endspaceless %} {% endspaceless %}
{% if view.is_ta_alterador and dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%} {% if dpt.tipo_dispositivo.class_css == 'bloco_alteracao'%}
{%with node=dpt template_name='compilacao/text_list_blocoalteracao.html' %} {%with node=dpt template_name='compilacao/text_list_blocoalteracao.html' %}
{%include template_name%} {%include template_name%}
{%endwith%} {%endwith%}
{% endif%} {% endif%}
{% set_nivel_old view dpt.nivel %} {% set_nivel_old view dpt.nivel %}
{% endfor %} {% endfor %}
{% if view|isinst:'DispositivoView' %} {% if view|isinst:'DispositivoView' %}
{% close_div view.flag_nivel_old view.flag_nivel_ini -1 %} {% close_div view.flag_nivel_old view.flag_nivel_ini -1 %}
{% else %} {% else %}
{% close_div view.flag_nivel_old view.flag_nivel_ini 0 %} {% close_div view.flag_nivel_old view.flag_nivel_ini 0 %}
{% endif%} {% endif%}

11
templates/compilacao/text_list_blocoalteracao.html

@ -1,14 +1,13 @@
{% load compilacao_filters %} {% load compilacao_filters %}
{% load common_tags %} {% load common_tags %}
<i class="fa fa-quote-left fa-2x fa-pull-left fa-border"></i>
{% for ch in dpt.pk|get_bloco_atualizador %} {% for ch in dpt.pk|get_bloco_atualizador %}
{% spaceless %} {% spaceless %}
{% if ch.visibilidade %} {% if ch.visibilidade %}
<div class="dpt" id="d{{ch.id}}" nivel="{{ch.nivel}}"> <div class="dpt" id="d{{ch.id}}" nivel="{{ch.nivel}}">
<div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}"> <div class="{{ ch.tipo_dispositivo.class_css }}" id="id{{ch.id}}" nivel="{{ch.nivel}}">
{{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{%url 'ta_text' ch.ta.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }} {{ ch.tipo_dispositivo.rotulo_prefixo_html|safe }}<a name="{{ch.pk}}" href="{%url 'compilacao:ta_text' ch.ta.pk %}#{{ch.pk}}">{{ ch.rotulo }}</a>{{ ch.tipo_dispositivo.rotulo_sufixo_html|safe }}{{ ch.tipo_dispositivo.texto_prefixo_html|safe }}{{ ch.texto|safe }}
</div> </div>
</div> </div>
{%endif%} {%endif%}
{% endspaceless %} {% endspaceless %}
{% endfor %} {% endfor %}

123
templates/compilacao/textoarticulado_detail.html

@ -3,98 +3,83 @@
{% load compilacao_filters %} {% load compilacao_filters %}
{% load common_tags %} {% load common_tags %}
{% block sections_nav %} {% block sections_nav %}
{%if object %} <ul class="nav nav-pills navbar-right">
<div class="actions btn-group pull-right" role="group"> {%if object %}
<li>
{% if object.content_object%} {% if object.content_object%}
<a href="{% url object|urldetail_content_type object.content_object.pk %}"title="{% trans 'Ir para '%}{{object.content_object}}" class="btn btn-default">Início</a> <a href="{% url object|urldetail_content_type object.content_object.pk %}" title="{% trans 'Ir para '%}{{object.content_object}}">Início</a>
{%else%} {%else%}
<a href="{% url 'ta_detail' object.pk %}" class="btn btn-default">{% trans 'Início' %}</a> <a href="{% url 'compilacao:ta_detail' object.pk %}">{% trans 'Início' %}</a>
{%endif%} {%endif%}
</li>
<li><a href="{% url 'compilacao:ta_pub_list' object.pk %}">{% model_verbose_name_plural 'compilacao.models.Publicacao' %}</a></li>
<li><a href="{% url 'compilacao:ta_text' object.pk %}">{% trans 'Texto da Norma' %}</a></li>
{%endif %}
</ul>
{% endblock %}
<a href="{% url 'ta_pub_list' object.pk %}" class="btn btn-default">{% model_verbose_name_plural 'compilacao.models.Publicacao' %}</a> {% block base_content %}
<a href="{% url 'ta_text' object.pk %}" class="btn btn-default">{% trans 'Texto' %}</a> {% block actions %}
<a href="{% url 'ta_text_edit' object.pk %}" class="btn btn-default">{% trans 'Edição do Texto' %}</a> <div class="clearfix">
<div class="actions btn-group pull-right" role="group">
<a href="{% url 'compilacao:ta_edit' object.pk %}" class="btn btn-default">{% trans 'Editar Metadados do Texto Articulado' %}</a>
<a href="{% url 'compilacao:ta_text_edit' object.pk %}" class="btn btn-default">{% trans 'Editar Texto' %}</a>
</div> </div>
{%endif %} </div>
{% endblock %} {% endblock actions %}
{% block base_content %} {# FIXME is this the best markup to use? #}
<div class="clearfix">
{% block actions %}
<ul class="button-group right">
{%if object %}
<li><a href="{% url 'ta_edit' object.pk %}" class="button tiny">{% trans 'Edição dos Metadados do Texto Articulado' %}</a></li>
<li><a href="{% url 'ta_delete' object.pk %}" class="button alert tiny">{% trans 'Excluir' %}</a></li>
{%endif%}
<li><a href="#" class="button tiny" data-dropdown="drop"><i class="fi-widget"></i></a>
<ul id="drop" class="tiny f-dropdown" data-dropdown-content>
<li><a href="{% url 'tipo_ta_list' %}">{%model_verbose_name_plural 'compilacao.models.TipoTextoArticulado'%}</a></li>
<li><a href="{% url 'tipopublicacao:list' %}">{%model_verbose_name_plural 'compilacao.models.TipoPublicacao'%}</a></li>
<li><a href="{% url 'veiculopublicacao:list' %}">{%model_verbose_name_plural 'compilacao.models.VeiculoPublicacao'%}</a></li>
<li><a href="{% url 'tiponota:list' %}">{%model_verbose_name_plural 'compilacao.models.TipoNota'%}</a></li>
<li><a href="{% url 'tipovide:list' %}">{%model_verbose_name_plural 'compilacao.models.TipoVide'%}</a></li>
<li><a href="#">TODO: Tipo de Dispositivo</a></li>
<li><a href="#">TODO: Perfil Estrutural de Textos Articulados</a></li>
</ul></li>
</ul>
{% endblock actions %}
</div>
{% block detail_content %} {# TODO replace fieldset for something semantically correct, but with similar visual grouping style #}
<fieldset>
<legend>{%trans 'Identificação Básica'%}</legend>
<div class="row">
<div class="col-md-3"> {% block detail_content %} {# TODO replace fieldset for something semantically correct, but with similar visual grouping style #}
<fieldset>
<legend>{%trans 'Identificação Básica'%}</legend>
<div class="row">
<div class="col-md-3">
<div id="div_id_tipo" class="holder"> <div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'tipo_ta' %}</label> <label>{% field_verbose_name object 'tipo_ta' %}</label>
<p>{{ object.tipo_ta}}</p> <p>{{ object.tipo_ta}}</p>
</div> </div>
</div> </div>
{% if object.content_object and object.content_object.tipo%} {% if object.content_object and object.content_object.tipo%}
<div class="col-md-3"> <div class="col-md-3">
<div id="div_id_tipo" class="holder"> <div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object.content_object 'tipo' %}</label> <label>{% field_verbose_name object.content_object 'tipo' %}</label>
<p>{{ object.content_object.tipo}}</p> <p>{{ object.content_object.tipo}}</p>
</div>
</div> </div>
</div> {%endif%}
{%endif%}
<div class="col-md-2"> <div class="col-md-2">
<div id="div_id_numero" class="holder"> <div id="div_id_numero" class="holder">
<label>{% field_verbose_name object 'numero' %}</label> <label>{% field_verbose_name object 'numero' %}</label>
<p>{{ object.numero}}</p> <p>{{ object.numero}}</p>
</div> </div>
</div> </div>
<div class="col-md-2"> <div class="col-md-2">
<div id="div_id_ano" class="holder"> <div id="div_id_ano" class="holder">
<label>{% field_verbose_name object 'ano' %}</label> <label>{% field_verbose_name object 'ano' %}</label>
<p>{{ object.ano}}</p> <p>{{ object.ano}}</p>
</div> </div>
</div> </div>
<div class="col-md-2"> <div class="col-md-2">
<div id="div_id_data" class="holder"> <div id="div_id_data" class="holder">
<label>{% field_verbose_name object 'data' %}</label> <label>{% field_verbose_name object 'data' %}</label>
<p>{{ object.data}}</p> <p>{{ object.data}}</p>
</div> </div>
</div>
</div> </div>
</div> <br>
<br> <div class="row">
<div class="row"> <div class="col-md-12">
<div class="col-md-12">
<div id="div_id_ementa" class="holder"> <div id="div_id_ementa" class="holder">
<label>{% field_verbose_name object 'ementa' %}</label> <label>{% field_verbose_name object 'ementa' %}</label>
<p>{{ object.ementa|safe}}</p> <p>{{ object.ementa|safe}}</p>
</div> </div>
</div>
</div> </div>
</div> </fieldset>
</fieldset> {% endblock detail_content %}
{% endblock detail_content %} {% endblock base_content %} {% endblock base_content %}

58
templates/compilacao/textoarticulado_list.html

@ -4,43 +4,39 @@
{% load common_tags %} {% load common_tags %}
{% block base_content %} {% block base_content %}
{% block actions %}{{block.super}} {% block detail_content %}
{% endblock detail_content %}
{% endblock actions %} {% block actions %}
{% block detail_content %} <div class="actions btn-group pull-right clearfix" role="group">
{% endblock detail_content %} <a href="{{ view.create_url }}" class="btn btn-default">
<div class="actions btn-group pull-right" role="group"> {% trans 'Adicionar'%} {%model_verbose_name 'compilacao.models.TextoArticulado'%}
<a href="{{ view.create_url }}" class="btn btn-default"> </a>
{% trans 'Adicionar'%} {%model_verbose_name 'compilacao.models.TextoArticulado'%} {% include 'compilacao/textoarticulado_menu_config.html' %}
</a> </div>
{% endblock actions %}
<table class="table table-striped table-hover">
{% block more_buttons %}
{% endblock more_buttons %}
</div>
<table class="table table-striped table-hover">
<thead> <thead>
<tr> <tr>
<th>{% fieldclass_verbose_name 'compilacao.models.TextoArticulado' 'tipo_ta' %}</th> <th>{% fieldclass_verbose_name 'compilacao.models.TextoArticulado' 'tipo_ta' %}</th>
<th>{% fieldclass_verbose_name 'compilacao.models.TextoArticulado' 'numero' %}</th> <th>{% fieldclass_verbose_name 'compilacao.models.TextoArticulado' 'numero' %}</th>
<th>{% fieldclass_verbose_name 'compilacao.models.TextoArticulado' 'ano' %}</th> <th>{% fieldclass_verbose_name 'compilacao.models.TextoArticulado' 'ano' %}</th>
<th>{% fieldclass_verbose_name 'compilacao.models.TextoArticulado' 'data' %}</th> <th>{% fieldclass_verbose_name 'compilacao.models.TextoArticulado' 'data' %}</th>
<th>{% fieldclass_verbose_name 'compilacao.models.TextoArticulado' 'ementa' %}</th> <th>{% fieldclass_verbose_name 'compilacao.models.TextoArticulado' 'ementa' %}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{% for ta in object_list %} {% for ta in object_list %}
<tr> <tr>
<td><a href="{% url 'ta_detail' ta.pk %}">{{ ta.tipo_ta }}</a></td> <td><a href="{% url 'compilacao:ta_detail' ta.pk %}">{{ ta.tipo_ta }}</a></td>
<td>{{ ta.numero }}</td> <td>{{ ta.numero }}</td>
<td>{{ ta.ano }}</td> <td>{{ ta.ano }}</td>
<td>{{ ta.data }}</td> <td>{{ ta.data }}</td>
<td>{{ ta.ementa|safe }}</td> <td>{{ ta.ementa|safe }}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
{% include 'paginacao.html'%} {% include 'paginacao.html'%}
{% endblock %} {% endblock %}

16
templates/compilacao/textoarticulado_menu_config.html

@ -0,0 +1,16 @@
{% load i18n %}
{% load common_tags %}
<div class="btn-group" role="group">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-cog fa-1x fa-fw"></i>
</button>
<ul class="dropdown-menu" role="menu">
<li><a href="{% url 'compilacao:tipo_ta_list' %}">{%model_verbose_name_plural 'compilacao.models.TipoTextoArticulado'%}</a></li>
<li><a href="{% url 'tipopublicacao:list' %}">{%model_verbose_name_plural 'compilacao.models.TipoPublicacao'%}</a></li>
<li><a href="{% url 'veiculopublicacao:list' %}">{%model_verbose_name_plural 'compilacao.models.VeiculoPublicacao'%}</a></li>
<li><a href="{% url 'tiponota:list' %}">{%model_verbose_name_plural 'compilacao.models.TipoNota'%}</a></li>
<li><a href="{% url 'tipovide:list' %}">{%model_verbose_name_plural 'compilacao.models.TipoVide'%}</a></li>
<li><a href="#">TODO: Tipo de Dispositivo</a></li>
<li><a href="#">TODO: Perfil Estrutural de Textos Articulados</a></li>
</ul>
</div>

91
templates/compilacao/tipotextoarticulado_detail.html

@ -1,54 +1,51 @@
{% extends "base.html" %} {% load i18n %} {% load compilacao_filters %} {% extends "base.html" %} {% load i18n %} {% load compilacao_filters %}
{% load common_tags %} {% load common_tags %}
{% block base_content %} {# FIXME is this the best markup to use? #} {% block base_content %}
{% block sections_nav %} {% block sections_nav %}
{% endblock %} {% endblock %}
<div class="clearfix">
<div class="clearfix">
{% block actions %} {% block actions %}
<ul class="button-group right"> <div class="actions btn-group pull-right" role="group">
<li><a href="{% url 'tipo_ta_edit' object.pk %}" class="button tiny">{% trans 'Editar' %}</a></li> <a class="btn btn-default" href="{% url 'compilacao:tipo_ta_edit' object.pk %}">{% trans 'Editar' %}</a>
<li><a href="{% url 'tipo_ta_delete' object.pk %}" class="button alert tiny">{% trans 'Excluir' %}</a></li> <a class="btn btn-default" href="{% url 'compilacao:tipo_ta_delete' object.pk %}">{% trans 'Excluir' %}</a>
</ul> </div>
{% endblock actions %} {% endblock actions %}
</div>
</div>
{% block detail_content %} {# TODO replace fieldset for something semantically correct, but with similar visual grouping style #}
{% block detail_content %} {# TODO replace fieldset for something semantically correct, but with similar visual grouping style #} <fieldset>
<fieldset> <legend>{%trans 'Identificação Básica'%}</legend>
<legend>{%trans 'Identificação Básica'%}</legend> <div class="row">
<div class="col-md-2">
<div class="row"> <div id="div_id_tipo" class="holder">
<label>{% field_verbose_name object 'sigla' %}</label>
<div class="col-md-2"> <p>{{ object.sigla}}</p>
<div id="div_id_tipo" class="holder"> </div>
<label>{% field_verbose_name object 'sigla' %}</label> </div>
<p>{{ object.sigla}}</p>
</div> <div class="col-md-4">
</div> <div id="div_id_numero" class="holder">
<label>{% field_verbose_name object 'descricao' %}</label>
<div class="col-md-4"> <p>{{ object.descricao}}</p>
<div id="div_id_numero" class="holder"> </div>
<label>{% field_verbose_name object 'descricao' %}</label> </div>
<p>{{ object.descricao}}</p>
</div> <div class="col-md-3">
</div> <div id="div_id_ano" class="holder">
<label>{% field_verbose_name object 'content_type' %}</label>
<div class="col-md-3"> <p>{{ object.content_type|default:""}}</p>
<div id="div_id_ano" class="holder"> </div>
<label>{% field_verbose_name object 'content_type' %}</label> </div>
<p>{{ object.content_type|default:""}}</p> <div class="col-md-3">
</div> <div id="div_id_ano" class="holder">
</div> <label>{% field_verbose_name object 'participacao_social' %}</label>
<div class="col-md-3"> <p>{{ object.get_participacao_social_display}}</p>
<div id="div_id_ano" class="holder"> </div>
<label>{% field_verbose_name object 'participacao_social' %}</label> </div>
<p>{{ object.get_participacao_social_display}}</p> </div>
</div> </fieldset>
</div> {% endblock detail_content %}
</div>
</fieldset>
{% endblock detail_content %}
{% endblock base_content %} {% endblock base_content %}

62
templates/compilacao/tipotextoarticulado_list.html

@ -4,37 +4,35 @@
{% load common_tags %} {% load common_tags %}
{% block base_content %} {% block base_content %}
{% block actions %}
<div class="actions btn-group pull-right" role="group">
<a href="{{ view.create_url }}" class="btn btn-default">
{% trans 'Adicionar'%} {%model_verbose_name 'compilacao.models.TipoTextoArticulado'%}
</a>
</div>
{% endblock actions %}
<div class="actions btn-group pull-right" role="group"> {% if not object_list %}
<a href="{{ view.create_url }}" class="btn btn-default"> <p>{{ NO_ENTRIES_MSG }}</p>
{% trans 'Adicionar'%} {%model_verbose_name 'compilacao.models.TipoTextoArticulado'%} {% else %}
</a> <table class="table table-striped table-hover" width=100%>
{% block more_buttons %} <thead>
<tr>
{% endblock more_buttons %} <th>{% fieldclass_verbose_name 'compilacao.models.TipoTextoArticulado' 'sigla' %}</th>
</div> <th>{% fieldclass_verbose_name 'compilacao.models.TipoTextoArticulado' 'descricao' %}</th>
<th>{% fieldclass_verbose_name 'compilacao.models.TipoTextoArticulado' 'content_type' %}</th>
{% if not object_list %} </tr>
<p>{{ NO_ENTRIES_MSG }}</p> </thead>
{% else %} <tbody>
<table class="table table-striped table-hover" width=100%> {% for tipo_ta in object_list %}
<thead> <tr>
<tr> <td><a href="{% url 'compilacao:tipo_ta_detail' tipo_ta.pk %}">{{ tipo_ta.sigla }}</a></td>
<th>{% fieldclass_verbose_name 'compilacao.models.TipoTextoArticulado' 'sigla' %}</th> <td>{{ tipo_ta.descricao }}</td>
<th>{% fieldclass_verbose_name 'compilacao.models.TipoTextoArticulado' 'descricao' %}</th> <td>{{ tipo_ta.content_type }}</td>
<th>{% fieldclass_verbose_name 'compilacao.models.TipoTextoArticulado' 'content_type' %}</th> </tr>
</tr> {% endfor %}
</thead> </tbody>
<tbody> </table>
{% for tipo_ta in object_list %} {%endif%}
<tr> {% include 'paginacao.html'%}
<td><a href="{% url 'tipo_ta_detail' tipo_ta.pk %}">{{ tipo_ta.sigla }}</a></td>
<td>{{ tipo_ta.descricao }}</td>
<td>{{ tipo_ta.content_type }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{%endif%}
{% include 'paginacao.html'%}
{% endblock %} {% endblock %}

35
templates/crud/confirm_delete.html

@ -1,21 +1,24 @@
{% extends "base.html" %} {% extends "base.html" %}
{% load i18n %} {% load i18n %}
{% block base_content %} {% block title %}
<form action="" method="post">{% csrf_token %} {% with object as title %}
<div class="callout panel text-center radius clearfix"> {{ block.super }}
{% endwith %}
<p> {% endblock %}
{% blocktrans %}
Tem certeza que deseja apagar <br/> "{{ object }}"?
{% endblocktrans %}
</p>
<div class="button-group">
<a href="{{ view.detail_url }}" class="button button radius alert">{% trans 'Cancelar' %}</a>
<input name="submit" value="{% trans 'Confirmar' %}" class="submit button button radius success" type="submit"></li>
</div>
</div> {% block base_content %}
</form> <form action="" method="post">{% csrf_token %}
<div class="panel panel-danger">
<div class="panel-heading text-center">
{% blocktrans %}
Confirma exclusão de "{{ object }}"?
{% endblocktrans %}
</div>
<div class="panel-body text-center">
<a href="{{ view.detail_url }}" class="btn btn-inverse">{% trans 'Cancelar' %}</a>
<input name="submit" value="{% trans 'Confirmar' %}" class="btn btn-danger" type="submit"></li>
</div>
</div>
</form>
{% endblock %} {% endblock %}

11
templates/norma/normajuridica_detail.html

@ -1,8 +1,11 @@
{% extends "crud/detail.html" %} {% extends "crud/detail.html" %}
{% load i18n %} {% load i18n %}
{% block sections_nav %} {% block sections_nav %}
<div class="actions btn-group pull-right" role="group">
<a href="{% url 'normajuridica:detail' object.pk %}" class="btn btn-default">{% trans 'Início' %}</a> <ul class="nav nav-pills navbar-right">
<li>
<a href="{% url 'normajuridica:detail' object.pk %}">{% trans 'Início' %}</a>
</li>
{% comment %} {% comment %}
Opção adicionada para chamar o TextoArticulado da norma. Opção adicionada para chamar o TextoArticulado da norma.
@ -10,7 +13,7 @@
e a view NormaTa(IntegracaoTaView) em views.py e a view NormaTa(IntegracaoTaView) em views.py
Em nada mais a integração interfere em Norma Jurídica Em nada mais a integração interfere em Norma Jurídica
{% endcomment %} {% endcomment %}
<a href="{% url 'norma_ta' object.pk %}" class="btn btn-default">{% trans 'Texto' %}</a> <li><a href="{% url 'normajuridica:ta' object.pk %}">{% trans 'Texto da Norma' %}</a></li>
</div> </ul>
{% endblock sections_nav %} {% endblock sections_nav %}

Loading…
Cancel
Save