ClubReady Api

<back to all web services

AgreementAddEndpoint

The following routes are available for this service:
POST/sales/agreement/addSet up a package that will be sold to an existing userSet up a package that will be sold to an existing user. The PaymentMethods property is an array of objects describing how you want ClubReady to take payment while selling the PackageId/InstallmentPlanId. If omitted (or null), the preferred on-file profile will be used. The header `X-Forwarded-For` is required and should be set to the IP address of the end user.
import 'package:servicestack/servicestack.dart';

enum RestrictedResourceType
{
    Store,
    Chain,
    User,
    Undefined,
}

// @ApiResponse(Description="", ResponseType=typeof(AddResponse), StatusCode=200)
class AgreementAddEndpoint implements IAddEndpoint, IRestrictedApiRequest, IConvertible
{
    /**
    * IP address of the end user
    */
    // @ApiMember(Description="IP address of the end user", IsRequired=true, Name="X-Forwarded-For", ParameterType="header")
    String? XForwardedFor;

    /**
    * Api Authentication Key
    */
    // @ApiMember(Description="Api Authentication Key", IsRequired=true, ParameterType="query")
    String? ApiKey;

    /**
    * Member Id of the user buying the Package
    */
    // @ApiMember(Description="Member Id of the user buying the Package", IsRequired=true, ParameterType="query")
    int? MemberId;

    int? ChainId;
    /**
    * Id of the store for the user
    */
    // @ApiMember(Description="Id of the store for the user", IsRequired=true)
    int? StoreId;

    /**
    * Package Id number of the package being purchased
    */
    // @ApiMember(Description="Package Id number of the package being purchased", IsRequired=true)
    int? PackageId;

    /**
    * Installment Plan Id being purchased. If empty, the default package will be selected.
    */
    // @ApiMember(Description="Installment Plan Id being purchased. If empty, the default package will be selected.")
    int? InstallmentId;

    /**
    * Date contract takes affect
    */
    // @ApiMember(Description="Date contract takes affect")
    DateTime? StartDate;

    /**
    * Promo code to apply a discount.
    */
    // @ApiMember(Description="Promo code to apply a discount.")
    String? PromoCode;

    /**
    * Staff Id of salesperson who sold the agreement.
    */
    // @ApiMember(Description="Staff Id of salesperson who sold the agreement.")
    int? StaffId;

    int? RestrictedId;
    RestrictedResourceType? RestrictedResourceType;

    AgreementAddEndpoint({this.XForwardedFor,this.ApiKey,this.MemberId,this.ChainId,this.StoreId,this.PackageId,this.InstallmentId,this.StartDate,this.PromoCode,this.StaffId,this.RestrictedId,this.RestrictedResourceType});
    AgreementAddEndpoint.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        XForwardedFor = json['XForwardedFor'];
        ApiKey = json['ApiKey'];
        MemberId = json['MemberId'];
        ChainId = json['ChainId'];
        StoreId = json['StoreId'];
        PackageId = json['PackageId'];
        InstallmentId = json['InstallmentId'];
        StartDate = JsonConverters.fromJson(json['StartDate'],'DateTime',context!);
        PromoCode = json['PromoCode'];
        StaffId = json['StaffId'];
        RestrictedId = json['RestrictedId'];
        RestrictedResourceType = JsonConverters.fromJson(json['RestrictedResourceType'],'RestrictedResourceType',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'XForwardedFor': XForwardedFor,
        'ApiKey': ApiKey,
        'MemberId': MemberId,
        'ChainId': ChainId,
        'StoreId': StoreId,
        'PackageId': PackageId,
        'InstallmentId': InstallmentId,
        'StartDate': JsonConverters.toJson(StartDate,'DateTime',context!),
        'PromoCode': PromoCode,
        'StaffId': StaffId,
        'RestrictedId': RestrictedId,
        'RestrictedResourceType': JsonConverters.toJson(RestrictedResourceType,'RestrictedResourceType',context!)
    };

    getTypeName() => "AgreementAddEndpoint";
    TypeContext? context = _ctx;
}

class ApiResponse2Base implements IConvertible
{
    bool? success;
    String? message;

    ApiResponse2Base({this.success,this.message});
    ApiResponse2Base.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        success = json['success'];
        message = json['message'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'success': success,
        'message': message
    };

    getTypeName() => "ApiResponse2Base";
    TypeContext? context = _ctx;
}

class AddResponse extends ApiResponse2Base implements IConvertible
{
    String? incompleteAgreementToken;
    int? contractId;

    AddResponse({this.incompleteAgreementToken,this.contractId});
    AddResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        incompleteAgreementToken = json['incompleteAgreementToken'];
        contractId = json['contractId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'incompleteAgreementToken': incompleteAgreementToken,
        'contractId': contractId
    });

    getTypeName() => "AddResponse";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'www.clubready.com', types: <String, TypeInfo> {
    'RestrictedResourceType': TypeInfo(TypeOf.Enum, enumValues:RestrictedResourceType.values),
    'AgreementAddEndpoint': TypeInfo(TypeOf.Class, create:() => AgreementAddEndpoint()),
    'ApiResponse2Base': TypeInfo(TypeOf.Class, create:() => ApiResponse2Base()),
    'AddResponse': TypeInfo(TypeOf.Class, create:() => AddResponse()),
});

Dart AgreementAddEndpoint DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /sales/agreement/add HTTP/1.1 
Host: www.clubready.com 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	XForwardedFor: String,
	ApiKey: String,
	MemberId: 0,
	ChainId: 0,
	StoreId: 0,
	PackageId: 0,
	InstallmentId: 0,
	StartDate: 0001-01-01,
	PromoCode: String,
	StaffId: 0,
	RestrictedId: 0,
	RestrictedResourceType: Store
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	incompleteAgreementToken: String,
	contractId: 0,
	success: False,
	message: String
}