Ejemplo n.º 1
0
    def atrelar_saida_do_recurso(self, request, uuid):

        despesa_uuid = request.query_params.get('despesa_uuid')

        try:
            Receita.objects.get(uuid=uuid)
        except (Receita.DoesNotExist, ValidationError):
            erro = {
                'erro': 'Objeto não encontrado.',
                'mensagem': f"O objeto receita para o uuid {uuid} não foi encontrado na base."
            }
            logger.info('Erro: %r', erro)
            return Response(erro, status=status.HTTP_400_BAD_REQUEST)

        if despesa_uuid is None:
            erro = {
                'erro': 'parametros_requerido',
                'mensagem': 'É necessário enviar o uuid da despesa'
            }
            return Response(erro, status=status.HTTP_400_BAD_REQUEST)

        try:
            Despesa.objects.get(uuid=despesa_uuid)
        except (Despesa.DoesNotExist, ValidationError):
            erro = {
                'erro': 'Objeto não encontrado.',
                'mensagem': f"O objeto despesa para o uuid {despesa_uuid} não foi encontrado na base."
            }
            logger.info('Erro: %r', erro)
            return Response(erro, status=status.HTTP_400_BAD_REQUEST)

        receita_atrelada = Receita.atrelar_saida_recurso(uuid, despesa_uuid)

        return Response(ReceitaListaSerializer(receita_atrelada, many=False).data,
                        status=status.HTTP_200_OK)
def gerar(usuario,
          acoes,
          periodo,
          conta_associacao,
          observacao_conciliacao,
          previa=False):
    try:
        LOGGER.info("GERANDO DEMONSTRATIVO...")
        rateios_conferidos = RateioDespesa.rateios_da_conta_associacao_no_periodo(
            conta_associacao=conta_associacao, periodo=periodo,
            conferido=True).order_by('despesa__data_transacao')

        rateios_nao_conferidos = RateioDespesa.rateios_da_conta_associacao_no_periodo(
            conta_associacao=conta_associacao,
            periodo=periodo,
            conferido=False).order_by('despesa__data_transacao')

        rateios_nao_conferidos_em_periodos_anteriores = RateioDespesa.rateios_da_conta_associacao_em_periodos_anteriores(
            conta_associacao=conta_associacao,
            periodo=periodo,
            conferido=False).order_by('despesa__data_transacao')

        receitas_demonstradas = Receita.receitas_da_conta_associacao_no_periodo(
            conta_associacao=conta_associacao, periodo=periodo, conferido=True)

        path = os.path.join(os.path.basename(staticfiles_storage.location),
                            'cargas')
        nome_arquivo = os.path.join(
            path, 'modelo_demonstrativo_financeiro_novo_v3.xlsx')
        workbook = load_workbook(nome_arquivo)
        worksheet = workbook.active

        cabecalho(worksheet, periodo, conta_associacao, previa)

        bloco1_identificacao_apm(worksheet, acoes)
        bloco2_identificacao_conta(worksheet, conta_associacao,
                                   observacao_conciliacao)
        bloco3_resumo_por_acao(worksheet, acoes, conta_associacao, periodo)
        bloco4_creditos_demonstrados(worksheet, receitas_demonstradas)
        bloco5_despesas_demonstradas(worksheet, rateios_conferidos)
        bloco6_despesas_demonstradas(worksheet, rateios_nao_conferidos)
        bloco7_despesas_demonstradas(
            worksheet, rateios_nao_conferidos_em_periodos_anteriores)

        data_geracao_documento(worksheet, usuario, previa)

    finally:
        LOGGER.info("DEMONSTRATIVO GERADO")

    return workbook
Ejemplo n.º 3
0
def gerar_dados_demonstrativo_financeiro(usuario, acoes, periodo, conta_associacao, prestacao, observacao_conciliacao, previa=False):
    try:
        LOGGER.info("GERANDO DADOS DEMONSTRATIVO...")
        rateios_conferidos = RateioDespesa.rateios_da_conta_associacao_no_periodo(
            conta_associacao=conta_associacao, periodo=periodo, conferido=True).order_by('despesa__data_transacao')

        rateios_nao_conferidos = RateioDespesa.rateios_da_conta_associacao_no_periodo(conta_associacao=conta_associacao, periodo=periodo, conferido=False).order_by('despesa__data_transacao')

        rateios_nao_conferidos_periodos_anteriores = RateioDespesa.rateios_da_conta_associacao_em_periodos_anteriores(
            conta_associacao=conta_associacao, periodo=periodo, conferido=False).order_by('despesa__data_transacao')

        receitas_demonstradas = Receita.receitas_da_conta_associacao_no_periodo(
            conta_associacao=conta_associacao, periodo=periodo, conferido=True)

        cabecalho = cria_cabecalho(periodo, conta_associacao, previa)
        identificacao_apm = cria_identificacao_apm(acoes)
        identificacao_conta = cria_identificacao_conta(conta_associacao, observacao_conciliacao)
        resumo_por_acao = cria_resumo_por_acao(acoes, conta_associacao, periodo)
        creditos_demonstrados = cria_creditos_demonstrados(receitas_demonstradas)
        despesas_demonstradas = cria_despesas(rateios_conferidos)
        despesas_nao_demonstradas = cria_despesas(rateios_nao_conferidos)
        despesas_anteriores_nao_demonstradas = cria_despesas(rateios_nao_conferidos_periodos_anteriores)
        observacoes = cria_observacoes(periodo, conta_associacao)
        data_geracao_documento = cria_data_geracao_documento(usuario, previa)
        data_geracao = cria_data_geracao()

        dados_demonstrativo = {
            "cabecalho": cabecalho,
            "identificacao_apm": identificacao_apm,
            "identificacao_conta": identificacao_conta,
            "resumo_por_acao": resumo_por_acao,
            "creditos_demonstrados": creditos_demonstrados,
            "despesas_demonstradas": despesas_demonstradas,
            "despesas_nao_demonstradas": despesas_nao_demonstradas,
            "despesas_anteriores_nao_demonstradas": despesas_anteriores_nao_demonstradas,
            "observacoes_acoes": observacoes,
            "data_geracao_documento": data_geracao_documento,
            "data_geracao": data_geracao
        }
    # except Exception as e:
    #    LOGGER.error("ERRO no DADOS DEMONSTRATIVO: %s", str(e))
    finally:
        LOGGER.info("DADOS DEMONSTRATIVO GERADO")

    return dados_demonstrativo
def test_api_deve_desconciliar_transacao_receita(
        jwt_authenticated_client_a, acao_associacao_role_cultural,
        receita_2020_1_ptrf_repasse_conferida,
        receita_2020_1_role_outras_nao_conferida, periodo_2020_1,
        conta_associacao_cartao):

    url = f'/api/conciliacoes/desconciliar-transacao/'
    url = f'{url}?conta_associacao={conta_associacao_cartao.uuid}'
    url = f'{url}&transacao={receita_2020_1_ptrf_repasse_conferida.uuid}'
    url = f'{url}&tipo=CREDITO'

    response = jwt_authenticated_client_a.patch(
        url, content_type='application/json')

    receita_desconciliada = Receita.by_uuid(
        receita_2020_1_ptrf_repasse_conferida.uuid)

    assert response.status_code == status.HTTP_200_OK

    assert not receita_desconciliada.conferido, "Receita deveria ter sido desconciliada."
    assert receita_desconciliada.periodo_conciliacao is None, "Receita deveria ter sido desvinculada do período."
    def _soma_receitas_tipo_rendimento(totais, periodo, conta_associacao,
                                       acao_associacao):

        receitas = Receita.receitas_da_acao_associacao_no_periodo(
            acao_associacao=acao_associacao,
            periodo=periodo,
            conta_associacao=conta_associacao)
        for receita in receitas:
            if receita.tipo_receita.e_rendimento:
                totais['receitas_rendimento_no_periodo_total'] += receita.valor

                if receita.categoria_receita == 'CAPITAL':
                    totais[
                        'receitas_rendimento_no_periodo_capital'] += receita.valor
                elif receita.categoria_receita == 'CUSTEIO':
                    totais[
                        'receitas_rendimento_no_periodo_custeio'] += receita.valor
                else:
                    totais[
                        'receitas_rendimento_no_periodo_livre'] += receita.valor

        return totais
def sintese_livre(row_livre, linha,
                  valor_saldo_reprogramado_proximo_periodo_custeio,
                  valor_saldo_reprogramado_proximo_periodo_capital,
                  acao_associacao, conta_associacao, periodo,
                  fechamento_periodo):
    saldo_reprogramado_anterior_livre = fechamento_periodo.fechamento_anterior.saldo_reprogramado_livre if fechamento_periodo and fechamento_periodo.fechamento_anterior else 0
    receitas_demonstradas_livre = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=True,
        categoria_receita=APLICACAO_LIVRE).aggregate(valor=Sum('valor'))

    valor_livre_receitas_demonstradas = receitas_demonstradas_livre[
        'valor'] or 0

    if saldo_reprogramado_anterior_livre or valor_livre_receitas_demonstradas or valor_saldo_reprogramado_proximo_periodo_custeio < 0 or valor_saldo_reprogramado_proximo_periodo_capital < 0:
        row_livre[
            SALDO_ANTERIOR].value = f'L {formata_valor(saldo_reprogramado_anterior_livre)}'
        row_livre[
            CREDITO].value = f'L {formata_valor(valor_livre_receitas_demonstradas)}'
        cor_cinza = styles.colors.Color(rgb='808080')
        fill = styles.fills.PatternFill(patternType='solid', fgColor=cor_cinza)
        row_livre[DESPESA_REALIZADA].fill = fill
        row_livre[DESPESA_NAO_REALIZADA].fill = fill
        row_livre[DESPESA_NAO_DEMONSTRADA_OUTROS_PERIODOS].fill = fill
        valor_saldo_reprogramado_proximo_periodo_livre = saldo_reprogramado_anterior_livre + valor_livre_receitas_demonstradas
        valor_saldo_reprogramado_proximo_periodo_livre = valor_saldo_reprogramado_proximo_periodo_livre + \
            valor_saldo_reprogramado_proximo_periodo_capital if valor_saldo_reprogramado_proximo_periodo_capital < 0 else valor_saldo_reprogramado_proximo_periodo_livre
        valor_saldo_reprogramado_proximo_periodo_livre = valor_saldo_reprogramado_proximo_periodo_livre + \
            valor_saldo_reprogramado_proximo_periodo_custeio if valor_saldo_reprogramado_proximo_periodo_custeio < 0 else valor_saldo_reprogramado_proximo_periodo_livre
        row_livre[
            SALDO_REPROGRAMADO_PROXIMO].value = f'L {formata_valor(valor_saldo_reprogramado_proximo_periodo_livre)}'

        return valor_saldo_reprogramado_proximo_periodo_livre, linha

    return (0, linha)
Ejemplo n.º 7
0
    def conciliar(self, request, uuid):
        periodo_uuid = request.query_params.get('periodo')

        if periodo_uuid is None:
            erro = {
                'erro': 'parametros_requerido',
                'mensagem': 'É necessário enviar o uuid do período onde esta sendo feita a conciliação.'
            }
            return Response(erro, status=status.HTTP_400_BAD_REQUEST)

        try:
            periodo = Periodo.objects.get(uuid=periodo_uuid)
        except Periodo.DoesNotExist:
            erro = {
                'erro': 'Objeto não encontrado.',
                'mensagem': f"O objeto período para o uuid {periodo_uuid} não foi encontrado na base."
            }
            logger.info('Erro: %r', erro)
            return Response(erro, status=status.HTTP_400_BAD_REQUEST)


        receita_conciliada = Receita.conciliar(uuid=uuid, periodo_conciliacao=periodo)
        return Response(ReceitaListaSerializer(receita_conciliada, many=False).data,
                        status=status.HTTP_200_OK)
def gerar(periodo, acao_associacao, conta_associacao, previa=False):
    try:
        LOGGER.info("GERANDO DEMONSTRATIVO...")
        rateios_conferidos = RateioDespesa.rateios_da_acao_associacao_no_periodo(
            acao_associacao=acao_associacao,
            conta_associacao=conta_associacao,
            periodo=periodo,
            conferido=True)

        rateios_nao_conferidos = RateioDespesa.rateios_da_acao_associacao_no_periodo(
            acao_associacao=acao_associacao,
            conta_associacao=conta_associacao,
            periodo=periodo,
            conferido=False)

        rateios_nao_conferidos_em_periodos_anteriores = RateioDespesa.rateios_da_acao_associacao_em_periodo_anteriores(
            acao_associacao=acao_associacao,
            periodo=periodo,
            conta_associacao=conta_associacao,
            conferido=False)

        receitas_demonstradas = Receita.receitas_da_acao_associacao_no_periodo(
            acao_associacao=acao_associacao,
            conta_associacao=conta_associacao,
            periodo=periodo,
            conferido=True)

        fechamento_periodo = FechamentoPeriodo.objects.filter(
            acao_associacao=acao_associacao,
            conta_associacao=conta_associacao,
            periodo__uuid=periodo.uuid).first()

        path = os.path.join(os.path.basename(staticfiles_storage.location),
                            'cargas')
        nome_arquivo = os.path.join(path,
                                    'modelo_demonstrativo_financeiro.xlsx')
        workbook = load_workbook(nome_arquivo)
        worksheet = workbook.active

        cabecalho(worksheet, periodo, acao_associacao, conta_associacao,
                  previa)
        identificacao_apm(worksheet, acao_associacao)
        observacoes(worksheet, acao_associacao, periodo, conta_associacao)
        data_geracao_documento(worksheet, previa)
        sintese_receita_despesa(worksheet, acao_associacao, conta_associacao,
                                periodo, fechamento_periodo)
        creditos_demonstrados(worksheet, receitas_demonstradas)
        acc = len(receitas_demonstradas) - 1 if len(
            receitas_demonstradas) > 1 else 0
        pagamentos(worksheet, rateios_conferidos, acc=acc, start_line=28)
        acc += len(rateios_conferidos) - 1 if len(
            rateios_conferidos) > 1 else 0
        pagamentos(worksheet, rateios_nao_conferidos, acc=acc, start_line=34)
        acc += len(rateios_nao_conferidos) - 1 if len(
            rateios_nao_conferidos) > 1 else 0
        pagamentos(worksheet,
                   rateios_nao_conferidos_em_periodos_anteriores,
                   acc=acc,
                   start_line=40)
    except Exception as e:
        LOGGER.info("ERRO no Demonstrativo: %s", str(e))

    LOGGER.info("DEMONSTRATIVO GERADO")
    return workbook
def sintese_capital(row_capital, linha, acao_associacao, conta_associacao,
                    periodo, fechamento_periodo):
    """
    retorna uma tupla de saldos relacionados aos capitais
    """
    saldo_reprogramado_anterior_capital = fechamento_periodo.fechamento_anterior.saldo_reprogramado_capital if fechamento_periodo and fechamento_periodo.fechamento_anterior else 0
    receitas_demonstradas_capital = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=True,
        categoria_receita=APLICACAO_CAPITAL).aggregate(valor=Sum('valor'))

    rateios_demonstrados_capital = RateioDespesa.rateios_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=True,
        aplicacao_recurso=APLICACAO_CAPITAL).aggregate(
            valor=Sum('valor_rateio'))

    rateios_nao_conferidos_capital = RateioDespesa.rateios_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=False,
        aplicacao_recurso=APLICACAO_CAPITAL).aggregate(
            valor=Sum('valor_rateio'))

    rateios_nao_conferidos_outros_periodos = RateioDespesa.rateios_da_acao_associacao_em_periodo_anteriores(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=False,
        aplicacao_recurso=APLICACAO_CAPITAL).aggregate(
            valor=Sum('valor_rateio'))

    valor_capital_receitas_demonstradas = receitas_demonstradas_capital[
        'valor'] or 0
    valor_capital_rateios_demonstrados = rateios_demonstrados_capital[
        'valor'] or 0
    valor_capital_rateios_nao_demonstrados = rateios_nao_conferidos_capital[
        'valor'] or 0
    valor_capital_rateios_nao_demonstrados_outros_periodos = rateios_nao_conferidos_outros_periodos[
        'valor'] or 0

    if saldo_reprogramado_anterior_capital or valor_capital_receitas_demonstradas or valor_capital_rateios_demonstrados or valor_capital_rateios_nao_demonstrados or valor_capital_rateios_nao_demonstrados_outros_periodos:
        row_capital[
            SALDO_ANTERIOR].value = f'K {formata_valor(saldo_reprogramado_anterior_capital)}'
        row_capital[
            CREDITO].value = f'K {formata_valor(valor_capital_receitas_demonstradas)}'
        row_capital[
            DESPESA_REALIZADA].value = f'K {formata_valor(valor_capital_rateios_demonstrados)}'
        row_capital[
            DESPESA_NAO_REALIZADA].value = f'K {formata_valor(valor_capital_rateios_nao_demonstrados)}'
        valor_saldo_reprogramado_proximo_periodo_capital = saldo_reprogramado_anterior_capital + \
            valor_capital_receitas_demonstradas - \
            valor_capital_rateios_demonstrados - \
            valor_capital_rateios_nao_demonstrados
        row_capital[
            SALDO_REPROGRAMADO_PROXIMO].value = f'K {formata_valor(valor_saldo_reprogramado_proximo_periodo_capital if valor_saldo_reprogramado_proximo_periodo_capital > 0 else 0)}'
        row_capital[
            DESPESA_NAO_DEMONSTRADA_OUTROS_PERIODOS].value = f'K {formata_valor(valor_capital_rateios_nao_demonstrados_outros_periodos)}'
        valor_saldo_bancario_capital = valor_saldo_reprogramado_proximo_periodo_capital + valor_capital_rateios_nao_demonstrados + valor_capital_rateios_nao_demonstrados_outros_periodos
        valor_saldo_bancario_capital = valor_saldo_bancario_capital if valor_saldo_bancario_capital > 0 else 0
        row_capital[
            SALDO_BANCARIO].value = f'K {formata_valor(valor_saldo_bancario_capital)}'
        linha += 1

        return valor_saldo_reprogramado_proximo_periodo_capital, valor_saldo_bancario_capital, linha

    return (0, 0, linha)
Ejemplo n.º 10
0
def sintese_livre(linha_capital, linha_custeio, acao_associacao, conta_associacao, periodo, fechamento_periodo,
                  totalizador):
    valor_saldo_reprogramado_proximo_periodo_custeio = linha_custeio['valor_saldo_reprogramado_proximo_periodo_custeio']
    valor_saldo_reprogramado_proximo_periodo_capital = linha_capital['valor_saldo_reprogramado_proximo_periodo_capital']

    fechamento_anterior = get_fechamento_anterior(conta_associacao=conta_associacao, acao_associacao=acao_associacao,
                                                  periodo=periodo, fechamento_periodo=fechamento_periodo)
    saldo_reprogramado_anterior_livre = fechamento_anterior.saldo_reprogramado_livre if fechamento_anterior else 0

    receitas_demonstradas_livre = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao, conta_associacao=conta_associacao, periodo=periodo, conferido=True,
        categoria_receita=APLICACAO_LIVRE).aggregate(valor=Sum('valor'))

    valor_livre_receitas_demonstradas = receitas_demonstradas_livre['valor'] or 0

    saldo_anterior = ""
    credito = ""
    saldo_reprogramado_proximo = ""
    valor_saldo_reprogramado_proximo_periodo_livre = 0

    if (
        saldo_reprogramado_anterior_livre or
        valor_livre_receitas_demonstradas or
        valor_saldo_reprogramado_proximo_periodo_custeio < 0 or
        valor_saldo_reprogramado_proximo_periodo_capital < 0
    ):
        saldo_anterior = saldo_reprogramado_anterior_livre
        credito = valor_livre_receitas_demonstradas

        valor_saldo_reprogramado_proximo_periodo_livre = (saldo_reprogramado_anterior_livre +
                                                          valor_livre_receitas_demonstradas)

        valor_saldo_reprogramado_proximo_periodo_livre = (valor_saldo_reprogramado_proximo_periodo_livre +
                                                          valor_saldo_reprogramado_proximo_periodo_capital
                                                          if valor_saldo_reprogramado_proximo_periodo_capital < 0
                                                          else valor_saldo_reprogramado_proximo_periodo_livre)

        valor_saldo_reprogramado_proximo_periodo_livre = (valor_saldo_reprogramado_proximo_periodo_livre +
                                                          valor_saldo_reprogramado_proximo_periodo_custeio
                                                          if valor_saldo_reprogramado_proximo_periodo_custeio < 0
                                                          else valor_saldo_reprogramado_proximo_periodo_livre)

        saldo_reprogramado_proximo = valor_saldo_reprogramado_proximo_periodo_livre

    linha_livre = {
        "saldo_anterior": saldo_anterior,
        "credito": credito,
        "saldo_reprogramado_proximo": saldo_reprogramado_proximo,
        "saldo_reprogramado_proximo_vr": valor_saldo_reprogramado_proximo_periodo_livre,
        "valor_saldo_reprogramado_proximo_periodo_livre": valor_saldo_reprogramado_proximo_periodo_livre,
        "credito_nao_demonstrado": 0,
    }

    totalizador['saldo_anterior']['L'] += saldo_reprogramado_anterior_livre
    totalizador['credito']['L'] += valor_livre_receitas_demonstradas
    totalizador['despesa_realizada']['L'] += 0
    totalizador['despesa_nao_realizada']['L'] += 0
    totalizador['despesa_nao_demostrada_outros_periodos']['L'] += 0
    totalizador['saldo_reprogramado_proximo']['L'] += valor_saldo_reprogramado_proximo_periodo_livre
    totalizador['valor_saldo_reprogramado_proximo_periodo']['L'] += valor_saldo_reprogramado_proximo_periodo_livre
    totalizador['valor_saldo_bancario']['L'] += 0
    totalizador['credito_nao_demonstrado']['L'] += 0

    return linha_livre, totalizador
Ejemplo n.º 11
0
def sintese_capital(acao_associacao, conta_associacao, periodo, fechamento_periodo, totalizador):
    fechamento_anterior = get_fechamento_anterior(conta_associacao=conta_associacao, acao_associacao=acao_associacao,
                                                  periodo=periodo, fechamento_periodo=fechamento_periodo)
    saldo_reprogramado_anterior_capital = fechamento_anterior.saldo_reprogramado_capital if fechamento_anterior else 0

    receitas_demonstradas_capital = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao, conta_associacao=conta_associacao, periodo=periodo, conferido=True,
        categoria_receita=APLICACAO_CAPITAL).aggregate(valor=Sum('valor'))

    receitas_nao_demonstradas_capital = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao, conta_associacao=conta_associacao, periodo=periodo, conferido=False,
        categoria_receita=APLICACAO_CAPITAL).aggregate(valor=Sum('valor'))

    rateios_demonstrados_capital = RateioDespesa.rateios_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao, conta_associacao=conta_associacao, periodo=periodo, conferido=True,
        aplicacao_recurso=APLICACAO_CAPITAL).aggregate(valor=Sum('valor_rateio'))

    rateios_nao_conferidos_capital = RateioDespesa.rateios_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao, conta_associacao=conta_associacao, periodo=periodo, conferido=False,
        aplicacao_recurso=APLICACAO_CAPITAL).aggregate(valor=Sum('valor_rateio'))

    rateios_nao_conferidos_outros_periodos = RateioDespesa.rateios_da_acao_associacao_em_periodo_anteriores(
        acao_associacao=acao_associacao, conta_associacao=conta_associacao, periodo=periodo, conferido=False,
        aplicacao_recurso=APLICACAO_CAPITAL).aggregate(valor=Sum('valor_rateio'))

    valor_capital_receitas_demonstradas = receitas_demonstradas_capital['valor'] or 0
    valor_capital_receitas_nao_demonstradas = receitas_nao_demonstradas_capital['valor'] or 0
    valor_capital_rateios_demonstrados = rateios_demonstrados_capital['valor'] or 0
    valor_capital_rateios_nao_demonstrados = rateios_nao_conferidos_capital['valor'] or 0
    valor_capital_rateios_nao_demonstrados_outros_periodos = rateios_nao_conferidos_outros_periodos['valor'] or 0

    saldo_anterior = ""
    credito = ""
    despesa_realizada = ""
    despesa_nao_realizada = ""
    despesa_nao_demostrada_outros_periodos = ""
    saldo_reprogramado_proximo = ""
    saldo_bancario = ""
    valor_saldo_reprogramado_proximo_periodo_capital = 0
    valor_saldo_bancario_capital = 0

    if saldo_reprogramado_anterior_capital or valor_capital_receitas_demonstradas or valor_capital_rateios_demonstrados or valor_capital_rateios_nao_demonstrados or valor_capital_rateios_nao_demonstrados_outros_periodos:
        saldo_anterior = saldo_reprogramado_anterior_capital
        credito = valor_capital_receitas_demonstradas
        despesa_realizada = valor_capital_rateios_demonstrados
        despesa_nao_realizada = valor_capital_rateios_nao_demonstrados
        valor_saldo_reprogramado_proximo_periodo_capital = (saldo_reprogramado_anterior_capital +
                                                            valor_capital_receitas_demonstradas -
                                                            valor_capital_rateios_demonstrados -
                                                            valor_capital_rateios_nao_demonstrados)

        saldo_reprogramado_proximo = (valor_saldo_reprogramado_proximo_periodo_capital
                                      if valor_saldo_reprogramado_proximo_periodo_capital > 0 else 0)

        despesa_nao_demostrada_outros_periodos = valor_capital_rateios_nao_demonstrados_outros_periodos
        valor_saldo_bancario_capital = (valor_saldo_reprogramado_proximo_periodo_capital +
                                        valor_capital_rateios_nao_demonstrados +
                                        valor_capital_rateios_nao_demonstrados_outros_periodos)

        valor_saldo_bancario_capital = valor_saldo_bancario_capital if valor_saldo_bancario_capital > 0 else 0

        saldo_bancario = valor_saldo_bancario_capital

    linha_capital = {
        "saldo_anterior": saldo_anterior,
        "credito": credito,
        "despesa_realizada": despesa_realizada,
        "despesa_nao_realizada": despesa_nao_realizada,
        "despesa_nao_demostrada_outros_periodos": despesa_nao_demostrada_outros_periodos,
        "saldo_reprogramado_proximo": saldo_reprogramado_proximo,
        "saldo_reprogramado_proximo_vr": valor_saldo_reprogramado_proximo_periodo_capital,
        "saldo_bancario": saldo_bancario,
        "valor_saldo_reprogramado_proximo_periodo_capital": valor_saldo_reprogramado_proximo_periodo_capital,
        "valor_saldo_bancario_capital": valor_saldo_bancario_capital,
        "credito_nao_demonstrado": valor_capital_receitas_nao_demonstradas,
    }

    totalizador['saldo_anterior']['K'] += saldo_reprogramado_anterior_capital
    totalizador['credito']['K'] += valor_capital_receitas_demonstradas
    totalizador['despesa_realizada']['K'] += valor_capital_rateios_demonstrados
    totalizador['despesa_nao_realizada']['K'] += valor_capital_rateios_nao_demonstrados
    totalizador['despesa_nao_demostrada_outros_periodos']['K'] += valor_capital_rateios_nao_demonstrados_outros_periodos
    totalizador['saldo_reprogramado_proximo']['K'] += (valor_saldo_reprogramado_proximo_periodo_capital
                                                       if valor_saldo_reprogramado_proximo_periodo_capital > 0 else 0)
    totalizador['valor_saldo_reprogramado_proximo_periodo']['K'] += valor_saldo_reprogramado_proximo_periodo_capital
    totalizador['valor_saldo_bancario']['K'] += valor_saldo_bancario_capital
    totalizador['credito_nao_demonstrado']['K'] += valor_capital_receitas_nao_demonstradas

    return linha_capital, totalizador
Ejemplo n.º 12
0
 def desconciliar(self, request, uuid):
     receita_desconciliada = Receita.desconciliar(uuid=uuid)
     return Response(ReceitaListaSerializer(receita_desconciliada, many=False).data,
                     status=status.HTTP_200_OK)
def sintese_livre(row_livre, linha,
                  valor_saldo_reprogramado_proximo_periodo_custeio,
                  valor_saldo_reprogramado_proximo_periodo_capital,
                  acao_associacao, conta_associacao, periodo,
                  fechamento_periodo, totalizador):
    fechamento_anterior = get_fechamento_anterior(
        conta_associacao=conta_associacao,
        acao_associacao=acao_associacao,
        periodo=periodo,
        fechamento_periodo=fechamento_periodo)
    saldo_reprogramado_anterior_livre = fechamento_anterior.saldo_reprogramado_livre if fechamento_anterior else 0

    receitas_demonstradas_livre = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=True,
        categoria_receita=APLICACAO_LIVRE).aggregate(valor=Sum('valor'))

    valor_livre_receitas_demonstradas = receitas_demonstradas_livre[
        'valor'] or 0

    if (saldo_reprogramado_anterior_livre or valor_livre_receitas_demonstradas
            or valor_saldo_reprogramado_proximo_periodo_custeio < 0
            or valor_saldo_reprogramado_proximo_periodo_capital < 0):

        valor_saldo_reprogramado_proximo_periodo_livre = (
            saldo_reprogramado_anterior_livre +
            valor_livre_receitas_demonstradas)

        valor_saldo_reprogramado_proximo_periodo_livre = (
            valor_saldo_reprogramado_proximo_periodo_livre +
            valor_saldo_reprogramado_proximo_periodo_capital
            if valor_saldo_reprogramado_proximo_periodo_capital < 0 else
            valor_saldo_reprogramado_proximo_periodo_livre)

        valor_saldo_reprogramado_proximo_periodo_livre = (
            valor_saldo_reprogramado_proximo_periodo_livre +
            valor_saldo_reprogramado_proximo_periodo_custeio
            if valor_saldo_reprogramado_proximo_periodo_custeio < 0 else
            valor_saldo_reprogramado_proximo_periodo_livre)

        valor_saldo_bancario_livre = valor_saldo_reprogramado_proximo_periodo_livre
        valor_saldo_bancario_livre = valor_saldo_bancario_livre if valor_saldo_bancario_livre > 0 else 0

        cor_cinza = styles.colors.Color(rgb='808080')
        fill = styles.fills.PatternFill(patternType='solid', fgColor=cor_cinza)
        row_livre[DESPESA_REALIZADA].fill = fill
        row_livre[DESPESA_NAO_REALIZADA].fill = fill
        row_livre[DESPESA_NAO_DEMONSTRADA_OUTROS_PERIODOS].fill = fill

        row_livre[SALDO_ANTERIOR].value = formata_valor(
            saldo_reprogramado_anterior_livre)
        row_livre[CREDITO].value = formata_valor(
            valor_livre_receitas_demonstradas)
        row_livre[SALDO_REPROGRAMADO_PROXIMO].value = formata_valor(
            valor_saldo_reprogramado_proximo_periodo_livre)

        row_livre[SALDO_BANCARIO].value = formata_valor(
            valor_saldo_bancario_livre)

        linha += 1

        totalizador[SALDO_ANTERIOR]['CK'] += saldo_reprogramado_anterior_livre
        totalizador[CREDITO]['CK'] += valor_livre_receitas_demonstradas
        totalizador[SALDO_REPROGRAMADO_PROXIMO][
            'CK'] += valor_saldo_reprogramado_proximo_periodo_livre if valor_saldo_reprogramado_proximo_periodo_livre > 0 else 0
        totalizador[SALDO_BANCARIO]['CK'] += valor_saldo_bancario_livre

        return valor_saldo_reprogramado_proximo_periodo_livre, linha, totalizador

    else:
        cor_cinza = styles.colors.Color(rgb='808080')
        fill = styles.fills.PatternFill(patternType='solid', fgColor=cor_cinza)
        row_livre[DESPESA_REALIZADA].fill = fill
        row_livre[DESPESA_NAO_REALIZADA].fill = fill
        row_livre[DESPESA_NAO_DEMONSTRADA_OUTROS_PERIODOS].fill = fill

        row_livre[SALDO_ANTERIOR].value = formata_valor(0)
        row_livre[CREDITO].value = formata_valor(0)
        row_livre[SALDO_REPROGRAMADO_PROXIMO].value = formata_valor(0)

        row_livre[SALDO_BANCARIO].value = formata_valor(0)

    linha += 1

    return 0, linha, totalizador
def sintese_custeio(row_custeio, linha, acao_associacao, conta_associacao,
                    periodo, fechamento_periodo, totalizador):
    """
    retorna uma tupla de saldos relacionados aos custeios
    """

    fechamento_anterior = get_fechamento_anterior(
        conta_associacao=conta_associacao,
        acao_associacao=acao_associacao,
        periodo=periodo,
        fechamento_periodo=fechamento_periodo)
    saldo_reprogramado_anterior_custeio = fechamento_anterior.saldo_reprogramado_custeio if fechamento_anterior else 0

    # Custeio
    receitas_demonstradas_custeio = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=True,
        categoria_receita=APLICACAO_CUSTEIO).aggregate(valor=Sum('valor'))

    receitas_nao_demonstradas_custeio = Receita.receitas_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=False,
        categoria_receita=APLICACAO_CUSTEIO).aggregate(valor=Sum('valor'))

    rateios_demonstrados_custeio = RateioDespesa.rateios_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=True,
        aplicacao_recurso=APLICACAO_CUSTEIO).aggregate(
            valor=Sum('valor_rateio'))

    rateios_nao_conferidos_custeio = RateioDespesa.rateios_da_acao_associacao_no_periodo(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=False,
        aplicacao_recurso=APLICACAO_CUSTEIO).aggregate(
            valor=Sum('valor_rateio'))

    rateios_nao_conferidos_custeio_periodos_anteriores = RateioDespesa.rateios_da_acao_associacao_em_periodo_anteriores(
        acao_associacao=acao_associacao,
        conta_associacao=conta_associacao,
        periodo=periodo,
        conferido=False,
        aplicacao_recurso=APLICACAO_CUSTEIO).aggregate(
            valor=Sum('valor_rateio'))

    valor_custeio_receitas_demonstradas = receitas_demonstradas_custeio[
        'valor'] or 0
    valor_custeio_receitas_nao_demonstradas = receitas_nao_demonstradas_custeio[
        'valor'] or 0

    valor_custeio_rateios_demonstrados = rateios_demonstrados_custeio[
        'valor'] or 0
    valor_custeio_rateios_nao_demonstrados = rateios_nao_conferidos_custeio[
        'valor'] or 0
    valor_custeio_rateios_nao_demonstrados_periodos_anteriores = rateios_nao_conferidos_custeio_periodos_anteriores[
        'valor'] or 0

    if saldo_reprogramado_anterior_custeio or valor_custeio_receitas_demonstradas or valor_custeio_rateios_demonstrados or valor_custeio_rateios_nao_demonstrados or valor_custeio_rateios_nao_demonstrados_periodos_anteriores:

        valor_saldo_reprogramado_proximo_periodo_custeio = (
            saldo_reprogramado_anterior_custeio +
            valor_custeio_receitas_demonstradas -
            valor_custeio_rateios_demonstrados -
            valor_custeio_rateios_nao_demonstrados)

        valor_saldo_bancario_custeio = (
            valor_saldo_reprogramado_proximo_periodo_custeio +
            valor_custeio_rateios_nao_demonstrados +
            valor_custeio_rateios_nao_demonstrados_periodos_anteriores)

        valor_saldo_bancario_custeio = valor_saldo_bancario_custeio if valor_saldo_bancario_custeio > 0 else 0

        row_custeio[SALDO_ANTERIOR].value = formata_valor(
            saldo_reprogramado_anterior_custeio)
        row_custeio[CREDITO].value = formata_valor(
            valor_custeio_receitas_demonstradas)
        row_custeio[DESPESA_REALIZADA].value = formata_valor(
            valor_custeio_rateios_demonstrados)
        row_custeio[DESPESA_NAO_REALIZADA].value = formata_valor(
            valor_custeio_rateios_nao_demonstrados)
        row_custeio[CREDITO_NAO_DEMONSTRADO].value = formata_valor(
            valor_custeio_receitas_nao_demonstradas)

        row_custeio[SALDO_REPROGRAMADO_PROXIMO].value = formata_valor(
            valor_saldo_reprogramado_proximo_periodo_custeio
            if valor_saldo_reprogramado_proximo_periodo_custeio > 0 else 0)

        row_custeio[
            DESPESA_NAO_DEMONSTRADA_OUTROS_PERIODOS].value = formata_valor(
                valor_custeio_rateios_nao_demonstrados_periodos_anteriores)

        row_custeio[SALDO_BANCARIO].value = formata_valor(
            valor_saldo_bancario_custeio)

        linha += 1

        totalizador[SALDO_ANTERIOR]['C'] += saldo_reprogramado_anterior_custeio
        totalizador[CREDITO]['C'] += valor_custeio_receitas_demonstradas
        totalizador[DESPESA_REALIZADA][
            'C'] += valor_custeio_rateios_demonstrados
        totalizador[DESPESA_NAO_REALIZADA][
            'C'] += valor_custeio_rateios_nao_demonstrados
        totalizador[SALDO_REPROGRAMADO_PROXIMO][
            'C'] += valor_saldo_reprogramado_proximo_periodo_custeio if valor_saldo_reprogramado_proximo_periodo_custeio > 0 else 0
        totalizador[DESPESA_NAO_DEMONSTRADA_OUTROS_PERIODOS][
            'C'] += valor_custeio_rateios_nao_demonstrados_periodos_anteriores
        totalizador[SALDO_BANCARIO]['C'] += valor_saldo_bancario_custeio
        totalizador[CREDITO_NAO_DEMONSTRADO][
            'C'] += valor_custeio_receitas_nao_demonstradas

        return valor_saldo_reprogramado_proximo_periodo_custeio, valor_saldo_bancario_custeio, linha, totalizador

    else:
        row_custeio[SALDO_ANTERIOR].value = formata_valor(0)
        row_custeio[CREDITO].value = formata_valor(0)
        row_custeio[DESPESA_REALIZADA].value = formata_valor(0)
        row_custeio[DESPESA_NAO_REALIZADA].value = formata_valor(0)

        row_custeio[SALDO_REPROGRAMADO_PROXIMO].value = formata_valor(0)

        row_custeio[
            DESPESA_NAO_DEMONSTRADA_OUTROS_PERIODOS].value = formata_valor(0)

        row_custeio[SALDO_BANCARIO].value = formata_valor(0)

        row_custeio[CREDITO_NAO_DEMONSTRADO].value = formata_valor(
            valor_custeio_receitas_nao_demonstradas)
        totalizador[CREDITO_NAO_DEMONSTRADO][
            'C'] += valor_custeio_receitas_nao_demonstradas

    linha += 1

    return 0, 0, linha, totalizador