Browse Source

Acrescenta siglas pré-definidas para migração

pull/166/head
Sesóstris Vieira 1 year ago
parent
commit
e230b75654
  1. 71
      sigi/apps/eventos/migrations/0038_migra_pedidos.py

71
sigi/apps/eventos/migrations/0038_migra_pedidos.py

@ -7,11 +7,50 @@ from sigi.apps.utils import to_ascii
def forwards(apps, schema_editor): def forwards(apps, schema_editor):
import ipdb
ipdb.set_trace()
TipoEvento = apps.get_model("eventos", "TipoEvento") TipoEvento = apps.get_model("eventos", "TipoEvento")
Evento = apps.get_model("eventos", "Evento") Evento = apps.get_model("eventos", "Evento")
Solicitacao = apps.get_model("eventos", "Solicitacao") Solicitacao = apps.get_model("eventos", "Solicitacao")
ItemSolicitado = apps.get_model("eventos", "ItemSolicitado") ItemSolicitado = apps.get_model("eventos", "ItemSolicitado")
siglas = {
"Encontro": 2,
"SAPL": 4,
"PROCLEG": 8,
"SAPL-A&C": 10,
"PE": 11,
"CERIMN": 12,
"CI": 13,
"MJ": 14,
"PM": 15,
"LC": 18,
"SAPL-R": 19,
"SAPL-ICP": 20,
"EDEM": 22,
"eDEM": 22,
"GPS": 23,
"CIGE": 24,
"LGPD": 25,
"TEGLEG": 26,
"CICLO": 27,
"OUV": 32,
"GPM": 40,
"SAPL-SPVP": 41,
"SAAP": 42,
"GABP": 52,
"PROCMULHER": 57,
"RELPUB": 58,
"ORÇPM": 59,
"ARQ": 60,
"BOM-ATEND": 61,
"MIDSOC": 62,
"POL-LEG": 63,
}
m_siglas = {s.lower().replace("-", " "): k for s, k in siglas.items()}
conjuncoes = [ conjuncoes = [
"oficina", "oficina",
"a", "a",
@ -28,9 +67,14 @@ def forwards(apps, schema_editor):
"com", "com",
] ]
# Adiciona as siglas pré-definidas pela COPERI
for sgl, id in siglas.items():
TipoEvento.objects.filter(id=id).update(sigla=sgl)
# Siglas para TipoEvento com as iniciais de cada palavra do nome # Siglas para TipoEvento com as iniciais de cada palavra do nome
for t in TipoEvento.objects.all(): for t in TipoEvento.objects.filter(sigla=""):
t.sigla = "".join( t.sigla = "".join(
[s[:1] for s in t.nome.split(" ") if s.lower() not in conjuncoes] [s[:1] for s in t.nome.split(" ") if s.lower() not in conjuncoes]
) )
@ -47,8 +91,9 @@ def forwards(apps, schema_editor):
conjugados = [ conjugados = [
to_ascii(re.search("(\w+) e (\w+)", t.nome.lower()).group()) to_ascii(re.search("(\w+) e (\w+)", t.nome.lower()).group())
for t in TipoEvento.objects.exclude(id=35) for t in TipoEvento.objects.exclude(id=35).filter(
if " e " in t.nome nome__icontains=" e "
)
] ]
# Tipo_evento_id 35 foi cadastrado como 'pedidos SIGAD' e todos os eventos # Tipo_evento_id 35 foi cadastrado como 'pedidos SIGAD' e todos os eventos
@ -103,20 +148,32 @@ def forwards(apps, schema_editor):
) )
for d in descricoes: for d in descricoes:
d = d.strip()
tipo_id = None
# Verifica se não é uma sigla pré-definida #
if d in m_siglas:
tipo_id = m_siglas[d]
else:
termos = { termos = {
s.strip() for s in d.strip().split(" ") if s not in conjuncoes s.strip() for s in d.split(" ") if s not in conjuncoes
} }
similar = min( similar = min(
[(id, len(termos.difference(t))) for id, t in tipos.items()], [
(id, len(termos.difference(t)))
for id, t in tipos.items()
],
key=lambda x: x[1], key=lambda x: x[1],
) )
if similar and similar[1] < len(termos): if similar and similar[1] < len(termos):
tipo_id = similar[0]
if tipo_id:
if not ItemSolicitado.objects.filter( if not ItemSolicitado.objects.filter(
solicitacao=solicitacao, tipo_evento_id=similar[0] solicitacao=solicitacao, tipo_evento_id=tipo_id
).exists(): ).exists():
ItemSolicitado( ItemSolicitado(
solicitacao=solicitacao, solicitacao=solicitacao,
tipo_evento_id=similar[0], tipo_evento_id=tipo_id,
virtual=e.virtual, virtual=e.virtual,
inicio_desejado=e.data_inicio inicio_desejado=e.data_inicio
or e.data_pedido or e.data_pedido

Loading…
Cancel
Save