protected function AvailabilityAgent::getUnitsByPriceType in Rooms - Drupal Booking for Hotels, B&Bs and Vacation Rentals 7
Returns the units array in a specific format based on price.
Parameters
array $results: Units to sort.
array $price_modifiers: Price modifiers.
Return value
array Units in a price based structure.
2 calls to AvailabilityAgent::getUnitsByPriceType()
- AvailabilityAgent::checkAvailability in modules/
rooms_booking/ includes/ rooms_booking.availability_agent.inc - Checks the availability.
- AvailabilityAgent::checkAvailabilityForUnit in modules/
rooms_booking/ includes/ rooms_booking.availability_agent.inc - Returns availability for a specific unit.
File
- modules/
rooms_booking/ includes/ rooms_booking.availability_agent.inc, line 352 - Contains the AvailabilityAgent.
Class
- AvailabilityAgent
- An AvailabilityAgent provides access to the availability functionality of Rooms and lets you query for availability, get pricing information and create products that can be bought.
Code
protected function getUnitsByPriceType($results, $price_modifiers = array()) {
$units = array();
if (count($results) > 0) {
foreach ($results as $unit) {
// Get the actual entity.
$unit = rooms_unit_load($unit->unit_id);
// Get a calendar and check availability.
$rc = new UnitCalendar($unit->unit_id);
// We need to make this based on user-set vars.
// Rather than using $rc->stateAvailability we will get the states check
// directly as different states will impact on what products we create.
$states = $rc
->getStates($this->start_date, $this->end_date);
// Calculate the price as well to add to the array.
$temp_end_date = clone $this->end_date;
$temp_end_date
->add(new DateInterval('P1D'));
$booking_info = array(
'start_date' => clone $this->start_date,
'end_date' => $temp_end_date,
'unit' => $unit,
'booking_parameters' => $this->booking_parameters,
);
// Give other modules a chance to change the price modifiers.
$current_price_modifiers = $price_modifiers;
drupal_alter('rooms_price_modifier', $current_price_modifiers, $booking_info);
$price_calendar = new UnitPricingCalendar($unit->unit_id, $current_price_modifiers);
if (variable_get('rooms_price_calculation', ROOMS_PER_NIGHT) == ROOMS_PER_PERSON && count($this->booking_parameters) == 1 && isset($this->booking_parameters[0]) && is_array($this->booking_parameters)) {
$price_log = $price_calendar
->calculatePrice($this->start_date, $this->end_date, $this->booking_parameters[0]['adults'], $this->booking_parameters[0]['children'], $this->booking_parameters[0]['childrens_age']);
}
else {
$price_log = $price_calendar
->calculatePrice($this->start_date, $this->end_date);
}
$full_price = $price_log['full_price'];
$units[$unit->type][$full_price][$unit->unit_id]['unit'] = $unit;
$units[$unit->type][$full_price][$unit->unit_id]['price'] = $full_price;
$units[$unit->type][$full_price][$unit->unit_id]['booking_price'] = $price_log['booking_price'];
$units[$unit->type][$full_price][$unit->unit_id]['price_log'] = $price_log['log'];
if (in_array(ROOMS_ON_REQUEST, $states)) {
$units[$unit->type][$full_price][$unit->unit_id]['state'] = ROOMS_ON_REQUEST;
}
else {
$units[$unit->type][$full_price][$unit->unit_id]['state'] = ROOMS_AVAILABLE;
}
}
}
// We order units by optional items to ensure that units with options are
// the first to be picked by a user.
$units = $this
->orderByOptionals($units);
return $units;
}