def calcula(self): hoje = datetime.datetime.now().date() data_inicial = self.df['data'].min() + relativedelta(months=-1) data = data_inicial = datetime.date(data_inicial.year, data_inicial.month, 1) data_final = hoje + relativedelta(months=-1) data_final = datetime.date( data_final.year, data_final.month, calendar.monthrange(data_final.year, data_final.month)[1]) self.mes_do_relatorio = self.__get_date_key__(data_final) while data <= data_final: self.datas.append(data) data = data + relativedelta(months=1) self.prejuizo_acumulado = {} for tipo in TipoTicker: self.__seta_prejuizo_acumulado(data_inicial, tipo, 0.0) for index, data in enumerate(self.datas): self.__seta_vendas_no_mes( data, vendas_no_mes(self.df, data.year, data.month)) for tipo in TipoTicker: prejuizo_acumulado = self.calcula_prejuizo_acumulado( data, tipo) self.__seta_prejuizo_acumulado(data, tipo, prejuizo_acumulado)
def test_descobre_vendas_no_mes_quando_mais_de_um_ciclo_no_mesmo_mes(self): ticker = random_ticker() data = [{'ticker': ticker, 'qtd': 100, 'data': date(2019, 3, 11), 'preco': 100}, {'ticker': ticker, 'qtd': 100, 'data': date(2019, 3, 12), 'preco': 100}, {'ticker': ticker, 'qtd': -200, 'data': date(2019, 3, 13), 'preco': 200}, {'ticker': ticker, 'qtd': 500, 'data': date(2019, 3, 14), 'preco': 300}, {'ticker': ticker, 'qtd': -500, 'data': date(2019, 3, 15), 'preco': 400}] df = create_testing_dataframe(data) vendas_no_mes_abril = vendas_no_mes(df, 2019, 3) assert type(vendas_no_mes_abril) is list assert len(vendas_no_mes_abril) == 2
def test_descobre_vendas_no_mes_quando_mais_de_uma_compra_venda_e_dentro_do_mesmo_ciclo_mas_com_mesmo_preco_de_compra(self): ticker = random_ticker() data = [{'ticker': ticker, 'qtd': 100, 'data': date(2019, 3, 11), 'preco': 100}, {'ticker': ticker, 'qtd': 100, 'data': date(2019, 3, 12), 'preco': 100}, {'ticker': ticker, 'qtd': -50, 'data': date(2019, 3, 13), 'preco': 200}, {'ticker': ticker, 'qtd': 500, 'data': date(2019, 3, 14), 'preco': 100}, {'ticker': ticker, 'qtd': -400, 'data': date(2019, 3, 15), 'preco': 400}] df = create_testing_dataframe(data) vendas_no_mes_abril = vendas_no_mes(df, 2019, 3) assert type(vendas_no_mes_abril) is list assert len(vendas_no_mes_abril) == 1 assert vendas_no_mes_abril[0]['preco_medio_compra'] == pytest.approx(100.0, 0.001) assert vendas_no_mes_abril[0]['qtd_vendida'] == 450
def test_descobre_vendas_no_mes(self): data = [{'ticker': 'gcgs', 'qtd': 100, 'data': datetime.date(2019, 3, 11), 'preco': 100}, {'ticker': 'gcgs', 'qtd': 100, 'data': datetime.date(2019, 4, 11), 'preco': 100}, {'ticker': 'gcgs', 'qtd': -100, 'data': datetime.date(2019, 4, 12), 'preco': 200}, {'ticker': 'gcgs', 'qtd': 100, 'data': datetime.date(2019, 4, 13), 'preco': 300}, {'ticker': 'gcgs', 'qtd': 100, 'data': datetime.date(2019, 4, 14), 'preco': 400}, {'ticker': 'gcgs', 'qtd': -200, 'data': datetime.date(2019, 4, 15), 'preco': 500}, {'ticker': 'gcgs2', 'qtd': -200, 'data': datetime.date(2019, 4, 15), 'preco': 500}, {'ticker': 'gcgs', 'qtd': 2, 'data': datetime.date(2019, 4, 15), 'preco': 5}, {'ticker': 'gcgs', 'qtd': -1, 'data': datetime.date(2019, 4, 15), 'preco': 1}, {'ticker': 'gcgs', 'qtd': 3, 'data': datetime.date(2019, 4, 15), 'preco': 2}, {'ticker': 'gcgs', 'qtd': 1, 'data': datetime.date(2019, 4, 16), 'preco': 2}] df = create_testing_dataframe(data) vendas_no_mes_abril = vendas_no_mes(df, 2019, 4) assert type(vendas_no_mes_abril) is list assert len(vendas_no_mes_abril) == 2
def test_descobre_vendas_no_mes_deve_considerar_varios_ciclos_dentro_de_um_mesmo_mes(self): ticker = random_ticker() data = [{'ticker': ticker, 'qtd': 100, 'data': date(2019, 3, 11), 'preco': 150}, {'ticker': ticker, 'qtd': 100, 'data': date(2019, 4, 11), 'preco': 100}, {'ticker': ticker, 'qtd': -200, 'data': date(2019, 4, 12), 'preco': 200}, {'ticker': ticker, 'qtd': 200, 'data': date(2019, 4, 13), 'preco': 300}, {'ticker': ticker, 'qtd': 200, 'data': date(2019, 4, 14), 'preco': 400}, {'ticker': ticker, 'qtd': -300, 'data': date(2019, 4, 15), 'preco': 500}] df = create_testing_dataframe(data) vendas_no_mes_abril = vendas_no_mes(df, 2019, 4) assert type(vendas_no_mes_abril) is list assert len(vendas_no_mes_abril) == 2 assert vendas_no_mes_abril[0] == {'ticker': ticker, 'qtd_vendida': 200, 'preco_medio_venda': 200.0, 'preco_medio_compra': 125.0, 'resultado_apurado': 15000.0} assert vendas_no_mes_abril[1] == {'ticker': ticker, 'qtd_vendida': 300, 'preco_medio_venda': 500.0, 'preco_medio_compra': 350.0, 'resultado_apurado': 45000.0}
def calcula_vendas_totais_no_mes(self, data): return vendas_no_mes(self.df, data.year, data.month)
def calcula_dedo_duro_no_mes(self, data): porcentagem_dedo_duro = 0.005 / 100.0 return sum(operacao_de_venda['preco_medio_venda'] * operacao_de_venda['qtd_vendida'] for operacao_de_venda in vendas_no_mes( self.df, data.year, data.month)) * porcentagem_dedo_duro