protected function MerciDefaultController::buildConflictQuery in MERCI (Manage Equipment Reservations, Checkout and Inventory) 7.3
1 call to MerciDefaultController::buildConflictQuery()
- MerciDefaultController::conflicts in merci_core/
reservation.handler.inc
File
- merci_core/
reservation.handler.inc, line 324 - Abstraction of the selection logic of an entity reference field.
Class
- MerciDefaultController
- A null implementation of EntityReference_SelectionHandler.
Code
protected function buildConflictQuery($dates) {
$context = $this->context;
$exclude_id = $this->entity
->getIdentifier();
$entity_type = $this->entity
->type();
$item_table = $this->item_table;
$item_column = $this->item_column;
$date_table = $this->date_table;
$date_column = $this->date_column;
$date_column2 = $this->date_column2;
$parent_table = $this->parent_table;
$parent_index = $this->parent_index;
$items = array();
foreach ($this->items as $delta => $item) {
$items[] = $item
->getIdentifier();
}
// Build the query.
$query = db_select($item_table, 'item_table');
$query
->addField('item_table', $item_column, 'item_id');
$query
->addField('item_table', 'entity_id', 'parent_id');
if (count($this->items) == 1) {
$query
->condition($item_column, reset($items));
}
else {
$query
->condition($item_column, $items, 'IN');
}
// Ignore myself.
if ($exclude_id) {
$query
->condition('item_table.entity_id', $exclude_id, '!=');
}
$query
->join($parent_table, 'merci_line_item', 'item_table.entity_id = merci_line_item.' . $parent_index);
if ($this->parent_has_quantity) {
$query
->addField('merci_line_item', 'quantity', 'quantity');
}
else {
$query
->addExpression('1', 'quantity');
}
if ($this->parent_has_status) {
$query
->condition('merci_line_item.status', 1, '=');
}
$query
->join($date_table, 'date_table', 'item_table.entity_id = date_table.entity_id');
$query
->addField('date_table', $date_column);
//, MERCI_DATE_FIELD_ALIAS);
$query
->addField('date_table', $date_column2);
//, MERCI_DATE_FIELD_ALIAS2);
$query
->condition('date_table.entity_type', $entity_type, '=');
$query
->condition('date_table.deleted', 0, '=');
// TODO handled multiple dates.
$query
->condition(db_or()
->condition(db_and()
->condition($date_column, $dates['value'], '<=')
->condition($date_column2, $dates['value'], '>='))
->condition(db_and()
->condition($date_column, $dates['value2'], '<=')
->condition($date_column2, $dates['value2'], '>='))
->condition(db_and()
->condition($date_column, $dates['value'], '>')
->condition($date_column2, $dates['value2'], '<')));
$query
->orderBy($date_column, 'ASC');
// Add a generic entity access tag to the query.
$query
->addTag('merci_resource');
$query
->addMetaData('merci_reservable_handler', $this);
return $query;
}