Browse Source

Melhora geração de URL do SIGAD

dependabot/pip/requirements/requests-2.33.0 4.0.14
Sesóstris Vieira 3 weeks ago
parent
commit
429181ac58
  1. 24
      sigi/apps/convenios/models.py
  2. 17
      sigi/apps/espacos/models.py
  3. 53
      sigi/apps/eventos/models.py
  4. 40
      sigi/apps/utils/__init__.py

24
sigi/apps/convenios/models.py

@ -23,7 +23,7 @@ from sigi.apps.parlamentares.models import Parlamentar
from sigi.apps.utils import to_ascii
from sigi.apps.casas.models import Funcionario, Orgao
from sigi.apps.servidores.models import Servidor, Servico
from sigi.apps.utils import editor_help, mask_cnpj
from sigi.apps.utils import editor_help, mask_cnpj, get_sigad_url
class Projeto(models.Model):
@ -376,27 +376,7 @@ class Convenio(models.Model):
return obj.get_sigad_url()
def get_sigad_url(self, display_type="numero"):
m = re.match(
r"(?P<orgao>00100|00200)\.(?P<sequencial>\d{6})/(?P<ano>\d{4})-\d{2}",
self.num_processo_sf,
)
if m:
orgao, sequencial, ano = m.groups()
if display_type == "numero":
display = self.num_processo_sf
else:
display = '<i class="bi bi-eye"></i>'
return (
f'<a href="https://intra.senado.leg.br/sigad/novo/protocolo/'
f"impressao.asp?area=processo&txt_numero_orgao={orgao}"
f'&txt_numero_sequencial={sequencial}&txt_numero_ano={ano}" '
f'title="{self.num_processo_sf}" '
f'target="_blank">{display}</a>'
)
if display_type == "numero":
return self.num_processo_sf
else:
return '<i class="bi bi-eye-slash"></i>'
return get_sigad_url(self.num_processo_sf, display_type)
def get_url_gescon(self):
if not self.id_contrato_gescon:

17
sigi/apps/espacos/models.py

@ -5,6 +5,7 @@ from django.template.loader import render_to_string
from django.urls import reverse
from django.utils.safestring import mark_safe
from django.utils.translation import gettext as _
from sigi.apps.utils import get_sigad_url
class Espaco(models.Model):
@ -217,21 +218,7 @@ class Reserva(models.Model):
)
def get_sigad_url(self):
m = re.match(
r"(?P<orgao>00100|00200)\.(?P<sequencial>\d{6})/(?P<ano>"
r"\d{4})-\d{2}",
self.num_processo,
)
if m:
return (
'<a href="https://intra.senado.leg.br/'
"sigad/novo/protocolo/impressao.asp?area=processo"
"&txt_numero_orgao={orgao}"
"&txt_numero_sequencial={sequencial}"
'&txt_numero_ano={ano}"'
' target="_blank">{processo}</a>'
).format(processo=self.num_processo, **m.groupdict())
return self.num_processo
return get_sigad_url(self.num_processo)
class RecursoSolicitado(models.Model):

53
sigi/apps/eventos/models.py

@ -18,6 +18,7 @@ from django.utils.translation import gettext as _
from sigi.apps.casas.models import Orgao, Servidor
from sigi.apps.contatos.models import UnidadeFederativa
from sigi.apps.espacos.models import Reserva
from sigi.apps.utils import get_sigad_url
from sigi.apps.utils.templatetags.model_fields import verbose_name
from sigi.apps.eventos.saberes import EventoSaberes
@ -42,9 +43,7 @@ class TipoEvento(models.Model):
categoria = models.CharField(
_("Categoria"), max_length=1, choices=CATEGORIA_CHOICES
)
casa_solicita = models.BooleanField(
_("casa pode solicitar"), default=False
)
casa_solicita = models.BooleanField(_("casa pode solicitar"), default=False)
gerar_turma = models.BooleanField(
_("Gerar turma"),
default=True,
@ -178,23 +177,7 @@ class Solicitacao(models.Model):
@admin.display(description=_("SIGAD"), ordering="num_processo")
def get_sigad_url(self):
m = re.match(
r"(?P<orgao>00100|00200)\.(?P<sequencial>\d{6})/(?P<ano>"
r"\d{4})-\d{2}",
self.num_processo,
)
if m:
return mark_safe(
(
'<a href="https://intra.senado.leg.br/'
"sigad/novo/protocolo/impressao.asp?area=processo"
"&txt_numero_orgao={orgao}"
"&txt_numero_sequencial={sequencial}"
'&txt_numero_ano={ano}"'
' target="_blank">{processo}</a>'
).format(processo=self.num_processo, **m.groupdict())
)
return self.num_processo
return get_sigad_url(self.num_processo)
class ItemSolicitado(models.Model):
@ -413,9 +396,7 @@ class Evento(models.Model):
origem_sincronizacao = models.CharField(
_("origem da sincronização"), max_length=100, blank=True
)
status = models.CharField(
_("Status"), max_length=1, choices=STATUS_CHOICES
)
status = models.CharField(_("Status"), max_length=1, choices=STATUS_CHOICES)
publicar = models.BooleanField(_("publicar no site"), default=False)
moodle_courseid = models.PositiveBigIntegerField(
_("ID do curso"),
@ -517,21 +498,7 @@ class Evento(models.Model):
return reverse("admin:eventos_evento_change", args=[self.id])
def get_sigad_url(self):
m = re.match(
r"(?P<orgao>00100|00200)\.(?P<sequencial>\d{6})/(?P<ano>"
r"\d{4})-\d{2}",
self.num_processo,
)
if m:
return (
'<a href="https://intra.senado.leg.br/'
"sigad/novo/protocolo/impressao.asp?area=processo"
"&txt_numero_orgao={orgao}"
"&txt_numero_sequencial={sequencial}"
'&txt_numero_ano={ano}"'
' target="_blank">{processo}</a>'
).format(processo=self.num_processo, **m.groupdict())
return self.num_processo
return get_sigad_url(self.num_processo)
@property
def link_inscricao(self):
@ -698,9 +665,9 @@ class Evento(models.Model):
# preenchido com o total de aprovados quando da sincronização
# veja o método self.sincroniza.saberes()
total = self.convite_set.aggregate(
total=Sum("qtde_participantes")
)["total"]
total = self.convite_set.aggregate(total=Sum("qtde_participantes"))[
"total"
]
if total and total > 0 and total != self.total_participantes:
self.total_participantes = total
# Salva de novo se o total de participantes mudou #
@ -1116,9 +1083,7 @@ class Cronograma(models.Model):
_("data prevista de término"), blank=True, null=True
)
data_inicio = models.DateField(_("data de início"), blank=True, null=True)
data_termino = models.DateField(
_("data de término"), blank=True, null=True
)
data_termino = models.DateField(_("data de término"), blank=True, null=True)
dependencia = models.CharField(
_("depende da etapa"),
max_length=200,

40
sigi/apps/utils/__init__.py

@ -106,3 +106,43 @@ def mask_cnpj(cnpj):
return re.sub(
r"(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})", r"\1.\2.\3/\4-\5", cnpj
)
def get_sigad_url(num_sigad, display_type="numero"):
m = re.match(
r"(?P<orgao>\d{5})\.(?P<sequencial>\d{6})/(?P<ano>\d{4})-\d{2}",
num_sigad,
)
if m:
orgao, sequencial, ano = m.groups()
if display_type == "icone":
display = '<i class="bi bi-eye"></i>'
elif display_type == "icone+numero":
display = f'<i class="bi bi-eye"></i> {num_sigad}'
else:
display = num_sigad
return (
f'<a href="https://intra.senado.leg.br/sigad/novo/protocolo/'
f"impressao.asp?area=processo&txt_numero_orgao={orgao}"
f'&txt_numero_sequencial={sequencial}&txt_numero_ano={ano}" '
f'title="{num_sigad}" '
f'target="_blank">{display}</a>'
)
return num_sigad
def unmask_sigad(num_sigad):
return re.sub(r"\D", "", num_sigad)
def mask_sigad(num_sigad):
unmasked = unmask_sigad(num_sigad)
m = re.match(
r"(?P<orgao>00100|00200|00300)(?P<sequencial>\d{6})(?P<ano>\d{4})(?P<dv>\d{2})",
unmasked,
)
if m:
orgao, sequencial, ano, dv = m.groups()
return f"{orgao}.{sequencial}/{ano}-{dv}"
else:
return num_sigad

Loading…
Cancel
Save