Beispiel #1
0
    def create_companies_list(self):
        """
        Create a list with all Companies (Name, CNPJ), removing duplicated.
        Save this list inside a RedisDB (db=1) to be used as a cache system
        by the API.
        """
        self.__connect_mongo(CONTRACTS_DB_NAME)

        logging.debug("Creating Companies list based on Contracts data...")
        ci = contracts_inspector.ContractsInspector()
        all_contracts = ci.get_all_contracts()
        self.__connect_redis(db=1)

        companies_dict = {}
        companies_list = []

        for item in all_contracts:
            companies_dict[item["Nome Contratado"]] = {
                "Nome": item["Nome Contratado"],
                "CNPJ": item["Código Contratado"]
            }

        for k in companies_dict.keys():
            companies_list.append(companies_dict[k])

        key_name = "all_companies_list"

        return self.redis_connector.set(key_name, json.dumps(companies_list))
Beispiel #2
0
    def create_biggest_contracts_receivers_rank(self,
                                                rank_size=50,
                                                date_year=2020):
        """
        Create a Rank for Companies that earned most from Federal Government with Contracts.
        Collect all Contracts data from MongoDB. Process all data, sum values and create the Rank.
        The Rank created is saved on a RedisDB instance.
        Contracts are filtered by publication date.
        Args:
            rank_size: number os entities to put in the rank.
            date_filter: list of two dates to use as filter in DB query.
        """
        logging.debug("Creating Companies earnings rank...")
        self.__connect_redis(db=1)
        ci = contracts_inspector.ContractsInspector()

        all_contracts = ci.get_contracts_by_year("Data Publicação DOU",
                                                 date_year)

        contracts_summary_dict = {}
        contracts_summary_list = []

        # TODO: this could be in separated method.
        for single_contract in all_contracts:
            previous_total_value = 0
            contracts_count = 0
            if single_contract[
                    "Código Contratado"] in contracts_summary_dict.keys():
                previous_total_value = contracts_summary_dict[
                    single_contract["Código Contratado"]]["Total recebido"]
                contracts_count = contracts_summary_dict[single_contract[
                    "Código Contratado"]]["Quantidade de contratos"]

            single_contract_value = float(
                single_contract["Valor Final Compra"].replace(",", "."))

            contracts_summary_dict[single_contract["Código Contratado"]] = {
                "CNPJ": single_contract["Código Contratado"],
                "Nome": single_contract["Nome Contratado"],
                "Total recebido": previous_total_value + single_contract_value,
                "Quantidade de contratos": contracts_count + 1
            }

        # TODO: need a better logic for this. Just passing the dict to list to use the already implemented methods.
        for k in contracts_summary_dict.keys():
            contracts_summary_list.append(contracts_summary_dict[k])

        sorted_rank = self.__sort_rank(contracts_summary_list,
                                       "Total recebido")
        sized_rank = sorted_rank[:rank_size]

        redis_key_name = "biggest_receivers_" + str(date_year)
        return self.redis_connector.set(redis_key_name, json.dumps(sized_rank))
Beispiel #3
0
def get_companies_list():
    ci = contracts_inspector.ContractsInspector()
    response = {"data": ci.get_companies_list_from_redis()}
    return response
Beispiel #4
0
def get_contracts_rank(year):
    ci = contracts_inspector.ContractsInspector()
    response = {"data": ci.get_companies_rank(year)}
    return response
Beispiel #5
0
def get_contracts_by_company_name(name):
    ci = contracts_inspector.ContractsInspector()
    response = {"data": ci.get_contracts_by_company_name(name)}
    return response
Beispiel #6
0
def get_contracts_by_cnpj(cnpj):
    ci = contracts_inspector.ContractsInspector()
    response = {"data": ci.get_contracts_by_cnpj(cnpj)}
    return response
Beispiel #7
0
def get_contracts_by_entity(entity_id, date):
    ci = contracts_inspector.ContractsInspector()
    response = {"data": ci.get_contracts_by_entity(entity_id, date)}
    return response