def obtener_rbs_general(self, gerente_id): """Construye la rbs general del gerente. Devuelve en un diccionario la informacion de las categorias junto con las subcategorias asociadas. Se encarga de consultar la rbs del gerente y a partir de su id consultar todas las categorias y subcategorias asociados. Parámetros: gerente_id -- corresponde al id del gerente en la base de datos Excepciones: ValueError -- Si gerente no existe """ gerente_dao = GerenteDao() gerente = gerente_dao.get_by_id(gerente_id) categoria_dao = CategoriaDao() categorias = categoria_dao.get_categorias_by_gerente(gerente) rbs = [] sub_categoria_dao = SubcategoriaDao() for categoria in categorias: subcategorias = sub_categoria_dao.get_sub_categorias_by_categoria( categoria) rbs.append({ "categoria": model_to_dict(categoria), "subcategorias": list(subcategorias.values()) }) return rbs
def listar_subcategorias(self, id): """ Lista las subcategorias de un gerente :param id: :return: """ subcategoria_dao = SubcategoriaDao() return subcategoria_dao.listar_subcategorias(id)
def obtener_subcategoria(self, id): """ Retorna una subcategoria a partir de un id :param id: :return: """ subcategoria_dao = SubcategoriaDao() return subcategoria_dao.obtener_subcategoria(id)
def obtener_rbs_completa_by_proyecto(self, gerente_id, proyecto_id): """Construye la rbs con los riesgos por subcategoria del gerente. Devuelve en un diccionario la informacion de las categorias junto con las subcategorias asociadas y sus riesgos. Se encarga de consultar la rbs del gerente y a partir de su id consultar todas las categorias y subcategorias asociados. Parámetros: gerente_id -- corresponde al id del gerente en la base de datos Excepciones: ValueError -- Si gerente no existe """ gerente_dao = GerenteDao() gerente = gerente_dao.get_by_id(gerente_id) categoria_dao = CategoriaDao() categorias = categoria_dao.get_categorias_by_gerente(gerente) proyecto_dao = ProyectoDao() proyecto = proyecto_dao.obtener_proyecto(proyecto_id) rbs = [] sub_categoria_dao = SubcategoriaDao() riesgo_dao = RiesgoDao() for categoria in categorias: subcategorias = sub_categoria_dao.get_sub_categorias_by_categoria( categoria) aux = [] for subcategoria in subcategorias: riesgos = riesgo_dao.get_riesgo_by_subcategoria(subcategoria) if riesgos == None: aux.append({ "subcategoria": model_to_dict(subcategoria), "riesgos": [] }) else: riesgos = list(riesgos.values()) if (len(riesgos) > 0): for riesgo in riesgos: e = riesgo_dao.riesgo_is_proyecto( Riesgo(riesgo_id=riesgo["riesgo_id"]), proyecto) if (e != None): riesgo['is_assigned'] = True riesgo[ 'fecha_manifestacion'] = e.fecha_manifestacion.strftime( "%Y-%m-%d") else: riesgo['is_assigned'] = False aux.append({ "subcategoria": model_to_dict(subcategoria), "riesgos": riesgos }) rbs.append({ "categoria": model_to_dict(categoria), "subcategorias": aux }) return rbs
def registrar_riesgo_proyecto(self, nombre, causa, evento, efecto, tipo, subcategoria_id, proyecto_id): riesgo_dao = RiesgoDao() subcategoria_dao = SubcategoriaDao() proyecto_dao = ProyectoDao() return riesgo_dao.registrar_riesgo_proyecto( nombre, causa, evento, efecto, tipo, subcategoria_dao.obtener_subcategoria(subcategoria_id), proyecto_dao.obtener_proyecto(proyecto_id), )
def obtener_rbs_sugerida(self, sector_id): """Construye una rbs de acuerdo al sector. Devuelve en un diccionario la informacion de las categorias junto con las subcategorias asociadas. Se encarga de consultar la rbs del gerente y a partir de su id consultar todas las categorias y subcategorias asociados. Parámetros: gerente_id -- corresponde al id del gerente en la base de datos Excepciones: ValueError -- Si gerente no existe """ categoria_dao = CategoriaDao() sector_dao = SectorDao() sector = sector_dao.obtener_sector(sector_id) categorias = categoria_dao.get_categorias_by_sector(sector) rbs = [] indice = {} cont = 0 sub_categoria_dao = SubcategoriaDao() for categoria_aux in categorias: categoria_nombre = indice.get(categoria_aux.categoria_nombre) subcategorias = sub_categoria_dao.get_sub_categorias_by_categoria_and_sector( categoria_aux, sector) if subcategorias == None: if (categoria_nombre == None): rbs.append({"categoria": model_to_dict(categoria_aux)}) indice[categoria_aux.categoria_nombre] = cont cont = cont + 1 else: if (categoria_nombre == None): rbs.append({ "categoria": model_to_dict(categoria_aux), "subcategorias": self.raw_queryset_as_values_list(subcategorias) }) indice[categoria_aux.categoria_nombre] = cont cont = cont + 1 else: subcategoria_aux = rbs[indice[ categoria_aux.categoria_nombre]].get("subcategorias") if (subcategoria_aux == None): rbs[indice][ "subcategorias"] = self.raw_queryset_as_values_list( subcategorias) else: subcategoria_aux = subcategoria_aux + self.raw_queryset_as_values_list( subcategorias) return rbs
def asosiar_riesgos_sugeridos_proyecto(self, riesgos, proyecto): p_h_r = ProyectoHasRiesgoDao() riesgo_dao = RiesgoDao() subcategoria_dao = SubcategoriaDao() categoria_dao = CategoriaDao() rbs_dao = RbsDao() rbs_controller = RbsController() rbs = rbs_controller.obtener_rbs_general(proyecto.gerente.gerente_id) rbs_model = rbs_dao.get_rbs_gerente_id(proyecto.gerente) for riesgo in riesgos: aux = riesgo_dao.obtener_riesgo(riesgo) sub_categoria_aux = aux.sub_categoria try: sub_aux = self.buscar_sub_categoria_by_uid( rbs, sub_categoria_aux) if sub_aux: riesgo_nuevo = riesgo_dao.registrar_riesgo( aux.riesgo_nombre, "Sin Causa definida", "Sin Evento definido", "Sin efecto definido", 0, 0, sub_aux) else: print("EEEEEEEEEEEE", sub_categoria_aux.categoria, rbs_model) print("CATENOMBRE", sub_categoria_aux.categoria.categoria_nombre) categoria_aux = categoria_dao.duplicar_categoria_2( sub_categoria_aux.categoria, rbs_model) print("CCCC", categoria_aux) sub_categoria_aux = subcategoria_dao.duplicar_sub_categoria_2( categoria_aux, sub_categoria_aux) print("SSSSSSS", sub_categoria_aux) rbs = rbs_controller.obtener_rbs_general( proyecto.gerente.gerente_id) print("RBSSSSS", rbs) riesgo_nuevo = riesgo_dao.clonar_riesgo( aux.riesgo_nombre, aux.riesgo_uid, sub_categoria_aux) print("RRRRRRRR", riesgo_nuevo) p_h_r.registrar_proyecto_riesgo_editado(proyecto, riesgo_nuevo) except Exception as e: raise e finally: pass return True
def crear_rbs_sugerida(self, gerente_id): gerente_dao = GerenteDao() gerente = gerente_dao.get_by_id(gerente_id) rbs = self.rbs_dao.crear_rbs(gerente, 2) categoria_dao = CategoriaDao() categorias = categoria_dao.get_categorias_by_sector(gerente.sector) sub_categoria_dao = SubcategoriaDao() rbs_sugerida = self.obtener_rbs_sugerida(gerente.sector.sector_id) for aux in rbs_sugerida: categoria = categoria_dao.duplicar_categoria(aux["categoria"], rbs) if (aux["subcategorias"]): for subcategoria in aux["subcategorias"]: sub_categoria_dao.duplicar_sub_categoria( categoria, subcategoria) return rbs
def obtener_rbs_proyecto(self, proyecto_id): """Construye una rbs de acuerdo al sector. Devuelve en un diccionario la informacion de las categorias junto con las subcategorias asociadas. Se encarga de consultar la rbs del gerente y a partir de su id consultar todas las categorias y subcategorias asociados. Parámetros: gerente_id -- corresponde al id del gerente en la base de datos Excepciones: ValueError -- Si gerente no existe """ proyecto_dao = ProyectoDao() proyecto = proyecto_dao.obtener_proyecto(proyecto_id) categoria_dao = CategoriaDao() categorias = categoria_dao.get_categorias_by_proyecto(proyecto) sub_categoria_dao = SubcategoriaDao() rbs = [] for categoria in categorias: subcategorias = sub_categoria_dao.get_sub_categorias_by_categoria_and_proyecto( categoria, proyecto) if subcategorias == None: rbs.append({"categoria": model_to_dict(categoria)}) else: rbs.append({ "categoria": model_to_dict(categoria), "subcategorias": self.raw_queryset_as_values_list(subcategorias) }) return rbs