|
|
@ -26,7 +26,7 @@ from sapl.norma.models import (AssuntoNorma, NormaJuridica, |
|
|
|
TipoVinculoNormaJuridica) |
|
|
|
from sapl.parlamentares.models import Parlamentar |
|
|
|
from sapl.protocoloadm.models import Protocolo, StatusTramitacaoAdministrativo |
|
|
|
from sapl.sessao.models import ExpedienteMateria, OrdemDia, SessaoPlenaria |
|
|
|
from sapl.sessao.models import ExpedienteMateria, OrdemDia |
|
|
|
from sapl.settings import PROJECT_DIR |
|
|
|
from sapl.utils import normalize |
|
|
|
|
|
|
@ -247,12 +247,12 @@ def recreate_constraints(): |
|
|
|
|
|
|
|
|
|
|
|
def obj_desnecessario(obj): |
|
|
|
lista_fields = [ |
|
|
|
relacoes = [ |
|
|
|
f for f in obj._meta.get_fields() |
|
|
|
if (f.one_to_many or f.one_to_one) and f.auto_created] |
|
|
|
desnecessario = not any(rr.related_model.objects.filter( |
|
|
|
**{rr.field.name: obj}).exists() for rr in lista_fields) |
|
|
|
return desnecessario |
|
|
|
sem_referencia = not any(rr.related_model.objects.filter( |
|
|
|
**{rr.field.name: obj}).exists() for rr in relacoes) |
|
|
|
return sem_referencia |
|
|
|
|
|
|
|
|
|
|
|
def get_last_value(model): |
|
|
@ -413,34 +413,23 @@ class DataMigrator: |
|
|
|
return 0 |
|
|
|
info('Excluindo entradas antigas do banco.') |
|
|
|
call([PROJECT_DIR.child('manage.py'), 'flush', |
|
|
|
'--settings=sapl.settings', '--database=default', '--no-input'], |
|
|
|
stdout=PIPE) |
|
|
|
'--database=default', '--no-input'], stdout=PIPE) |
|
|
|
|
|
|
|
info('Começando migração: %s...' % obj) |
|
|
|
self._do_migrate(obj) |
|
|
|
# exclude logically deleted in legacy base |
|
|
|
|
|
|
|
# Itera várias vezes na lista excluindo o que for possível |
|
|
|
info('Deletando models com ind_excluido...') |
|
|
|
while self.to_delete: |
|
|
|
for obj in self.to_delete: |
|
|
|
if obj_desnecessario(obj): |
|
|
|
try: |
|
|
|
obj.delete() |
|
|
|
self.to_delete.remove(obj) |
|
|
|
except ProtectedError: |
|
|
|
msg = 'A entrada de PK %s da model %s não pode ser ' \ |
|
|
|
'excluida' % (obj.pk, obj._meta.model_name) |
|
|
|
descricao = 'Um ou mais objetos protegidos ' |
|
|
|
warn(msg + ' => ' + descricao) |
|
|
|
save_relation(obj=obj, problema=msg, |
|
|
|
descricao=descricao, eh_stub=False) |
|
|
|
else: |
|
|
|
msg = 'A entrada de PK %s da model %s não pode ser ' \ |
|
|
|
'excluida' % (obj.pk, obj._meta.model_name) |
|
|
|
descricao = 'Outros objetos dependem dessa entrada' |
|
|
|
warn(msg + ' => ' + descricao) |
|
|
|
save_relation(obj=obj, problema=msg, |
|
|
|
descricao=descricao, eh_stub=False) |
|
|
|
self.to_delete.remove(obj) |
|
|
|
while self.delete_ind_excluido(): |
|
|
|
pass |
|
|
|
# Salva o que não pôde ser excluido da lista no problema da migração |
|
|
|
for obj in self.to_delete: |
|
|
|
msg = 'A entrada de PK %s da model %s não pode ser ' \ |
|
|
|
'excluida' % (obj.pk, obj._meta.model_name) |
|
|
|
descricao = 'Um ou mais objetos protegidos ' |
|
|
|
warn(msg + ' => ' + descricao) |
|
|
|
save_relation(obj=obj, problema=msg, |
|
|
|
descricao=descricao, eh_stub=False) |
|
|
|
|
|
|
|
info('Deletando stubs desnecessários...') |
|
|
|
while self.delete_stubs(): |
|
|
@ -514,6 +503,20 @@ class DataMigrator: |
|
|
|
if getattr(old, 'ind_excluido', False): |
|
|
|
self.to_delete.append(new) |
|
|
|
|
|
|
|
def delete_ind_excluido(self): |
|
|
|
excluidos = 0 |
|
|
|
for obj in self.to_delete: |
|
|
|
if obj_desnecessario(obj): |
|
|
|
try: |
|
|
|
obj.delete() |
|
|
|
except ProtectedError: |
|
|
|
pass |
|
|
|
else: |
|
|
|
self.to_delete.remove(obj) |
|
|
|
excluidos += 1 |
|
|
|
|
|
|
|
return excluidos |
|
|
|
|
|
|
|
def delete_stubs(self): |
|
|
|
excluidos = 0 |
|
|
|
for obj in ProblemaMigracao.objects.all(): |
|
|
@ -589,10 +592,6 @@ def adjust_protocolo(new, old): |
|
|
|
new.numero = p['numero__max'] + 1 |
|
|
|
|
|
|
|
|
|
|
|
def adjust_sessaoplenaria(new, old): |
|
|
|
assert not old.tip_expediente |
|
|
|
|
|
|
|
|
|
|
|
def adjust_tipoproposicao(new, old): |
|
|
|
if old.ind_mat_ou_doc == 'M': |
|
|
|
new.tipo_conteudo_related = TipoMateriaLegislativa.objects.get( |
|
|
@ -689,7 +688,6 @@ AJUSTE_ANTES_SALVAR = { |
|
|
|
Parlamentar: adjust_parlamentar, |
|
|
|
Participacao: adjust_participacao, |
|
|
|
Protocolo: adjust_protocolo, |
|
|
|
SessaoPlenaria: adjust_sessaoplenaria, |
|
|
|
TipoProposicao: adjust_tipoproposicao, |
|
|
|
StatusTramitacao: adjust_statustramitacao, |
|
|
|
StatusTramitacaoAdministrativo: adjust_statustramitacaoadm, |
|
|
|