Цена с учетом опционных свойств при выгрузке заказов — различия между версиями
Материал из Umicms
Stexe (обсуждение | вклад) (Новая страница: « category:Интеграция с 1Сcategory:Модуль Обмен данными[[category:Вопросы и уроки разработки сайтов…») |
Stexe (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 2: | Строка 2: | ||
'''Задача:''' По умолчанию при выгрузке заказов в 1С, цена за единицу товара указывается без учета цен выбранных опционных свойств. | '''Задача:''' По умолчанию при выгрузке заказов в 1С, цена за единицу товара указывается без учета цен выбранных опционных свойств. | ||
− | Реализуем выгрузку заказов с товарами, у которых цены за единицу будут указаны с учетом выбранных опционных свойств, то есть сумма цены товара и цен выбранных опций c учетом скидок <br /><br /> | + | Реализуем выгрузку заказов с товарами, у которых цены за единицу будут указаны с учетом выбранных опционных свойств, то есть сумма цены товара и цен выбранных опций c учетом скидок. <br /><br /> |
'''Реализация:''' | '''Реализация:''' | ||
Единственное, что нужно сделать - это переопределить шаблон трансформации в формат CommerceML2.0 товара в заказе.<br /> | Единственное, что нужно сделать - это переопределить шаблон трансформации в формат CommerceML2.0 товара в заказе.<br /> | ||
Строка 55: | Строка 55: | ||
<xsl:variable name="origin_price" select="$sum_optioned + $item_price"/> | <xsl:variable name="origin_price" select="$sum_optioned + $item_price"/> | ||
<xsl:variable name="discount_procent"> | <xsl:variable name="discount_procent"> | ||
− | <xsl:apply-templates select="properties//property/value/item[@type-guid='emarket-discount']" mode="disc"/> | + | <xsl:choose> |
+ | <xsl:when test="properties//property/value/item[@type-guid='emarket-discount']"> | ||
+ | <xsl:apply-templates select="properties//property/value/item[@type-guid='emarket-discount']" mode="disc"/> | ||
+ | </xsl:when> | ||
+ | <xsl:otherwise> | ||
+ | <xsl:text>0</xsl:text> | ||
+ | </xsl:otherwise> | ||
+ | </xsl:choose> | ||
</xsl:variable> | </xsl:variable> | ||
<xsl:value-of select="format-number($origin_price * ( (100 - number($discount_procent)) * 0.01 ), '#.##')"/> | <xsl:value-of select="format-number($origin_price * ( (100 - number($discount_procent)) * 0.01 ), '#.##')"/> |
Текущая версия на 09:29, 1 апреля 2014
Задача: По умолчанию при выгрузке заказов в 1С, цена за единицу товара указывается без учета цен выбранных опционных свойств.
Реализуем выгрузку заказов с товарами, у которых цены за единицу будут указаны с учетом выбранных опционных свойств, то есть сумма цены товара и цен выбранных опций c учетом скидок.
Реализация:
Единственное, что нужно сделать - это переопределить шаблон трансформации в формат CommerceML2.0 товара в заказе.
Файл \xsl\export\custom\ordersCommerceML.xsl должен выглядеть следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl"
xmlns:udt="http://umi-cms.ru/2007/UData/templates"
extension-element-prefixes="php"
exclude-result-prefixes="xsl php udt">
<xsl:template match="object" mode="order-item">
<xsl:param name="good-id" select="properties/group/property[@name='item_link']/value/page/@id" />
<xsl:param name="good" select="document(concat('upage://', $good-id))/udata/page" />
<xsl:param name="item_price" select="properties/group/property[@name='item_price']/value" />
<xsl:param name="item_amount" select="properties/group/property[@name='item_amount']/value" />
<xsl:param name="item_total_price" select="properties/group/property[@name='item_total_price']/value" />
<Товар>
<xsl:choose>
<xsl:when test="not($good)">
<Ид>
<xsl:value-of select="@id" />
</Ид>
</xsl:when>
<xsl:when test="$good//property[@name = '1c_product_id']/value">
<Ид>
<xsl:value-of select="$good//property[@name = '1c_product_id']/value" />
</Ид>
</xsl:when>
<xsl:otherwise>
<Ид>
<xsl:value-of select="$good-id" />
</Ид>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="$good//property[@name = '1c_catalog_id']/value">
<ИдКаталога>
<xsl:value-of select="$good//property[@name = '1c_catalog_id']/value" />
</ИдКаталога>
</xsl:if>
<Наименование>
<xsl:value-of select="$good/name | @name" />
</Наименование>
<БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
<ЦенаЗаЕдиницу>
<xsl:variable name="sum_optioned" select="sum(properties//property[@type='optioned']/value/option/@float)"/>
<xsl:variable name="origin_price" select="$sum_optioned + $item_price"/>
<xsl:variable name="discount_procent">
<xsl:choose>
<xsl:when test="properties//property/value/item[@type-guid='emarket-discount']">
<xsl:apply-templates select="properties//property/value/item[@type-guid='emarket-discount']" mode="disc"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>0</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="format-number($origin_price * ( (100 - number($discount_procent)) * 0.01 ), '#.##')"/>
</ЦенаЗаЕдиницу>
<Сумма>
<xsl:value-of select="$item_total_price" />
</Сумма>
<Количество>
<xsl:value-of select="$item_amount" />
</Количество>
<Единица>шт</Единица>
<Коэффициент>1</Коэффициент>
<ЗначенияРеквизитов>
<ЗначениеРеквизита>
<Наименование>ВидНоменклатуры</Наименование>
<Значение>Товар</Значение>
</ЗначениеРеквизита>
<ЗначениеРеквизита>
<Наименование>ТипНоменклатуры</Наименование>
<Значение>Товар</Значение>
</ЗначениеРеквизита>
</ЗначенияРеквизитов>
</Товар>
</xsl:template>
<xsl:template match="item" mode="disc">
<xsl:variable name="discount_obj" select="document(concat('uobject://', @id))/udata"/>
<xsl:variable name="discount_mod_id" select="$discount_obj//property[@name='discount_modificator_id']/value/item/@id"/>
<xsl:variable name="discount_mod" select="document(concat('uobject://', $discount_mod_id))/udata"/>
<xsl:variable name="discount_mod_proc" select="number($discount_mod//property[@type='float']/value)"/>
<xsl:value-of select="$discount_mod_proc"/>
</xsl:template>
</xsl:stylesheet>
Изменения коснулись узла <ЦенаЗаЕдиницу> и был добавлен шаблон для получения процента скидки <xsl:template match="item" mode="disc">