Limit Order Line Quantity

Guide to limit order line quantity in Umbraco Commerce.

Since Commerce 15.3.2, there is a built-in orderline quantity check that handles the validation automatically.

This guide explains custom validation event handlers in Umbraco Commerce that enable limiting order line quantities based on:

  • The existing stock value of the product, and

  • The existing quantity of the product in the cart.

ProductAddValidationHandler

When adding a product to the cart, verify that the product is in stock. Also, ensure the customer does not exceed the available quantity in the cart.

public class ProductAddValidationHandler : ValidationEventHandlerBase<ValidateOrderProductAdd>
{
    private readonly IProductService _productService;

    public ProductAddValidationHandler(IProductService productService)
    {
        _productService = productService;
    }

    public override async Task ValidateAsync(ValidateOrderProductAdd evt)
    {
        var order = evt.Order;
        var productReference = evt.ProductReference;

        var stock = await _productService.GetProductStockAsync(productReference);

        var totalQuantities = order?.OrderLines.Where(x => x.ProductReference == productReference).Sum(x => x.Quantity) ?? 0;

        if (stock.HasValue && totalQuantities >= stock.Value)
            evt.Fail($"Only {stock} quantities can be purchased for {productReference}.");
    }
}

OrderLineQuantityValidationHandler

When changing the order line quantity on the cart page, ensure that the quantities being changed are in stock.

Register event handlers

Register the Umbraco Commerce event handlers via an IUmbracoCommerceBuilder extension method.

Last updated

Was this helpful?