/** * Get "options" XML block * Common for "Create Non-Contract Shipment" and "Create Shipment" calls * * @param \XLite\Module\XC\CanadaPost\Model\Order\Parcel $parcel Canada Post parcel object * * @return string */ protected function getOptionsCommonXmlBlockByParcel(\XLite\Module\XC\CanadaPost\Model\Order\Parcel $parcel) { $xmlData = ''; $optClasses = $parcel->getAllowedOptionClasses(); foreach ($optClasses as $optClass => $classData) { $value = $parcel->{'getOpt' . \XLite\Core\Converter::convertToCamelCase($optClass)}(); if ($classData[$parcel::OPT_SCHEMA_MULTIPLE] && $classData[$parcel::OPT_SCHEMA_MANDATORY] && !isset($classData[$parcel::OPT_SCHEMA_ALLOWED_OPTIONS][$value])) { // Set allowed option value $value = array_shift(array_keys($classData[$parcel::OPT_SCHEMA_ALLOWED_OPTIONS])); } if ($parcel::OPT_CLASS_SIGNATURE == $optClass) { $value = $value ? array_shift(array_keys($classData[$parcel::OPT_SCHEMA_ALLOWED_OPTIONS])) : ''; } if ($parcel::OPT_CLASS_COVERAGE == $optClass) { if (0 >= $value) { continue; } $coverage = static::applyConversionRate($value); $coverage = static::adjustFloatValue($coverage, 2, 0.01, 99999.99000000001); $value = $parcel::OPT_COVERAGE; $xmlData .= <<<XML <option> <option-code>{$value}</option-code> <option-amount>{$coverage}</option-amount> </option> XML; } else { if (!empty($value)) { $xmlData .= <<<XML <option> <option-code>{$value}</option-code> </option> XML; } } } if ($parcel->isDeliveryToPostOffice()) { // Add "D2PO" option if parcel should be delivered to the selected Canada Post post office $office = $parcel->getOrder()->getCapostOffice(); $value = $parcel::OPT_DELIVER_TO_PO; $xmlData .= <<<XML <option> <option-code>{$value}</option-code> <option-qualifier-2>{$office->getOfficeId()}</option-qualifier-2> </option> XML; } if (!empty($xmlData)) { $xmlData = <<<XML <options> {$xmlData} </options> XML; } return $xmlData; }
/** * {@inheritDoc} */ public function getAllowedOptionClasses() { $this->__initializer__ && $this->__initializer__->__invoke($this, 'getAllowedOptionClasses', array()); return parent::getAllowedOptionClasses(); }