Ancora AJAX e form raccolta dati


#1

Salve a tutti,

Riprendo, in parte, un argomento per cui ho già chiesto lumi qualche
giorno fa.

Inizio esponendo quella che è la mia necessità ed, in un secondo
momento, illustrerò
la strada da me seguita e che, sebbene abbia prodotto qualcosa
all’apparenza soddisfacente,
mi lascia con qualche (magari :slight_smile: ) perplessità .

Ho un form nel quale raccolgo alcuni dati:

  • Nr badge
  • accompagnatore
  • tipo documento
  • nr documento
  • inizio
  • fine
  • nr abbinati
  • titolare
  • costo (default 0.0)

Ad eccezione di “fine”, sono tutti campi obbligatori.

Il flusso di lavoro è il seguente:

  1. Viene chiesto il nr badge
    1.1 se non esistono movimenti con “fine is null” abbinati al badge,
    viene creata una
    nuova istanza del modello “Trace” (quello preposto alla gestione dei
    dati di cui sopra)

1.2 se esiste un movimento con “fine is null” abbinati al badge, viene
recuperato il record e
ricreata l’istanza che lo ha generato.

2 Viene mostrato il form per la raccolta degli altri dati

2.1 Se l’unico campo da compilare rimasto è “fine”, alla conferma
(submit) viene calcolato
il costo della transazione, e viene offerta la possibilitÃ
all’utente di, evnetualmente,
variare il costo proposto.

Nel form per la raccolta dei dati, ad un certo punto, viene mostrato un
elenco dei possibili
titolari della transazione.
Selezionando il titolare, l’elenco viene sostituito con un riquadro che
fornisce un dettaglio
delle informazioni per il titolare selezionato.

Dove nasce il problema?

Una sola parola: AJAX.
Nello specifico, relativamente alla selezione del titolare della
transazione.

Quello a cui sono pervenuto ha soddisfatto tutti i requisiti, eccezion
fatta per la possibilitÃ
di variare il costo proposto per la transazione.

Il codice dell’action è il seguente, ed è il motivo delle mie
perplessità :

def ingresso_uscita
if request.xhr?
if !params[:badge].blank?
@trace = Trace.find_by_badge(params[:badge], :conditions => [‘fine
is null’])
if @trace.nil?
# Nuovo ingresso
@trace = Trace.new
@trace.badge = params[:badge]
@trace.inizio = Time.now
@trace.fine = nil
@trace.feriale = false
@trace.client_id = nil
@clienti = Client.find_by_sql(‘select * from clients where id
not in (select client_id from traces where fine is null)’)
session[:traccia] = @trace
else
# Definiamo l’uscita
@trace.fine = Time.now
@trace.save!
@cliente = Client.find(@trace.client_id)
session[:traccia] = @trace
end
else
# Abbiamo già cominciato ad inserire i dati
old = session[:traccia]
if params[:trace].blank?
@trace = old
else
@trace = Trace.new(params[:trace])
@trace.badge = old.badge
@trace.inizio = old.inizio
@trace.fine = old.fine
if params[:id].blank?
@trace.client_id = old.client_id
else
@trace.client_id = params[:id]
end
if !@trace.client_id.nil?
@cliente = Client.find(@trace.client_id)
@trace.nr_abbinati = 1 if @trace.nr_abbinati < 1
end
end
session[:traccia] = @trace
end
end
if @trace
begin
@trace.save! if @trace.valid?
parziale = !@trace.fine.nil? ? ‘transazione_confermata’ :
‘form_ingressouscita’
rescue Exception => e
@parametri = params
parziale = ‘errore’
raise e
end

render :update do |page|
  page.replace_html 'ingresso_uscita_form', :partial => parziale
end

end
end

Come potete vedere, è un Ces… pò incasinato.
E’ vero che si tratta di una prima stesura però.

A questo punto, avete qualche suggerimento da darmi? (no, l’ippica no
please :slight_smile: )

Ringrazio in anticipo per il Vs aiuto


#2

non ho proprio capito qual’è il tuo problema, cioè fai tutto il flusso
poi
selezioni il titolare e quindi cos’è che non riesci a fare in ajax? o
cosa
vorresti fare?

Andrea

----- Original Message -----
From: “Carmine M.” removed_email_address@domain.invalid
To: removed_email_address@domain.invalid
Sent: Thursday, March 08, 2007 5:29 PM
Subject: [ruby-it] Ancora AJAX e form raccolta dati

variare il costo proposto.
Una sola parola: AJAX.
def ingresso_uscita
@trace.feriale = false
end
if params[:id].blank?
end
end
A questo punto, avete qualche suggerimento da darmi? (no, l’ippica no
please :slight_smile: )

Ringrazio in anticipo per il Vs aiuto


Posted via http://www.ruby-forum.com/.



#3

mmm guarda se è per lo stile non ti posso esser molto di aiuto, su ajax
posso darti una mano ma sullo stile del metodo posso farci ben poco, se
hai
un problema particolare fammi sapere.

Saluti Andrea

----- Original Message -----
From: “Carmine M.” removed_email_address@domain.invalid
To: removed_email_address@domain.invalid
Sent: Thursday, March 08, 2007 8:46 PM
Subject: [ruby-it] Re: Ancora AJAX e form raccolta dati

cosa

Il tutto dovrebbe poggiare su AJAX, in vero più per necessità di
“studio” che reali.

Spero di essere stato più chiaro stavolta.


Posted via http://www.ruby-forum.com/.



#4

stb wrote:

non ho proprio capito qual’è il tuo problema, cioè fai tutto il flusso
poi

Beh, il problema è il codice che ne è uscito fuori. Non mi piace, mi
pare troppo confuso e macchinoso.
Mi piacerebbe, alla luce delle mie necessità , sapere in che modo Voi
avreste implementato la cosa.

selezioni il titolare e quindi cos’è che non riesci a fare in ajax? o
cosa
vorresti fare?

Quel che vorrei fare, in breve, è realizzare il form (di cui al
messaggio precedente) per l’accettazione
dei dati.

Il completamento delle informazioni avviene in 2 tempi.

  1. Tutti i dati tranne il campo “fine”.
  2. Il campo “fine” + possibilità di variare il costo suggerito per la
    transazione.

Il tutto dovrebbe poggiare su AJAX, in vero più per necessità di
“studio” che reali.

Spero di essere stato più chiaro stavolta.


#5

Ciao Andrea,

Grazie 1000 per la tua disponibilità !

stb wrote:

mmm guarda se è per lo stile non ti posso esser molto di aiuto, su ajax
posso darti una mano ma sullo stile del metodo posso farci ben poco, se

Eeeeeh esagerato! E’ brutto ma mica irrimediabile :wink: (stò scherzando
eh!)

hai
un problema particolare fammi sapere.

Approfitto subito allora. :slight_smile:

Ho avuto difficoltà con l’“in place editing” utilizzando un campo float.
Ricerche su google mi hanno portato ad una pagina su dev.rubyonrails.com
dove la cosa
veniva segnalata come bug.
Che tu sappia, c’è già un rimedio?

Io ho tamponato così:

def set_trace_costo
@item = Trace.find(params[:id])
@item.update_attribute(:costo, params[:value])
render :text => @item.costo.to_s
end

Ma và bene perchè ho un solo campo float da gestire.
Nel caso di n-mila float che si fà ? Ho pensato a:

def campi_float
campi.each do |attributo|
define_method(“set_oggetto_#{attributo}”) do
@item = Trace.find(params[:id])
@item.update_attribute(:costo, params[:value])
render :text => @item.costo.to_s
end
end
end

Mi fermo qui per non assillarti troppo :slight_smile:

Grazie ancora