Beispiel #1
0
    /**
     * 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();
 }