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
}
Comments
Please sign in to leave a comment.