Browse Source

add norma_temporario_crud

pull/10/head
LeandroRoberto 9 years ago
parent
commit
604345d32c
  1. 29
      compilacao/forms.py
  2. 2
      compilacao/urls.py
  3. 23
      compilacao/views.py
  4. 5
      norma/models.py
  5. 15
      norma/urls.py
  6. 10
      norma/views.py
  7. 19
      static/js/compilacao_notas.js
  8. 17
      static/styles/compilacao.scss
  9. 1
      templates/compilacao/edit_bloco.html
  10. 12
      templates/compilacao/index_bloco.html

29
compilacao/forms.py

@ -36,11 +36,19 @@ class NotaForm(ModelForm):
# All users have visibility. # All users have visibility.
(NPUBL, _('Nota Pública')), (NPUBL, _('Nota Pública')),
) )
error_messages = {
'required': _('Este campo é obrigatório'),
'invalid': _('URL inválida.')
}
titulo = forms.CharField(label=' ', required=False) titulo = forms.CharField(label=' ', required=False)
texto = forms.CharField(label='', widget=forms.Textarea) texto = forms.CharField(
url_externa = forms.URLField(label='', required=False) label='',
widget=forms.Textarea,
error_messages=error_messages)
url_externa = forms.URLField(
label='',
required=False,
error_messages=error_messages)
publicidade = forms.ChoiceField( publicidade = forms.ChoiceField(
required=True, required=True,
label='Publicidade', label='Publicidade',
@ -53,16 +61,21 @@ class NotaForm(ModelForm):
queryset=TipoNota.objects.all(), queryset=TipoNota.objects.all(),
empty_label=None) empty_label=None)
publicacao = forms.DateField(label=u'Publicação', publicacao = forms.DateField(
label=u'Publicação',
input_formats=['%d/%m/%Y'], input_formats=['%d/%m/%Y'],
required=True, required=True,
widget=forms.DateInput( widget=forms.DateInput(
format='%d/%m/%Y')) format='%d/%m/%Y'),
efetividade = forms.DateField(label=u'Efetividade', error_messages=error_messages
)
efetividade = forms.DateField(
label=u'Efetividade',
input_formats=['%d/%m/%Y'], input_formats=['%d/%m/%Y'],
required=True, required=True,
widget=forms.DateInput( widget=forms.DateInput(
format='%d/%m/%Y')) format='%d/%m/%Y'),
error_messages=error_messages)
dispositivo = forms.ModelChoiceField(queryset=Dispositivo.objects.all(), dispositivo = forms.ModelChoiceField(queryset=Dispositivo.objects.all(),
widget=forms.HiddenInput()) widget=forms.HiddenInput())
pk = forms.IntegerField(widget=forms.HiddenInput(), pk = forms.IntegerField(widget=forms.HiddenInput(),

2
compilacao/urls.py

@ -31,7 +31,7 @@ urlpatterns_compilacao = [
views.NotasEditView.as_view(), name='nota_edit'), views.NotasEditView.as_view(), name='nota_edit'),
url(r'^(?P<norma_id>[0-9]+)/compilacao/' url(r'^(?P<norma_id>[0-9]+)/compilacao/'
'(?P<dispositivo_id>[0-9]+)/nota/delete$', '(?P<dispositivo_id>[0-9]+)/nota/(?P<pk>[0-9]+)/delete$',
views.NotasDeleteView.as_view(), name='nota_delete'), views.NotasDeleteView.as_view(), name='nota_delete'),
] ]

23
compilacao/views.py

@ -6,12 +6,14 @@ from django.contrib.auth.models import User
from django.core.signing import Signer from django.core.signing import Signer
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Q from django.db.models import Q
from django.http.response import JsonResponse, HttpResponse from django.http.response import JsonResponse, HttpResponse,\
HttpResponseRedirect
from django.shortcuts import render from django.shortcuts import render
from django.utils.dateparse import parse_date from django.utils.dateparse import parse_date
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.generic.base import TemplateView from django.views.generic.base import TemplateView
from django.views.generic.edit import FormMixin, UpdateView from django.views.generic.detail import SingleObjectMixin
from django.views.generic.edit import FormMixin, UpdateView, DeleteView
from django.views.generic.list import ListView from django.views.generic.list import ListView
from vanilla.model_views import CreateView from vanilla.model_views import CreateView
@ -1160,5 +1162,18 @@ class NotasEditView(UpdateView):
'dispositivo_id']}) 'dispositivo_id']})
class NotasDeleteView(FormMixin, CreateView): class NotasDeleteView(TemplateView):
pass
def get(self, request, *args, **kwargs):
nt = Nota.objects.get(pk=self.kwargs['pk'])
success_url = self.get_success_url()
nt.delete()
return HttpResponseRedirect(success_url)
def get_success_url(self):
return reverse(
'dispositivo', kwargs={
'norma_id': self.kwargs[
'norma_id'],
'dispositivo_id': self.kwargs[
'dispositivo_id']})

5
norma/models.py

@ -3,7 +3,7 @@ from django.template import defaultfilters
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from materia.models import MateriaLegislativa from materia.models import MateriaLegislativa
from sapl.utils import make_choices from sapl.utils import make_choices, YES_NO_CHOICES
class AssuntoNorma(models.Model): class AssuntoNorma(models.Model):
@ -86,7 +86,8 @@ class NormaJuridica(models.Model):
observacao = models.TextField( observacao = models.TextField(
blank=True, null=True, verbose_name=_('Observação')) blank=True, null=True, verbose_name=_('Observação'))
complemento = models.NullBooleanField( complemento = models.NullBooleanField(
blank=True, verbose_name=_('Complementar ?')) blank=True, verbose_name=_('Complementar ?'),
choices=YES_NO_CHOICES)
# XXX was a CharField (attention on migrate) # XXX was a CharField (attention on migrate)
assuntos = models.ManyToManyField( assuntos = models.ManyToManyField(
AssuntoNorma, AssuntoNorma,

15
norma/urls.py

@ -1,12 +1,19 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from norma.views import NormaIncluirView, assunto_norma_crud, tipo_norma_crud from norma.views import NormaIncluirView, assunto_norma_crud, tipo_norma_crud,\
norma_temporario_crud
norma_url_patterns = norma_temporario_crud.urlpatterns + []
# norma_url_patterns = norma_crud.urlpatterns + []
urlpatterns = [ urlpatterns = [
# url(r'^norma/', include(norma_url_patterns, url(r'^norma/', include(norma_url_patterns,
# norma_temporario_para_compilacao_crud.namespace, norma_temporario_crud.namespace,
# norma_temporario_para_compilacao_crud.namespace)), norma_temporario_crud.namespace)),
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)),
url(r'^norma/incluir', NormaIncluirView.as_view(), name='norma-incluir'), url(r'^norma/incluir', NormaIncluirView.as_view(), name='norma-incluir'),
] ]

10
norma/views.py

@ -30,6 +30,7 @@ tipo_norma_crud = build_crud(
]) ])
norma_crud = build_crud( norma_crud = build_crud(
NormaJuridica, '', [ NormaJuridica, '', [
[_('Identificação Básica'), [_('Identificação Básica'),
@ -48,18 +49,17 @@ norma_crud = build_crud(
[('observacao', 12)]], [('observacao', 12)]],
[_('Assuntos (Classificação) [+]'), [_('Assuntos (Classificação) [+]'),
[('assunto_norma_FIXME', 12)], [('assunto_norma_FIXME', 12)],
[('assunto_norma_FIXME', 12)], [('assunto_norma_FIXME', 12)],
[('assunto_norma_FIXME', 12)]], [('assunto_norma_FIXME', 12)]],
]) ])
norma_temporario_para_compilacao_crud = build_crud( norma_temporario_crud = build_crud(
NormaJuridica, 'norma', [ NormaJuridica, 'normajuridica', [
[_('Identificação Básica'), [_('Identificação Básica'),
[('tipo', 4), ('numero', 4), ('ano', 4)], [('tipo', 5), ('numero', 2), ('ano', 2), ('data', 3)],
[('data', 4), ('esfera_federacao', 4)],
[('data_publicacao', 3)],
[('ementa', 12)]], [('ementa', 12)]],
]) ])

19
static/js/compilacao_notas.js

@ -50,6 +50,18 @@ var onSubmitEditForm = function(event) {
} }
); );
} }
var onDelete = function(event) {
var id_dispositivo = $(event).closest('.dn').attr('pk');
var id_nota = $(event).attr('pk');
var url = 'compilacao/'+id_dispositivo+'/nota/'+id_nota+'/delete'
$.get( url, function(data) {
$('#dne'+id_dispositivo+' .dne-form').closest('.dpt').html(data)
onReadyNotas();
}
);
}
function getFormNota(_this, _btn) { function getFormNota(_this, _btn) {
var id_dispositivo = $('.dne-exec .dne-form').closest('.dne').attr('pk'); var id_dispositivo = $('.dne-exec .dne-form').closest('.dne').attr('pk');
@ -63,13 +75,12 @@ function getFormNota(_this, _btn) {
id_dispositivo = $(_this).attr('pk'); id_dispositivo = $(_this).attr('pk');
url = 'compilacao/'+id_dispositivo+'/nota/create'; url = 'compilacao/'+id_dispositivo+'/nota/create';
} }
else { else if (_btn == 'btn-edit') {
var id_nota = $(_this).attr('pk'); var id_nota = $(_this).attr('pk');
id_dispositivo = $(_this).closest('.dn').attr('pk'); id_dispositivo = $(_this).closest('.dn').attr('pk');
url = 'compilacao/'+id_dispositivo+'/nota/'+id_nota+'/edit' url = 'compilacao/'+id_dispositivo+'/nota/'+id_nota+'/edit'
} }
$('#dne'+id_dispositivo).addClass('dne-exec'); $('#dne'+id_dispositivo).addClass('dne-exec');
$('#dne'+id_dispositivo).addClass('dne-exec');
$.get(url).done(function( data ) { $.get(url).done(function( data ) {
$('#dne'+id_dispositivo+' .dne-form').html(data); $('#dne'+id_dispositivo+' .dne-form').html(data);
@ -79,12 +90,16 @@ function getFormNota(_this, _btn) {
function onReadyNotas() { function onReadyNotas() {
$('.dne .btn-create').off(); $('.dne .btn-create').off();
$('.dne .btn-edit').off(); $('.dne .btn-edit').off();
$('.dne .btn-delete').off();
$('.dne .btn-create').click(function(){ $('.dne .btn-create').click(function(){
getFormNota(this, 'btn-create') getFormNota(this, 'btn-create')
}); });
$('.dn .btn-edit').click(function(){ $('.dn .btn-edit').click(function(){
getFormNota(this, 'btn-edit') getFormNota(this, 'btn-edit')
}); });
$('.dn .btn-delete').click(function(){
onDelete(this, 'btn-delete')
});
} }
$(document).ready(function() { $(document).ready(function() {
onReadyNotas() onReadyNotas()

17
static/styles/compilacao.scss

@ -209,7 +209,7 @@ $color_actions_border: #CCC;
font-size: 1.15em; font-size: 1.15em;
float:left; float:left;
.dptt { .dptt {
z-index: 98; z-index: 89;
position: relative; position: relative;
} }
} }
@ -273,6 +273,7 @@ $color_actions_border: #CCC;
font-weight: normal; font-weight: normal;
line-height: 1rem; line-height: 1rem;
position: relative; position: relative;
text-decoration: none;
p, ul { p, ul {
font-size: 0.8rem; font-size: 0.8rem;
font-weight: normal; font-weight: normal;
@ -299,8 +300,6 @@ $color_actions_border: #CCC;
padding: 0.5em 0.5em 0em 0.5em; padding: 0.5em 0.5em 0em 0.5em;
border: 1px solid #c7e3d3; border: 1px solid #c7e3d3;
border-top: 0px; border-top: 0px;
} }
&:hover { &:hover {
@ -323,15 +322,25 @@ $color_actions_border: #CCC;
&:hover { &:hover {
color: #787; color: #787;
a{
color: #27AE60 !important;
}
} }
} }
.ntitulo { .ntitulo {
font-weight: bold; font-weight: bold;
color: #676; color: #676;
font-size: 90%; font-size: 90%;
a{
color: #294 !important;
}
} }
.ntexto { .ntexto {
color: #787; color: #787;
a{
color: #294 !important;
}
} }
.nowner { .nowner {
color: #27AE60; color: #27AE60;
@ -342,6 +351,7 @@ $color_actions_border: #CCC;
.dptt { .dptt {
.dne { .dne {
text-decoration: none;
position: relative; position: relative;
display: block; display: block;
font-size: 0.8rem; font-size: 0.8rem;
@ -356,6 +366,7 @@ $color_actions_border: #CCC;
font-size: 0.8rem; font-size: 0.8rem;
font-weight: normal; font-weight: normal;
line-height: 1rem; line-height: 1rem;
text-decoration: none;
} }
ul.btns-action { ul.btns-action {

1
templates/compilacao/edit_bloco.html

@ -35,7 +35,6 @@
</ul> </ul>
<ul class="btns-action actions_left"> <ul class="btns-action actions_left">
<li><a class="btn-left btn-action" pk="{{dpt.pk}}" title="TODO: Notas...">Nt</a></li>
<li><a class="btn-left btn-action" pk="{{dpt.pk}}" title="TODO: Vides...">Vd</a></li> <li><a class="btn-left btn-action" pk="{{dpt.pk}}" title="TODO: Vides...">Vd</a></li>
</ul> </ul>
<ul class="btns-action actions_bottom"> <ul class="btns-action actions_bottom">

12
templates/compilacao/index_bloco.html

@ -46,7 +46,6 @@
<li><a class="btn-delete" pk="{{nota.pk}}">Excluir</a></li> {# TODO: User - tratar permissão usuário #} <li><a class="btn-delete" pk="{{nota.pk}}">Excluir</a></li> {# TODO: User - tratar permissão usuário #}
<li class="bullet">&#8226;</li> <li class="bullet">&#8226;</li>
<li class="ntipo">{{nota.tipo.nome}}</li> <li class="ntipo">{{nota.tipo.nome}}</li>
<li class="bullet">&#8226;</li> <li class="bullet">&#8226;</li>
<li class="nowner" title="{% trans 'Criado Por' %}">{%if nota.owner.first_name%}{{nota.owner.first_name}}{%else%}{{nota.owner}}{%endif%}</li> <li class="nowner" title="{% trans 'Criado Por' %}">{%if nota.owner.first_name%}{{nota.owner.first_name}}{%else%}{{nota.owner}}{%endif%}</li>
@ -54,14 +53,19 @@
<li class="npublicacao" title="{% trans 'Data de Publicação'%}">{{nota.publicacao|date:"d M Y"}}</li> <li class="npublicacao" title="{% trans 'Data de Publicação'%}">{{nota.publicacao|date:"d M Y"}}</li>
</ul> </ul>
{%if nota.titulo %}
<div class="ntitulo">
{%if nota.url_externa %}<a target="_blank" href="{{nota.url_externa}}">{%endif%} {%if nota.url_externa %}<a target="_blank" href="{{nota.url_externa}}">{%endif%}
{%if nota.titulo %}<div class="ntitulo">{{nota.titulo}}</div>{%endif%} {{nota.titulo}}
{%if nota.url_externa %}</a>{%endif%} {%if nota.url_externa %}</a>{%endif%}
</div>
{%endif%}
<div class="ntexto">
{%if nota.url_externa %}<a target="_blank" href="{{nota.url_externa}}">{%endif%} {%if nota.url_externa %}<a target="_blank" href="{{nota.url_externa}}">{%endif%}
<div class="ntexto">{{ nota.texto}}</div> {{ nota.texto}}
{%if nota.url_externa %}</a>{%endif%} {%if nota.url_externa %}</a>{%endif%}
</div>
{%comment%} {%comment%}
<ul> <ul>

Loading…
Cancel
Save