You are here

public function ShippingMethod::applies in Commerce Shipping 8.2

Checks whether the shipping method applies to the given shipment.

Ensures that the conditions pass.

Parameters

\Drupal\commerce_shipping\Entity\ShipmentInterface $shipment: The shipment.

Return value

bool TRUE if shipping method applies, FALSE otherwise.

Overrides ShippingMethodInterface::applies

File

src/Entity/ShippingMethod.php, line 224

Class

ShippingMethod
Defines the shipping method entity class.

Namespace

Drupal\commerce_shipping\Entity

Code

public function applies(ShipmentInterface $shipment) {
  $conditions = $this
    ->getConditions();
  if (!$conditions) {

    // Shipping methods without conditions always apply.
    return TRUE;
  }
  $order_conditions = array_filter($conditions, function ($condition) {

    /** @var \Drupal\commerce\Plugin\Commerce\Condition\ConditionInterface $condition */
    return $condition
      ->getEntityTypeId() == 'commerce_order';
  });
  $shipment_conditions = array_filter($conditions, function ($condition) {

    /** @var \Drupal\commerce\Plugin\Commerce\Condition\ConditionInterface $condition */
    return $condition
      ->getEntityTypeId() == 'commerce_shipment';
  });
  $order_conditions = new ConditionGroup($order_conditions, $this
    ->getConditionOperator());
  $shipment_conditions = new ConditionGroup($shipment_conditions, $this
    ->getConditionOperator());
  return $order_conditions
    ->evaluate($shipment
    ->getOrder()) && $shipment_conditions
    ->evaluate($shipment);
}