Как сделать скидку применимой только к одному способу доставки в Commerce Server 2007?

Я искал ответ на этот, казалось бы, простой вопрос в Commerce Server 2007, но не нашел ничего полезного. Это похоже на то, что должно быть возможно. Как сделать скидку применимой только к одному способу доставки в Commerce Server 2007?

3 ответа

Решение

Я сталкивался с этой проблемой раньше, у меня был сценарий, когда стандартная опция доставки была единственной, которая когда-либо была бы обесценена, а на следующий день и международные варианты всегда были бы по полной цене.

В этом случае я написал пользовательский конвейерный компонент, который исключил любые скидки на доставку, если был выбран любой другой способ доставки, отличный от стандартного.

Я добавил этот компонент сценария в общий конвейер под компонентом ShippingDiscountAdjust, это немного хак, так как я жестко закодировал стандартный идентификатор доставки, но это никогда не изменится, так что я могу обойтись без него:

    функция MSCSExecute (config, orderform, context, flags)

        Dim отгрузок ' SimpleList отгрузок в корзине
        Dim shipment        'Словарь отгрузки из списка
        Dim sShipmentID

        'Сохранить скидки на доставку для каждой отправки (как написано в ShippingDiscountAdjust)
        Если не isNull(orderForm.Value("отгрузки")), то
            Установить отгрузки = orderForm.Value("отгрузки")    
            За каждую отгрузку в отгрузках            
               sShipmentID = shipment("shipping_method_id")
            следующий

            если sShipmentID <> "{00000000-0000-0000-0000-005719007655}" и orderForm.value("_cy_shipping_discounts_total") > 0, то 0
                orderform.value("_shipping_discount_description") = ""

                За каждую отгрузку в отгрузках            
                     orderForm.value("_cy_shipping_total") =orderForm.value("_cy_shipping_total")  + shipment.value("_cy_shipping_discounts_subtotal")
                     shipment.value("_cy_shipping_discounts_subtotal") = 0
                следующий

                orderForm.value("_cy_shipping_discounts_total") = 0
            конец, если
        Конец, если

        MSCSExecute = 1
    конечная функция

    sub MSCSOpen(config)

    конец суб


    sub MSCSClose()

    конец суб

Если вы хотите, чтобы скидка применялась только в том случае, если пользователь выбрал определенный способ доставки, это невозможно из коробки.

Вы всегда можете написать собственный компонент конвейера, но работа со скидками в конвейере может быть сложной.

Стив и Эрвин правы.Для этого не существует готового решения, но вы можете попытаться обойти его, используя пользовательские компоненты конвейера или компоненты сценариев.

Есть коммерческая альтернатива. Enticify - это заменитель компонентов конвейера скидок Commerce Server, который поддерживаетскидки, связанные со способом доставки( среди прочего).

Отказ от ответственности: я сотрудник Enticify.

Enticify добавляет концепцию отгрузочных выражений. Вы используете их так же, как и выражения соответствия(на самом деле вы устанавливаете их на вкладке "Соответствие требованиям"). Однако вы можете указать способ доставки со скидкой, указав свойства, такие какshipping_method_id,

Здесь вы видите выражение отправки, нацеленное наshipping_method_id(но вы можете настроить таргетинг на другие свойства груза):

Enticify Shipment Expression для идентификатора метода доставки

И здесь вы видите его в диалоговом окне выражений соответствия:

При запуске эта скидка будет применяться только к отправлениям, которые соответствуют этому выражению. Вы можете прочитать больше в документации Enticify Shipping Discounts. Это довольно мощный инструмент, так как он также может использоваться для определения скидок на продукты (например, получить скидку на продукт X при выборе доставки на следующий день).

Другие вопросы по тегам