Combo Order Manager
Create order and add invoice
Using an existing Party create a ComboOrder with an existing product submit the order with pay later that creates an invoice to add to the ComboOrder
using Asi.Soa.ClientServices;
using Asi.Soa.Commerce.DataContracts;
using Asi.Soa.Core.DataContracts;
using Asi.Soa.Membership.DataContracts;
EntityManager entityManager = new EntityManager();
var membershipManager = new MembershipManager(entityManager);
string partyId = "101";
string itemId = "G15";
// Find existing party record
PartyData personData = membershipManager.FindPartyByPartyId(partyId);
if (personData == null) return;
var comboOrderManager = new ComboOrderManager(entityManager, partyId);
// Create an order line with a product
ItemData itemData = new ItemData { ItemId = itemId };
OrderLineData orderLineData = new OrderLineData { Item = itemData, LineNumber = 1 };
comboOrderManager.AddLine(orderLineData);
// Add a delivery method, which is required for physical products
if (comboOrderManager.ComboOrder.Order.Delivery == null)
comboOrderManager.ComboOrder.Order.Delivery = new DeliveryDataCollection();
if (comboOrderManager.ComboOrder.Order.Delivery.Count == 0)
comboOrderManager.ComboOrder.Order.Delivery.Add(new DeliveryData());
comboOrderManager.ComboOrder.Order.Delivery[0].Address = personData.Addresses[0];
comboOrderManager.ComboOrder.Order.Delivery[0].DeliveryMethod =
new DeliveryMethodData { DeliveryMethodId = "UPS" };
comboOrderManager.UpdatePricing();
var orderTotal = comboOrderManager.ComboOrder.Order.OrderTotal.Value.Amount;
// Apply pay later to ComboOrder so that it generates an invoice
// Below is what the payment remittance looks like when the customer is being billed for the order
if (comboOrderManager.ComboOrder.Order.OrderTotal != null)
{
comboOrderManager.ComboOrder.Payments = new RemittanceDataCollection
{
new RemittanceData
{
Amount = new MonetaryAmountData(orderTotal,
comboOrderManager.ComboOrder.Currency),
PaymentMethod = new PaymentMethodData { PaymentMethodId = "BillMe" },
ReferenceNumber = personData.PartyId
}
};
}
// Places the order or submits the cart
var results = entityManager.Add(comboOrderManager.ComboOrder);
if (results.IsValid)
{
var orderData = results.Entity.Order;
Console.WriteLine("Order Number: {0}", orderData.OrderNumber);
}
else
{
Console.WriteLine("Cart failed: {0}", results.ValidationResults.Summary);
}
// Sets up a new combo order
comboOrderManager = new ComboOrderManager(entityManager, partyId);
// Find the invoice and add it to the combo order
var invoiceResults = entityManager.FindAll<InvoiceSummaryData>(
new CriteriaData("BillToPartyId", OperationData.Equal, partyId),
new CriteriaData("Balance", OperationData.Equal, orderTotal.ToString()));
if (invoiceResults.Count > 0)
{
var invoice = invoiceResults[invoiceResults.Count - 1];
Console.WriteLine("Invoice: {0}", invoice);
comboOrderManager.AddInvoice(invoice);
comboOrderManager.UpdatePricing();
Console.WriteLine("Invoice count in cart: {0}", comboOrderManager.ComboOrder.Invoices.Count);
Console.WriteLine("GrandTotal: {0}", comboOrderManager.TransactionGrandTotal.Amount);
}
// To pay for the invoice you can simply add a payment and submit the cart at this point
Create order and make payment
Using an existing Party and product make a standard order and apply a credit card payment.
using System;
using Asi.Soa.ClientServices;
using Asi.Soa.Commerce.DataContracts;
using Asi.Soa.Core.DataContracts;
using Asi.Soa.Membership.DataContracts;
EntityManager entityManager = new EntityManager();
var partyId = "216";
var itemId = "G15";
var membershipManager = new MembershipManager(entityManager);
// Find existing party record
PartyData personData = membershipManager.FindPartyByPartyId(partyId);
if (personData == null) return;
//Set payment details
var creditCardInformationData = new CreditCardInformationData
{
CardNumber = "4111111111111111",
CardType = "VISA",
Expiration = new YearMonthDateData {Month = 5, Year = DateTime.Now.Year + 1},
HoldersName = personData.Name,
SecurityCode = "123"
};
// Create new ComboOrder
var comboOrderManager = new ComboOrderManager(entityManager, personData.PartyId);
comboOrderManager.ComboOrder.Order.Lines = new OrderLineDataCollection();
var orderLineData = new OrderLineData
{
Item = new ItemData {ItemId = itemId},
LineNumber = 1,
QuantityOrdered = new QuantityData(1)
};
comboOrderManager.AddLine(orderLineData);
if (comboOrderManager.ComboOrder.Order.Delivery == null)
comboOrderManager.ComboOrder.Order.Delivery = new DeliveryDataCollection();
if (comboOrderManager.ComboOrder.Order.Delivery.Count == 0)
comboOrderManager.ComboOrder.Order.Delivery.Add(new DeliveryData());
comboOrderManager.ComboOrder.Order.Delivery[0].Address = personData.Addresses[0];
comboOrderManager.ComboOrder.Order.Delivery[0].DeliveryMethod =
new DeliveryMethodData {DeliveryMethodId = "UPS"};
comboOrderManager.UpdatePricing();
// Apply payment to ComboOrder
if (comboOrderManager.ComboOrder.Order.OrderTotal != null)
{
comboOrderManager.ComboOrder.Payments = new RemittanceDataCollection
{
new RemittanceData
{
Amount = new MonetaryAmountData(comboOrderManager.ComboOrder.Order.OrderTotal.Value.Amount,
comboOrderManager.ComboOrder.Currency),
PaymentMethod =
new PaymentMethodData
{
PaymentMethodId = creditCardInformationData.CardType,
PaymentType = "CreditCard"
},
CreditCardInformation = creditCardInformationData,
ReferenceNumber = personData.PartyId
}
};
}
//Submit the cart
var results = entityManager.Add(comboOrderManager.ComboOrder);
if (results.IsValid)
{
var orderData = results.Entity.Order;
Console.WriteLine("Order Number: {0}", orderData.OrderNumber);
}
else
{
Console.WriteLine(results.ValidationResults.Summary);
}
Updated almost 4 years ago