getElements() as $element) { $calculator = $rsv_form_price_registry->get($element->getType()); if ($calculator === null) { continue; // Unpriced element type contributes nothing. } $total += (float) $calculator($element, $data->getValue($element->getName())); } $pct = (new RsvMembershipService())->discount_for($definition, $data); return $total * (1.0 - max(0.0, min(100.0, $pct)) / 100.0); } }