diff --git a/sme_ptrf_apps/__init__.py b/sme_ptrf_apps/__init__.py index c05986728..db6c8c3cc 100644 --- a/sme_ptrf_apps/__init__.py +++ b/sme_ptrf_apps/__init__.py @@ -1,4 +1,4 @@ -__version__ = "9.6.0" +__version__ = "9.6.1" __version_info__ = tuple( [ diff --git a/sme_ptrf_apps/despesas/services/despesa_service.py b/sme_ptrf_apps/despesas/services/despesa_service.py index c4d7ffc9c..ccf603ebd 100644 --- a/sme_ptrf_apps/despesas/services/despesa_service.py +++ b/sme_ptrf_apps/despesas/services/despesa_service.py @@ -1,5 +1,11 @@ +import logging + from django.db.models import Count +from sme_ptrf_apps.core.models import Associacao, Periodo + +logger = logging.getLogger(__name__) + def ordena_despesas_por_imposto(qs, lista_argumentos_ordenacao=None): @@ -21,3 +27,28 @@ def ordena_despesas_por_imposto(qs, lista_argumentos_ordenacao=None): return despesas_ordenadas + +def migra_despesas_periodos_anteriores(): + """ + Percorre todas as despesas com data de transação anterior ao período inicial de sua associação e atualiza os campos + despesa_anterior_ao_uso_do_sistema e despesa_anterior_ao_uso_do_sistema_pc_concluida. + + O período inicial de uma associação é o período do seu saldo de implantação + """ + logger.info('Obtendo lista de todas as associações ativas..') + associacoes = Associacao.ativas.all() + + for associacao in associacoes: + if associacao.periodo_inicial is None: + logger.info(f'Associação {associacao} não possui período inicial.') + continue + + logger.info(f'Migrando despesas anteriores a {associacao.periodo_inicial.referencia} da associação {associacao}..') + + despesas_anteriores = associacao.despesas.filter(data_transacao__lte=associacao.periodo_inicial.data_fim_realizacao_despesas) + + for despesa in despesas_anteriores: + logger.info(f'Migrando despesa {despesa}..') + despesa.despesa_anterior_ao_uso_do_sistema = True + despesa.despesa_anterior_ao_uso_do_sistema_pc_concluida = associacao.prestacoes_de_conta_da_associacao.exists() + despesa.save() diff --git a/sme_ptrf_apps/despesas/tasks/__init__.py b/sme_ptrf_apps/despesas/tasks/__init__.py new file mode 100644 index 000000000..c0265ec43 --- /dev/null +++ b/sme_ptrf_apps/despesas/tasks/__init__.py @@ -0,0 +1 @@ +from .migrar_gastos_periodos_anteriores import migrar_gastos_periodos_anteriores_async diff --git a/sme_ptrf_apps/despesas/tasks/migrar_gastos_periodos_anteriores.py b/sme_ptrf_apps/despesas/tasks/migrar_gastos_periodos_anteriores.py new file mode 100644 index 000000000..bcbe93c67 --- /dev/null +++ b/sme_ptrf_apps/despesas/tasks/migrar_gastos_periodos_anteriores.py @@ -0,0 +1,20 @@ +import logging + +from celery import shared_task +from sme_ptrf_apps.despesas.services.despesa_service import migra_despesas_periodos_anteriores + +logger = logging.getLogger(__name__) + + +@shared_task( + retry_backoff=2, + retry_kwargs={'max_retries': 8}, + time_limet=600, + soft_time_limit=300 +) +def migrar_gastos_periodos_anteriores_async(): + logger.info('Iniciando a task de migração de gastos de períodos anteriores.') + + migra_despesas_periodos_anteriores() + + logger.info('Finalizado a task de migração de gastos de períodos anteriores.')