diff --git a/sigi/apps/eventos/admin.py b/sigi/apps/eventos/admin.py index b38194d..711bdf4 100644 --- a/sigi/apps/eventos/admin.py +++ b/sigi/apps/eventos/admin.py @@ -18,11 +18,24 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from django.utils.translation import ugettext as _ from django.contrib import admin from django.contrib.admin import register +from django import forms +from django.utils.translation import ugettext as _ from sigi.apps.eventos.models import TipoEvento, Funcao, Evento, Equipe, Convite +class EventoAdminForm(forms.ModelForm): + class Meta: + model = Evento + def clean(self): + cleaned_data = super(EventoAdminForm, self).clean() + data_inicio = cleaned_data.get("data_inicio") + data_termino = cleaned_data.get("data_termino") + + if data_inicio > data_termino: + raise forms.ValidationError(_(u"Data término deve ser posterior à data inicio"), + code="invalid_period" ) + @register(TipoEvento) class TipoEventAdmin(admin.ModelAdmin): search_fields = ('nome',) @@ -41,9 +54,11 @@ class ConviteInline(admin.TabularInline): @register(Evento) class EventoAdmin(admin.ModelAdmin): + form = EventoAdminForm date_hierarchy = 'data_inicio' - list_display = ('nome', 'tipo_evento', 'data_inicio', 'data_termino', 'municipio', 'solicitante') - list_filter = ('tipo_evento', 'municipio__uf', 'solicitante') + list_display = ('nome', 'tipo_evento', 'status', 'data_inicio', 'data_termino', 'municipio', + 'solicitante') + list_filter = ('status', 'tipo_evento', 'municipio__uf', 'solicitante') raw_id_fields = ('casa_anfitria', 'municipio',) search_fields = ('nome', 'tipo_evento__nome', 'casa_anfitria__search_text', 'municipio__search_text', 'solicitante') diff --git a/sigi/apps/eventos/models.py b/sigi/apps/eventos/models.py index 1a10395..0c055cf 100644 --- a/sigi/apps/eventos/models.py +++ b/sigi/apps/eventos/models.py @@ -25,6 +25,7 @@ from sigi.apps.casas.models import CasaLegislativa from sigi.apps.contatos.models import Municipio from sigi.apps.servidores.models import Servidor from sigi.apps.mdl.models import Course +from django.core.exceptions import ValidationError class TipoEvento(models.Model): nome = models.CharField(_(u"Nome"), max_length=100) @@ -37,14 +38,26 @@ class TipoEvento(models.Model): return self.nome class Evento(models.Model): + STATUS_CHOICES = ( + ('P', _(u"Programado")), + ('A', _(u"Autorizado")), + ('R', _(u"Realizado")), + ('C', _(u"Cancelado")) + ) + tipo_evento = models.ForeignKey(TipoEvento) nome = models.CharField(_(u"Nome do evento"), max_length=100) + descricao = models.TextField(_(u"Descrição do evento")) solicitante = models.CharField(_(u"Solicitante"), max_length=100) data_inicio = models.DateField(_(u"Data de início")) data_termino = models.DateField(_(u"Data de término")) casa_anfitria = models.ForeignKey(CasaLegislativa, verbose_name=_(u"Casa anfitriã"), blank=True, null=True) municipio = models.ForeignKey(Municipio) local = models.TextField(_(u"Local do evento"), blank=True) + publico_alvo = models.TextField(_(u"Público alvo"), blank=True) + status = models.CharField(_(u"Status"), max_length=1, choices=STATUS_CHOICES) + data_cancelamento = models.DateField(_(u"Data de cancelamento"), blank=True, null=True) + motivo_cancelamento = models.TextField(_(u"Motivo do cancelamento"), blank=True) curso_moodle_id = models.IntegerField(_(u"Curso saberes"), blank=True, null=True) class Meta: @@ -58,6 +71,14 @@ class Evento(models.Model): data_inicio=self.data_inicio, data_termino=self.data_termino) + def save(self, *args, **kwargs): + if self.status != 'C': + self.data_cancelamento = None + self.motivo_cancelamento = "" + if self.data_inicio > self.data_termino: + raise ValidationError(_(u"Data de término deve ser posterior à data de início")) + return super(Evento, self).save(*args, **kwargs) + @property def curso_moodle(self): if self.curso_moodle_id: