Browse Source

Add Expediente Materia CRUD

pull/7/head
Edward Ribeiro 9 years ago
parent
commit
2dc0268201
  1. 20
      sessao/urls.py
  2. 194
      sessao/views.py
  3. 38
      templates/sessao/expediente_ordemdia_list.html
  4. 3
      templates/sessao/sessaoplenaria_detail.html

20
sessao/urls.py

@ -1,12 +1,14 @@
from django.conf.urls import include, url from django.conf.urls import include, url
from sessao.views import (EditMateriaOrdemDiaView, ExpedienteView, from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView,
ExpedienteOrdemDiaView, ExpedienteView,
ExplicacaoDelete, ExplicacaoEdit, ExplicacaoView, ExplicacaoDelete, ExplicacaoEdit, ExplicacaoView,
ListMateriaOrdemDiaView, MateriaOrdemDiaView, ListExpedienteOrdemDiaView, ListMateriaOrdemDiaView,
MesaView, OradorExpedienteDelete, MateriaOrdemDiaView, MesaView,
OradorExpedienteEdit, OradorExpedienteView, OradorExpedienteDelete, OradorExpedienteEdit,
PainelView, PresencaOrdemDiaView, PresencaView, OradorExpedienteView, PainelView,
ResumoView, sessao_crud, tipo_expediente_crud, PresencaOrdemDiaView, PresencaView, ResumoView,
sessao_crud, tipo_expediente_crud,
tipo_resultado_votacao_crud, tipo_sessao_crud) tipo_resultado_votacao_crud, tipo_sessao_crud)
urlpatterns_sessao = sessao_crud.urlpatterns + [ urlpatterns_sessao = sessao_crud.urlpatterns + [
@ -32,6 +34,12 @@ urlpatterns_sessao = sessao_crud.urlpatterns + [
EditMateriaOrdemDiaView.as_view(), name='materiaordemdia_edit'), EditMateriaOrdemDiaView.as_view(), name='materiaordemdia_edit'),
url(r'^(?P<pk>\d+)/materiaordemdia/create$', url(r'^(?P<pk>\d+)/materiaordemdia/create$',
MateriaOrdemDiaView.as_view(), name='materiaordemdia_create'), MateriaOrdemDiaView.as_view(), name='materiaordemdia_create'),
url(r'^(?P<pk>\d+)/expedienteordemdia/list$',
ListExpedienteOrdemDiaView.as_view(), name='expedienteordemdia_list'),
url(r'^(?P<pk>\d+)/expedienteordemdia/edit/(?P<oid>\d+)$',
EditExpedienteOrdemDiaView.as_view(), name='expedienteordemdia_edit'),
url(r'^(?P<pk>\d+)/expedienteordemdia/create$',
ExpedienteOrdemDiaView.as_view(), name='expedienteordemdia_create'),
url(r'^(?P<pk>\d+)/resumo$', url(r'^(?P<pk>\d+)/resumo$',
ResumoView.as_view(), name='resumo'), ResumoView.as_view(), name='resumo'),
url(r'^(?P<pk>\d+)/explicacao$', url(r'^(?P<pk>\d+)/explicacao$',

194
sessao/views.py

@ -260,6 +260,51 @@ class ListMateriaOrdemDiaView(sessao_crud.CrudDetailView):
return self.render_to_response(context) return self.render_to_response(context)
class ListExpedienteOrdemDiaView(sessao_crud.CrudDetailView):
template_name = 'sessao/expediente_ordemdia_list.html'
def get(self, request, *args, **kwargs):
self.object = self.get_object()
context = self.get_context_data(object=self.object)
pk = self.kwargs['pk']
ordem = ExpedienteMateria.objects.filter(sessao_plenaria_id=pk)
materias_ordem = []
for o in ordem:
ementa = o.observacao
titulo = o.materia
numero = o.numero_ordem
print(ementa)
autoria = Autoria.objects.filter(materia_id=o.materia_id)
if len(autoria) > 1:
autor = 'Autores: '
else:
autor = 'Autor: '
for a in autoria:
autor += str(a.autor)
autor += ' '
mat = {'pk': pk,
'oid': o.materia_id,
'ementa': ementa,
'titulo': titulo,
'numero': numero,
'resultado': o.resultado,
'autor': autor,
}
materias_ordem.append(mat)
sorted(materias_ordem, key=lambda x: x['numero'])
context.update({'materias_ordem': materias_ordem})
return self.render_to_response(context)
class MateriaOrdemDiaForm(forms.Form): class MateriaOrdemDiaForm(forms.Form):
data_sessao = forms.CharField(required=True) data_sessao = forms.CharField(required=True)
numero_ordem = forms.IntegerField(required=True) numero_ordem = forms.IntegerField(required=True)
@ -416,6 +461,155 @@ class EditMateriaOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
return reverse('sessaoplenaria:materiaordemdia_list', return reverse('sessaoplenaria:materiaordemdia_list',
kwargs={'pk': pk}) kwargs={'pk': pk})
class ExpedienteOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
template_name = 'sessao/materia_ordemdia.html'
form_class = MateriaOrdemDiaForm
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('sessaoplenaria:expedienteordemdia_list',
kwargs={'pk': pk})
def get(self, request, *args, **kwargs):
self.object = self.get_object()
context = self.get_context_data(object=self.object)
now = datetime.now()
tipo_materia = TipoMateriaLegislativa.objects.all()
data_sessao = now
tipo_sessao = TipoSessaoPlenaria.objects.all()
tipo_votacao = ExpedienteMateria.TIPO_VOTACAO_CHOICES
ano_materia = now.year
context.update({'data_sessao': data_sessao,
'tipo_sessao': tipo_sessao,
'tipo_materia': tipo_materia,
'tipo_votacao': tipo_votacao,
'ano_materia': ano_materia,
'error_message': '', })
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
self.object = self.get_object()
context = self.get_context_data(object=self.object)
form = MateriaOrdemDiaForm(request.POST)
if form.is_valid():
try:
materia = MateriaLegislativa.objects.get(
numero=request.POST['numero_materia'],
tipo_id=request.POST['tipo_materia'],
ano=request.POST['ano_materia'])
except ObjectDoesNotExist:
context.update(
{'error_message': "Matéria inexistente!"})
return self.form_invalid(form)
# TODO: barrar matérias não existentes
# TODO: barrar criação de ordemdia para materias já incluídas
ordemdia = ExpedienteMateria()
ordemdia.sessao_plenaria_id = self.object.id
ordemdia.materia_id = materia.id
ordemdia.numero_ordem = request.POST['numero_ordem']
ordemdia.data_ordem = datetime.now()
ordemdia.observacao = sub('&nbsp;', ' ',
strip_tags(request.POST['observacao']))
ordemdia.tipo_votacao = request.POST['tipo_votacao']
ordemdia.save()
return self.form_valid(form)
else:
context.update(
{'error_message': "Não foi possível salvar formulário!"})
return self.form_invalid(form)
class EditExpedienteOrdemDiaView(FormMixin, sessao_crud.CrudDetailView):
template_name = 'sessao/materia_ordemdia_edit.html'
form_class = MateriaOrdemDiaForm
def get(self, request, *args, **kwargs):
self.object = self.get_object()
context = self.get_context_data(object=self.object)
pk = kwargs['pk']
oid = kwargs['oid']
ordem = ExpedienteMateria.objects.get(
sessao_plenaria_id=pk, materia_id=oid)
materia = MateriaLegislativa.objects.get(
id=ordem.materia_id)
data_ordem = ordem.data_ordem
tipo_votacao = ExpedienteMateria.TIPO_VOTACAO_CHOICES
tipo_sessao = TipoSessaoPlenaria.objects.all()
tipo_materia = TipoMateriaLegislativa.objects.all()
context.update({'data_sessao': data_ordem,
'tipo_sessao': tipo_sessao,
'tipo_sessao_selected': self.object.tipo,
'tipo_materia': tipo_materia,
'tipo_materia_selected': materia.tipo,
'tipo_votacao': tipo_votacao,
'tipo_votacao_selected': ordem.tipo_votacao,
'ano_materia': materia.ano,
'numero_ordem': ordem.numero_ordem,
'numero_materia': materia.numero,
'ordem_id': oid,
'oid': '',
'observacao': sub(
'&nbsp;', ' ', strip_tags(ordem.observacao)),
'error_message': '', })
return self.render_to_response(context)
def post(self, request, *args, **kwargs):
self.object = self.get_object()
context = self.get_context_data(object=self.object)
form = MateriaOrdemDiaForm(request.POST)
pk = kwargs['pk']
oid = kwargs['oid']
ordemdia = ExpedienteMateria.objects.get(
sessao_plenaria_id=pk, materia_id=oid)
if 'update-ordemdia' in request.POST:
if form.is_valid():
try:
materia = MateriaLegislativa.objects.get(
numero=request.POST['numero_materia'],
tipo_id=request.POST['tipo_materia'],
ano=request.POST['ano_materia'])
except ObjectDoesNotExist:
context.update(
{'error_message': "Matéria inexistente!"})
return self.form_invalid(form)
ordemdia.materia_id = materia.id
ordemdia.numero_ordem = request.POST['numero_ordem']
ordemdia.tipo_votacao = request.POST['tipo_votacao']
obs = strip_tags(request.POST['observacao'])
ordemdia.observacao = sub('&nbsp;', ' ', obs)
ordemdia.save()
return self.form_valid(form)
else:
context.update(
{'error_message': "Não foi possível salvar formulário!"})
return self.form_invalid(form)
elif 'delete-ordemdia' in request.POST:
ordemdia.delete()
return self.form_valid(form)
def get_success_url(self):
pk = self.kwargs['pk']
return reverse('sessaoplenaria:expedienteordemdia_list',
kwargs={'pk': pk})
class OradorForm(forms.Form): class OradorForm(forms.Form):
numero_ordem = forms.IntegerField(required=True) numero_ordem = forms.IntegerField(required=True)
parlamentar = forms.CharField(required=False, max_length=20) parlamentar = forms.CharField(required=False, max_length=20)

38
templates/sessao/expediente_ordemdia_list.html

@ -0,0 +1,38 @@
{% extends "sessao/sessaoplenaria_detail.html" %}
{% load i18n %}
{% block detail_content %}
Matérias do Expediente
<ul class="small-block-grid-3 medium-block-grid-3 large-block-grid-3">
<li>Matéria</li>
<li>Ementa</li>
<li>Resultado da Votação</li>
</ul>
<ul class="small-block-grid-3 medium-block-grid-3 large-block-grid-3">
{% for m in materias_ordem %}
<li>
{{m.numero}} - <a href="{% url 'sessaoplenaria:expedienteordemdia_edit' m.pk m.oid %}">{{m.titulo}}</a>
&nbsp;
</br>
{{m.autor}}
</li>
<li>{{m.ementa|safe}}</li>
<li>{% if m.resultado %}{{m.resultado}}{% endif %}</li>
{% endfor %}
</ul>
</br>
<a href="{% url 'sessaoplenaria:expedienteordemdia_create' object.pk %}" class="button secondary">
{% trans 'Adicionar Matérias' %}
</a></dd>
<!-- TODO implment -->
<!--
<button>Incluir várias matérias</button>
<button>Reordenar Matérias na Ordem do Dia</button>
<button>Atualizar</button>
-->
{% endblock detail_content %}

3
templates/sessao/sessaoplenaria_detail.html

@ -10,7 +10,8 @@
<dd><a href="{% url 'sessaoplenaria:oradorexpediente' object.pk %}" class="button secondary">{% trans 'Oradores do Expediente' %}</a></dd> <dd><a href="{% url 'sessaoplenaria:oradorexpediente' object.pk %}" class="button secondary">{% trans 'Oradores do Expediente' %}</a></dd>
<dd><a href="{% url 'sessaoplenaria:mesa' object.pk %}" class="button secondary">{% trans 'Mesa' %}</a></dd> <dd><a href="{% url 'sessaoplenaria:mesa' object.pk %}" class="button secondary">{% trans 'Mesa' %}</a></dd>
<dd><a href="{% url 'sessaoplenaria:explicacao' object.pk %}" class="button secondary">{% trans 'Explicações Pessoais' %}</a></dd> <dd><a href="{% url 'sessaoplenaria:explicacao' object.pk %}" class="button secondary">{% trans 'Explicações Pessoais' %}</a></dd>
<dd><a href="{% url 'sessaoplenaria:materiaordemdia_list' object.pk %}" class="button secondary">{% trans 'Matérias' %}</a></dd> <dd><a href="{% url 'sessaoplenaria:materiaordemdia_list' object.pk %}" class="button secondary">{% trans 'Matérias Ordem do Dia' %}</a></dd>
<dd><a href="{% url 'sessaoplenaria:expedienteordemdia_list' object.pk %}" class="button secondary">{% trans 'Matérias Expediente' %}</a></dd>
<dd><a href="{% url 'sessaoplenaria:painel' object.pk %}" class="button secondary">{% trans 'Painel Eletrônico' %}</a></dd> <dd><a href="{% url 'sessaoplenaria:painel' object.pk %}" class="button secondary">{% trans 'Painel Eletrônico' %}</a></dd>
<dd><a href="{% url 'sessaoplenaria:resumo' object.pk %}" class="button secondary">{% trans 'Resumo' %}</a></dd> <dd><a href="{% url 'sessaoplenaria:resumo' object.pk %}" class="button secondary">{% trans 'Resumo' %}</a></dd>
</dl> </dl>

Loading…
Cancel
Save