Skip to content

Commit

Permalink
Merge pull request #1399 from prefeiturasp/hotfix/1.33.1
Browse files Browse the repository at this point in the history
Hotfix/1.33.1
  • Loading branch information
alcfernandes authored Sep 12, 2022
2 parents f385b58 + 16cb215 commit 6e7d4bb
Show file tree
Hide file tree
Showing 6 changed files with 146 additions and 10 deletions.
4 changes: 4 additions & 0 deletions hotfixes.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
### 1.33.1 - 12/09/2022 - Hotfix - Soluções de bugs urgentes durante a sprint 49
* (72992) - Corrige problema de duplicação de fechamentos
* (73629) - Implementa ação para importar implantação de valores reprogramados

### 1.32.7 - 16/08/2022 - Hotfix - Soluções de bugs urgentes durante a sprint 47
* (71609) - Inclui novos filtros no Admin de Despesas

Expand Down
2 changes: 1 addition & 1 deletion sme_ptrf_apps/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
__version__ = "1.33.0"
__version__ = "1.33.1"


__version_info__ = tuple(
Expand Down
62 changes: 60 additions & 2 deletions sme_ptrf_apps/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def get_nome_escola(self, obj):
readonly_fields = ('uuid', 'id')
list_display_links = ('nome', 'cnpj')

actions = ['define_status_nao_finalizado_valores_reprogramados', ]
actions = ['define_status_nao_finalizado_valores_reprogramados', 'migrar_valores_reprogramados']

def define_status_nao_finalizado_valores_reprogramados(self, request, queryset):
for associacao in queryset.all():
Expand All @@ -75,6 +75,48 @@ def define_status_nao_finalizado_valores_reprogramados(self, request, queryset):

self.message_user(request, f"Status definido com sucesso!")

def migrar_valores_reprogramados(self, request, queryset):
for associacao in queryset.all():
if associacao.status_valores_reprogramados == Associacao.STATUS_VALORES_REPROGRAMADOS_VALORES_CORRETOS:
# caso ja exista valores reprogramados para essa associação, nada deve ser feito
if associacao.valores_reprogramados_associacao.all():
continue

if not associacao.periodo_inicial:
continue

for conta_associacao in associacao.contas.all():
for acao_associacao in associacao.acoes.exclude(acao__e_recursos_proprios=True):
fechamento_implantacao = associacao.fechamentos_associacao.filter(
conta_associacao=conta_associacao).filter(
acao_associacao=acao_associacao).filter(status="IMPLANTACAO").first()

if acao_associacao.acao.aceita_custeio:
ValoresReprogramados.criar_valor_reprogramado_custeio(
associacao,
conta_associacao,
acao_associacao,
fechamento_implantacao
)

if acao_associacao.acao.aceita_capital:
ValoresReprogramados.criar_valor_reprogramado_capital(
associacao,
conta_associacao,
acao_associacao,
fechamento_implantacao
)

if acao_associacao.acao.aceita_livre:
ValoresReprogramados.criar_valor_reprogramado_livre(
associacao,
conta_associacao,
acao_associacao,
fechamento_implantacao
)

self.message_user(request, f"Valores migrados com sucesso!")


@admin.register(ContaAssociacao)
class ContaAssociacaoAdmin(admin.ModelAdmin):
Expand Down Expand Up @@ -212,7 +254,7 @@ def get_periodo_referencia(self, obj):
readonly_fields = ('uuid', 'id', 'criado_em', 'alterado_em')
search_fields = ('associacao__unidade__codigo_eol', 'associacao__nome', 'associacao__unidade__nome')

actions = ['vincular_consolidado_dre', ]
actions = ['vincular_consolidado_dre', 'remover_duplicacao_fechamentos']

def vincular_consolidado_dre(self, request, queryset):
from sme_ptrf_apps.dre.services.vincular_consolidado_service import VincularConsolidadoService
Expand All @@ -222,6 +264,22 @@ def vincular_consolidado_dre(self, request, queryset):

self.message_user(request, f"PCs vinculadas com sucesso!")

def remover_duplicacao_fechamentos(self, request, queryset):
for prestacao_conta in queryset.all():
associacao = prestacao_conta.associacao

for conta in associacao.contas.all():
fechamento_por_conta = prestacao_conta.fechamentos_da_prestacao.filter(conta_associacao=conta)

for acao in associacao.acoes.all():
fechamento_por_conta_e_acao = fechamento_por_conta.filter(acao_associacao=acao).order_by('id')

if len(fechamento_por_conta_e_acao) > 1:
fechamento_mais_recente = fechamento_por_conta_e_acao.last()
fechamento_mais_recente.delete()

self.message_user(request, f"Fechamentos duplicados apagados com sucesso!")


@admin.register(Ata)
class AtaAdmin(admin.ModelAdmin):
Expand Down
22 changes: 16 additions & 6 deletions sme_ptrf_apps/core/api/views/prestacoes_contas_viewset.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,18 +201,28 @@ def concluir(self, request):
dados = concluir_prestacao_de_contas(associacao=associacao, periodo=periodo)
prestacao_de_contas = dados["prestacao"]

concluir_prestacao_de_contas_async.delay(
periodo.uuid,
associacao.uuid,
usuario=request.user.username,
e_retorno_devolucao=dados["e_retorno_devolucao"]
)
erro_pc = dados["erro"]
if erro_pc:
raise Exception(erro_pc)
else:
concluir_prestacao_de_contas_async.delay(
periodo.uuid,
associacao.uuid,
usuario=request.user.username,
e_retorno_devolucao=dados["e_retorno_devolucao"]
)
except(IntegrityError):
erro = {
'erro': 'prestacao_ja_iniciada',
'mensagem': 'Você não pode iniciar uma prestação de contas que já foi iniciada.'
}
return Response(erro, status=status.HTTP_409_CONFLICT)
except Exception as e:
erro = {
'erro': 'prestacao_em_processamento',
'mensagem': f'{e}'
}
return Response(erro, status=status.HTTP_400_BAD_REQUEST)

return Response(PrestacaoContaLookUpSerializer(prestacao_de_contas, many=False).data,
status=status.HTTP_200_OK)
Expand Down
56 changes: 56 additions & 0 deletions sme_ptrf_apps/core/models/valores_reprogramados.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from django.db import models
from sme_ptrf_apps.core.models_abstracts import ModeloBase
from sme_ptrf_apps.receitas.tipos_aplicacao_recurso_receitas import APLICACAO_CHOICES
from sme_ptrf_apps.receitas.tipos_aplicacao_recurso_receitas import \
APLICACAO_CAPITAL, APLICACAO_CUSTEIO, APLICACAO_LIVRE

from auditlog.models import AuditlogHistoryField
from auditlog.registry import auditlog
Expand Down Expand Up @@ -61,6 +63,60 @@ def criar(cls, associacao, periodo, conta_associacao, acao_associacao, aplicacao

return valores_reprogramados

@classmethod
def criar_valor_reprogramado_custeio(cls, associacao, conta_associacao, acao_associacao, fechamento_implantacao):
periodo = fechamento_implantacao.periodo if fechamento_implantacao else associacao.periodo_inicial
valor_ue_custeio = fechamento_implantacao.saldo_reprogramado_custeio if fechamento_implantacao else 0.00
valor_dre_custeio = fechamento_implantacao.saldo_reprogramado_custeio if fechamento_implantacao else 0.00

valores_reprogramados = cls.objects.create(
associacao=associacao,
periodo=periodo,
conta_associacao=conta_associacao,
acao_associacao=acao_associacao,
aplicacao_recurso=APLICACAO_CUSTEIO,
valor_dre=valor_dre_custeio,
valor_ue=valor_ue_custeio
)

return valores_reprogramados

@classmethod
def criar_valor_reprogramado_capital(cls, associacao, conta_associacao, acao_associacao, fechamento_implantacao):
periodo = fechamento_implantacao.periodo if fechamento_implantacao else associacao.periodo_inicial
valor_ue_capital = fechamento_implantacao.saldo_reprogramado_capital if fechamento_implantacao else 0.00
valor_dre_capital = fechamento_implantacao.saldo_reprogramado_capital if fechamento_implantacao else 0.00

valores_reprogramados = cls.objects.create(
associacao=associacao,
periodo=periodo,
conta_associacao=conta_associacao,
acao_associacao=acao_associacao,
aplicacao_recurso=APLICACAO_CAPITAL,
valor_dre=valor_dre_capital,
valor_ue=valor_ue_capital
)

return valores_reprogramados

@classmethod
def criar_valor_reprogramado_livre(cls, associacao, conta_associacao, acao_associacao, fechamento_implantacao):
periodo = fechamento_implantacao.periodo if fechamento_implantacao else associacao.periodo_inicial
valor_ue_livre = fechamento_implantacao.saldo_reprogramado_livre if fechamento_implantacao else 0.00
valor_dre_livre = fechamento_implantacao.saldo_reprogramado_livre if fechamento_implantacao else 0.00

valores_reprogramados = cls.objects.create(
associacao=associacao,
periodo=periodo,
conta_associacao=conta_associacao,
acao_associacao=acao_associacao,
aplicacao_recurso=APLICACAO_LIVRE,
valor_dre=valor_dre_livre,
valor_ue=valor_ue_livre
)

return valores_reprogramados

class Meta:
verbose_name = "Valores reprogramados"
verbose_name_plural = "18.0) Valores reprogramados"
Expand Down
10 changes: 9 additions & 1 deletion sme_ptrf_apps/core/services/prestacao_contas_services.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,20 @@ def concluir_prestacao_de_contas(periodo, associacao):

e_retorno_devolucao = prestacao.status == PrestacaoConta.STATUS_DEVOLVIDA

if prestacao.status == PrestacaoConta.STATUS_EM_PROCESSAMENTO:
return {
"prestacao": prestacao,
"e_retorno_devolucao": e_retorno_devolucao,
"erro": "A pc já está em processamento, não é possivel alterar o status para em processamento."
}

prestacao.em_processamento()
logger.info(f'Prestação de contas em processamento {prestacao}.')

return {
"prestacao": prestacao,
"e_retorno_devolucao": e_retorno_devolucao
"e_retorno_devolucao": e_retorno_devolucao,
"erro": None
}


Expand Down

0 comments on commit 6e7d4bb

Please sign in to comment.