Codice PHP:
function costi_pacchetto($data1,$nome_pck,$extra_nightsb,$extra_nightsa,$insurance,$hotel,$letto,$num_viag,$user,$pwd,$host,$dbname,$lingua){
# Calcola i costi di un pacchetto turistico considerando la stagione (alta o bassa) le notti extra, il tipo di sistemazione etc..
$letto_old=$letto;
if ($extra_nightsa=="") {
$extra_nightsa=0;
}
if ($extra_nightsb=="") {
$extra_nightsb=0;
}
$tariffa_extra_nights=0;
$tariffa_giorno_bassa=0;
$tariffa_giorno_alta=0;
$prezzo_persona=0;
$disclaimer_prezzo=0;
$tariffa_giorno_bassa_3stelle=0;
$tariffa_giorno_alta_3stelle=0;
#print "lingua = *".$_SESSION['lang']."*
nome pacchetto = *".$nome_pck."*
\n";
$query = "SELECT * FROM pacchetti WHERE lingua=\"".$lingua."\" AND nome=\"".$nome_pck."\"";
$rquery1=dbquery2($host, $user, $pwd, $query, "1");
if (!$rquery1) {
$errore=1;
print "<script language='javascript'>\n";
print "alert('Errore nella query: " . quota($query) . "\\nModulo: util.php\\nDescrizione dell\'errore: " . quota(mysql_error()) . "\\nElaborazione terminata.')\n";
print "</script>\n";
exit;
} else {
$riga = mysql_fetch_assoc($rquery1);
$numrows=mysql_num_rows($rquery1);
if ($numrows>0) {
$codice=$riga['codice'];
$nome=$riga['nome'];
$durata=$riga['durata'];
$suppl_singola=$riga['suppl_singola'];
$suppl_singola3=$riga['suppl_singola3'];
$exn_double_occ_bs=$riga['exn_double_occ_bs'];
$exn_double_occ_as=$riga['exn_double_occ_as'];
$exn_singola_bs=$riga['exn_singola_bs'];
$exn_singola_as=$riga['exn_singola_as'];
$exn_double3_occ_bs=$riga['exn_double3_occ_bs'];
$exn_double3_occ_as=$riga['exn_double3_occ_as'];
$exn_singola3_bs=$riga['exn_singola3_bs'];
$exn_singola3_as=$riga['exn_singola3_as'];
$lingua=$riga['lingua'];
$prezzo_as=$riga['prezzo_as'];
$prezzo_bs=$riga['prezzo_bs'];
$prezzo3_as=$riga['prezzo3_as'];
$prezzo3_bs=$riga['prezzo3_bs'];
$deposito=$riga['deposito'];
$giorni_dep=$riga['giorni_dep'];
$carico_ass=$riga['carico_ass'];
} else {
# print "<script language='javascript'>\n";
print "Errore nella query: " . quota($query) . "
Modulo: p_step3.php
Descrizione dell'errore: La query non ha ritornato risultati
Lingua=".$_SESSION['lang']."
Nome Pacchetto=".$nome_pck."
Elaborazione terminata.";
# print "alert('Errore nella query: " . quota($query) . "\\nModulo: p_step3.php\\nDescrizione dell\'errore: La query non ha ritornato risultati\\nLingua=".$_SESSION['lang']."\nNome Pacchetto=".$nome_pck."\nElaborazione terminata.')\n";
# print "</script>\n";
exit;
}
}
$tariffa_giorno_bassa=$prezzo_bs/$durata;
$tariffa_giorno_alta=$prezzo_as/$durata;
#tariffa hotel tre stelle
$tariffa_giorno_bassa_3stelle=$prezzo3_bs/$durata;
$tariffa_giorno_alta_3stelle=$prezzo3_as/$durata;
# carico l'array con l'elenco dei giorni del pacchetto base
for ($i=0;$i<$durata;$i++) {
$mat_giorni_pck[$i]=mktime(0, 0, 0, $data1[1], $data1[2]+$i, $data1[0]);
}
# carico l'array con l'elenco dedi giorni before (se richiesti)
$sw_mat_extra_nightsb=0;
$sw_mat_extra_nightsa=0;
for ($i=$extra_nightsb;$i>0;$i--) {
$sw_mat_extra_nightsb=1;
$mat_extra_nightsb[$i]=mktime(0, 0, 0, $data1[1], $data1[2]-$i, $data1[0]);
$value=date("Y-m-d",$mat_extra_nightsb[$i]);
}
# carico l'array con l'elenco dedi giorni after (se richiesti)
for ($i=$extra_nightsa;$i>0;$i--) {
$sw_mat_extra_nightsa=1;
$mat_extra_nightsa[$i]=mktime(0, 0, 0, $data1[1], $data1[2]+$i+$durata-1, $data1[0]);
$value=date("Y-m-d",$mat_extra_nightsa[$i]);
}
$query = "SELECT * FROM stagioni ORDER BY inizio_bassa";
$rquery1=dbquery2($host, $user, $pwd, $query, "1");
if (!$rquery1) {
$errore=1;
print "<script language='javascript'>\n";
print "alert('Errore nella query: " . quota($query) . "\\nModulo: p_step3.php\\nDescrizione dell\'errore: " . quota(mysql_error()) . "\\nElaborazione terminata.')\n";
print "</script>\n";
exit;
} else {
$idx=0;
$giornibassa=0;
$giornialta=0;
$giorniextrabassa=0;
$giorniextraalta=0;
# Ciclo sui periodi di bassa stagione letti dalla tabella stagioni
while ($riga = mysql_fetch_assoc($rquery1)) {
$pezzididata=explode("-", $riga["inizio_bassa"]);
$giornoiniziobassa=$pezzididata[1];
$meseiniziobassa=$pezzididata[0];
$pezzididata=explode("-", $riga["fine_bassa"]);
$giornofinebassa=$pezzididata[1];
$mesefinebassa=$pezzididata[0];
# Per ogni periodo di bassa stagione trovato in tabella stagioni ciclo sulle date del pacchetto base per calcolare il numero di giorni di bassa stagione
foreach ($mat_giorni_pck as $value) {
$annoitem=date("Y",$value);
$dataunixstart=mktime(0, 0, 0, $meseiniziobassa, $giornoiniziobassa, $annoitem);
$dataunixfine=mktime(0, 0, 0, $mesefinebassa, $giornofinebassa, $annoitem);
if ($value>=$dataunixstart && $value<=$dataunixfine){
++$giornibassa;
}
}
# Per ogni periodo di bassa stagione trovato in tabella stagioni ciclo sulle date dei giorni extra before per calcolare il numero di giorni extra before di bassa stagione
if ($sw_mat_extra_nightsb==1) {
foreach ($mat_extra_nightsb as $value) {
$annoitem=date("Y",$value);
$dataunixstart=mktime(0, 0, 0, $meseiniziobassa, $giornoiniziobassa, $annoitem);
$dataunixfine=mktime(0, 0, 0, $mesefinebassa, $giornofinebassa, $annoitem);
if ($value>=$dataunixstart && $value<=$dataunixfine){
++$giorniextrabassa;
}
}
}
# Per ogni periodo di bassa stagione trovato in tabella stagioni ciclo sulle date dei giorni extra after per calcolare il numero di giorni extra after di bassa stagione
if ($sw_mat_extra_nightsa==1) {
foreach ($mat_extra_nightsa as $value) {
$annoitem=date("Y",$value);
$dataunixstart=mktime(0, 0, 0, $meseiniziobassa, $giornoiniziobassa, $annoitem);
$dataunixfine=mktime(0, 0, 0, $mesefinebassa, $giornofinebassa, $annoitem);
if ($value>=$dataunixstart && $value<=$dataunixfine){
++$giorniextrabassa;
}
}
}
}
}
# dopo aver calcolato i giorni di bassa stagione ricavo per differenza quelli di alta sia per il pacchetto base che per gli eventuali giorni extra.
$giornialta=$durata-$giornibassa;
$giorniextraalta=$extra_nightsb+$extra_nightsa-$giorniextrabassa;
# verifico che la data di inizio del pacchetto sia o meno all'interno dei giorni di definizione deposito
$datadeposito=mktime(0, 0, 0, date("m",time()), date("d",time())+$giorni_dep, date("Y",time()));
if ($datadeposito>=$mat_giorni_pck[0]) {
# siamo all'interno dei giorni di deposito, quindi si paga per intero
$swacconto=0;
if ($letto==2) {
# se il cliente chiede "separate beds" ed è oltre il periodo di acconto dovrà pagare il letto singolo salvo che venga poi rimborsato nel caso in cui si riesca a soddisfare la sua richiesta e dovrà essere visualizzato il disclaimer adeguato accanto al prezzo
$letto=3;
$disclaimer_prezzo=1;
}
} else {
# siamo fuori dai giorni di deposito, quindi si paga l'acconto
$swacconto=1;
if ($letto==2) {
# se il cliente chiede "separate beds" ed è fuori dal periodo di acconto dovrà essere visualizzato il disclaimer adeguato accanto al prezzo
$disclaimer_prezzo=2;
}
}
# Calcolo la componente extra nights del costo del pacchetto
if ($letto==3) {
# camera singola o "separate beds" trasformata in singola (vedi if precedente)
$tariffa_extra_nights=($giorniextrabassa*$exn_singola_bs)+($giorniextraalta*$exn_singola_as);
}
elseif ($letto==3 && $hotel==1)
{
$tariffa_extra_nights=($giorniextrabassa*$exn_singola3_bs)+($giorniextraalta*$exn_singola3_as);
}
elseif ($hotel==1)
{
$tariffa_extra_nights=($giorniextrabassa*$exn_double3_occ_bs)+($giorniextraalta*$exn_double3_occ_as);
}
else {
$tariffa_extra_nights=($giorniextrabassa*$exn_double_occ_bs)+($giorniextraalta*$exn_double_occ_as);
}
# Calcolo il costo del pacchetto
#se il cliente richiede l'hotel a 3 stelle
if ($hotel==1) {
$prezzo_persona=($giornibassa*$tariffa_giorno_bassa_3stelle)+($giornialta*$tariffa_giorno_alta_3stelle)+$tariffa_extra_nights;
}
else{
$prezzo_persona=($giornibassa*$tariffa_giorno_bassa)+($giornialta*$tariffa_giorno_alta)+$tariffa_extra_nights;
}
# Se il cliente richiede la stanza singola applico il supplemento che è indipendente dalla stagione
if ($letto==3) {
$prezzo_persona=$prezzo_persona+$suppl_singola;
}
#Se il cliente richiede la stanza singola ma l'albergo a 3 stelle
elseif ($letto==3 && $hotel==1)
{
$prezzo_persona=$prezzo_persona+$suppl_singola3;
}
# Sed il cliente richiede l'assicurazione carico il prezzo per persona della percentuale letta in tabella pacchetti
if ($insurance=="y") {
$prezzo_persona+=($prezzo_persona/100)*$carico_ass;
}
$prezzo_totale=$prezzo_persona*$num_viag;
# Imposto il prezzo del deposito
if ($swacconto==1) {
$acconto=$deposito*$num_viag;
} else {
$acconto=$prezzo_totale;
}
return array ($prezzo_persona, $prezzo_totale, $acconto, $disclaimer_prezzo, $giornialta, $giornibassa);
}
Dove sbaglio? Probabilmente in più punti..