Skip to content
Snippets Groups Projects
Select Git revision
  • f6db824d75d747b6a1f94c4aacec5bae5ac4d5e5
  • main default
2 results

load_data.py

Blame
  • database.py 2.72 KiB
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    """
    Created on: 16/01/2023
    @author: Andoni Aranguren Ubierna
    """
    from src import utils, constants
    
    
    def __database_save_plan_detail__(cnx, otp_parameters, DDBB_params, intermediate_nodes):
        if intermediate_nodes:
            response, errors = utils.get_best_order_plan_detail(otp_parameters, intermediate_nodes)
            if errors:
                return errors
    
            DDBB_params["action_id_array"] = response["requestParameters"]["bestOrder"]
            if response is not None:
                query_params = [DDBB_params[x] for x in constants.DEFAULT_INSERT_plan_detail_ORDER]
                s_parameters_str = ', '.join(['%s'] * len(query_params))
                _ = utils.execute_query(cnx, f"CALL insert_plan_detail({s_parameters_str});", query_params, no_return=True)
    
    
    def database_save_plan(cnx, request):
        """
        It stores the plan_details that have been selected.
        :return: json with the plan_detail
        """
        plan = request.json
        date = plan["date"]
        if date is None:
            return constants.ERROR_plan_DATE_MISSING
    
        # Comprobar que todos los IDs existen en la bbdd
        action_id = []
        for plan_details in [x for x in plan["plan_details"].values() if x]:
            action_id += plan_details["requestParameters"]["bestOrder"].split(",")
    
        action_id = list({int(d): d for d in action_id if d}.values())  # Remove duplicates
    
        if not utils.check_valid_action_ids(cnx, action_id):
            return constants.ERROR_INVALID_action_ID
    
        plan_id, error = utils.generate_plan(cnx, date)
        if error:
            return constants.ERROR_plan_DATE_MISSING
        # Lanzar contra OTP para volver a conseguir el mejor orden
        for time_slot in plan["plan_details"].keys():
            plan_detail = plan["plan_details"][time_slot]
            if plan_detail:
                plan_detail["requestParameters"]["intermediateNodes"] = None
                intermediate_nodes = None
                if "bestOrder" in plan_detail["requestParameters"]:
                    intermediate_nodes_ids_str = plan_detail["requestParameters"]["bestOrder"]
                    # Lanzar contra OTP para volver a conseguir el mejor orden
                    intermediate_nodes, intermediate_nodes_otp = utils.get_intermediate_nodes(cnx,
                                                                                              intermediate_nodes_ids_str)
                    plan_detail["requestParameters"]["intermediateNodes"] = intermediate_nodes_otp
                plan_detail["DDBBParameters"]["plan_id"] = plan_id
                __database_save_plan_detail__(cnx,
                                        plan_detail["requestParameters"],
                                        plan_detail["DDBBParameters"],
                                        intermediate_nodes)
        return constants.ALL_RIGHT