@SuppressWarnings("unchecked")
  @Override
  public List<Afiliado> listaJson(PaginacionDTO paginacion, BuscaAfiliadoDTO busqueda) {

    String sql = "from Afiliado a";

    List<Map<String, Object>> lista = new ArrayList<Map<String, Object>>();
    Map<String, Object> datos = new HashMap<String, Object>();
    if (!busqueda.getDni().equals("")) {
      datos.put("1", "upper(a.persona.dni) like upper(:dni)");
    }
    if (!busqueda.getNombresApellidos().equals("")) {
      datos.put(
          "2",
          "(upper(a.persona.nombres) like upper(:nombres) or upper(a.persona.apellidos) like upper(:nombres))");
    }
    if (busqueda.getAfiliadoPadre() != null) {
      datos.put("1", "a.afiliadoPadre = :afiliadoPadre");
    }
    datos.put("3", "a.estado not in ('E')");
    lista.add(datos);

    sql += Util.query(lista);

    Map<String, Object> data = new HashMap<String, Object>();

    data.put("0", "a.persona.dni");
    data.put("1", "a.persona.apellidos");

    sql += Util.OrderByPagination(data, paginacion.getiSortCol_0(), paginacion.getsSortDir_0());

    Query q = em.createQuery(sql);

    if (!busqueda.getDni().equals("")) {
      q.setParameter("dni", "%" + busqueda.getDni() + "%");
    }
    if (!busqueda.getNombresApellidos().equals("")) {
      q.setParameter("nombres", "%" + busqueda.getNombresApellidos() + "%");
    }
    if (busqueda.getAfiliadoPadre() != null) {
      q.setParameter("afiliadoPadre", busqueda.getAfiliadoPadre());
    }

    if (paginacion.getiDisplayLength() != -1) {
      q.setMaxResults(paginacion.getiDisplayLength());
    }
    q.setFirstResult(paginacion.getiDisplayStart());

    try {
      return q.getResultList();
    } catch (NoResultException e) {
      return null;
    }
  }
  @Override
  public Number totalListaJson(BuscaAfiliadoDTO busqueda) {

    String sql = "select count(a) from Afiliado a";

    List<Map<String, Object>> lista = new ArrayList<Map<String, Object>>();
    Map<String, Object> datos = new HashMap<String, Object>();
    if (!busqueda.getDni().equals("")) {
      datos.put("1", "upper(a.persona.dni) like upper(:dni)");
    }
    if (!busqueda.getNombresApellidos().equals("")) {
      datos.put(
          "2",
          "(upper(a.persona.nombres) like upper(:nombres) or upper(a.persona.apellidos) like upper(:nombres))");
    }
    if (busqueda.getAfiliadoPadre() != null) {
      datos.put("1", "a.afiliadoPadre = :afiliadoPadre");
    }
    datos.put("3", "a.estado not in ('E')");
    lista.add(datos);

    sql += Util.query(lista);

    Query q = em.createQuery(sql);

    if (!busqueda.getDni().equals("")) {
      q.setParameter("dni", "%" + busqueda.getDni() + "%");
    }
    if (!busqueda.getNombresApellidos().equals("")) {
      q.setParameter("nombres", "%" + busqueda.getNombresApellidos() + "%");
    }
    if (busqueda.getAfiliadoPadre() != null) {
      q.setParameter("afiliadoPadre", busqueda.getAfiliadoPadre());
    }

    try {
      return (Number) q.getSingleResult();
    } catch (NoResultException e) {
      return null;
    }
  }