Skip to content

Commit

Permalink
Merge pull request #2619 from prefeiturasp/hotfix/8.16.1
Browse files Browse the repository at this point in the history
Hotfix/8.16.1
  • Loading branch information
rayanemsantos authored Jan 11, 2024
2 parents 8bf98da + 90b06ad commit ce8af55
Show file tree
Hide file tree
Showing 12 changed files with 230 additions and 118 deletions.
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.16.0"
__version__ = "8.16.1"

__version_info__ = tuple(
[
Expand Down
176 changes: 105 additions & 71 deletions sme_ptrf_apps/core/admin.py

Large diffs are not rendered by default.

15 changes: 14 additions & 1 deletion sme_ptrf_apps/core/api/serializers/acao_associacao_serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,18 @@ class Meta:
model = AcaoAssociacao
fields = ('uuid', 'associacao', 'acao', 'status')

def validate(self, data):
from sme_ptrf_apps.core.services.acoes_associacoes_service import validate_acao_associacao
associacao = data['associacao'] if 'associacao' in data else None
acao = data['acao'] if 'acao' in data else None

if associacao and acao:
try:
validate_acao_associacao(associacao, acao, self.instance)
except Exception as error:
raise error
return data


class AcaoAssociacaoRetrieveSerializer(serializers.ModelSerializer):
associacao = AssociacaoListSerializer()
Expand All @@ -73,4 +85,5 @@ def get_tooltip_associacao_encerrada(self, obj):

class Meta:
model = AcaoAssociacao
fields = ('uuid', 'id', 'associacao', 'data_de_encerramento_associacao', 'tooltip_associacao_encerrada', 'acao', 'status', 'criado_em')
fields = ('uuid', 'id', 'associacao', 'data_de_encerramento_associacao',
'tooltip_associacao_encerrada', 'acao', 'status', 'criado_em')
1 change: 0 additions & 1 deletion sme_ptrf_apps/core/api/views/acao_associacao_viewset.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from django.db.models import Q

from django_filters import rest_framework as filters

from rest_framework import mixins, status
Expand Down
4 changes: 2 additions & 2 deletions sme_ptrf_apps/core/models/acao_associacao.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

from django.db import models
from django.db.models.deletion import ProtectedError

from sme_ptrf_apps.core.models_abstracts import ModeloBase
from auditlog.models import AuditlogHistoryField
from auditlog.registry import auditlog
Expand All @@ -25,7 +24,8 @@ class AcaoAssociacao(ModeloBase):
)

associacao = models.ForeignKey('Associacao', on_delete=models.CASCADE, related_name='acoes', blank=True, null=True)
acao = models.ForeignKey('Acao', on_delete=models.PROTECT, blank=True, null=True, related_name='associacoes_da_acao')
acao = models.ForeignKey('Acao', on_delete=models.PROTECT, blank=True,
null=True, related_name='associacoes_da_acao')
status = models.CharField(
'status',
max_length=15,
Expand Down
14 changes: 13 additions & 1 deletion sme_ptrf_apps/core/services/acoes_associacoes_service.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
from ..models import Associacao
from django.core.exceptions import ValidationError
from ..models import Associacao, AcaoAssociacao


def associacoes_nao_vinculadas_a_acao(acao):
associacoes_vinculadas = acao.associacoes_da_acao.values_list('associacao__id', flat=True)
result = Associacao.objects.exclude(id__in=associacoes_vinculadas)
return result


def validate_acao_associacao(associacao, acao, instance=None):
existing_records = AcaoAssociacao.objects.filter(
associacao=associacao,
acao=acao,
status=AcaoAssociacao.STATUS_ATIVA
).exclude(pk=instance.pk if instance else None)

if existing_records.exists():
raise ValidationError('Já existe um registro com a mesma associação e ação com status ativa')
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from rest_framework import status

from sme_ptrf_apps.core.models import AcaoAssociacao
from sme_ptrf_apps.core.fixtures.factories import AcaoFactory, AcaoAssociacaoFactory, AssociacaoFactory

pytestmark = pytest.mark.django_db

Expand Down Expand Up @@ -122,3 +123,22 @@ def test_create_acao_associacao_em_lote_uuid_associacao_invalido(
assert response.status_code == status.HTTP_201_CREATED
assert result == esperado
assert AcaoAssociacao.objects.exists()


def test_validacao_create_acao_associacao(jwt_authenticated_client_a):
associacao = AssociacaoFactory()
acao = AcaoFactory()
acao_associacao_existente = AcaoAssociacaoFactory(associacao=associacao, acao=acao)

payload = {
'acao': f"{acao.uuid}",
'associacao': f"{associacao.uuid}"
}

response = jwt_authenticated_client_a.post(
'/api/acoes-associacoes/', data=json.dumps(payload), content_type='application/json')

result = json.loads(response.content)

assert response.status_code == status.HTTP_400_BAD_REQUEST
assert 'Já existe um registro com a mesma associação e ação com status ativa' in str(result)
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from rest_framework import status

from sme_ptrf_apps.core.models import AcaoAssociacao
from sme_ptrf_apps.core.fixtures.factories import AcaoFactory, AcaoAssociacaoFactory, AssociacaoFactory

pytestmark = pytest.mark.django_db

Expand Down Expand Up @@ -39,3 +40,24 @@ def test_update_acao_associacao(

assert acao_associacao.acao == acao_y, "Deve atualizar a ação."
assert acao_associacao.status == AcaoAssociacao.STATUS_INATIVA, "Deve atualizar o status."


def test_validacao_update_acao_associacao(jwt_authenticated_client_a):
associacao = AssociacaoFactory()
acao = AcaoFactory()
outra_acao = AcaoFactory()

acao_associacao_existente = AcaoAssociacaoFactory(associacao=associacao, acao=acao)

payload = {
'acao': f"{outra_acao.uuid}",
'associacao': f"{associacao.uuid}"
}

response = jwt_authenticated_client_a.put(
f'/api/acoes-associacoes/{acao_associacao_existente.uuid}/', data=json.dumps(payload), content_type='application/json')

result = json.loads(response.content)

assert response.status_code == status.HTTP_200_OK
assert result['acao'] == f"{outra_acao.uuid}"
8 changes: 4 additions & 4 deletions sme_ptrf_apps/despesas/api/serializers/despesa_serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ def create(self, validated_data):

despesas_impostos = validated_data.pop('despesas_impostos') if validated_data.get('despesas_impostos') else None

motivos_pagamento_antecipado = validated_data.pop('motivos_pagamento_antecipado')
outros_motivos_pagamento_antecipado = validated_data['outros_motivos_pagamento_antecipado']
motivos_pagamento_antecipado = validated_data.pop('motivos_pagamento_antecipado', None)
outros_motivos_pagamento_antecipado = validated_data.get('outros_motivos_pagamento_antecipado', None)

data_transacao = validated_data['data_transacao']
data_documento = validated_data['data_documento']
Expand Down Expand Up @@ -253,8 +253,8 @@ def update(self, instance, validated_data):

despesas_impostos = validated_data.pop('despesas_impostos') if 'despesas_impostos' in validated_data else []

motivos_pagamento_antecipado = validated_data.pop('motivos_pagamento_antecipado')
outros_motivos_pagamento_antecipado = validated_data['outros_motivos_pagamento_antecipado']
motivos_pagamento_antecipado = validated_data.pop('motivos_pagamento_antecipado', None)
outros_motivos_pagamento_antecipado = validated_data.get('outros_motivos_pagamento_antecipado', None)

data_transacao = validated_data['data_transacao']
data_documento = validated_data['data_documento']
Expand Down
Loading

0 comments on commit ce8af55

Please sign in to comment.