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))
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))
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))
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))
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)
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