diff --git a/sigi/apps/casas/models.py b/sigi/apps/casas/models.py index ae94162..7d711aa 100644 --- a/sigi/apps/casas/models.py +++ b/sigi/apps/casas/models.py @@ -97,9 +97,7 @@ class Orgao(models.Model): null=True, blank=True, ) - obs_pesquisa = models.TextField( - _("observações do pesquisador"), blank=True - ) + obs_pesquisa = models.TextField(_("observações do pesquisador"), blank=True) ult_alt_endereco = models.DateTimeField( _("última alteração do endereço"), null=True, blank=True, editable=True ) @@ -137,16 +135,16 @@ class Orgao(models.Model): brasao_altura = models.SmallIntegerField(editable=False, null=True) @classmethod - def _mathnames(cls, nome, orgaos): + def _mathnames(cls, nome, orgaos, min_ratio=0.9): for o, nome_canonico in orgaos: ratio = SequenceMatcher( None, to_ascii(nome).lower(), nome_canonico ).ratio() - if ratio > 0.9: + if ratio > min_ratio: yield (o, ratio) @classmethod - def get_semelhantes(cls, nome, orgaos=None): + def get_semelhantes(cls, nome, orgaos=None, min_ratio=0.9): if orgaos is None: orgaos = [ (o, f"{to_ascii(o.nome)} - {o.uf_sigla}".lower()) @@ -155,8 +153,9 @@ class Orgao(models.Model): .annotate(uf_sigla=models.F("municipio__uf__sigla")) ] return sorted( - cls._mathnames(nome, orgaos), + cls._mathnames(nome, orgaos, min_ratio), key=lambda m: m[1], + reverse=True, ) class Meta: diff --git a/sigi/apps/convenios/models.py b/sigi/apps/convenios/models.py index 33774f4..0e5e381 100644 --- a/sigi/apps/convenios/models.py +++ b/sigi/apps/convenios/models.py @@ -304,9 +304,7 @@ class Convenio(models.Model): _("data de devolução da via"), null=True, blank=True, - help_text=_( - "Data de devolução da via do convênio à Câmara Municipal." - ), + help_text=_("Data de devolução da via do convênio à Câmara Municipal."), ) data_postagem_correio = models.DateField( _("data postagem correio"), @@ -748,6 +746,13 @@ class Gescon(models.Model): report_user = True continue + if response.status_code != 200: + self.add_message( + f"\tErro na leitura dos dados de {url}: " + f"[{response.status_code}] {response.reason}" + ) + continue + if not response.ok: self.add_message( _(f"\tErro ao acessar {url}: {response.reason}") @@ -805,6 +810,16 @@ class Gescon(models.Model): atualizados = 0 for contrato in nossos: + if contrato["numero"] is None: + self.add_message( + _( + "\t* O contrato de id {id} subespécie {sub} foi " + "cadastrado no Gescon sem número e não será " + "importado." + ).format(id=contrato["id"], sub=contrato["subEspecie"]) + ) + report_user = True + continue numero = re.sub( r"(\d{4})(\d{4})", r"\1/\2", contrato["numero"].zfill(8) ) @@ -895,9 +910,7 @@ class Gescon(models.Model): convenio.data_retorno_assinatura = contrato[ "inicioVigencia" ] - convenio.data_termino_vigencia = contrato[ - "terminoVigencia" - ] + convenio.data_termino_vigencia = contrato["terminoVigencia"] convenio.data_pub_diario = contrato["publicacao"] convenio.atualizacao_gescon = timezone.localtime() convenio.erro_gescon = False @@ -951,6 +964,7 @@ class Gescon(models.Model): .order_by() .annotate(uf_sigla=F("municipio__uf__sigla")) ], + min_ratio=0, )[0][0] except Orgao.DoesNotExist: # Encontrou 0: Vamos seguir sem órgao e tentar @@ -1035,9 +1049,7 @@ class Gescon(models.Model): observacao_gescon=_( "Importado integralmente do Gescon" ), - id_contrato_gescon=( - contrato["codTextoContrato"] or "" - ), + id_contrato_gescon=(contrato["codTextoContrato"] or ""), ) convenio.save() novos += 1 diff --git a/sigi/apps/eventos/saberes.py b/sigi/apps/eventos/saberes.py index 150c2b5..67f143e 100644 --- a/sigi/apps/eventos/saberes.py +++ b/sigi/apps/eventos/saberes.py @@ -71,9 +71,7 @@ class EventoSaberes(Moodle): def get_inscritos(self): if self.evento.moodle_courseid is None: raise SaberesSyncException( - _( - f"O evento {self.evento} não tem curso associado no Saberes" - ), + _(f"O evento {self.evento} não tem curso associado no Saberes"), ) if self._inscritos is None: @@ -248,9 +246,7 @@ class EventoSaberes(Moodle): settings.MOODLE_ORGAO_CUSTOMFIELD ] municipio = ( - p["dictcustomfields"][ - settings.MOODLE_MUNICIPIO_CUSTOMFIELD - ] + p["dictcustomfields"][settings.MOODLE_MUNICIPIO_CUSTOMFIELD] if settings.MOODLE_MUNICIPIO_CUSTOMFIELD in p["dictcustomfields"] else p["city"] if "city" in p else "" @@ -259,7 +255,7 @@ class EventoSaberes(Moodle): for nome in nomes_possiveis: semelhantes = Orgao.get_semelhantes(nome, orgaos) if len(semelhantes) > 0: - p["orgao"] = semelhantes[-1][0] + p["orgao"] = semelhantes[0][0] break if "orgao" not in p: # Buscar por sigla diff --git a/sigi/apps/servicos/templates/servicos/emails/report_sincroniza_dns.rst b/sigi/apps/servicos/templates/servicos/emails/report_sincroniza_dns.rst new file mode 100644 index 0000000..0f5a5ea --- /dev/null +++ b/sigi/apps/servicos/templates/servicos/emails/report_sincroniza_dns.rst @@ -0,0 +1,39 @@ +{% extends 'emails/base_report.rst' %} +{% load i18n %} + +{% block content %} +{% for uf, dados in report_data.items %} +{% if dados.erros or dados.infos or dados.sumario.total > 0 or dados.sumario.novos > 0 or dados.sumario.atualizados > 0 or dados.sumario.desativados > 0 or dados.sumario.ignorados > 0 %} +**{{ uf|upper }}** +{% for x in uf|length %}={% endfor %}==== + +{% if dados.sumario.total > 0 or dados.sumario.novos > 0 or dados.sumario.atualizados > 0 or dados.sumario.desativados > 0 or dados.sumario.ignorados > 0%} + **{% trans "SUMÁRIO" %}:** + + - Total de registros no DNS: {{ dados.sumario.total }} + - Registros criados no SIGI: {{ dados.sumario.novos }} + - Registros atualizados no SIGI: {{ dados.sumario.atualizados }} + - Registros desativados no SIGI: {{ dados.sumario.desativados }} + - Registros do DNS ignorados: {{ dados.sumario.ignorados }} +{% endif %} +{% if dados.erros %} + + **{% trans "ERROS" %}:** + + {% for m in dados.erros %} + * {{ m }} + {% endfor %} +{% endif %} + +{% if dados.infos %} + + **{% trans "INFORMAÇÕES ADICIONAIS" %}:** + + {% for m in dados.infos %} + * {{ m }} + {% endfor %} +{% endif %} +{% endif %} +{% endfor %} + +{% endblock content %} \ No newline at end of file diff --git a/sigi/apps/servicos/templates/servicos/emails/report_sincroniza_rancher.rst b/sigi/apps/servicos/templates/servicos/emails/report_sincroniza_rancher.rst new file mode 100644 index 0000000..9331279 --- /dev/null +++ b/sigi/apps/servicos/templates/servicos/emails/report_sincroniza_rancher.rst @@ -0,0 +1,29 @@ +{% extends 'emails/base_report.rst' %} +{% load i18n %} + +{% block content %} + +**{% trans "ERROS ENCONTRADOS" %}** +===================== +{% for tipo, mensagens in report_data.erros.items %} + **{{ tipo.nome|upper }} - {{ tipo.sigla|upper }}** + {% for m in mensagens %} + * {{ m }} + {% endfor %} +{% empty %} + *{% trans "Nenhum erro encontrado" %}* +{% endfor %} + + +**{% trans "INFORMAÇÕES ADICIONAIS" %}** +========================== +{% for tipo, mensagens in report_data.infos.items %} + {{ tipo.nome|upper }} - {{ tipo.sigla|upper }} + {% for m in mensagens %} + * {{ m }} + {% endfor %} +{% empty %} + *{% trans "Nenhuma informação adicional gerada" %}* +{% endfor %} + +{% endblock content %} \ No newline at end of file diff --git a/sigi/templates/emails/base_email.rst b/sigi/templates/emails/base_email.rst new file mode 100644 index 0000000..1f93b82 --- /dev/null +++ b/sigi/templates/emails/base_email.rst @@ -0,0 +1,11 @@ +{% block title %} +{% for s in title %}={% endfor %} +{{ title }} +{% for s in title %}={% endfor %} + +{% endblock title %} + + +{% block content %} +{% endblock content %} + diff --git a/sigi/templates/emails/base_report.rst b/sigi/templates/emails/base_report.rst new file mode 100644 index 0000000..ad3210c --- /dev/null +++ b/sigi/templates/emails/base_report.rst @@ -0,0 +1,17 @@ +{% extends 'emails/base_email.rst' %} +{% load i18n %} + +{% block title %} + {{ block.super }} +**{% trans "Início:" %} {{ start_time|date:"SHORT_DATETIME_FORMAT" }}** +**{% trans "Término:" %} {{ end_time|date:"SHORT_DATETIME_FORMAT" }}** + +{% endblock %} + +{% block content %} +{% trans "RESULTADO" %} +========= + +{% for row in report_data %}{{ row }} +{% endfor %} +{% endblock content %} \ No newline at end of file diff --git a/sigi/templates/emails/report_error.rst b/sigi/templates/emails/report_error.rst new file mode 100644 index 0000000..20b3962 --- /dev/null +++ b/sigi/templates/emails/report_error.rst @@ -0,0 +1,17 @@ +{% extends 'emails/base_email.rst' %} +{% load i18n %} + +{% block content %} +{% blocktrans %}UM ERRO OCORREU NA EXECUÇÃO DA TAREFA{% endblocktrans %} + +{% trans "VERIFIQUE O LOG DO SIGI PARA MAIORES DETALHES" %} + +* {% trans "Data/hora de execução" %}: {% now 'SHORT_DATETIME_FORMAT' %} + +::{% autoescape off %}{% for error_row in traceback %} + {{ error_row }} +{% endfor %} + +{% endautoescape %} + +{% endblock content %} \ No newline at end of file