diff --git a/materia/forms.py b/materia/forms.py index 13a4f68a6..5c9434a6e 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -11,10 +11,11 @@ from norma.models import LegislacaoCitada, TipoNormaJuridica from parlamentares.models import Parlamentar, Partido from sapl.layout import form_actions -from .models import (Anexada, Autor, DespachoInicial, DocumentoAcessorio, - MateriaLegislativa, Numeracao, Origem, Proposicao, - Relatoria, StatusTramitacao, TipoAutor, TipoDocumento, - TipoMateriaLegislativa, Tramitacao, UnidadeTramitacao) +from .models import (AcompanhamentoMateria, Anexada, Autor, DespachoInicial, + DocumentoAcessorio, MateriaLegislativa, Numeracao, Origem, + Proposicao, Relatoria, StatusTramitacao, TipoAutor, + TipoDocumento, TipoMateriaLegislativa, Tramitacao, + UnidadeTramitacao) def get_range_anos(): @@ -109,6 +110,29 @@ class ProposicaoForm(ModelForm): *args, **kwargs) +class AcompanhamentoMateriaForm(ModelForm): + + class Meta: + model = AcompanhamentoMateria + fields = ['email'] + + def __init__(self, *args, **kwargs): + + row1 = sapl.layout.to_row([('email', 10)]) + + row1.append( + Column(form_actions(save_label='Cadastrar'), css_class='col-md-2') + ) + + self.helper = FormHelper() + self.helper.layout = Layout( + Fieldset( + 'Acompanhamento de Matéria por e-mail', row1 + ) + ) + super(AcompanhamentoMateriaForm, self).__init__(*args, **kwargs) + + class DocumentoAcessorioForm(ModelForm): tipo = forms.ModelChoiceField( diff --git a/materia/migrations/0016_auto_20160223_0813.py b/materia/migrations/0016_auto_20160223_0813.py new file mode 100644 index 000000000..0d2cb84a5 --- /dev/null +++ b/materia/migrations/0016_auto_20160223_0813.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +import datetime +from django.utils.timezone import utc + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0015_auto_20160216_1015'), + ] + + operations = [ + migrations.AddField( + model_name='acompanhamentomateria', + name='data_cadastro', + field=models.DateField(auto_now_add=True, default=datetime.datetime(2016, 2, 23, 11, 13, 25, 362112, tzinfo=utc)), + preserve_default=False, + ), + migrations.AddField( + model_name='acompanhamentomateria', + name='usuario', + field=models.CharField(max_length=50, default=''), + preserve_default=False, + ), + ] diff --git a/materia/models.py b/materia/models.py index bb2fb078d..448ab784f 100644 --- a/materia/models.py +++ b/materia/models.py @@ -132,10 +132,12 @@ class MateriaLegislativa(models.Model): 'tipo': self.tipo, 'numero': self.numero, 'ano': self.ano} -class AcompanhamentoMateria(models.Model): # AcompMateria +class AcompanhamentoMateria(models.Model): + usuario = models.CharField(max_length=50) materia = models.ForeignKey(MateriaLegislativa) email = models.CharField( max_length=100, verbose_name=_('Endereço de E-mail')) + data_cadastro = models.DateField(auto_now_add=True) hash = models.CharField(max_length=8) class Meta: diff --git a/materia/urls.py b/materia/urls.py index e7ddf4317..a4bdd0be4 100644 --- a/materia/urls.py +++ b/materia/urls.py @@ -1,9 +1,10 @@ from django.conf.urls import include, url -from materia.views import (AutoriaEditView, AutoriaView, - DespachoInicialEditView, DespachoInicialView, - DocumentoAcessorioEditView, DocumentoAcessorioView, - FormularioCadastroView, FormularioSimplificadoView, +from materia.views import (AcompanhamentoMateriaView, AutoriaEditView, + AutoriaView, DespachoInicialEditView, + DespachoInicialView, DocumentoAcessorioEditView, + DocumentoAcessorioView, FormularioCadastroView, + FormularioSimplificadoView, LegislacaoCitadaEditView, LegislacaoCitadaView, MateriaAnexadaEditView, MateriaAnexadaView, MateriaLegislativaPesquisaView, MateriaTaView, @@ -96,4 +97,6 @@ urlpatterns = [ MateriaLegislativaPesquisaView.as_view(), name='pesquisar_materia'), url(r'^materia/pesquisar-materia-list$', PesquisaMateriaListView.as_view(), name='pesquisar_materia_list'), + url(r'^materia/(?P\d+)/acompanhar-materia/$', + AcompanhamentoMateriaView.as_view(), name='acompanhar_materia'), ] diff --git a/materia/views.py b/materia/views.py index cfce6e8cd..5449f88e9 100644 --- a/materia/views.py +++ b/materia/views.py @@ -17,17 +17,17 @@ from compilacao.views import IntegracaoTaView from crud import build_crud, make_pagination from norma.models import LegislacaoCitada, NormaJuridica, TipoNormaJuridica from parlamentares.models import Partido -from sessao.models import AcompanharMateria -from .forms import (AutoriaForm, DespachoInicialForm, DocumentoAcessorioForm, +from .forms import (AcompanhamentoMateriaForm, AutoriaForm, + DespachoInicialForm, DocumentoAcessorioForm, FormularioCadastroForm, FormularioSimplificadoForm, LegislacaoCitadaForm, MateriaAnexadaForm, MateriaLegislativaPesquisaForm, NumeracaoForm, ProposicaoForm, RelatoriaForm, TramitacaoForm) -from .models import (Anexada, Autor, Autoria, DespachoInicial, - DocumentoAcessorio, MateriaLegislativa, Numeracao, Orgao, - Origem, Proposicao, RegimeTramitacao, Relatoria, - StatusTramitacao, TipoAutor, TipoDocumento, +from .models import (AcompanhamentoMateria, Anexada, Autor, Autoria, + DespachoInicial, DocumentoAcessorio, MateriaLegislativa, + Numeracao, Orgao, Origem, Proposicao, RegimeTramitacao, + Relatoria, StatusTramitacao, TipoAutor, TipoDocumento, TipoFimRelatoria, TipoMateriaLegislativa, TipoProposicao, Tramitacao, UnidadeTramitacao) @@ -1007,9 +1007,9 @@ class TramitacaoView(FormMixin, GenericView): corpo_email = ('A tramitação da matéria %s foi alterada.' % materia ) - destinatarios = AcompanharMateria.objects.values_list( + destinatarios = AcompanhamentoMateria.objects.values_list( 'email', flat=True).filter( - materia_cadastrada=materia) + materia=materia) send_mail('Mudança de Tramitação', corpo_email, 'sapl-test@interlegis.leg.br', @@ -1489,3 +1489,48 @@ class MateriaTaView(IntegracaoTaView): class ProposicaoTaView(IntegracaoTaView): model = Proposicao model_type_foreignkey = TipoProposicao + + +class AcompanhamentoMateriaView(FormMixin, + materia_legislativa_crud.CrudDetailView): + template_name = "materia/acompanhamento_materia.html" + + def get(self, request, *args, **kwargs): + pk = self.kwargs['pk'] + materia = MateriaLegislativa.objects.get(id=pk) + return self.render_to_response( + {'form': AcompanhamentoMateriaForm(), + 'materia': materia}) + + def post(self, request, *args, **kwargs): + form = AcompanhamentoMateriaForm(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: + AcompanhamentoMateria.objects.get( + email=email, + materia=materia) + except ObjectDoesNotExist: + acompanhar = form.save(commit=False) + acompanhar.materia = 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') diff --git a/parlamentares/views.py b/parlamentares/views.py index 6c9fc5822..1e29eed53 100644 --- a/parlamentares/views.py +++ b/parlamentares/views.py @@ -1,15 +1,15 @@ import os +from io import BytesIO from re import sub from django.contrib import messages +from django.core.exceptions import ValidationError from django.core.urlresolvers import reverse +from django.forms.fields import ImageField from django.utils.html import strip_tags from django.utils.translation import ugettext_lazy as _ from django.views.generic.edit import FormMixin from vanilla import GenericView -from django.forms.fields import ImageField -from io import BytesIO -from django.core.exceptions import ValidationError from crud import build_crud diff --git a/sessao/forms.py b/sessao/forms.py index c437a7cff..2aaa0858e 100644 --- a/sessao/forms.py +++ b/sessao/forms.py @@ -1,12 +1,12 @@ from crispy_forms.helper import FormHelper -from crispy_forms.layout import Column, Fieldset, Layout +from crispy_forms.layout import Fieldset, Layout from django import forms from django.forms import ModelForm import sapl from sapl.layout import form_actions -from .models import AcompanharMateria, SessaoPlenaria +from .models import SessaoPlenaria class PresencaForm(forms.Form): @@ -66,29 +66,6 @@ class VotacaoEditForm(forms.Form): pass -class AcompanharMateriaForm(ModelForm): - - class Meta: - model = AcompanharMateria - fields = ['email'] - - def __init__(self, *args, **kwargs): - - row1 = sapl.layout.to_row([('email', 10)]) - - row1.append( - Column(form_actions(save_label='Cadastrar'), css_class='col-md-2') - ) - - self.helper = FormHelper() - self.helper.layout = Layout( - Fieldset( - 'Acompanhamento de Matéria por e-mail', row1 - ) - ) - super(AcompanharMateriaForm, self).__init__(*args, **kwargs) - - class SessaoForm(ModelForm): hora_inicio = forms.CharField(label='Horário Inicio', diff --git a/sessao/migrations/0014_auto_20160223_0813.py b/sessao/migrations/0014_auto_20160223_0813.py new file mode 100644 index 000000000..fa1fc08f2 --- /dev/null +++ b/sessao/migrations/0014_auto_20160223_0813.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('sessao', '0013_auto_20160216_1015'), + ] + + operations = [ + migrations.RemoveField( + model_name='acompanharmateria', + name='materia_cadastrada', + ), + migrations.DeleteModel( + name='AcompanharMateria', + ), + ] diff --git a/sessao/models.py b/sessao/models.py index 15157c2aa..c3f3898ca 100644 --- a/sessao/models.py +++ b/sessao/models.py @@ -280,11 +280,3 @@ class SessaoPlenariaPresenca(models.Model): verbose_name = _('Presença em Sessão Plenária') verbose_name_plural = _('Presenças em Sessões Plenárias') 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) diff --git a/sessao/urls.py b/sessao/urls.py index 2d481686d..8e8e17e23 100644 --- a/sessao/urls.py +++ b/sessao/urls.py @@ -1,14 +1,14 @@ from django.conf.urls import include, url from sapl import settings -from sessao.views import (AcompanharMateriaView, EditExpedienteOrdemDiaView, - EditMateriaOrdemDiaView, ExpedienteOrdemDiaView, - ExpedienteView, ExplicacaoDelete, ExplicacaoEdit, - ExplicacaoView, ListExpedienteOrdemDiaView, - ListMateriaOrdemDiaView, MateriaOrdemDiaView, - MesaView, OradorExpedienteDelete, - OradorExpedienteEdit, OradorExpedienteView, - PainelView, PautaExpedienteDetail, PautaOrdemDetail, +from sessao.views import (EditExpedienteOrdemDiaView, EditMateriaOrdemDiaView, + ExpedienteOrdemDiaView, ExpedienteView, + ExplicacaoDelete, ExplicacaoEdit, ExplicacaoView, + ListExpedienteOrdemDiaView, ListMateriaOrdemDiaView, + MateriaOrdemDiaView, MesaView, + OradorExpedienteDelete, OradorExpedienteEdit, + OradorExpedienteView, PainelView, + PautaExpedienteDetail, PautaOrdemDetail, PautaSessaoDetailView, PautaSessaoListView, PresencaOrdemDiaView, PresencaView, ResumoView, SessaoCadastroView, SessaoListView, @@ -95,8 +95,6 @@ urlpatterns_sessao = sessao_crud.urlpatterns + [ PautaExpedienteDetail.as_view(), name='pauta_expediente_detail'), url(r'^pauta-sessao/(?P\d+)/ordem/$', PautaOrdemDetail.as_view(), name='pauta_ordem_detail'), - url(r'^pauta-sessao/(?P\d+)/acompanhar-materia/$', - AcompanharMateriaView.as_view(), name='acompanhar_materia'), ] sessao_urls = urlpatterns_sessao, sessao_crud.namespace, sessao_crud.namespace diff --git a/sessao/views.py b/sessao/views.py index a4a815da5..4a5465c0c 100644 --- a/sessao/views.py +++ b/sessao/views.py @@ -17,13 +17,13 @@ from norma.models import NormaJuridica from parlamentares.models import Parlamentar from sessao.serializers import SessaoPlenariaSerializer -from .forms import (AcompanharMateriaForm, ExpedienteForm, ListMateriaForm, - MateriaOrdemDiaForm, MesaForm, OradorDeleteForm, - OradorForm, PresencaForm, SessaoForm, VotacaoEditForm, - VotacaoForm, VotacaoNominalForm) -from .models import (AcompanharMateria, CargoMesa, ExpedienteMateria, - ExpedienteSessao, IntegranteMesa, MateriaLegislativa, - Orador, OradorExpediente, OrdemDia, PresencaOrdemDia, +from .forms import (ExpedienteForm, ListMateriaForm, MateriaOrdemDiaForm, + MesaForm, OradorDeleteForm, OradorForm, PresencaForm, + SessaoForm, VotacaoEditForm, VotacaoForm, + VotacaoNominalForm) +from .models import (CargoMesa, ExpedienteMateria, ExpedienteSessao, + IntegranteMesa, MateriaLegislativa, Orador, + OradorExpediente, OrdemDia, PresencaOrdemDia, RegistroVotacao, SessaoPlenaria, SessaoPlenariaPresenca, TipoExpediente, TipoResultadoVotacao, TipoSessaoPlenaria, VotoParlamentar) @@ -2361,47 +2361,3 @@ class PautaOrdemDetail(sessao_crud.CrudDetailView): 'norma': norma, 'doc_ace': doc_ace, 'tramitacao': tramitacao}) - - -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') diff --git a/templates/sessao/pauta/acompanhar_materia.html b/templates/materia/acompanhamento_materia.html similarity index 97% rename from templates/sessao/pauta/acompanhar_materia.html rename to templates/materia/acompanhamento_materia.html index 491259e09..a3cfc30c7 100644 --- a/templates/sessao/pauta/acompanhar_materia.html +++ b/templates/materia/acompanhamento_materia.html @@ -19,4 +19,4 @@ {% if error %}
{{ error }}
{% endif %} {% crispy form %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/sessao/pauta/expediente.html b/templates/sessao/pauta/expediente.html index 72d3faf3b..7eba6583b 100644 --- a/templates/sessao/pauta/expediente.html +++ b/templates/sessao/pauta/expediente.html @@ -39,7 +39,7 @@
- Tramitação{% if expediente.materia.em_tramitacao %} >>> Acompanhar matéria <<<{% endif %} + Tramitação{% if expediente.materia.em_tramitacao %} >>> Acompanhar matéria <<<{% endif %} {% for t in tramitacao %} Data: {{t.data_tramitacao}}
@@ -50,4 +50,4 @@
{% endfor %}
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/templates/sessao/pauta/ordem.html b/templates/sessao/pauta/ordem.html index feb468cfc..5e43631c4 100644 --- a/templates/sessao/pauta/ordem.html +++ b/templates/sessao/pauta/ordem.html @@ -19,7 +19,7 @@
Norma Juridica Vinculada - + {% for n in norma %} {{n}} @@ -48,7 +48,7 @@
- Tramitação{% if ordem.materia.em_tramitacao %} >>> Acompanhar matéria <<<{% endif %} + Tramitação{% if ordem.materia.em_tramitacao %} >>> Acompanhar matéria <<<{% endif %} {% for t in tramitacao %} Data: {{t.data_tramitacao}}
@@ -60,4 +60,4 @@ {% endfor %}
-{% endblock %} \ No newline at end of file +{% endblock %}