From fb6dd125ca0f2ffad69739f6c16c0863c915f457 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ses=C3=B3stris=20Vieira?= Date: Thu, 31 Aug 2023 18:31:13 -0300 Subject: [PATCH] =?UTF-8?q?supress=C3=A3o=20ou=20inclus=C3=A3o=20de=20camp?= =?UTF-8?q?os=20no=20FORM=20de=20Eventos.=20Tarefa=20#161638=20Gertiq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sigi/apps/eventos/admin.py | 67 +++++++++++----- sigi/apps/eventos/forms.py | 3 +- ...io_evento_data_recebido_coperi_and_more.py | 77 +++++++++++++++++++ sigi/apps/eventos/models.py | 26 +++++-- 4 files changed, 144 insertions(+), 29 deletions(-) create mode 100644 sigi/apps/eventos/migrations/0039_remove_evento_municipio_evento_data_recebido_coperi_and_more.py diff --git a/sigi/apps/eventos/admin.py b/sigi/apps/eventos/admin.py index 10d9e6e..ddcbcf2 100644 --- a/sigi/apps/eventos/admin.py +++ b/sigi/apps/eventos/admin.py @@ -9,6 +9,7 @@ from django.http import HttpResponse from django.shortcuts import get_object_or_404, render, redirect from django.template import Template, Context from django.urls import path, reverse +from django.utils import timezone from django.utils.safestring import mark_safe from django.utils.translation import gettext as _ from django_weasyprint.utils import django_url_fetcher @@ -109,8 +110,6 @@ class EventoResource(ValueLabeledResource): "casa_anfitria__cep", "casa_anfitria__email", "local", - "municipio__nome", - "municipio__uf__sigla", "observacao", "publico_alvo", "total_participantes", @@ -183,6 +182,7 @@ class ItemSolicitadoInline(admin.StackedInline): ) readonly_fields = ("servidor", "evento") extra = 1 + autocomplete_fields = ("tipo_evento",) @admin.register(TipoEvento) @@ -200,6 +200,7 @@ class SolicitacaoAdmin(admin.ModelAdmin): "casa", "senador", "data_pedido", + "data_recebido_coperi", "get_oficinas", "get_municipio", "get_uf", @@ -255,18 +256,24 @@ class SolicitacaoAdmin(admin.ModelAdmin): if item.evento is None: item.evento = Evento( tipo_evento=item.tipo_evento, - nome=f"{item.tipo_evento} em {item.solicitacao.casa}", - descricao=f"{item.tipo_evento} em {item.solicitacao.casa}", + nome=_( + f"{item.tipo_evento} em {item.solicitacao.casa}" + ), + descricao=_( + f"{item.tipo_evento} em {item.solicitacao.casa}" + ), virtual=item.virtual, solicitante=item.solicitacao.senador, num_processo=item.solicitacao.num_processo, data_pedido=item.solicitacao.data_pedido, + data_recebido_coperi=item.solicitacao.data_recebido_coperi, data_inicio=item.inicio_desejado, data_termino=item.inicio_desejado + datetime.timedelta(days=item.tipo_evento.duracao), casa_anfitria=item.solicitacao.casa, - municipio=item.solicitacao.casa.municipio, - observacao=f"Autorizado por {servidor} com a justificativa '{item.justificativa}", + observacao=_( + f"Autorizado por {servidor} com a justificativa '{item.justificativa}" + ), status=Evento.STATUS_CONFIRMADO, contato=item.solicitacao.contato, telefone=item.solicitacao.telefone_contato, @@ -278,6 +285,11 @@ class SolicitacaoAdmin(admin.ModelAdmin): ) else: item.evento.status = Evento.STATUS_CONFIRMADO + item.evento.observacao += _( + f"\nConfirmado por {servidor} com a justificativa: {item.justificativa}" + ) + item.evento.data_cancelamento = None + item.evento.motivo_cancelamento = "" self.message_user( request, _( @@ -288,7 +300,13 @@ class SolicitacaoAdmin(admin.ModelAdmin): ) elif ItemSolicitado.STATUS_REJEITADO and item.evento is not None: item.evento.status = Evento.STATUS_CANCELADO - item.evento.save() + item.evento.observacao += _( + f"\nCancelado por {servidor} com a justificativa: {item.justificativa}" + ) + item.evento.data_cancelamento = timezone.localdate() + item.evento.motivo_cancelamento = _( + f"\nCancelado por {servidor} com a justificativa: {item.justificativa}" + ) self.message_user( request, _( @@ -299,24 +317,25 @@ class SolicitacaoAdmin(admin.ModelAdmin): ) if item.evento: item.evento.tipo_evento = item.tipo_evento - item.evento.nome = ( + item.evento.nome = _( f"{item.tipo_evento} em {item.solicitacao.casa}" ) - item.evento.descricao = ( + item.evento.descricao = _( f"{item.tipo_evento} em {item.solicitacao.casa}" ) item.evento.virtual = item.virtual item.evento.solicitante = item.solicitacao.senador item.evento.num_processo = item.solicitacao.num_processo item.evento.data_pedido = item.solicitacao.data_pedido + item.evento.data_recebido_coperi = ( + item.solicitacao.data_recebido_coperi + ) item.evento.data_inicio = item.inicio_desejado item.evento.data_termino = ( item.inicio_desejado + datetime.timedelta(days=item.tipo_evento.duracao) ) item.evento.casa_anfitria = item.solicitacao.casa - item.evento.municipio = item.solicitacao.casa.municipio - item.evento.observacao = f"Autorizado por {servidor} com a justificativa '{item.justificativa}" item.evento.contato = item.solicitacao.contato item.evento.telefone = item.solicitacao.telefone_contato item.evento.save() @@ -359,7 +378,7 @@ class SolicitacaoAdmin(admin.ModelAdmin): def get_oficinas_uf(self, obj): return Evento.objects.filter( status__in=[Evento.STATUS_CONFIRMADO, Evento.STATUS_REALIZADO], - municipio__uf=obj.casa.municipio.uf, + casa_anfitria__municipio__uf=obj.casa.municipio.uf, ).count() @@ -396,7 +415,7 @@ class EventoAdmin(CartExportMixin, admin.ModelAdmin): "link_sigad", "data_inicio", "data_termino", - "municipio", + "get_municipio", "solicitante", "total_participantes", ) @@ -409,20 +428,17 @@ class EventoAdmin(CartExportMixin, admin.ModelAdmin): "tipo_evento__categoria", ("data_inicio", DateRangeFilter), "virtual", - "municipio__uf", "solicitante", ) autocomplete_fields = ( "tipo_evento", - "solicitacao", "casa_anfitria", - "municipio", ) search_fields = ( "nome", "tipo_evento__nome", "casa_anfitria__search_text", - "municipio__search_text", + "casa_anfitria__municipio__search_text", "solicitante", "num_processo", ) @@ -435,11 +451,22 @@ class EventoAdmin(CartExportMixin, admin.ModelAdmin): ) save_as = True - @admin.display(description=_("Tipo Evento")) + @admin.display(description=_("Tipo Evento"), ordering="tipo_evento__nome") def get_tipo_evento(self, obj): return obj.tipo_evento.nome - @admin.display(description=_("número do processo SIGAD")) + @admin.display( + description=_("Município"), ordering="casa_anfitria__municipio" + ) + def get_municipio(self, obj): + if obj.casa_anfitria: + return str(obj.casa_anfitria.municipio) + else: + return None + + @admin.display( + description=_("número do processo SIGAD"), ordering="num_processo" + ) def link_sigad(self, obj): if obj.pk is None: return "" @@ -776,7 +803,7 @@ class EventoAdmin(CartExportMixin, admin.ModelAdmin): api_url = f"{settings.MOODLE_BASE_URL}/webservice/rest/server.php" mws = Moodle(api_url, settings.MOODLE_API_TOKEN) - fullname = f"{evento.tipo_evento.nome} - {evento.municipio.nome}/{evento.municipio.uf.sigla} - {evento.tipo_evento.prefixo_turma}{evento.turma}" + fullname = f"{evento.tipo_evento.nome} - {evento.casa_anfitria.municipio.nome}/{evento.casa_anfitria.municipio.uf.sigla} - {evento.tipo_evento.prefixo_turma}{evento.turma}" shortname = f"{abreviatura(evento.tipo_evento.nome)} - {evento.tipo_evento.prefixo_turma}{evento.turma}" inicio = int(time.mktime(evento.data_inicio.astimezone().timetuple())) fim = int(time.mktime(evento.data_termino.astimezone().timetuple())) diff --git a/sigi/apps/eventos/forms.py b/sigi/apps/eventos/forms.py index ff92fe6..5083e47 100644 --- a/sigi/apps/eventos/forms.py +++ b/sigi/apps/eventos/forms.py @@ -18,12 +18,11 @@ class EventoAdminForm(forms.ModelForm): "solicitante", "num_processo", "data_pedido", - "solicitacao", + "data_recebido_coperi", "data_inicio", "data_termino", "carga_horaria", "casa_anfitria", - "municipio", "observacao", "local", "publico_alvo", diff --git a/sigi/apps/eventos/migrations/0039_remove_evento_municipio_evento_data_recebido_coperi_and_more.py b/sigi/apps/eventos/migrations/0039_remove_evento_municipio_evento_data_recebido_coperi_and_more.py new file mode 100644 index 0000000..1aaa085 --- /dev/null +++ b/sigi/apps/eventos/migrations/0039_remove_evento_municipio_evento_data_recebido_coperi_and_more.py @@ -0,0 +1,77 @@ +# Generated by Django 4.2.4 on 2023-08-31 20:53 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + ("eventos", "0038_migra_pedidos"), + ] + + operations = [ + migrations.RemoveField( + model_name="evento", + name="municipio", + ), + migrations.AddField( + model_name="evento", + name="data_recebido_coperi", + field=models.DateField( + blank=True, + help_text="Data em que o pedido chegou na COPERI", + null=True, + verbose_name="data de recebimento na COPERI", + ), + ), + migrations.AddField( + model_name="solicitacao", + name="data_recebido_coperi", + field=models.DateField( + blank=True, + help_text="Data em que o pedido chegou na COPERI", + null=True, + verbose_name="data de recebimento na COPERI", + ), + ), + migrations.AlterField( + model_name="evento", + name="data_pedido", + field=models.DateField( + blank=True, + help_text="Data em que o pedido foi realizado", + null=True, + verbose_name="Data do pedido", + ), + ), + migrations.AlterField( + model_name="evento", + name="solicitante", + field=models.CharField( + max_length=100, verbose_name="senador(a) solicitante" + ), + ), + migrations.AlterField( + model_name="itemsolicitado", + name="tipo_evento", + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + to="eventos.tipoevento", + ), + ), + migrations.AlterField( + model_name="solicitacao", + name="data_pedido", + field=models.DateField( + help_text="Data em que o pedido foi realizado", + verbose_name="Data do pedido", + ), + ), + migrations.AlterField( + model_name="solicitacao", + name="senador", + field=models.CharField( + max_length=100, verbose_name="senador(a) solicitante" + ), + ), + ] diff --git a/sigi/apps/eventos/models.py b/sigi/apps/eventos/models.py index 598519b..ec54762 100644 --- a/sigi/apps/eventos/models.py +++ b/sigi/apps/eventos/models.py @@ -73,7 +73,7 @@ class Solicitacao(models.Model): casa = models.ForeignKey( Orgao, verbose_name=_("casa solicitante"), on_delete=models.PROTECT ) - senador = models.CharField(_("senador solicitante"), max_length=100) + senador = models.CharField(_("senador(a) solicitante"), max_length=100) num_processo = models.CharField( _("número do processo SIGAD"), max_length=20, @@ -83,9 +83,17 @@ class Solicitacao(models.Model): descricao = models.TextField(_("descrição da solicitação")) data_pedido = models.DateField( _("Data do pedido"), - help_text=_("Data em que o pedido do Gabinete chegou à COPERI"), + help_text=_("Data em que o pedido foi realizado"), + ) + data_recebido_coperi = models.DateField( + _("data de recebimento na COPERI"), + null=True, + blank=True, + help_text=_("Data em que o pedido chegou na COPERI"), + ) + contato = models.CharField( + _("pessoa de contato na Casa"), max_length=100, blank=True ) - contato = models.CharField(_("pessoa de contato na Casa"), max_length=100) email_contato = models.EmailField(_("e-mail do contato"), blank=True) telefone_contato = models.CharField( _("telefone do contato"), max_length=20, blank=True @@ -148,7 +156,6 @@ class ItemSolicitado(models.Model): tipo_evento = models.ForeignKey( TipoEvento, on_delete=models.PROTECT, - limit_choices_to={"casa_solicita": True}, ) virtual = models.BooleanField(_("virtual"), default=False) inicio_desejado = models.DateField( @@ -246,7 +253,7 @@ class Evento(models.Model): ), ) virtual = models.BooleanField(_("Virtual"), default=False) - solicitante = models.CharField(_("Solicitante"), max_length=100) + solicitante = models.CharField(_("senador(a) solicitante"), max_length=100) num_processo = models.CharField( _("número do processo SIGAD"), max_length=20, @@ -257,7 +264,13 @@ class Evento(models.Model): _("Data do pedido"), null=True, blank=True, - help_text=_("Data em que o pedido do Gabinete chegou à COPERI"), + help_text=_("Data em que o pedido foi realizado"), + ) + data_recebido_coperi = models.DateField( + _("data de recebimento na COPERI"), + null=True, + blank=True, + help_text=_("Data em que o pedido chegou na COPERI"), ) solicitacao = models.ForeignKey( "ocorrencias.Ocorrencia", @@ -280,7 +293,6 @@ class Evento(models.Model): blank=True, null=True, ) - municipio = models.ForeignKey(Municipio, on_delete=models.PROTECT) local = models.TextField(_("Local do evento"), blank=True) observacao = models.TextField(_("Observações e anotações"), blank=True) publico_alvo = models.TextField(_("Público alvo"), blank=True)