Custom Promotion Criteria
Promotion criteria in Ucommerce are used to determine when to trigger a discount on an order.
Create a Custom Criterion
Creating a Definition
public class SetupCustomCriterion : BackgroundService
{
private readonly IServiceProvider _serviceProvider;
/// <inheritdoc />
public SetupCustomCriterion(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
/// <inheritdoc />
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
await using var asyncScope = _serviceProvider.CreateAsyncScope();
var dbContext = asyncScope.ServiceProvider.GetRequiredService<UcommerceDbContext>();
if (dbContext.Set<DefinitionEntity>().Any(x => x.Name == "Buy At Most"))
{
return;
}
// Set up data using dbContext
// Find the TargetOrderLine data type
var dataType = dbContext.Set<DataTypeEntity>()
.FirstOrDefault(x => x.Guid.ToString() == "b5295545-5583-41e1-8c93-7bc921c09e27");
var defFields = new List<DefinitionFieldEntity>();
defFields.Add(new DefinitionFieldEntity
{
Name = "Max Amount",
DataTypeId = 3,
DisplayOnSite = true,
DefaultValue = "0",
RenderInEditor = true,
Guid = Guid.Parse("42085d44-3e81-4d94-aad8-8699ae7d35b0")
});
defFields.Add(new DefinitionFieldEntity
{
Name = "Target Orderline",
DefaultValue = "0",
DisplayOnSite = true,
RenderInEditor = true,
DataType = dataType,
Guid = Guid.Parse("aa793b3f-2baf-45fb-a162-cb675e8d9b64")
});
dbContext.Set<DefinitionEntity>()
.Add(new DefinitionEntity
{
BuiltIn = false,
Description = "buy at Most criterion definition",
Name = "Buy At Most",
DefinitionTypeId = 5434834, //Id of the Criterion Definition Type
DefinitionFields = defFields,
Guid = Guid.Parse("99ab73d5-22ee-425c-97f8-f9794ed01944")
});
await dbContext.SaveChangesAsync(stoppingToken);
}
}Implementing a Pipeline Task for Satisfaction Check
Example
Validation (Optional)
Example
Tips for Reusability
Last updated