November Happy Hour will be moved to Thursday December 5th.
AI OnAI Off
November Happy Hour will be moved to Thursday December 5th.
You could do something like this. Add logic to determine customer price group. Then register your implementation of IPriceService in container
using EPiServer.Events.ChangeNotification; using EPiServer.Framework.Cache; using Mediachase.Commerce; using Mediachase.Commerce.Catalog; using Mediachase.Commerce.Engine.Events; using Mediachase.Commerce.Pricing; using Mediachase.Commerce.Pricing.Database; using System; using System.Collections.Generic; using System.Linq; namespace EPiServer.Commerce.Sample.Business { /// <summary> /// / /// </summary> /// <seealso cref="Mediachase.Commerce.Pricing.Database.PriceServiceDatabase" /> public class PriceGroupPricingProvider : PriceServiceDatabase { public PriceGroupPricingProvider(ICatalogSystem catalogSystem, IChangeNotificationManager changeManager, ISynchronizedObjectInstanceCache objectInstanceCache, CatalogKeyEventBroadcaster broadcaster, IApplicationContext applicationContext, EntryIdentityResolver identityResolver) : base(catalogSystem, changeManager, objectInstanceCache, broadcaster, applicationContext, identityResolver) { } public IPriceValue GetDefaultPrice(MarketId market, DateTime validOn, CatalogKey catalogKey, Currency currency) { var myPricingGroup = CustomerPricing.AllCustomers; if (true)//enter logic here to get customer price group { myPricingGroup = new CustomerPricing (CustomerPricing.PriceType.PriceGroup, "mycode"); } PriceFilter filter = new PriceFilter() { Quantity = 0, Currencies = new Currency[] { currency }, CustomerPricing = new CustomerPricing[] { myPricingGroup } }; return GetPrices(market, validOn, catalogKey, filter).SingleOrDefault(); } public IEnumerable<IPriceValue> GetPrices(MarketId market, DateTime validOn, CatalogKey catalogKey, PriceFilter filter) { var myPricingGroup = CustomerPricing.AllCustomers; if (true)//enter logic here to get customer price group { myPricingGroup = new CustomerPricing(CustomerPricing.PriceType.PriceGroup, "mycode"); } filter.CustomerPricing = new CustomerPricing[] { myPricingGroup }; return base.GetPrices(market, validOn, catalogKey, filter); } public IEnumerable<IPriceValue> GetPrices(MarketId market, DateTime validOn, IEnumerable<CatalogKey> catalogKeys, PriceFilter filter) { var myPricingGroup = CustomerPricing.AllCustomers; if (true)//enter logic here to get customer price group { myPricingGroup = new CustomerPricing(CustomerPricing.PriceType.PriceGroup, "mycode"); } filter.CustomerPricing = new CustomerPricing[] { myPricingGroup }; return base.GetPrices(market, validOn, catalogKeys, filter); } public IEnumerable<IPriceValue> GetPrices(MarketId market, DateTime validOn, IEnumerable<CatalogKeyAndQuantity> catalogKeysAndQuantities, PriceFilter filter) { var myPricingGroup = CustomerPricing.AllCustomers; if (true)//enter logic here to get customer price group { myPricingGroup = new CustomerPricing(CustomerPricing.PriceType.PriceGroup, "mycode"); } filter.CustomerPricing = new CustomerPricing[] { myPricingGroup }; return base.GetPrices(market, validOn, catalogKeysAndQuantities, filter); } } }
Hi Mark!
This look really good. And this will work even when the workflow kicks in? I solved it by implementing my own workflows but maybe this is better?
/Kristoffer
Hi!
Our customer has price groups for their customers and if you are not connected to a price group the have better prices if you buy 5 instead of 1 and so on. The thing is that a customer connected to a price group should not get the better price if they buy 5, it should always be the price in the price group.
How do I handle this? The totalt in the cart are calculated with the cheaper price but the customer should get the higher price since they are connected to a price group.
So what I want to do is to have Commerce to always pick the price group price even if it is higher.
Thanks!
/Kristoffer