mirror of https://github.com/interlegis/sapl.git
1 changed files with 126 additions and 0 deletions
@ -1,13 +1,139 @@ |
|||||
import reversion |
import reversion |
||||
from django.db import models |
from django.db import models |
||||
from django.utils.translation import ugettext_lazy as _ |
from django.utils.translation import ugettext_lazy as _ |
||||
|
from model_utils import Choices |
||||
|
from sapl.materia.models import MateriaLegislativa |
||||
|
from sapl.parlamentares.models import (CargoMesa, Parlamentar) |
||||
|
|
||||
|
from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation, |
||||
|
restringe_tipos_de_arquivo_txt, texto_upload_path) |
||||
|
|
||||
|
|
||||
|
@reversion.register() |
||||
|
class TipoAudienciaPublica(models.Model): |
||||
|
TIPO_AUDIENCIA_CHOICES = Choices(('A', 'audiencia', _('Audiência Pública')), |
||||
|
('P', 'plebiscito', _('Plebiscito')), |
||||
|
('R', 'referendo', _('Referendo')), |
||||
|
('I', 'iniciativa', _('Iniciativa Popular'))) |
||||
|
|
||||
|
nome = models.CharField( |
||||
|
max_length=1, verbose_name=_('Tipo de Audiência Pública'), choices=TIPO_AUDIENCIA_CHOICES) |
||||
|
|
||||
|
class Meta: |
||||
|
verbose_name = _('Tipo de Audiência Pública') |
||||
|
verbose_name_plural = _('Tipos de Audiência Pública') |
||||
|
ordering = ['nome'] |
||||
|
|
||||
|
def __str__(self): |
||||
|
return self.nome |
||||
|
|
||||
|
|
||||
@reversion.register() |
@reversion.register() |
||||
class AudienciaPublica(models.Model): |
class AudienciaPublica(models.Model): |
||||
|
materia = models.ForeignKey( |
||||
|
MateriaLegislativa, |
||||
|
on_delete=models.PROTECT, |
||||
|
verbose_name=_('Matéria Legislativa')) |
||||
|
tipo = models.ForeignKey(TipoAudienciaPublica, |
||||
|
on_delete=models.PROTECT, |
||||
|
verbose_name=_('Tipo')) |
||||
|
numero = models.PositiveIntegerField(blank=True, verbose_name=_('Número')) |
||||
|
nome = models.CharField( |
||||
|
max_length=100, verbose_name=_('Nome da Audiência Pública')) |
||||
|
tema = models.CharField( |
||||
|
max_length=100, verbose_name=_('Tema da Audiência Pública')) |
||||
|
data = models.DateField(verbose_name=_('Data')) |
||||
|
hora_inicio = models.CharField( |
||||
|
max_length=5, verbose_name=_('Horário (hh:mm)')) |
||||
|
hora_fim = models.CharField( |
||||
|
max_length=5, verbose_name=_('Horário (hh:mm)')) |
||||
|
local_reuniao = models.CharField( |
||||
|
max_length=100, blank=True, verbose_name=_('Local da Audiência Pública')) |
||||
|
observacao = models.CharField( |
||||
|
max_length=150, blank=True, verbose_name=_('Observação')) |
||||
|
url_audio = models.URLField( |
||||
|
max_length=150, blank=True, |
||||
|
verbose_name=_('URL Arquivo Áudio (Formatos MP3 / AAC)')) |
||||
|
url_video = models.URLField( |
||||
|
max_length=150, blank=True, |
||||
|
verbose_name=_('URL Arquivo Vídeo (Formatos MP4 / FLV / WebM)')) |
||||
|
upload_pauta = models.FileField( |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
upload_to=pauta_upload_path, |
||||
|
verbose_name=_('Pauta da Audiência Pública'), |
||||
|
validators=[restringe_tipos_de_arquivo_txt]) |
||||
|
upload_ata = models.FileField( |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
upload_to=ata_upload_path, |
||||
|
verbose_name=_('Ata da Audiência Pública'), |
||||
|
validators=[restringe_tipos_de_arquivo_txt]) |
||||
|
upload_anexo = models.FileField( |
||||
|
blank=True, |
||||
|
null=True, |
||||
|
upload_to=anexo_upload_path, |
||||
|
verbose_name=_('Anexo da Audiência Pública')) |
||||
|
|
||||
class Meta: |
class Meta: |
||||
verbose_name = _('Audiência Pública') |
verbose_name = _('Audiência Pública') |
||||
verbose_name_plural = _('Audiências Públicas') |
verbose_name_plural = _('Audiências Públicas') |
||||
|
|
||||
def __str__(self): |
def __str__(self): |
||||
return self.nome |
return self.nome |
||||
|
|
||||
|
def delete(self, using=None, keep_parents=False): |
||||
|
if self.upload_pauta: |
||||
|
self.upload_pauta.delete() |
||||
|
|
||||
|
if self.upload_ata: |
||||
|
self.upload_ata.delete() |
||||
|
|
||||
|
if self.upload_anexo: |
||||
|
self.upload_anexo.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.upload_pauta or self.upload_ata or |
||||
|
self.upload_anexo): |
||||
|
upload_pauta = self.upload_pauta |
||||
|
upload_ata = self.upload_ata |
||||
|
upload_anexo = self.upload_anexo |
||||
|
self.upload_pauta = None |
||||
|
self.upload_ata = None |
||||
|
self.upload_anexo = None |
||||
|
models.Model.save(self, force_insert=force_insert, |
||||
|
force_update=force_update, |
||||
|
using=using, |
||||
|
update_fields=update_fields) |
||||
|
|
||||
|
self.upload_pauta = upload_pauta |
||||
|
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) |
||||
|
|
||||
|
|
||||
|
def get_audiencia_media_path(instance, subpath, filename): |
||||
|
return './sapl/audiencia/%s/%s/%s' % (instance.numero, subpath, filename) |
||||
|
|
||||
|
|
||||
|
def pauta_upload_path(instance, filename): |
||||
|
return texto_upload_path( |
||||
|
instance, filename, subpath='pauta', pk_first=True) |
||||
|
|
||||
|
|
||||
|
def ata_upload_path(instance, filename): |
||||
|
return texto_upload_path(instance, filename, subpath='ata', pk_first=True) |
||||
|
|
||||
|
|
||||
|
def anexo_upload_path(instance, filename): |
||||
|
return texto_upload_path( |
||||
|
instance, filename, subpath='anexo', pk_first=True) |
||||
|
|||||
Loading…
Reference in new issue