Browse Source

Issue #70 em progresso

- Criação do conteúdo para o choice (select) associação de
    ContentType com TipoTextoArticulado.
pull/98/head
LeandroRoberto 9 years ago
parent
commit
2ec612fc04
  1. 1
      compilacao/forms.py
  2. 7
      compilacao/urls.py
  3. 240
      compilacao/views.py
  4. 3
      materia/views.py
  5. 3
      norma/views.py
  6. 3
      templates/compilacao/textoarticulado_detail.html

1
compilacao/forms.py

@ -1,3 +1,4 @@
import sys
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_foundation.layout import (HTML, Column, Div, Fieldset,

7
compilacao/urls.py

@ -62,6 +62,13 @@ urlpatterns_compilacao = [
name='search_dispositivo'), name='search_dispositivo'),
url(r'^config/tipo-textoarticulado$',
views.TipoTaListView.as_view(), name='tipo_ta_list'),
url(r'^config/tipo-textoarticulado/create$',
views.TipoTaCreateView.as_view(), name='tipo_ta_create'),
url(r'^config/tipo-textoarticulado/(?P<pk>[0-9]+)$',
views.TipoTaDetailView.as_view(), name='tipo_ta_detail'),
url(r'^config/tipo-nota/', url(r'^config/tipo-nota/',
include(tipo_nota_crud.urls)), include(tipo_nota_crud.urls)),
url(r'^config/tipo-vide/', url(r'^config/tipo-vide/',

240
compilacao/views.py

@ -3,11 +3,15 @@ from datetime import datetime, timedelta
import sys import sys
from braces.views import FormMessagesMixin from braces.views import FormMessagesMixin
from crispy_forms.helper import FormHelper
from crispy_forms_foundation.layout.containers import Fieldset
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, reverse_lazy
from django.db.models import Q from django.db.models import Q
from django.forms.models import ModelForm
from django.http.response import (HttpResponse, HttpResponseRedirect, from django.http.response import (HttpResponse, HttpResponseRedirect,
JsonResponse) JsonResponse)
from django.shortcuts import get_object_or_404, redirect from django.shortcuts import get_object_or_404, redirect
@ -19,13 +23,15 @@ from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, DeleteView, UpdateView from django.views.generic.edit import CreateView, DeleteView, UpdateView
from django.views.generic.list import ListView from django.views.generic.list import ListView
from compilacao import forms, utils from compilacao import utils
from compilacao.forms import TaForm, NotaForm, VideForm
from compilacao.models import (Dispositivo, Nota, from compilacao.models import (Dispositivo, Nota,
PerfilEstruturalTextoArticulado, PerfilEstruturalTextoArticulado,
TextoArticulado, TipoDispositivo, TipoNota, TextoArticulado, TipoDispositivo, TipoNota,
TipoTextoArticulado, Vide, TipoVide, TipoTextoArticulado, Vide, TipoVide,
TipoPublicacao, VeiculoPublicacao) TipoPublicacao, VeiculoPublicacao,
from compilacao.utils import build_crud PARTICIPACAO_SOCIAL_CHOICES)
from compilacao.utils import build_crud, to_row, FormLayout
DISPOSITIVO_SELECT_RELATED = ( DISPOSITIVO_SELECT_RELATED = (
@ -70,6 +76,160 @@ veiculo_publicacao_crud = build_crud(
]) ])
class IntegracaoTaView(TemplateView):
def get(self, *args, **kwargs):
item = get_object_or_404(self.model, pk=kwargs['pk'])
related_object_type = ContentType.objects.get_for_model(item)
ta = TextoArticulado.objects.filter(
object_id=item.pk,
content_type=related_object_type)
if not ta.exists():
ta = TextoArticulado()
tipo_ta = TipoTextoArticulado.objects.filter(
model=item.__class__.__name__.lower())[:1]
if tipo_ta.exists():
ta.tipo_ta = tipo_ta[0]
ta.content_object = item
else:
ta = ta[0]
if hasattr(item, 'ementa') and item.ementa:
ta.ementa = item.ementa
else:
ta.ementa = 'Integração com %s sem ementa.' % item
if hasattr(item, 'observacao') and item.observacao:
ta.observacao = item.observacao
else:
ta.observacao = 'Integração com %s sem observacao.' % item
if hasattr(item, 'numero') and item.numero:
ta.numero = item.numero
else:
ta.numero = int('%s%s%s' % (
int(datetime.now().year),
int(datetime.now().month),
int(datetime.now().day)))
if hasattr(item, 'ano') and item.ano:
ta.ano = item.ano
else:
ta.ano = datetime.now().year
if hasattr(item, 'data_apresentacao'):
ta.data = item.data_apresentacao
elif hasattr(item, 'data'):
ta.data = item.data
else:
ta.data = datetime.now()
ta.save()
return redirect(to=reverse_lazy('ta_text', kwargs={'ta_id': ta.pk}))
class Meta:
abstract = True
def get_integrations_view_names():
result = []
modules = sys.modules
for key, value in modules.items():
if key.endswith('.views'):
for v in value.__dict__.values():
if hasattr(v, '__bases__'):
for base in v.__bases__:
if base == IntegracaoTaView:
result.append(v)
return result
def choice_extenal_views():
integrations_view_names = get_integrations_view_names()
result = []
for item in integrations_view_names:
ct = ContentType.objects.filter(
model=item.model.__name__.lower(),
app_label=item.model._meta.app_label)
if ct.exists():
result.append((
ct[0].pk,
item.model._meta.verbose_name_plural))
return result
class TipoTaForm(ModelForm):
sigla = forms.CharField(label='Sigla')
descricao = forms.CharField(label='Descrição')
participacao_social = forms.NullBooleanField(
label=_('Participação Social'),
widget=forms.Select(choices=PARTICIPACAO_SOCIAL_CHOICES),
required=False)
class Meta:
model = TipoTextoArticulado
fields = ['sigla',
'descricao',
'model',
'participacao_social',
]
def __init__(self, *args, **kwargs):
row1 = to_row([
('sigla', 2),
('descricao', 4),
('model', 3),
('participacao_social', 3),
])
self.helper = FormHelper()
self.helper.layout = FormLayout(
Fieldset(_('Identificação Básica'),
row1, css_class="large-12"))
super(TipoTaForm, self).__init__(*args, **kwargs)
class TipoTaListView(ListView):
model = TipoTextoArticulado
paginate_by = 10
verbose_name = model._meta.verbose_name
title = model._meta.verbose_name_plural
create_url = reverse_lazy('tipo_ta_create')
class TipoTaCreateView(FormMessagesMixin, CreateView):
model = TipoTextoArticulado
form_class = TipoTaForm
template_name = "compilacao/form.html"
form_valid_message = _('Registro criado com sucesso!')
form_invalid_message = _('O registro não foi criado.')
def get(self, request, *args, **kwargs):
self.object = None
form = self.get_form()
form.fields['model'] = forms.ChoiceField(
choices=choice_extenal_views(),
label='Associação', required=False)
return self.render_to_response(self.get_context_data(form=form))
def get_success_url(self):
return reverse_lazy('tipo_ta_detail', kwargs={'pk': self.object.id})
class TipoTaDetailView(DetailView):
model = TipoTextoArticulado
@property
def title(self):
return self.get_object()
class TaListView(ListView): class TaListView(ListView):
model = TextoArticulado model = TextoArticulado
paginate_by = 10 paginate_by = 10
@ -102,7 +262,7 @@ class TaDetailView(DetailView):
class TaCreateView(FormMessagesMixin, CreateView): class TaCreateView(FormMessagesMixin, CreateView):
model = TextoArticulado model = TextoArticulado
form_class = forms.TaForm form_class = TaForm
template_name = "compilacao/form.html" template_name = "compilacao/form.html"
form_valid_message = _('Registro criado com sucesso!') form_valid_message = _('Registro criado com sucesso!')
form_invalid_message = _('O registro não foi criado.') form_invalid_message = _('O registro não foi criado.')
@ -113,7 +273,7 @@ class TaCreateView(FormMessagesMixin, CreateView):
class TaUpdateView(UpdateView): class TaUpdateView(UpdateView):
model = TextoArticulado model = TextoArticulado
form_class = forms.TaForm form_class = TaForm
template_name = "compilacao/form.html" template_name = "compilacao/form.html"
@property @property
@ -143,64 +303,6 @@ class TaDeleteView(DeleteView):
return reverse_lazy('ta_list') return reverse_lazy('ta_list')
class IntegracaoTaView(TemplateView):
def get(self, *args, **kwargs):
item = get_object_or_404(self.model, pk=kwargs['pk'])
related_object_type = ContentType.objects.get_for_model(item)
ta = TextoArticulado.objects.filter(
object_id=item.pk,
content_type=related_object_type)
if not ta.exists():
ta = TextoArticulado()
tipo_ta = TipoTextoArticulado.objects.filter(
model=item.__class__.__name__.lower())[:1]
if tipo_ta.exists():
ta.tipo_ta = tipo_ta[0]
ta.content_object = item
else:
ta = ta[0]
if hasattr(item, 'ementa') and item.ementa:
ta.ementa = item.ementa
else:
ta.ementa = 'Integração com %s sem ementa.' % item
if hasattr(item, 'observacao') and item.observacao:
ta.observacao = item.observacao
else:
ta.observacao = 'Integração com %s sem observacao.' % item
if hasattr(item, 'numero') and item.numero:
ta.numero = item.numero
else:
ta.numero = int('%s%s%s' % (
int(datetime.now().year),
int(datetime.now().month),
int(datetime.now().day)))
if hasattr(item, 'ano') and item.ano:
ta.ano = item.ano
else:
ta.ano = datetime.now().year
if hasattr(item, 'data_apresentacao'):
ta.data = item.data_apresentacao
elif hasattr(item, 'data'):
ta.data = item.data
else:
ta.data = datetime.now()
ta.save()
return redirect(to=reverse_lazy('ta_text', kwargs={'ta_id': ta.pk}))
class Meta:
abstract = True
class TextView(ListView): class TextView(ListView):
template_name = 'compilacao/text_list.html' template_name = 'compilacao/text_list.html'
@ -1243,7 +1345,7 @@ class NotaMixin(DispositivoSuccessUrlMixin):
class NotasCreateView(NotaMixin, CreateView): class NotasCreateView(NotaMixin, CreateView):
template_name = 'compilacao/ajax_form.html' template_name = 'compilacao/ajax_form.html'
form_class = forms.NotaForm form_class = NotaForm
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
flag_action, modelo_nota = self.get_modelo_nota(request) flag_action, modelo_nota = self.get_modelo_nota(request)
@ -1256,7 +1358,7 @@ class NotasCreateView(NotaMixin, CreateView):
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')
form = forms.NotaForm(request.POST, request.FILES, **kwargs) form = NotaForm(request.POST, request.FILES, **kwargs)
kwargs['ta_id'] = ta_id kwargs['ta_id'] = ta_id
kwargs['dispositivo_id'] = dispositivo_id kwargs['dispositivo_id'] = dispositivo_id
@ -1276,7 +1378,7 @@ class NotasCreateView(NotaMixin, CreateView):
class NotasEditView(NotaMixin, UpdateView): class NotasEditView(NotaMixin, UpdateView):
model = Nota model = Nota
template_name = 'compilacao/ajax_form.html' template_name = 'compilacao/ajax_form.html'
form_class = forms.NotaForm form_class = NotaForm
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
flag_action, modelo_nota = self.get_modelo_nota(request) flag_action, modelo_nota = self.get_modelo_nota(request)
@ -1315,14 +1417,14 @@ class VideMixin(DispositivoSuccessUrlMixin):
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 = forms.VideForm form_class = VideForm
def post_old(self, request, *args, **kwargs): def post_old(self, request, *args, **kwargs):
try: try:
self.object = None self.object = None
ta_id = kwargs.pop('ta_id') ta_id = kwargs.pop('ta_id')
dispositivo_id = kwargs.pop('dispositivo_id') dispositivo_id = kwargs.pop('dispositivo_id')
form = forms.VideForm(request.POST, request.FILES, **kwargs) form = VideForm(request.POST, request.FILES, **kwargs)
kwargs['ta_id'] = ta_id kwargs['ta_id'] = ta_id
kwargs['dispositivo_id'] = dispositivo_id kwargs['dispositivo_id'] = dispositivo_id
@ -1341,7 +1443,7 @@ class VideCreateView(VideMixin, CreateView):
class VideEditView(VideMixin, UpdateView): class VideEditView(VideMixin, UpdateView):
model = Vide model = Vide
template_name = 'compilacao/ajax_form.html' template_name = 'compilacao/ajax_form.html'
form_class = forms.VideForm form_class = VideForm
class VideDeleteView(VideMixin, TemplateView): class VideDeleteView(VideMixin, TemplateView):

3
materia/views.py

@ -15,12 +15,12 @@ from django.views.generic import ListView
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla.views import GenericView from vanilla.views import GenericView
import sapl
from comissoes.models import Comissao, Composicao from comissoes.models import Comissao, Composicao
from compilacao.views import IntegracaoTaView from compilacao.views import IntegracaoTaView
from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica
from parlamentares.models import Parlamentar from parlamentares.models import Parlamentar
from sapl.crud import build_crud from sapl.crud import build_crud
import sapl
from .models import (Anexada, Autor, Autoria, DespachoInicial, from .models import (Anexada, Autor, Autoria, DespachoInicial,
DocumentoAcessorio, MateriaLegislativa, Numeracao, Orgao, DocumentoAcessorio, MateriaLegislativa, Numeracao, Orgao,
@ -29,6 +29,7 @@ from .models import (Anexada, Autor, Autoria, DespachoInicial,
TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao, TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao,
Tramitacao, UnidadeTramitacao) Tramitacao, UnidadeTramitacao)
origem_crud = build_crud( origem_crud = build_crud(
Origem, 'origem', [ Origem, 'origem', [

3
norma/views.py

@ -12,14 +12,15 @@ from django.utils.translation import ugettext_lazy as _
from django.views.generic.edit import FormMixin from django.views.generic.edit import FormMixin
from vanilla.views import GenericView from vanilla.views import GenericView
import sapl
from compilacao.views import IntegracaoTaView from compilacao.views import IntegracaoTaView
from materia.models import MateriaLegislativa, TipoMateriaLegislativa from materia.models import MateriaLegislativa, TipoMateriaLegislativa
from sapl.crud import build_crud from sapl.crud import build_crud
import sapl
from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica, from .models import (AssuntoNorma, LegislacaoCitada, NormaJuridica,
TipoNormaJuridica) TipoNormaJuridica)
assunto_norma_crud = build_crud( assunto_norma_crud = build_crud(
AssuntoNorma, 'assunto_norma_juridica', [ AssuntoNorma, 'assunto_norma_juridica', [

3
templates/compilacao/textoarticulado_detail.html

@ -8,7 +8,8 @@
<li><a href="{% url 'ta_delete' object.pk %}" class="button alert tiny">{% trans 'Excluir' %}</a></li> <li><a href="{% url 'ta_delete' object.pk %}" class="button alert tiny">{% trans 'Excluir' %}</a></li>
<li><a href="#" class="button tiny" data-dropdown="drop"><i class="fi-widget"></i></a> <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> <ul id="drop" class="tiny f-dropdown" data-dropdown-content>
<li><a href="{% url 'tipopublicacao:list' %}">{%model_verbose_name_plural 'TipoPublicacao'%}</a></li> <li><a href="{% url 'tipo_ta_list' %}">{%model_verbose_name_plural 'TipoTextoArticulado'%}</a></li>
<li><a href="{% url 'tipopublicacao:list' %}">{%model_verbose_name_plural 'TipoPublicacao'%}</a></li>
<li><a href="{% url 'veiculopublicacao:list' %}">{%model_verbose_name_plural 'VeiculoPublicacao'%}</a></li> <li><a href="{% url 'veiculopublicacao:list' %}">{%model_verbose_name_plural 'VeiculoPublicacao'%}</a></li>
<li><a href="{% url 'tiponota:list' %}">{%model_verbose_name_plural 'TipoNota'%}</a></li> <li><a href="{% url 'tiponota:list' %}">{%model_verbose_name_plural 'TipoNota'%}</a></li>
<li><a href="{% url 'tipovide:list' %}">{%model_verbose_name_plural 'TipoVide'%}</a></li> <li><a href="{% url 'tipovide:list' %}">{%model_verbose_name_plural 'TipoVide'%}</a></li>

Loading…
Cancel
Save