public function ReservationConflicts::bestFit in MERCI (Manage Equipment Reservations, Checkout and Inventory) 8.2
2 calls to ReservationConflicts::bestFit()
- ReservationConflicts::fillBuckets in src/ReservationConflicts.php
- ReservationConflicts::reservations in src/ReservationConflicts.php
File
- src/ReservationConflicts.php, line 448
- Contains \Drupal\merci\ReservationConflicts.
Abstraction of the selection logic of an entity reference field.
Class
- ReservationConflicts
- A null implementation of EntityReference_SelectionHandler.
Namespace
Drupal\merci
Code
public function bestFit($dates) {
$entity = $this->entity;
$best_fit = array();
$parent_conflicts = $this
->conflicts($dates);
$date_value = $dates
->get('value')
->getValue();
foreach ($entity
->get($this->item_field) as $delta => $item) {
if (!array_key_exists($delta, $parent_conflicts) or !array_key_exists($date_value, $parent_conflicts[$delta])) {
continue;
}
if ($item->entity
->hasField($this->quantity_field)) {
$quantity = $item->entity
->get($this->quantity_field)->value;
}
else {
$quantity = 1;
}
$reservations = array();
foreach ($parent_conflicts[$delta][$date_value] as $reservation) {
for ($i = 0; $i < $reservation->quantity; $i++) {
$reservations[] = $reservation;
}
}
uasort($reservations, array(
$this,
"merci_bucket_cmp_length",
));
$buckets = array();
foreach ($reservations as $test_reservation) {
for ($i = 0; $i < $quantity; $i++) {
$fits = TRUE;
if (array_key_exists($i, $buckets)) {
foreach ($buckets[$i] as $reservation) {
if ($this
->merci_bucket_intersects($reservation, $test_reservation)) {
$fits = FALSE;
break;
}
}
}
if ($fits) {
if (array_key_exists($i, $buckets)) {
$buckets[$i] = array();
}
$buckets[$i][] = $test_reservation;
break;
}
}
}
if (count($buckets)) {
$best_fit[$delta] = $buckets;
}
}
return $best_fit;
}