Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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}
Exemplo n.º 6
0
 def calcula_vendas_totais_no_mes(self, data):
     return vendas_no_mes(self.df, data.year, data.month)
Exemplo n.º 7
0
 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