def test_envia_relatorio_html_por_email(self):
        data = [{
            'ticker': 'MAXR11',
            'qtd': 100,
            'data': datetime.date(2019, 3, 11),
            'preco': 100,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'PETR4',
            'qtd': 100,
            'data': datetime.date(2019, 4, 11),
            'preco': 100,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'XPLG11',
            'qtd': 100,
            'data': datetime.date(2019, 4, 12),
            'preco': 200,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'XPLG11',
            'qtd': -50,
            'data': datetime.date(2019, 5, 12),
            'preco': 220,
            'aquisicao_via': 'HomeBroker'
        }]

        df = create_testing_dataframe(data)

        calcula_custodia(df)
        calculo_ir = CalculoIr(df=df)
        calculo_ir.calcula()

        assert envia_relatorio_html_por_email('assunto - teste unitário',
                                              relatorio_html(calculo_ir))
示例#2
0
    def test_relatorio_html(self):
        from src.dropbox_files import download_dropbox_file
        download_dropbox_file()

        df = get_operations_dataframe()
        df = df.tail(150)

        calcula_custodia(df)
        calculo_ir = CalculoIr(df=df)
        calculo_ir.calcula()

        from py_w3c.validators.html.validator import HTMLValidator

        assert HTMLValidator().validate_fragment(relatorio_html(calculo_ir))
示例#3
0
def do_calculo_ir():
    from src.dropbox_files import download_dropbox_file
    download_dropbox_file()
    df = get_operations()

    from src.stuff import calcula_custodia

    calcula_custodia(df)
    calculo_ir = CalculoIr(df=df)
    calculo_ir.calcula()

    print(relatorio_txt(calculo_ir))

    envia_relatorio_html_por_email(assunto(calculo_ir),
                                   relatorio_html(calculo_ir))
示例#4
0
    def test_relatorio_html(self):
        data = [{
            'ticker': 'MAXR11',
            'qtd': 100,
            'data': datetime.date(2019, 3, 11),
            'preco': 100,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'PETR4',
            'qtd': 100,
            'data': datetime.date(2019, 4, 11),
            'preco': 100,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'XPLG11',
            'qtd': 100,
            'data': datetime.date(2019, 4, 12),
            'preco': 200,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'XPLG11',
            'qtd': -50,
            'data': datetime.date(2019, 5, 12),
            'preco': 220,
            'aquisicao_via': 'HomeBroker'
        }]

        df = create_testing_dataframe(data)

        custodia = calcula_custodia(df)
        calculo_ir = CalculoIr(df=df)
        calculo_ir.calcula()

        from py_w3c.validators.html.validator import HTMLValidator

        assert HTMLValidator().validate_fragment(
            relatorio_html(custodia, calculo_ir, datetime.date.today(), False))
示例#5
0
def do_calculo_ir():
    from src.dropbox_files import download_dropbox_file
    download_dropbox_file(OPERATIONS_FILEPATH)
    df = get_operations(filepath=OPERATIONS_FILEPATH)

    first_year = df['data'].min().year
    last_year = df['data'].max().year
    # Permite separar as outras operações de forma organizada
    for f in [
            'outras_operacoes.txt', 'custos.txt', 'ofertas_publicas.txt',
            'subscricoes.txt'
    ]:
        for year in range(first_year, last_year + 1):
            outros = get_operations(WORK_DIR + str(year) + '/' + f,
                                    operations=df)
            df = merge_outros(df, outros)
        outros = get_operations(WORK_DIR + f, operations=df)
        df = merge_outros(df, outros)

    df.reset_index(drop=True, inplace=True)
    df = ajusta_datas(df, 'data')
    df.drop(df[df['data'] > data_referencia].index, inplace=True)

    df = verifica_conversoes(df, first_year, last_year)

    if len(df) == 0:
        raise Exception("Não existem dados para processar até a data : " +
                        str(data_referencia))

    df_to_csv(df, WORK_DIR + nome_com_referencia('combinado.txt'))

    do_diario(df.copy(), first_year, last_year)

    from src.stuff import calcula_custodia

    # Custódia e IR são gerados somente uma vez e passados para os relatórios
    custodia = calcula_custodia(df)
    calculo_ir = CalculoIr(df=df)
    calculo_ir.calcula()

    declaracao_anual = data_referencia.strftime('%m%d') == '1231'
    adicionais = {}
    if declaracao_anual:
        # final do ano gerar relatorio para facilitar IRPF Anual
        print("*** GERANDO RELATORIO PARA IRPF")
        try:
            carteira_cei = pd.read_csv(WORK_DIR +
                                       nome_com_referencia('carteira_cei.txt'),
                                       sep='\t',
                                       header=0)
            carteira_cei = carteira_cei.groupby('ticker',
                                                as_index=False,
                                                sort=True).agg({'qtd': 'sum'})
            for a, ra in custodia.iterrows():
                carteira_cei['qtd'] = carteira_cei.apply(
                    lambda row: row.qtd - ra.qtd
                    if row.ticker == ra.ticker else row.qtd,
                    axis=1)
                # Verificando se tem itens na custodia que não estão na carteira cei
                filtro = carteira_cei[carteira_cei['ticker'] == ra.ticker]
                if len(filtro) == 0:
                    print("*** " + ra.ticker + " não está na carteira CEI")
                    carteira_cei = carteira_cei.append(
                        {
                            'ticker': ra.ticker,
                            'qtd': ra.qtd * -1
                        },
                        ignore_index=True)

            carteira_cei = carteira_cei[carteira_cei['qtd'] != 0]
            if len(carteira_cei) > 0:
                print("*** ERRO NA COMPARACAO COM CARTEIRA CEI : ")
                print(carteira_cei)
                adicionais['diferenca_carteira_cei'] = carteira_cei

        except FileNotFoundError:
            pass
        except Exception as e:
            print("Erro lendo carteira_cei.txt ")
            print(e)

    salva_planilha_irpf(WORK_DIR + nome_com_referencia('custodia.xlsx'),
                        custodia, adicionais)

    txt = relatorio_txt(custodia.copy(), calculo_ir, data_referencia,
                        declaracao_anual)
    save_to_daily_file("txt", txt)
    print(txt)

    html = relatorio_html(custodia.copy(), calculo_ir, data_referencia,
                          declaracao_anual)
    save_to_daily_file("html", html)
    envia_relatorio_html_por_email(assunto(calculo_ir), html)
示例#6
0
    def test_deve_retornar_relatorio_html_com_todos_os_meses(self):
        data = [{
            'ticker': 'MAXR11',
            'qtd': 100,
            'data': datetime.date(2019, 3, 11),
            'preco': 100,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'PETR4',
            'qtd': 100,
            'data': datetime.date(2019, 4, 11),
            'preco': 100,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'XPLG11',
            'qtd': 100,
            'data': datetime.date(2019, 4, 12),
            'preco': 200,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'XPLG11',
            'qtd': -50,
            'data': datetime.date(2019, 5, 12),
            'preco': 220,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'MAXR11',
            'qtd': 100,
            'data': datetime.date(2019, 6, 11),
            'preco': 100,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'PETR4',
            'qtd': 100,
            'data': datetime.date(2019, 10, 11),
            'preco': 100,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'XPLG11',
            'qtd': 100,
            'data': datetime.date(2019, 10, 12),
            'preco': 200,
            'aquisicao_via': 'HomeBroker'
        }, {
            'ticker': 'XPLG11',
            'qtd': -50,
            'data': datetime.date(2019, 11, 12),
            'preco': 220,
            'aquisicao_via': 'HomeBroker'
        }]

        df = create_testing_dataframe(data)

        calcula_custodia(df)
        calculo_ir = CalculoIr(df=df)
        calculo_ir.calcula()

        from py_w3c.validators.html.validator import HTMLValidator

        html = relatorio_html(calculo_ir)
        assert HTMLValidator().validate_fragment(html)
        assert 'MES : 05/2019' in html
        assert 'MES : 11/2019' in html