Browse Source

Create e List funcionando com CRUD

pull/323/head
Eduardo Edson Batista Cordeiro Alves 9 years ago
committed by Edward Ribeiro
parent
commit
fe02a0910c
  1. 87
      norma/forms.py
  2. 9
      norma/layouts.yaml
  3. 13
      norma/urls.py
  4. 111
      norma/views.py
  5. 4
      templates/norma/list_pesquisa.html
  6. 28
      templates/norma/normajuridica_detail.html
  7. 3
      templates/norma/normajuridica_incluir.html
  8. 36
      templates/norma/normajuridica_list.html
  9. 16
      templates/norma/pesquisa.html

87
norma/forms.py

@ -1,3 +1,5 @@
from datetime import datetime
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import Fieldset, Layout from crispy_forms.layout import Fieldset, Layout
from django import forms from django import forms
@ -94,23 +96,20 @@ class NormaJuridicaForm(ModelForm):
# Campos de MateriaLegislativa # Campos de MateriaLegislativa
tipo_materia = forms.ModelChoiceField( tipo_materia = forms.ModelChoiceField(
label='Matéria Legislativa', label='Matéria',
required=False, required=False,
queryset=TipoMateriaLegislativa.objects.all(), queryset=TipoMateriaLegislativa.objects.all(),
empty_label='Selecione' empty_label='Selecione'
) )
numero_materia = forms.CharField(label='Número', numero_materia = forms.CharField(
required=False) label='Número Matéria',
ano_materia = forms.ChoiceField(label='Ano', required=False
required=False, )
choices=RANGE_ANOS) ano_materia = forms.ChoiceField(
label='Ano Matéria',
def clean_texto_integral(self): required=False,
texto_integral = self.cleaned_data.get('texto_integral', False) choices=RANGE_ANOS,
if texto_integral: )
if texto_integral.size > MAX_DOC_UPLOAD_SIZE:
raise ValidationError("Arquivo muito grande. ( > 5mb )")
return texto_integral
class Meta: class Meta:
model = NormaJuridica model = NormaJuridica
@ -130,55 +129,21 @@ class NormaJuridicaForm(ModelForm):
'ementa', 'ementa',
'indexacao', 'indexacao',
'observacao', 'observacao',
'texto_integral', 'texto_integral']
]
def clean(self): def save(self, commit=False):
data = super(NormaJuridicaForm, self).clean() norma = super(NormaJuridicaForm, self).save(commit)
norma.timestamp = datetime.now()
if self.cleaned_data['tipo_materia']: if ('tipo_materia' and
try: 'numero_materia' and
MateriaLegislativa.objects.get( 'ano_materia' in self.cleaned_data):
tipo=self.cleaned_data['tipo_materia'],
numero=self.cleaned_data['numero_materia'],
ano=self.cleaned_data['ano_materia'])
except ObjectDoesNotExist:
msg = 'Matéria adicionada não existe!'
raise forms.ValidationError(msg)
return data materia = MateriaLegislativa.objects.get(
tipo_id=self.cleaned_data['tipo_materia'],
def __init__(self, *args, **kwargs): numero=self.cleaned_data['numero_materia'],
ano=self.cleaned_data['ano_materia'])
row1 = crispy_layout_mixin.to_row( norma.materia = materia
[('tipo', 4), ('numero', 4), ('ano', 4)])
row2 = crispy_layout_mixin.to_row(
[('data', 4), ('esfera_federacao', 4), ('complemento', 4)])
row3 = crispy_layout_mixin.to_row( norma.save()
[('tipo_materia', 4), ('numero_materia', 4), ('ano_materia', 4)]) return norma
row4 = crispy_layout_mixin.to_row(
[('data_publicacao', 3), ('veiculo_publicacao', 3),
('pagina_inicio_publicacao', 3), ('pagina_fim_publicacao', 3)])
row5 = crispy_layout_mixin.to_row(
[('texto_integral', 12)])
row6 = crispy_layout_mixin.to_row(
[('ementa', 12)])
row7 = crispy_layout_mixin.to_row(
[('indexacao', 12)])
row8 = crispy_layout_mixin.to_row(
[('observacao', 12)])
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset('Identificação Básica',
row1, row2, row3, row4, row5, row6, row7, row8),
form_actions()
)
super(NormaJuridicaForm, self).__init__(*args, **kwargs)

9
norma/layouts.yaml

@ -11,18 +11,13 @@ NormaJuridica:
Identificação Básica: Identificação Básica:
- tipo numero ano - tipo numero ano
- data esfera_federacao complemento - data esfera_federacao complemento
- tip_id_basica_FIXME num_ident_basica_FIXME ano_ident_basica_FIXME - tipo_materia numero_materia ano_materia
- data_publicacao veiculo_publicacao pagina_inicio_publicacao pagina_fim_publicacao - data_publicacao veiculo_publicacao pagina_inicio_publicacao pagina_fim_publicacao
- file_FIXME tip_situacao_norma_FIXME - texto_integral
- ementa - ementa
- indexacao - indexacao
- observacao - observacao
NormaJuridica:
Identificação Básica:
- tipo:5 numero:2 ano:2 data
- ementa
LegislacaoCitada: LegislacaoCitada:
Legislação Citada: Legislação Citada:
- tip_norma_FIXME num_norma_FIXME ano_norma_FIXME - tip_norma_FIXME num_norma_FIXME ano_norma_FIXME

13
norma/urls.py

@ -1,8 +1,9 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from norma.views import (AssuntoNormaCrud, NormaEditView, NormaIncluirView, from norma.views import (AssuntoNormaCrud, NormaCrud,
NormaPesquisaView, NormaTaView, NormaTemporarioCrud, NormaPesquisaView, NormaTaView,
PesquisaNormaListView, TipoNormaCrud) NormaTemporarioCrud, PesquisaNormaListView,
TipoNormaCrud)
from .apps import AppConfig from .apps import AppConfig
@ -24,14 +25,10 @@ norma_url_patterns = NormaTemporarioCrud.get_urls() + [
] ]
urlpatterns = [ urlpatterns = [
url(r'^norma/', include(norma_url_patterns)), url(r'^norma/', include(NormaCrud.get_urls())),
url(r'^sistema/norma/tipo/', include(TipoNormaCrud.get_urls())), url(r'^sistema/norma/tipo/', include(TipoNormaCrud.get_urls())),
url(r'^sistema/norma/assunto/', include(AssuntoNormaCrud.get_urls())), url(r'^sistema/norma/assunto/', include(AssuntoNormaCrud.get_urls())),
url(r'^norma/incluir$', NormaIncluirView.as_view(), name='norma_incluir'),
url(r'^norma/(?P<pk>[0-9]+)/editar$',
NormaEditView.as_view(), name='norma_editar'),
url(r'^norma/pesquisa$', url(r'^norma/pesquisa$',
NormaPesquisaView.as_view(), name='norma_pesquisa'), NormaPesquisaView.as_view(), name='norma_pesquisa'),
url(r'^norma/pesquisa-resultado$', url(r'^norma/pesquisa-resultado$',

111
norma/views.py

@ -6,6 +6,7 @@ from django.shortcuts import redirect
from django.views.generic import CreateView, FormView, ListView, UpdateView from django.views.generic import CreateView, FormView, ListView, UpdateView
from compilacao.views import IntegracaoTaView from compilacao.views import IntegracaoTaView
import crud.base
from crud.base import Crud, make_pagination from crud.base import Crud, make_pagination
from materia.models import MateriaLegislativa from materia.models import MateriaLegislativa
@ -15,11 +16,21 @@ from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,
AssuntoNormaCrud = Crud.build(AssuntoNorma, 'assunto_norma_juridica') AssuntoNormaCrud = Crud.build(AssuntoNorma, 'assunto_norma_juridica')
TipoNormaCrud = Crud.build(TipoNormaJuridica, 'tipo_norma_juridica') TipoNormaCrud = Crud.build(TipoNormaJuridica, 'tipo_norma_juridica')
NormaCrud = Crud.build(NormaJuridica, '')
NormaTemporarioCrud = Crud.build(NormaJuridica, 'norma') NormaTemporarioCrud = Crud.build(NormaJuridica, 'norma')
LegislacaoCitadaCrud = Crud.build(LegislacaoCitada, '') LegislacaoCitadaCrud = Crud.build(LegislacaoCitada, '')
class NormaCrud(Crud):
model = NormaJuridica
help_path = 'norma_juridica'
class CreateView(crud.base.CrudCreateView):
form_class = NormaJuridicaForm
class BaseMixin(crud.base.BaseMixin):
list_field_names = ['tipo', 'numero', 'ano', 'ementa']
class NormaPesquisaView(FormView): class NormaPesquisaView(FormView):
template_name = "norma/pesquisa.html" template_name = "norma/pesquisa.html"
success_url = "norma:norma_pesquisa" success_url = "norma:norma_pesquisa"
@ -110,55 +121,55 @@ class PesquisaNormaListView(ListView):
return context return context
class NormaIncluirView(CreateView): # class NormaIncluirView(CreateView):
template_name = "norma/normajuridica_incluir.html" # template_name = "norma/normajuridica_incluir.html"
form_class = NormaJuridicaForm # form_class = NormaJuridicaForm
success_url = reverse_lazy('norma:normajuridica_list') # success_url = reverse_lazy('norma:normajuridica_list')
#
def get_success_url(self): # def get_success_url(self):
return reverse_lazy('norma:norma_pesquisa') # return reverse_lazy('norma:norma_pesquisa')
#
def form_valid(self, form): # def form_valid(self, form):
norma = form.save(commit=False) # norma = form.save(commit=False)
norma.timestamp = datetime.now() # norma.timestamp = datetime.now()
if form.cleaned_data['tipo_materia']: # if form.cleaned_data['tipo_materia']:
materia = MateriaLegislativa.objects.get( # materia = MateriaLegislativa.objects.get(
tipo_id=form.data['tipo_materia'], # tipo_id=form.data['tipo_materia'],
numero=form.data['numero_materia'], # numero=form.data['numero_materia'],
ano=form.data['ano_materia']) # ano=form.data['ano_materia'])
norma.materia = materia # norma.materia = materia
norma.save() # norma.save()
return HttpResponseRedirect(self.get_success_url()) # return HttpResponseRedirect(self.get_success_url())
#
#
class NormaEditView(UpdateView): # class NormaEditView(UpdateView):
template_name = "norma/normajuridica_incluir.html" # template_name = "norma/normajuridica_incluir.html"
form_class = NormaJuridicaForm # form_class = NormaJuridicaForm
model = NormaJuridica # model = NormaJuridica
success_url = reverse_lazy('norma:pesquisa_norma') # success_url = reverse_lazy('norma:pesquisa_norma')
#
def get_initial(self): # def get_initial(self):
data = super(NormaEditView, self).get_initial() # data = super(NormaEditView, self).get_initial()
norma = NormaJuridica.objects.get(id=self.kwargs['pk']) # norma = NormaJuridica.objects.get(id=self.kwargs['pk'])
if norma.materia: # if norma.materia:
data.update({ # data.update({
'tipo_materia': norma.materia.tipo, # 'tipo_materia': norma.materia.tipo,
'numero_materia': norma.materia.numero, # 'numero_materia': norma.materia.numero,
'ano_materia': norma.materia.ano, # 'ano_materia': norma.materia.ano,
}) # })
return data # return data
#
def form_valid(self, form): # def form_valid(self, form):
norma = form.save(commit=False) # norma = form.save(commit=False)
norma.timestamp = datetime.now() # norma.timestamp = datetime.now()
if form.cleaned_data['tipo_materia']: # if form.cleaned_data['tipo_materia']:
materia = MateriaLegislativa.objects.get( # materia = MateriaLegislativa.objects.get(
tipo_id=form.data['tipo_materia'], # tipo_id=form.data['tipo_materia'],
numero=form.data['numero_materia'], # numero=form.data['numero_materia'],
ano=form.data['ano_materia']) # ano=form.data['ano_materia'])
norma.materia = materia # norma.materia = materia
norma.save() # norma.save()
return HttpResponseRedirect(self.get_success_url()) # return HttpResponseRedirect(self.get_success_url())
class NormaTaView(IntegracaoTaView): class NormaTaView(IntegracaoTaView):

4
templates/norma/list_pesquisa.html

@ -4,11 +4,11 @@
{% block actions %}{% endblock %} {% block actions %}{% endblock %}
{% block detail_content %} {% block detail_content %}
<div class="actions btn-group pull-right" role="group"> <div class="actions btn-group pull-right" role="group">
<a href="{% url 'norma:norma_incluir' %}" class="btn btn-default">Adicionar Norma Jurídica</a> <a href="{% url 'norma:normajuridica_create' %}" class="btn btn-default">Adicionar Norma Jurídica</a>
</div> </div>
<br /><br /><br /> <br /><br /><br />
{% if object_list %} {% if object_list %}
<table class="table table-striped table-bordered"> <table class="table table-striped">
<thead class="thead-default"> <thead class="thead-default">
<tr> <tr>
<th>Tipo da Norma Juridica</th> <th>Tipo da Norma Juridica</th>

28
templates/norma/normajuridica_detail.html

@ -1,28 +0,0 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% block sections_nav %}
<ul class="nav nav-pills navbar-right">
<li>
<a href="{% url 'norma:normajuridica_detail' object.pk %}">{% trans 'Início' %}</a>
</li>
{% comment %}
Opção adicionada para chamar o TextoArticulado da norma.
para integração foram necessárias apenas criar a url norma_ta em urls.py
e a view NormaTa(IntegracaoTaView) em views.py
Em nada mais a integração interfere em Norma Jurídica
{% endcomment %}
<li><a href="{% url 'norma:ta' object.pk %}">{% trans 'Texto da Norma' %}</a></li>
</ul>
{% endblock sections_nav %}
<div class="clearfix">
{% block actions %}
<div class="actions btn-group pull-right" role="group">
<a href="{% url 'norma:norma_editar' object.id %}" class="btn btn-default">{% trans 'Editar' %}</a>
<a href="{{ view.delete_url }}" class="btn btn-default">{% trans 'Excluir' %}</a>
</div>
{% endblock actions %}
</div>

3
templates/norma/normajuridica_incluir.html

@ -1,3 +0,0 @@
{% extends "crud/form.html" %}
{% load i18n %}
{% load crispy_forms_tags %}

36
templates/norma/normajuridica_list.html

@ -1,36 +0,0 @@
{% extends "crud/list.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block base_content %}
<div class="actions btn-group pull-right" role="group">
<a href="{% url 'norma:norma_incluir' %}" class="btn btn-default">
{% blocktrans with verbose_name=view.verbose_name %} Adicionar {{ verbose_name }} {% endblocktrans %}
</a>
</div>
<br /><br /><br />
{% if object_list %}
<table class="table table-striped table-bordered">
<thead class="thead-default">
<tr>
<th>Tipo da Norma Juridica</th>
<th>Número</th>
<th>Ano</th>
<th>Data</th>
<th>Ementa</th>
</tr>
</thead>
{% for obj in object_list %}
<tr>
<td><a href="{% url 'norma:normajuridica_detail' obj.id %}">{{obj.tipo}}</a></td>
<td>{{obj.numero}}</td>
<td>{{obj.ano}}</td>
<td>{{obj.data}}</td>
<td>{{obj.ementa|safe}}</td>
</tr>
{% endfor %}
</table>
{% include "paginacao.html" %}
{% else %}
<h2>Nenhum Registro recuperado</h2>
{% endif %}
{% endblock %}

16
templates/norma/pesquisa.html

@ -1,3 +1,17 @@
{% extends "crud/form.html" %} {% extends "crud/detail.html" %}
{% load i18n %} {% load i18n %}
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block base_content %}
{% block actions %}
<div class="actions btn-group pull-right" role="group">
<a href="{% url 'norma:normajuridica_create' %}" class="btn btn-default">{% trans 'Adicionar Norma Juridica' %}</a>
</div>
<br /><br />
{% endblock %}
{% block detail_content %}
{% crispy form %}
{% endblock %}
{% endblock %}

Loading…
Cancel
Save