diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 22e649459..8f80a5632 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -304,15 +304,15 @@ class ProtocoloDocumentForm(ModelForm): numero_paginas = forms.CharField(label=_('Núm. Páginas'), required=True) assunto = forms.CharField( - widget=forms.Textarea, label='Assunto', required=True) + widget=forms.Textarea, label=_('Assunto'), required=True) interessado = forms.CharField(required=True, - label='Interessado') + label=_('Interessado')) observacao = forms.CharField(required=False, - widget=forms.Textarea, label='Observação') + widget=forms.Textarea, label=_('Observação')) - numero = forms.IntegerField(required=False, label='Número de Protocolo (opcional)') + numero = forms.IntegerField(required=False, label=_('Número de Protocolo (opcional)')) class Meta: model = Protocolo @@ -394,12 +394,12 @@ class ProtocoloMateriaForm(ModelForm): numero_paginas = forms.CharField(label=_('Núm. Páginas'), required=True) observacao = forms.CharField(required=False, - widget=forms.Textarea, label='Observação') + widget=forms.Textarea, label=_('Observação')) assunto_ementa = forms.CharField(required=True, - widget=forms.Textarea, label='Ementa') + widget=forms.Textarea, label=_('Ementa')) - numero = forms.IntegerField(required=False, label='Número de Protocolo (opcional)') + numero = forms.IntegerField(required=False, label=_('Número de Protocolo (opcional)')) class Meta: model = Protocolo @@ -636,6 +636,11 @@ class DocumentoAdministrativoForm(ModelForm): label=Protocolo._meta. get_field('numero').verbose_name) + restrito = forms.ChoiceField(label=_('Acesso Restrito'), + widget=forms.RadioSelect(), + choices=YES_NO_CHOICES, + initial=False) + class Meta: model = DocumentoAdministrativo fields = ['tipo', @@ -653,6 +658,7 @@ class DocumentoAdministrativoForm(ModelForm): 'observacao', 'texto_integral', 'protocolo', + 'restrito' ] widgets = {'protocolo': forms.HiddenInput()} @@ -682,7 +688,7 @@ class DocumentoAdministrativoForm(ModelForm): tipo=tipo_documento, ano=ano_protocolo).exists() if doc_exists: - raise ValidationError('Documento já existente') + raise ValidationError(_('Documento já existente')) # campos opcionais, mas que se informados devem ser válidos if numero_protocolo and ano_protocolo: @@ -740,7 +746,7 @@ class DocumentoAdministrativoForm(ModelForm): [('assunto', 12)]) row4 = to_row( - [('interessado', 9), ('tramitacao', 3)]) + [('interessado', 8), ('tramitacao', 2), (InlineRadios('restrito'), 2)]) row5 = to_row( [('texto_integral', 12)]) diff --git a/sapl/protocoloadm/migrations/0006_documentoadministrativo_restrito.py b/sapl/protocoloadm/migrations/0006_documentoadministrativo_restrito.py new file mode 100644 index 000000000..ac7f0de94 --- /dev/null +++ b/sapl/protocoloadm/migrations/0006_documentoadministrativo_restrito.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.13 on 2018-09-10 12:07 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0005_auto_20180824_1241'), + ] + + operations = [ + migrations.AddField( + model_name='documentoadministrativo', + name='restrito', + field=models.BooleanField(default=False, verbose_name='Acesso Restrito'), + ), + ] diff --git a/sapl/protocoloadm/models.py b/sapl/protocoloadm/models.py index 1fd38e720..347b8545e 100644 --- a/sapl/protocoloadm/models.py +++ b/sapl/protocoloadm/models.py @@ -93,7 +93,7 @@ class Protocolo(models.Model): user_anulacao = models.CharField(max_length=20, blank=True) ip_anulacao = models.CharField(max_length=15, blank=True) justificativa_anulacao = models.CharField( - max_length=60, blank=True, verbose_name='Motivo') + max_length=60, blank=True, verbose_name=_('Motivo')) timestamp_anulacao = models.DateTimeField(blank=True, null=True) class Meta: @@ -148,6 +148,9 @@ class DocumentoAdministrativo(models.Model): null=True, upload_to=texto_upload_path, verbose_name=_('Texto Integral')) + restrito = models.BooleanField(default=False, + verbose_name=_('Acesso Restrito'), + blank=True) class Meta: verbose_name = _('Documento Administrativo') diff --git a/sapl/protocoloadm/tests/test_protocoloadm.py b/sapl/protocoloadm/tests/test_protocoloadm.py index f74c4dd7b..2f61d359f 100644 --- a/sapl/protocoloadm/tests/test_protocoloadm.py +++ b/sapl/protocoloadm/tests/test_protocoloadm.py @@ -359,8 +359,9 @@ def test_documento_administrativo_invalido(): assert errors['assunto'] == [_('Este campo é obrigatório.')] assert errors['numero'] == [_('Este campo é obrigatório.')] assert errors['data'] == [_('Este campo é obrigatório.')] + assert errors['restrito'] == [_('Este campo é obrigatório.')] - assert len(errors) == 5 + assert len(errors) == 6 @pytest.mark.django_db(transaction=False) @@ -374,7 +375,8 @@ def test_documento_administrativo_protocolo_inexistente(): 'numero': '1', 'data': '2017-10-10', 'numero_protocolo': '11', - 'ano_protocolo': '2017' + 'ano_protocolo': '2017', + 'restrito': False }) assert not form.is_valid() diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index d86063887..a084f899c 100644 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -142,6 +142,13 @@ class DocumentoAdministrativoCrud(Crud): class DetailView(DocumentoAdministrativoMixin, Crud.DetailView): + def get(self, *args, **kwargs): + pk = self.kwargs['pk'] + documento = DocumentoAdministrativo.objects.get(id=pk) + if documento.restrito and self.request.user.is_anonymous(): + return redirect('/') + return super(Crud.DetailView, self).get(args, kwargs) + def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) self.layout_display[0]['rows'][-1][0]['text'] = ( diff --git a/sapl/templates/protocoloadm/documentoadministrativo_filter.html b/sapl/templates/protocoloadm/documentoadministrativo_filter.html index 719efcd04..e87962273 100644 --- a/sapl/templates/protocoloadm/documentoadministrativo_filter.html +++ b/sapl/templates/protocoloadm/documentoadministrativo_filter.html @@ -34,10 +34,11 @@ {% endif %} {% for d in page_obj %} + {% if request.user.is_anonymous and not d.restrito or not request.user.is_anonymous%}