Crediting Volume with a Coupon
Coupons reduce the total of an order. This much is obvious; however, some may have that a coupon reduces the qualifying volume, as well.
Suppose you want the Associate to receive the full qualifying volume even if they use a coupon. In that case, you can change use the GetCouponAdjustedVolume Hook with the following in your Extension.
Overriding the Base Functionality
Full Example
namespace Demo
{
    public class ExtensionEntry : IExtension
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddScoped<IHook<GetCouponAdjustedVolumeHookRequest, GetCouponAdjustedVolumeHookResponse>, GetCouponVolume>(); 
        }
        public class GetCouponVolume : IHook<GetCouponAdjustedVolumeHookRequest, GetCouponAdjustedVolumeHookResponse>
        {
            public GetCouponAdjustedVolumeHookResponse Invoke(GetCouponAdjustedVolumeHookRequest request,Func<GetCouponAdjustedVolumeHookRequest, GetCouponAdjustedVolumeHookResponse> func)
            {
                return new GetCouponAdjustedVolumeHookResponse
                {
                    CouponAdjustedVolume = new CouponAdjustedVolume { Cv = request.Volume.Cv, Qv = request.Volume.Qv }
                };
            }
        
    }
}Let's break this example into sections:
1. Declare GetCouponVolume Class
GetCouponVolume ClassIn ExtensionEntry.cs, declare a class called GetCouponVolume that inherits the IHook interface:
namespace Demo
{
    public class ExtensionEntry : IExtension
    {
          public class GetCouponVolume : IHook<GetCouponAdjustedVolumeHookRequest, GetCouponAdjustedVolumeHookResponse>
IHook is a generic interface that represents any Hook in the system. We're using it to grab the GetCouponAdjustedVolume Hook.
2. Invoke the GetCouponAdjustedVolume Hook
Next, invoke the Hook within the GetCouponVolume class:
{
      public GetCouponAdjustedVolumeHookResponse Invoke(GetCouponAdjustedVolumeHookRequest request, Func<GetCouponAdjustedVolumeHookRequest, GetCouponAdjustedVolumeHookResponse> func)
}3. Return the Hook response
In the Hook, return the Hook response:
return new GetCouponAdjustedVolumeHookResponse4. Adjust the volume
In the Hook response, adjust the volume with the CouponAdjustedVolume class:
        return new GetCouponAdjustedVolumeHookResponse
        {
          CouponAdjustedVolume = new CouponAdjustedVolume { Cv = request.Volume.Cv, Qv = request.Volume.Qv }
        };5. Register the Hook
Finally, register the Hook under the ConfigureServices method:
services.AddScoped<IHook<GetCouponAdjustedVolumeHookRequest, GetCouponAdjustedVolumeHookResponse>, GetCouponVolume>(); Updated 5 months ago
