2013-06-27 2 views
0

Я просмотрел документацию/учебное пособие по Broadleaf commerce v2.2, в частности, настройку Add Item Workflow и Dynamic Pricing.Broadleaf Commerce - Динамическое ценообразование

Я хочу динамически оценивать продукт, когда он добавляется в корзину.

Я правильно думать - когда продукт должен быть repriced может быть два подхода, чтобы сделать так:

Это можно проиллюстрировать:

Подход 1:

class DynamicPricingActivity extends BaseActivity{ 

.... 
@Override 
public ProcessContext execute(ProcessContext context) throws Exception { 
CartOperationRequest request = ((CartOperationContext) context).getSeedData(); 

updatePhonePrice(request.getOrder()); 

return context; 
} 
.... 
} 

подход 2:

Есть вопросы по инструкции в Dynamic Pricing Configuration.

  • Как вызывается метод MyDynamicSkuPricingServiceImpl # getSkuPrices()?

    (В документации упоминается, что MyDynamicSkuPricingServiceImpl#getSkuPrices() получит вызывается при getPrice() метод вызывается, я настроил все, как указано в документации, но getSkuPrices() никогда не вызывается неявно)

ОБНОВЛЕНО - Я обнаружил, что если цены на HashMap оцениваются в DynamicPricingFilter, то DynamicPricingService#getSkuPrices() не будет вызываться. Таким образом, для dynamicPricingService работать, необходимо иметь непустое HashMap и будет вызываться implicitly.Not уверен, почему это необходимо ...

Как обновить цены продукта добавляемые в корзину, не сохраняя это значение в базе данных?

ОБНОВЛЕНО

Я был в состоянии добавить динамическое ценообразование, не сохранять это значение в базе данных:

DiscreteOrderItem orderItem = orderItemService.createDynamicPriceDiscreteOrderItem(orderRequest,   pricingConsiderations); 
    orderItem.setRetailPrice(new Money("623.34")); 
    orderItem.setSalePrice(new Money("888.888")); 
    orderItem.setPrice(orderItem.getSalePrice()); 
    cart.addOrderItem(orderItem); 

    cart = orderService.save(cart, true); 

Однако тележка общий устанавливаются в розничную стоимость в цене : 623,34. Как получить правильное общее количество (888,888)?

ответ

1

За последний вопрос об переопределении цены. Broadleaf предоставляет методы для переопределения цены (orderItem.setOverrideRetailPrice(), orderItem.setOverrideSalePrice()).

Без использования этих методов служба ценообразования будет сбрасываться до текущей цены в SKU (или динамической реализации цены).

Во всех случаях цена продажи, которая больше, чем розничная цена, будет проигнорирована.

Часто при переопределении цен вы также хотите обойти систему скидок. Вы можете использовать orderItem.setDiscountingAllowed(false).

Поскольку это типичное поведение, также предоставляется метод удобства [orderItem.setPrice()], который переопределит как розничные, так и розничные цены, а также установит дисконтирование, допустимое к ложному.

Brian Polster - Broadleaf Commerce