BokaMera.API.Host

<back to all web services

CreateCustomer

Requires Authentication
Required role:bookingsupplier-administrator-write
The following routes are available for this service:
POST/customersCreate a new customerCreates a new customer, if an admin user is making the request, the user will be associated with the admin user's company.
import 'package:servicestack/servicestack.dart';

class CustomFieldValueResponse implements IConvertible
{
    String? Value;

    CustomFieldValueResponse({this.Value});
    CustomFieldValueResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class CustomFieldConfigData implements IConvertible
{
    /**
    * Custom field id
    */
    // @ApiMember(Description="Custom field id")
    int? Id;

    /**
    * Configuration name. Example: 'Number of persons'.
    */
    // @ApiMember(Description="Configuration name. Example: 'Number of persons'.")
    String? Name;

    /**
    * Custom field description. Example: 'For how many persons is this booking?'
    */
    // @ApiMember(Description="Custom field description. Example: 'For how many persons is this booking?'")
    String? Description;

    /**
    * Field width. Example: 20 for 20px
    */
    // @ApiMember(Description="Field width. Example: 20 for 20px")
    int? Width;

    /**
    * Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
    */
    // @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
    String? DataType;

    /**
    * Default value of the field. Example: '3'
    */
    // @ApiMember(Description="Default value of the field. Example: '3'")
    String? DefaultValue;

    /**
    * Determines if the field is required to have a value or not
    */
    // @ApiMember(Description="Determines if the field is required to have a value or not")
    bool? IsMandatory;

    /**
    * Error message shown to the user if the field data is required but not entered
    */
    // @ApiMember(Description="Error message shown to the user if the field data is required but not entered")
    String? MandatoryErrorMessage;

    /**
    * Max lenght of the field
    */
    // @ApiMember(Description="Max lenght of the field")
    int? MaxLength;

    /**
    * If the field should have multiple lines
    */
    // @ApiMember(Description="If the field should have multiple lines")
    bool? MultipleLineText;

    /**
    * Regular expression used for validation of the field
    */
    // @ApiMember(Description="Regular expression used for validation of the field")
    String? RegEx;

    /**
    * Error message shown if the regular expression validation failed
    */
    // @ApiMember(Description="Error message shown if the regular expression validation failed")
    String? RegExErrorMessage;

    /**
    * The values to select from if Datatype is DropDown for this custom field
    */
    // @ApiMember(Description="The values to select from if Datatype is DropDown for this custom field")
    List<CustomFieldValueResponse>? Values;

    CustomFieldConfigData({this.Id,this.Name,this.Description,this.Width,this.DataType,this.DefaultValue,this.IsMandatory,this.MandatoryErrorMessage,this.MaxLength,this.MultipleLineText,this.RegEx,this.RegExErrorMessage,this.Values});
    CustomFieldConfigData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        Description = json['Description'];
        Width = json['Width'];
        DataType = json['DataType'];
        DefaultValue = json['DefaultValue'];
        IsMandatory = json['IsMandatory'];
        MandatoryErrorMessage = json['MandatoryErrorMessage'];
        MaxLength = json['MaxLength'];
        MultipleLineText = json['MultipleLineText'];
        RegEx = json['RegEx'];
        RegExErrorMessage = json['RegExErrorMessage'];
        Values = JsonConverters.fromJson(json['Values'],'List<CustomFieldValueResponse>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Description': Description,
        'Width': Width,
        'DataType': DataType,
        'DefaultValue': DefaultValue,
        'IsMandatory': IsMandatory,
        'MandatoryErrorMessage': MandatoryErrorMessage,
        'MaxLength': MaxLength,
        'MultipleLineText': MultipleLineText,
        'RegEx': RegEx,
        'RegExErrorMessage': RegExErrorMessage,
        'Values': JsonConverters.toJson(Values,'List<CustomFieldValueResponse>',context!)
    };

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

class CustomFieldDataResponse implements IConvertible
{
    int? Id;
    String? Column;
    String? Name;
    String? Description;
    String? Value;
    /**
    * Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
    */
    // @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
    String? DataType;

    CustomFieldDataResponse({this.Id,this.Column,this.Name,this.Description,this.Value,this.DataType});
    CustomFieldDataResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Column = json['Column'];
        Name = json['Name'];
        Description = json['Description'];
        Value = json['Value'];
        DataType = json['DataType'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Column': Column,
        'Name': Name,
        'Description': Description,
        'Value': Value,
        'DataType': DataType
    };

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

class CustomerCommentsResponse implements IConvertible
{
    int? Id;
    String? CustomerId;
    String? Comments;
    DateTime? Updated;
    DateTime? Created;
    Uri? ImageUrl;

    CustomerCommentsResponse({this.Id,this.CustomerId,this.Comments,this.Updated,this.Created,this.ImageUrl});
    CustomerCommentsResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        CustomerId = json['CustomerId'];
        Comments = json['Comments'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'CustomerId': CustomerId,
        'Comments': Comments,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!)
    };

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

class BaseModel implements IConvertible
{
    BaseModel();
    BaseModel.fromJson(Map<String, dynamic> json) : super();
    fromMap(Map<String, dynamic> json) {
        return this;
    }

    Map<String, dynamic> toJson() => {};
    getTypeName() => "BaseModel";
    TypeContext? context = _ctx;
}

class UserAccessKeys extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    // @Required()
    int? AccessKeyTypeId;

    // @Required()
    String? Value;

    // @Required()
    String? CustomerId;

    String? Description;
    // @Required()
    String? Id;

    UserAccessKeys({this.CompanyId,this.AccessKeyTypeId,this.Value,this.CustomerId,this.Description,this.Id});
    UserAccessKeys.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        AccessKeyTypeId = json['AccessKeyTypeId'];
        Value = json['Value'];
        CustomerId = json['CustomerId'];
        Description = json['Description'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'AccessKeyTypeId': AccessKeyTypeId,
        'Value': Value,
        'CustomerId': CustomerId,
        'Description': Description,
        'Id': Id
    });

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

class InvoiceAddress implements IConvertible
{
    String? CorporateIdentityNumber;
    String? InvoiceAddress1;
    String? InvoiceAddress2;
    String? InvoiceCity;
    String? InvoicePostalCode;
    String? InvoiceCountryCode;

    InvoiceAddress({this.CorporateIdentityNumber,this.InvoiceAddress1,this.InvoiceAddress2,this.InvoiceCity,this.InvoicePostalCode,this.InvoiceCountryCode});
    InvoiceAddress.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CorporateIdentityNumber = json['CorporateIdentityNumber'];
        InvoiceAddress1 = json['InvoiceAddress1'];
        InvoiceAddress2 = json['InvoiceAddress2'];
        InvoiceCity = json['InvoiceCity'];
        InvoicePostalCode = json['InvoicePostalCode'];
        InvoiceCountryCode = json['InvoiceCountryCode'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CorporateIdentityNumber': CorporateIdentityNumber,
        'InvoiceAddress1': InvoiceAddress1,
        'InvoiceAddress2': InvoiceAddress2,
        'InvoiceCity': InvoiceCity,
        'InvoicePostalCode': InvoicePostalCode,
        'InvoiceCountryCode': InvoiceCountryCode
    };

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

class CustomerQueryResponse implements IConvertible
{
    String? Id;
    String? Firstname;
    String? Lastname;
    String? Email;
    String? Phone;
    String? ImageUrl;
    List<CustomFieldConfigData>? CustomFields;
    List<CustomFieldDataResponse>? CustomFieldValues;
    List<CustomerCommentsResponse>? Comments;
    List<UserAccessKeys>? AccessKeys;
    DateTime? Updated;
    DateTime? Created;
    dynamic? ResponseStatus;
    bool? SubscribedToNewsletter;
    InvoiceAddress? InvoiceAddress;

    CustomerQueryResponse({this.Id,this.Firstname,this.Lastname,this.Email,this.Phone,this.ImageUrl,this.CustomFields,this.CustomFieldValues,this.Comments,this.AccessKeys,this.Updated,this.Created,this.ResponseStatus,this.SubscribedToNewsletter,this.InvoiceAddress});
    CustomerQueryResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Firstname = json['Firstname'];
        Lastname = json['Lastname'];
        Email = json['Email'];
        Phone = json['Phone'];
        ImageUrl = json['ImageUrl'];
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<CustomFieldConfigData>',context!);
        CustomFieldValues = JsonConverters.fromJson(json['CustomFieldValues'],'List<CustomFieldDataResponse>',context!);
        Comments = JsonConverters.fromJson(json['Comments'],'List<CustomerCommentsResponse>',context!);
        AccessKeys = JsonConverters.fromJson(json['AccessKeys'],'List<UserAccessKeys>',context!);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'dynamic',context!);
        SubscribedToNewsletter = json['SubscribedToNewsletter'];
        InvoiceAddress = JsonConverters.fromJson(json['InvoiceAddress'],'InvoiceAddress',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Firstname': Firstname,
        'Lastname': Lastname,
        'Email': Email,
        'Phone': Phone,
        'ImageUrl': ImageUrl,
        'CustomFields': JsonConverters.toJson(CustomFields,'List<CustomFieldConfigData>',context!),
        'CustomFieldValues': JsonConverters.toJson(CustomFieldValues,'List<CustomFieldDataResponse>',context!),
        'Comments': JsonConverters.toJson(Comments,'List<CustomerCommentsResponse>',context!),
        'AccessKeys': JsonConverters.toJson(AccessKeys,'List<UserAccessKeys>',context!),
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'dynamic',context!),
        'SubscribedToNewsletter': SubscribedToNewsletter,
        'InvoiceAddress': JsonConverters.toJson(InvoiceAddress,'InvoiceAddress',context!)
    };

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

class UpdateCustomerResponse extends CustomerQueryResponse implements IConvertible
{
    String? FacebookUserName;
    String? UserId;
    String? CompanyId;
    DateTime? CreatedDate;
    List<UserAccessKeys>? DeletedAccessKeys;
    List<UserAccessKeys>? CreatedOrUpdatedAccessKeys;

    UpdateCustomerResponse({this.FacebookUserName,this.UserId,this.CompanyId,this.CreatedDate,this.DeletedAccessKeys,this.CreatedOrUpdatedAccessKeys});
    UpdateCustomerResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        FacebookUserName = json['FacebookUserName'];
        UserId = json['UserId'];
        CompanyId = json['CompanyId'];
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        DeletedAccessKeys = JsonConverters.fromJson(json['DeletedAccessKeys'],'List<UserAccessKeys>',context!);
        CreatedOrUpdatedAccessKeys = JsonConverters.fromJson(json['CreatedOrUpdatedAccessKeys'],'List<UserAccessKeys>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'FacebookUserName': FacebookUserName,
        'UserId': UserId,
        'CompanyId': CompanyId,
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'DeletedAccessKeys': JsonConverters.toJson(DeletedAccessKeys,'List<UserAccessKeys>',context!),
        'CreatedOrUpdatedAccessKeys': JsonConverters.toJson(CreatedOrUpdatedAccessKeys,'List<UserAccessKeys>',context!)
    });

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

class AddCustomField implements IConvertible
{
    int? Id;
    String? Value;

    AddCustomField({this.Id,this.Value});
    AddCustomField.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Value': Value
    };

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

class AddUserAccessKey implements IConvertible
{
    String? Id;
    String? CompanyId;
    int? AccessKeyTypeId;
    String? Value;
    String? CustomerId;
    String? Description;

    AddUserAccessKey({this.Id,this.CompanyId,this.AccessKeyTypeId,this.Value,this.CustomerId,this.Description});
    AddUserAccessKey.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        CompanyId = json['CompanyId'];
        AccessKeyTypeId = json['AccessKeyTypeId'];
        Value = json['Value'];
        CustomerId = json['CustomerId'];
        Description = json['Description'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'CompanyId': CompanyId,
        'AccessKeyTypeId': AccessKeyTypeId,
        'Value': Value,
        'CustomerId': CustomerId,
        'Description': Description
    };

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

// @ApiResponse(Description="Returned if there is a validation error on the input parameters", StatusCode=400)
// @ApiResponse(Description="Returned if the current user is not allowed to perform the action", StatusCode=401)
// @ValidateRequest(Validator="IsAuthenticated")
class CreateCustomer implements IConvertible
{
    /**
    * Enter the company and id for the customer, if blank company id and you are an admin, your company id will be used.
    */
    // @ApiMember(Description="Enter the company and id for the customer, if blank company id and you are an admin, your company id will be used.", ParameterType="query")
    String? CompanyId;

    // @ApiMember(IsRequired=true)
    String? Firstname;

    // @ApiMember(IsRequired=true)
    String? Lastname;

    // @ApiMember(IsRequired=true)
    String? Phone;

    // @ApiMember()
    String? Email;

    /**
    * If Custom Fields are added to the customer, here you will send the id and the value for each custom field to be updated
    */
    // @ApiMember(Description="If Custom Fields are added to the customer, here you will send the id and the value for each custom field to be updated")
    List<AddCustomField>? CustomFields;

    /**
    * List of Access Keys
    */
    // @ApiMember(Description="List of Access Keys")
    List<AddUserAccessKey>? AccessKeys;

    /**
    * Customer invoice adress
    */
    // @ApiMember(Description="Customer invoice adress")
    InvoiceAddress? InvoiceAddress;

    CreateCustomer({this.CompanyId,this.Firstname,this.Lastname,this.Phone,this.Email,this.CustomFields,this.AccessKeys,this.InvoiceAddress});
    CreateCustomer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CompanyId = json['CompanyId'];
        Firstname = json['Firstname'];
        Lastname = json['Lastname'];
        Phone = json['Phone'];
        Email = json['Email'];
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<AddCustomField>',context!);
        AccessKeys = JsonConverters.fromJson(json['AccessKeys'],'List<AddUserAccessKey>',context!);
        InvoiceAddress = JsonConverters.fromJson(json['InvoiceAddress'],'InvoiceAddress',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CompanyId': CompanyId,
        'Firstname': Firstname,
        'Lastname': Lastname,
        'Phone': Phone,
        'Email': Email,
        'CustomFields': JsonConverters.toJson(CustomFields,'List<AddCustomField>',context!),
        'AccessKeys': JsonConverters.toJson(AccessKeys,'List<AddUserAccessKey>',context!),
        'InvoiceAddress': JsonConverters.toJson(InvoiceAddress,'InvoiceAddress',context!)
    };

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

TypeContext _ctx = TypeContext(library: 'testapi.bokamera.se', types: <String, TypeInfo> {
    'CustomFieldValueResponse': TypeInfo(TypeOf.Class, create:() => CustomFieldValueResponse()),
    'CustomFieldConfigData': TypeInfo(TypeOf.Class, create:() => CustomFieldConfigData()),
    'List<CustomFieldValueResponse>': TypeInfo(TypeOf.Class, create:() => <CustomFieldValueResponse>[]),
    'CustomFieldDataResponse': TypeInfo(TypeOf.Class, create:() => CustomFieldDataResponse()),
    'CustomerCommentsResponse': TypeInfo(TypeOf.Class, create:() => CustomerCommentsResponse()),
    'Uri': TypeInfo(TypeOf.Class, create:() => Uri()),
    'BaseModel': TypeInfo(TypeOf.Class, create:() => BaseModel()),
    'UserAccessKeys': TypeInfo(TypeOf.Class, create:() => UserAccessKeys()),
    'InvoiceAddress': TypeInfo(TypeOf.Class, create:() => InvoiceAddress()),
    'CustomerQueryResponse': TypeInfo(TypeOf.Class, create:() => CustomerQueryResponse()),
    'List<CustomFieldConfigData>': TypeInfo(TypeOf.Class, create:() => <CustomFieldConfigData>[]),
    'List<CustomFieldDataResponse>': TypeInfo(TypeOf.Class, create:() => <CustomFieldDataResponse>[]),
    'List<CustomerCommentsResponse>': TypeInfo(TypeOf.Class, create:() => <CustomerCommentsResponse>[]),
    'List<UserAccessKeys>': TypeInfo(TypeOf.Class, create:() => <UserAccessKeys>[]),
    'UpdateCustomerResponse': TypeInfo(TypeOf.Class, create:() => UpdateCustomerResponse()),
    'AddCustomField': TypeInfo(TypeOf.Class, create:() => AddCustomField()),
    'AddUserAccessKey': TypeInfo(TypeOf.Class, create:() => AddUserAccessKey()),
    'CreateCustomer': TypeInfo(TypeOf.Class, create:() => CreateCustomer()),
    'List<AddCustomField>': TypeInfo(TypeOf.Class, create:() => <AddCustomField>[]),
    'List<AddUserAccessKey>': TypeInfo(TypeOf.Class, create:() => <AddUserAccessKey>[]),
});

Dart CreateCustomer DTOs

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

HTTP + OTHER

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

POST /customers HTTP/1.1 
Host: testapi.bokamera.se 
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length

{"CompanyId":"00000000-0000-0000-0000-000000000000","Firstname":"String","Lastname":"String","Phone":"String","Email":"String","CustomFields":[{"Id":0,"Value":"String"}],"AccessKeys":[{"Id":"00000000-0000-0000-0000-000000000000","CompanyId":"00000000-0000-0000-0000-000000000000","AccessKeyTypeId":0,"Value":"String","CustomerId":"00000000-0000-0000-0000-000000000000","Description":"String"}],"InvoiceAddress":{"CorporateIdentityNumber":"String","InvoiceAddress1":"String","InvoiceAddress2":"String","InvoiceCity":"String","InvoicePostalCode":"String","InvoiceCountryCode":"String"}}
HTTP/1.1 200 OK
Content-Type: text/jsonl
Content-Length: length

{"FacebookUserName":"String","UserId":"00000000-0000-0000-0000-000000000000","CompanyId":"00000000-0000-0000-0000-000000000000","CreatedDate":"0001-01-01T00:00:00","DeletedAccessKeys":[{"AccessKeyTypeId":0,"Value":"String","Description":"String"}],"CreatedOrUpdatedAccessKeys":[{"AccessKeyTypeId":0,"Value":"String","Description":"String"}],"Firstname":"String","Lastname":"String","Email":"String","Phone":"String","ImageUrl":"String","CustomFields":[{"Id":0,"Name":"String","Description":"String","Width":0,"DataType":"String","DefaultValue":"String","IsMandatory":false,"MandatoryErrorMessage":"String","MaxLength":0,"MultipleLineText":false,"RegEx":"String","RegExErrorMessage":"String","Values":[{"Value":"String"}]}],"CustomFieldValues":[{"Id":0,"Column":"String","Name":"String","Description":"String","Value":"String","DataType":"String"}],"Comments":[{"Id":0,"Comments":"String"}],"AccessKeys":[{"AccessKeyTypeId":0,"Value":"String","Description":"String"}],"ResponseStatus":{},"SubscribedToNewsletter":false,"InvoiceAddress":{"CorporateIdentityNumber":"String","InvoiceAddress1":"String","InvoiceAddress2":"String","InvoiceCity":"String","InvoicePostalCode":"String","InvoiceCountryCode":"String"}}