if (!
$data->
has($key)) { throw ShippingException::
shippingMethodNotFound($delivery->
getShippingMethod()->
getId());
} /** @var ShippingMethodEntity $shippingMethod */
$shippingMethod =
$data->
get($key);
foreach ($context->
getRuleIds() as $ruleId) { /** @var ShippingMethodPriceCollection $shippingPrices */
$shippingPrices =
$shippingMethod->
getPrices()->
filterByProperty('ruleId',
$ruleId);
$costs =
$this->
getMatchingPriceOfRule($delivery,
$context,
$shippingPrices);
if ($costs !== null
) { break;
} } // Fetch default price if no rule matched
if ($costs === null
) { /** @var ShippingMethodPriceCollection $shippingPrices */
$shippingPrices =
$shippingMethod->
getPrices()->
filterByProperty('ruleId', null
);
$costs =
$this->
getMatchingPriceOfRule($delivery,
$context,
$shippingPrices);
}