Forum: Italian Ruby user group Ancora AJAX e form raccolta dati

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Carmine M. (Guest)
on 2007-03-08 18:29
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 :) ) 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 :) )

Ringrazio in anticipo per il Vs aiuto
stb (Guest)
on 2007-03-08 19:03
(Received via mailing list)
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 :) )
>
> Ringrazio in anticipo per il Vs aiuto
>
> --
> Posted via http://www.ruby-forum.com/.
>


--------------------------------------------------------------------------------
Carmine M. (Guest)
on 2007-03-08 21:46
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.
stb (Guest)
on 2007-03-09 02:51
(Received via mailing list)
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/.
>


--------------------------------------------------------------------------------
Carmine M. (Guest)
on 2007-03-09 08:18
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 ;) (stò scherzando
eh!)

> hai
> un problema particolare fammi sapere.

Approfitto subito allora.  :)

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 :)

Grazie ancora
This topic is locked and can not be replied to.