diff --git a/materia/forms.py b/materia/forms.py index 5152974f3..5450b3b07 100644 --- a/materia/forms.py +++ b/materia/forms.py @@ -1,7 +1,7 @@ from datetime import date from crispy_forms.helper import FormHelper -from crispy_forms.layout import Column, Fieldset, Layout +from crispy_forms.layout import Column, Fieldset, Layout, Submit from django import forms from django.forms import ModelForm from django.utils.safestring import mark_safe @@ -457,38 +457,28 @@ class MateriaAnexadaForm(ModelForm): ano = forms.CharField(label='Ano', required=True) - data_anexacao = forms.DateField(label=_('Data Anexação'), - required=True, - input_formats=['%d/%m/%Y'], - widget=forms.TextInput( - attrs={'class': 'dateinput'})) - - data_desanexacao = forms.DateField(label=_('Data Desanexação'), - required=False, - input_formats=['%d/%m/%Y'], - widget=forms.TextInput( - attrs={'class': 'dateinput'})) - class Meta: model = Anexada - fields = ['tipo', 'data_anexacao', 'data_desanexacao'] + fields = ['tipo', 'numero', 'ano', + 'data_anexacao', 'data_desanexacao'] - def __init__(self, *args, **kwargs): + def __init__(self, excluir=False, *args, **kwargs): row1 = crispy_layout_mixin.to_row( - [('tipo', 4), - ('numero', 4), - ('ano', 4)]) + [('tipo', 4), ('numero', 4), ('ano', 4)]) row2 = crispy_layout_mixin.to_row( - [('data_anexacao', 6), - ('data_desanexacao', 6)]) + [('data_anexacao', 6), ('data_desanexacao', 6)]) + + more = [] + if excluir: + more = [Submit('Excluir', 'Excluir')] self.helper = FormHelper() self.helper.layout = Layout( Fieldset( _('Anexar Matéria'), row1, row2, - form_actions() + form_actions(more=more) ) ) super(MateriaAnexadaForm, self).__init__( @@ -683,7 +673,7 @@ class MateriaLegislativaPesquisaForm(forms.Form): label='Ordenação', choices=ordenacao_materias(), widget=forms.Select( - attrs={'class': 'selector'})) + attrs={'class': 'selector'})) localizacao = forms.ModelChoiceField( label=_('Localização Atual'), diff --git a/materia/views.py b/materia/views.py index eeb4e2bee..014bb0c2c 100644 --- a/materia/views.py +++ b/materia/views.py @@ -3,6 +3,7 @@ from random import choice from re import sub from string import ascii_letters, digits +from braces.views import FormValidMessageMixin from django.contrib import messages from django.core.exceptions import ObjectDoesNotExist from django.core.mail import send_mail @@ -70,9 +71,10 @@ class FormularioCadastroView(CreateView): success_url = reverse_lazy('formulario_cadastro') -class MateriaAnexadaView(FormMixin, GenericView): +class MateriaAnexadaView(FormMixin, GenericView, FormValidMessageMixin): template_name = "materia/materia_anexada.html" form_class = MateriaAnexadaForm + form_valid_message = _('Matéria anexada com sucesso!') def get(self, request, *args, **kwargs): form = MateriaAnexadaForm() @@ -85,8 +87,21 @@ class MateriaAnexadaView(FormMixin, GenericView): 'anexadas': anexadas, 'form': form}) + def form_invalid(self, + form, + request, + mat_principal, + anexadas, + msg='Erro ineseperado.'): + messages.add_message(request, messages.ERROR, msg) + return self.render_to_response( + {'form': form, + 'object': mat_principal, + 'anexadas': anexadas}) + def post(self, request, *args, **kwargs): - form = MateriaAnexadaForm(request.POST) + form = self.get_form() + anexadas = Anexada.objects.filter( materia_principal_id=kwargs['pk']) mat_principal = MateriaLegislativa.objects.get( @@ -106,14 +121,10 @@ class MateriaAnexadaView(FormMixin, GenericView): numero=numero, ano=ano, tipo=tipo) if mat_principal.tipo == mat_anexada.tipo: - msg = _('A matéria a ser anexada não pode ser do mesmo' ' tipo da matéria principal.') - messages.add_message(request, messages.INFO, msg) - return self.render_to_response( - {'form': form, - 'object': mat_principal, - 'anexadas': anexadas}) + self.form_invalid( + form, request, mat_principal, anexadas, msg) anexada = Anexada() anexada.materia_principal = mat_principal @@ -124,16 +135,10 @@ class MateriaAnexadaView(FormMixin, GenericView): anexada.data_desanexacao = data_desanexacao anexada.save() - except ObjectDoesNotExist: msg = _('A matéria a ser anexada não existe no cadastro' ' de matérias legislativas.') - messages.add_message(request, messages.INFO, msg) - return self.render_to_response( - {'form': form, - 'object': mat_principal, - 'anexadas': anexadas}) - + self.form_invalid(form, request, mat_principal, anexadas, msg) return self.form_valid(form) else: return self.render_to_response( @@ -150,6 +155,15 @@ class MateriaAnexadaEditView(FormMixin, GenericView): template_name = "materia/materia_anexada_edit.html" form_class = MateriaAnexadaForm + def form_invalid(self, + form, + request, + mat_principal, + msg='Erro ineseperado.'): + messages.add_message(request, messages.ERROR, msg) + return self.render_to_response( + {'form': form, 'object': mat_principal}) + def get(self, request, *args, **kwargs): materia = MateriaLegislativa.objects.get(id=kwargs['pk']) anexada = Anexada.objects.get(id=kwargs['id']) @@ -161,23 +175,20 @@ class MateriaAnexadaEditView(FormMixin, GenericView): data['data_anexacao'] = anexada.data_anexacao data['data_desanexacao'] = anexada.data_desanexacao - form = MateriaAnexadaForm(initial=data) + form = MateriaAnexadaForm(initial=data, excluir=True) return self.render_to_response( {'object': materia, - 'form': form, - 'data': data, - 'get_tipos_materia': TipoMateriaLegislativa.objects.all()}) + 'form': form}) def post(self, request, *args, **kwargs): + form = self.get_form() - form = MateriaAnexadaForm(request.POST) anexada = Anexada.objects.get(id=kwargs['id']) mat_principal = MateriaLegislativa.objects.get( id=kwargs['pk']) - if form.is_valid(): - if 'excluir' in request.POST: + if 'Excluir' in request.POST: anexada.delete() return self.form_valid(form) elif 'salvar' in request.POST: @@ -195,14 +206,9 @@ class MateriaAnexadaEditView(FormMixin, GenericView): numero=numero, ano=ano, tipo=tipo) if mat_principal.tipo == mat_anexada.tipo: - msg = _('A matéria a ser anexada não pode ser do mesmo \ tipo da matéria principal.') - messages.add_message(request, messages.INFO, msg) - return self.render_to_response( - {'form': form, - 'materialegislativa': mat_principal - }) + self.form_invalid(form, request, mat_principal, msg) anexada.materia_principal = mat_principal anexada.materia_anexada = mat_anexada @@ -217,11 +223,7 @@ class MateriaAnexadaEditView(FormMixin, GenericView): except ObjectDoesNotExist: msg = _('A matéria a ser anexada não existe no cadastro \ de matérias legislativas.') - messages.add_message(request, messages.INFO, msg) - return self.render_to_response( - {'form': form, - 'materialegislativa': mat_principal}) - + self.form_invalid(form, request, mat_principal, msg) else: return self.render_to_response( {'form': form, diff --git a/templates/materia/materia_anexada_edit.html b/templates/materia/materia_anexada_edit.html index 74e5b8197..338595dc0 100644 --- a/templates/materia/materia_anexada_edit.html +++ b/templates/materia/materia_anexada_edit.html @@ -3,49 +3,5 @@ {% load crispy_forms_tags %} {% block actions %} {% endblock %} {% block detail_content %} -
+ {% crispy form %} {% endblock %}