• User Attivo

    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!


  • User Attivo

    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?