/* Options: Date: 2025-07-19 19:22:19 Version: 6.50 Tip: To override a DTO option, remove "//" prefix before updating BaseUrl: https://www.clubready.com/api/current //GlobalNamespace: //AddServiceStackTypes: True //AddResponseStatus: False //AddImplicitVersion: //AddDescriptionAsComments: True IncludeTypes: ContractSoldNewUserEndpoint.* //ExcludeTypes: //DefaultImports: package:servicestack/servicestack.dart */ import 'package:servicestack/servicestack.dart'; enum RestrictedResourceType { Store, Chain, User, Undefined, } abstract class IApiDtoBase { String? ApiKey; int? StoreId; int? ChainId; } abstract class IRestrictedApiRequest extends IApiKeyEndpoint { int? RestrictedId; RestrictedResourceType? RestrictedResourceType; } abstract class IApiKeyEndpoint { String? ApiKey; } // @DataContract class PaymentMethodDto implements IConvertible { // @DataMember String? AcctToken; // @DataMember String? ProfileToken; // @DataMember String? PaymentProfileId; // @DataMember double? PaymentAmount; // @DataMember bool? UsePreferred; // @DataMember bool? DoNotUpdatePaymentTypePreference; PaymentMethodDto({this.AcctToken,this.ProfileToken,this.PaymentProfileId,this.PaymentAmount,this.UsePreferred,this.DoNotUpdatePaymentTypePreference}); PaymentMethodDto.fromJson(Map json) { fromMap(json); } fromMap(Map json) { AcctToken = json['AcctToken']; ProfileToken = json['ProfileToken']; PaymentProfileId = json['PaymentProfileId']; PaymentAmount = JsonConverters.toDouble(json['PaymentAmount']); UsePreferred = json['UsePreferred']; DoNotUpdatePaymentTypePreference = json['DoNotUpdatePaymentTypePreference']; return this; } Map toJson() => { 'AcctToken': AcctToken, 'ProfileToken': ProfileToken, 'PaymentProfileId': PaymentProfileId, 'PaymentAmount': PaymentAmount, 'UsePreferred': UsePreferred, 'DoNotUpdatePaymentTypePreference': DoNotUpdatePaymentTypePreference }; getTypeName() => "PaymentMethodDto"; TypeContext? context = _ctx; } // @DataContract enum AcctType { Uninitialized, Visa, MC, Disc, Amex, Diners, JCB, enRoute, PayPal, BillMe, PC, PS, BC, BS, Becs, Bacs, Maestro, Solo, VisaElectron, CIBC, RoyalBankCa, TDCaTrust, Scotia, BMO, HSBCCa, UnionPay, InterPayment, Laser, UnknownCredit, TransArmor, Factor4, XPass, ConnectedAccount, UnknownBank, Error, } abstract class IContractSoldNewUserEndpoint extends IApiDtoBase { String? AcctToken; String? Last4; int? ExpMonth; int? ExpYear; AcctType? AcctType; int? BnkRoute; bool? IsTemp; int? PackageId; int? InstallmentPlanId; double? PaymentAmount; DateTime? StartDate; String? FirstName; String? LastName; String? Address; String? City; String? State; String? Zip; String? Email; String? Gender; String? Phone; String? WorkPhone; DateTime? DateOfBirth; String? CellPhone; String? Note; String? ExternalId; String? PromoCode; String? Username; int? ReferralTypeId; String? EmergencyContactName; String? EmergencyContactPhone; String? EmergencyContactType; List? PaymentMethods; } // @Route("/sales/contract/sold/new/user", "POST") // @ApiResponse(Description="", ResponseType=typeof(ContractSoldNewUserResponse), StatusCode=200) class ContractSoldNewUserEndpoint implements IContractSoldNewUserEndpoint, IRestrictedApiRequest, IConvertible { /** * IP address of the end user */ // @ApiMember(Description="IP address of the end user", Name="X-Forwarded-For", ParameterType="header") String? XForwardedFor; /** * Api Authentication Key */ // @ApiMember(Description="Api Authentication Key", IsRequired=true, ParameterType="query") String? ApiKey; /** * Id for the chain of the Api Key */ // @ApiMember(Description="Id for the chain of the Api Key", ParameterType="query") int? ChainId; /** * Id of the store for the user */ // @ApiMember(Description="Id of the store for the user", IsRequired=true, ParameterType="query") int? StoreId; /** * Package Id being sold */ // @ApiMember(Description="Package Id being sold", IsRequired=true) int? PackageId; /** * Installment Plan Id being sold */ // @ApiMember(Description="Installment Plan Id being sold", IsRequired=true) int? InstallmentPlanId; /** * Amount being paid */ // @ApiMember(Description="Amount being paid", IsRequired=true) double? PaymentAmount; /** * Date contract takes affect */ // @ApiMember(Description="Date contract takes affect") DateTime? StartDate; /** * First Name */ // @ApiMember(Description="First Name", IsRequired=true) String? FirstName; /** * Last Name */ // @ApiMember(Description="Last Name", IsRequired=true) String? LastName; /** * Email Address */ // @ApiMember(Description="Email Address", IsRequired=true) String? Email; /** * Gender */ // @ApiMember(Description="Gender") String? Gender; /** * Address */ // @ApiMember(Description="Address") String? Address; /** * City */ // @ApiMember(Description="City") String? City; /** * State */ // @ApiMember(Description="State") String? State; /** * Zip Code */ // @ApiMember(Description="Zip Code") String? Zip; /** * Home phone */ // @ApiMember(Description="Home phone") String? Phone; /** * Work phone */ // @ApiMember(Description="Work phone") String? WorkPhone; /** * Date of Birth */ // @ApiMember(Description="Date of Birth") DateTime? DateOfBirth; /** * Cell phone */ // @ApiMember(Description="Cell phone") String? CellPhone; /** * Add an internal note for the new prospect */ // @ApiMember(Description="Add an internal note for the new prospect") String? Note; /** * Unique Id for the user from your system. We store internally as ExternalUserId */ // @ApiMember(Description="Unique Id for the user from your system. We store internally as ExternalUserId") String? ExternalId; /** * Promo code to apply a discount. */ // @ApiMember(Description="Promo code to apply a discount.") String? PromoCode; /** * Username should be between 4 and 255 characters long */ // @ApiMember(Description="Username should be between 4 and 255 characters long") String? Username; /** * ReferralTypeId */ // @ApiMember(Description="ReferralTypeId") int? ReferralTypeId; /** * Emergency contact name */ // @ApiMember(Description="Emergency contact name") String? EmergencyContactName; /** * Emergency contact phone number */ // @ApiMember(Description="Emergency contact phone number") String? EmergencyContactPhone; /** * Emergency contact relationship */ // @ApiMember(Description="Emergency contact relationship") String? EmergencyContactType; /** * An array of PaymentMethod objects to be used for this purchase. A null array (or omitted property) will use thePreferred method for the total amount.Each object of the array may contain properties:| Property | Description || --- | --- || PaymentAmount | The maximum amount to be attempted for this PaymentMethod. When null or omitted, the remaining PaymentAmount will be attempted. || **Use only one of the following three** | **UsePreferred** or **AcctToken** or **ProfileToken [DoNotUpdatePaymentTypePreference]** || UsePreferred | Set to `true` to use the Preferred method, otherwise omit the value or set to `null` or `false` || AcctToken | The AcctToken to attempt payment || ProfileToken | When provided, a PaymentMethod will be created (this will prevent the requirement to call `/sales/paymentprofile/import`) || DoNotUpdatePaymentTypePreference | [Optional] When creating a PaymentMethod (ProfileToken), it is set as the preferred method. To not create as preferred, set `DoNotUpdatePaymentTypePreference` to `true`. (for more information, see `/sales/paymentprofile/import`) || | |Only one of `UsePreferred`, `AcctToken`, `ProfileToken` or is needed. `DoNotUpdatePaymentTypePreference` is optionaland only valid with `ProfileToken`.* Scenario #1: Sell $3 contract using an existing PaymentMethod (i.e. AcctToken) for $1 and the Preferred method for $2.JSON:```json{ ... "PaymentAmount": 3.00, "PaymentMethods": [ { "PaymentAmount": "1.00", "AcctToken": "eyJ..." }, { "PaymentAmount": "2.00", "UsePreferred": true } ]}```JSV:```...,PaymentAmount:3.00,PaymentMethods:[{PaymentAmount:1.00,AcctToken:eyJ...NdQ},{PaymentAmount:2.00,UsePreferred:true}]```* Scenario #2: Sell $3 contract using a new PaymentMethod (i.e. ProfileToken) for $1 and the Preferred method for the remaining.Note, the sum of the PaymentMethod's PaymentAmount ($4) is greater than the agreement amount ($3). PaymentAmount is the maximum amount.This allows the first PaymentMethod to decline or partially approve (common with gift cards). Therefore, if the first PaymentMethod approvesfor $0.75, the second will be attempted for $2.25.JSON:```json{ ... "PaymentAmount": 3.00, "PaymentMethods": [ { "PaymentAmount": "1.00", "ProfileToken": "eyJ..." }, { "PaymentAmount": "3.00", "UsePreferred": true } ]}```JSV:```jsv...,PaymentAmount:3.00,PaymentMethods:[{PaymentAmount:1.00,ProfileToken:eyj...NdQ},{PaymentAmount:3.00,UsePreferred:true}]```Notes: * AcctTokens should not be parsed or persisted in the client application. They are currently jsonbased, but can be updated without notice.* ProfileToken is used to create a PaymentMethod in the ClubReady system. For more information, see `/sales/paymentprofile/import`.* If `PaymentMethods` is missing or `null`, the Preferred method will be used.* If a `PaymentMethods` `PaymentAmount` is not specified, the remaining amount will be attempted.* If a PaymentMethod is partially approved (common for gift cards), the PaymentMethod with anunspecified PaymentAmount will be charged the remaining amount, including the unapproved amount not.* When testing with this website, the PaymentMethods textbox needs JSV and only the square brackets and contents(e.g. `[{PaymentAmount:1.00,UsePreferred:true}]`). */ // @ApiMember(Description="An array of PaymentMethod objects to be used for this purchase. A null array (or omitted property) will use the\r\nPreferred method for the total amount.\r\n\r\nEach object of the array may contain properties:\r\n\r\n| Property | Description |\r\n| --- | --- |\r\n| PaymentAmount | The maximum amount to be attempted for this PaymentMethod. When null or omitted, the remaining PaymentAmount will be attempted. |\r\n| **Use only one of the following three** | **UsePreferred** or **AcctToken** or **ProfileToken [DoNotUpdatePaymentTypePreference]** |\r\n| UsePreferred | Set to `true` to use the Preferred method, otherwise omit the value or set to `null` or `false` |\r\n| AcctToken | The AcctToken to attempt payment |\r\n| ProfileToken | When provided, a PaymentMethod will be created (this will prevent the requirement to call `/sales/paymentprofile/import`) |\r\n| DoNotUpdatePaymentTypePreference | [Optional] When creating a PaymentMethod (ProfileToken), it is set as the preferred method. To not create as preferred, set `DoNotUpdatePaymentTypePreference` to `true`. (for more information, see `/sales/paymentprofile/import`) |\r\n| | |\r\n\r\nOnly one of `UsePreferred`, `AcctToken`, `ProfileToken` or is needed. `DoNotUpdatePaymentTypePreference` is optional\r\nand only valid with `ProfileToken`.\r\n\r\n* Scenario #1: Sell $3 contract using an existing PaymentMethod (i.e. AcctToken) for $1 and the Preferred method for $2.\r\n\r\nJSON:\r\n```json\r\n{\r\n ...\r\n \"PaymentAmount\": 3.00,\r\n \"PaymentMethods\": [\r\n {\r\n \"PaymentAmount\": \"1.00\",\r\n \"AcctToken\": \"eyJ...\"\r\n },\r\n {\r\n \"PaymentAmount\": \"2.00\",\r\n \"UsePreferred\": true\r\n }\r\n ]\r\n}\r\n```\r\nJSV:\r\n```\r\n...,PaymentAmount:3.00,PaymentMethods:[{PaymentAmount:1.00,AcctToken:eyJ...NdQ},{PaymentAmount:2.00,UsePreferred:true}]\r\n```\r\n\r\n* Scenario #2: Sell $3 contract using a new PaymentMethod (i.e. ProfileToken) for $1 and the Preferred method for the remaining.\r\nNote, the sum of the PaymentMethod's PaymentAmount ($4) is greater than the agreement amount ($3). PaymentAmount is the maximum amount.\r\nThis allows the first PaymentMethod to decline or partially approve (common with gift cards). Therefore, if the first PaymentMethod approves\r\nfor $0.75, the second will be attempted for $2.25.\r\n\r\nJSON:\r\n```json\r\n{ \r\n ...\r\n \"PaymentAmount\": 3.00,\r\n \"PaymentMethods\": [\r\n {\r\n \"PaymentAmount\": \"1.00\",\r\n \"ProfileToken\": \"eyJ...\"\r\n },\r\n {\r\n \"PaymentAmount\": \"3.00\",\r\n \"UsePreferred\": true\r\n }\r\n ]\r\n}\r\n```\r\nJSV:\r\n```jsv\r\n...,PaymentAmount:3.00,PaymentMethods:[{PaymentAmount:1.00,ProfileToken:eyj...NdQ},{PaymentAmount:3.00,UsePreferred:true}]\r\n```\r\n\r\nNotes: \r\n\r\n* AcctTokens should not be parsed or persisted in the client application. They are currently json\r\nbased, but can be updated without notice.\r\n\r\n* ProfileToken is used to create a PaymentMethod in the ClubReady system. For more information, \r\nsee `/sales/paymentprofile/import`.\r\n\r\n* If `PaymentMethods` is missing or `null`, the Preferred method will be used.\r\n\r\n* If a `PaymentMethods` `PaymentAmount` is not specified, the remaining amount will be attempted.\r\n\r\n* If a PaymentMethod is partially approved (common for gift cards), the PaymentMethod with an\r\nunspecified PaymentAmount will be charged the remaining amount, including the unapproved amount not.\r\n\r\n* When testing with this website, the PaymentMethods textbox needs JSV and only the square brackets and contents\r\n(e.g. `[{PaymentAmount:1.00,UsePreferred:true}]`).") List? PaymentMethods; int? RestrictedId; RestrictedResourceType? RestrictedResourceType; ContractSoldNewUserEndpoint({this.XForwardedFor,this.ApiKey,this.ChainId,this.StoreId,this.PackageId,this.InstallmentPlanId,this.PaymentAmount,this.StartDate,this.FirstName,this.LastName,this.Email,this.Gender,this.Address,this.City,this.State,this.Zip,this.Phone,this.WorkPhone,this.DateOfBirth,this.CellPhone,this.Note,this.ExternalId,this.PromoCode,this.Username,this.ReferralTypeId,this.EmergencyContactName,this.EmergencyContactPhone,this.EmergencyContactType,this.PaymentMethods,this.RestrictedId,this.RestrictedResourceType}); ContractSoldNewUserEndpoint.fromJson(Map json) { fromMap(json); } fromMap(Map json) { XForwardedFor = json['XForwardedFor']; ApiKey = json['ApiKey']; ChainId = json['ChainId']; StoreId = json['StoreId']; PackageId = json['PackageId']; InstallmentPlanId = json['InstallmentPlanId']; PaymentAmount = JsonConverters.toDouble(json['PaymentAmount']); StartDate = JsonConverters.fromJson(json['StartDate'],'DateTime',context!); FirstName = json['FirstName']; LastName = json['LastName']; Email = json['Email']; Gender = json['Gender']; Address = json['Address']; City = json['City']; State = json['State']; Zip = json['Zip']; Phone = json['Phone']; WorkPhone = json['WorkPhone']; DateOfBirth = JsonConverters.fromJson(json['DateOfBirth'],'DateTime',context!); CellPhone = json['CellPhone']; Note = json['Note']; ExternalId = json['ExternalId']; PromoCode = json['PromoCode']; Username = json['Username']; ReferralTypeId = json['ReferralTypeId']; EmergencyContactName = json['EmergencyContactName']; EmergencyContactPhone = json['EmergencyContactPhone']; EmergencyContactType = json['EmergencyContactType']; PaymentMethods = JsonConverters.fromJson(json['PaymentMethods'],'List',context!); RestrictedId = json['RestrictedId']; RestrictedResourceType = JsonConverters.fromJson(json['RestrictedResourceType'],'RestrictedResourceType',context!); return this; } Map toJson() => { 'XForwardedFor': XForwardedFor, 'ApiKey': ApiKey, 'ChainId': ChainId, 'StoreId': StoreId, 'PackageId': PackageId, 'InstallmentPlanId': InstallmentPlanId, 'PaymentAmount': PaymentAmount, 'StartDate': JsonConverters.toJson(StartDate,'DateTime',context!), 'FirstName': FirstName, 'LastName': LastName, 'Email': Email, 'Gender': Gender, 'Address': Address, 'City': City, 'State': State, 'Zip': Zip, 'Phone': Phone, 'WorkPhone': WorkPhone, 'DateOfBirth': JsonConverters.toJson(DateOfBirth,'DateTime',context!), 'CellPhone': CellPhone, 'Note': Note, 'ExternalId': ExternalId, 'PromoCode': PromoCode, 'Username': Username, 'ReferralTypeId': ReferralTypeId, 'EmergencyContactName': EmergencyContactName, 'EmergencyContactPhone': EmergencyContactPhone, 'EmergencyContactType': EmergencyContactType, 'PaymentMethods': JsonConverters.toJson(PaymentMethods,'List',context!), 'RestrictedId': RestrictedId, 'RestrictedResourceType': JsonConverters.toJson(RestrictedResourceType,'RestrictedResourceType',context!) }; getTypeName() => "ContractSoldNewUserEndpoint"; TypeContext? context = _ctx; } TypeContext _ctx = TypeContext(library: 'www.clubready.com', types: { 'RestrictedResourceType': TypeInfo(TypeOf.Enum, enumValues:RestrictedResourceType.values), 'IApiDtoBase': TypeInfo(TypeOf.Interface), 'IRestrictedApiRequest': TypeInfo(TypeOf.Interface), 'IApiKeyEndpoint': TypeInfo(TypeOf.Interface), 'PaymentMethodDto': TypeInfo(TypeOf.Class, create:() => PaymentMethodDto()), 'AcctType': TypeInfo(TypeOf.Enum, enumValues:AcctType.values), 'IContractSoldNewUserEndpoint': TypeInfo(TypeOf.Interface), 'ContractSoldNewUserEndpoint': TypeInfo(TypeOf.Class, create:() => ContractSoldNewUserEndpoint()), 'List': TypeInfo(TypeOf.Class, create:() => []), });