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 GetCouponAdjustedVolumeHookResponse
4. 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 over 3 years ago