/**
  * Envía un xls como respuesta al cliente.
  *
  * @param jasperPrint con el reporte xls.
  * @throws Exception Se genera cuando se presenta un error al exportar el reporte como archivo
  *     xls.
  */
 private void enviarPDF(JasperPrint jasperPrint, String nombreReporte) throws Exception {
   String fileName =
       ConvertidorUtils.convertirEspaciosAUnderscore(
           reporteList.get(ReporteConstants.RUTA)
               + newObject.getEmpresa().getRazonSocial()
               + "//"
               + newObject.getUbicacion()
               + "//");
   boolean archvoCreado = false;
   File archivo = new File(fileName);
   if (!archivo.exists()) {
     archvoCreado = archivo.mkdirs();
   }
   if (archvoCreado || archivo.exists()) {
     JasperExportManager.exportReportToPdfFile(jasperPrint, fileName + nombreReporte + ".pdf");
   }
 }
  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();
    }
  }
  /**
   * 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");
    }
  }
  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());
    }
  }