/** * Return true if attribute can have prices * * @return bool */ public function canHavePrices() { if ($this instanceof IsotopeAttributeForVariants && $this->isVariantOption()) { return false; } return in_array($this->field_name, Attribute::getPricedFields()); }
/** * Calculate price surcharge for attribute options * * @param float $fltPrice * @param object $objSource * @param string $strField * @param int $intTaxClass * @param array $arrOptions * * @return float * @throws \Exception */ public function addOptionsPrice($fltPrice, $objSource, $strField, $intTaxClass, array $arrOptions) { $fltAmount = $fltPrice; if ($objSource instanceof IsotopePrice && ($objProduct = $objSource->getRelated('pid')) !== null) { /** @type IsotopeProduct|Standard $objProduct */ $arrAttributes = array_intersect(Attribute::getPricedFields(), array_merge($objProduct->getAttributes(), $objProduct->getVariantAttributes())); foreach ($arrAttributes as $field) { if (($objAttribute = $GLOBALS['TL_DCA']['tl_iso_product']['attributes'][$field]) !== null && $objAttribute instanceof IsotopeAttributeWithOptions && $objAttribute->canHavePrices() && ($objOptions = $objAttribute->getOptionsFromManager($objProduct)) !== null) { $value = $objAttribute->isCustomerDefined() ? $arrOptions[$field] : $objProduct->{$field}; $value = deserialize($value, true); /** @type AttributeOption $objOption */ foreach ($objOptions as $objOption) { if (in_array($objOption->id, $value)) { $fltAmount += $objOption->getAmount($fltPrice, $objSource->tax_class); } } } } } return $fltAmount; }