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 4 months ago
