Skip to content

Commit

Permalink
Merge pull request #2185 from prefeiturasp/release/8.5.0
Browse files Browse the repository at this point in the history
Release/8.5.0
  • Loading branch information
ollyvergithub authored Jul 17, 2023
2 parents 9fe1c2d + b6368b2 commit dc66f3b
Show file tree
Hide file tree
Showing 67 changed files with 3,055 additions and 364 deletions.
13 changes: 11 additions & 2 deletions config/api_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,14 @@
ExportacoesDadosViewSet
)
from sme_ptrf_apps.receitas.api.views import ReceitaViewSet, RepasseViewSet, MotivosEstornoViewSet
from sme_ptrf_apps.users.api.views import EsqueciMinhaSenhaViewSet, LoginView, RedefinirSenhaViewSet, UserViewSet
from sme_ptrf_apps.users.api.views import (
EsqueciMinhaSenhaViewSet,
LoginView,
RedefinirSenhaViewSet,
UserViewSet, # TODO - Remover ao fim da implantação da nova gestão de usuários
UsuariosViewSet,
GruposViewSet
)


@api_view()
Expand All @@ -85,7 +92,9 @@ def versao(request):
else:
router = SimpleRouter()

router.register("usuarios", UserViewSet)
router.register("usuarios", UserViewSet) # TODO - Remover ao fim da implantação da nova gestão de usuários
router.register("usuarios-v2", UsuariosViewSet)
router.register("grupos", GruposViewSet)
router.register("despesas", DespesasViewSet)
router.register("especificacoes", EspecificacaoMaterialServicoViewSet)
router.register("rateios-despesas", RateiosDespesasViewSet)
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__ = "8.4.0"
__version__ = "8.5.0"

__version_info__ = tuple(
[
Expand Down
12 changes: 12 additions & 0 deletions sme_ptrf_apps/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -2133,6 +2133,18 @@ def devolucao_prestacao_conta_2019_2(prestacao_conta_devolvida):
)


@pytest.fixture
def analise_conta_prestacao_conta_2020_1_solicitar_envio_do_comprovante_do_saldo_da_conta(prestacao_conta_2020_1_conciliada, conta_associacao_cheque):
return baker.make(
'AnaliseContaPrestacaoConta',
prestacao_conta=prestacao_conta_2020_1_conciliada,
conta_associacao=conta_associacao_cheque,
data_extrato=date(2020, 7, 1),
saldo_extrato=100.00,
solicitar_envio_do_comprovante_do_saldo_da_conta=True,
observacao_solicitar_envio_do_comprovante_do_saldo_da_conta='Observação de solicitação de envio de comprovante de saldo conta cheque',
)

@pytest.fixture
def analise_conta_prestacao_conta_2020_1(prestacao_conta_2020_1_conciliada, conta_associacao_cheque):
return baker.make(
Expand Down
19 changes: 11 additions & 8 deletions sme_ptrf_apps/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,14 +229,6 @@ def get_eol_unidade(self, obj):
list_display_links = ('periodo',)
readonly_fields = ('saldo_reprogramado_capital', 'saldo_reprogramado_custeio', 'saldo_reprogramado_livre', 'uuid', 'id', 'criado_em')
search_fields = ('associacao__unidade__codigo_eol', 'associacao__nome',)
autocomplete_fields = (
'prestacao_conta',
'periodo',
'associacao',
'conta_associacao',
'acao_associacao',
'fechamento_anterior'
)
fieldsets = (
(
None, {
Expand Down Expand Up @@ -313,6 +305,14 @@ def get_eol_unidade(self, obj):
),
)

raw_id_fields = [
'prestacao_conta',
'periodo',
'associacao',
'conta_associacao',
'acao_associacao',
'fechamento_anterior'
]


@admin.register(PrestacaoConta)
Expand Down Expand Up @@ -554,6 +554,8 @@ def get_id_analise_prestacao_contas(self, obj):
search_fields = ('prestacao_conta__associacao__unidade__codigo_eol', 'prestacao_conta__associacao__unidade__nome',
'prestacao_conta__associacao__nome')

raw_id_fields = ['prestacao_conta', 'analise_prestacao_conta', 'conta_associacao']

actions = ['vincula_analise_prestacao_contas', ]

def vincula_analise_prestacao_contas(self, request, queryset):
Expand Down Expand Up @@ -680,6 +682,7 @@ def get_dias_antes_fim_prazo_ajustes_pc_para_notificacao(self, obj):
'dias_antes_inicio_periodo_pc_para_notificacao',
'dias_antes_fim_periodo_pc_para_notificacao',
'dias_antes_fim_prazo_ajustes_pc_para_notificacao',
'numero_periodos_consecutivos',
'texto_pagina_valores_reprogramados_ue'
)
}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,8 @@ class AnaliseContaPrestacaoContaRetrieveSerializer(serializers.ModelSerializer):

class Meta:
model = AnaliseContaPrestacaoConta
fields = ('uuid', 'prestacao_conta', 'conta_associacao', 'data_extrato', 'saldo_extrato', 'analise_prestacao_conta', )
fields = (
'uuid', 'prestacao_conta', 'conta_associacao', 'data_extrato', 'saldo_extrato', 'analise_prestacao_conta',
'solicitar_envio_do_comprovante_do_saldo_da_conta',
'observacao_solicitar_envio_do_comprovante_do_saldo_da_conta'
)
26 changes: 25 additions & 1 deletion sme_ptrf_apps/core/api/serializers/prestacao_conta_serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,28 @@ def get_arquivos_referencia(self, prestacao_contas):
'conta_uuid': f'{extrato.conta_associacao.uuid}'
}
)

for ata_apresentacao in prestacao_contas.atas_da_prestacao.all():
if ata_apresentacao.status_geracao_pdf == 'CONCLUIDO':
if ata_apresentacao.tipo_ata == 'RETIFICACAO':
result.append(
{
'tipo': 'APR',
'nome': f'Ata de retificação da prestação de conta',
'uuid': f'{ata_apresentacao.uuid}',
'arquivo_apresentado_em_todas_as_contas': True
}
)

if ata_apresentacao.tipo_ata == 'APRESENTACAO':
result.append(
{
'tipo': 'AP',
'nome': f'Ata de apresentação da prestação de conta',
'uuid': f'{ata_apresentacao.uuid}',
'arquivo_apresentado_em_todas_as_contas': True
}
)
return result

def get_conciliacao_bancaria_ue(self, prestacao_contas):
Expand Down Expand Up @@ -203,7 +225,9 @@ def get_ajustes_por_analise(self, prestacao_contas):
},
"data_extrato": analise.data_extrato,
"saldo_extrato": analise.saldo_extrato,
"analise_prestacao_conta": f'{analise.analise_prestacao_conta.uuid}'
"analise_prestacao_conta": f'{analise.analise_prestacao_conta.uuid}',
'solicitar_envio_do_comprovante_do_saldo_da_conta': analise.solicitar_envio_do_comprovante_do_saldo_da_conta,
'observacao_solicitar_envio_do_comprovante_do_saldo_da_conta': analise.observacao_solicitar_envio_do_comprovante_do_saldo_da_conta,
}
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
class TipoContaSerializer(serializers.ModelSerializer):
class Meta:
model = TipoConta
fields = ('uuid', 'id', 'nome', 'apenas_leitura')
fields = ('uuid', 'id', 'nome', 'banco_nome', 'agencia', 'numero_conta', 'numero_cartao', 'apenas_leitura', 'permite_inativacao')
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ class PrestacoesContasLancamentosValidateSerializer(serializers.Serializer): # n
filtrar_por_tipo_de_documento = serializers.IntegerField(required=False, allow_null=True)
filtrar_por_tipo_de_pagamento = serializers.IntegerField(required=False, allow_null=True)
filtrar_por_nome_fornecedor = serializers.CharField(required=False, allow_null=True)
filtrar_por_informacoes = serializers.CharField(required=False, allow_null=True)
filtrar_por_conferencia = serializers.CharField(required=False, allow_null=True)

def validate_analise_prestacao(self, value): # noqa
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ def salvar_ajustes_saldo_conta(self, request):
prestacao_conta_uuid = dados_analise_saldo['prestacao_conta']
data_extrato = dados_analise_saldo['data_extrato']
saldo_extrato = dados_analise_saldo['saldo_extrato']
solicitar_envio_do_comprovante_do_saldo_da_conta = dados_analise_saldo.get('solicitar_envio_do_comprovante_do_saldo_da_conta', False)
observacao_solicitar_envio_do_comprovante_do_saldo_da_conta = dados_analise_saldo.get('observacao_solicitar_envio_do_comprovante_do_saldo_da_conta', None)

try:
analise_prestacao_conta = AnalisePrestacaoConta.by_uuid(analise_prestacao_conta_uuid)
Expand Down Expand Up @@ -119,7 +121,9 @@ def salvar_ajustes_saldo_conta(self, request):
conta_associacao=conta_associacao,
prestacao_conta=prestacao_conta,
data_extrato=data_extrato,
saldo_extrato=saldo_extrato
saldo_extrato=saldo_extrato,
solicitar_envio_do_comprovante_do_saldo_da_conta=solicitar_envio_do_comprovante_do_saldo_da_conta,
observacao_solicitar_envio_do_comprovante_do_saldo_da_conta=observacao_solicitar_envio_do_comprovante_do_saldo_da_conta,
)
except Exception as err:
erro = {
Expand Down
8 changes: 8 additions & 0 deletions sme_ptrf_apps/core/api/views/prestacoes_contas_viewset.py
Original file line number Diff line number Diff line change
Expand Up @@ -932,6 +932,12 @@ def lancamentos(self, request, uuid):
from sme_ptrf_apps.core.api.serializers.validation_serializers.prestacoes_contas_lancamentos_validate_serializer import PrestacoesContasLancamentosValidateSerializer
prestacao_conta = PrestacaoConta.by_uuid(uuid)

filtro_informacoes = self.request.query_params.get('filtrar_por_informacoes')
filtro_informacoes_list = filtro_informacoes.split(',') if filtro_informacoes else []

filtro_conferencia = self.request.query_params.get('filtrar_por_conferencia')
filtro_conferencia_list = filtro_conferencia.split(',') if filtro_conferencia else []

query = PrestacoesContasLancamentosValidateSerializer(data=self.request.query_params, context={'prestacao_conta': prestacao_conta})
query.is_valid(raise_exception=True)

Expand All @@ -947,6 +953,8 @@ def lancamentos(self, request, uuid):
filtrar_por_data_inicio=request.query_params.get('filtrar_por_data_inicio'),
filtrar_por_data_fim=request.query_params.get('filtrar_por_data_fim'),
filtrar_por_nome_fornecedor=request.query_params.get('filtrar_por_nome_fornecedor'),
filtro_informacoes_list=filtro_informacoes_list,
filtro_conferencia_list=filtro_conferencia_list,
)

return Response(lancamentos, status=status.HTTP_200_OK)
Expand Down
30 changes: 28 additions & 2 deletions sme_ptrf_apps/core/api/views/tipo_conta_viewset.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,43 @@
from rest_framework import mixins
from rest_framework import mixins, status

from rest_framework.permissions import IsAuthenticated

from rest_framework.viewsets import GenericViewSet

from ..serializers.tipo_conta_serializer import TipoContaSerializer
from ...models import TipoConta
from ...models import ContaAssociacao

from rest_framework.response import Response

class TiposContaViewSet(mixins.ListModelMixin,
mixins.RetrieveModelMixin,
mixins.CreateModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
GenericViewSet):
permission_classes = [IsAuthenticated]
lookup_field = 'uuid'
queryset = TipoConta.objects.all()
queryset = TipoConta.objects.all().order_by('nome')
serializer_class = TipoContaSerializer

def get_queryset(self):
qs = TipoConta.objects.all()

nome = self.request.query_params.get('nome')

if nome is not None:
qs = qs.filter(nome__unaccent__icontains=nome)

return qs.order_by('nome')

def destroy(self, request, *args, **kwargs):
instance = self.get_object()

tem_cadastrada_com_esse_tipo = ContaAssociacao.objects.filter(tipo_conta=instance).exists()
if tem_cadastrada_com_esse_tipo:
return Response({"erro": "Essa operação não pode ser realizada. Há associações cadastradas com esse tipo de conta."}, status=status.HTTP_400_BAD_REQUEST)

self.perform_destroy(instance)

return Response(status=status.HTTP_204_NO_CONTENT)
17 changes: 17 additions & 0 deletions sme_ptrf_apps/core/migrations/0336_auto_20230704_1211.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Generated by Django 3.1.14 on 2023-07-04 12:11

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('core', '0335_auto_20230620_1250'),
]

operations = [
migrations.AlterModelOptions(
name='participante',
options={'verbose_name': 'Participantes ata', 'verbose_name_plural': '17.0) Participantes ata'},
),
]
23 changes: 23 additions & 0 deletions sme_ptrf_apps/core/migrations/0336_auto_20230704_1443.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 3.1.14 on 2023-07-04 14:43

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core', '0335_auto_20230620_1250'),
]

operations = [
migrations.AddField(
model_name='analisecontaprestacaoconta',
name='observacao_solicitar_envio_do_comprovante_do_saldo_da_conta',
field=models.TextField(blank=True, max_length=600, null=True, verbose_name='Observação solicitação de envio do comprovante do saldo da conta'),
),
migrations.AddField(
model_name='analisecontaprestacaoconta',
name='solicitar_envio_do_comprovante_do_saldo_da_conta',
field=models.BooleanField(default=False, verbose_name='Solicitar envio do comprovante do saldo da conta'),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Generated by Django 3.1.14 on 2023-07-05 08:10

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core', '0335_auto_20230620_1250'),
]

operations = [
migrations.CreateModel(
name='FuncDreGestaoUsuarios',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
options={
'verbose_name': '[DRE] Gestão de usuários',
'verbose_name_plural': '[DRE] Gestão de usuários',
'permissions': (('access_gestao_usuarios_dre', '[DRE] Pode acessar Gestão de Usuários da DRE.'), ('change_gestao_usuarios_dre', '[DRE] Pode atualizar Gestão de Usuários da DRE.')),
'managed': False,
'default_permissions': (),
},
),
migrations.CreateModel(
name='FuncSmeGestaoUsuarios',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
options={
'verbose_name': '[SME] Gestão de usuários',
'verbose_name_plural': '[SME] Gestão de usuários',
'permissions': (('access_gestao_usuarios_sme', '[SME] Pode acessar Gestão de Usuários da SME.'), ('change_gestao_usuarios_sme', '[SME] Pode atualizar Gestão de Usuários da SME.')),
'managed': False,
'default_permissions': (),
},
),
migrations.CreateModel(
name='FuncUeGestaoUsuarios',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
options={
'verbose_name': '[UE] Gestão de usuários',
'verbose_name_plural': '[UE] Gestão de usuários',
'permissions': (('access_gestao_usuarios_ue', '[UE] Pode acessar Gestão de Usuários da UE.'), ('change_gestao_usuarios_ue', '[UE] Pode atualizar Gestão de Usuários da UE.')),
'managed': False,
'default_permissions': (),
},
),
]
14 changes: 14 additions & 0 deletions sme_ptrf_apps/core/migrations/0337_merge_20230704_1640.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated by Django 3.1.14 on 2023-07-04 16:40

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('core', '0336_auto_20230704_1211'),
('core', '0336_auto_20230704_1443'),
]

operations = [
]
14 changes: 14 additions & 0 deletions sme_ptrf_apps/core/migrations/0338_merge_20230710_1039.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated by Django 3.1.14 on 2023-07-10 10:39

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('core', '0337_merge_20230704_1640'),
('core', '0336_funcdregestaousuarios_funcsmegestaousuarios_funcuegestaousuarios'),
]

operations = [
]
18 changes: 18 additions & 0 deletions sme_ptrf_apps/core/migrations/0338_tipoconta_permite_inativacao.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.1.14 on 2023-07-10 01:22

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core', '0337_merge_20230704_1640'),
]

operations = [
migrations.AddField(
model_name='tipoconta',
name='permite_inativacao',
field=models.BooleanField(default=False, verbose_name='Permite inativação da conta?'),
),
]
Loading

0 comments on commit dc66f3b

Please sign in to comment.