/**
   * 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;
  }
  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());
  }
  /**
   * Método encargado de llenar los datos necesarios para la generación del archivo JasperPrint.
   *
   * @throws Exception Se genera cuando ocurre un error al generar el JasperPrint del reporte.
   */
  public void generarJasperPrint() {
    try {
      cargarInformacion();
      HashMap<String, Object> parametros = new HashMap<String, Object>();
      // pie de pagina
      parametros.put("direccion_empresa", reporteList.get(ReporteConstants.DIRECCION));
      parametros.put("telefonos_empresa", reporteList.get(ReporteConstants.TELEFONOS));
      parametros.put("email_empresa", reporteList.get(ReporteConstants.EMAIL));
      parametros.put("web_empresa", reporteList.get(ReporteConstants.WEB));

      // Datos Generales
      parametros.put("nombre_equipo", newObject.getNombreEquipo());
      parametros.put("marca_equipo", newObject.getMarca());
      parametros.put("modelo_equipo", newObject.getModelo());
      parametros.put("inventario_equipo", newObject.getNumInventario());
      parametros.put("ubicacion_equipo", newObject.getUbicacion());
      parametros.put("fabricante_equipo", newObject.getFabricante());
      parametros.put("representante_equipo", newObject.getRepresentanteCol());
      parametros.put("direccion", newObject.getDireccion());
      parametros.put("telefono", newObject.getTelefono());

      // Informacion Tecnica
      parametros.put("voltaje", infoTecnica.getVoltaje() + " V.");
      parametros.put("potencia", infoTecnica.getPotencia() + " Kw.");
      parametros.put("capacidad_teorica", infoTecnica.getCapacidadTeorica());
      parametros.put("capacidad_practica", infoTecnica.getCapacidadPractica());
      parametros.put("instalaciones", infoTecnica.getInstalaciones());
      parametros.put("frecuencia", infoTecnica.getFrecuencia() + " Hz");
      parametros.put("tecnologia", infoTecnica.getTecnologia());
      parametros.put("insumos", infoTecnica.getInsumos());

      // Propiedad, adquisicion y garantia
      parametros.put("fecha_adquisicion", adquisicionEquipo.getFechaAdquisicion());
      parametros.put("fecha_instalacion", adquisicionEquipo.getFechaInstalacion());
      parametros.put("anios_operacion", adquisicionEquipo.getAniosOperacion());
      parametros.put("propiedad", adquisicionEquipo.getPropiedadEquipo());
      parametros.put("anios_fuera_servicio", adquisicionEquipo.getAniosFueraServicio());
      parametros.put("razon", adquisicionEquipo.getRazon());
      parametros.put("garantia", adquisicionEquipo.getGarantia());
      parametros.put("periodo_garantia", adquisicionEquipo.getPeridoGarantia());
      parametros.put("cubrimiento_garantia", adquisicionEquipo.getCubrimientoGarantia());
      parametros.put("clasificacion_decreto", adquisicionEquipo.getClasificacionDecreto());
      parametros.put("calibracion", adquisicionEquipo.getCalibracionTipo());

      // Planos
      parametros.put(
          "si_instalacion",
          planosEquipo.getInstalacionConfirmar() != null && planosEquipo.getInstalacionConfirmar()
              ? "SI"
              : "NO");
      parametros.put(
          "si_partes",
          planosEquipo.getPartesConfirmar() != null && planosEquipo.getPartesConfirmar()
              ? "SI"
              : "NO");
      parametros.put(
          "si_funcionamiento",
          planosEquipo.getFuncionamientoConfirmar() != null
                  && planosEquipo.getFuncionamientoConfirmar()
              ? "SI"
              : "NO");
      parametros.put("instalacion_ubicacion", planosEquipo.getInstalacionUbicacion());
      parametros.put("partes_ubicacion", planosEquipo.getPartesUbicacion());
      parametros.put("funcionamiento_ubicacion", planosEquipo.getFuncionamientoUbicacion());

      // Manuales
      parametros.put(
          "si_tecnico",
          manualesEquipo.getTecnicoConfirmar() != null && manualesEquipo.getTecnicoConfirmar()
              ? "SI"
              : "NO");
      parametros.put(
          "si_servicio",
          manualesEquipo.getServicioConfirmar() != null && manualesEquipo.getServicioConfirmar()
              ? "SI"
              : "NO");
      parametros.put(
          "si_usuario",
          manualesEquipo.getUsuarioConfirmar() != null && manualesEquipo.getUsuarioConfirmar()
              ? "SI"
              : "NO");
      parametros.put("tecnico_ubicacion", manualesEquipo.getTecnicoUbicacion());
      parametros.put("servicio_ubicacion", manualesEquipo.getServicioUbicacion());
      parametros.put("usuario_ubicacion", manualesEquipo.getUsuarioUbicacion());

      // Recomendaciones
      parametros.put("recomendaciones", recomendacionesEquipo.getDetalle());

      // Estado
      parametros.put("estado", estadoEquipo.getEstadoConfirmar());
      parametros.put("causas_estado", estadoEquipo.getCausa());

      // Funcionamiento
      parametros.put("estado_funcionamiento", funcionamientoEquipo.getFuncionamientoConfirmar());
      parametros.put(
          "fuera_servicio",
          funcionamientoEquipo.getFueraServicio() != null && funcionamientoEquipo.getFueraServicio()
              ? "SI"
              : "NO");
      parametros.put("anios_fuera_servicios", funcionamientoEquipo.getAnioFueraServicio());
      parametros.put("causas_funcionamiento", funcionamientoEquipo.getCausa());

      // Tipo Mantenimiento
      if (tipoManteEquipoPre.getTipoContrato() != null && tipoManteEquipoPre.getTipoContrato()) {
        parametros.put("preventivo_propio", "X");
      } else {
        parametros.put("preventivo_contratado", "X");
      }
      if (tipoManteEquipoCorr.getTipoContrato() != null && tipoManteEquipoCorr.getTipoContrato()) {
        parametros.put("correctivo_propio", "X");
      } else {
        parametros.put("correctivo_contratado", "X");
      }
      parametros.put("preventivo_cual", tipoManteEquipoPre.getCual());
      parametros.put("correctivo_cual", tipoManteEquipoCorr.getCual());

      // Imagen
      if (newObject.getFotoEquipo() != null && newObject.getFotoEquipo().length > 0) {
        InputStream in = new ByteArrayInputStream(newObject.getFotoEquipo());
        parametros.put("imagen", new BufferedInputStream(in));
      }

      // Lista de mantenimiento
      ReporteDTO reportee = new ReporteDTO();
      List<ReporteDTO> listaReporte = new ArrayList<ReporteDTO>();
      List<RegistroActividadesDTO> listaRegistro = new ArrayList<RegistroActividadesDTO>();
      if (mantenimientoEquipo != null && !mantenimientoEquipo.isEmpty()) {
        for (MantenimientoEquipo mantenimiento : mantenimientoEquipo) {
          RegistroActividadesDTO registroActividadesDTO = new RegistroActividadesDTO();
          registroActividadesDTO.setDanio(mantenimiento.getDanioFalla());
          registroActividadesDTO.setFecha(
              FechaUtils.formatearfechaSinHora(mantenimiento.getFecha()));
          if (mantenimiento.getFirmaAprobacion() != null
              && mantenimiento.getFirmaAprobacion().length > 0) {
            InputStream in = new ByteArrayInputStream(mantenimiento.getFirmaAprobacion());
            registroActividadesDTO.setFirmaAprobacion(new BufferedInputStream(in));
          }
          if (mantenimiento.getFirmaAprobacionContrato() != null
              && mantenimiento.getFirmaAprobacionContrato().length > 0) {
            InputStream in = new ByteArrayInputStream(mantenimiento.getFirmaAprobacionContrato());
            registroActividadesDTO.setFirmaContratista(new BufferedInputStream(in));
          }
          if (mantenimiento.getFirmaAprobacionTecnico() != null
              && mantenimiento.getFirmaAprobacionTecnico().length > 0) {
            InputStream in = new ByteArrayInputStream(mantenimiento.getFirmaAprobacionTecnico());
            registroActividadesDTO.setFirmaIngeniero(new BufferedInputStream(in));
          }
          registroActividadesDTO.setNroTransaccion(
              ConvertidorUtils.convertirACadenas(mantenimiento.getIdTransaccion()));
          registroActividadesDTO.setObservaciones(mantenimiento.getObservaciones());
          registroActividadesDTO.setReparacion(mantenimiento.getReparaciones());
          registroActividadesDTO.setRepuesto(mantenimiento.getRepuestos());
          listaRegistro.add(registroActividadesDTO);
        }
      }
      reportee.setListaRegistro(listaRegistro);
      listaReporte.add(reportee);

      JasperPrint jasperPrint =
          JasperFillManager.fillReport(
              obtenerPlantilla(), parametros, new JRBeanCollectionDataSource(listaReporte));

      String nombreReporte =
          FechaUtils.formatearfechaConHoraGuion(Calendar.getInstance().getTime())
              + "_"
              + newObject.getNombreEquipo();

      enviarPDF(jasperPrint, nombreReporte);
      addMessage(FacesMessage.SEVERITY_INFO, "Se genero el informe");
    } catch (Exception e) {
      addMessage(FacesMessage.SEVERITY_ERROR, "Error al generar el informe");
    }
  }
  /**
   * 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 "";
    }
  }
  public void agregarComentario() {

    if (newObjectCo.getNombreEquipo() != null) {
      newObject.setNombreEquipo(newObjectCo.getNombreEquipo());
      newObjectCo.setNombreEquipo(null);
    }
    if (newObjectCo.getDireccion() != null) {
      newObject.setDireccion(newObjectCo.getDireccion());
    }
    if (newObjectCo.getMarca() != null) {
      newObject.setMarca(newObjectCo.getMarca());
    }

    if (newObjectCo.getModelo() != null) {
      newObject.setModelo(newObjectCo.getModelo());
    }
    if (newObjectCo.getNumInventario() != null) {
      newObject.setNumInventario(newObjectCo.getNumInventario());
    }
    if (newObjectCo.getUbicacion() != null) {
      newObject.setUbicacion(newObjectCo.getUbicacion());
    }

    if (newObjectCo.getFabricante() != null) {
      newObject.setFabricante(newObjectCo.getFabricante());
    }
    if (newObjectCo.getRepresentanteCol() != null) {
      newObject.setRepresentanteCol(newObjectCo.getRepresentanteCol());
    }

    if (newObjectCo.getTelefono() != null) {
      newObject.setTelefono(newObjectCo.getTelefono());
    }

    if (infoTecnicaCo.getVoltaje() != null) {
      infoTecnica.setVoltaje(infoTecnicaCo.getVoltaje());
    }

    if (infoTecnicaCo.getInstalaciones() != null) {
      infoTecnica.setInstalaciones(infoTecnicaCo.getInstalaciones());
    }

    if (infoTecnicaCo.getVoltaje() != null) {
      infoTecnica.setVoltaje(infoTecnicaCo.getVoltaje());
    }

    if (infoTecnicaCo.getFrecuencia() != null) {
      infoTecnica.setFrecuencia(infoTecnicaCo.getFrecuencia());
    }

    if (infoTecnicaCo.getPotencia() != null) {
      infoTecnica.setPotencia(infoTecnicaCo.getPotencia());
    }

    if (infoTecnicaCo.getCapacidadPractica() != null) {
      infoTecnica.setCapacidadPractica(infoTecnicaCo.getCapacidadPractica());
    }

    if (infoTecnicaCo.getCapacidadTeorica() != null) {
      infoTecnica.setCapacidadTeorica(infoTecnicaCo.getCapacidadTeorica());
    }

    if (infoTecnicaCo.getTecnologia() != null) {
      infoTecnica.setTecnologia(infoTecnicaCo.getTecnologia());
    }

    if (infoTecnicaCo.getInsumos() != null) {
      infoTecnica.setInsumos(infoTecnicaCo.getInsumos());
    }

    if (adquisicionEquipoCo.getFechaAdquisicion() != null) {
      adquisicionEquipo.setFechaAdquisicion(adquisicionEquipoCo.getFechaAdquisicion());
    }

    if (adquisicionEquipoCo.getFechaInstalacion() != null) {
      adquisicionEquipo.setFechaInstalacion(adquisicionEquipoCo.getFechaInstalacion());
    }

    if (adquisicionEquipoCo.getAniosOperacion() != null) {
      adquisicionEquipo.setAniosOperacion(adquisicionEquipoCo.getAniosOperacion());
    }

    if (adquisicionEquipoCo.getPropiedadEquipo() != null) {
      adquisicionEquipo.setPropiedadEquipo(adquisicionEquipoCo.getPropiedadEquipo());
    }

    if (adquisicionEquipoCo.getAniosFueraServicio() != null) {
      adquisicionEquipo.setAniosFueraServicio(adquisicionEquipoCo.getAniosFueraServicio());
    }

    if (adquisicionEquipoCo.getRazon() != null) {
      adquisicionEquipo.setRazon(adquisicionEquipoCo.getRazon());
    }

    if (adquisicionEquipoCo.getGarantia() != null) {
      adquisicionEquipo.setGarantia(adquisicionEquipoCo.getGarantia());
    }
    if (adquisicionEquipoCo.getPeridoGarantia() != null) {
      adquisicionEquipo.setPeridoGarantia(adquisicionEquipoCo.getPeridoGarantia());
    }
    if (adquisicionEquipoCo.getCubrimientoGarantia() != null) {
      adquisicionEquipo.setCubrimientoGarantia(adquisicionEquipoCo.getCubrimientoGarantia());
    }
    if (adquisicionEquipoCo.getClasificacionDecreto() != null) {
      adquisicionEquipo.setClasificacionDecreto(adquisicionEquipoCo.getClasificacionDecreto());
    }
    if (adquisicionEquipoCo.getCalibracionPeriocidad() != null) {
      adquisicionEquipo.setCalibracionPeriocidad(adquisicionEquipoCo.getCalibracionPeriocidad());
    }
    if (adquisicionEquipoCo.getCalibracionTipo() != null) {
      adquisicionEquipo.setCalibracionTipo(adquisicionEquipoCo.getCalibracionTipo());
    }

    if (planosEquipoCo.getInstalacionUbicacion() != null) {
      planosEquipo.setInstalacionUbicacion(planosEquipoCo.getInstalacionUbicacion());
    }

    if (planosEquipoCo.getPartesUbicacion() != null) {
      planosEquipo.setPartesUbicacion(planosEquipoCo.getPartesUbicacion());
    }

    if (planosEquipoCo.getFuncionamientoUbicacion() != null) {
      planosEquipo.setFuncionamientoUbicacion(planosEquipoCo.getFuncionamientoUbicacion());
    }

    if (manualesEquipoCo.getServicioUbicacion() != null) {
      manualesEquipo.setServicioUbicacion(manualesEquipoCo.getServicioUbicacion());
    }

    if (manualesEquipoCo.getTecnicoUbicacion() != null) {
      manualesEquipo.setTecnicoUbicacion(manualesEquipoCo.getTecnicoUbicacion());
    }

    if (manualesEquipoCo.getUsuarioUbicacion() != null) {
      manualesEquipo.setUsuarioUbicacion(manualesEquipoCo.getUsuarioUbicacion());
    }

    if (estadoEquipoCo.getCausa() != null) {
      estadoEquipo.setCausa(estadoEquipoCo.getCausa());
    }

    if (funcionamientoEquipoCo.getAnioFueraServicio() != null) {
      funcionamientoEquipo.setAnioFueraServicio(funcionamientoEquipoCo.getAnioFueraServicio());
    }

    if (funcionamientoEquipoCo.getCausa() != null) {
      funcionamientoEquipo.setCausa(funcionamientoEquipoCo.getCausa());
    }

    if (tipoManteEquipoPreCo.getCual() != null) {
      tipoManteEquipoPre.setCual(tipoManteEquipoPreCo.getCual());
    }

    if (tipoManteEquipoCorrCo.getCual() != null) {
      tipoManteEquipoCorr.setCual(tipoManteEquipoCorrCo.getCual());
    }
  }