When modifying product pricing, you'll notice 3 available fields by default (you can also add custom price fields):
- Normal Price
- Sale Price
- Member Price
Normal and Sale prices work out-of-the-box, but Member price is disabled by default. In Active Commerce, product pricing is calculated using a pipeline, acGetProductTotals (in xActiveCommerce.config). To enable Member pricing, you'll need to modify/patch the GetMemberPrice processor, setting the "Enabled" value to true.
<acGetProductTotals> <processor type="ActiveCommerce.Prices.Pipelines.GetProductTotals.GetNormalPrice, ActiveCommerce.Kernel"> <PriceName>Normalprice</PriceName> </processor> <processor type="ActiveCommerce.Prices.Pipelines.GetProductTotals.GetNormalPrice, ActiveCommerce.Kernel"> <PriceName>SalePrice</PriceName> </processor> <processor type="ActiveCommerce.Prices.Pipelines.GetProductTotals.GetMemberPrice, ActiveCommerce.Kernel"> <PriceName>Memberprice</PriceName> <Enabled>false</Enabled> <!-- <Roles hint="list"> <role id="1">extranet\Members</role> <role id="2">extranet\Distributors</role> </Roles> --> </processor> ... </acGetProductTotals>
Member pricing also supports limiting to one or more specified roles. You can see an example commented out. To use, patch in your own Roles definition.
Keep in mind, the pipeline will always use the lowest available price, and this is what will be displayed to the customer. So, for example, if your Sale price is lower than the Member price (and the current customer belongs to one of the specified Roles), the customer will see the Sale price, not the Member price.