Browse Source

Nova adições em audiência

Criação preliminar do form de audiência
Correções na model
Adição das urls do Crud
Adição da view inicial de audiência
pull/1743/head
João Pedro Sconetto 8 years ago
parent
commit
47731fed55
  1. 28
      sapl/audiencia/forms.py
  2. 62
      sapl/audiencia/migrations/0001_initial.py
  3. 40
      sapl/audiencia/models.py
  4. 4
      sapl/audiencia/urls.py
  5. 28
      sapl/audiencia/views.py

28
sapl/audiencia/forms.py

@ -0,0 +1,28 @@
from django import forms
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError
from django.db import transaction
from django.db.models import Q
from django.utils.translation import ugettext_lazy as _
from sapl.audiencia.models import AudienciaPublica, TipoAudienciaPublica
class AudienciaForm(forms.ModelForm):
class Meta:
model = AudienciaPublica
fields = '__all__'
def clean(self):
super(AudienciaForm, self).clean()
if self.cleaned_data['hora_inicio'] and self.cleaned_data['hora_fim']:
if (self.cleaned_data['hora_fim'] <
self.cleaned_data['hora_inicio']):
msg = _('A hora de fim não pode ser anterior a hora de ínicio')
raise ValidationError(msg)
return self.cleaned_data
@transaction.atomic()
def save(self, commit=True):
audiencia = super(AudienciaForm, self).save(commit)
return audiencia

62
sapl/audiencia/migrations/0001_initial.py

@ -0,0 +1,62 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.13 on 2018-03-01 17:01
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import sapl.audiencia.models
import sapl.utils
class Migration(migrations.Migration):
initial = True
dependencies = [
('materia', '0025_auto_20180221_1649'),
]
operations = [
migrations.CreateModel(
name='AudienciaPublica',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('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)')),
('observacao', models.CharField(blank=True, max_length=200, verbose_name='Observação')),
('audiencia_cancelada', models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Audiência Cancela?')),
('url_audio', models.URLField(blank=True, max_length=150, verbose_name='URL Arquivo Áudio (Formatos MP3 / AAC)')),
('url_video', models.URLField(blank=True, max_length=150, verbose_name='URL Arquivo Vídeo (Formatos MP4 / FLV / WebM)')),
('upload_pauta', models.FileField(blank=True, null=True, upload_to=sapl.audiencia.models.pauta_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Pauta da Audiência Pública')),
('upload_ata', models.FileField(blank=True, null=True, upload_to=sapl.audiencia.models.ata_upload_path, validators=[sapl.utils.restringe_tipos_de_arquivo_txt], verbose_name='Ata da Audiência Pública')),
('upload_anexo', models.FileField(blank=True, null=True, upload_to=sapl.audiencia.models.anexo_upload_path, verbose_name='Anexo da Audiência Pública')),
('materia', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='materia.MateriaLegislativa', verbose_name='Matéria Legislativa')),
],
options={
'verbose_name': 'Audiência Pública',
'verbose_name_plural': 'Audiências Públicas',
'ordering': ['nome', 'numero', 'tipo'],
},
),
migrations.CreateModel(
name='TipoAudienciaPublica',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('nome', models.CharField(choices=[('A', 'Audiência Pública'), ('P', 'Plebiscito'), ('R', 'Referendo'), ('I', 'Iniciativa Popular')], max_length=1, verbose_name='Tipo de Audiência Pública')),
],
options={
'verbose_name': 'Tipo de Audiência Pública',
'verbose_name_plural': 'Tipos de Audiência Pública',
'ordering': ['nome'],
},
),
migrations.AddField(
model_name='audienciapublica',
name='tipo',
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='audiencia.TipoAudienciaPublica', verbose_name='Tipo'),
),
]

40
sapl/audiencia/models.py

@ -9,6 +9,24 @@ from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation,
restringe_tipos_de_arquivo_txt, texto_upload_path)
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)
@reversion.register()
class TipoAudienciaPublica(models.Model):
TIPO_AUDIENCIA_CHOICES = Choices(('A', 'audiencia', _('Audiência Pública')),
@ -84,7 +102,7 @@ class AudienciaPublica(models.Model):
ordering = ['nome', 'numero', 'tipo']
def __str__(self):
return self.nome
return self.nome + '-' + self.numero
def delete(self, using=None, keep_parents=False):
if self.upload_pauta:
@ -122,22 +140,4 @@ class AudienciaPublica(models.Model):
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)
update_fields=update_fields)

4
sapl/audiencia/urls.py

@ -1,10 +1,10 @@
from django.conf.urls import include, url
from sapl.audiencia.views import (index)
from sapl.audiencia.views import (index, AudienciaCrud)
from .apps import AppConfig
app_name = AppConfig.name
urlpatterns = [
url(r'^audiencia/', index, name='index'),
url(r'^audiencia/', include(AudienciaCrud.get_urls())),
]

28
sapl/audiencia/views.py

@ -1,5 +1,31 @@
from django.shortcuts import render
from django.http import HttpResponse
from django.core.urlresolvers import reverse
from django.db.models import F
from django.views.generic import ListView
from sapl.comissoes.forms import ParticipacaoCreateForm, ParticipacaoEditForm
from sapl.crud.base import RP_DETAIL, RP_LIST, Crud, CrudAux, MasterDetailCrud
from sapl.materia.models import MateriaLegislativa
from .forms import AudienciaForm
from .models import (AudienciaPublica, TipoAudienciaPublica)
def index(request):
return HttpResponse("Audiência Pública")
return HttpResponse("Audiência Pública")
class AudienciaCrud(Crud):
model = AudienciaPublica
public = [RP_LIST, RP_DETAIL, ]
class BaseMixin(Crud.BaseMixin):
list_field_names = ['materia', 'tipo', 'numero', 'nome', 'tema',
'data', 'hora_inicio', 'hora_fim', 'observacao',
'url_audio', 'url_video', 'upload_pauta',
'upload_ata']
ordering = 'nome', 'numero', 'tipo', 'data'
class CreateView(Crud.CreateView):
form_class = AudienciaForm
def form_valid(self, form):
return super(Crud.CreateView, self).form_valid(form)
Loading…
Cancel
Save