diff --git a/sapl/base/migrations/0049_auto_20220728_2029.py b/sapl/base/migrations/0049_auto_20220728_2029.py new file mode 100644 index 000000000..92794a4be --- /dev/null +++ b/sapl/base/migrations/0049_auto_20220728_2029.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.20 on 2022-07-28 23:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0048_appconfig_tramitacao_origem_fixa'), + ] + + operations = [ + migrations.AlterField( + model_name='appconfig', + name='tramitacao_origem_fixa', + field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=True, help_text='Ao utilizar a opção NÂO, você compreende que os controles de origem e destino das tramitações são anulados, podendo seu operador registrar quaisquer origem e destino para as tramitações. Se você colocar Não, fizer tramitações aleatórias e voltar para SIM, o destino da tramitação mais recente será utilizado para a origem de uma nova inserção!', verbose_name='Fixar origem de novas tramitações como sendo a tramitação de destino da última tramitação?'), + ), + ] diff --git a/sapl/parlamentares/forms.py b/sapl/parlamentares/forms.py index 31e216184..9ebd3469d 100755 --- a/sapl/parlamentares/forms.py +++ b/sapl/parlamentares/forms.py @@ -1,7 +1,6 @@ from datetime import timedelta import logging -from sapl.crispy_layout_mixin import SaplFormHelper from crispy_forms.layout import Fieldset, Layout from django import forms from django.contrib.auth import get_user_model @@ -13,14 +12,15 @@ from django.db.models import Q from django.forms import ModelForm from django.utils import timezone from django.utils.translation import ugettext_lazy as _ +import django_filters from floppyforms.widgets import ClearableFileInput from image_cropping.widgets import CropWidget, ImageCropWidget -from sapl.utils import FileFieldCheckMixin from sapl.base.models import Autor, TipoAutor +from sapl.crispy_layout_mixin import SaplFormHelper from sapl.crispy_layout_mixin import form_actions, to_row from sapl.rules import SAPL_GROUP_VOTANTE -import django_filters +from sapl.utils import FileFieldCheckMixin from .models import (Coligacao, ComposicaoColigacao, Filiacao, Frente, Legislatura, Mandato, Parlamentar, Partido, Votante, Bloco, FrenteParlamentar, BlocoMembro) @@ -161,6 +161,10 @@ class LegislaturaForm(ModelForm): model = Legislatura exclude = [] + widgets = { + 'observacao': forms.Textarea( + attrs={'id': 'texto-rico'})} + def clean(self): data = super(LegislaturaForm, self).clean() @@ -253,7 +257,8 @@ class ParlamentarFilterSet(django_filters.FilterSet): class ColigacaoFilterSet(django_filters.FilterSet): - nome = django_filters.CharFilter(label=_('Nome da Coligação'), lookup_expr='icontains') + nome = django_filters.CharFilter( + label=_('Nome da Coligação'), lookup_expr='icontains') class Meta: model = Coligacao @@ -316,7 +321,8 @@ class ParlamentarCreateForm(ParlamentarForm): return self.cleaned_data cleaned_data = self.cleaned_data - parlamentar = Parlamentar.objects.filter(nome_parlamentar=cleaned_data['nome_parlamentar']).exists() + parlamentar = Parlamentar.objects.filter( + nome_parlamentar=cleaned_data['nome_parlamentar']).exists() if parlamentar: self.logger.error('Parlamentar já cadastrado.') @@ -537,9 +543,11 @@ class FrenteParlamentarForm(ModelForm): return self.cleaned_data if cd['cargo'].cargo_unico: - frente_parlamentar = FrenteParlamentar.objects.filter(frente=cd['frente'], cargo=cd['cargo']) + frente_parlamentar = FrenteParlamentar.objects.filter( + frente=cd['frente'], cargo=cd['cargo']) if frente_parlamentar and not frente_parlamentar[0].parlamentar == cd['parlamentar']: - raise ValidationError(_("Cargo único já ocupado por outro parlamentar.")) + raise ValidationError( + _("Cargo único já ocupado por outro parlamentar.")) return cd @@ -669,11 +677,15 @@ class VincularParlamentarForm(forms.Form): data_expedicao_diploma = cleaned_data['data_expedicao_diploma'] if parlamentar.mandato_set.filter(legislatura=legislatura): - self.logger.error('Parlamentar já está vinculado a legislatura informada.') - raise ValidationError(_('Parlamentar já está vinculado a legislatura informada.')) + self.logger.error( + 'Parlamentar já está vinculado a legislatura informada.') + raise ValidationError( + _('Parlamentar já está vinculado a legislatura informada.')) elif data_expedicao_diploma and legislatura.data_inicio <= data_expedicao_diploma: - self.logger.error('Data da Expedição do Diploma deve ser anterior a data de início da Legislatura.') - raise ValidationError(_('Data da Expedição do Diploma deve ser anterior a data de início da Legislatura.')) + self.logger.error( + 'Data da Expedição do Diploma deve ser anterior a data de início da Legislatura.') + raise ValidationError( + _('Data da Expedição do Diploma deve ser anterior a data de início da Legislatura.')) return cleaned_data @@ -736,8 +748,10 @@ class BlocoMembroForm(ModelForm): if cd['cargo'].cargo_unico \ and BlocoMembro.objects.filter(bloco=cd['bloco'], cargo=cd['cargo'], data_saida__isnull=True)\ .exclude(pk=self.instance.pk).exists(): - raise ValidationError(_("Cargo único já ocupado por outro membro.")) + raise ValidationError( + _("Cargo único já ocupado por outro membro.")) elif not cd['data_saida'] and BlocoMembro.objects.filter(parlamentar=cd['parlamentar'], data_saida__isnull=True).exists(): - raise ValidationError(_("Parlamentar já é membro do bloco parlamentar.")) + raise ValidationError( + _("Parlamentar já é membro do bloco parlamentar.")) return cd diff --git a/sapl/parlamentares/migrations/0039_legislatura_observacao.py b/sapl/parlamentares/migrations/0039_legislatura_observacao.py new file mode 100644 index 000000000..0c68d5f1e --- /dev/null +++ b/sapl/parlamentares/migrations/0039_legislatura_observacao.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.20 on 2022-07-28 23:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('parlamentares', '0038_sessao_legislativa_redundante'), + ] + + operations = [ + migrations.AddField( + model_name='legislatura', + name='observacao', + field=models.TextField(blank=True, verbose_name='Observação'), + ), + ] diff --git a/sapl/parlamentares/models.py b/sapl/parlamentares/models.py index 096c16814..74b74c10a 100644 --- a/sapl/parlamentares/models.py +++ b/sapl/parlamentares/models.py @@ -22,6 +22,9 @@ class Legislatura(models.Model): data_fim = models.DateField(verbose_name=_('Data Fim')) data_eleicao = models.DateField(verbose_name=_('Data Eleição')) + observacao = models.TextField( + blank=True, verbose_name=_('Observação')) + class Meta: ordering = ['-data_inicio'] verbose_name = _('Legislatura') @@ -312,7 +315,7 @@ class Parlamentar(models.Model): @property def avatar_html(self): return ''if self.fotografia else '' + + self.fotografia.url + '>'if self.fotografia else '' def delete(self, using=None, keep_parents=False): if self.fotografia: @@ -513,7 +516,7 @@ class MesaDiretora(models.Model): def __str__(self): return _('Mesa da %(sessao)s sessao da %(legislatura)s Legislatura') % { - 'sessao':self.sessao_legislativa, 'legislatura':self.sessao_legislativa.legislatura + 'sessao': self.sessao_legislativa, 'legislatura': self.sessao_legislativa.legislatura } @@ -522,7 +525,8 @@ class ComposicaoMesa(models.Model): # TODO M2M ???? Ternary????? parlamentar = models.ForeignKey(Parlamentar, on_delete=models.PROTECT) cargo = models.ForeignKey(CargoMesa, on_delete=models.PROTECT) - mesa_diretora = models.ForeignKey(MesaDiretora, on_delete=models.PROTECT, null=True) + mesa_diretora = models.ForeignKey( + MesaDiretora, on_delete=models.PROTECT, null=True) class Meta: verbose_name = _('Ocupação de cargo na Mesa') diff --git a/sapl/templates/parlamentares/layouts.yaml b/sapl/templates/parlamentares/layouts.yaml index 0064d8bfd..cff3113bd 100644 --- a/sapl/templates/parlamentares/layouts.yaml +++ b/sapl/templates/parlamentares/layouts.yaml @@ -6,6 +6,7 @@ CargoMesa: Legislatura: {% trans 'Legislatura' %}: - numero data_eleicao data_inicio data_fim + - observacao Coligacao: {% trans 'Coligação' %}: