Ayuda en conceto

Sigo con mi poryecto y me asaltan dudas, os explico: La empresa genera
una serie de tickets de reparacion (entre otros) que se llama polycom
kirk.

Actualmente tengo diseñado la vista paginada de los tickets, mostrando
en una tabla la informacion que me interesa saber de un vistazo rapido,
tengo una opcion para pasar los documentos a pdf (aun no operativa pues
no muestro ni por asomo todo lo que quiero mostrar aun, pero al menos
logro que le plugin carge el pdf con chorradas que le pongo)y un
buscador.

Ahora lo que me interesaria es poder seleccionar los tickets que
quisiera y tener la opcion de pasarlos a un excel en el que mostrara los
campos que me interesasen del ticket en cuestion. En otra parte de la
aplicacion ya genero una excell, pero o bien la genero de todos los
tickets de esa aplicacion o de los que encuentro tras la busqueda, nunca
a partir de una seleccion manual. Lo que me interesaria seria añadir un
checkbox y pasar a excel unicamente los que estan seleccionados.

¿Como lo planteo? Os explico lo que estoy pensando y me dais vuestra
opinion, pues no lo acabo de ver claro. Yo creo que tendre que añadir
una columna que se llame por ejemplo seleccion manual y en el index que
actualmente tengo algo asi:

########################
class KirksController < ApplicationController

GET /kirks

GET /kirks.xml

def index
if (params[:buscar].nil?) # params[:buscar]=nil #usease sino e

introducido nada en buscar
@kirks = Kirk.paginar(params[:page]) # pagino las incidencias
else
@kirks = Kirk.buscar(params[:buscar]) #si busco entonces me
mostrara la busqueda, #asi soluciono el inconveniente de que
will_paginate solo me permite una opcion de busuede en el campo options
end
end
###########################
añadir un if para el chekbox, si esta seleccionado @kirks seran los
kirks que tengan este campo marcado y a la hora de exportar decir lo
mismo, que exporte solo esos, algo asi:

<td>Cliente</td>        #Aqui el nombre de las tablas

<td>Estado</td>
<%=render :partial=> "incidence", :collection=>@kirks %>
Nivel

##############################

El problema que veo es que cada kirk tendra un checkbox y no sera una
variable como por ejemplo :buscar que solo evalua una, aqui tendria que
evaluarla en todos los kirks y no veo como hacerlo…alguna orientacion
porfavor

Hola Jose, si es que he llegado a entenderte bien, algo asi necesitarias
en
tu vista:

<% form_tag(resource_path, :onSubmit => ‘return
checkSelectedElements();’)
do %>

<% @tickets.each do |ticket| %>

<%= check_box_tag 'ticket_ids[]', ticket.id, false, :class => 'validate-one-required' %> .... ... <% end %>

Entonces en el controlador tendras disponible params[:ticket_ids] con
todos
los ids de los tickets que se han seleccionado, adicionalmente puedes
verificar que se haya seleccionado al menos uno mediante javascript:

function checkSelectedElements(){
selected = $$(’.validate-one-required’).any(function(e) {return
e.checked
== true;} );
if (selected) {
if (confirm(‘Seguro que deseas … estos registros?’)){
return true;
} else {
return false;
}
} else {
alert(‘No ha seleccionado ningun registro.’);
return false;
}
}

Saludos.

Gracias!! Este lunes intentare ponerme con ello y posteare dudas e
impresiones,

Un saludo

Jose vicente Ribera pellicer wrote:

Perdon pero, nunca he usado javascript, donde deberia ubicar esta
funcion?

En un archivo .js en el directorio public/scripts y cargarlo en la vista
correspondiente a la acción.

Hola, basicamente lo que tengo es una matriz de una columna y de N
filas, mi idea es agregar un checkbox en el margen izquierdo para
permitir al usuario marcar los que quiera y posteriormente poder pasar
los seleccionados a formato xls mostrando sus distintos campos.

Permiteme que te haga unas preguntas sobre tu codigo:

<% form_tag(resource_path, :onSubmit => ‘return
checkSelectedElements();’)
do %>

¿Esto va en la vista?¿Al principio andes de escribir el codigo de mi
tabla? ¿Que hace? esta claro que retorna los elemntos seleccionados,
pero no entiendo que pinta el resource_path

<% @tickets.each do |ticket| %>

<%= check_box_tag 'ticket_ids[]', ticket.id, false, :class => 'validate-one-required' %> .... ... <% end %>

Basicamente esto me va metiendo el id de los tickets en un vector para
almacenarlo

Entonces en el controlador tendras disponible params[:ticket_ids] con
todos
los ids de los tickets que se han seleccionado, adicionalmente puedes
verificar que se haya seleccionado al menos uno mediante javascript:

Uso will-paginate como paginador, asi que cada vez que cambio de pagina
los checkboxes se borran, existe alguna manera de conservar el valor de
params[:ticket_ids] para que pueda mantener el id de las paginas
pasadas??.

function checkSelectedElements(){
selected = $$(’.validate-one-required’).any(function(e) {return
e.checked
== true;} );
if (selected) {
if (confirm(‘Seguro que deseas … estos registros?’)){
return true;
} else {
return false;
}
} else {
alert(‘No ha seleccionado ningun registro.’);
return false;
}
}

Perdon pero, nunca he usado javascript, donde deberia ubicar esta
funcion?

Carlos Belizón wrote:

Jose vicente Ribera pellicer wrote:

Perdon pero, nunca he usado javascript, donde deberia ubicar esta
funcion?

En un archivo .js en el directorio public/scripts y cargarlo en la vista
correspondiente a la acción.

Gracias :wink:

Finalmente y tras no encontrar ninguna solucion lo que estoy haciendo es
algo parecido a un carrito de la compra, junto con cada ticket tengo un
boton de agregar a la excel, (estos trabajan con el metodo POST, se ve
que el checkbox trabaja con el GET y por eso se perdian los
seleccionados al pasar de pagina).

Ahora tengo una clase Cartticket:

class Cartticket
attr_reader :items

def initialize
@items = []
end

def add_ticket(ticket)
@items << ticket
end

end

En el controlador del ticket he agregado los metodos:
def add_to_cartticket ->Añade un ticket
def find_cartticket -> resetea la lista de tickets cada vez que
generamos una nueva sesion

def vaciar_cartticket

private

end

def expotar
@tickets=Cartticket.find(:all)
headers[‘Contenet-type’]=“aplication/vnd.ms-excel”
headers[‘Contenet-Disposition’]=‘attachment; filename=“report.xls”’
headers[‘Cache-Control’]=’’
end

Tickets seleccionados

    <% for item in @cartticket.items %>
  • <%=h item.id %>
  • <% end %>

<%= button_to "Vaciar" , :action => :vaciar_cartticket %>

<%= link_to ‘Exportar a Excel’, exportar_tickets_url %>

Perdon postee la respuesta antes de terminarla…

Finalmente y tras no encontrar ninguna solucion lo que estoy haciendo es
algo parecido a un carrito de la compra, junto con cada ticket tengo un
boton de agregar a la excel, (estos trabajan con el metodo POST, se ve
que el checkbox trabaja con el GET y por eso se perdian los
seleccionados al pasar de pagina).

Ahora tengo una clase Cartticket:

class Cartticket
attr_reader :items

def initialize
@items = []
end

def add_ticket(ticket)
@items << ticket
end

end

En el controlador del ticket he agregado los metodos:
def add_to_cartticket ->Añade un ticket
def find_cartticket -> resetea la lista de tickets cada vez que
cerramos la sesion
def vaciar_cartticket ->Igual que arriba pero sin tener que cerrar la
sesion

Y aqui el que creo que me produce el error:

def expotar
@[email protected](:all)
headers[‘Contenet-type’]=“aplication/vnd.ms-excel”
headers[‘Contenet-Disposition’]=‘attachment; filename=“report.xls”’
headers[‘Cache-Control’]=’’
end

Por el mensaje de error que aparece parece, pues @tickets esta vacio:

You have a nil object when you didn’t expect it!
The error occurred while evaluating nil.state_idl

Extracted source (around line #2):

1:


2: <%=ticket.state_idl%>
3: <%=ticket.client_id%>
4: <%=ticket.state_id%>
5:

El fichero de rutas esta modificado tal que asi:
map.resources :tickets, :collection => { :exportar=>:get,
:auto_complete_for_ticket_province => :get,
:auto_complete_for_ticket_city => :get,
:auto_complete_for_ticket_zip => :get,
:auto_complete_for_ticket_adquired_in => :get }

Para permitir el render :partial, que queda en exportar.html.erb

<td>adios</td>

<td>dew</td>
<%=render :partial=> "ticket", :collection=>@tickets %>
hola

end

Por otro lado esta es la vista de donde situo el enlace que me debe
lanzar la excel

Tickets seleccionados

    <% for item in @cartticket.items %>
  • <%=h item.id %>
  • <% end %>

<%= button_to "Vaciar" , :action => :vaciar_cartticket %>

<%= link_to ‘Exportar a Excel’, exportar_tickets_url %>

Si has llegado hasta aqui, que menos que darte las gracias por leerme.
El problema es que no “recoge”
los tickets que tengo almacenados, por eso creo que en exportar esta
linea
esta mal: @[email protected](:all).

Me hechais un cable porfi?

Un saludo

Bueno, de momento he creado una vista con una tabla que muestra los
tickets seleccionados. De momento me conformo con eso aunque para psarlo
a excel no tenga mas remedio que copy/paste