%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/exchange/onec/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/exchange/onec/documentbase.php |
<?php namespace Bitrix\Sale\Exchange\OneC; use Bitrix\Main; use Bitrix\Sale\Exchange; use Bitrix\Main\Type; use Bitrix\Sale\Internals\Fields; use Bitrix\Sale\PriceMaths; /** * Class DocumentBase * @package Bitrix\Sale\Exchange\OneC * @deprecated */ class DocumentBase { /** @var Fields */ protected $fields; function __construct() { $this->fields = new Fields(); } /** * @return array */ protected static function getMessage() { return Main\Localization\Loc::loadLanguageFile($_SERVER["DOCUMENT_ROOT"].'/bitrix/components/bitrix/sale.export.1c/component.php'); } /** * @return array */ static protected function getMessageExport() { return array_merge( Main\Localization\Loc::loadLanguageFile($_SERVER["DOCUMENT_ROOT"].'/bitrix/components/bitrix/sale.export.1c/component.php'), Main\Localization\Loc::loadLanguageFile($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/general/export.php') ); } /** * @return int */ public function getTypeId() { return DocumentType::UNDEFINED; } /** * @param array $values * @internal param array $fields */ public function setFields(array $values) { foreach ($values as $key=>$value) { $this->setField($key, $value); } } /** * @param $name * @param $value */ public function setField($name, $value) { $this->fields->set($name, $value); } /** * @param $name * @return null|string */ public function getField($name) { return $this->fields->get($name); } /** * @return array */ public function getFieldValues() { return $this->fields->getValues(); } /** * @return int */ public function getId() { if($this->getField('ID')) { return $this->getField('ID'); } return null; } /** * @return null|string */ public function getExternalId() { if($this->getField('ID_1C')) { return $this->getField('ID_1C'); } return null; } /** * @param array $document * @return int */ public static function resolveRawDocumentTypeId(array $document) { $message = self::getMessage(); $operation = $document['#'][$message['CC_BSC1_OPERATION']][0]['#']; return static::resolveDocumentTypeId($operation); } /** * @param array string * @return int */ public static function resolveDocumentTypeId($operation) { $typeId = DocumentType::UNDEFINED; $message = self::getMessage(); if(!empty($operation)) { if($operation == $message["CC_BSC1_ORDER"]) { $typeId = DocumentType::ORDER; } elseif($operation == $message["CC_BSC1_PAYMENT_C"]) { $typeId = DocumentType::PAYMENT_CASH; } elseif($operation == $message["CC_BSC1_PAYMENT_B"]) { $typeId = DocumentType::PAYMENT_CASH_LESS; } elseif($operation == $message["CC_BSC1_PAYMENT_A"]) { $typeId = DocumentType::PAYMENT_CARD_TRANSACTION; } elseif($operation == $message["CC_BSC1_SHIPMENT"]) { $typeId = DocumentType::SHIPMENT; } else $typeId = DocumentType::UNDEFINED; } return $typeId; } public static function resolveDocumentTypeName($typeId) { if(!DocumentType::IsDefined($typeId)) { throw new Main\ArgumentOutOfRangeException('Is not defined', DocumentType::FIRST, DocumentType::LAST); } $message = self::getMessage(); $name = ''; if($typeId == DocumentType::ORDER) { $name = $message["CC_BSC1_ORDER"]; } elseif($typeId == DocumentType::PAYMENT_CASH) { $name = $message["CC_BSC1_PAYMENT_C"]; } elseif($typeId == DocumentType::PAYMENT_CASH_LESS) { $name = $message["CC_BSC1_PAYMENT_B"]; } elseif($typeId == DocumentType::PAYMENT_CARD_TRANSACTION) { $name = $message["CC_BSC1_PAYMENT_A"]; } elseif($typeId == DocumentType::SHIPMENT) { $name = $message["CC_BSC1_SHIPMENT"]; } return $name; } /** * @param $value * @param $fieldName * @param array $fieldsInfo * @param array $document * @return null */ public static function resolveItemsArrayParams($value, $fieldName, array $fieldsInfo, array $document) { $result = null; switch($fieldName) { case 'REK_VALUES': $result = self::resolveTraitsParams($value, $fieldsInfo); break; case 'TAXES': $result = self::resolveTaxParams($value, $fieldsInfo); break; case 'ITEM_UNIT': $result = self::resolveUnitParams($value, $fieldsInfo); break; case 'DISCOUNTS': $result = self::resolveDiscountsParams($value, $fieldsInfo); break; } return $result; } /** * @param array $document * @param array $fieldsInfo * @return array|null */ protected static function resolveItemsParams(array $document, array $fieldsInfo) { $result = null; $message = self::getMessage(); if (is_array($document["#"][$message["CC_BSC1_ITEMS"]][0]["#"]) && is_array($document["#"][$message["CC_BSC1_ITEMS"]][0]["#"][$message["CC_BSC1_ITEM"]])) { $items = $document["#"][$message["CC_BSC1_ITEMS"]][0]["#"][$message["CC_BSC1_ITEM"]]; foreach ($items as $val) { $fields = array(); if(is_array($val)) { foreach($fieldsInfo['FIELDS'] as $name => $info) { if(!empty($val["#"][$message["CC_BSC1_".$name]])) { if($info['TYPE'] === 'array') { $value = self::resolveItemsArrayParams($val, $name, $info, $document); } else { $value = $val["#"][$message["CC_BSC1_".$name]][0]["#"]; self::internalizeFields($value, $info); } $fields[$name] = $value; } } } $result[] = $fields; } } return $result; } /** * @param array $value * @param array $fieldsInfo * @return null */ protected static function resolveCashBoxCheksParams(array $value, array $fieldsInfo) { $result = null; $message = self::getMessage(); if (isset($value["#"][$message["CC_BSC1_CASHBOX_CHECKS"]][0]["#"][$message["CC_BSC1_CASHBOX_CHECK"]][0]['#']) && !empty($value["#"][$message["CC_BSC1_CASHBOX_CHECKS"]][0]["#"][$message["CC_BSC1_CASHBOX_CHECK"]][0]['#'])) { $properties = array(); $val = $value["#"][$message["CC_BSC1_CASHBOX_CHECKS"]][0]["#"][$message["CC_BSC1_CASHBOX_CHECK"]][0]; $id = $val["#"][$message["CC_BSC1_ID"]][0]["#"]; self::internalizeFields($id, $fieldsInfo); $result['ID'] = $id; if (isset($val["#"][$message["CC_BSC1_PROPERTY_VALUES"]][0]["#"][$message["CC_BSC1_PROPERTY_VALUE"]]) && isset($val["#"][$message["CC_BSC1_PROPERTY_VALUES"]][0]["#"][$message["CC_BSC1_PROPERTY_VALUE"]][0]['#']) && !empty($val["#"][$message["CC_BSC1_PROPERTY_VALUES"]][0]["#"][$message["CC_BSC1_PROPERTY_VALUE"]][0]['#'])) { foreach($val["#"][$message["CC_BSC1_PROPERTY_VALUES"]][0]["#"][$message["CC_BSC1_PROPERTY_VALUE"]] as $property) { $propertyName = $property["#"][$message["CC_BSC1_ID"]][0]["#"]; $propertyValue = $property["#"][$message["CC_BSC1_VALUE"]][0]["#"]; if(strlen($propertyValue)>0) $properties[$propertyName] = $propertyValue; } } foreach($fieldsInfo['PROPERTIES']['FIELDS'] as $name => $fieldInfo) { if(!empty($properties[$message["CC_BSC1_".$name]])) { $fieldValue = $properties[$message["CC_BSC1_".$name]]; self::internalizeFields($fieldValue, $fieldInfo); $result[$name] = $fieldValue; } } return $result; } } /** * @param array $value * @param array $fieldsInfo * @return null */ protected static function resolveTraitsParams(array $value, array $fieldsInfo) { $result = null; $message = self::getMessage(); if (is_array($value["#"][$message["CC_BSC1_REK_VALUES"]][0]["#"][$message["CC_BSC1_REK_VALUE"]]) && !empty($value["#"][$message["CC_BSC1_REK_VALUES"]][0]["#"][$message["CC_BSC1_REK_VALUE"]])) { $traits = array(); foreach($value["#"][$message["CC_BSC1_REK_VALUES"]][0]["#"][$message["CC_BSC1_REK_VALUE"]] as $val) { $traitName = $val["#"][$message["CC_BSC1_NAME"]][0]["#"]; $traitValue = $val["#"][$message["CC_BSC1_VALUE"]][0]["#"]; if(strlen($traitValue)>0) $traits[$traitName] = $traitValue; } foreach($fieldsInfo['FIELDS'] as $name => $fieldInfo) { $fieldValue = ''; if($name == 'PROPERTY_VALUE_BASKET') { foreach($traits as $k=>$v) { $namePropertyBaslet = $message["CC_BSC1_PROP_BASKET"]; if (strpos($k, $namePropertyBaslet."#") === 0) { $position = strpos($k, $namePropertyBaslet."#"); $idBasketProperty = substr($k, $position + strlen($namePropertyBaslet."#")); self::internalizeFields($v); $result['PROP_BASKET'][$idBasketProperty] = $v; //TODO: check && fix } } } elseif($name == 'TYPE_OF_NOMENKLATURA') { if($traits[$message["CC_BSC1_ITEM_TYPE"]] == $message["CC_BSC1_ITEM"]) $fieldValue = Exchange\ImportBase::ITEM_ITEM; elseif($traits[$message["CC_BSC1_ITEM_TYPE"]] == $message["CC_BSC1_SERVICE"]) $fieldValue = Exchange\ImportBase::ITEM_SERVICE; self::internalizeFields($fieldValue, $fieldInfo['FIELDS']['VALUE']); $result['ITEM_TYPE'] = $fieldValue; //TODO: check && fix } elseif(!empty($traits[$message["CC_BSC1_".$name]])) { $fieldValue = $traits[$message["CC_BSC1_".$name]]; self::internalizeFields($fieldValue, $fieldInfo['FIELDS']['VALUE']); $result[$name] = $fieldValue; //TODO: check && fix } } } return $result; } /** * @param array $value * @param array $fieldsInfo * @return null */ protected static function resolveTaxParams(array $value, array $fieldsInfo) { $result = null; $message = self::getMessage(); if (is_array($value["#"][$message["CC_BSC1_TAXES"]][0]["#"][$message["CC_BSC1_TAX"]]) && !empty($value["#"][$message["CC_BSC1_TAXES"]][0]["#"][$message["CC_BSC1_TAX"]])) { $field = $value["#"][$message["CC_BSC1_TAXES"]][0]["#"][$message["CC_BSC1_TAX"]]; foreach($fieldsInfo['FIELDS'] as $name => $info) { if(!empty($field[0]["#"][$message["CC_BSC1_".$name]][0]["#"])) { $fieldValue = $field[0]["#"][$message["CC_BSC1_".$name]][0]["#"]; self::internalizeFields($fieldValue, $info); $result[$name] = $fieldValue; } } } return $result; } /** * @param array $value * @param array $fieldsInfo * @return null */ protected static function resolveDiscountsParams(array $value, array $fieldsInfo) { $result = null; $message = self::getMessage(); if (is_array($value["#"][$message["CC_BSC1_DISCOUNTS"]][0]["#"][$message["CC_BSC1_DISCOUNT"]]) && !empty($value["#"][$message["CC_BSC1_DISCOUNTS"]][0]["#"][$message["CC_BSC1_DISCOUNT"]])) { $field = $value["#"][$message["CC_BSC1_DISCOUNTS"]][0]["#"][$message["CC_BSC1_DISCOUNT"]]; foreach($fieldsInfo['FIELDS'] as $name => $info) { if(!empty($field[0]["#"][$message["CC_BSC1_".$name]][0]["#"])) { $fieldValue = $field[0]["#"][$message["CC_BSC1_".$name]][0]["#"]; self::internalizeFields($fieldValue, $info); $result[$name] = $fieldValue; } } } return $result; } /** * @param $value * @param array $fieldsInfo * @return null */ protected static function resolveUnitParams($value, array $fieldsInfo) { $result = null; $message = self::getMessage(); if (is_array($value["#"][$message["CC_BSC1_ITEM_UNIT"]]) && !empty($value["#"][$message["CC_BSC1_ITEM_UNIT"]])) { $field = $value["#"][$message["CC_BSC1_ITEM_UNIT"]]; foreach($fieldsInfo['FIELDS'] as $name => $info) { if(is_array($field[0]["#"])) { if(!empty($field[0]["#"][$message["CC_BSC1_".$name]][0]["#"])) { $fieldValue = $field[0]["#"][$message["CC_BSC1_".$name]][0]["#"]; self::internalizeFields($fieldValue, $info); $result[$name] = $fieldValue; } } else { $fieldValue=''; if($result==null) { $fieldValue = $field[0]["#"]; self::internalizeFields($fieldValue, $info); } $result[$name] = $fieldValue; } } } return $result; } /** * @param array $fields * @return array|null */ protected static function fillItemsFields(array $fields) { $result = null; $basketItems = array(); foreach($fields['ITEMS_FIELDS'] as $item) { $priceone = $item['PRICE_PER_UNIT']; if (DoubleVal($priceone) <= 0) $priceone = $item["PRICE_ONE"]; $discountPrice = ""; if (doubleval($item['QUANTITY']) > 0) { $price = PriceMaths::roundPrecision($item['SUMM'] / $item['QUANTITY']); $priceone = PriceMaths::roundPrecision($priceone); if(isset($item['DISCOUNTS']['SUMM']) && $item['DISCOUNTS']['SUMM']<>'') { if ($priceone != $price) $discountPrice = DoubleVal($priceone - $price); } elseif($priceone>0) $price = $priceone; $basketItems = Array( 'ID' => $item['ID'], 'NAME' => $item['NAME'], 'PRICE' => $price, 'PRICE_ONE' => $priceone, 'QUANTITY' => $item['QUANTITY'], 'TYPE' => $item['REK_VALUES']['ITEM_TYPE'], 'MEASURE_CODE' => !empty($item['ITEM_UNIT']) ? $item['ITEM_UNIT']['ITEM_UNIT_CODE']:null, 'MEASURE_NAME' => !empty($item['ITEM_UNIT']) ? $item['ITEM_UNIT']['ITEM_UNIT_NAME']:null, 'ATTRIBUTES' => !empty($item['REK_VALUES']['PROP_BASKET']) ? $item['REK_VALUES']['PROP_BASKET']:null, 'TAX' => array( 'VAT_RATE' => !empty($item['TAXES']['TAX_VALUE']) ? $item['TAXES']['TAX_VALUE']/100:null, 'VAT_INCLUDED' => !empty($item['TAXES']['IN_PRICE']) ? $item['TAXES']['IN_PRICE']:'Y'//if tax is null then always included by default ), 'DISCOUNT' => array( 'PRICE' => $discountPrice ) ); } $result[][$item['ID']] = $basketItems; } return $result; } /** * @param $value * @param null $fieldInfo */ protected static function internalizeFields(&$value, $fieldInfo=null) { if($value<>'') { switch($fieldInfo['TYPE']) { case 'datetime': $date = str_replace("T", " ", $value); $value = new Type\DateTime(\CAllDatabase::FormatDate($date, "YYYY-MM-DD HH:MI:SS", \CAllSite::GetDateFormat("FULL", LANG))); break; case 'bool': $value = $value == "true" ? 'Y':'N'; break; case 'float': $value = self::toFloat($value); break; case 'int': $value = self::toInt($value); break; } } } /** * @param $value * @return float */ protected static function toFloat($value) { $saleOrderLoader = new \CSaleOrderLoader(); return $saleOrderLoader->ToFloat($value); } /** * @param $value * @return int */ protected static function toInt($value) { $saleOrderLoader = new \CSaleOrderLoader(); return $saleOrderLoader->ToInt($value); } /** * @param array $document * @return array */ static public function prepareFieldsData(array $document) { $message = self::getMessage(); $fields = array(); foreach(static::getFieldsInfo() as $k=>$v) { switch($k) { case 'ID': $value = $document["#"][$message["CC_BSC1_NUMBER"]][0]["#"]; self::internalizeFields($value, $v); $fields[$k] = $value; break; case 'ID_1C': $value = $document["#"][$message["CC_BSC1_ID"]][0]["#"]; self::internalizeFields($value, $v); $fields[$k] = $value; break; case 'ORDER_ID': $value = $document["#"][$message["CC_BSC1_NUMBER_BASE"]][0]["#"]; self::internalizeFields($value, $v); $fields[$k] = $value; break; case 'VERSION_1C': case 'COMMENT': case 'CANCELED': case '1C_DATE': $value = $document["#"][$message["CC_BSC1_".$k]][0]["#"]; self::internalizeFields($value, $v); $fields[$k] = $value; break; case '1C_TIME': $date1C = $document["#"][$message["CC_BSC1_1C_DATE"]][0]["#"]; if($date1C >0) { $value = $date1C." ".$document["#"][$message["CC_BSC1_".$k]][0]["#"]; self::internalizeFields($value, $v); $fields[$k] = $value; } break; case 'OPERATION': $typeId = self::resolveRawDocumentTypeId($document); $fields[$k] = DocumentType::resolveName($typeId); break; case 'AMOUNT': $value = $document["#"][$message["CC_BSC1_SUMM"]][0]["#"]; self::internalizeFields($value, $v); $fields[$k] = $value; break; case 'CASH_BOX_CHECKS': $fields[$k] = self::resolveCashBoxCheksParams($document, $v); break; case 'REK_VALUES': $fields[$k] = self::resolveTraitsParams($document, $v); break; case 'ITEMS': $fields['ITEMS_FIELDS'] = self::resolveItemsParams($document, $v); if(!empty($fields['ITEMS_FIELDS'])) $fields[$k] = self::fillItemsFields($fields); break; case 'TAXES': $taxValue = 0; $taxName = ''; if(!empty($fields['ITEMS_FIELDS'])) { foreach($fields['ITEMS_FIELDS'] as $items) { foreach ($items as $item) { $taxValueTmp = isset($item['TAX_VALUE']) ? $item['TAX_VALUE']:0; if (IntVal($taxValueTmp) > IntVal($taxValue)) { $taxName = $item['NAME']; $taxValue = $taxValueTmp; } } } } if(IntVal($taxValue)>0) { $fields[$k] = self::resolveTaxParams($document, $v); $fields[$k]['VALUE'] = $taxValue; $fields[$k]['NAME'] = $taxName; } break; case 'AGENT': /* includes document profile */ $documentProfile = new UserProfileDocument(); $mess = Main\Localization\Loc::loadLanguageFile($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/sale/general/export.php'); if(is_array($document["#"][$mess["SALE_EXPORT_CONTRAGENTS"]][0]["#"][$mess["SALE_EXPORT_CONTRAGENT"]][0]["#"])) { $fields[$k] = $documentProfile::prepareFieldsData($document["#"][$mess["SALE_EXPORT_CONTRAGENTS"]][0]["#"][$mess["SALE_EXPORT_CONTRAGENT"]][0]["#"]); } break; } } return $fields; } /** * @return array * @throws Main\ArgumentException */ static protected function getFieldsInfo() { throw new Main\ArgumentException('The method is not implemented.'); } public function openNodeDirectory($level, $name) { $name = static::getLangByCodeField($name); return str_repeat("\t", $level)."<".$name.">\n"; } public function closeNodeDirectory($level, $name) { $name = static::getLangByCodeField($name); return str_repeat("\t", $level)."</".$name.">\n"; } protected function formatXMLNode($level, $name, $value, $parameters=array()) { $params = ''; if(count($parameters)>0) { foreach ($parameters as $code=>$v) $params .= ' '.static::getLangByCodeField($code).'="'.$v.'" '; } $name = static::getLangByCodeField($name); return str_repeat("\t", $level)."<".$name.$params.">".\CDataXML::xmlspecialchars($value)."</".$name.">\n"; } /** * @param int $level * @return string */ public function output($level=0) { $fields = $this->getFieldValues(); return $this->outputXml($fields, $level); } /** * @param array $fields * @return string */ protected function outputXml(array $fields, $level=0) { $xml = ''; foreach ($fields as $name=>$value) { if(is_array($value)) { switch ($name) { case 'REK_VALUES': $xml .= $this->outputXmlRekValue($level, $name, $value); break; case 'ITEMS': $xml .= $this->outputXmlItems($level, $name, $value); break; case 'AGENT': $profile = new ProfileDocument(); $profile->setFields($value); $xml .= $this->openNodeDirectory($level, 'AGENTS'); $xml .= $this->openNodeDirectory($level+1, $profile->getNameNodeDocument()); $xml .= $profile->output($level+1); $xml .= $this->closeNodeDirectory($level+1, $profile->getNameNodeDocument()); $xml .= $this->closeNodeDirectory($level, 'AGENTS'); break; case 'STORIES': $xml .= $this->outputXmlStories($level, $name, $value); break; case 'TAXES': $xml .= $this->outputXmlTaxes($level, $name, $value); break; case 'DISCOUNTS': $xml .= $this->outputXmlDiscounts($level, $name, $value); break; } } else $xml .= $this->formatXMLNode($level, $name, $value); } return $xml; } /** * @param $code * @return string */ public static function getLangByCodeField($code) { $message = static::getMessageExport(); if(isset($message['CC_BSC1_'.$code])) { return $message['CC_BSC1_'.$code]; } elseif(isset($message['SALE_EXPORT_'.$code])) { return $message['SALE_EXPORT_'.$code]; } else { return $code; } } protected function outputXmlRekValue($level, $name, $value) { $result =''; $result .= $this->openNodeDirectory($level+0, $name); foreach ($value as $list) { $result .= $this->openNodeDirectory($level+1, 'REK_VALUE'); foreach ($list as $k=>$v) $result .= $this->formatXMLNode($level+2, $k, $v); $result .= $this->closeNodeDirectory($level+1, 'REK_VALUE'); } $result .= $this->closeNodeDirectory($level+0, $name); return $result; } protected function outputXmlUnits($level, $name, $list) { $result = ''; $result .= $this->openNodeDirectory($level+0, $name); foreach ($list as $k=>$v) $result .= $this->formatXMLNode($level+1, $k, $v); $result .= $this->closeNodeDirectory($level+0, $name); return $result; } protected function outputXmlBaseUnit($level, $name, $value) { return $this->formatXMLNode($level+0, $name, '', array( "CODE"=>$value, "FULL_NAME_UNIT"=>static::getLangByCodeField("SHTUKA"), "INTERNATIONAL_ABR"=>static::getLangByCodeField("RCE") )); } protected function outputXmlItems($level, $name, $items) { $result = ''; $result .= $this->openNodeDirectory($level+0, $name); foreach ($items as $item) { $result .= $this->openNodeDirectory($level+1, 'ITEM'); foreach ($item as $code=>$value) { if(is_array($value)) { switch ($code) { case 'REK_VALUES': $result .= $this->outputXmlRekValue($level+2, $code, $value); break; case 'ITEM_UNIT': $result .= $this->outputXmlUnits($level+2, $code, $value); break; case 'DISCOUNTS': $result .= $this->outputXmlDiscounts($level+2, $code, $value); break; case 'TAX_RATES': $result .= $this->outputXmlTaxRates($level+2, $code, array($value)); break; case 'TAXES': $result .= $this->outputXmlTaxes($level+2, $code, array($value)); break; } } elseif ($code == 'BASE_UNIT') $result .= $this->outputXmlBaseUnit($level+2, $code, $value); else $result .= $this->formatXMLNode($level+2, $code, $value); } $result .= $this->closeNodeDirectory($level+1, 'ITEM'); } $result .= $this->closeNodeDirectory($level+0, $name); return $result; } protected function outputXmlAddress($level, $addresses) { $result = ''; foreach ($addresses as $code=>$address) { if(is_array($address)) { foreach ($address as $values) { $result .= $this->openNodeDirectory($level+0, $code); foreach ($values as $k=>$v) $result .= $this->formatXMLNode($level+1, $k, $v); $result .= $this->closeNodeDirectory($level+0, $code); } } else $result .= $this->formatXMLNode($level+0, $code, $address); } return $result; } protected function outputXmlStories($level, $name, $stories) { $result =''; $result .= $this->openNodeDirectory($level+0, $name); foreach ($stories as $store) { $result .= $this->openNodeDirectory($level+1, 'STORY'); foreach ($store as $code=>$value) { if(is_array($value)) { switch ($code) { case 'ADDRESS': case 'CONTACTS': $result .= $this->openNodeDirectory($level+2, $code); $result .= $this->outputXmlAddress($level+3, $value); $result .= $this->closeNodeDirectory($level+2, $code); break; } } else $result .= $this->formatXMLNode($level+2, $code, $value); } $result .= $this->closeNodeDirectory($level+1, 'STORY'); } $result .= $this->closeNodeDirectory($level+0, $name); return $result; } protected function outputXmlTaxRates($level, $name, $taxes) { $result =''; $result .= $this->openNodeDirectory($level+0, $name); foreach ($taxes as $tax) { $result .= $this->openNodeDirectory($level+1, 'RATE'); foreach ($tax as $k=>$v) $result .= $this->formatXMLNode($level+2, $k, $v); $result .= $this->closeNodeDirectory($level+1, 'RATE'); } $result .= $this->closeNodeDirectory($level+0, $name); return $result; } protected function outputXmlTaxes($level, $name, $taxes) { $result =''; $result .= $this->openNodeDirectory($level+0, $name); foreach ($taxes as $tax) { $result .= $this->openNodeDirectory($level+1, 'TAX'); foreach ($tax as $k=>$v) $result .= $this->formatXMLNode($level+2, $k, $v); $result .= $this->closeNodeDirectory($level+1, 'TAX'); } $result .= $this->closeNodeDirectory($level+0, $name); return $result; } protected function outputXmlDiscounts($level, $name, $discounts) { $result =''; $result .= $this->openNodeDirectory($level+0, $name); $result .= $this->openNodeDirectory($level+1, 'DISCOUNT'); foreach ($discounts as $k=>$v) $result .= $this->formatXMLNode($level+2, $k, $v); $result .= $this->closeNodeDirectory($level+1, 'DISCOUNT'); $result .= $this->closeNodeDirectory($level+0, $name); return $result; } public function getNameNodeDocument() { return 'DOCUMENT'; } }