Browse Source

Corrige solicitação de convenios e importa Gescon

pull/159/head
Sesostris Vieira 2 years ago
parent
commit
fdaddee4d9
  1. 23
      sigi/apps/convenios/jobs/daily/importa_gescon.py
  2. 22
      sigi/apps/convenios/migrations/0032_gescon_palavras_excluir.py
  3. 35
      sigi/apps/convenios/models.py
  4. 2
      sigi/apps/ocorrencias/views.py

23
sigi/apps/convenios/jobs/daily/importa_gescon.py

@ -1,6 +1,9 @@
import datetime
import docutils.core
from django.core.mail import mail_admins
from django.utils.translation import gettext as _
from django_extensions.management.jobs import DailyJob from django_extensions.management.jobs import DailyJob
from sigi.apps.convenios.models import Gescon from sigi.apps.convenios.models import Gescon
import datetime
class Job(DailyJob): class Job(DailyJob):
@ -11,5 +14,23 @@ class Job(DailyJob):
print(f"Import gescon data started at {now:%Y-%m-%d %H:%M:%S}") print(f"Import gescon data started at {now:%Y-%m-%d %H:%M:%S}")
gescon = Gescon.load() gescon = Gescon.load()
gescon.importa_contratos() gescon.importa_contratos()
self.report(gescon, now)
now = datetime.datetime.now() now = datetime.datetime.now()
print(f"Import gescon data finished at {now:%Y-%m-%d %H:%M:%S}") print(f"Import gescon data finished at {now:%Y-%m-%d %H:%M:%S}")
def report(self, gescon, now):
rst = gescon.ultima_importacao
html = docutils.core.publish_string(
rst,
writer_name="html5",
settings_overrides={
"input_encoding": "unicode",
"output_encoding": "unicode",
},
)
mail_admins(
subject=_(f"Importação do GESCON em {now:%d/%m/%Y às %Hh%M}"),
message=rst,
html_message=html,
fail_silently=True,
)

22
sigi/apps/convenios/migrations/0032_gescon_palavras_excluir.py

@ -0,0 +1,22 @@
# Generated by Django 4.1.2 on 2022-11-08 19:05
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("convenios", "0031_alter_projeto_modelo_minuta_and_more"),
]
operations = [
migrations.AddField(
model_name="gescon",
name="palavras_excluir",
field=models.TextField(
default="DTCOM",
help_text="Palavras que não podem aparecer no campo OBJETO dos dados do Gescon.<ul><li>Informe uma palavra por linha.</li><li>Ocorrendo qualquer uma das palavras, o contrato será ignorado.</li></ul>",
verbose_name="palavras de exclusão",
),
),
]

35
sigi/apps/convenios/models.py

@ -1,5 +1,6 @@
import re import re
import requests import requests
from pathlib import Path
from django.db import models from django.db import models
from django.db.models import Q, fields from django.db.models import Q, fields
from django.core.mail import send_mail from django.core.mail import send_mail
@ -97,6 +98,9 @@ class Projeto(models.Model):
encoding="utf-8", encoding="utf-8",
base_url=path, base_url=path,
) )
file_name = Path(file_object.path)
if not file_name.parent.exists():
file_name.parent.mkdir(parents=True, exist_ok=True)
if file_object.closed: if file_object.closed:
file_object.open(mode="wb") file_object.open(mode="wb")
pdf.write_pdf(target=file_object) pdf.write_pdf(target=file_object)
@ -132,7 +136,9 @@ class Projeto(models.Model):
cell.paragraphs, cell.paragraphs,
doc_context, doc_context,
) )
file_path = Path(file_path)
if not file_path.parent.exists():
file_path.mkdir(parents=True, exist_ok=True)
doc.save(file_path) doc.save(file_path)
def processa_paragrafos(self, paragrafos, context): def processa_paragrafos(self, paragrafos, context):
@ -523,6 +529,17 @@ class Gescon(models.Model):
"importado.</li></ul>" "importado.</li></ul>"
), ),
) )
palavras_excluir = models.TextField(
_("palavras de exclusão"),
default="DTCOM",
help_text=_(
"Palavras que não podem aparecer no campo OBJETO dos dados do "
"Gescon."
"<ul><li>Informe uma palavra por linha.</li>"
"<li>Ocorrendo qualquer uma das palavras, o contrato será "
"ignorado.</li></ul>"
),
)
orgaos_gestores = models.TextField( orgaos_gestores = models.TextField(
_("Órgãos gestores"), _("Órgãos gestores"),
default="SCCO", default="SCCO",
@ -615,7 +632,8 @@ class Gescon(models.Model):
) )
return return
palavras = self.palavras.split() palavras = self.palavras.splitlines()
excludentes = self.palavras_excluir.splitlines()
orgaos = self.orgaos_gestores.split() orgaos = self.orgaos_gestores.split()
subespecies = {tuple(s.split("=")) for s in self.subespecies.split()} subespecies = {tuple(s.split("=")) for s in self.subespecies.split()}
lista_cnpj = { lista_cnpj = {
@ -658,12 +676,15 @@ class Gescon(models.Model):
nossos = [ nossos = [
c c
for c in contratos for c in contratos
if any(palavra in c["objeto"] for palavra in palavras) if (
or any( any(palavra in c["objeto"] for palavra in palavras)
orgao in c["orgaosGestoresTitulares"] or any(
for orgao in orgaos orgao in c["orgaosGestoresTitulares"]
if c["orgaosGestoresTitulares"] is not None for orgao in orgaos
if c["orgaosGestoresTitulares"] is not None
)
) )
and not any(palavra in c["objeto"] for palavra in excludentes)
] ]
self.add_message( self.add_message(

2
sigi/apps/ocorrencias/views.py

@ -830,7 +830,7 @@ class SolicitaConvenioCreateView(ContatoInterlegisViewMixin, UpdateView):
if self.object.casa_brasao: if self.object.casa_brasao:
self.object.casa_brasao.delete(save=True) self.object.casa_brasao.delete(save=True)
else: else:
self.object.casa_bocorrenciarasao = brasao self.object.casa_brasao = brasao
self.infos["casa_legislativa"] = cleaned self.infos["casa_legislativa"] = cleaned
return "presidente" return "presidente"

Loading…
Cancel
Save