Orders Hooks

Namespace: DirectScale.Disco.Extension.Hooks.Orders

FinalizeAcceptedOrder

Define logic that for what happens at the end of the order processing, after the order is accepted. The default un-voids the order, sets InvoiceDate, sets CommissionDate, commits tax, updates services, and Informs the system of the order.

Basic Implementation

public class FinalizeAcceptedOrder : IHook<FinalizeAcceptedOrderHookRequest, FinalizeAcceptedOrderHookResponse>
{
  public FinalizeAcceptedOrder() { }

  public FinalizeAcceptedOrderHookResponse Invoke(FinalizeAcceptedOrderHookRequest request, Func<FinalizeAcceptedOrderHookRequest, FinalizeAcceptedOrderHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<FinalizeAcceptedOrderHookRequest, FinalizeAcceptedOrderHookResponse>, FinalizeAcceptedOrder>();

Request Model

{
  "Order": {
    "BackofficeId": "string",
    "LastModifiedDate": "0001-01-01T00:00:00",
    "BillPhone": "string",
    "CommissionDate": "0001-01-01T00:00:00",
    "AssociateId": 0,
    "Email": "string",
    "InvoiceDate": "0001-01-01T00:00:00",
    "LocalInvoiceNumber": 0,
    "Name": "string",
    "OrderDate": "0001-01-01T00:00:00",
    "OrderType": 0,
    "OrderNumber": 0,
    "SpecialInstructions": "string",
    "Status": "string",
    "TotalBonus": 0.0,
    "TotalCost": 0.0,
    "TotalCV": 0.0,
    "TotalQV": 0.0,
    "Void": false,
    "BillAddress": {
      "Id": 0,
      "AddressLine1": "string",
      "AddressLine2": "string",
      "AddressLine3": "string",
      "City": "string",
      "State": "string",
      "PostalCode": "string",
      "CountryCode": "string"
    },
    "PartyId": 0,
    "IsPaid": false,
    "IsShipped": false,
    "Custom": {
      "Field1": "string",
      "Field2": "string",
      "Field3": "string",
      "Field4": "string",
      "Field5": "string"
    },
    "CanRerun": false,
    "LineItems": [],
    "Packages": [],
    "Totals": [],
    "Payments": [],
    "OrderCoupons": [],
    "USDSubTotal": 0.0,
    "USDTotal": 0.0,
    "IsMoveable": {
      "IsOrderMovable": false,
      "MessageType": 0,
      "Message": "string"
    }
  }
}

Response Model

{}

FinalizeNonAcceptedOrder

Define logic for what happens at the end of order processing, after payment failure. For example, you can have a notification sent if the order fails. The default un-voids the order.

Basic Implementation

public class FinalizeNonAcceptedOrder : IHook<FinalizeNonAcceptedOrderHookRequest, FinalizeNonAcceptedOrderHookResponse>
{
  public FinalizeNonAcceptedOrder() { }

  public FinalizeNonAcceptedOrderHookResponse Invoke(FinalizeNonAcceptedOrderHookRequest request, Func<FinalizeNonAcceptedOrderHookRequest, FinalizeNonAcceptedOrderHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<FinalizeNonAcceptedOrderHookRequest, FinalizeNonAcceptedOrderHookResponse>, FinalizeNonAcceptedOrder>();

Request Model

{
  "Order": {
    "BackofficeId": "string",
    "LastModifiedDate": "0001-01-01T00:00:00",
    "BillPhone": "string",
    "CommissionDate": "0001-01-01T00:00:00",
    "AssociateId": 0,
    "Email": "string",
    "InvoiceDate": "0001-01-01T00:00:00",
    "LocalInvoiceNumber": 0,
    "Name": "string",
    "OrderDate": "0001-01-01T00:00:00",
    "OrderType": 0,
    "OrderNumber": 0,
    "SpecialInstructions": "string",
    "Status": "string",
    "TotalBonus": 0.0,
    "TotalCost": 0.0,
    "TotalCV": 0.0,
    "TotalQV": 0.0,
    "Void": false,
    "BillAddress": {
      "Id": 0,
      "AddressLine1": "string",
      "AddressLine2": "string",
      "AddressLine3": "string",
      "City": "string",
      "State": "string",
      "PostalCode": "string",
      "CountryCode": "string"
    },
    "PartyId": 0,
    "IsPaid": false,
    "IsShipped": false,
    "Custom": {
      "Field1": "string",
      "Field2": "string",
      "Field3": "string",
      "Field4": "string",
      "Field5": "string"
    },
    "CanRerun": false,
    "LineItems": [],
    "Packages": [],
    "Totals": [],
    "Payments": [],
    "OrderCoupons": [],
    "USDSubTotal": 0.0,
    "USDTotal": 0.0,
    "IsMoveable": {
      "IsOrderMovable": false,
      "MessageType": 0,
      "Message": "string"
    }
  }
}

Response Model

{}

FullRefundOrder

Define logic for when an order has been fully refunded. The default validates and starts order clawbacks.

Basic Implementation

public class FullRefundOrder : IHook<FullRefundOrderHookRequest, FullRefundOrderHookResponse>
{
  public FullRefundOrder() { }

  public FullRefundOrderHookResponse Invoke(FullRefundOrderHookRequest request, Func<FullRefundOrderHookRequest, FullRefundOrderHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<FullRefundOrderHookRequest, FullRefundOrderHookResponse>, FullRefundOrder>();

Request Model

{
  "Order": {
    "BackofficeId": "string",
    "LastModifiedDate": "0001-01-01T00:00:00",
    "BillPhone": "string",
    "CommissionDate": "0001-01-01T00:00:00",
    "AssociateId": 0,
    "Email": "string",
    "InvoiceDate": "0001-01-01T00:00:00",
    "LocalInvoiceNumber": 0,
    "Name": "string",
    "OrderDate": "0001-01-01T00:00:00",
    "OrderType": 0,
    "OrderNumber": 0,
    "SpecialInstructions": "string",
    "Status": "string",
    "TotalBonus": 0.0,
    "TotalCost": 0.0,
    "TotalCV": 0.0,
    "TotalQV": 0.0,
    "Void": false,
    "BillAddress": {
      "Id": 0,
      "AddressLine1": "string",
      "AddressLine2": "string",
      "AddressLine3": "string",
      "City": "string",
      "State": "string",
      "PostalCode": "string",
      "CountryCode": "string"
    },
    "PartyId": 0,
    "IsPaid": false,
    "IsShipped": false,
    "Custom": {
      "Field1": "string",
      "Field2": "string",
      "Field3": "string",
      "Field4": "string",
      "Field5": "string"
    },
    "CanRerun": false,
    "LineItems": [],
    "Packages": [],
    "Totals": [],
    "Payments": [],
    "OrderCoupons": [],
    "USDSubTotal": 0.0,
    "USDTotal": 0.0,
    "IsMoveable": {
      "IsOrderMovable": false,
      "MessageType": 0,
      "Message": "string"
    }
  }
}

Response Model

{}

RefundPayment

Define logic around the refund process. The default validates the call to payment provider merchant to refund money and adjust database tables.

Basic Implementation

public class RefundPayment : IHook<RefundPaymentHookRequest, RefundPaymentHookResponse>
{
  public RefundPayment() { }

  public RefundPaymentHookResponse Invoke(RefundPaymentHookRequest request, Func<RefundPaymentHookRequest, RefundPaymentHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<RefundPaymentHookRequest, RefundPaymentHookResponse>, RefundPayment>();

Request Model

{
  "OrderNumber": 0,
  "Refunds": [
    {
      "PaymentId": 0,
      "Amount": 0.0,
      "ManualRefund": false,
      "ManualTransactionId": "string"
    }
  ]
}

Response Model

{}

AdjustNewOrderPayments

This is a Hook that allows payments to be adjusted before being applied to an order.

Basic Implementation

public class AdjustNewOrderPayments : IHook<AdjustNewOrderPaymentsHookRequest, AdjustNewOrderPaymentsHookResponse>
{
  public AdjustNewOrderPayments() { }

  public AdjustNewOrderPaymentsHookResponse Invoke(AdjustNewOrderPaymentsHookRequest request, Func<AdjustNewOrderPaymentsHookRequest, AdjustNewOrderPaymentsHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<AdjustNewOrderPaymentsHookRequest, AdjustNewOrderPaymentsHookResponse>, AdjustNewOrderPayments>();

Request Model

{
  "Order": {
    "BackofficeId": "string",
    "LastModifiedDate": "0001-01-01T00:00:00",
    "BillPhone": "string",
    "CommissionDate": "0001-01-01T00:00:00",
    "AssociateId": 0,
    "Email": "string",
    "InvoiceDate": "0001-01-01T00:00:00",
    "LocalInvoiceNumber": 0,
    "Name": "string",
    "OrderDate": "0001-01-01T00:00:00",
    "OrderType": 0,
    "OrderNumber": 0,
    "SpecialInstructions": "string",
    "Status": "string",
    "TotalBonus": 0.0,
    "TotalCost": 0.0,
    "TotalCV": 0.0,
    "TotalQV": 0.0,
    "Void": false,
    "BillAddress": {
      "Id": 0,
      "AddressLine1": "string",
      "AddressLine2": "string",
      "AddressLine3": "string",
      "City": "string",
      "State": "string",
      "PostalCode": "string",
      "CountryCode": "string"
    },
    "PartyId": 0,
    "IsPaid": false,
    "IsShipped": false,
    "Custom": {
      "Field1": "string",
      "Field2": "string",
      "Field3": "string",
      "Field4": "string",
      "Field5": "string"
    },
    "CanRerun": false,
    "LineItems": [],
    "Packages": [],
    "Totals": [],
    "Payments": [],
    "OrderCoupons": [],
    "USDSubTotal": 0.0,
    "USDTotal": 0.0,
    "IsMoveable": {
      "IsOrderMovable": false,
      "MessageType": 0,
      "Message": "string"
    }
  },
  "NewOrderPayments": [
    {
      "Input1": "string",
      "Input2": "string",
      "Last4": "string",
      "CardType": "string",
      "InputMonth": 1,
      "InputYear": 1900,
      "SecurityCode": "string",
      "Address": {
        "Id": 0,
        "AddressLine1": "string",
        "AddressLine2": "string",
        "AddressLine3": "string",
        "City": "string",
        "State": "string",
        "PostalCode": "string",
        "CountryCode": "string"
      },
      "MerchantId": 0,
      "Amount": 0.0,
      "CurrencyCode": "string",
      "OrderPaymentId": 0,
      "RedirectUrl": "string",
      "PaymentMethodId": "string",
      "ProfileType": 0,
      "FraudPreventionData": {
        "FraudPreventionId": "string",
        "FraudPreventionProviderId": "string",
        "FraudPreventionType": 0,
        "IpAddress": "string"
      },
      "ExpireDate": "0001-01-01T00:00:00"
    }
  ]
}

Response Model

{
  "Payment": [
    {
      "Input1": "string",
      "Input2": "string",
      "Last4": "string",
      "CardType": "string",
      "InputMonth": 1,
      "InputYear": 1900,
      "SecurityCode": "string",
      "Address": {
        "Id": 0,
        "AddressLine1": "string",
        "AddressLine2": "string",
        "AddressLine3": "string",
        "City": "string",
        "State": "string",
        "PostalCode": "string",
        "CountryCode": "string"
      },
      "MerchantId": 0,
      "Amount": 0.0,
      "CurrencyCode": "string",
      "OrderPaymentId": 0,
      "RedirectUrl": "string",
      "PaymentMethodId": "string",
      "ProfileType": 0,
      "FraudPreventionData": {
        "FraudPreventionId": "string",
        "FraudPreventionProviderId": "string",
        "FraudPreventionType": 0,
        "IpAddress": "string"
      },
      "ExpireDate": "0001-01-01T00:00:00"
    }
  ]
}

SubmitOrder

Define logic around order process. For example, you can change some of the information right before the order is created or right after. The default creates an order adding information to all the ORD_ tables in the database.

Basic Implementation

public class SubmitOrder : IHook<SubmitOrderHookRequest, SubmitOrderHookResponse>
{
  public SubmitOrder() { }

  public SubmitOrderHookResponse Invoke(SubmitOrderHookRequest request, Func<SubmitOrderHookRequest, SubmitOrderHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<SubmitOrderHookRequest, SubmitOrderHookResponse>, SubmitOrder>();

Request Model

{
  "Order": {
    "AssociateId": 0,
    "ShipToName": "string",
    "Attention": "string",
    "ShipAddress": {
      "Id": 0,
      "AddressLine1": "string",
      "AddressLine2": "string",
      "AddressLine3": "string",
      "City": "string",
      "State": "string",
      "PostalCode": "string",
      "CountryCode": "string"
    },
    "InvoiceDate": "0001-01-01T00:00:00",
    "CommissionDate": "0001-01-01T00:00:00",
    "ShipByDate": "0001-01-01T00:00:00",
    "ShipMethodId": 0,
    "WarehouseId": 0,
    "ShipPhone": "string",
    "PartyId": 0,
    "SpecialInstructions": "string",
    "OrderType": 0,
    "AssociateType": 0,
    "StoreId": 0,
    "CurrencyCode": "string",
    "CouponCodes": null,
    "LineItems": [
      {
        "ItemId": 0,
        "Quantity": 0.0,
        "Cost": 0.0,
        "Disabled": false,
        "ExtendedPrice": 0.0,
        "ExtendedOriginalPrice": 0.0,
        "ExtendedBonus": 0.0,
        "ExtendedCV": 0.0,
        "ExtendedQV": 0.0,
        "ExtendedRewardPoints": 0.0,
        "ExtendedCost": 0.0,
        "ProductName": "string",
        "Description": "string",
        "Specifications": "string",
        "LanguageCode": "string",
        "SKU": "string",
        "Category": {
          "Id": 0,
          "Name": "string",
          "CategoryTranslations": [],
          "Description": "string",
          "DisplayIndex": 0.0,
          "ImageUrl": "string",
          "ParentId": 0,
          "ProductLineId": 0,
          "ShortDescription": "string",
          "StoreIds": [],
          "HasChildren": false
        },
        "ChargeShipping": false,
        "Height": 0.0,
        "Image": "string",
        "Length": 0.0,
        "LengthUOM": "string",
        "MPN": "string",
        "PackCount": 0.0,
        "PackageGroupId": 0,
        "TaxClassId": 0,
        "UnitOfMeasure": "string",
        "UPC": "string",
        "Weight": 0.0,
        "WeightUOM": "string",
        "Width": 0.0,
        "FlagBirthDefects": false,
        "HasKitGroups": false,
        "FlagCancer": false,
        "PriceGroup": 0,
        "Custom": {
          "Field1": "string",
          "Field2": "string",
          "Field3": "string",
          "Field4": "string",
          "Field5": "string"
        },
        "Images": [
          {
            "Description": "string",
            "Path": "string"
          }
        ],
        "Prices": [
          {
            "GroupId": 0,
            "Price": 0.0,
            "PriceCurrency": "string",
            "OriginalPrice": 0.0,
            "Bonus": 0.0,
            "CV": 0.0,
            "QV": 0.0,
            "RewardPoints": 0.0
          }
        ],
        "Options": [
          {
            "OptionId": 0,
            "Option": "string"
          }
        ],
        "ItemOptions": [
          {
            "OptionId": 0,
            "Option": "string",
            "OptionType": 0,
            "Values": [
              {
                "Option": "string",
                "SkuExt": "string"
              }
            ]
          }
        ],
        "Languages": [
          {
            "Description": "string",
            "LanguageCode": "string",
            "ProductName": "string",
            "SEOKeywords": "string",
            "Specifications": "string"
          }
        ],
        "OptionsMap": [
          {
            "Key": "string",
            "Checked": false,
            "ItemId": 0,
            "Image": "string",
            "ExtSku": "string"
          }
        ],
        "HasOptions": false,
        "Price": 0.0,
        "PriceCurrency": "string",
        "OriginalPrice": 0.0,
        "Bonus": 0.0,
        "CV": 0.0,
        "QV": 0.0,
        "RewardPoints": 0.0,
        "CouponsBeingUsed": 0,
        "PriceGroups": [
          0
        ]
      }
    ],
    "ShipTaxOverride": {
      "Shipping": 0.0,
      "Tax": 0.0,
      "HasShippingOverride": false,
      "HasTaxOverride": false
    },
    "Custom": {
      "Field1": "string",
      "Field2": "string",
      "Field3": "string",
      "Field4": "string",
      "Field5": "string"
    }
  }
}

Response Model

{
  "OrderNumber": 0,
  "Order": {
    "AssociateId": 0,
    "ShipToName": "string",
    "Attention": "string",
    "ShipAddress": {
      "Id": 0,
      "AddressLine1": "string",
      "AddressLine2": "string",
      "AddressLine3": "string",
      "City": "string",
      "State": "string",
      "PostalCode": "string",
      "CountryCode": "string"
    },
    "InvoiceDate": "0001-01-01T00:00:00",
    "CommissionDate": "0001-01-01T00:00:00",
    "ShipByDate": "0001-01-01T00:00:00",
    "ShipMethodId": 0,
    "WarehouseId": 0,
    "ShipPhone": "string",
    "PartyId": 0,
    "SpecialInstructions": "string",
    "OrderType": 0,
    "AssociateType": 0,
    "StoreId": 0,
    "CurrencyCode": "string",
    "CouponCodes": null,
    "LineItems": [
      {
        "ItemId": 0,
        "Quantity": 0.0,
        "Cost": 0.0,
        "Disabled": false,
        "ExtendedPrice": 0.0,
        "ExtendedOriginalPrice": 0.0,
        "ExtendedBonus": 0.0,
        "ExtendedCV": 0.0,
        "ExtendedQV": 0.0,
        "ExtendedRewardPoints": 0.0,
        "ExtendedCost": 0.0,
        "ProductName": "string",
        "Description": "string",
        "Specifications": "string",
        "LanguageCode": "string",
        "SKU": "string",
        "Category": {
          "Id": 0,
          "Name": "string",
          "CategoryTranslations": [],
          "Description": "string",
          "DisplayIndex": 0.0,
          "ImageUrl": "string",
          "ParentId": 0,
          "ProductLineId": 0,
          "ShortDescription": "string",
          "StoreIds": [],
          "HasChildren": false
        },
        "ChargeShipping": false,
        "Height": 0.0,
        "Image": "string",
        "Length": 0.0,
        "LengthUOM": "string",
        "MPN": "string",
        "PackCount": 0.0,
        "PackageGroupId": 0,
        "TaxClassId": 0,
        "UnitOfMeasure": "string",
        "UPC": "string",
        "Weight": 0.0,
        "WeightUOM": "string",
        "Width": 0.0,
        "FlagBirthDefects": false,
        "HasKitGroups": false,
        "FlagCancer": false,
        "PriceGroup": 0,
        "Custom": {
          "Field1": "string",
          "Field2": "string",
          "Field3": "string",
          "Field4": "string",
          "Field5": "string"
        },
        "Images": [
          {
            "Description": "string",
            "Path": "string"
          }
        ],
        "Prices": [
          {
            "GroupId": 0,
            "Price": 0.0,
            "PriceCurrency": "string",
            "OriginalPrice": 0.0,
            "Bonus": 0.0,
            "CV": 0.0,
            "QV": 0.0,
            "RewardPoints": 0.0
          }
        ],
        "Options": [
          {
            "OptionId": 0,
            "Option": "string"
          }
        ],
        "ItemOptions": [
          {
            "OptionId": 0,
            "Option": "string",
            "OptionType": 0,
            "Values": [
              {
                "Option": "string",
                "SkuExt": "string"
              }
            ]
          }
        ],
        "Languages": [
          {
            "Description": "string",
            "LanguageCode": "string",
            "ProductName": "string",
            "SEOKeywords": "string",
            "Specifications": "string"
          }
        ],
        "OptionsMap": [
          {
            "Key": "string",
            "Checked": false,
            "ItemId": 0,
            "Image": "string",
            "ExtSku": "string"
          }
        ],
        "HasOptions": false,
        "Price": 0.0,
        "PriceCurrency": "string",
        "OriginalPrice": 0.0,
        "Bonus": 0.0,
        "CV": 0.0,
        "QV": 0.0,
        "RewardPoints": 0.0,
        "CouponsBeingUsed": 0,
        "PriceGroups": [
          0
        ]
      }
    ],
    "ShipTaxOverride": {
      "Shipping": 0.0,
      "Tax": 0.0,
      "HasShippingOverride": false,
      "HasTaxOverride": false
    },
    "Custom": {
      "Field1": "string",
      "Field2": "string",
      "Field3": "string",
      "Field4": "string",
      "Field5": "string"
    }
  }
}

IsMoveOrderPermitted

Validation around moving an order to another Associate. The default validates if it’s OK to move the order.

Basic Implementation

public class IsMoveOrderPermitted : IHook<MoveOrderHookRequest, MoveOrderHookResponse>
{
  public IsMoveOrderPermitted() { }

  public MoveOrderHookResponse Invoke(MoveOrderHookRequest request, Func<MoveOrderHookRequest, MoveOrderHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<MoveOrderHookRequest, MoveOrderHookResponse>, IsMoveOrderPermitted>();

Request Model

{
  "Order": {
    "BackofficeId": "string",
    "LastModifiedDate": "0001-01-01T00:00:00",
    "BillPhone": "string",
    "CommissionDate": "0001-01-01T00:00:00",
    "AssociateId": 0,
    "Email": "string",
    "InvoiceDate": "0001-01-01T00:00:00",
    "LocalInvoiceNumber": 0,
    "Name": "string",
    "OrderDate": "0001-01-01T00:00:00",
    "OrderType": 0,
    "OrderNumber": 0,
    "SpecialInstructions": "string",
    "Status": "string",
    "TotalBonus": 0.0,
    "TotalCost": 0.0,
    "TotalCV": 0.0,
    "TotalQV": 0.0,
    "Void": false,
    "BillAddress": {
      "Id": 0,
      "AddressLine1": "string",
      "AddressLine2": "string",
      "AddressLine3": "string",
      "City": "string",
      "State": "string",
      "PostalCode": "string",
      "CountryCode": "string"
    },
    "PartyId": 0,
    "IsPaid": false,
    "IsShipped": false,
    "Custom": {
      "Field1": "string",
      "Field2": "string",
      "Field3": "string",
      "Field4": "string",
      "Field5": "string"
    },
    "CanRerun": false,
    "LineItems": [],
    "Packages": [],
    "Totals": [],
    "Payments": [],
    "OrderCoupons": [],
    "USDSubTotal": 0.0,
    "USDTotal": 0.0,
    "IsMoveable": {
      "IsOrderMovable": false,
      "MessageType": 0,
      "Message": "string"
    }
  },
  "IsOrderLocked": false
}

Response Model

{
  "MoveOrderPermission": {
    "IsOrderMovable": false,
    "MessageType": 0,
    "Message": "string"
  }
}

ProcessOrderPayment

Define logic around order processing. The default sends a call to the payment provider merchant, then adds records to payment tables.

Basic Implementation

public class ProcessOrderPayment : IHook<ProcessOrderPaymentHookRequest, ProcessOrderPaymentHookResponse>
{
  public ProcessOrderPayment() { }

  public ProcessOrderPaymentHookResponse Invoke(ProcessOrderPaymentHookRequest request, Func<ProcessOrderPaymentHookRequest, ProcessOrderPaymentHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<ProcessOrderPaymentHookRequest, ProcessOrderPaymentHookResponse>, ProcessOrderPayment>();

Request Model

{
  "Order": {
    "BackofficeId": "string",
    "LastModifiedDate": "0001-01-01T00:00:00",
    "BillPhone": "string",
    "CommissionDate": "0001-01-01T00:00:00",
    "AssociateId": 0,
    "Email": "string",
    "InvoiceDate": "0001-01-01T00:00:00",
    "LocalInvoiceNumber": 0,
    "Name": "string",
    "OrderDate": "0001-01-01T00:00:00",
    "OrderType": 0,
    "OrderNumber": 0,
    "SpecialInstructions": "string",
    "Status": "string",
    "TotalBonus": 0.0,
    "TotalCost": 0.0,
    "TotalCV": 0.0,
    "TotalQV": 0.0,
    "Void": false,
    "BillAddress": {
      "Id": 0,
      "AddressLine1": "string",
      "AddressLine2": "string",
      "AddressLine3": "string",
      "City": "string",
      "State": "string",
      "PostalCode": "string",
      "CountryCode": "string"
    },
    "PartyId": 0,
    "IsPaid": false,
    "IsShipped": false,
    "Custom": {
      "Field1": "string",
      "Field2": "string",
      "Field3": "string",
      "Field4": "string",
      "Field5": "string"
    },
    "CanRerun": false,
    "LineItems": [],
    "Packages": [],
    "Totals": [],
    "Payments": [],
    "OrderCoupons": [],
    "USDSubTotal": 0.0,
    "USDTotal": 0.0,
    "IsMoveable": {
      "IsOrderMovable": false,
      "MessageType": 0,
      "Message": "string"
    }
  },
  "ShipMethodId": 0,
  "LanguageCode": "string",
  "Payments": [
    {
      "Input1": "string",
      "Input2": "string",
      "Last4": "string",
      "CardType": "string",
      "InputMonth": 1,
      "InputYear": 1900,
      "SecurityCode": "string",
      "Address": {
        "Id": 0,
        "AddressLine1": "string",
        "AddressLine2": "string",
        "AddressLine3": "string",
        "City": "string",
        "State": "string",
        "PostalCode": "string",
        "CountryCode": "string"
      },
      "MerchantId": 0,
      "Amount": 0.0,
      "CurrencyCode": "string",
      "OrderPaymentId": 0,
      "RedirectUrl": "string",
      "PaymentMethodId": "string",
      "ProfileType": 0,
      "FraudPreventionData": {
        "FraudPreventionId": "string",
        "FraudPreventionProviderId": "string",
        "FraudPreventionType": 0,
        "IpAddress": "string"
      },
      "ExpireDate": "0001-01-01T00:00:00"
    }
  ]
}

Response Model

{
  "PaymentResponse": {
    "PaymentType": "string",
    "AuthorizationCode": "string",
    "Response": "string",
    "ResponseId": "string",
    "TransactionNumber": "string",
    "ReferenceNumber": "string",
    "Status": 0,
    "Amount": 0.0,
    "Currency": "string",
    "Merchant": 0,
    "FraudPreventionId": "string",
    "FraudPreventionProviderId": null,
    "OrderNumber": 0,
    "Redirect": false,
    "RedirectURL": "string",
    "SpecialInstructionsURL": "string",
    "SavedPaymentId": null
  }
}

MarkPackagesShipped

Namespace: DirectScale.Disco.Extension.Hooks.Orders.Packages

Set order(s) as shipped. The default adds the shipped date and adjusts inventory stock levels.

Basic Implementation

public class MarkPackageShipped : IHook<MarkPackageShippedHookRequest, MarkPackageShippedHookResponse>
{
  public MarkPackageShipped() { }

  public MarkPackageShippedHookResponse Invoke(MarkPackageShippedHookRequest request, Func<MarkPackageShippedHookRequest, MarkPackageShippedHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<MarkPackageShippedHookRequest, MarkPackageShippedHookResponse>, MarkPackageShipped>();

Request Model

{
  "PackageStatusUpdates": null
}

Response Model

{}

CancelOrder

Define logic for canceling an order. The default validates and voids the order, then adjusts stock levels.

Basic Implementation

public class CancelOrder : IHook<CancelOrderHookRequest, CancelOrderHookResponse>
{
  public CancelOrder() { }

  public CancelOrderHookResponse Invoke(CancelOrderHookRequest request, Func<CancelOrderHookRequest, CancelOrderHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<CancelOrderHookRequest, CancelOrderHookResponse>, CancelOrder>();

Request Model

{
  "OrderNumber": 0,
  "Validate": false
}

Response Model

{}

ProcessCouponCodes

Define logic around the order coupon system, as well a calculates the discount amount. This Hook is great for building custom coupons and “three-then-free” programs. The default checks the system to see if a coupon applies and gives the applicable discount.

Basic Implementation

public class ProcessCouponCodes : IHook<ProcessCouponCodesHookRequest, ProcessCouponCodesHookResponse>
{
  public ProcessCouponCodes() { }

  public ProcessCouponCodesHookResponse Invoke(ProcessCouponCodesHookRequest request, Func<ProcessCouponCodesHookRequest, ProcessCouponCodesHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<ProcessCouponCodesHookRequest, ProcessCouponCodesHookResponse>, ProcessCouponCodes>();

Request Model

{
  "CouponCodes": null,
  "RegionId": 0,
  "SubTotal": 0.0,
  "Currency": "string",
  "LineItems": null,
  "ShipMethodId": 0,
  "ShippingCost": 0.0,
  "OrderType": 0,
  "AssociateId": 0,
  "TaxItems": null
}

Response Model

{
  "OrderCoupons": {
    "DiscountTotal": 0.0,
    "UsedCoupons": null
  },
  "CouponAdjustedTax": null
}

See a full example here ProcessCouponCodes Hook Coupon: Associate’s First AutoShip Purchase.

GetCouponAdjustedVolume

Define logic for the commission volume adjustments a coupon might give. The default keeps the original commission volume numbers.

Basic Implementation

public class GetCouponAdjustedVolume : IHook<GetCouponAdjustedVolumeHookRequest, GetCouponAdjustedVolumeHookResponse>
{
  public GetCouponAdjustedVolume() { }

  public GetCouponAdjustedVolumeHookResponse Invoke(GetCouponAdjustedVolumeHookRequest request, Func<GetCouponAdjustedVolumeHookRequest, GetCouponAdjustedVolumeHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<GetCouponAdjustedVolumeHookRequest, GetCouponAdjustedVolumeHookResponse>, GetCouponAdjustedVolume>();

Request Model

{
  "Volume": {
    "Cv": 0.0,
    "Qv": 0.0
  },
  "Totals": [
    {
      "Id": 0,
      "TaxableSubTotal": 0.0,
      "CurrencyCode": "string",
      "ExchangeRate": 0.0,
      "OrderNumber": 0,
      "Shipping": 0.0,
      "SubTotal": 0.0,
      "Tax": 0.0,
      "TaxInfo": {
        "TransactionId": "string",
        "RefundTransactionId": "string",
        "TaxProvider": 0,
        "LineItems": [
          {
            "Detail": [],
            "ItemId": 0,
            "TaxRate": 0.0,
            "TaxAmount": 0.0,
            "Street": null,
            "City": null,
            "County": null,
            "State": null,
            "Country": null,
            "Zip": null,
            "WarehouseAddressId": 0
          }
        ],
        "TaxAmount": 0.0,
        "TaxRate": 0.0,
        "ShippingAmount": 0.0
      },
      "TaxTransactionId": "string",
      "TaxProvider": 0,
      "DiscountTotal": 0.0,
      "Coupons": {
        "DiscountTotal": 0.0,
        "UsedCoupons": null
      },
      "CurrencySymbol": "string",
      "OverridenShippingTax": false,
      "Total": 0.0,
      "PaidAmount": 0.0,
      "TotalDue": 0.0
    }
  ]
}

Response Model

{
  "CouponAdjustedVolume": {
    "Cv": 0.0,
    "Qv": 0.0
  }
}

GetShipping

Namespace: DirectScale.Disco.Extension.Hooks.Orders.Shipping

Hook around getting the shipping method for an order. By default, the system looks at the admin added shipping methods and shipping types (Flat, Per Pound, or Shipping Table).

Basic Implementation

public class GetShipping : IHook<GetShippingHookRequest, GetShippingHookResponse>
{
  public GetShipping() { }

  public GetShippingHookResponse Invoke(GetShippingHookRequest request, Func<GetShippingHookRequest, GetShippingHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<GetShippingHookRequest, GetShippingHookResponse>, GetShipping>();

Request Model

{
  "Items": [
    {
      "ItemId": 0,
      "Quantity": 0.0,
      "Cost": 0.0,
      "Disabled": false,
      "ExtendedPrice": 0.0,
      "ExtendedOriginalPrice": 0.0,
      "ExtendedBonus": 0.0,
      "ExtendedCV": 0.0,
      "ExtendedQV": 0.0,
      "ExtendedRewardPoints": 0.0,
      "ExtendedCost": 0.0,
      "ProductName": "string",
      "Description": "string",
      "Specifications": "string",
      "LanguageCode": "string",
      "SKU": "string",
      "Category": {
        "Id": 0,
        "Name": "string",
        "CategoryTranslations": [],
        "Description": "string",
        "DisplayIndex": 0.0,
        "ImageUrl": "string",
        "ParentId": 0,
        "ProductLineId": 0,
        "ShortDescription": "string",
        "StoreIds": [],
        "HasChildren": false
      },
      "ChargeShipping": false,
      "Height": 0.0,
      "Image": "string",
      "Length": 0.0,
      "LengthUOM": "string",
      "MPN": "string",
      "PackCount": 0.0,
      "PackageGroupId": 0,
      "TaxClassId": 0,
      "UnitOfMeasure": "string",
      "UPC": "string",
      "Weight": 0.0,
      "WeightUOM": "string",
      "Width": 0.0,
      "FlagBirthDefects": false,
      "HasKitGroups": false,
      "FlagCancer": false,
      "PriceGroup": 0,
      "Custom": {
        "Field1": "string",
        "Field2": "string",
        "Field3": "string",
        "Field4": "string",
        "Field5": "string"
      },
      "Images": [
        {
          "Description": "string",
          "Path": "string"
        }
      ],
      "Prices": [
        {
          "GroupId": 0,
          "Price": 0.0,
          "PriceCurrency": "string",
          "OriginalPrice": 0.0,
          "Bonus": 0.0,
          "CV": 0.0,
          "QV": 0.0,
          "RewardPoints": 0.0
        }
      ],
      "Options": [
        {
          "OptionId": 0,
          "Option": "string"
        }
      ],
      "ItemOptions": [
        {
          "OptionId": 0,
          "Option": "string",
          "OptionType": 0,
          "Values": [
            {
              "Option": "string",
              "SkuExt": "string"
            }
          ]
        }
      ],
      "Languages": [
        {
          "Description": "string",
          "LanguageCode": "string",
          "ProductName": "string",
          "SEOKeywords": "string",
          "Specifications": "string"
        }
      ],
      "OptionsMap": [
        {
          "Key": "string",
          "Checked": false,
          "ItemId": 0,
          "Image": "string",
          "ExtSku": "string"
        }
      ],
      "HasOptions": false,
      "Price": 0.0,
      "PriceCurrency": "string",
      "OriginalPrice": 0.0,
      "Bonus": 0.0,
      "CV": 0.0,
      "QV": 0.0,
      "RewardPoints": 0.0,
      "CouponsBeingUsed": 0,
      "PriceGroups": [
        0
      ]
    }
  ],
  "WarehouseId": 0,
  "Address": {
    "Id": 0,
    "AddressLine1": "string",
    "AddressLine2": "string",
    "AddressLine3": "string",
    "City": "string",
    "State": "string",
    "PostalCode": "string",
    "CountryCode": "string"
  },
  "ShipMethodId": 0
}

Response Model

{
  "ShippingAmount": 0.0
}

CreateRma

Namespace: DirectScale.Disco.Extension.Hooks.Orders.Rma

Hook in custom code into the Return Merchandise Authorization (RMA) process, called when an RMA is created. Learn more about the default RMA process in the Returns and Refunds Guide.

Basic Implementation

public class CreateRma : IHook<CreateRmaHookRequest, CreateRmaHookResponse>
{
  public CreateRma() { }

  public CreateRmaHookResponse Invoke(CreateRmaHookRequest request, Func<CreateRmaHookRequest, CreateRmaHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<CreateRmaHookRequest, CreateRmaHookResponse>, CreateRma>();

Request Model

{
  "Rma": {
    "Id": 0,
    "AssociateId": 0,
    "OrderNumber": 0,
    "WarehouseId": 0,
    "Date": "0001-01-01T00:00:00",
    "ShipMethod": "string",
    "DateShipped": "0001-01-01T00:00:00",
    "DateReceived": "0001-01-01T00:00:00",
    "TrackingNumber": "string",
    "Notes": "string",
    "CurrencyCode": "string",
    "LineItems": [],
    "Status": "New",
    "Total": 0.0,
    "Shipped": false,
    "Received": false
  }
}

Response Model

{
  "RmaId": 0
}

ImportOrder

Override logic that imports orders processed by a system external to DirectScale.

Basic Implementation

public class ImportOrder: IHook<ImportOrderHookRequest, ImportOrderHookResponse>
{
  public ImportOrder() { }

  public ImportOrderHookResponse Invoke(ImportOrderHookRequest request, Func<ImportOrderHookRequest, ImportOrderHookResponse> func)
  {
    return func(request);
  }
}

Register Hook

services.AddTransient<IHook<ImportOrderHookRequest, ImportOrderHookResponse>, ImportOrder>();

Request Model

{
  "AssociateId": 0,
  "ShipAddress": {
    "Id": 0,
    "AddressLine1": "string",
    "AddressLine2": "string",
    "AddressLine3": "string",
    "City": "string",
    "State": "string",
    "PostalCode": "string",
    "CountryCode": "string"
  },
  "InvoiceDate": "0001-01-01T00:00:00",
  "CommissionDate": "0001-01-01T00:00:00",
  "OrderDate": "0001-01-01T00:00:00",
  "TotalCV": 0.0,
  "TotalQV": 0.0,
  "TotalBonus": 0.0,
  "ShipPhone": "string",
  "PartyId": 0,
  "EmailAddress": "string",
  "ExtOrderNumber": "string",
  "SpecialInstructions": "string",
  "OrderName": "string",
  "OrderType": 0,
  "LineItems": [
    {
      "ItemId": 0,
      "SKU": "string",
      "Quantity": 0.0,
      "Price": 0.0,
      "CurrencyCode": "string",
      "ProductName": "string"
    }
  ],
  "SubTotal": 0.0,
  "ShippingTotal": 0.0,
  "TaxTotal": 0.0
}

Response Model

{
  "OrderNumber": 0
}
Was this article helpful?
0 out of 0 found this helpful
Previous Next

Comments

0 comments

Please sign in to leave a comment.