Skip to content

Commit

Permalink
Merge branch 'release/1.3.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
alcfernandes committed Dec 9, 2020
2 parents e43e102 + 6c64629 commit 835a87a
Show file tree
Hide file tree
Showing 115 changed files with 6,046 additions and 255 deletions.
27 changes: 26 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,36 @@ API da aplicação *SIG.Escola* da Secretaria de Educação da cidade de São Pa

License: MIT

Versão: 1.2.0
Versão: 1.3.0


## Release Notes

### 1.3.0 - 08/12/2020 - Entregas da Sprint 12
* Carga de previsões de repasse da SME;
* Carga de quantidade de alunos do último celso;
* Vínculo de membros da associação a seus usuários no sistema;
* Uso do CPF para identificar membros de associação que são pais ou responsáveis;
* Configurado monitoramento de erros (Sentry);
* Dashboard da DRE movido para o ítem de menu 'Acompanhamento';
* Melhoria no texto da mensagem de alerta sobre períodos bloqueados para alteração;
* Melhorias na navegação entre informações na consulta de Associações pela DRE;
* Uso de perfis de acesso nas ações da consulta de Associações pela DRE;
* Aplicação de máscara na digitação do processo SEI de regularidade da Associação;
* Mensagem de confirmação de gravação ao atualizar dados da DRE;
* Geração de documentos de prestação de contas de forma assíncrona;
* Relatório Consolidado DRE (Parte 2);
* Mudança no critério de 'Prestações de Contas Não Recebidas' no painel da DRE;
* No painel da DRE, o total de associações passa a desconsiderar associações sem CNPJ;
* Geração de notificações para o presidente e vice-presidente da associação, sobre comentários feitos pela DRE na análise de uma prestação de contas;
* Bloqueio de conciliação de lançamentos em períodos fechados;
* Restrições de edição para a associação em devoluções ao tesouro registradas pela DRE;
* Na inclusão/edição de despesas, mensagem de confirmação ao sair, apenas quando houver mudanças;
* Expiração de acesso do usuário após 10 horas de logado;
* Ajustes menores em textos e labels;
* 🐞 Correção de alguns bugs.


### 1.2.0 - 10/11/2020 - Entregas da Sprint 11
* Gestão de perfis de acesso às funcionalidades do sistema
* Cadastro de Devoluções ao Tesouro na análise de prestações de conta pela DRE
Expand Down
2 changes: 1 addition & 1 deletion config/celery_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# set the default Django settings module for the 'celery' program.
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")

app = Celery("sme_ptrf")
app = Celery("sme_ptrf_apps")

# Using a string here means the worker doesn't have to serialize
# the configuration object to child processes.
Expand Down
1 change: 1 addition & 0 deletions config/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import environ


ROOT_DIR = (
environ.Path(__file__) - 3
) # (sme_ptrf_apps/config/settings/base.py - 3 = sme_ptrf_apps/)
Expand Down
9 changes: 9 additions & 0 deletions config/settings/production.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from .base import * # noqa
from .base import env

import sentry_sdk
from sentry_sdk.integrations.django import DjangoIntegration

# GENERAL
# ------------------------------------------------------------------------------
# https://docs.djangoproject.com/en/dev/ref/settings/#secret-key
Expand Down Expand Up @@ -144,3 +147,9 @@

# Your stuff...
# ------------------------------------------------------------------------------

# SENTRY
sentry_sdk.init(
dsn=env('SENTRY_URL'),
integrations=[DjangoIntegration()]
)
2 changes: 1 addition & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ services:
container_name: redis-ptrf
restart: always
ports:
- "6379:6379"
- "6380:6379"

networks:
default:
Expand Down
3 changes: 2 additions & 1 deletion requirements/base.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ django-cors-headers # https://github.com/adamchainz/django-cors-headers
# Para gravação de log de alterações nos modelos
# https://django-auditlog.readthedocs.io/en/latest/index.html
# Pegando última versão diretamente do repositório oficial.
-e git://github.com/jjkester/django-auditlog.git##egg=auditlog
-e git://github.com/jjkester/django-auditlog.git##egg=django-auditlog

# Para validação e formatação de CNPJ e CPF
# https://github.com/poliquin/brazilnum
Expand All @@ -46,3 +46,4 @@ brazilnum==0.8.8
# Para melhoria da aparência do Django Admin
# https://github.com/fabiocaccamo/django-admin-interface
django-admin-interface==0.12.2
sentry-sdk==0.14.2 # https://github.com/getsentry/sentry-python
1 change: 0 additions & 1 deletion requirements/production.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

gunicorn==20.0.4 # https://github.com/benoitc/gunicorn
psycopg2==2.8.4 --no-binary psycopg2 # https://github.com/psycopg/psycopg2
sentry-sdk==0.14.2 # https://github.com/getsentry/sentry-python

# Django
# ------------------------------------------------------------------------------
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.2.0"
__version__ = "1.3.0"
__version_info__ = tuple(
[
int(num) if num.isdigit() else num
Expand Down
4 changes: 2 additions & 2 deletions sme_ptrf_apps/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,6 @@ def unidade(dre):
complemento='fundos',
telefone='58212627',
email='[email protected]',
qtd_alunos=1000,
diretor_nome='Pedro Amaro',
dre_cnpj='63.058.286/0001-86',
dre_diretor_regional_rf='1234567',
Expand Down Expand Up @@ -1309,7 +1308,8 @@ def membro_associacao(associacao):
cargo_educacao='Coordenador',
representacao=RepresentacaoCargo.SERVIDOR.value,
codigo_identificacao='567432',
email='[email protected]'
email='[email protected]',
cpf='148.712.970-04'
)


Expand Down
21 changes: 15 additions & 6 deletions sme_ptrf_apps/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
DevolucaoAoTesouro,
ComentarioAnalisePrestacao,
PrevisaoRepasseSme,
Censo
)

admin.site.register(TipoNotificacao)
Expand Down Expand Up @@ -83,7 +84,7 @@ class PeriodoAdmin(admin.ModelAdmin):

@admin.register(Unidade)
class UnidadeAdmin(admin.ModelAdmin):
list_display = ('nome', 'tipo_unidade', 'codigo_eol', 'sigla', 'dre')
list_display = ('nome', 'tipo_unidade', 'codigo_eol', 'sigla', 'dre', 'qtd_alunos')
ordering = ('nome',)
search_fields = ('nome', 'codigo_eol', 'sigla')
list_filter = ('tipo_unidade', 'dre')
Expand All @@ -106,7 +107,6 @@ class UnidadeAdmin(admin.ModelAdmin):
'complemento',
'telefone',
'email',
'qtd_alunos',
'diretor_nome',
'uuid'
)
Expand Down Expand Up @@ -329,9 +329,12 @@ def get_referencia_periodo(self, obj):
get_referencia_periodo.short_description = 'Período'

list_display = (
'get_associacao', 'get_referencia_periodo', 'data', 'tipo', 'devolucao_total', 'valor')
'get_associacao', 'get_referencia_periodo', 'data', 'tipo', 'devolucao_total', 'valor', 'visao_criacao')

list_filter = (
'prestacao_conta__periodo', 'prestacao_conta__associacao', 'prestacao_conta', 'tipo', 'devolucao_total')
'prestacao_conta__periodo', 'prestacao_conta__associacao', 'prestacao_conta', 'tipo', 'devolucao_total',
'visao_criacao')

list_display_links = ('get_associacao',)
readonly_fields = ('uuid', id)
search_fields = ('prestacao_conta__associacao__unidade__codigo_eol', 'prestacao_conta__associacao__unidade__nome',
Expand All @@ -354,15 +357,15 @@ def get_referencia_periodo(self, obj):
list_display = (
'get_associacao', 'get_referencia_periodo', 'ordem', 'comentario')
list_filter = (
'prestacao_conta__periodo', 'prestacao_conta__associacao', 'prestacao_conta')
'prestacao_conta__periodo', 'prestacao_conta__associacao', 'prestacao_conta')
list_display_links = ('get_associacao',)
readonly_fields = ('uuid', id)
search_fields = ('prestacao_conta__associacao__unidade__codigo_eol', 'prestacao_conta__associacao__unidade__nome',
'prestacao_conta__associacao__nome', 'ordem', 'comentario')


@admin.register(PrevisaoRepasseSme)
class PrevisaoRepasseSmeAdmin(admin.ModelAdmin):

list_display = ('associacao', 'conta_associacao', 'periodo', 'valor_capital', 'valor_custeio', 'valor_livre')
list_filter = ('associacao', 'periodo', 'conta_associacao')
list_display_links = ('associacao',)
Expand All @@ -376,3 +379,9 @@ class TipoContaAdmin(admin.ModelAdmin):
search_fields = ['nome']
list_filter = ['nome', ]
readonly_fields = ('id', 'uuid',)


@admin.register(Censo)
class CensoAdmin(admin.ModelAdmin):
list_display = ['uuid', 'unidade', 'quantidade_alunos', 'ano']
list_filter = ['ano', ]
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from rest_framework import serializers

from ...models import CobrancaPrestacaoConta, PrestacaoConta
from ...models import CobrancaPrestacaoConta, PrestacaoConta, Associacao, Periodo


class CobrancaPrestacaoContaListSerializer(serializers.ModelSerializer):
Expand All @@ -10,6 +10,18 @@ class CobrancaPrestacaoContaListSerializer(serializers.ModelSerializer):
queryset=PrestacaoConta.objects.all()
)

associacao = serializers.SlugRelatedField(
slug_field='uuid',
required=False,
queryset=Associacao.objects.all()
)

periodo = serializers.SlugRelatedField(
slug_field='uuid',
required=False,
queryset=Periodo.objects.all()
)

class Meta:
model = CobrancaPrestacaoConta
fields = ('uuid', 'prestacao_conta', 'tipo', 'data')
fields = ('uuid', 'prestacao_conta', 'tipo', 'data', 'associacao', 'periodo')
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from ...api.serializers.tipo_devolucao_ao_tesouro_serializer import TipoDevolucaoAoTesouroSerializer
from ....despesas.api.serializers.despesa_serializer import DespesaListSerializer


class DevolucaoAoTesouroRetrieveSerializer(serializers.ModelSerializer):
prestacao_conta = serializers.SlugRelatedField(
slug_field='uuid',
Expand All @@ -17,4 +18,14 @@ class DevolucaoAoTesouroRetrieveSerializer(serializers.ModelSerializer):
class Meta:
model = DevolucaoAoTesouro
order_by = 'id'
fields = ('uuid', 'prestacao_conta', 'tipo', 'data', 'despesa', 'devolucao_total', 'valor', 'motivo')
fields = (
'uuid',
'prestacao_conta',
'tipo',
'data',
'despesa',
'devolucao_total',
'valor',
'motivo',
'visao_criacao'
)
12 changes: 12 additions & 0 deletions sme_ptrf_apps/core/api/serializers/membro_associacao_serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

from sme_ptrf_apps.core.api.serializers import AssociacaoLookupSerializer
from sme_ptrf_apps.core.models import MembroAssociacao, Associacao
from sme_ptrf_apps.users.api.serializers import UserSerializer
from django.contrib.auth import get_user_model

User = get_user_model()


class MembroAssociacaoCreateSerializer(serializers.ModelSerializer):
Expand All @@ -11,12 +15,20 @@ class MembroAssociacaoCreateSerializer(serializers.ModelSerializer):
queryset=Associacao.objects.all()
)

usuario = serializers.PrimaryKeyRelatedField(
required=False,
queryset=User.objects.all(),
allow_null=True
)

class Meta:
model = MembroAssociacao
exclude = ('id',)


class MembroAssociacaoListSerializer(serializers.ModelSerializer):
associacao = AssociacaoLookupSerializer()
usuario = UserSerializer()

class Meta:
model = MembroAssociacao
Expand Down
23 changes: 15 additions & 8 deletions sme_ptrf_apps/core/api/views/associacoes_viewset.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,14 @@
from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet

from sme_ptrf_apps.users.permissoes import PermissaoAssociacao, PermissaoAssociacaoDre, PermissaoExportarDadosAssociacao
from sme_ptrf_apps.users.permissoes import (
PermissaoAssociacao,
PermissaoAssociacaoDre,
PermissaoDadosUnidadeDre,
PermissaoExportarDadosAssociacao,
PermissaoRegularidadeDre,
PermissaoSituacaoFinanceira
)

from ....dre.services import (
desmarca_item_verificacao_associacao,
Expand Down Expand Up @@ -53,7 +60,7 @@ class AssociacoesViewSet(mixins.ListModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
GenericViewSet, ):
permission_classes = [IsAuthenticated & (PermissaoAssociacao | PermissaoAssociacaoDre)]
permission_classes = [IsAuthenticated & (PermissaoAssociacao | PermissaoAssociacaoDre | PermissaoDadosUnidadeDre | PermissaoSituacaoFinanceira)]
lookup_field = 'uuid'
queryset = Associacao.objects.all()
serializer_class = AssociacaoSerializer
Expand Down Expand Up @@ -324,12 +331,12 @@ def processos_da_associacao(self, request, uuid=None):
processos = associacao.processos.all()
return Response(ProcessoAssociacaoRetrieveSerializer(processos, many=True).data)

@action(detail=True, url_path='verificacao-regularidade', methods=['get'])
@action(detail=True, url_path='verificacao-regularidade', methods=['get'], permission_classes=[IsAuthenticated & ((PermissaoAssociacaoDre & PermissaoRegularidadeDre))])
def verificacao_regularidade(self, request, uuid=None):
verificacao = verifica_regularidade_associacao(uuid)
return Response(verificacao)

@action(detail=True, url_path='marca-item-verificacao', methods=['get'])
@action(detail=True, url_path='marca-item-verificacao', methods=['get'], permission_classes=[IsAuthenticated & ((PermissaoAssociacaoDre & PermissaoRegularidadeDre))])
def marca_item_verificacao(self, request, uuid=None):
item = request.query_params.get('item')

Expand Down Expand Up @@ -357,7 +364,7 @@ def marca_item_verificacao(self, request, uuid=None):

return Response(result, status=status_code)

@action(detail=True, url_path='desmarca-item-verificacao', methods=['get'])
@action(detail=True, url_path='desmarca-item-verificacao', methods=['get'], permission_classes=[IsAuthenticated & ((PermissaoAssociacaoDre & PermissaoRegularidadeDre))])
def desmarca_item_verificacao(self, request, uuid=None):
item = request.query_params.get('item')

Expand Down Expand Up @@ -385,7 +392,7 @@ def desmarca_item_verificacao(self, request, uuid=None):

return Response(result, status=status_code)

@action(detail=True, url_path='marca-lista-verificacao', methods=['get'])
@action(detail=True, url_path='marca-lista-verificacao', methods=['get'], permission_classes=[IsAuthenticated & ((PermissaoAssociacaoDre & PermissaoRegularidadeDre))])
def marca_lista_verificacao(self, request, uuid=None):
lista = request.query_params.get('lista')

Expand Down Expand Up @@ -413,7 +420,7 @@ def marca_lista_verificacao(self, request, uuid=None):

return Response(result, status=status_code)

@action(detail=True, url_path='desmarca-lista-verificacao', methods=['get'])
@action(detail=True, url_path='desmarca-lista-verificacao', methods=['get'], permission_classes=[IsAuthenticated & ((PermissaoAssociacaoDre & PermissaoRegularidadeDre))])
def desmarca_lista_verificacao(self, request, uuid=None):
lista = request.query_params.get('lista')

Expand Down Expand Up @@ -441,7 +448,7 @@ def desmarca_lista_verificacao(self, request, uuid=None):

return Response(result, status=status_code)

@action(detail=True, url_path='atualiza-itens-verificacao', methods=['post'])
@action(detail=True, url_path='atualiza-itens-verificacao', methods=['post'], permission_classes=[IsAuthenticated & (PermissaoAssociacaoDre & PermissaoRegularidadeDre)])
def atualiza_itens_verificacao(self, request, uuid=None):
itens = request.data

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ class CobrancasPrestacoesContasViewSet(viewsets.ModelViewSet):
serializer_class = CobrancaPrestacaoContaListSerializer
queryset = CobrancaPrestacaoConta.objects.all()
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ('prestacao_conta__uuid', 'tipo', 'devolucao_prestacao__uuid')
filter_fields = ('prestacao_conta__uuid', 'tipo', 'devolucao_prestacao__uuid', 'associacao__uuid', 'periodo__uuid')
Loading

0 comments on commit 835a87a

Please sign in to comment.