Skip to content

Commit

Permalink
Merge branch 'release/0.5.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
alcfernandes committed Jul 8, 2020
2 parents bb39c5f + c0090e0 commit 9efe471
Show file tree
Hide file tree
Showing 110 changed files with 3,335 additions and 394 deletions.
19 changes: 18 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,28 @@ API da aplicação *SIG.Escola* da Secretaria de Educação da cidade de São Pa

License: MIT

Versão: 0.4.0
Versão: 0.5.0


## Release Notes

### 0.5.0 - 07/07/2020 - Entregas da Sprint 6
* Confirmação de repasses na entrada de créditos agora considera a classificação da receita em capital ou custeio;
* Alterada a estrutura do Demonstrativo Financeiro;
* Lançamento de saldos reprogramados (implantação de saldos);
* Cadastramento de todos os cargos da Associação;
* Cadastramento de dados das contas da Associação;
* Verificação de duplicidade no lançamento de uma despesa;
* CNPJ/CPF do fornecedor agora é brigatório no lançamento de uma despesa;
* Períodos futuros não são mais exibidos no painel de ações;
* Implementadas buscas por data e fornecedor na consulta de despesas;
* Implementada busca por data na consulta de créditos;
* Parametrização por tipo de documento para aceitar apenas dígitos no lançamento de despesas;
* Criado campo para detalhamento de créditos parametrizavel por tipo de crédito;
* O campo de observação da prestação de contas agora é vinculado à ação da associação;
* Exibição de valores de créditos futuros na ata da prestação de contas;
* Exibição do nome da escola abaixo do usuário em vez do nome da associação;

### 0.4.0 - 16/06/2020 - Entregas da Sprint 5
* Geração do documento Relação de Bens na prestação de contas
* Adicionado campo "Nº do cheque" no lançamento de despesas
Expand Down
4 changes: 3 additions & 1 deletion config/api_router.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@

from sme_ptrf_apps import __version__
from sme_ptrf_apps.core.api.views import (AssociacoesViewSet, PeriodosViewSet, PrestacoesContasViewSet,
DemonstrativoFinanceiroViewSet, RelacaoBensViewSet, AtasViewSet)
DemonstrativoFinanceiroViewSet, RelacaoBensViewSet, AtasViewSet,
MembroAssociacaoViewSet)
from sme_ptrf_apps.despesas.api.views.despesas_viewset import DespesasViewSet
from sme_ptrf_apps.despesas.api.views.especificacoes_viewset import EspecificacaoMaterialServicoViewSet
from sme_ptrf_apps.despesas.api.views.fornecedores_viewset import FornecedoresViewSet
Expand Down Expand Up @@ -38,6 +39,7 @@ def versao(request):
router.register("demonstrativo-financeiro", DemonstrativoFinanceiroViewSet)
router.register("relacao-bens", RelacaoBensViewSet)
router.register("atas-associacao", AtasViewSet)
router.register("membros-associacao", MembroAssociacaoViewSet)

app_name = "api"
urlpatterns = router.urls
Expand Down
7 changes: 6 additions & 1 deletion config/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
Base settings to build other settings files upon.
"""

import environ
import datetime

import environ

ROOT_DIR = (
environ.Path(__file__) - 3
) # (sme_ptrf_apps/config/settings/base.py - 3 = sme_ptrf_apps/)
Expand Down Expand Up @@ -76,6 +77,7 @@
'colorfield', # Para o django-admin-interface. Tem que estar antes do django.contrib.admin
"django.contrib.admin",
"django.forms",
"django.contrib.postgres",
]
THIRD_PARTY_APPS = [
"crispy_forms",
Expand Down Expand Up @@ -335,3 +337,6 @@
'JWT_ALLOW_REFRESH': True,
}
CORS_ORIGIN_ALLOW_ALL = True

EOL_API_TERCEIRIZADAS_URL = env('EOL_API_TERCEIRIZADAS_URL')
EOL_API_TERCEIRIZADAS_TOKEN = env('EOL_API_TERCEIRIZADAS_TOKEN')
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__ = "0.4.0"
__version__ = "0.5.0"
__version_info__ = tuple(
[
int(num) if num.isdigit() else num
Expand Down
153 changes: 137 additions & 16 deletions sme_ptrf_apps/conftest.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from datetime import date, timedelta, datetime
from datetime import date, datetime, timedelta

import pytest
from django.test import RequestFactory
Expand All @@ -7,10 +7,11 @@

from sme_ptrf_apps.users.models import User
from sme_ptrf_apps.users.tests.factories import UserFactory
from .core.models import AcaoAssociacao, ContaAssociacao, STATUS_FECHADO, STATUS_ABERTO
from .core.choices import MembroEnum, RepresentacaoCargo
from .core.models import AcaoAssociacao, ContaAssociacao, STATUS_FECHADO, STATUS_ABERTO, STATUS_IMPLANTACAO
from .core.models.prestacao_conta import STATUS_ABERTO as PRESTACAO_ABERTA
from .core.models.prestacao_conta import STATUS_FECHADO as PRESTACAO_FECHADA
from .despesas.tipos_aplicacao_recurso import APLICACAO_CUSTEIO, APLICACAO_CAPITAL
from .despesas.tipos_aplicacao_recurso import APLICACAO_CAPITAL, APLICACAO_CUSTEIO


@pytest.fixture
Expand Down Expand Up @@ -119,7 +120,7 @@ def unidade(dre):


@pytest.fixture
def associacao(unidade):
def associacao(unidade, periodo_anterior):
return baker.make(
'Associacao',
nome='Escola Teste',
Expand All @@ -128,7 +129,36 @@ def associacao(unidade):
presidente_associacao_nome='Fulano',
presidente_associacao_rf='1234567',
presidente_conselho_fiscal_nome='Ciclano',
presidente_conselho_fiscal_rf='7654321'
presidente_conselho_fiscal_rf='7654321',
periodo_inicial=periodo_anterior,
)

@pytest.fixture
def outra_associacao(unidade, periodo_anterior):
return baker.make(
'Associacao',
nome='Outra',
cnpj='52.302.275/0001-99',
unidade=unidade,
presidente_associacao_nome='Fulano',
presidente_associacao_rf='1234567',
presidente_conselho_fiscal_nome='Ciclano',
presidente_conselho_fiscal_rf='7654321',
periodo_inicial=periodo_anterior,
)

@pytest.fixture
def associacao_sem_periodo_inicial(unidade):
return baker.make(
'Associacao',
nome='Escola Teste',
cnpj='52.302.275/0001-83',
unidade=unidade,
presidente_associacao_nome='Fulano',
presidente_associacao_rf='1234567',
presidente_conselho_fiscal_nome='Ciclano',
presidente_conselho_fiscal_rf='7654321',
periodo_inicial=None,
)


Expand Down Expand Up @@ -270,6 +300,19 @@ def periodo_2020_1(periodo):
periodo_anterior=periodo
)

@pytest.fixture
def periodo_2019_2(periodo):
return baker.make(
'Periodo',
referencia='2019.2',
data_inicio_realizacao_despesas=date(2019, 6, 1),
data_fim_realizacao_despesas=date(2019, 12, 30),
data_prevista_repasse=date(2019, 6, 1),
data_inicio_prestacao_contas=date(2020, 1, 1),
data_fim_prestacao_contas=date(2020, 1, 10),
periodo_anterior=periodo
)


@pytest.fixture
def periodo_fim_em_2020_06_30():
Expand Down Expand Up @@ -337,7 +380,6 @@ def prestacao_conta(periodo, associacao, conta_associacao, prestacao_conta_anter
status=PRESTACAO_FECHADA,
conciliado=True,
conciliado_em=datetime(2020, 1, 1, 10, 30, 15),
observacoes='Teste',
motivo_reabertura='Teste'
)

Expand All @@ -352,7 +394,6 @@ def prestacao_conta_iniciada(periodo_2020_1, associacao, conta_associacao_cartao
status=PRESTACAO_ABERTA,
conciliado=False,
conciliado_em=None,
observacoes='',
motivo_reabertura=''
)

Expand Down Expand Up @@ -386,7 +427,6 @@ def prestacao_conta_2020_1_conciliada(periodo_2020_1, associacao, conta_associac
status=STATUS_ABERTO,
conciliado=True,
conciliado_em=date(2020, 7, 1),
observacoes='teste',
motivo_reabertura=''
)

Expand Down Expand Up @@ -435,6 +475,25 @@ def fechamento_periodo_anterior_role(periodo_anterior, associacao, conta_associa
status=STATUS_FECHADO
)


@pytest.fixture
def fechamento_periodo_anterior_role_implantado(periodo_anterior, associacao, conta_associacao, acao_associacao_role_cultural, ):
return baker.make(
'FechamentoPeriodo',
periodo=periodo_anterior,
associacao=associacao,
conta_associacao=conta_associacao,
acao_associacao=acao_associacao_role_cultural,
fechamento_anterior=None,
total_receitas_capital=1000,
total_repasses_capital=0,
total_despesas_capital=0,
total_receitas_custeio=2000,
total_repasses_custeio=0,
total_despesas_custeio=0,
status=STATUS_IMPLANTACAO
)

@pytest.fixture
def fechamento_2020_1_role(periodo_2020_1, associacao, conta_associacao, acao_associacao_role_cultural,
prestacao_conta_2020_1_conciliada,fechamento_periodo_anterior_role):
Expand Down Expand Up @@ -534,6 +593,14 @@ def tipo_receita():
def tipo_receita_repasse():
return baker.make('TipoReceita', nome='Repasse', e_repasse=True)

@pytest.fixture
def detalhe_tipo_receita_repasse(tipo_receita_repasse):
return baker.make('DetalheTipoReceita', nome='Repasse YYY', tipo_receita=tipo_receita_repasse)

@pytest.fixture
def detalhe_tipo_receita(tipo_receita):
return baker.make('DetalheTipoReceita', nome='Estorno A', tipo_receita=tipo_receita)


@pytest.fixture
def receita_100_no_periodo(associacao, conta_associacao, acao_associacao, tipo_receita, periodo):
Expand All @@ -542,7 +609,6 @@ def receita_100_no_periodo(associacao, conta_associacao, acao_associacao, tipo_r
associacao=associacao,
data=periodo.data_inicio_realizacao_despesas + timedelta(days=3),
valor=100.00,
descricao="Receita 100",
conta_associacao=conta_associacao,
acao_associacao=acao_associacao,
tipo_receita=tipo_receita,
Expand All @@ -555,7 +621,6 @@ def receita_100_nao_conferida_anterior_ao_periodo(associacao, conta_associacao,
associacao=associacao,
data=periodo.data_inicio_realizacao_despesas - timedelta(days=3),
valor=100.00,
descricao="Receita 100",
conta_associacao=conta_associacao,
acao_associacao=acao_associacao,
tipo_receita=tipo_receita,
Expand All @@ -571,7 +636,6 @@ def receita_100_no_periodo_acao_de_destaque(associacao, conta_associacao, acao_a
associacao=associacao,
data=periodo.data_inicio_realizacao_despesas + timedelta(days=3),
valor=100.00,
descricao="Receita 100",
conta_associacao=conta_associacao,
acao_associacao=acao_associacao_de_destaque,
tipo_receita=tipo_receita,
Expand All @@ -584,7 +648,6 @@ def receita_300_repasse_no_periodo(associacao, conta_associacao, acao_associacao
associacao=associacao,
data=periodo.data_inicio_realizacao_despesas + timedelta(days=3),
valor=300.00,
descricao="Receita 200 repasse",
conta_associacao=conta_associacao,
acao_associacao=acao_associacao,
tipo_receita=tipo_receita_repasse,
Expand All @@ -598,7 +661,6 @@ def receita_200_no_inicio_do_periodo(associacao, conta_associacao, acao_associac
associacao=associacao,
data=periodo.data_inicio_realizacao_despesas,
valor=200.00,
descricao="Receita 200",
conta_associacao=conta_associacao,
acao_associacao=acao_associacao,
tipo_receita=tipo_receita,
Expand All @@ -612,7 +674,6 @@ def receita_300_no_fim_do_periodo(associacao, conta_associacao, acao_associacao,
associacao=associacao,
data=periodo.data_fim_realizacao_despesas,
valor=300.00,
descricao="Receita 300",
conta_associacao=conta_associacao,
acao_associacao=acao_associacao,
tipo_receita=tipo_receita,
Expand All @@ -626,7 +687,6 @@ def receita_50_fora_do_periodo(associacao, conta_associacao, acao_associacao, ti
associacao=associacao,
data=periodo.data_inicio_realizacao_despesas - timedelta(days=1),
valor=50.00,
descricao="Receita 50",
conta_associacao=conta_associacao,
acao_associacao=acao_associacao,
tipo_receita=tipo_receita,
Expand All @@ -641,7 +701,6 @@ def receita_30_no_periodo_outra_acao(associacao, conta_associacao, acao_associac
associacao=associacao,
data=periodo.data_inicio_realizacao_despesas + timedelta(days=3),
valor=30.00,
descricao="Receita 30",
conta_associacao=conta_associacao,
acao_associacao=acao_associacao_role_cultural,
tipo_receita=tipo_receita,
Expand Down Expand Up @@ -923,3 +982,65 @@ def ata_prestacao_conta_iniciada(prestacao_conta_iniciada):
comentarios='Teste',
parecer_conselho='APROVADA'
)


@pytest.fixture
def membro_associacao(associacao):
return baker.make(
'MembroAssociacao',
nome='Arthur Nobrega',
associacao=associacao,
cargo_associacao=MembroEnum.PRESIDENTE_DIRETORIA_EXECUTIVA.value,
cargo_educacao='Coordenador',
representacao=RepresentacaoCargo.SERVIDOR.value,
codigo_identificacao='567432'
)


@pytest.fixture
def payload_membro_servidor(associacao):
payload = {
'nome': "Adriano Imperador",
'associacao': str(associacao.uuid),
'cargo_associacao': MembroEnum.PRESIDENTE_DIRETORIA_EXECUTIVA.name,
'cargo_educacao': 'Coordenador',
'representacao': RepresentacaoCargo.SERVIDOR.name,
'codigo_identificacao': '567432'
}
return payload


@pytest.fixture
def payload_membro_estudante(associacao):
payload = {
'nome': "Arthur Oliveira",
'associacao': str(associacao.uuid),
'cargo_associacao': MembroEnum.VOGAL_1.name,
'cargo_educacao': '',
'representacao': RepresentacaoCargo.ESTUDANTE.name,
'codigo_identificacao': '567431'
}
return payload


@pytest.fixture
def payload_membro_pai_responsavel(associacao):
payload = {
'nome': "Lana Oliveira",
'associacao': str(associacao.uuid),
'cargo_associacao': MembroEnum.VOGAL_3.name,
'cargo_educacao': '',
'representacao': RepresentacaoCargo.PAI_RESPONSAVEL.name,
'codigo_identificacao': ''
}
return payload


@pytest.fixture
def observacao(acao_associacao, prestacao_conta):
return baker.make(
'Observacao',
prestacao_conta=prestacao_conta,
acao_associacao=acao_associacao,
texto="Uma bela observação."
)
9 changes: 7 additions & 2 deletions sme_ptrf_apps/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
ContaAssociacao,
DemonstrativoFinanceiro,
FechamentoPeriodo,
MembroAssociacao,
Observacao,
Parametros,
Periodo,
PrestacaoConta,
Expand All @@ -22,11 +24,14 @@
admin.site.register(DemonstrativoFinanceiro)
admin.site.register(Parametros)
admin.site.register(RelacaoBens)
admin.site.register(MembroAssociacao)
admin.site.register(Observacao)


@admin.register(Associacao)
class AssociacaoAdmin(admin.ModelAdmin):
def get_nome_escola(self, obj):
return obj.nome if obj else ''
return obj.unidade.nome if obj else ''

get_nome_escola.short_description = 'Escola'

Expand All @@ -40,7 +45,7 @@ def importa_associacoes(self, request, queryset):
actions = ['importa_associacoes', ]
list_display = ('nome', 'cnpj', 'get_nome_escola', 'get_usuarios')
search_fields = ('uuid', 'nome', 'cnpj', 'unidade__nome')
list_filter = ('unidade__dre',)
list_filter = ('unidade__dre', 'periodo_inicial')
readonly_fields = ('uuid', 'id')

def get_usuarios(self, obj):
Expand Down
Loading

0 comments on commit 9efe471

Please sign in to comment.