HomeGuidesAPI ReferenceChangelogDiscussions
GuidesiMIS ProfessionaliMIS EnterpriseClient SupportLog In
Guides
These docs are for v20.3.44. Click to read the latest docs for v20.3.192.

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);
}

Contact us
Copyright © Advanced Solutions International, All rights reserved.