/**
   * Metodo para guardar
   *
   * @param dto catalogo a guardar
   * @return Cadena de satisfaccion
   */
  public String guardar(CategoriaPecDto dto) {

    String to = null;
    String mensajeTrx = "";
    SessionMBean sessionMBean =
        (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
    ApplicationMBean applicationMBean =
        (ApplicationMBean)
            WebServletContextListener.getApplicationContext().getBean("applicationMBean");

    {
      dto.setUsuarioDto(sessionMBean.getSessionUsuarioDto());
      dto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
      dto.setTerminal(sessionMBean.getSessionTerminal());
    }

    if (sessionMBean.getAccion() == applicationMBean.getNuevo()) {
      try {
        dto.setUsuarioCreacionDto(sessionMBean.getSessionUsuarioDto());
        dto.setFechaCreacion(UtilCore.Fecha.obtenerFechaActualDate());
        dto.setTerminalCreacion(sessionMBean.getSessionTerminal());
        UtilCore.General.toUpperCaseDto(dto);
        actualizarCuadrante(dto);
        nuevo(dto);
        sessionMBean.setAccion(applicationMBean.getEditar());
        mensajeTrx =
            UtilCore.Internacionalizacion.getMensajeInternacional(
                "form.general.mensaje.transaccion.ok");
        recursosManager.showMessage(mensajeTrx);

        to = ""; // retroceder();
      } catch (Exception ex) {
        mensajeTrx = ex.getMessage();
        recursosManager.showError(ex.getMessage());
        logger.error(mensajeTrx);

        to = null;
      }
    } else if (sessionMBean.getAccion() == applicationMBean.getEditar()) {
      try {
        UtilCore.General.toUpperCaseDto(dto);
        actualizarCuadrante(dto);
        editar(dto);
        mensajeTrx =
            UtilCore.Internacionalizacion.getMensajeInternacional(
                "form.general.mensaje.transaccion.ok");
        recursosManager.showMessage(mensajeTrx);
        to = ""; // retroceder();
      } catch (Exception ex) {
        mensajeTrx = ex.getMessage();
        recursosManager.showError(ex.getMessage());
        logger.error(mensajeTrx);
        to = null;
      }
    }

    return to;
  }
  /**
   * Metodo para guardar, editar Materiales
   *
   * @param dto Material
   * @return cadena de satisfaccion
   */
  public String guardar(MaterialDto dto) {
    String to = null;
    String mensajeTrx = "";
    SessionMBean sessionMBean =
        (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
    ApplicationMBean applicationMBean =
        (ApplicationMBean)
            WebServletContextListener.getApplicationContext().getBean("applicationMBean");
    try {

      if (obtenerCantMaterialesPorProducto(dto) <= 0) {
        {
          dto.setUsuarioDto(sessionMBean.getSessionUsuarioDto());
          dto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
          dto.setTerminal(sessionMBean.getSessionTerminal());
        }

        if (sessionMBean.getAccionDetalle() == applicationMBean.getNuevo()) {

          dto.setUsuarioCreacionDto(sessionMBean.getSessionUsuarioDto());
          dto.setFechaCreacion(UtilCore.Fecha.obtenerFechaActualDate());
          dto.setTerminalCreacion(sessionMBean.getSessionTerminal());
          UtilCore.General.toUpperCaseDto(dto);
          nuevo(dto);
          mensajeTrx =
              UtilCore.Internacionalizacion.getMensajeInternacional(
                  "form.general.mensaje.transaccion.ok");
          recursosManager.showMessage(mensajeTrx);
          to = ""; // retroceder();

        } else if (sessionMBean.getAccionDetalle() == applicationMBean.getEditar()) {

          UtilCore.General.toUpperCaseDto(dto);
          editar(dto);
          mensajeTrx =
              UtilCore.Internacionalizacion.getMensajeInternacional(
                  "form.general.mensaje.transaccion.ok");
          recursosManager.showMessage(mensajeTrx);
          to = ""; // retroceder();
        }
      } else {
        recursosManager.showWarning(
            UtilCore.Internacionalizacion.getMensajeInternacional(
                "moneda.mensaje.moneda.duplicada"));
        to = null;
      }
    } catch (Exception ex) {
      mensajeTrx = ex.getMessage();
      recursosManager.showError(ex.getMessage());
      logger.error(mensajeTrx);
      to = null;
    }
    return to;
  }
 /**
  * Metodo para inicializar un Material
  *
  * @return Material
  */
 public MaterialDto inicializar() {
   SessionMBean sessionMBean =
       (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");
   MaterialDto dto = new MaterialDto();
   dto.setEstado(Boolean.TRUE);
   return dto;
 }
  private void cargarHijos3(
      OpcionSistemaDto opcionMenuDto2, Submenu subMenu2, List<PermisoRolDto> listaPermisos)
      throws Exception {
    MenuItem menuItem = null;
    Submenu subMenuHijo = null;
    ApplicationMBean applicationMBean =
        (ApplicationMBean)
            WebServletContextListener.getApplicationContext().getBean("applicationMBean");
    List<OpcionSistemaDto> hijos1 = opcionSistemaManager.obtenerHijosMenu(opcionMenuDto2);
    UtilCore.General.ordena(hijos1, "orden");
    for (OpcionSistemaDto opcionMenuDtoHijo : hijos1) {
      opcionMenuDtoHijo.setPermiso(obtenerPermiso(listaPermisos, opcionMenuDtoHijo).getEstado());
      List<OpcionSistemaDto> hijos = opcionSistemaManager.obtenerHijosMenu(opcionMenuDtoHijo);
      UtilCore.General.ordena(hijos, "orden");
      if (hijos.size() >= 1) {
        if (opcionMenuDtoHijo.getPermiso()) {
          subMenuHijo = new Submenu();
          subMenuHijo.setId(
              ConstantesCore.VARIABLE_ID_MENU
                  + String.valueOf(opcionMenuDtoHijo.getId().intValue()));
          subMenuHijo.setLabel(
              UtilCore.Internacionalizacion.getMensajeInternacional(opcionMenuDtoHijo.getValue())
                  .toUpperCase());
          subMenuHijo.setIcon(opcionMenuDtoHijo.getIcon());
          subMenuHijo.setStyle(applicationMBean.getEstiloMenu());
          cargarHijos3(opcionMenuDtoHijo, subMenuHijo, listaPermisos);
          subMenu2.getChildren().add(subMenuHijo);
        }
      } else {
        if (opcionMenuDtoHijo.getPermiso()) {
          menuItem = new MenuItem();
          menuItem.setId(
              ConstantesCore.VARIABLE_ID_MENU_ITEM
                  + String.valueOf(opcionMenuDtoHijo.getId().intValue()));
          menuItem.setValue(
              UtilCore.Internacionalizacion.getMensajeInternacional(opcionMenuDtoHijo.getValue())
                  .toUpperCase());
          menuItem.setUrl(opcionMenuDtoHijo.getUrl());
          menuItem.setIcon(opcionMenuDtoHijo.getIcon());
          menuItem.setOnclick(opcionMenuDtoHijo.getOnClick());
          menuItem.setStyle(applicationMBean.getEstiloMenu());
          if (opcionMenuDtoHijo.getAction() != null && opcionMenuDtoHijo.getAction().length() > 0) {
            menuItem.setAction(
                FacesContext.getCurrentInstance()
                    .getApplication()
                    .createMethodBinding(opcionMenuDtoHijo.getAction(), new Class[] {}));
          } else {
            menuItem.setUrl(opcionMenuDtoHijo.getUrl());
          }

          menuItem.setInView(true);
          menuItem.setAjax(false);
          subMenu2.getChildren().add(menuItem);
        }
      }
    }
  }
 /**
  * Metodo que permite gestionar los dias feriados
  *
  * @since 28/01/2014
  * @return retorna una valor vacio
  */
 public String gestionFeriados() {
   this.ubigeoSeleccionadoDto = (UbigeoDto) selectedUbigeo.getData();
   if (this.ubigeoSeleccionadoDto.getUbigeoPadreDto().getId() == 0) {
     FeriadoPaisMBean feriadoPaisMBean =
         (FeriadoPaisMBean)
             WebServletContextListener.getApplicationContext().getBean("feriadoPaisMBean");
     return feriadoPaisMBean.iniciar(ubigeoSeleccionadoDto);
   } else {
     recursosManager.showWarning(
         UtilCore.Internacionalizacion.getMensajeInternacional("ubigeo.mensaje.no.feriados"));
   }
   return "";
 }
  /**
   * Metodo que permite inicializar la entidad MaquinaCostoDto
   *
   * @since 09/01/2014
   * @return entidad MaquinaCostoDto
   */
  public MaquinaCostoDto inicializar() {

    SessionMBean sessionMBean =
        (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");

    MaquinaCostoDto dto = new MaquinaCostoDto();
    dto.setValorCompra(BigDecimal.ZERO);
    dto.setCosto(BigDecimal.ZERO);
    dto.setUmCostoDto(new ParametroDto());
    dto.setImporteUtillaje(BigDecimal.ZERO);
    dto.setAmortizacion(BigDecimal.ZERO);
    dto.setValorAnio(BigDecimal.ZERO);
    dto.setDiasAnio(0);
    dto.setHorasDia(0);
    dto.setHorasImpAnio(0);
    dto.setUnidadesCostoAnual(BigDecimal.ZERO);

    return dto;
  }
  public List<OrganizacionDto> obtenerTodosPorEstadoPropietario(Long estado, String descripcion)
      throws DAOException {
    Long entidad = ConstantesCore.Entidad.ORGANIZACION;
    SessionMBean sessionMBean =
        (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");

    String hqsql =
        "select e from OrganizacionDto as e, PropietarioDto as pro where e.estadoDto.id = ? "
            + " and pro.estado = ? and pro.propietarioDtoPK.entidad = ? and pro.propietarioDtoPK.organizacionDto.id = ?"
            + " and pro.propietarioDtoPK.registro = e.id"
            + " and  (upper(e.descripcion)) like '%"
            + descripcion.toUpperCase()
            + "%'";
    List<Object> listaParametros = new ArrayList<Object>();
    listaParametros.add(estado);
    listaParametros.add(Boolean.TRUE);
    listaParametros.add(entidad);
    listaParametros.add(sessionMBean.getSessionOrganizacionDto().getId());
    hqsql += " order by e.descripcion asc";
    return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
  }
  /**
   * Metodo que permite guardar la entidad MaquinaCostoDto
   *
   * @since 09/01/2014
   * @param dto entidad a guardar
   * @return retorna una cadena, que indica la página a mostrarse después de guardar la entidad
   */
  public String guardar(MaquinaCostoDto dto) {
    String ir = "";
    String mensajeTrx = "";

    SessionMBean sessionMBean =
        (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");

    if (sessionMBean.getAccionDetalle() == applicationMBean.getNuevo()) {
      try {
        UtilCore.General.toUpperCaseDto(dto);
        nuevo(dto);
        mensajeTrx =
            UtilCore.Internacionalizacion.getMensajeInternacional(
                "form.general.mensaje.transaccion.ok");
        recursosManager.showMessage(mensajeTrx);
        ir = "";
      } catch (Exception ex) {
        logger.error(ex.getMessage());
        recursosManager.showError(ex.getMessage());
        ir = null;
      }
    } else if (sessionMBean.getAccionDetalle() == applicationMBean.getEditar()) {
      try {
        UtilCore.General.toUpperCaseDto(dto);
        editar(dto);
        mensajeTrx =
            UtilCore.Internacionalizacion.getMensajeInternacional(
                "form.general.mensaje.transaccion.ok");
        recursosManager.showMessage(mensajeTrx);
        ir = "";
      } catch (Exception ex) {
        logger.error(ex.getMessage());
        recursosManager.showError(ex.getMessage());
        ir = null;
      }
    }

    return ir;
  }
  public List<ProductoDto> obtenerProductosPorQuery(String query) throws DAOException {
    // String entidad = ProductoDto.class.getAnnotation(Table.class).name();
    Long entidad = ConstantesCore.Entidad.PRODUCTO;
    SessionMBean sessionMBean =
        (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");

    // String hqsql = "select e from ProductoDto as e where e.estado = ? and  (upper(e.id ||
    // e.descripcion)) like '%" + query.toUpperCase()+"%'";
    String hqsql =
        "select e from ProductoDto as e, PropietarioDto as pro where e.estado = ? "
            + " and pro.estado = ? and pro.propietarioDtoPK.entidad = ? and pro.propietarioDtoPK.organizacionDto.id = ?"
            + " and pro.propietarioDtoPK.registro = e.id"
            + " and  (upper(e.id || e.descripcion)) like '%"
            + query.toUpperCase()
            + "%'";
    List<Object> listaParametros = new ArrayList<Object>();
    listaParametros.add(Boolean.TRUE);
    listaParametros.add(Boolean.TRUE);
    listaParametros.add(entidad);
    listaParametros.add(sessionMBean.getSessionOrganizacionDto().getId());
    hqsql += " order by e.descripcion desc";
    return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
  }
  public List<ProductoDto> obtenerProductos(ProductoDto dtoFiltro) throws DAOException {
    /*
    List<ProductoDto> lista = null;
    Map<String, Object> mapFiltro = new HashMap<String, Object>();

    if (dtoFiltro.getId() != null && !dtoFiltro.getId().equals(0L)) {
        mapFiltro.put("id", dtoFiltro.getId());
    } else {
        dtoFiltro.setId(null);
    }

    if (dtoFiltro.getDescripcion() != null && dtoFiltro.getDescripcion().length() != 0) {
        mapFiltro.put("descripcion", dtoFiltro.getDescripcion());
    }

    if (dtoFiltro.getRepresentadaDto().getDescripcion()!=null && dtoFiltro.getRepresentadaDto().getDescripcion().length()!=0) {
        mapFiltro.put("representadaDto.descripcion", dtoFiltro.getRepresentadaDto().getDescripcion());
    }

    Map<String, String> mapOrden = new HashMap<String, String>();
    mapOrden.put("descripcion", "asc");

    lista = obtenerConFiltroConOrden(mapFiltro, mapOrden);
    return lista;*/

    Long entidad = ConstantesCore.Entidad.PRODUCTO;
    SessionMBean sessionMBean =
        (SessionMBean) WebServletContextListener.getApplicationContext().getBean("sessionMBean");

    // String hqsql = "select e from ProductoDto as e where e.estado = ? and  (upper(e.id ||
    // e.descripcion)) like '%" + query.toUpperCase()+"%'";
    String hqsql =
        "select e from ProductoDto as e, PropietarioDto as pro where "
            + " pro.estado = ? and pro.propietarioDtoPK.entidad = ? and pro.propietarioDtoPK.organizacionDto.id = ?"
            + " and pro.propietarioDtoPK.registro = e.id";
    List<Object> listaParametros = new ArrayList<Object>();
    listaParametros.add(Boolean.TRUE);
    listaParametros.add(entidad);
    listaParametros.add(sessionMBean.getSessionOrganizacionDto().getId());

    if (dtoFiltro.getId() != null && !dtoFiltro.getId().equals(0L)) {
      hqsql += " and e.id = ?";
      listaParametros.add(dtoFiltro.getId());
    } else {
      dtoFiltro.setId(null);
    }

    if (dtoFiltro.getDescripcion() != null && dtoFiltro.getDescripcion().length() != 0) {
      hqsql +=
          " and upper(e.descripcion) like '%" + dtoFiltro.getDescripcion().toUpperCase() + "%'";
    }

    if (dtoFiltro.getRepresentadaDto().getDescripcion() != null
        && dtoFiltro.getRepresentadaDto().getDescripcion().length() != 0) {
      hqsql +=
          " and upper(e.representadaDto.descripcion) like '%"
              + dtoFiltro.getRepresentadaDto().getDescripcion().toUpperCase()
              + "%'";
    }

    hqsql += " order by e.descripcion asc";
    return springHibernateDao.ejecutarQuery(hqsql, listaParametros);
  }
  public Menubar getMenuBar(
      List<OpcionSistemaDto> listaOpcionMenu, List<PermisoRolDto> listaPermisos) throws Exception {
    listaOpcionMenu.remove(new OpcionSistemaDto(0L));
    Menubar menuBar = new Menubar();
    Submenu subMenu = null;
    MenuItem menuItem = null;

    ApplicationMBean applicationMBean =
        (ApplicationMBean)
            WebServletContextListener.getApplicationContext().getBean("applicationMBean");

    for (OpcionSistemaDto opcionMenuDto : listaOpcionMenu) {
      opcionMenuDto.setPermiso(obtenerPermiso(listaPermisos, opcionMenuDto).getEstado());
      if (opcionMenuDto.getPadreDto() == null || opcionMenuDto.getPadreDto().getId().equals(0L)) {
        List<OpcionSistemaDto> hijos = opcionSistemaManager.obtenerHijosMenu(opcionMenuDto);
        UtilCore.General.ordena(hijos, "orden");
        if (hijos.size() > 0) {
          if (opcionMenuDto.getPermiso()) {
            subMenu = new Submenu();
            subMenu.setId(
                ConstantesCore.VARIABLE_ID_MENU + String.valueOf(opcionMenuDto.getId().intValue()));
            subMenu.setLabel(
                UtilCore.Internacionalizacion.getMensajeInternacional(opcionMenuDto.getValue())
                    .toUpperCase());
            subMenu.setIcon(opcionMenuDto.getIcon());
            subMenu.setStyle(applicationMBean.getEstiloMenu());
            cargarHijos3(opcionMenuDto, subMenu, listaPermisos);
            menuBar.getChildren().add(subMenu);
          }

        } else {
          if (opcionMenuDto.getPermiso()) {
            menuItem = new MenuItem();
            menuItem.setId(
                ConstantesCore.VARIABLE_ID_MENU_ITEM
                    + String.valueOf(opcionMenuDto.getId().intValue()));
            menuItem.setValue(
                UtilCore.Internacionalizacion.getMensajeInternacional(opcionMenuDto.getValue())
                    .toUpperCase());

            menuItem.setIcon(opcionMenuDto.getIcon());
            menuItem.setOnclick(opcionMenuDto.getOnClick());
            if (opcionMenuDto.getAction() != null && opcionMenuDto.getAction().length() > 0) {
              menuItem.setAction(
                  FacesContext.getCurrentInstance()
                      .getApplication()
                      .createMethodBinding(opcionMenuDto.getAction(), new Class[] {}));
            } else {
              menuItem.setUrl(opcionMenuDto.getUrl());
            }

            menuItem.setInView(true);
            menuItem.setStyle(applicationMBean.getEstiloMenu());
            menuItem.setAjax(false);
            menuBar.getChildren().add(menuItem);
          }
        }
      }
    }
    return menuBar;
  }