diff --git a/15/umbraco-commerce/SUMMARY.md b/15/umbraco-commerce/SUMMARY.md index 9d6c042cd78..8852f839981 100644 --- a/15/umbraco-commerce/SUMMARY.md +++ b/15/umbraco-commerce/SUMMARY.md @@ -57,6 +57,7 @@ * [Implementing a Currency Switcher](how-to-guides/currency-switching.md) * [Building a Members Portal](how-to-guides/member-portal.md) * [Order Number Customization](how-to-guides/order-number-customization.md) +* [Create an Order via Code](how-to-guides/create-order-via-code.md) ## Key Concepts diff --git a/15/umbraco-commerce/how-to-guides/create-order-via-code.md b/15/umbraco-commerce/how-to-guides/create-order-via-code.md new file mode 100644 index 00000000000..134348bc8c5 --- /dev/null +++ b/15/umbraco-commerce/how-to-guides/create-order-via-code.md @@ -0,0 +1,62 @@ +--- +description: Learn how to create an order via code in Umbraco Commerce. +--- + +# Create an Order via Code + +In some cases, such as when importing orders from another system, it may be necessary to create a fully finalized order via code. + +The example below demonstrates how to do this. The `api` variable is an instance of the `IUmbracoCommerceApi` interface, which is an injectable service accessed via [dependency injection](../key-concepts/dependency-injection.md). + +```csharp +await api.Uow.ExecuteAsync(async (uow) => +{ + // Fetch the store + var store = await api.GetStoreAsync("blendid"); + + // Create or get the current order + var order = await api.GetOrCreateCurrentOrderAsync(store.Id).AsWritableAsync(uow); + + // Add product + var productId = "2fa949e4-2acb-4aef-bb7c-4d3a5f7bbe52"; // The product node Key + await order.AddProductAsync(productId, null, 1); + + // Set customer details + var country = await api.GetCountryAsync(store.Id, "GB"); + await order.SetPropertiesAsync(new Dictionary + { + { Constants.Properties.Customer.EmailPropertyAlias, $"customer@example.com" }, + { "marketingOptIn", "0" }, + { Constants.Properties.Customer.FirstNamePropertyAlias, "Example" }, + { Constants.Properties.Customer.LastNamePropertyAlias, $"Customer" }, + { "billingAddressLine1", "10 Example Road" }, + { "billingCity", "Example City" }, + { "billingZipCode", "EX3 3PL" }, + { "billingTelephone", "0123456789" }, + { "shippingSameAsBilling", "1" } + }) + .SetPaymentCountryRegionAsync(country, null) + .SetShippingCountryRegionAsync(country, null); + + // Set shipping method + var shippingMethod = await api.GetShippingMethodAsync(store.Id, "pickup"); + await order.SetShippingMethodAsync(shippingMethod); + + // Set payment method + var paymentMethod = await api.GetPaymentMethodAsync(store.Id, "invoicing"); + await order.SetPaymentMethodAsync(paymentMethod); + + // Recalculate order + await order.RecalculateAsync(); + + // Finalize order + await order.InitializeTransactionAsync(); + await order.FinalizeAsync(order.TransactionAmount.Value, Guid.NewGuid().ToString("N"), PaymentStatus.Authorized); + + // Save order + await api.SaveOrderAsync(order); + + // Commit the unit of work + uow.Complete(); +}); +```