From 4df83c0149514368263d8c71f2a43fd1d2d932d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ses=C3=B3stris=20Vieira?= Date: Thu, 7 Apr 2022 10:31:32 -0300 Subject: [PATCH] =?UTF-8?q?Mudan=C3=A7a=20emergencial=20app=20de=20eventos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sigi/apps/eventos/admin.py | 35 +++++++++++++++-- sigi/apps/eventos/forms.py | 8 ++-- .../migrations/0016_auto_20220407_0955.py | 38 +++++++++++++++++++ sigi/apps/eventos/models.py | 30 +++++++++++++++ 4 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 sigi/apps/eventos/migrations/0016_auto_20220407_0955.py diff --git a/sigi/apps/eventos/admin.py b/sigi/apps/eventos/admin.py index 198ef32..c2d66c1 100644 --- a/sigi/apps/eventos/admin.py +++ b/sigi/apps/eventos/admin.py @@ -28,6 +28,25 @@ from sigi.apps.eventos.models import (ModeloDeclaracao, Modulo, TipoEvento, from sigi.apps.eventos.views import adicionar_eventos_carrinho from sigi.apps.eventos.forms import EventoAdminForm +class SigadFilter(admin.SimpleListFilter): + title = _(u"Processo SIGAD") + parameter_name = 'num_processo' + + def lookups(self, request, model_admin): + return ( + ('empty', _(u"Sem proceesso SIGAD")), + ('not_empty', _(u"Com processo SIGAD")), + ) + + def queryset(self, request, queryset): + if self.value() is not None: + if self.value() == 'empty': + queryset = queryset.filter(num_processo="") + elif self.value() == 'not_empty': + queryset = queryset.exclude(num_processo="") + + return queryset + @admin.register(TipoEvento) class TipoEventAdmin(admin.ModelAdmin): search_fields = ('nome',) @@ -59,17 +78,25 @@ class AnexoInline(admin.TabularInline): class EventoAdmin(admin.ModelAdmin): form = EventoAdminForm date_hierarchy = 'data_inicio' - list_display = ('nome', 'tipo_evento', 'status', 'data_inicio', - 'data_termino', 'municipio', 'solicitante', + list_display = ('nome', 'tipo_evento', 'status', 'link_sigad', + 'data_inicio', 'data_termino', 'municipio', 'solicitante', 'total_participantes',) - list_filter = ('status', 'tipo_evento', 'tipo_evento__categoria', 'virtual', - 'municipio__uf', 'solicitante') + list_filter = ('status', SigadFilter, 'tipo_evento', + 'tipo_evento__categoria', 'virtual', 'municipio__uf', + 'solicitante') raw_id_fields = ('casa_anfitria', 'municipio',) search_fields = ('nome', 'tipo_evento__nome', 'casa_anfitria__search_text', 'municipio__search_text', 'solicitante') inlines = (EquipeInline, ConviteInline, ModuloInline, AnexoInline) actions = ['adicionar_eventos', ] + def link_sigad(self, obj): + if obj.pk is None: + return "" + return obj.get_sigad_url() + link_sigad.short_description = _(u"número do processo SIGAD") + link_sigad.allow_tags = True + def adicionar_eventos(self, request, queryset): if 'carrinho_eventos' in request.session: q1 = len(request.session['carrinho_eventos']) diff --git a/sigi/apps/eventos/forms.py b/sigi/apps/eventos/forms.py index 7ec8869..c752499 100644 --- a/sigi/apps/eventos/forms.py +++ b/sigi/apps/eventos/forms.py @@ -8,10 +8,10 @@ class EventoAdminForm(forms.ModelForm): class Meta: model = Evento fields = ('tipo_evento', 'nome', 'descricao', 'virtual', 'solicitante', - 'data_inicio', 'data_termino', 'carga_horaria', - 'casa_anfitria', 'municipio', 'local', 'publico_alvo', - 'total_participantes', 'status', 'data_cancelamento', - 'motivo_cancelamento', ) + 'num_processo', 'data_pedido', 'data_inicio', 'data_termino', + 'carga_horaria', 'casa_anfitria', 'municipio', 'observacao', + 'local', 'publico_alvo', 'total_participantes', 'status', + 'data_cancelamento', 'motivo_cancelamento', ) def clean(self): cleaned_data = super(EventoAdminForm, self).clean() diff --git a/sigi/apps/eventos/migrations/0016_auto_20220407_0955.py b/sigi/apps/eventos/migrations/0016_auto_20220407_0955.py new file mode 100644 index 0000000..356fe76 --- /dev/null +++ b/sigi/apps/eventos/migrations/0016_auto_20220407_0955.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('eventos', '0015_anexo'), + ] + + operations = [ + migrations.AddField( + model_name='evento', + name='data_pedido', + field=models.DateField(help_text='Data em que o pedido do Gabinete chegou \xe0 COPERI', null=True, verbose_name='Data do pedido', blank=True), + preserve_default=True, + ), + migrations.AddField( + model_name='evento', + name='num_processo', + field=models.CharField(help_text='Formato:XXXXX.XXXXXX/XXXX-XX', max_length=20, verbose_name='n\xfamero do processo SIGAD', blank=True), + preserve_default=True, + ), + migrations.AddField( + model_name='evento', + name='observacao', + field=models.TextField(verbose_name='Observa\xe7\xf5es e anota\xe7\xf5es', blank=True), + preserve_default=True, + ), + migrations.AlterField( + model_name='evento', + name='status', + field=models.CharField(max_length=1, verbose_name='Status', choices=[(b'E', 'Em planejamento'), (b'G', 'Aguardando abertura SIGAD'), (b'P', 'Previs\xe3o'), (b'A', 'A confirmar'), (b'O', 'Confirmado'), (b'R', 'Realizado'), (b'C', 'Cancelado')]), + preserve_default=True, + ), + ] diff --git a/sigi/apps/eventos/models.py b/sigi/apps/eventos/models.py index 041fb0e..048760a 100644 --- a/sigi/apps/eventos/models.py +++ b/sigi/apps/eventos/models.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import re from datetime import datetime import random from django.db import models @@ -36,6 +37,8 @@ class TipoEvento(models.Model): class Evento(models.Model): STATUS_CHOICES = ( + ('E', _(u"Em planejamento")), + ('G', _(u"Aguardando abertura SIGAD")), ('P', _(u"Previsão")), ('A', _(u"A confirmar")), ('O', _(u"Confirmado")), @@ -51,6 +54,18 @@ class Evento(models.Model): descricao = models.TextField(_(u"Descrição do evento")) virtual = models.BooleanField(_("Virtual"), default=False) solicitante = models.CharField(_(u"Solicitante"), max_length=100) + num_processo = models.CharField( + _(u'número do processo SIGAD'), + max_length=20, + blank=True, + help_text=_(u'Formato:XXXXX.XXXXXX/XXXX-XX') + ) + data_pedido = models.DateField( + _(u"Data do pedido"), + null=True, + blank=True, + help_text=_(u"Data em que o pedido do Gabinete chegou à COPERI") + ) data_inicio = models.DateTimeField( _(u"Data/hora do Início"), null=True, @@ -77,6 +92,7 @@ class Evento(models.Model): on_delete=models.PROTECT ) local = models.TextField(_(u"Local do evento"), blank=True) + observacao = models.TextField(_(u"Observações e anotações"), blank=True) publico_alvo = models.TextField(_(u"Público alvo"), blank=True) total_participantes = models.PositiveIntegerField( _(u"Total de participantes"), @@ -100,6 +116,20 @@ class Evento(models.Model): data_inicio=self.data_inicio, data_termino=self.data_termino) + def get_sigad_url(self): + m = re.match( + r'(?P00100|00200)\.(?P\d{6})/(?P\d{4})-\d{2}', + self.num_processo + ) + if m: + return (r'{processo}').format(processo=self.num_processo,**m.groupdict()) + return self.num_processo + def save(self, *args, **kwargs): if self.status != 'C': self.data_cancelamento = None