Browse Source

Creat view acompnahar materia

pull/153/head
Eduardo Edson Batista Cordeiro Alves 9 years ago
parent
commit
059f2bea7a
  1. 9
      sessao/models.py
  2. 10
      sessao/urls.py
  3. 124
      sessao/views.py
  4. 22
      templates/sessao/pauta/acompanhar_materia.html
  5. 53
      templates/sessao/pauta/expediente.html
  6. 63
      templates/sessao/pauta/ordem.html
  7. 8
      templates/sessao/pauta_sessao_detail.html

9
sessao/models.py

@ -5,6 +5,7 @@ from materia.models import MateriaLegislativa
from parlamentares.models import (CargoMesa, Legislatura, Parlamentar, from parlamentares.models import (CargoMesa, Legislatura, Parlamentar,
SessaoLegislativa) SessaoLegislativa)
from sapl.utils import YES_NO_CHOICES, make_choices from sapl.utils import YES_NO_CHOICES, make_choices
from django.contrib.auth.models import User
class TipoSessaoPlenaria(models.Model): class TipoSessaoPlenaria(models.Model):
@ -279,3 +280,11 @@ class SessaoPlenariaPresenca(models.Model):
verbose_name = _('Presença em Sessão Plenária') verbose_name = _('Presença em Sessão Plenária')
verbose_name_plural = _('Presenças em Sessões Plenárias') verbose_name_plural = _('Presenças em Sessões Plenárias')
ordering = ['parlamentar__nome_parlamentar'] ordering = ['parlamentar__nome_parlamentar']
class AcompanharMateria(models.Model):
usuario = models.CharField(max_length=50)
email = models.CharField(
max_length=50, verbose_name=_('Endereço de email'))
data_cadastro = models.DateField(auto_now_add=True)
materia_cadastrada = models.ForeignKey(MateriaLegislativa)

10
sessao/urls.py

@ -17,7 +17,9 @@ from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView,
VotacaoNominalExpedienteEditView, VotacaoNominalExpedienteEditView,
VotacaoNominalExpedienteView, VotacaoNominalView, VotacaoNominalExpedienteView, VotacaoNominalView,
VotacaoView, sessao_crud, tipo_expediente_crud, VotacaoView, sessao_crud, tipo_expediente_crud,
tipo_resultado_votacao_crud, tipo_sessao_crud) tipo_resultado_votacao_crud, tipo_sessao_crud,
PautaExpedienteDetail, PautaOrdemDetail,
AcompanharMateriaView)
urlpatterns_sessao = sessao_crud.urlpatterns + [ urlpatterns_sessao = sessao_crud.urlpatterns + [
url(r'^(?P<pk>\d+)/expediente$', url(r'^(?P<pk>\d+)/expediente$',
@ -90,6 +92,12 @@ urlpatterns_sessao = sessao_crud.urlpatterns + [
url(r'^(?P<pk>\d+)/pauta-sessao-detail$', url(r'^(?P<pk>\d+)/pauta-sessao-detail$',
PautaSessaoDetailView.as_view(), name='pauta_sessao_detail'), PautaSessaoDetailView.as_view(), name='pauta_sessao_detail'),
url(r'^cadastro$', SessaoCadastroView.as_view(), name='sessao_cadastro'), url(r'^cadastro$', SessaoCadastroView.as_view(), name='sessao_cadastro'),
url(r'^pauta-sessao/(?P<pk>\d+)/expediente/$',
PautaExpedienteDetail.as_view(), name='pauta_expediente_detail'),
url(r'^pauta-sessao/(?P<pk>\d+)/ordem/$',
PautaOrdemDetail.as_view(), name='pauta_ordem_detail'),
url(r'^pauta-sessao/(?P<pk>\d+)/acompanhar-materia/$',
AcompanharMateriaView.as_view(), name='acompanhar_materia'),
] ]
sessao_urls = urlpatterns_sessao, sessao_crud.namespace, sessao_crud.namespace sessao_urls = urlpatterns_sessao, sessao_crud.namespace, sessao_crud.namespace

124
sessao/views.py

@ -2,7 +2,7 @@ from datetime import datetime
from re import sub from re import sub
from crispy_forms.helper import FormHelper from crispy_forms.helper import FormHelper
from crispy_forms.layout import ButtonHolder, Fieldset, Layout, Submit from crispy_forms.layout import ButtonHolder, Fieldset, Layout, Submit, Column
from django import forms from django import forms
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
@ -15,7 +15,9 @@ from django.views.generic.edit import FormMixin
from rest_framework import generics from rest_framework import generics
import sapl import sapl
from materia.models import Autoria, TipoMateriaLegislativa from materia.models import (Autoria, TipoMateriaLegislativa,
DocumentoAcessorio, Tramitacao)
from norma.models import NormaJuridica
from parlamentares.models import Parlamentar from parlamentares.models import Parlamentar
from sapl.crud import build_crud from sapl.crud import build_crud
from sessao.serializers import SessaoPlenariaSerializer from sessao.serializers import SessaoPlenariaSerializer
@ -25,7 +27,7 @@ from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao,
OradorExpediente, OrdemDia, PresencaOrdemDia, OradorExpediente, OrdemDia, PresencaOrdemDia,
RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca, RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca,
TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria,
VotoParlamentar) VotoParlamentar, AcompanharMateria)
tipo_sessao_crud = build_crud( tipo_sessao_crud = build_crud(
TipoSessaoPlenaria, 'tipo_sessao_plenaria', [ TipoSessaoPlenaria, 'tipo_sessao_plenaria', [
@ -2275,7 +2277,8 @@ class PautaSessaoDetailView(sessao_crud.CrudDetailView):
autoria = Autoria.objects.filter(materia_id=m.materia_id) autoria = Autoria.objects.filter(materia_id=m.materia_id)
autor = [str(x.autor) for x in autoria] autor = [str(x.autor) for x in autoria]
mat = {'ementa': ementa, mat = {'id': m.id,
'ementa': ementa,
'titulo': titulo, 'titulo': titulo,
'numero': numero, 'numero': numero,
'resultado': resultado, 'resultado': resultado,
@ -2321,7 +2324,8 @@ class PautaSessaoDetailView(sessao_crud.CrudDetailView):
materia_id=o.materia_id) materia_id=o.materia_id)
autor = [str(x.autor) for x in autoria] autor = [str(x.autor) for x in autoria]
mat = {'ementa': ementa, mat = {'id': o.id,
'ementa': ementa,
'titulo': titulo, 'titulo': titulo,
'numero': numero, 'numero': numero,
'resultado': resultado, 'resultado': resultado,
@ -2441,3 +2445,113 @@ class SessaoCadastroView(FormMixin, sessao_crud.CrudDetailView):
class SessaoPlenariaView(generics.ListAPIView): class SessaoPlenariaView(generics.ListAPIView):
queryset = SessaoPlenaria.objects.all() queryset = SessaoPlenaria.objects.all()
serializer_class = SessaoPlenariaSerializer serializer_class = SessaoPlenariaSerializer
class PautaExpedienteDetail(sessao_crud.CrudDetailView):
template_name = "sessao/pauta/expediente.html"
def get(self, request, *args, **kwargs):
pk = self.kwargs['pk']
expediente = ExpedienteMateria.objects.get(id=pk)
doc_ace = DocumentoAcessorio.objects.filter(
materia=expediente.materia)
tramitacao = Tramitacao.objects.filter(
materia=expediente.materia)
return self.render_to_response(
{'expediente': expediente,
'doc_ace': doc_ace,
'tramitacao': tramitacao})
class PautaOrdemDetail(sessao_crud.CrudDetailView):
template_name = "sessao/pauta/ordem.html"
def get(self, request, *args, **kwargs):
pk = self.kwargs['pk']
ordem = OrdemDia.objects.get(id=pk)
norma = NormaJuridica.objects.filter(
materia=ordem.materia)
doc_ace = DocumentoAcessorio.objects.filter(
materia=ordem.materia)
tramitacao = Tramitacao.objects.filter(
materia=ordem.materia)
return self.render_to_response(
{'ordem': ordem,
'norma': norma,
'doc_ace': doc_ace,
'tramitacao': tramitacao})
class AcompanharMateriaForm(ModelForm):
class Meta:
model = AcompanharMateria
fields = ['email']
def __init__(self, *args, **kwargs):
row1 = sapl.layout.to_row([('email', 10)])
row1.append(
Column(
ButtonHolder(
Submit('Submit', 'Cadastrar',
css_class='button primary')
), css_class='columns-large-2'
)
)
self.helper = FormHelper()
self.helper.layout = Layout(
Fieldset(
'Acompanhamento de Matéria por e-mail', row1
)
)
super(AcompanharMateriaForm, self).__init__(*args, **kwargs)
class AcompanharMateriaView(FormMixin, sessao_crud.CrudDetailView):
template_name = "sessao/pauta/acompanhar_materia.html"
def get(self, request, *args, **kwargs):
pk = self.kwargs['pk']
materia = MateriaLegislativa.objects.get(id=pk)
return self.render_to_response(
{'form': AcompanharMateriaForm(),
'materia': materia})
def post(self, request, *args, **kwargs):
form = AcompanharMateriaForm(request.POST)
pk = self.kwargs['pk']
materia = MateriaLegislativa.objects.get(id=pk)
if form.is_valid():
email = form.cleaned_data['email']
usuario = request.user
try:
AcompanharMateria.objects.get(
email=email,
materia_cadastrada=materia)
except ObjectDoesNotExist:
acompanhar = form.save(commit=False)
acompanhar.materia_cadastrada = materia
acompanhar.usuario = usuario.username
acompanhar.save()
else:
return self.render_to_response(
{'form': form,
'materia': materia,
'error': 'Essa matéria já está sendo acompanhada por este e-mail.'})
return self.form_valid(form)
else:
return self.render_to_response(
{'form': form,
'materia': materia})
def get_success_url(self):
return reverse('sessaoplenaria:list_pauta_sessao')

22
templates/sessao/pauta/acompanhar_materia.html

@ -0,0 +1,22 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
<h1>Acompanhamento de Matéria</h1>
<hr>
<ul class="small-block-grid-3 medium-block-grid-3 large-block-grid-3">
<li><b>Tipo:</b> {{materia.tipo.sigla}} - {{materia.tipo.descricao}}</li>
<li><b>Número:</b> {{materia.numero}}</li>
<li><b>Ano:</b> {{materia.ano}}</li>
</ul>
<ul class="small-block-grid-1 medium-block-grid-1 large-block-grid-1">
<li><b>Ementa:</b> {{materia.ementa|safe}}</li>
</ul>
{% if error %} <h5 align="center"><font color="#FF0000">{{ error }}</font></h5> {% endif %}
{% crispy form %}
{% endblock %}

53
templates/sessao/pauta/expediente.html

@ -0,0 +1,53 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
<h1>{{expediente.materia}}</h1>
<hr>
<fieldset>
<legend>Identificação Básica</legend>
<b>Tipo:</b> {{expediente.materia.tipo.sigla}} - {{expediente.materia.tipo.descricao}} <br />
<b>Número:</b> {{expediente.materia.numero}} <br />
<b>Data:</b> {{expediente.materia.data_apresentacao}} <br />
<b>Ementa:</b> {{expediente.materia.ementa|safe}} <br />
<b>Indexação:</b> {{expediente.materia.indexacao}} <br />
</fieldset>
<fieldset>
<legend>Outras Informações</legend>
<b>Em Tramitação?</b> {{expediente.materia.em_tramitacao|yesno:"Sim,Não"}} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b>Matéria Polêmica?</b> {{expediente.materia.polemica|yesno:"Sim,Não"}} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b>Regime Tramitação:</b> {{expediente.materia.regime_tramitacao}}
</fieldset>
<fieldset>
<legend>Documentos Acessórios</legend>
{% for d in doc_ace %}
<b>Nome:</b> {{d.nome}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b>Tipo:</b> {{d.tipo}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b>Data:</b> {{d.data}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b>Autor:</b> {{d.autor}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br /><br />
{% endfor %}
</fieldset>
<fieldset>
<legend>Tramitação{% if expediente.materia.em_tramitacao %}<a href="{% url 'sessaoplenaria:acompanhar_materia' expediente.materia.id %}"> >>> Acompanhar matéria <<<</a>{% endif %}</legend>
{% for t in tramitacao %}
<b>Data: </b> {{t.data_tramitacao}}<br />
<b>Origem: </b> {{t.unidade_tramitacao_destino}} - <b>Destino: </b> {{t.unidade_tramitacao_local}}<br />
<b>Situação: </b> {{t.status}}<br />
<b>Última Ação: </b> {{t.texto}}<br />
<br />
{% endfor %}
</fieldset>
{% endblock %}

63
templates/sessao/pauta/ordem.html

@ -0,0 +1,63 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block actions %} {% endblock %}
{% block detail_content %}
<h1>{{ordem.materia}}</h1>
<hr>
<fieldset>
<legend>Identificação Básica</legend>
<b>Tipo:</b> {{ordem.materia.tipo.sigla}} - {{ordem.materia.tipo.descricao}} <br />
<b>Número:</b> {{ordem.materia.numero}} <br />
<b>Data:</b> {{ordem.materia.data_apresentacao}} <br />
<b>Ementa:</b> {{ordem.materia.ementa|safe}} <br />
<b>Indexação:</b> {{ordem.materia.indexacao}} <br />
</fieldset>
<fieldset>
<legend>Norma Juridica Vinculada</legend>
<!-- TODO -->
{% for n in norma %}
<b><a href="">{{n}}</a></b>
{% endfor %}
</fieldset>
<fieldset>
<legend>Outras Informações</legend>
<b>Em Tramitação?</b> {{ordem.materia.em_tramitacao|yesno:"Sim,Não"}} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b>Matéria Polêmica?</b> {{ordem.materia.polemica|yesno:"Sim,Não"}} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b>Regime Tramitação:</b> {{ordem.materia.regime_tramitacao}}
</fieldset>
<fieldset>
<legend>Documentos Acessórios</legend>
{% for d in doc_ace %}
<b>Nome:</b> {{d.nome}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b>Tipo:</b> {{d.tipo}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b>Data:</b> {{d.data}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<b>Autor:</b> {{d.autor}}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<br /><br />
{% endfor %}
</fieldset>
<fieldset>
<legend>Tramitação{% if ordem.materia.em_tramitacao %}<a href="{% url 'sessaoplenaria:acompanhar_materia' ordem.materia.id %}"> >>> Acompanhar matéria <<<</a>{% endif %}</legend>
{% for t in tramitacao %}
<b>Data: </b> {{t.data_tramitacao}}<br />
<b>Origem: </b> {{t.unidade_tramitacao_destino}} - <b>Destino: </b> {{t.unidade_tramitacao_local}}<br />
<b>Situação: </b> {{t.status}}<br />
<b>Última Ação: </b> {{t.texto}}<br />
<br />
{% endfor %}
</fieldset>
{% endblock %}

8
templates/sessao/pauta_sessao_detail.html

@ -37,12 +37,12 @@
<ul class="small-block-grid-3 medium-block-grid-3 large-block-grid-3"> <ul class="small-block-grid-3 medium-block-grid-3 large-block-grid-3">
{% for m in materia_expediente %} {% for m in materia_expediente %}
<li> <li>
{{m.numero}} - {{m.titulo}} {{m.numero}} - <a href="{% url 'sessaoplenaria:pauta_expediente_detail' m.id %}">{{m.titulo}}</a>
<br /> <br />
<b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }} <b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }}
</li> </li>
<li>{{m.ementa|safe}}</li> <li>{{m.ementa|safe}}</li>
<li>{{m.resultado}}</li> <li>{{m.situacao}}</li>
{% endfor %} {% endfor %}
</ul> </ul>
</fieldset> </fieldset>
@ -71,12 +71,12 @@
<ul class="small-block-grid-3 medium-block-grid-3 large-block-grid-3"> <ul class="small-block-grid-3 medium-block-grid-3 large-block-grid-3">
{% for m in materias_ordem %} {% for m in materias_ordem %}
<li> <li>
{{m.numero}} - {{m.titulo}} {{m.numero}} - <a href="{% url 'sessaoplenaria:pauta_ordem_detail' m.id %}">{{m.titulo}}</a>
<br /> <br />
<b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }} <b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }}
</li> </li>
<li>{{m.ementa|safe}}</li> <li>{{m.ementa|safe}}</li>
<li>{{m.resultado}}</li> <li>{{m.situacao}}</li>
{% endfor %} {% endfor %}
</ul> </ul>
</fieldset> </fieldset>

Loading…
Cancel
Save