def acoes(self, request):
        periodo = None

        associacao_uuid = request.query_params.get('associacao_uuid')
        periodo_uuid = request.query_params.get('periodo_uuid')
        conta_associacao_uuid = self.request.query_params.get('conta-associacao')

        if not conta_associacao_uuid or not associacao_uuid or not periodo_uuid:
            erro = {
                'erro': 'parametros_requeridos',
                'mensagem': 'É necessário enviar o uuid do período, uuid da associação e o uuid da conta da associação.'
            }
            return Response(erro, status=status.HTTP_400_BAD_REQUEST)

        if periodo_uuid:
            periodo = Periodo.by_uuid(periodo_uuid)

        if not periodo:
            periodo = Periodo.periodo_atual()

        conta_associacao = ContaAssociacao.by_uuid(conta_associacao_uuid)

        info_acoes = info_acoes_associacao_no_periodo(associacao_uuid=associacao_uuid, periodo=periodo, conta=conta_associacao)
        result = {
            'info_acoes': [info for info in info_acoes if
                           info['saldo_reprogramado'] or info['receitas_no_periodo'] or info['despesas_no_periodo']]
        }

        return Response(result)
Exemplo n.º 2
0
def copia_atribuicoes_de_um_periodo(dados):
    if not dados.get('periodo_atual') or not dados.get(
            'periodo_copiado') or not dados.get('dre_uuid'):
        raise Exception("Os parâmetros não podem ser vazios ou nulos.")

    for unidade in Unidade.objects.filter(dre__uuid=dados.get('dre_uuid')):
        kwargs = {
            "unidade__uuid": unidade.uuid,
            "periodo__uuid": dados.get('periodo_copiado')
        }
        atribuicao = Atribuicao.search(**kwargs).first()
        if atribuicao:
            kwargs = {
                "unidade__uuid": unidade.uuid,
                "periodo__uuid": dados.get('periodo_atual')
            }
            atribuicao_atual = Atribuicao.search(**kwargs).first()

            periodo_atual = Periodo.by_uuid(dados.get('periodo_atual'))
            if atribuicao_atual:
                atribuicao_atual.tecnico = atribuicao.tecnico
                atribuicao_atual.periodo = periodo_atual
                atribuicao_atual.save()
            else:
                Atribuicao.objects.create(tecnico=atribuicao.tecnico,
                                          unidade=atribuicao.unidade,
                                          periodo=periodo_atual)
        else:
            kwargs = {
                "unidade__uuid": unidade.uuid,
                "periodo__uuid": dados.get('periodo_atual')
            }
            atribuicao_atual = Atribuicao.search(**kwargs).first()
            if atribuicao_atual:
                atribuicao_atual.delete()
Exemplo n.º 3
0
    def relacao_bens_info(self, request):
        conta_associacao_uuid = self.request.query_params.get(
            'conta-associacao')
        periodo_uuid = self.request.query_params.get('periodo')
        periodo = Periodo.by_uuid(periodo_uuid)
        conta_associacao = ContaAssociacao.by_uuid(conta_associacao_uuid)
        prestacao_conta = PrestacaoConta.objects.filter(
            associacao=conta_associacao.associacao,
            periodo__uuid=periodo_uuid).first()
        relacao_bens = RelacaoBens.objects.filter(
            conta_associacao__uuid=conta_associacao_uuid,
            prestacao_conta=prestacao_conta).first()

        msg = ""
        if not relacao_bens:
            rateios = RateioDespesa.rateios_da_conta_associacao_no_periodo(
                conta_associacao=conta_associacao,
                periodo=periodo,
                aplicacao_recurso=APLICACAO_CAPITAL)
            if rateios:
                msg = 'Documento pendente de geração'
            else:
                msg = "Não houve bem adquirido ou produzido no referido período."
        else:
            msg = str(relacao_bens)

        return Response(msg)
Exemplo n.º 4
0
def concluir_prestacao_de_contas_async(periodo_uuid,
                                       associacao_uuid,
                                       usuario="",
                                       criar_arquivos=True):
    from sme_ptrf_apps.core.services.prestacao_contas_services import (
        _criar_documentos, _criar_fechamentos, _apagar_previas_documentos)

    periodo = Periodo.by_uuid(periodo_uuid)
    associacao = Associacao.by_uuid(associacao_uuid)
    prestacao = PrestacaoConta.abrir(periodo=periodo, associacao=associacao)

    acoes = associacao.acoes.filter(status=AcaoAssociacao.STATUS_ATIVA)
    contas = associacao.contas.filter(status=ContaAssociacao.STATUS_ATIVA)

    _criar_fechamentos(acoes, contas, periodo, prestacao)
    logger.info('Fechamentos criados para a prestação de contas %s.',
                prestacao)

    _apagar_previas_documentos(contas=contas,
                               periodo=periodo,
                               prestacao=prestacao)
    logger.info('Prévias apagadas.')

    _criar_documentos(acoes,
                      contas,
                      periodo,
                      prestacao,
                      usuario=usuario,
                      criar_arquivos=criar_arquivos)
    logger.info('Documentos gerados para a prestação de contas %s.', prestacao)

    prestacao = prestacao.concluir()
    logger.info('Concluída a prestação de contas %s.', prestacao)
Exemplo n.º 5
0
def gerar_previa_relacao_de_bens_async(periodo_uuid, conta_associacao_uuid,
                                       data_inicio, data_fim):
    logger.info(
        f'Iniciando criação da Previa de relação de bens para a conta {conta_associacao_uuid} e período {periodo_uuid}.'
    )

    from sme_ptrf_apps.core.services.prestacao_contas_services import (
        _criar_previa_relacao_de_bens, _apagar_previas_relacao_bens)

    periodo = Periodo.by_uuid(periodo_uuid)
    periodo_previa = PeriodoPrevia(periodo.uuid, periodo.referencia,
                                   data_inicio, data_fim)

    conta_associacao = ContaAssociacao.by_uuid(conta_associacao_uuid)

    _apagar_previas_relacao_bens(conta=conta_associacao, periodo=periodo)

    relacao_de_bens = _criar_previa_relacao_de_bens(
        periodo=periodo,
        conta=conta_associacao,
    )

    logger.info(
        f'Previa de Relação de Bens criado para a conta {conta_associacao} e período {periodo}.'
    )
    logger.info(f'Previa de Relação de Bens arquivo {relacao_de_bens}.')
def notificar_usuario(dado):
    logging.info("Criando notificações.")

    associacao = Associacao.by_uuid(dado['associacao'])
    periodo = Periodo.by_uuid(dado['periodo'])
    comentarios = [
        ComentarioAnalisePrestacao.by_uuid(uuid)
        for uuid in dado['comentarios']
    ]

    tipo = TipoNotificacao.objects.filter(nome="Aviso").first()
    categoria = Categoria.objects.filter(
        nome="Comentário na prestação de contas").first()
    remetente = Remetente.objects.filter(nome="DRE").first()
    titulo = f"Comentário feito em sua prestação de contas de {periodo.referencia}."

    cargos = [
        MembroEnum.PRESIDENTE_DIRETORIA_EXECUTIVA.name,
        MembroEnum.VICE_PRESIDENTE_DIRETORIA_EXECUTIVA.name
    ]
    membros = associacao.cargos.filter(cargo_associacao__in=cargos)

    for membro in membros:
        usuario = None
        if membro.codigo_identificacao:
            usuario = User.objects.filter(
                username=membro.codigo_identificacao).first()
        else:
            usuario = User.objects.filter(username=membro.cpf).first()

        if usuario:
            for comentario in comentarios:
                Notificacao.objects.create(tipo=tipo,
                                           categoria=categoria,
                                           remetente=remetente,
                                           titulo=titulo,
                                           descricao=comentario.comentario,
                                           usuario=usuario)
            logger.info("Notificações criadas com sucesso.")
Exemplo n.º 7
0
def salvar_atualizar_atribuicao_em_lote(dados_atribuicoes):
    if not dados_atribuicoes.get('tecnico') or not dados_atribuicoes.get(
            'periodo') or not dados_atribuicoes.get('unidades'):
        raise Exception("Os parâmetros não podem ser vazios ou nulos.")

    tecnico = TecnicoDre.by_uuid(dados_atribuicoes.get('tecnico'))
    periodo = Periodo.by_uuid(dados_atribuicoes.get('periodo'))

    for unidade_dict in dados_atribuicoes.get('unidades'):
        unidade = Unidade.by_uuid(unidade_dict['uuid'])
        kwargs = {
            "unidade__uuid": unidade_dict['uuid'],
            "periodo__uuid": periodo.uuid
        }
        atribuicao = Atribuicao.search(**kwargs).first()
        if atribuicao:
            atribuicao.tecnico = tecnico
            atribuicao.save()
        else:
            Atribuicao.objects.create(tecnico=tecnico,
                                      unidade=unidade,
                                      periodo=periodo)
Exemplo n.º 8
0
def gerar_previa_demonstrativo_financeiro_async(periodo_uuid,
                                                conta_associacao_uuid,
                                                data_inicio,
                                                data_fim,
                                                usuario=""):
    logger.info(
        f'Iniciando criação da Previa de demonstrativo financeiro para a conta {conta_associacao_uuid} e período {periodo_uuid}.'
    )

    from sme_ptrf_apps.core.services.prestacao_contas_services import (
        _criar_previa_demonstrativo_financeiro,
        _apagar_previas_demonstrativo_financeiro)

    periodo = Periodo.by_uuid(periodo_uuid)
    periodo_previa = PeriodoPrevia(periodo.uuid, periodo.referencia,
                                   data_inicio, data_fim)

    conta_associacao = ContaAssociacao.by_uuid(conta_associacao_uuid)

    acoes = conta_associacao.associacao.acoes.filter(
        status=AcaoAssociacao.STATUS_ATIVA)

    _apagar_previas_demonstrativo_financeiro(conta=conta_associacao,
                                             periodo=periodo)

    demonstrativo_financeiro = _criar_previa_demonstrativo_financeiro(
        acoes=acoes,
        periodo=periodo,
        conta=conta_associacao,
        usuario=usuario,
    )

    logger.info(
        f'Previa de demonstrativo financeiro criado para a conta {conta_associacao} e período {periodo}.'
    )
    logger.info(
        f'Previa de demonstrativo financeiro arquivo {demonstrativo_financeiro}.'
    )
def notificar_comentario_pc(dado):
    logging.info("Criando notificações.")

    associacao = Associacao.by_uuid(dado['associacao'])
    periodo = Periodo.by_uuid(dado['periodo'])
    comentarios = [
        ComentarioAnalisePrestacao.by_uuid(uuid)
        for uuid in dado['comentarios']
    ]

    tipo = Notificacao.TIPO_NOTIFICACAO_AVISO
    categoria = Notificacao.CATEGORIA_NOTIFICACAO_COMENTARIO_PC
    remetente = Notificacao.REMETENTE_NOTIFICACAO_DRE
    titulo = f"Comentário feito em sua prestação de contas de {periodo.referencia}."

    cargos = [
        MembroEnum.PRESIDENTE_DIRETORIA_EXECUTIVA.name,
        MembroEnum.VICE_PRESIDENTE_DIRETORIA_EXECUTIVA.name
    ]
    membros = associacao.cargos.filter(cargo_associacao__in=cargos)

    for membro in membros:
        usuario = None
        if membro.codigo_identificacao:
            usuario = User.objects.filter(
                username=membro.codigo_identificacao).first()
        else:
            usuario = User.objects.filter(username=membro.cpf).first()

        if usuario:
            for comentario in comentarios:
                Notificacao.objects.create(tipo=tipo,
                                           categoria=categoria,
                                           remetente=remetente,
                                           titulo=titulo,
                                           descricao=comentario.comentario,
                                           usuario=usuario)
            logger.info("Notificações criadas com sucesso.")
def test_periodo_da_data_metodo_encontrando_periodo(periodo, periodo_anterior):
    data_consultada = periodo.data_inicio_realizacao_despesas + timedelta(days=1)
    periodo_da_data = Periodo.da_data(data_consultada)
    assert periodo_da_data == periodo
def test_periodo_da_data_metodo_periodo_aberto(periodo_fim_em_aberto):
    data_consultada = periodo_fim_em_aberto.data_inicio_realizacao_despesas + timedelta(days=1)
    periodo_da_data = Periodo.da_data(data_consultada)
    assert periodo_da_data == periodo_fim_em_aberto
def test_periodo_da_data_metodo_encontrando_periodo_anterior(periodo, periodo_anterior):
    data_consultada = periodo_anterior.data_fim_realizacao_despesas
    periodo_da_data = Periodo.da_data(data_consultada)
    assert periodo_da_data == periodo_anterior
def test_periodo_da_data_metodo_encontrando_periodo_data_inicial_limite(periodo, periodo_anterior):
    data_consultada = periodo.data_inicio_realizacao_despesas
    periodo_da_data = Periodo.da_data(data_consultada)
    assert periodo_da_data == periodo