Joomla.it Forum

Componenti per Joomla! => Gestione Form => : joomba 25 Nov 2011, 22:12:46

: chronoform motore di calcolo differenza date calendario
: joomba 25 Nov 2011, 22:12:46
Ciao ragazzi,
sto cercando di realizzare un motore di calcolo utilizzando chronoforms, ma non riesco a trovare come collegare i vari campi, spiego meglio come deve essere composto il form che l'utente deve visualizzare :
1.- campo calendario : l'utente seleziona la data di arrivo presso un bed breakfast + l'ora di arrivo
2.- campo calendario : l'utente seleziona la data di partenza + l'ora di partenza
3.- campo dove viene visualizzato il totale numero di giorni
4.- campo da flaggare Prezzo Bassa stagione
5.- campo da flaggare Prezzo Alta stagione
6.- campo Totale Prezzo ( dato dal totale numero di giorni x la scelta del prezzo fisso bassa o alta stagione)
7.- bottone submit per procedere alla prenotazione


Ora dal punto 4 al 7 ho capito come fare, ma non riesco a capire come far calcolare il numero di giorni dalla selezione di 2 calendari.


C'e' qualche post che parla di questo ? una dritta ??? ....
grazie per le risposte che potrete darmi


joomba






: Re:chronoform motore di calcolo con calendario
: vales 26 Nov 2011, 12:54:55
Usa una funzione javascript chiamata dal secondo campo calendario che assegna il valore al campo giorni.

Lo stesso per il totale prezzo con una funzione chiamata dai prezzi
: Re:chronoform motore di calcolo con calendario
: joomba 26 Nov 2011, 19:56:10
sto impazzendo.... non riesco a trovare la funzione che fa calcolare la differenza tra le date
: Re:chronoform motore di calcolo con calendario
: vales 26 Nov 2011, 20:15:46
se cerchi con google per "differenza date javascript" ne trovi diverse già pronte
: Re:chronoform motore di calcolo con calendario
: joomba 26 Nov 2011, 21:49:32
Ciao Vales, ti ringrazio per la risposta. Ho trovato questo codice che posto qui di seguito


----------------------------------------------------------

<script>
function controllo_data(stringa){
    var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
    if (!espressione.test(stringa))
    {
        return false;
    }else{
        anno = parseInt(stringa.substr(6),10);
        mese = parseInt(stringa.substr(3, 2),10);
        giorno = parseInt(stringa.substr(0, 2),10);
       
        var data=new Date(anno, mese-1, giorno);
        if(data.getFullYear()==anno && data.getMonth()+1==mese && data.getDate()==giorno){
            return true;
        }else{
            return false;
        }
    }
}






function confronta_data(data1, data2){
   // controllo validità formato data
    if(controllo_data(data1) &&controllo_data(data2)){
      //trasformo le date nel formato aaaammgg (es. 20081103)
        data1str = data1.substr(6)+data1.substr(3, 2)+data1.substr(0, 2);
      data2str = data2.substr(6)+data2.substr(3, 2)+data2.substr(0, 2);
      //controllo se la seconda data è successiva alla prima
        if (data2str-data1str<0) {
            alert("La data iniziale deve essere precedente quella finale");
        }else{
         alert("ok");
        }
    }else{
        alert("Il formato data deve essere gg/mm/aaaa");
    }
}


confronta_data("20/02/2008", "04/03/2008");
</script>


-------------------




ma non ho capito come devo inserirlo in questo di chronoform, cioe' il calcolo dei giorni deve apparire in automatico, questo il codice del chronoform





<div class="ccms_form_element cfdiv_header" id="_h1_bb_lowcost_h1___container_div"><h1>BB Lowcost</h1><div class="clear"><><>


<div class="ccms_form_element cfdiv_datetime" id="data_arrivo_container_div"><label>Data arrivo</label><input maxlength="150" size="16" class=" validate['required'] cf_date_picker" title="" label_over="0" hide_label="0" type="text" value="" name="arrivo" />
<div class="clear"><><div id="error-message-arrivo"><><>


<div class="ccms_form_element cfdiv_datetime" id="data_partenza_container_div"><label>Data partenza</label><input maxlength="150" size="16" class=" validate['required'] cf_date_picker" title="" label_over="0" hide_label="0" type="text" value="" name="partenza" />
<div class="clear"><>


<div id="error-message-partenza"><><><div class="ccms_form_element cfdiv_text" id="totale_giorni_container_div"><label>Totale giorni</label><input maxlength="150" size="30" class=" validate['required','alphanum']" title="" label_over="0" hide_label="0" type="text" value="" name="totale_giorni" />
<div class="clear"><>


<div id="error-message-totale_giorni"><><><div class="ccms_form_element cfdiv_radio" id="tipologia_container_div"><label>Tipologia</label><input type="hidden" name="tipologia" value="" alt="ghost" />
<input type="radio" name="tipologia" id="tipologia_bassastagione" title="" value="BassaStagione" class="validate['required']">
<label for="tipologia_bassastagione">BassaStagione</label>
<input type="radio" name="tipologia" id="tipologia_altastagione" title="" value="AltaStagione" class="validate['required']">
<label for="tipologia_altastagione">AltaStagione</label>
<div class="clear"><><div id="error-message-tipologia"><><>


<div class="ccms_form_element cfdiv_text" id="totale_prezzo_container_div"><label>Totale Prezzo</label><input maxlength="150" size="30" class=" validate['required','number']" title="" label_over="0" hide_label="0" type="text" value="" name="totale_prezzo" />
<div class="clear"><><div id="error-message-totale_prezzo"><><>


<div class="ccms_form_element cfdiv_text" id="email_container_div"><label>Email</label><input maxlength="150" size="30" class=" validate['required','email']" title="" label_over="0" hide_label="0" type="text" value="" name="email" />
<div class="clear"><><div id="error-message-email"><><>


<div class="ccms_form_element cfdiv_text" id="ripeti_email_container_div"><label>Ripeti email</label><input maxlength="150" size="30" class=" validate['required','email']" title="" label_over="0" hide_label="0" type="text" value="" name="email1" />
<div class="clear"><><div id="error-message-email1"><><>


<div class="ccms_form_element cfdiv_text" id="cognome_e_nome_container_div"><label>Cognome e Nome</label><input maxlength="150" size="30" class=" validate['required','alphanum']" title="" label_over="0" hide_label="0" type="text" value="" name="nome" />
<div class="clear"><><div id="error-message-nome"><><>


<div class="ccms_form_element cfdiv_submit" id="input_submit_10_container_div"><input name="input_submit_10" class="" value="Prenota" type="submit" />
<div class="clear"><><div id="error-message-input_submit_10"><><>


-----------------------------


ti ringrazio se potrai darmi un idea di come fare...
joomba







: Re:chronoform motore di calcolo differenza date calendario
: joomba 28 Nov 2011, 15:46:09
acc... non ne cavo piede.... dove posso cercare un po' di istruzione in merito ?
: Re:chronoform motore di calcolo differenza date calendario
: joomba 02 Dec 2011, 11:42:37
ancora non ho risolto... qualcuno mi da una mano ?
: Re:chronoform motore di calcolo differenza date calendario
: vales 08 Dec 2011, 09:57:06
Dal codice che vedo stai usando chronoforms v4

il javascripts lo devi inserire senza i tag <script > iniziali e finali in una action Load Js che inserirai in On Load all'inizio.

Dovrai poi modificare manualmente il codice generato dal form inserendo la chiamata alla funzione javascript confronta_data nel campo della seconda data aggiungendo alla input

onchange="confronta_data();"

in questo modo se tutto è ok dopo aver inserito la data cliccherai fuori dal campo otterrai l'effetto.
: Re:chronoform motore di calcolo differenza date calendario
: joomba 09 Dec 2011, 12:48:48
Ciao Vales, ti ringrazio per la risposta.
Ti confermo che sto utilizzando l'ultima versione Chronoform V4.
Allora, ho seguito i passi che mi hai indicato, ma non riesco a farlo funzionare. Ho inserito anche un campo "Totale giorni" , ma non ho capito come impostare il codice in questo campo.

Inoltre quando ricevo l'email , nell'elenco delle voci mi riporta anche la voce "Riscrivi email" con l'indirizzo email , come faccio per disabilitare l' invio di questa voce ?

Il codice risultato del form e' il seguente:



<div class="ccms_form_element cfdiv_header" id="_h1_lowcost_h1___container_div"><h1>Lowcost</h1><div class="clear"><><>


<div class="ccms_form_element cfdiv_datetime" id="arrivo_container_div"><label>Arrivo</label><input maxlength="150" size="16" class=" validate['required'] cf_date_picker" title="" label_over="0" hide_label="0" type="text" value="" name="data1" />
<div class="clear"><><div id="error-message-data1"><><>


<div class="ccms_form_element cfdiv_datetime" id="partenza_container_div"><label>Partenza</label><input maxlength="150" size="16" class=" validate['required'] cf_date_picker" title="" label_over="0" hide_label="0" type="text" value="" name="data2" onchange="confronta_data();" />
<div class="clear"><><div id="error-message-data2"><><>


<div class="ccms_form_element cfdiv_text" id="totale_giorni_container_div"><label>Totale giorni</label><input maxlength="150" size="30" class=" validate['number']" title="" label_over="0" hide_label="0" type="text" value="" name="totale_giorni" />
<div class="clear"><><div id="error-message-totale_giorni"><><>


<div class="ccms_form_element cfdiv_text" id="prezzo_container_div"><label>Prezzo</label><input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="prezzo" />
<div class="clear"><><div id="error-message-prezzo"><><>


<div class="ccms_form_element cfdiv_text" id="email_container_div"><label>Email</label><input maxlength="150" size="30" class=" validate['required','email']" title="" label_over="0" hide_label="0" type="text" value="" name="email" />
<div class="clear"><><div id="error-message-email"><><>


<div class="ccms_form_element cfdiv_text" id="riscrivi_email_container_div"><label>Riscrivi email</label><input maxlength="150" size="30" class=" validate['required','email']" title="" label_over="0" hide_label="0" type="text" value="" name="email1" />
<div class="clear"><><div id="error-message-email1"><><>


<div class="ccms_form_element cfdiv_text" id="cognome_e_nome_container_div"><label>Cognome e Nome</label><input maxlength="150" size="30" class=" validate['required','alphanum']" title="" label_over="0" hide_label="0" type="text" value="" name="nome" />
<div class="clear"><><div id="error-message-nome"><><>


<div class="ccms_form_element cfdiv_submit" id="prenota_container_div"><input name="prenota" class="" value="Prenota" type="submit" />
<div class="clear"><><div id="error-message-prenota"><><>




-------
ti ringrazio se potrai darmi una risposta appena ti e' possibile, puoi vedere il form di prova a questo link
http://joomba.altervista.org/joomla/index.php?option=com_chronoforms&chronoform=Lowcost (http://joomba.altervista.org/joomla/index.php?option=com_chronoforms&chronoform=Lowcost)


saluti
Joomba
: Re:chronoform motore di calcolo differenza date calendario
: joomba 09 Dec 2011, 15:20:22
un altro errore "fastidioso" che mi compare e' che se ad esempio gli indirizzi email inseriti sono diversi, mi segnala giustamente l'errore , ma nei campi relativi compare visibile questo codice


 <script type='text/javascript'> <!-- var prefix = 'ma' + 'il' + 'to'; var path = 'hr' + 'ef' + '='; var addy63148 = 'test' + '@'; addy63148 = addy63148 + 'test' + '.' + 'com'; document.write('<a ' + path + '\'' + prefix + ':' + addy63148 + '\'>'); document.write(addy63148); document.write('<\/a>'); //-->\n </script><script type='text/javascript'> <!-- document.write('<span style=\'display: none;\'>'); //--> </script>Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo. <script type='text/javascript'> <!-- document.write('</'); document.write('span>'); //--> </script>


come lo posso disabilitare ?
: Re:chronoform motore di calcolo differenza date calendario
: vales 09 Dec 2011, 19:36:25
Penso sia causato da un errore di sintassi nel javascript.

Prova visualizzare la pagina sorgente del browser, quando da quel risultato, per visualizare l'errore.
: Re:chronoform motore di calcolo differenza date calendario
: joomba 09 Dec 2011, 19:50:36
ma ti riferisci al campo email ?... questo e' quello che si visualizza



<span class="cf_alert"><ol><li>Le Email non sono uguali</li><li>Le Email non sono uguali</li></ol></span><form action="http://joomba.altervista.org/joomla/?chronoform=Lowcost&amp;event=submit" name="Lowcost" id="chronoform_Lowcost" method="post" class="Chronoform"><div class="ccms_form_element cfdiv_header" id="_h1_lowcost_h1___container_div"><h1>Lowcost</h1><div class="clear"><><><div class="ccms_form_element cfdiv_datetime" id="arrivo_container_div"><label>Arrivo</label><input maxlength="150" size="16" class=" validate['required'] cf_date_picker" title="" label_over="0" hide_label="0" type="text"  name="data1" value="2011-12-10" />
<div class="clear"><><div id="error-message-data1"><><><div class="ccms_form_element cfdiv_datetime" id="partenza_container_div"><label>Partenza</label><input maxlength="150" size="16" class=" validate['required'] cf_date_picker" title="" label_over="0" hide_label="0" type="text"  name="data2" value="2011-12-11" />
<div class="clear"><><div id="error-message-data2"><><><div class="ccms_form_element cfdiv_text" id="totale_giorni_container_div"><label>Totale giorni</label><input maxlength="150" size="30" class=" validate['number']" title="" label_over="0" hide_label="0" type="text" value="" name="totale_giorni" />
<div class="clear"><><div id="error-message-totale_giorni"><><><div class="ccms_form_element cfdiv_text" id="prezzo_container_div"><label>Prezzo</label><input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="prezzo" />
<div class="clear"><><div id="error-message-prezzo"><><><div class="ccms_form_element cfdiv_text" id="email_container_div"><label>Email</label><input maxlength="150" size="30" class=" validate['required','email']" title="" label_over="0" hide_label="0" type="text"  name="email" value="
 <script type='text/javascript'>
 <!--
 var prefix = 'ma' + 'il' + 'to';
 var path = 'hr' + 'ef' + '=';
 var addy46674 = 'df.web' + '@';
 addy46674 = addy46674 + 'libero' + '.' + 'it';
 document.write('<a ' + path + '\'' + prefix + ':' + addy46674 + '\'>');
 document.write(addy46674);
 document.write('<\/a>');
 //-->\n </script><script type='text/javascript'>
 <!--
 document.write('<span style=\'display: none;\'>');
 //-->
 </script>Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo.
 <script type='text/javascript'>
 <!--
 document.write('</');
 document.write('span>');
 //-->
 </script>" />
<div class="clear"><><div class="error-message">Le Email non sono uguali<><><div class="ccms_form_element cfdiv_text" id="riscrivi_email_container_div"><label>Riscrivi email</label><input maxlength="150" size="30" class=" validate['required','email']" title="" label_over="0" hide_label="0" type="text"  name="email1" value="
 <script type='text/javascript'>
 <!--
 var prefix = 'ma' + 'il' + 'to';
 var path = 'hr' + 'ef' + '=';
 var addy4968 = 'info' + '@';
 addy4968 = addy4968 + 'navi-veloci' + '.' + 'it';
 document.write('<a ' + path + '\'' + prefix + ':' + addy4968 + '\'>');
 document.write(addy4968);
 document.write('<\/a>');
 //-->\n </script><script type='text/javascript'>
 <!--
 document.write('<span style=\'display: none;\'>');
 //-->
 </script>Questo indirizzo email è protetto dagli spambots. E' necessario abilitare JavaScript per vederlo.
 <script type='text/javascript'>
 <!--
 document.write('</');
 document.write('span>');
 //-->
 </script>" />
<div class="clear"><><div class="error-message">Le Email non sono uguali<><><div class="ccms_form_element cfdiv_text" id="cognome_e_nome_container_div"><label>Cognome e Nome</label><input maxlength="150" size="30" class=" validate['required','alphanum']" title="" label_over="0" hide_label="0" type="text"  name="nome" value="test" />
<div class="clear"><><div id="error-message-nome"><><><div class="ccms_form_element cfdiv_submit" id="prenota_container_div"><input name="prenota" class="" value="Prenota" type="submit" />
<div class="clear"><><div id="error-message-prenota"><><><input type="hidden" name="56083fabd67fb13088e6779c02858d47" value="1" /></form>



: Re:chronoform motore di calcolo differenza date calendario
: joomba 09 Dec 2011, 19:53:01
la cosa strana che ho notato adesso, e' che l'errore mi viene visualizzato solo nella home page, ossia quando visualizzo l'articolo dove ho inserito il codice di richiamo del form {chronoforms}Lowcost{/chronoforms} , potrebbe essere questo una causa ?

: Re:chronoform motore di calcolo differenza date calendario
: joomba 09 Dec 2011, 19:57:00
ma per il "calcolo della differenza tra date" invece puoi darmi un consiglio per risolvere il problema ?
: Re:chronoform motore di calcolo differenza date calendario
: vales 09 Dec 2011, 20:00:40
occorre una funzione javascript che faccia quel calcolo, anche quella la trovi sul web.
: Re:chronoform motore di calcolo differenza date calendario
: joomba 09 Dec 2011, 21:41:06

Dal codice che vedo stai usando chronoforms v4

il javascripts lo devi inserire senza i tag <script > iniziali e finali in una action Load Js che inserirai in On Load all'inizio.

Dovrai poi modificare manualmente il codice generato dal form inserendo la chiamata alla funzione javascript confronta_data nel campo della seconda data aggiungendo alla input

onchange="confronta_data();"

in questo modo se tutto è ok dopo aver inserito la data cliccherai fuori dal campo otterrai l'effetto.





scusa.... ma i codici li ho trascritti cosi' come mi hai spiegato, ma sicuramente mi sono perso da qualche parte.... come faccio a visualizzare il calcolo della differenza dei giorni ? dove devo inserire il codice ?

: Re:chronoform motore di calcolo differenza date calendario
: vales 09 Dec 2011, 22:02:24
Mi sono perso anch'io. Mi hai proposto le funzioni che confrontano le date non quelle che calcolano la differenza. Va trovata una funzione che svolge quel compito.
: Re:chronoform motore di calcolo differenza date calendario
: joomba 09 Dec 2011, 22:11:37
ho trovato questo codice....

<script language="javascript" type="text/javascript">
<!--
function days_between(date1, date2) {


// The number of milliseconds in one day
var ONE_DAY = 1000 * 60 * 60 * 24


// Convert both dates to milliseconds
var date1_ms = date1.getTime()
var date2_ms = date2.getTime()


// Calculate the difference in milliseconds
var difference_ms = Math.abs(date1_ms - date2_ms)


// Convert back to days and return
return Math.round(difference_ms/ONE_DAY)


}


//-->
</script>








..............con il richiamo interno pagina come segue.....








<script language="javascript" type="text/javascript">
<!--


// Store the current date and time
var current_date = new Date()


// Store the date of the next New Year's Day
var new_years_date = new Date()
new_years_date.setYear(new_years_date.getFullYear() + 1)
new_years_date.setMonth(0)
new_years_date.setdate(1)


// Call the days_between function
var days_left = days_between(current_date, new_years_date)


// Write the result to the page
if (days_left> 1) {
document.write("<strong>Mancano " + days_left + " giorni alla fine
dell'anno.</strong>") }
else {
document.write("<strong>Manca " + days_left + " giorni alla fine
dell'anno.</strong>") }


//-->
</script>




ho provato diverse soluzioni... ma nisba
: Re:chronoform motore di calcolo differenza date calendario
: vales 10 Dec 2011, 01:28:09
Mi sembra vada bene la prima funzione l'altra è per calcolare quanti giorni mancano alla fine dell'anno.

Va però modificata ora vedo di farla funzionare.
: Re:chronoform motore di calcolo differenza date calendario
: joomba 10 Dec 2011, 08:43:58
ok ti ringrazio per l'aiuto
: Re:chronoform motore di calcolo differenza date calendario
: joomba 11 Dec 2011, 11:53:26
ciao Vales hai qualche news ?
: Re:chronoform motore di calcolo differenza date calendario
: joomba 15 Dec 2011, 16:52:44
 
Mi sembra vada bene la prima funzione l'altra è per calcolare quanti giorni mancano alla fine dell'anno.

Va però modificata ora vedo di farla funzionare.



ciao Vales, scusami per il disturbo, hai fatto qualche test di prova ? sono ancora fermo, non riesco ad andare avanti. Ti ringrazio se mi dai qualche ulteriore info.
: Re:chronoform motore di calcolo differenza date calendario
: vales 19 Dec 2011, 06:58:02
Il problema sono i campi data time box che non permettono di inserire il richiamo alla funzione javascripts

Ho provato un nuovo form con due campi normali in cui inserisco le date e tutto è OK.

Questo il codice dei campi

:
<div class="ccms_form_element cfdiv_text" id="data_1_container_div"><label>Data 1</label><input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="data_1" />
<div class="clear"></div><div id="error-message-data_1"></div></div><div class="ccms_form_element cfdiv_text" id="data_2_container_div"><label>Data 2</label><input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="data_2" onchange="giorni_differenza(this.form);")/>
<div class="clear"></div><div id="error-message-data_2"></div></div><div class="ccms_form_element cfdiv_text" id="differenza_date_container_div"><label for="diff">Differenza date</label><input id="diff" maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="diff" />
<div class="clear"></div><div id="error-message-diff"></div></div><div class="ccms_form_element cfdiv_submit" id="input_submit_5_container_div"><input name="input_submit_5" class="" value="Submit" type="submit" />
<div class="clear"></div><div id="error-message-input_submit_5"></div></div>

questo il codice javascript

:
function controllo_data(stringa){
    var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
    if (!espressione.test(stringa)) {
        return false;
    }else{
        anno = parseInt(stringa.substr(6,4),10);
        mese = parseInt(stringa.substr(3, 2),10);
        giorno = parseInt(stringa.substr(0, 2),10);
       
        var data=new Date(anno, mese-1, giorno);
        if(data.getFullYear()==anno && data.getMonth()+1==mese && data.getDate()==giorno){
            return true;
        }else{
            return false;
        }
    }
}

function confronta_data(data1, data2){
    // controllo validità formato data
    if(controllo_data(data1) && controllo_data(data2)){
//trasformo le date nel formato aaaammgg (es. 20081103)
data1str = data1.substr(6,4)+data1.substr(3, 2)+data1.substr(0, 2);
data2str = data2.substr(6,4)+data2.substr(3, 2)+data2.substr(0, 2);
        //controllo se la seconda data è successiva alla prima

//document.write(data1str);
//document.write(data2str-data1str);

        if ((data2str-data1str)<0) {
            alert("La data iniziale deve essere precedente quella finale");
        }else{
            alert("ok");
        }
    }else{
        alert("Il formato data deve essere gg/mm/aaaa");
    }
}

function giorni_differenza(form){

//document.write("sono qui");

var data1=form.elements['data_1'].value;
var data2=form.elements['data_2'].value;
//document.write(data1);
    if(!controllo_data(data1) || !controllo_data(data2)){
        alert('Inserire le date nel formato gg/mm/aaaa');
        return -1;
    }

/*    if(!confronta_data(data1,data2)){
        alert('La data di inizio deve essere precedente quella di fine');
        return -1;
    }*/

    anno1 = parseInt(data1.substr(6,4),10);
    mese1 = parseInt(data1.substr(3, 2),10);
    giorno1 = parseInt(data1.substr(0,2),10);
     
    anno2 = parseInt(data2.substr(6,4),10);
    mese2 = parseInt(data2.substr(3, 2),10);
    giorno2 = parseInt(data2.substr(0,2),10);

    var dataok1=new Date(anno1, mese1-1, giorno1);
    var dataok2=new Date(anno2, mese2-1, giorno2);
   
    differenza = dataok2-dataok1;   
    giorni_differenza = new String(differenza/86400000);
    form.elements['diff'].value=giorni_differenza;

    alert(giorni_differenza+' giorni di differenza');
    return giorni_differenza;
}



L'alternativa per usare Data time box potrebbe essere inserire il richiamo al javascripts nel campo differenza data con onclick="giorni_differenza(this.form);")
: Re:chronoform motore di calcolo differenza date calendario
: joomba 19 Dec 2011, 12:30:53
ciaoo Vales !!!! ti ringrazio immensamente, ho provato e funziona perfettamente.
L'unica cosa e' che inserendo la data in modo manuale, vorrei rendere obbligatorio la tipologia data da scrivere cioe' far visualizzare un avviso che blocca l'operazione e avverte l'utente che nel caso venga scritta la data in modo diverso,  viene visualizzato un avviso di questo tipo "la data inserita e' errata ed il modo giusto da inserire e' ad es. 10/10/2011". Ho attivato il Tooltip , ma a parte il fatto che l'utente deve cliccare appositamente il "?" per capire, preferirei velocizzare con un avviso. Come posso fare ? 
grazie !!!!
joomba


: Re:chronoform motore di calcolo differenza date calendario
: vales 19 Dec 2011, 19:42:03
Gli script javascript già controllano che le due date abbiano il formato gg/mm/aaaa.
: Re:chronoform motore di calcolo differenza date calendario
: joomba 05 Jan 2012, 14:48:20
Ciao Vales, innanzitutto Auguri di Buon Anno anche se in ritardo ( essendo rientrato oggi al lavoro).
Allora ho testato i codici come mi hai indicato e funzionano, ma ora che li ho caricati online, inserendo le date vengono calcolate a video, ma quando ricevo l'email del form ottengo questa risposta
-------------------------

Arrivo    {data1}
Partenza    {data2}
Totale giorni    {totale_giorni}
Email    joomba@tiscali.it
Riscrivi email    joomba@tiscali.it
Cognome e Nome   joomba
---------------------------


quindi non vengono riportati i dati che vengono inseriti dall'utente. Da cosa puo' dipendere ? Ti ringrazio per l'info che potrai darmi



: Re:chronoform motore di calcolo differenza date calendario
: vales 05 Jan 2012, 18:26:32
Non riconosce come esistenti quei campi.

Controlla di usare nell'email gli stessi nomi dei campi del form.

Es. io avevo usato data_1 e tu data1.
: Re:chronoform motore di calcolo differenza date calendario
: joomba 06 Jan 2012, 16:55:01
ho risolto parzialmente il problema, cancellando tutto e riscrivendo totalmente il form, ma ottengo l'errore solo nel campo della differenza date, infatti non mi visualizza nella email:


Data 1 10/02/2012
Data 2 12/02/2012
Differenza date {differenza_date}
Email joomba@tiscali.it
Cognome e Nome joomba

Mentre online, effettuando l'inserimento delle date, il calcolo lo visualizzo solo per la prima volta. Se correggo una delle 2 date inserite, il calcolo della differenza non viene piu' visualizzato.


Vorrei provare ad inserire un bottone di "calcola" per calcolare quindi il risultato della differenza delle date per il prezzo del soggiorno. Questi risultati voglio farli comparire in 2 campi differenti ossia differenza date e totale prezzo.


Con il bottone di "calcola" cosi si dovrebbe eliminare il calcolo automatico cliccando con il mouse come nella prova precedente. Come posso fare quindi per aggiungere questo bottone di calcolo ?






: Re:chronoform motore di calcolo differenza date calendario
: joomba 06 Jan 2012, 18:48:10
come diceva archimede dei fumetti ???..... Eureka !
bene ho risolto il problema , ora ricevo tutti i dati perfettamente via email, erano errate alcune parole di sintassi invece che "differenza_date" la parola esatta era "diff" , che io distrattamente non avevo visto inizialmente.


Ora mi rimane di inserire il bottone di calcolo prezzo
: Re:chronoform motore di calcolo differenza date calendario
: joomba 16 Jan 2012, 18:33:43
Ciao Vales,
sto cercando di portare a termine il lavoro iniziato, ho inserito un "radio box" con 2 opzioni di scelta, ognuna di queste opzioni ha un prezzo diverso dall'altro, quindi l'utente scegliendo l'opzione che desidera, questa deve calcolare automaticamente il totale nel campo successivo. La moltiplicazione deve avvenire tra il valore del campo "radio box" scelto e il totale dei giorni che risulta dalla differenza tra data arrivo e partenza di cui ai precedenti codici gia' illustrati.
Puoi darmi una mano ?.. ti ringrazio
: Re:chronoform motore di calcolo differenza date calendario
: vales 16 Jan 2012, 19:34:34
Metti il richiamo (onchange) ad una funzione javascript nel radio che quando modificato compie la moltiplicazione del valore del radio con quello dei giorni.

Dovrai definire la funzione e sei a dama.
: Re:chronoform motore di calcolo differenza date calendario
: joomba 27 Jan 2012, 10:19:47
Ciao Vales...
mi sono dinuovo perso... diversi tentativi ma non ho capito come impostare la funzione e dove inserirla mi dai una dritta appena hai un attimo di tempo ? ti ringrazio
: Re:chronoform motore di calcolo differenza date calendario
: joomba 31 Jan 2012, 17:19:10
ciao Vales... scusa se insisto... hai qualche dritta da darmi per capire come inserire onchange e dove trovare la funzione adatta ?
grazie
: Re:chronoform motore di calcolo differenza date calendario
: joomba 04 Feb 2012, 11:00:41

Ciao Vales, ho trovato questo codice in una tua guida.... adattandolo al mio lavoro potrebbe essere quello che mi serve.... ma la guida fa riferimento alla versione precedente di chronoform, mentre in V4 devo inserirla in una nuova "Load js" ? Come la lego alla scelta radio con onchange ?


--------
function updatethis(form) {
      form.elements['Field3'].value =  form.elements['Field1'].value * form.elements['Field2'].value);
       }
--------------

: Re:chronoform motore di calcolo differenza date calendario
: joomba 04 Feb 2012, 11:44:54
ok ho capito per quanto riguarda la funzione.... ma il valore (nel mio caso il prezzo) del campo radio come e dove lo inserisco ?
: Re:chronoform motore di calcolo differenza date calendario
: joomba 04 Feb 2012, 12:33:48

dunque.... ricapitolando, vediamo se ho ben capito ( o quasi )....

creo una nuova "Load js" che vado a inserire sotto la precedente "Load js" in On LOad
inserisco questo codice:
------
function updatethis(form) {
     form.elements['prezzo'].value =  form.elements['prezzo-1'].value + form.elements['totale_giorni'].value);
      }
-------------

poi inserisco il richiamo nel radio
---- 
name="prezzo-1" onChange="updatethis(this.form);">

e nel campo del risultato inserisco

<input type="text" name="prezzo">


.... ho provato ma non funzia ....

: Re:chronoform motore di calcolo differenza date calendario
: vales 04 Feb 2012, 18:40:44
Non è necessario usaare due Load JS basta che tu metta tutte le funzioni in un'unica Load JS
: Re:chronoform motore di calcolo differenza date calendario
: joomba 04 Feb 2012, 19:11:31
Non è necessario usaare due Load JS basta che tu metta tutte le funzioni in un'unica Load JS


.... ops... ma il codice relativo ai prezzi dove lo scrivo ??? devo creare un codice come questo che segue ?

function updatethis(form) {[/size]      var costo = 0;      if ((form.elements['asole'].value=="l_sup") || (form.elements['asole'].value=="l_inf")) costo =(form.elements['base'].value * 2.5);     
: Re:chronoform motore di calcolo differenza date calendario
: vales 04 Feb 2012, 19:19:53
Il codice lo hai già creato

:
function updatethis(form) {
     form.elements['prezzo'].value =  form.elements['prezzo-1'].value + form.elements['totale_giorni'].value);
      }

lo devi aggiungere nell'unica Load JS.

Però non mi convince il nome dei radio prezzo-1, meglio non usare il segno meno nei campi nome metti prezzo1.
: Re:chronoform motore di calcolo differenza date calendario
: joomba 04 Feb 2012, 19:27:17
ok per prezzo1 , ma volevo intendere i valori veri e propri... cioe il prezzo ad esempio euro 50 al giorno, come e dove lo scrivo ?
: Re:chronoform motore di calcolo differenza date calendario
: joomba 04 Feb 2012, 19:34:15
allora ok per calcolare il prezzo1 del radio, ma per far calcolare anche il prezzo2 della seconda opzione radio ? devo duplicare il codice in questo modo ?


function updatethis(form) {[/size]     form.elements['prezzo'].value =  form.elements['prezzo2'].value + form.elements['totale_giorni'].value);      }
: Re:chronoform motore di calcolo differenza date calendario
: vales 04 Feb 2012, 19:48:27
Ad ogni  campo radio assegni un value uguale al prezzo

:
<input type="radio" name="prezzo1" value="50" /> Prezzo € 50<br />
 <input type="radio" name="prezzo1" value="100" /> Prezzo € 100<br />
ecc.
: Re:chronoform motore di calcolo differenza date calendario
: joomba 04 Feb 2012, 21:35:14

Il codice lo hai già creato

:
function updatethis(form) {
     form.elements['prezzo'].value =  form.elements['prezzo-1'].value + form.elements['totale_giorni'].value);
      }

lo devi aggiungere nell'unica Load JS.

Però non mi convince il nome dei radio prezzo-1, meglio non usare il segno meno nei campi nome metti prezzo1.




inserendo il codice in "load js" il calcolo della differenza date non funzia.....
: Re:chronoform motore di calcolo differenza date calendario
: joomba 05 Feb 2012, 08:39:28
questo e' il risultato del codice generato e modificato:



[size=78%]-------------[/size]
CALCOLO DATE


<div class="ccms_form_element cfdiv_text" id="data_1_container_div"><label>Arrivo</label>
<input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="data_1" />
<div class="clear"><>
<div id="error-message-data_1"><><>




<div class="ccms_form_element cfdiv_text" id="data_2_container_div"><label>Partenza</label>
<input maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="data_2" onchange="giorni_differenza(this.form);")/><div class="clear"><>
<div id="error-message-data_2"><><>




<div class="ccms_form_element cfdiv_text" id="differenza_date_container_div"><label for="diff">Totale giorni</label>
<input id="diff" maxlength="150" size="30" class="" title="" label_over="0" hide_label="0" type="text" value="" name="diff" /><div class="clear"><><div id="error-message-diff"><><>






---------
RADIO


<div class="ccms_form_element cfdiv_radio" id="autoID-7bdb2e87a3cc9bc69009083e7b204f71_container_div"><label>Scegli la soluzione</label><input type="hidden" name="input_radio_4" value="" alt="ghost" />


<div style="float:left; clear:none;">




<input type="radio" name="input_radio_4" onChange="updatethis(this.form);" id="input_radio_4_lowcost" title="" value="50" class="validate['required']" />




<label for="input_radio_4_lowcost">Lowcost</label>




<input type="radio" name="input_radio_4" onChange="updatethis(this.form);" id="input_radio_4_Offerta2" title="" value="100" class="validate['required']" />




<label for="input_radio_4_offerta2">Offerta2</label>
<><div class="clear"><><div id="error-message-input_radio_4"><><>




<div class="ccms_form_element cfdiv_text" id="autoID-3a220d88789f3372d5158c7e85393912_container_div">
<label>Prezzo</label>




<input maxlength="150" size="30" class=" validate['required','number']" title="" type="text" value="" name="prezzo" />




<div class="clear"><><div id="error-message-prezzo"><><>




--------------------
Mentre il codice Js inserito e' il seguente:



function updatethis(form) {
     form.elements['prezzo'].value =  form.elements['lowcost'].value + form.elements['diff'].value);
      }


------------


Ma mi sto rendendo conto che comunque manca nel js il richiamo per il prezzo relativo all'Offerta2... dove sbaglio?


: Re:chronoform motore di calcolo differenza date calendario
: vales 05 Feb 2012, 09:36:06
C'è anche un campo nascosto che ha lo stesso nome dei campi radio "input_radio_4" non credo che la cosa vada bene.

Nel javascript non vedo le altre funzioni definite in precedenza.
: Re:chronoform motore di calcolo differenza date calendario
: joomba 05 Feb 2012, 10:03:24
il codice js completo



function controllo_data(stringa){
    var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
    if (!espressione.test(stringa)) {
        return false;
    }else{
        anno = parseInt(stringa.substr(6,4),10);
        mese = parseInt(stringa.substr(3, 2),10);
        giorno = parseInt(stringa.substr(0, 2),10);
       
        var data=new Date(anno, mese-1, giorno);
        if(data.getFullYear()==anno && data.getMonth()+1==mese && data.getDate()==giorno){
            return true;
        }else{
            return false;
        }
    }
}


function confronta_data(data1, data2){
    // controllo validità formato data
    if(controllo_data(data1) && controllo_data(data2)){
//trasformo le date nel formato aaaammgg (es. 20081103)
data1str = data1.substr(6,4)+data1.substr(3, 2)+data1.substr(0, 2);
data2str = data2.substr(6,4)+data2.substr(3, 2)+data2.substr(0, 2);
        //controllo se la seconda data è successiva alla prima


//document.write(data1str);
//document.write(data2str-data1str);


        if ((data2str-data1str)<0) {
            alert("La data iniziale deve essere precedente quella finale");
        }else{
            alert("ok");
        }
    }else{
        alert("Il formato data deve essere gg/mm/aaaa");
    }
}


function giorni_differenza(form){


//document.write("sono qui");


var data1=form.elements['data_1'].value;
var data2=form.elements['data_2'].value;
//document.write(data1);
    if(!controllo_data(data1) || !controllo_data(data2)){
        alert('Inserire le date nel formato gg/mm/aaaa');
        return -1;
    }


/*    if(!confronta_data(data1,data2)){
        alert('La data di inizio deve essere precedente quella di fine');
        return -1;
    }*/


    anno1 = parseInt(data1.substr(6,4),10);
    mese1 = parseInt(data1.substr(3, 2),10);
    giorno1 = parseInt(data1.substr(0,2),10);
     
    anno2 = parseInt(data2.substr(6,4),10);
    mese2 = parseInt(data2.substr(3, 2),10);
    giorno2 = parseInt(data2.substr(0,2),10);


    var dataok1=new Date(anno1, mese1-1, giorno1);
    var dataok2=new Date(anno2, mese2-1, giorno2);
   
    differenza = dataok2-dataok1;   
    giorni_differenza = new String(differenza/86400000);
    form.elements['diff'].value=giorni_differenza;


    alert(giorni_differenza+' giorni di differenza');
    return giorni_differenza;
}


function updatethis(form) {[/size]     form.elements['prezzo'].value =  form.elements['lowcost'].value + form.elements['diff'].value);      }
: Re:chronoform motore di calcolo differenza date calendario
: joomba 05 Feb 2012, 10:15:01
ho eliminato il campo nascosto.... ma non funzia ugualmente
: Re:chronoform motore di calcolo differenza date calendario
: joomba 05 Feb 2012, 12:37:39
sembra che non vanno daccordo i 2 codici js... se inserisco il secondo codice , il calcolo della differenza date non funziona
: Re:chronoform motore di calcolo differenza date calendario
: joomba 06 Feb 2012, 10:23:40
ciao Vales hai qualche news ?
: Re:chronoform motore di calcolo differenza date calendario
: joomba 06 Feb 2012, 22:25:23
ma il "+" in questa espressione significa somma ? per moltiplicare devo usare "*" ??
form.elements['lowcost'].value + form.elements['diff'].value);      }

e comunque non funzia........
: Re:chronoform motore di calcolo differenza date calendario
: joomba 08 Feb 2012, 19:07:06
valesssss.... sto fermo sob... non riesco a uscirne, ho provato tutte le combinazioni ma non funziona... non capisco ... mi dai un idea di dove cercare ? ti ringrazio...
: Re:chronoform motore di calcolo differenza date calendario
: joomba 24 Feb 2012, 11:24:01
Vales... un altro imput di aiuto... mi sono arenato, inserendo i codici di calcolo prezzo non mi funziona la differenza date... come risolvo ?
: Re:chronoform motore di calcolo differenza date calendario
: joomba 01 Mar 2012, 12:34:11
qualcuno ha una idea per trovare il bandolo di questa matassa ????....
: Re:chronoform motore di calcolo differenza date calendario
: joomba 24 Mar 2012, 16:08:21
ciao Vales, sto riscontrando un problema sul motore di calcolo, o meglio, ho necessita' di apportare una variazione.
Quando si inseriscono le date di arrivo e partenza, il motore calcola in modo esatto la differenza del tempo tra una data e l'altra, ma nel caso capita che la differenza tra le date sia ad esempio inferiore a 3 giorni ma superiore a 2 , mi da il risultato decimale ad es.: 2,83333 .
Per questo motivo ho necessita' di arrotondare alla cifra superiore immediatamente dopo la precedente , ma il risultato deve essere con numero senza decimali. Facendo riferimento all'esempio precedente, il risultato che vorrei ottenere deve essere "3".
Si puo' fare ?
grazie per la risposta che potrai darmi

: Re:chronoform motore di calcolo differenza date calendario
: joomba 24 Mar 2012, 16:14:59
mi sorge un dubbio..... e' possibile che il motore di calcolo prenda il valore dell'orario inserito ? mi sembra strano
: Re:chronoform motore di calcolo differenza date calendario
: vales 25 Mar 2012, 08:45:30
Credo che vi siano delle funzioni in grado di arrotondare i valori come voluto.
: Re:chronoform motore di calcolo differenza date calendario
: joomba 02 Apr 2012, 13:09:38

Ciao Vales, ho necessita' di aggiungere un giorno in piu' nel motore di calcolo che sto utilizzando, ho trovato il codice che segue, come faccio a farlo funzionare con il codice gia' creato?



public String addDay(String dateDbf,int dayToAdd){
      
      String dataNew = "";
      String DATE_FORMAT = "yyyyMMdd";
      SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
      try{
         Calendar c1 = Calendar.getInstance();
         int anno = Integer.parseInt(dateDbf.substring(0,4));
         int mese = Integer.parseInt(dateDbf.substring(4,6))-1;
         int giorno = Integer.parseInt(dateDbf.substring(6,8));
         c1.set(anno, mese, giorno);
         c1.add(Calendar.DATE,dayToAdd);
         dataNew = sdf.format(c1.getTime());
      }catch (Exception e){
         e.printStackTrace();
      }
      // RITORNA DIFFERENZA DATE
      return dataNew;
   }








Questo e' il codice tuttora online per il calcolo della differenza di date.


function controllo_data(stringa){
    var espressione = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
    if (!espressione.test(stringa)) {
        return false;
    }else{
        anno = parseInt(stringa.substr(6,4),10);
        mese = parseInt(stringa.substr(3, 2),10);
        giorno = parseInt(stringa.substr(0, 2),10);
       
        var data=new Date(anno, mese-1, giorno);
        if(data.getFullYear()==anno && data.getMonth()+1==mese && data.getDate()==giorno){
            return true;
        }else{
            return false;
        }
    }
}


function confronta_data(data1, data2){
    // controllo validità formato data
    if(controllo_data(data1) && controllo_data(data2)){
//trasformo le date nel formato aaaammgg (es. 20081103)
data1str = data1.substr(6,4)+data1.substr(3, 2)+data1.substr(0, 2);
data2str = data2.substr(6,4)+data2.substr(3, 2)+data2.substr(0, 2);
        //controllo se la seconda data è successiva alla prima


//document.write(data1str);
//document.write(data2str-data1str);


        if ((data2str-data1str)<0) {
            alert("La data iniziale deve essere precedente quella finale");
        }else{
            alert("ok");
        }
    }else{
        alert("Il formato data deve essere gg/mm/aaaa");
    }
}


function giorni_differenza(form){


//document.write("sono qui");


var data1=form.elements['data_1'].value;
var data2=form.elements['data_2'].value;
//document.write(data1);
    if(!controllo_data(data1) || !controllo_data(data2)){
        alert('Inserire le date nel formato gg/mm/aaaa');
        return -1;
    }


/*    if(!confronta_data(data1,data2)){
        alert('La data di inizio deve essere precedente quella di fine');
        return -1;
    }*/


    anno1 = parseInt(data1.substr(6,4),10);
    mese1 = parseInt(data1.substr(3, 2),10);
    giorno1 = parseInt(data1.substr(0,2),10);
     
    anno2 = parseInt(data2.substr(6,4),10);
    mese2 = parseInt(data2.substr(3, 2),10);
    giorno2 = parseInt(data2.substr(0,2),10);


    var dataok1=new Date(anno1, mese1-1, giorno1);
    var dataok2=new Date(anno2, mese2-1, giorno2);


    differenza = dataok2-dataok1;   
    giorni_differenza = new String(differenza/86400000);
    form.elements['diff'].value=giorni_differenza;


    alert(giorni_differenza+' giorni di differenza');
    return giorni_differenza;
}













: Re:chronoform motore di calcolo differenza date calendario
: joomba 30 Apr 2012, 14:28:04
.... con un po' di applicazione nei ritagli di tempo, ho risolto il problema !!!! basta aggiungere +1  cosi come segue ...
giorno = parseInt(stringa.substr(0, 2),10+1);


a questo punto si puo' chiudere questo post come risolto.... grazie a tutti sopratutto a Vales che mi ha instradato con le ottime guide che ha pubblicato.


Al prossimo post !!!!!!!!!!
joomba

: [RISOLTO] Re:chronoform motore di calcolo differenza date calendario
: joomba 30 Apr 2012, 14:31:43
Risolto
: Re:chronoform motore di calcolo differenza date calendario
: vales 30 Apr 2012, 19:51:41
Ottimo. Ti sei preso una bella soddisfazione.