/**
   * Elimina un objeto en base de datos
   *
   * @param id Identificador del objeto a eliminar
   * @return Retorna regla de nevagacion
   */
  public String eliminar() {

    try {
      for (EquipoHospitalario element : selectEquipos) {

        newObject = equipoHospitalarioBean.getAllRelations(element.getId());
        adquisicionEquipo = newObject.getAdquisicionEquipo();
        infoTecnica = newObject.getInfoTecnica();
        estadoEquipo = newObject.getEstadoEquipo();
        funcionamientoEquipo = newObject.getFuncionamientoEquipo();
        planosEquipo = newObject.getPlanosEquipo();
        manualesEquipo = newObject.getManualesEquipo();
        recomendacionesEquipo = newObject.getRecomendacionesEquipo();
        for (TipoManteEquipo element2 : newObject.getManteEquipo()) {
          equipoHospitalarioBean.delete(element2);
        }
        equipoHospitalarioBean.delete(
            newObject,
            adquisicionEquipo,
            infoTecnica,
            estadoEquipo,
            funcionamientoEquipo,
            planosEquipo,
            manualesEquipo,
            recomendacionesEquipo);
      }

      if (selectEquipos.size() > 1) {
        addMessage(FacesMessage.SEVERITY_INFO, "Los Equipos Hospitalarios han sido eliminados");
      } else {
        addMessage(FacesMessage.SEVERITY_INFO, "El Equipo Hospitalario a sido eliminado");
      }
      inicializarVariables();
      busqueda();
      selectEquipos = null;

    } catch (Exception e) {
      String errorMessage = getRootErrorMessage(e);
      addMessage(
          FacesMessage.SEVERITY_ERROR,
          "No se puede eliminar el Equipo, por que tiene mantenimientos asociados");
    }

    return "";
  }
  /**
   * Actualiza un objeto en la base de datos
   *
   * @return Retorna regla de nevagacion
   */
  public String actualizar() {
    try {
      equipoHospitalarioBean.update(
          recomendacionesEquipo,
          manualesEquipo,
          adquisicionEquipo,
          estadoEquipo,
          infoTecnica,
          funcionamientoEquipo,
          planosEquipo);
      newObject.setEmpresa(listaEmpresa.get(0));
      equipoHospitalarioBean.update(newObject);
      tipoManteEquipoCorr.setTipoMantenimiento(TipoMantenimiento.CORRECTIVO);
      // Propio es TRUE
      if (tipoManteEquipoCorr.getValor().equals("Propio")) {
        tipoManteEquipoCorr.setTipoContrato(Boolean.TRUE);
      } else {
        tipoManteEquipoCorr.setTipoContrato(Boolean.FALSE);
      }
      tipoManteEquipoPre.setTipoMantenimiento(TipoMantenimiento.PREVENTIVO);
      // Propio es TRUE
      if (tipoManteEquipoPre.getValor().equals("Propio")) {
        tipoManteEquipoPre.setTipoContrato(Boolean.TRUE);
      } else {
        tipoManteEquipoPre.setTipoContrato(Boolean.FALSE);
      }

      equipoHospitalarioBean.update(tipoManteEquipoCorr, tipoManteEquipoPre);
      editMode = Boolean.FALSE;
      inicializarVariables();
      busqueda();
      selectEquipos = null;
      razonSocial = "";
      addMessage(FacesMessage.SEVERITY_INFO, "Se actualizo la información del equipo");
    } catch (Exception e) {
      String errorMessage = getRootErrorMessage(e);
      addMessage(FacesMessage.SEVERITY_ERROR, errorMessage);
    }

    return ConstantesUtil.ATRAS;
  }
  public void busqueda() {

    if (!razonSocial.isEmpty()
        || !newObject.getUbicacion().isEmpty()
        || !newObject.getNombreEquipo().isEmpty()) {
      if (!razonSocial.isEmpty()
          && newObject.getUbicacion().isEmpty()
          && newObject.getNombreEquipo().isEmpty()) {
        listaEquipos =
            equipoHospitalarioBean.search(
                "equipoHospitalario.getAllSearchRazon", razonSocial.toLowerCase());
      } else if (!razonSocial.isEmpty()
          && !newObject.getUbicacion().isEmpty()
          && newObject.getNombreEquipo().isEmpty()) {
        listaEquipos =
            equipoHospitalarioBean.search(
                "equipoHospitalario.getAllSearchUbicacion",
                razonSocial.toLowerCase(),
                newObject.getUbicacion());
      } else if (!razonSocial.isEmpty()
          && newObject.getUbicacion().isEmpty()
          && !newObject.getNombreEquipo().isEmpty()) {
        listaEquipos =
            equipoHospitalarioBean.search(
                "equipoHospitalario.getAllSearchEquipo",
                razonSocial.toLowerCase(),
                newObject.getNombreEquipo().toLowerCase());
      } else {
        listaEquipos =
            equipoHospitalarioBean.search(
                "equipoHospitalario.getAllSearch",
                razonSocial.toLowerCase(),
                newObject.getUbicacion(),
                newObject.getNombreEquipo().toLowerCase());
      }

    } else {
      listaEquipos = equipoHospitalarioBean.getAll();
    }
  }
  private void cargarInformacion() {
    newObject = equipoHospitalarioBean.getAllRelations(selectEquipos.get(0).getId());
    mantenimientoEquipo = mantenimientoEquipoBean.getAll(newObject);
    adquisicionEquipo = newObject.getAdquisicionEquipo();
    infoTecnica = newObject.getInfoTecnica();
    estadoEquipo = newObject.getEstadoEquipo();
    funcionamientoEquipo = newObject.getFuncionamientoEquipo();
    planosEquipo = newObject.getPlanosEquipo();
    manualesEquipo = newObject.getManualesEquipo();
    recomendacionesEquipo = newObject.getRecomendacionesEquipo();
    for (TipoManteEquipo element : newObject.getManteEquipo()) {
      if (element.getTipoMantenimiento().equals(TipoMantenimiento.PREVENTIVO)) {
        tipoManteEquipoPre = element;
        // Propio es TRUE
        if (tipoManteEquipoPre.getTipoContrato() == Boolean.TRUE) {
          tipoManteEquipoPre.setValor("Propio");
        } else {
          tipoManteEquipoPre.setValor("Contratado");
        }

      } else {
        tipoManteEquipoCorr = element;
        // Propio es TRUE
        if (tipoManteEquipoCorr.getTipoContrato() == Boolean.TRUE) {
          tipoManteEquipoCorr.setValor("Propio");
        } else {
          tipoManteEquipoCorr.setValor("Contratado");
        }
      }
    }
    if (newObject.getFotoEquipo() != null) {
      nombreFoto = "Ya existe un archivo cargado";
    }
    listaEmpresa = new ArrayList<Empresa>();
    listaEmpresa.add(newObject.getEmpresa());
  }
  /**
   * Registra un nuevo objeto en Base de datos
   *
   * @return Retorna regla de nevagacion
   * @throws Exception Lanza una excepcion si hay un error en la transacciòn
   */
  public String crear() {
    try {
      if (newObject.getEmpresa() == null) {
        addMessage(FacesMessage.SEVERITY_ERROR, "Debe Seleccionar un Cliente");
        return "";
      }
      if (newObject.getFotoEquipo() == null) {
        addMessage(FacesMessage.SEVERITY_ERROR, "Debe Seleccionar una Foto para el equipo");
        return "";
      } else {

        equipoHospitalarioBean.save(
            recomendacionesEquipo,
            manualesEquipo,
            adquisicionEquipo,
            estadoEquipo,
            infoTecnica,
            funcionamientoEquipo,
            planosEquipo,
            newObject);
        newObject.setRecomendacionesEquipo(recomendacionesEquipo);
        newObject.setManualesEquipo(manualesEquipo);
        newObject.setAdquisicionEquipo(adquisicionEquipo);
        newObject.setEstadoEquipo(estadoEquipo);
        newObject.setInfoTecnica(infoTecnica);
        newObject.setFuncionamientoEquipo(funcionamientoEquipo);
        newObject.setPlanosEquipo(planosEquipo);
        // newObject.setEmpresa(listaEmpresa.get(0));
        equipoHospitalarioBean.update(newObject);

        tipoManteEquipoCorr.setEquipoHospitalario(newObject);
        tipoManteEquipoCorr.setTipoMantenimiento(TipoMantenimiento.CORRECTIVO);
        // Propio es TRUE
        if (tipoManteEquipoCorr.getValor().equals("Propio")) {
          tipoManteEquipoCorr.setTipoContrato(Boolean.TRUE);
        } else {
          tipoManteEquipoCorr.setTipoContrato(Boolean.FALSE);
        }

        tipoManteEquipoPre.setEquipoHospitalario(newObject);
        tipoManteEquipoPre.setTipoMantenimiento(TipoMantenimiento.PREVENTIVO);
        // Propio es TRUE
        if (tipoManteEquipoPre.getValor().equals("Propio")) {
          tipoManteEquipoPre.setTipoContrato(Boolean.TRUE);
        } else {
          tipoManteEquipoPre.setTipoContrato(Boolean.FALSE);
        }

        equipoHospitalarioBean.save(tipoManteEquipoCorr, tipoManteEquipoPre);

        facesContext.addMessage(
            null,
            new FacesMessage(
                FacesMessage.SEVERITY_INFO,
                "Exito!",
                "Se guardo un registro de una Equipo hospitalario"));
        inicializarVariables();
        busqueda();
        razonSocial = "";
      }
      return ConstantesUtil.ATRAS;

    } catch (Exception e) {
      String errorMessage = getRootErrorMessage(e);
      addMessage(FacesMessage.SEVERITY_ERROR, errorMessage);
      return "";
    }
  }