- Home
- Categorie
- Coding e Sistemistica
- PHP
- Funzione di calcolo prezzo di una camera in un range di date
-
Funzione di calcolo prezzo di una camera in un range di date
Ciao a tutti, sto cercando di modificare una funzione di calcolo presa da uno script php realizzato con CodeIgniter che mi dia il risultato del prezzo totale di una camera in relazione ad una data di arrivo ed una di partenza.
Ho due tabelle:
La prima "room" che ha dei prezzi base settimanali ( price_mon,price_tue,price_wed,price_thu,price_fri,price_sat,price_sun )
La seconda "room_custom_price" che ha prezzi personalizzati in base alla data ( certain_date, price )
La funzione dovrebbe calcolare prima il prezzo base e poi controllare se ci sono prezzi personalizzati per poi fornire il totale.Questa è la funzione.
[PHP]
function calcProcess($roomId, $startDate, $endDate) {
$startDate = new DateTime($startDate->date('Y-m-d'));
$result['totalNight'] = 0;
$result['totalPrice'] = 0;
$statement = " SELECT
price_sun AS d0,
price_mon AS d1,
price_tue AS d2,
price_wed AS d3,
price_thu AS d4,
price_fri AS d5,
price_sat AS d6
FROM
room
WHERE
id = $roomId ";
$statement->execute(array(
':id' => $roomId
));
$defaultPrice = $statement->fetchAssociativeArray();
$statement->close();
// fine
// calcolo custom price
$statement = "
SELECT
certain_date,
price
FROM
room_custom_price
WHERE
room_id = $roomId AND
(certain_date BETWEEN :startDate AND :endDate)";
$statement->execute(array(
':roomId' => $roomId,
':startDate' => $startDate->date('Y-m-d'),
':endDate' => $endDate->date('Y-m-d')
));
$rows = $statement->fetchAllAssociative();
$statement->close();
$customPriceArray = array();
foreach ($rows as $row) {
$customPriceArray[$row['certain_date']] = $row['price'];
}
// fine
while ($startDate->format('Y-m-d') != $endDate->date('Y-m-d')) {
$result['totalNight']++;
if (array_key_exists($startDate->format('Y-m-d'), $customPriceArray)) {
$result['totalPrice'] += $customPriceArray[$startDate->date('Y-m-d')];
}
else {
$result['totalPrice'] += $defaultPrice['d'.$startDate->date('w')];
}
$startDate->modify('+1 day');
}
return $result;
}
var_dump($result);[/PHP]Spero qualcuno possa aiutarmi. Grazie!
-
Ciao max,
scusa ma non capisco bene se c'è una condizione affinchè si debbano mostrare o i prezzi base o quelli personalizzati. Bisogna mostrare il prezzo più basso? In relazione a cosa?