(* Options: Date: 2024-11-24 14:20:52 Version: 6.50 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://clubready.com/api/current //GlobalNamespace: //MakeDataContractsExtensible: False //AddReturnMarker: True //AddDescriptionAsComments: True //AddDataContractAttributes: False //AddIndexesToDataMembers: False //AddGeneratedCodeAttributes: False //AddResponseStatus: False //AddImplicitVersion: //ExportValueTypes: False IncludeTypes: SellContractRequest.* //ExcludeTypes: //InitializeCollections: True //AddNamespaces: *) namespace ClubReady.Core.Api.Models open System open System.Collections open System.Collections.Generic open System.Runtime.Serialization open ServiceStack open ServiceStack.DataAnnotations type RestrictedResourceType = | Store = 0 | Chain = 1 | User = 2 | Undefined = 3 [] type IRestrictedApiRequest = abstract RestrictedId:Nullable with get,set abstract RestrictedResourceType:RestrictedResourceType with get,set [] type IApiKeyEndpoint = abstract ApiKey:String with get,set [] type ApiDtoBase() = member val ApiKey:String = null with get,set member val StoreId:Nullable = new Nullable() with get,set member val ChainId:Nullable = new Nullable() with get,set type PaymentMethodType = | Uninitialized = 0 | PaymentProfileId = 1 | PreferredOnFile = 2 | AcctToken = 3 | Error = -1 [] [] type PaymentMethodDto() = [] member val AcctToken:String = null with get,set [] member val ProfileToken:String = null with get,set [] member val PaymentProfileId:String = null with get,set [] member val PaymentAmount:Nullable = new Nullable() with get,set [] member val PaymentMethodType:Nullable = new Nullable() with get,set [] member val DoNotUpdatePaymentTypePreference:Nullable = new Nullable() with get,set [] type SellContractRequestDto() = inherit ApiDtoBase() member val MemberId:Int32 = new Int32() with get,set member val PackageId:Int32 = new Int32() with get,set member val InstallmentId:Nullable = new Nullable() with get,set member val StartDate:Nullable = new Nullable() with get,set member val PaymentAmount:Nullable = new Nullable() with get,set member val PromoCode:String = null with get,set member val PaymentMethods:ResizeArray = new ResizeArray() with get,set member val StaffId:Nullable = new Nullable() with get,set type ResponseStatus = | stsUnknown = 0 | stsSuccess = 1 | stsDecline = 2 | stsError = 3 | HardDeclineAccount = 4 | HardDeclineExpiry = 5 | PartialApproval = 11 | PendingSuccess = 12 [] type PendingPaymentResponse() = member val ResponseTransactionId:String = null with get,set member val ResponseTxnId:String = null with get,set member val ResponseStatus:ResponseStatus = new ResponseStatus() with get,set member val ResponseAmount:Decimal = new Decimal() with get,set member val ResponseText:String = null with get,set member val Last4:String = null with get,set member val AcctClass:String = null with get,set member val AcctType:String = null with get,set member val AcctToken:String = null with get,set [] type SellContractResultDto() = member val ContractSaleID:String = null with get,set member val description:String = null with get,set member val Success:Boolean = new Boolean() with get,set member val PaymentResponses:IReadOnlyList = null with get,set [] [, StatusCode=200)>] [] type SellContractRequest() = inherit SellContractRequestDto() interface IReturn /// ///Api Authentication Key /// [] member val ApiKey:String = null with get,set /// ///Member Id of the user buying the Package /// [] member val MemberId:Int32 = new Int32() with get,set /// ///Id for the chain of the Api Key /// [] member val ChainId:Nullable = new Nullable() with get,set /// ///Id of the store for the user /// [] member val StoreId:Nullable = new Nullable() with get,set /// ///Package Id number of the package being purchased /// [] member val PackageId:Int32 = new Int32() with get,set /// ///Installment Plan Id being purchased. If empty, the default package will be selected. /// [] member val InstallmentId:Nullable = new Nullable() with get,set /// ///Amount being paid down, including tax /// [] member val PaymentAmount:Nullable = new Nullable() with get,set /// ///Promo code to apply a discount. /// [] member val PromoCode:String = null with get,set /// ///Staff Id of salesperson who sold the agreement. /// [] member val StaffId:Nullable = new Nullable() with get,set /// ///An array of Payment Methods to be used for this purchase. Any entry with PreferredOnFile is assumed if omitted or null. Each object of the array may contain properties:| Property | Description || --- | --- || PaymentMethodType | Usually "AcctToken" (Default or omitted/null) or "PreferredOnFile" || PaymentAmount | The amount to be attempted for this Payment Method. When omitted (or null), the Request's PaymentAmount will be attempted || AcctToken | The AcctToken to attempt payment (when using PaymentMethodType:AcctToken) || ProfileToken | When provided (with AcctToken), a Payment Profile will be created (this will prevent the requirement to call `/sales/paymentprofile/import` (when using PaymentMethodType:AcctToken) || DoNotUpdatePaymentTypePreference | When using ProfileToken, do not set the PaymentTypePreference (for more information, see `/sales/paymentprofile/import` (when using PaymentMethodType:AcctToken) || | |* Scenario #1: Use the on file profile only. PaymentMethods can be omitted/null, or : JSON:```json{ PaymentMethods: [ { "PaymentMethodType":"PreferredOnFile", "PaymentAmount":"1.00" } ]}```JSV:```jsv[{PaymentMethodType:PreferredOnFile,PaymentAmount:1.00}]```* Scenario #2: Use a Gift Card with PreferredOnFile to cover the amount not approved by the Gift Card. JSON:```json{ PaymentMethods: [ { "PaymentMethodType":"AcctToken", "PaymentAmount":"1.00", "AcctToken":"eyJ...GiftCard AcctToken...", "ProfileToken":"eyJ...Gift Card ProfileToken..." }, { "PaymentMethodType":"PreferredOnFile", "PaymentAmount":"1.00" } ]}```JSV:```jsv[{PaymentMethodType:AcctToken,PaymentAmount:1.00,AcctToken:eyj...,ProfileToken:eyJ...},{PaymentMethodType:PreferredOnFile,PaymentAmount:1.00}]``` Notes: * The example shows PaymentAmount of 1.00 for both "AcctToken" and "PreferredOnFile". This is for the examplewith a total of $1.00. The firstPaymentMethod (the Gift Card) will be attempted for $1.00. If it partially approvesfor less than 1.00 (example: $0.80), the second payment method (PreferredOnFile) will be attempted for the lesser ofit's PaymentAmount and the remaining amount (example: $0.20).* If ProfileToken has already been used (e.g. used with `/sales/paymentprofile/import`), it does not need to be included,but AcctToken is required. ProfileToken is only needed once to 'activate' the AcctToken.* When using Query String (or this web site), this value must be encoded with JSV [(JSON-like Separated Values)](https://docs.servicestack.net/jsv-format).Basic steps to convert JSON to JSV: 1) Remove properties that are null, 2) Remove white space including line feeds, 3) Remove quotes. /// [] member val PaymentMethods:ResizeArray = new ResizeArray() with get,set member val RestrictedId:Nullable = new Nullable() with get,set member val RestrictedResourceType:RestrictedResourceType = new RestrictedResourceType() with get,set