diff --git a/sapl/audiencia/forms.py b/sapl/audiencia/forms.py old mode 100644 new mode 100755 index 9f55d3e6d..4124d4f55 --- a/sapl/audiencia/forms.py +++ b/sapl/audiencia/forms.py @@ -2,7 +2,7 @@ from django import forms from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.db import transaction from django.utils.translation import ugettext_lazy as _ -from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica +from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica, AnexoAudienciaPublica from sapl.materia.models import MateriaLegislativa, TipoMateriaLegislativa from sapl.utils import timezone @@ -102,3 +102,17 @@ class AudienciaForm(forms.ModelForm): raise ValidationError(msg) return cleaned_data + + +class AnexoAudienciaPublicaForm(forms.ModelForm): + + class Meta: + model = AnexoAudienciaPublica + fields = ['nome', + 'data', + 'arquivo', + 'assunto'] + + widgets = { + 'data': forms.DateInput(format='%d/%m/%Y') + } \ No newline at end of file diff --git a/sapl/audiencia/models.py b/sapl/audiencia/models.py old mode 100644 new mode 100755 index 477a442d9..d2f62b74c --- a/sapl/audiencia/models.py +++ b/sapl/audiencia/models.py @@ -143,6 +143,53 @@ class AudienciaPublica(models.Model): self.upload_ata = upload_ata self.upload_anexo = upload_anexo + return models.Model.save(self, force_insert=force_insert, + force_update=force_update, + using=using, + update_fields=update_fields) + + +@reversion.register() +class AnexoAudienciaPublica(models.Model): + audiencia = models.ForeignKey(AudienciaPublica, + on_delete=models.PROTECT) + nome = models.CharField(max_length=30, verbose_name=_('Nome')) + arquivo = models.FileField( + blank=True, + null=True, + upload_to=texto_upload_path, + verbose_name=_('Arquivo')) + data = models.DateField(blank=True, null=True, verbose_name=_('Data')) + assunto = models.TextField( + blank=True, verbose_name=_('Assunto')) + indexacao = models.TextField(blank=True) + + class Meta: + verbose_name = _('Documento Acessório') + verbose_name_plural = _('Documentos Acessórios') + + def __str__(self): + return self.nome + + def delete(self, using=None, keep_parents=False): + if self.arquivo: + self.arquivo.delete() + + return models.Model.delete( + self, using=using, keep_parents=keep_parents) + + def save(self, force_insert=False, force_update=False, using=None, + update_fields=None): + + if not self.pk and self.arquivo: + arquivo = self.arquivo + self.arquivo = None + models.Model.save(self, force_insert=force_insert, + force_update=force_update, + using=using, + update_fields=update_fields) + self.arquivo = arquivo + return models.Model.save(self, force_insert=force_insert, force_update=force_update, using=using, diff --git a/sapl/audiencia/urls.py b/sapl/audiencia/urls.py old mode 100644 new mode 100755 index ece3bf1fb..bdf02beca --- a/sapl/audiencia/urls.py +++ b/sapl/audiencia/urls.py @@ -1,10 +1,11 @@ from django.conf.urls import include, url -from sapl.audiencia.views import (index, AudienciaCrud) +from sapl.audiencia.views import (index, AudienciaCrud,AnexoAudienciaPublicaCrud) from .apps import AppConfig app_name = AppConfig.name urlpatterns = [ - url(r'^audiencia/', include(AudienciaCrud.get_urls())), + url(r'^audiencia/', include(AudienciaCrud.get_urls() + + AnexoAudienciaPublicaCrud.get_urls())), ] \ No newline at end of file diff --git a/sapl/audiencia/views.py b/sapl/audiencia/views.py old mode 100644 new mode 100755 index 0a8da8af1..0885d101d --- a/sapl/audiencia/views.py +++ b/sapl/audiencia/views.py @@ -2,10 +2,10 @@ from django.http import HttpResponse from django.core.urlresolvers import reverse from django.views.decorators.clickjacking import xframe_options_exempt from django.views.generic import UpdateView -from sapl.crud.base import RP_DETAIL, RP_LIST, Crud +from sapl.crud.base import RP_DETAIL, RP_LIST, Crud, MasterDetailCrud -from .forms import AudienciaForm -from .models import AudienciaPublica +from .forms import AudienciaForm, AnexoAudienciaPublicaForm +from .models import AudienciaPublica, AnexoAudienciaPublica def index(request): @@ -18,7 +18,7 @@ class AudienciaCrud(Crud): class BaseMixin(Crud.BaseMixin): list_field_names = ['numero', 'nome', 'tipo', 'materia', - 'data'] + 'data'] ordering = 'nome', 'numero', 'tipo', 'data' class ListView(Crud.ListView): @@ -69,4 +69,41 @@ class AudienciaCrud(Crud): def get(self, request, *args, **kwargs): return super().get(request, *args, **kwargs) + +class AudienciaMixin: + + def has_permission(self): + app_config = sapl.base.models.AppConfig.objects.last() + if app_config and app_config.documentos_administrativos == 'O': + return True + + return super().has_permission() + + +class AnexoAudienciaPublicaCrud(MasterDetailCrud): + model = AnexoAudienciaPublica + parent_field = 'documento' + help_topic = 'numeracao_docsacess' + + class BaseMixin(MasterDetailCrud.BaseMixin): + list_field_names = ['nome', + 'data', + 'assunto'] + + class CreateView(MasterDetailCrud.CreateView): + form_class = AnexoAudienciaPublicaForm + + class UpdateView(MasterDetailCrud.UpdateView): + form_class = AnexoAudienciaPublicaForm + + class ListView(AudienciaMixin, MasterDetailCrud.ListView): + + def get_queryset(self): + qs = super(MasterDetailCrud.ListView, self).get_queryset() + kwargs = {self.crud.parent_field: self.kwargs['pk']} + return qs.filter(**kwargs).order_by('-data', '-id') + + class DetailView(AudienciaMixin, + MasterDetailCrud.DetailView): + pass \ No newline at end of file