BokaMera.API.Host

<back to all web services

SupportCaseQuery

Requires Authentication
Requires any of the roles:bookingsupplier-administrator-write, superadmin, bookingsupplier-administrator-read
The following routes are available for this service:
GET/support/casesGet company support casesGet company support cases.
import 'package:servicestack/servicestack.dart';

// @DataContract
abstract class QueryBase
{
    /**
    * Skip over a given number of elements in a sequence and then return the remainder. Use this when you need paging.<br/><br/><strong>Example:</strong><br/><code>?skip=10&orderBy=Id</code>
    */
    // @DataMember(Order=1)
    int? Skip;

    /**
    * Return a given number of elements in a sequence and then skip over the remainder. Use this when you need paging.<br/><br/><strong>Example:</strong><br/><code>?take=20</code>
    */
    // @DataMember(Order=2)
    int? Take;

    /**
    * Comma separated list of fields to order by. Prefix the field name with a minus if you wan't to invert the sort for that field.<br/><br/><strong>Example:</strong><br/><code>?orderBy=Id,-Age,FirstName</code>
    */
    // @DataMember(Order=3)
    String? OrderBy;

    /**
    * Comma separated list of fields to order by in descending order. Prefix the field name with a minus if you wan't to invert the sort for that field.<br/><br/><strong>Example:</strong><br/><code>?orderByDesc=Id,-Age,FirstName</code>
    */
    // @DataMember(Order=4)
    String? OrderByDesc;

    /**
    * Include any of the aggregates <code>AVG, COUNT, FIRST, LAST, MAX, MIN, SUM</code> in your result set. The results will be returned in the meta field.<br/><br/><strong>Example:</strong><br/><code>?include=COUNT(*) as Total</code><br/><br/>or multiple fields with<br/><code>?include=Count(*) Total, Min(Age), AVG(Age) AverageAge</code><br/></br>or unique with<br/><code>?include=COUNT(DISTINCT LivingStatus) as UniqueStatus</code>
    */
    // @DataMember(Order=5)
    String? Include;

    // @DataMember(Order=6)
    String? Fields;

    // @DataMember(Order=7)
    Map<String,String?>? Meta;

    QueryBase({this.Skip,this.Take,this.OrderBy,this.OrderByDesc,this.Include,this.Fields,this.Meta});
    QueryBase.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Skip = json['Skip'];
        Take = json['Take'];
        OrderBy = json['OrderBy'];
        OrderByDesc = json['OrderByDesc'];
        Include = json['Include'];
        Fields = json['Fields'];
        Meta = JsonConverters.toStringMap(json['Meta']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Skip': Skip,
        'Take': Take,
        'OrderBy': OrderBy,
        'OrderByDesc': OrderByDesc,
        'Include': Include,
        'Fields': Fields,
        'Meta': Meta
    };

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

abstract class QueryDb2<From,Into> extends QueryBase
{
    QueryDb2();
    QueryDb2.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "QueryDb<$From,$Into>";
    TypeContext? context = _ctx;
}

class SupportCaseStatusResponse implements IConvertible
{
    /**
    * The status id
    */
    // @ApiMember(Description="The status id")
    int? Id;

    /**
    * The status name
    */
    // @ApiMember(Description="The status name")
    String? Name;

    /**
    * The status description
    */
    // @ApiMember(Description="The status description")
    String? Description;

    /**
    * The status icon
    */
    // @ApiMember(Description="The status icon")
    String? Icon;

    /**
    * The status color
    */
    // @ApiMember(Description="The status color")
    String? Color;

    SupportCaseStatusResponse({this.Id,this.Name,this.Description,this.Icon,this.Color});
    SupportCaseStatusResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Description': Description,
        'Icon': Icon,
        'Color': Color
    };

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

class SupportCaseTypeResponse implements IConvertible
{
    /**
    * The type id
    */
    // @ApiMember(Description="The type id")
    int? Id;

    /**
    * The type name
    */
    // @ApiMember(Description="The type name")
    String? Name;

    /**
    * The type description
    */
    // @ApiMember(Description="The type description")
    String? Description;

    SupportCaseTypeResponse({this.Id,this.Name,this.Description});
    SupportCaseTypeResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SupportCaseAreaResponse implements IConvertible
{
    /**
    * The area id
    */
    // @ApiMember(Description="The area id")
    int? Id;

    /**
    * The area name
    */
    // @ApiMember(Description="The area name")
    String? Name;

    /**
    * The area description
    */
    // @ApiMember(Description="The area description")
    String? Description;

    SupportCaseAreaResponse({this.Id,this.Name,this.Description});
    SupportCaseAreaResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SupportCaseCommentsResponse implements IConvertible
{
    /**
    * The case id
    */
    // @ApiMember(Description="The case id")
    int? SupportCaseId;

    /**
    * The comments id
    */
    // @ApiMember(Description="The comments id")
    int? Id;

    /**
    * The case comment
    */
    // @ApiMember(Description="The case comment")
    String? Comment;

    /**
    * The case comment created by
    */
    // @ApiMember(Description="The case comment created by")
    String? CreatedBy;

    /**
    * The case comment created date
    */
    // @ApiMember(Description="The case comment created date")
    DateTime? Created;

    SupportCaseCommentsResponse({this.SupportCaseId,this.Id,this.Comment,this.CreatedBy,this.Created});
    SupportCaseCommentsResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        SupportCaseId = json['SupportCaseId'];
        Id = json['Id'];
        Comment = json['Comment'];
        CreatedBy = json['CreatedBy'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'SupportCaseId': SupportCaseId,
        'Id': Id,
        'Comment': Comment,
        'CreatedBy': CreatedBy,
        'Created': JsonConverters.toJson(Created,'DateTime',context!)
    };

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

class SupportCaseAttachmentResponse implements IConvertible
{
    /**
    * The attachment id
    */
    // @ApiMember(Description="The attachment id")
    int? Id;

    /**
    * The attachment file url
    */
    // @ApiMember(Description="The attachment file url")
    String? FileUrl;

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

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

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

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

class SupportCaseQueryResponse implements IConvertible
{
    /**
    * The support case id
    */
    // @ApiMember(Description="The support case id")
    int? Id;

    /**
    * The company user id
    */
    // @ApiMember(Description="The company user id")
    String? CompanyUserId;

    /**
    * The case title.
    */
    // @ApiMember(Description="The case title.")
    String? Title;

    /**
    * The case description.
    */
    // @ApiMember(Description="The case description.")
    String? Description;

    /**
    * The case status id.
    */
    // @ApiMember(Description="The case status id.")
    int? CaseStatusId;

    /**
    * If the case type id.
    */
    // @ApiMember(Description="If the case type id.")
    int? CaseTypeId;

    /**
    * If the case area id.
    */
    // @ApiMember(Description="If the case area id.")
    int? CaseAreaId;

    /**
    * The case created by.
    */
    // @ApiMember(Description="The case created by.")
    String? CreatedBy;

    /**
    * The case updated by.
    */
    // @ApiMember(Description="The case updated by.")
    String? UpdatedBy;

    /**
    * The case solved by.
    */
    // @ApiMember(Description="The case solved by.")
    String? SolvedBy;

    /**
    * If case updated date.
    */
    // @ApiMember(Description="If case updated date.")
    DateTime? Updated;

    /**
    * If case created date.
    */
    // @ApiMember(Description="If case created date.")
    DateTime? Created;

    /**
    * Who owns the support case.
    */
    // @ApiMember(Description="Who owns the support case.")
    String? CaseOwner;

    /**
    * The case status information.
    */
    // @ApiMember(Description="The case status information.")
    SupportCaseStatusResponse? CaseStatus;

    /**
    * The case type information.
    */
    // @ApiMember(Description="The case type information.")
    SupportCaseTypeResponse? CaseType;

    /**
    * The case area information.
    */
    // @ApiMember(Description="The case area information.")
    SupportCaseAreaResponse? CaseArea;

    /**
    * The case comments.
    */
    // @ApiMember(Description="The case comments.")
    List<SupportCaseCommentsResponse>? Comments;

    /**
    * The case attachments.
    */
    // @ApiMember(Description="The case attachments.")
    List<SupportCaseAttachmentResponse>? Attachments;

    /**
    * The case status options to select from.
    */
    // @ApiMember(Description="The case status options to select from.")
    List<SupportCaseStatusResponse>? CaseStatusOptions;

    /**
    * The case type  options to select from.
    */
    // @ApiMember(Description="The case type  options to select from.")
    List<SupportCaseTypeResponse>? CaseTypeOptions;

    /**
    * The case area  options to select from.
    */
    // @ApiMember(Description="The case area  options to select from.")
    List<SupportCaseAreaResponse>? CaseAreaOptions;

    SupportCaseQueryResponse({this.Id,this.CompanyUserId,this.Title,this.Description,this.CaseStatusId,this.CaseTypeId,this.CaseAreaId,this.CreatedBy,this.UpdatedBy,this.SolvedBy,this.Updated,this.Created,this.CaseOwner,this.CaseStatus,this.CaseType,this.CaseArea,this.Comments,this.Attachments,this.CaseStatusOptions,this.CaseTypeOptions,this.CaseAreaOptions});
    SupportCaseQueryResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        CompanyUserId = json['CompanyUserId'];
        Title = json['Title'];
        Description = json['Description'];
        CaseStatusId = json['CaseStatusId'];
        CaseTypeId = json['CaseTypeId'];
        CaseAreaId = json['CaseAreaId'];
        CreatedBy = json['CreatedBy'];
        UpdatedBy = json['UpdatedBy'];
        SolvedBy = json['SolvedBy'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        CaseOwner = json['CaseOwner'];
        CaseStatus = JsonConverters.fromJson(json['CaseStatus'],'SupportCaseStatusResponse',context!);
        CaseType = JsonConverters.fromJson(json['CaseType'],'SupportCaseTypeResponse',context!);
        CaseArea = JsonConverters.fromJson(json['CaseArea'],'SupportCaseAreaResponse',context!);
        Comments = JsonConverters.fromJson(json['Comments'],'List<SupportCaseCommentsResponse>',context!);
        Attachments = JsonConverters.fromJson(json['Attachments'],'List<SupportCaseAttachmentResponse>',context!);
        CaseStatusOptions = JsonConverters.fromJson(json['CaseStatusOptions'],'List<SupportCaseStatusResponse>',context!);
        CaseTypeOptions = JsonConverters.fromJson(json['CaseTypeOptions'],'List<SupportCaseTypeResponse>',context!);
        CaseAreaOptions = JsonConverters.fromJson(json['CaseAreaOptions'],'List<SupportCaseAreaResponse>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'CompanyUserId': CompanyUserId,
        'Title': Title,
        'Description': Description,
        'CaseStatusId': CaseStatusId,
        'CaseTypeId': CaseTypeId,
        'CaseAreaId': CaseAreaId,
        'CreatedBy': CreatedBy,
        'UpdatedBy': UpdatedBy,
        'SolvedBy': SolvedBy,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'CaseOwner': CaseOwner,
        'CaseStatus': JsonConverters.toJson(CaseStatus,'SupportCaseStatusResponse',context!),
        'CaseType': JsonConverters.toJson(CaseType,'SupportCaseTypeResponse',context!),
        'CaseArea': JsonConverters.toJson(CaseArea,'SupportCaseAreaResponse',context!),
        'Comments': JsonConverters.toJson(Comments,'List<SupportCaseCommentsResponse>',context!),
        'Attachments': JsonConverters.toJson(Attachments,'List<SupportCaseAttachmentResponse>',context!),
        'CaseStatusOptions': JsonConverters.toJson(CaseStatusOptions,'List<SupportCaseStatusResponse>',context!),
        'CaseTypeOptions': JsonConverters.toJson(CaseTypeOptions,'List<SupportCaseTypeResponse>',context!),
        'CaseAreaOptions': JsonConverters.toJson(CaseAreaOptions,'List<SupportCaseAreaResponse>',context!)
    };

    getTypeName() => "SupportCaseQueryResponse";
    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 CaseArea extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    DateTime? ModifiedDate;
    int? Id;

    CaseArea({this.Name,this.Description,this.ModifiedDate,this.Id});
    CaseArea.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class CaseType extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    DateTime? ModifiedDate;
    int? Id;

    CaseType({this.Name,this.Description,this.ModifiedDate,this.Id});
    CaseType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class CaseStatus extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Color;

    // @Required()
    String? Icon;

    DateTime? ModifiedDate;
    int? Id;

    CaseStatus({this.Name,this.Description,this.Color,this.Icon,this.ModifiedDate,this.Id});
    CaseStatus.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Color = json['Color'];
        Icon = json['Icon'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Color': Color,
        'Icon': Icon,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

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

    // @Required()
    int? SupportCaseId;

    int? Id;
    // @Required()
    String? Comment;

    // @Required()
    bool? Deleted;

    // @Required()
    String? CreatedBy;

    // @Required()
    DateTime? Created;

    DateTime? ModifiedDate;

    CaseComment({this.CompanyId,this.SupportCaseId,this.Id,this.Comment,this.Deleted,this.CreatedBy,this.Created,this.ModifiedDate});
    CaseComment.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        SupportCaseId = json['SupportCaseId'];
        Id = json['Id'];
        Comment = json['Comment'];
        Deleted = json['Deleted'];
        CreatedBy = json['CreatedBy'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'SupportCaseId': SupportCaseId,
        'Id': Id,
        'Comment': Comment,
        'Deleted': Deleted,
        'CreatedBy': CreatedBy,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

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

    int? Id;
    // @Required()
    String? FileUrl;

    DateTime? ModifiedDate;

    CaseAttachment({this.CompanyId,this.Id,this.FileUrl,this.ModifiedDate});
    CaseAttachment.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        FileUrl = json['FileUrl'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'FileUrl': FileUrl,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

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

    // @Required()
    int? CaseAttachmentId;

    // @Required()
    int? SupportCaseId;

    int? Id;
    DateTime? ModifiedDate;

    CaseAttachmentRelation({this.CompanyId,this.CaseAttachmentId,this.SupportCaseId,this.Id,this.ModifiedDate});
    CaseAttachmentRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        CaseAttachmentId = json['CaseAttachmentId'];
        SupportCaseId = json['SupportCaseId'];
        Id = json['Id'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'CaseAttachmentId': CaseAttachmentId,
        'SupportCaseId': SupportCaseId,
        'Id': Id,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

enum ScheduleType
{
    NotDefined,
    RecurringSchedule,
    DateSchedule,
}

abstract class ISchedule
{
    List<Resource>? Resources;
    ScheduleType? Type;
    bool? Active;
    bool? IsResourceSpecific;
}

abstract class ITimeException extends IInterval
{
    int? Id;
    String? ReasonText;
    bool? IsBlock;
    String? ReasonTextPublic;
    bool? IsRecurring;
    List<int>? ResourceIds;
}

enum BookingStatusEnum
{
    Booked,
    Unbooked,
    Reserved,
    Canceled,
    AwaitingPayment,
    AwaitingPaymentNoTimeLimit,
    Payed,
    AwaitingPaymentRequestFromAdmin,
    AwaitingPaymentFromProvider,
    Invoiced,
}

class BookedCustomer implements IConvertible
{
    String? Id;
    String? Firstname;
    String? Lastname;
    String? Email;
    String? Phone;
    String? FacebookUserName;
    String? ImageUrl;
    String? CorporateIdentityNumber;
    String? InvoiceAddress1;
    String? InvoiceAddress2;
    String? InvoiceCity;
    String? InvoicePostalCode;
    String? InvoiceCountryCode;

    BookedCustomer({this.Id,this.Firstname,this.Lastname,this.Email,this.Phone,this.FacebookUserName,this.ImageUrl,this.CorporateIdentityNumber,this.InvoiceAddress1,this.InvoiceAddress2,this.InvoiceCity,this.InvoicePostalCode,this.InvoiceCountryCode});
    BookedCustomer.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'];
        FacebookUserName = json['FacebookUserName'];
        ImageUrl = json['ImageUrl'];
        CorporateIdentityNumber = json['CorporateIdentityNumber'];
        InvoiceAddress1 = json['InvoiceAddress1'];
        InvoiceAddress2 = json['InvoiceAddress2'];
        InvoiceCity = json['InvoiceCity'];
        InvoicePostalCode = json['InvoicePostalCode'];
        InvoiceCountryCode = json['InvoiceCountryCode'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Firstname': Firstname,
        'Lastname': Lastname,
        'Email': Email,
        'Phone': Phone,
        'FacebookUserName': FacebookUserName,
        'ImageUrl': ImageUrl,
        'CorporateIdentityNumber': CorporateIdentityNumber,
        'InvoiceAddress1': InvoiceAddress1,
        'InvoiceAddress2': InvoiceAddress2,
        'InvoiceCity': InvoiceCity,
        'InvoicePostalCode': InvoicePostalCode,
        'InvoiceCountryCode': InvoiceCountryCode
    };

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

abstract class IBookedTime extends IInterval
{
    int? Id;
    int? ServiceId;
    int? BookedSpots;
    int? TotalSpots;
    int? PauseAfterInMinutes;
    BookingStatusEnum? Status;
    int? StatusId;
    BookedCustomer? Customer;
}

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

    int? Id;
    // @Required()
    String? Value;

    // @Required()
    bool? Active;

    int? SortOrder;
    DateTime? ModifiedDate;

    CustomFieldValue({this.CompanyId,this.Id,this.Value,this.Active,this.SortOrder,this.ModifiedDate});
    CustomFieldValue.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Value = json['Value'];
        Active = json['Active'];
        SortOrder = json['SortOrder'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'Value': Value,
        'Active': Active,
        'SortOrder': SortOrder,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

class CustomField extends BaseModel implements IConvertible
{
    // @Required()
    String? Table;

    // @Required()
    String? Column;

    // @Required()
    String? DataType;

    // @Required()
    String? Description;

    // @Required()
    bool? Active;

    DateTime? ModifiedDate;
    int? Id;

    CustomField({this.Table,this.Column,this.DataType,this.Description,this.Active,this.ModifiedDate,this.Id});
    CustomField.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Table = json['Table'];
        Column = json['Column'];
        DataType = json['DataType'];
        Description = json['Description'];
        Active = json['Active'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Table': Table,
        'Column': Column,
        'DataType': DataType,
        'Description': Description,
        'Active': Active,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class RegEx extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? RegExCode;

    String? ErrorMessage;
    DateTime? ModifiedDate;
    int? Id;

    RegEx({this.Name,this.Description,this.RegExCode,this.ErrorMessage,this.ModifiedDate,this.Id});
    RegEx.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        RegExCode = json['RegExCode'];
        ErrorMessage = json['ErrorMessage'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'RegExCode': RegExCode,
        'ErrorMessage': ErrorMessage,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class ResourceType extends BaseModel implements IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    bool? SelectableByUser;

    // @Ignore()
    List<Resource>? Resources;

    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? Name;

    String? Description;
    // @Required()
    bool? Active;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    DateTime? ModifiedDate;

    ResourceType({this.SelectableByUser,this.Resources,this.CompanyId,this.Id,this.Name,this.Description,this.Active,this.UpdatedDate,this.CreatedDate,this.ModifiedDate});
    ResourceType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        SelectableByUser = json['SelectableByUser'];
        Resources = JsonConverters.fromJson(json['Resources'],'List<Resource>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Name = json['Name'];
        Description = json['Description'];
        Active = json['Active'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'SelectableByUser': SelectableByUser,
        'Resources': JsonConverters.toJson(Resources,'List<Resource>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'Name': Name,
        'Description': Description,
        'Active': Active,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

class RebateCodeType extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    String? Description;
    DateTime? ModifiedDate;
    int? Id;

    RebateCodeType({this.Name,this.Description,this.ModifiedDate,this.Id});
    RebateCodeType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class AppliedRebateCodes implements IConvertible
{
    int? RebateCodeId;
    String? RebateCodeSign;
    int? RebateCodeValue;
    double? RebateAmount;
    RebateCodeType? RebateCodeType;

    AppliedRebateCodes({this.RebateCodeId,this.RebateCodeSign,this.RebateCodeValue,this.RebateAmount,this.RebateCodeType});
    AppliedRebateCodes.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        RebateCodeId = json['RebateCodeId'];
        RebateCodeSign = json['RebateCodeSign'];
        RebateCodeValue = json['RebateCodeValue'];
        RebateAmount = JsonConverters.toDouble(json['RebateAmount']);
        RebateCodeType = JsonConverters.fromJson(json['RebateCodeType'],'RebateCodeType',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'RebateCodeId': RebateCodeId,
        'RebateCodeSign': RebateCodeSign,
        'RebateCodeValue': RebateCodeValue,
        'RebateAmount': RebateAmount,
        'RebateCodeType': JsonConverters.toJson(RebateCodeType,'RebateCodeType',context!)
    };

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

class TotalPriceInformation implements IConvertible
{
    double? TotalPrice;
    double? TotalVATAmount;
    double? TotalRebate;
    double? TotalPriceBeforeRebate;
    List<AppliedRebateCodes>? AppliedCodes;
    String? PriceSign;
    String? CurrencyId;
    double? VAT;

    TotalPriceInformation({this.TotalPrice,this.TotalVATAmount,this.TotalRebate,this.TotalPriceBeforeRebate,this.AppliedCodes,this.PriceSign,this.CurrencyId,this.VAT});
    TotalPriceInformation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        TotalPrice = JsonConverters.toDouble(json['TotalPrice']);
        TotalVATAmount = JsonConverters.toDouble(json['TotalVATAmount']);
        TotalRebate = JsonConverters.toDouble(json['TotalRebate']);
        TotalPriceBeforeRebate = JsonConverters.toDouble(json['TotalPriceBeforeRebate']);
        AppliedCodes = JsonConverters.fromJson(json['AppliedCodes'],'List<AppliedRebateCodes>',context!);
        PriceSign = json['PriceSign'];
        CurrencyId = json['CurrencyId'];
        VAT = JsonConverters.toDouble(json['VAT']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'TotalPrice': TotalPrice,
        'TotalVATAmount': TotalVATAmount,
        'TotalRebate': TotalRebate,
        'TotalPriceBeforeRebate': TotalPriceBeforeRebate,
        'AppliedCodes': JsonConverters.toJson(AppliedCodes,'List<AppliedRebateCodes>',context!),
        'PriceSign': PriceSign,
        'CurrencyId': CurrencyId,
        'VAT': VAT
    };

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

enum Currency
{
    SEK,
    EUR,
}

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

    // @Required()
    String? Id;

    // @Required()
    int? PriceId;

    String? ReferenceType;
    String? ExternalReference;
    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    DateTime? ModifiedDate;

    PriceMapping({this.CompanyId,this.Id,this.PriceId,this.ReferenceType,this.ExternalReference,this.UpdatedDate,this.CreatedDate,this.ModifiedDate});
    PriceMapping.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        PriceId = json['PriceId'];
        ReferenceType = json['ReferenceType'];
        ExternalReference = json['ExternalReference'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'PriceId': PriceId,
        'ReferenceType': ReferenceType,
        'ExternalReference': ExternalReference,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

enum BokaMeraDayOfWeek
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday,
}

class ServicePriceDayOfWeekRelation extends BaseModel implements IConvertible
{
    // @Ignore()
    BokaMeraDayOfWeek? DayOfWeek;

    // @Required()
    String? CompanyId;

    // @Required()
    int? ServicePriceId;

    // @Required()
    int? DayOfWeekId;

    DateTime? ModifiedDate;
    int? Id;

    ServicePriceDayOfWeekRelation({this.DayOfWeek,this.CompanyId,this.ServicePriceId,this.DayOfWeekId,this.ModifiedDate,this.Id});
    ServicePriceDayOfWeekRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DayOfWeek = JsonConverters.fromJson(json['DayOfWeek'],'BokaMeraDayOfWeek',context!);
        CompanyId = json['CompanyId'];
        ServicePriceId = json['ServicePriceId'];
        DayOfWeekId = json['DayOfWeekId'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DayOfWeek': JsonConverters.toJson(DayOfWeek,'BokaMeraDayOfWeek',context!),
        'CompanyId': CompanyId,
        'ServicePriceId': ServicePriceId,
        'DayOfWeekId': DayOfWeekId,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

abstract class IDbConnectionFactory
{
}

class ServerData implements IConvertible
{
    String? HTTP_HOST;
    String? HTTP_CONNECTION;
    String? HTTP_CACHE_CONTROL;
    String? HTTP_ACCEPT;
    String? HTTP_USER_AGENT;
    String? HTTP_ACCEPT_ENCODING;
    String? HTTP_ACCEPT_LANGUAGE;
    String? PATH;
    String? SERVER_SOFTWARE;
    String? SERVER_NAME;
    String? SERVER_ADDR;
    String? SERVER_PORT;
    String? REMOTE_ADDR;
    String? REMOTE_PORT;
    String? GATEWAY_INTERFACE;
    String? SERVER_PROTOCOL;
    String? REQUEST_METHOD;
    String? QUERY_STRING;
    String? REQUEST_TIME;

    ServerData({this.HTTP_HOST,this.HTTP_CONNECTION,this.HTTP_CACHE_CONTROL,this.HTTP_ACCEPT,this.HTTP_USER_AGENT,this.HTTP_ACCEPT_ENCODING,this.HTTP_ACCEPT_LANGUAGE,this.PATH,this.SERVER_SOFTWARE,this.SERVER_NAME,this.SERVER_ADDR,this.SERVER_PORT,this.REMOTE_ADDR,this.REMOTE_PORT,this.GATEWAY_INTERFACE,this.SERVER_PROTOCOL,this.REQUEST_METHOD,this.QUERY_STRING,this.REQUEST_TIME});
    ServerData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        HTTP_HOST = json['HTTP_HOST'];
        HTTP_CONNECTION = json['HTTP_CONNECTION'];
        HTTP_CACHE_CONTROL = json['HTTP_CACHE_CONTROL'];
        HTTP_ACCEPT = json['HTTP_ACCEPT'];
        HTTP_USER_AGENT = json['HTTP_USER_AGENT'];
        HTTP_ACCEPT_ENCODING = json['HTTP_ACCEPT_ENCODING'];
        HTTP_ACCEPT_LANGUAGE = json['HTTP_ACCEPT_LANGUAGE'];
        PATH = json['PATH'];
        SERVER_SOFTWARE = json['SERVER_SOFTWARE'];
        SERVER_NAME = json['SERVER_NAME'];
        SERVER_ADDR = json['SERVER_ADDR'];
        SERVER_PORT = json['SERVER_PORT'];
        REMOTE_ADDR = json['REMOTE_ADDR'];
        REMOTE_PORT = json['REMOTE_PORT'];
        GATEWAY_INTERFACE = json['GATEWAY_INTERFACE'];
        SERVER_PROTOCOL = json['SERVER_PROTOCOL'];
        REQUEST_METHOD = json['REQUEST_METHOD'];
        QUERY_STRING = json['QUERY_STRING'];
        REQUEST_TIME = json['REQUEST_TIME'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'HTTP_HOST': HTTP_HOST,
        'HTTP_CONNECTION': HTTP_CONNECTION,
        'HTTP_CACHE_CONTROL': HTTP_CACHE_CONTROL,
        'HTTP_ACCEPT': HTTP_ACCEPT,
        'HTTP_USER_AGENT': HTTP_USER_AGENT,
        'HTTP_ACCEPT_ENCODING': HTTP_ACCEPT_ENCODING,
        'HTTP_ACCEPT_LANGUAGE': HTTP_ACCEPT_LANGUAGE,
        'PATH': PATH,
        'SERVER_SOFTWARE': SERVER_SOFTWARE,
        'SERVER_NAME': SERVER_NAME,
        'SERVER_ADDR': SERVER_ADDR,
        'SERVER_PORT': SERVER_PORT,
        'REMOTE_ADDR': REMOTE_ADDR,
        'REMOTE_PORT': REMOTE_PORT,
        'GATEWAY_INTERFACE': GATEWAY_INTERFACE,
        'SERVER_PROTOCOL': SERVER_PROTOCOL,
        'REQUEST_METHOD': REQUEST_METHOD,
        'QUERY_STRING': QUERY_STRING,
        'REQUEST_TIME': REQUEST_TIME
    };

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

class Credentials implements IConvertible
{
    String? hash;
    String? id;
    String? version;
    String? client;
    ServerData? serverdata;
    String? time;
    String? test;
    String? language;

    Credentials({this.hash,this.id,this.version,this.client,this.serverdata,this.time,this.test,this.language});
    Credentials.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        hash = json['hash'];
        id = json['id'];
        version = json['version'];
        client = json['client'];
        serverdata = JsonConverters.fromJson(json['serverdata'],'ServerData',context!);
        time = json['time'];
        test = json['test'];
        language = json['language'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'hash': hash,
        'id': id,
        'version': version,
        'client': client,
        'serverdata': JsonConverters.toJson(serverdata,'ServerData',context!),
        'time': time,
        'test': test,
        'language': language
    };

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

class CheckoutData implements IConvertible
{
    Uri? terms;
    Uri? privacyPolicy;
    String? redirectOnSuccess;

    CheckoutData({this.terms,this.privacyPolicy,this.redirectOnSuccess});
    CheckoutData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        terms = JsonConverters.fromJson(json['terms'],'Uri',context!);
        privacyPolicy = JsonConverters.fromJson(json['privacyPolicy'],'Uri',context!);
        redirectOnSuccess = json['redirectOnSuccess'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'terms': JsonConverters.toJson(terms,'Uri',context!),
        'privacyPolicy': JsonConverters.toJson(privacyPolicy,'Uri',context!),
        'redirectOnSuccess': redirectOnSuccess
    };

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

class CheckoutPaymentData implements IConvertible
{
    String? currency;
    String? language;
    String? country;
    String? autoactivate;
    String? orderid;
    String? returnmethod;
    Uri? accepturl;
    Uri? cancelurl;
    Uri? callbackurl;

    CheckoutPaymentData({this.currency,this.language,this.country,this.autoactivate,this.orderid,this.returnmethod,this.accepturl,this.cancelurl,this.callbackurl});
    CheckoutPaymentData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        currency = json['currency'];
        language = json['language'];
        country = json['country'];
        autoactivate = json['autoactivate'];
        orderid = json['orderid'];
        returnmethod = json['returnmethod'];
        accepturl = JsonConverters.fromJson(json['accepturl'],'Uri',context!);
        cancelurl = JsonConverters.fromJson(json['cancelurl'],'Uri',context!);
        callbackurl = JsonConverters.fromJson(json['callbackurl'],'Uri',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'currency': currency,
        'language': language,
        'country': country,
        'autoactivate': autoactivate,
        'orderid': orderid,
        'returnmethod': returnmethod,
        'accepturl': JsonConverters.toJson(accepturl,'Uri',context!),
        'cancelurl': JsonConverters.toJson(cancelurl,'Uri',context!),
        'callbackurl': JsonConverters.toJson(callbackurl,'Uri',context!)
    };

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

class PaymentInfo implements IConvertible
{
    String? paymentdate;
    String? paymentterms;
    String? yourreference;
    String? ourreference;
    String? projectname;
    String? deliverymethod;
    String? deliveryterms;

    PaymentInfo({this.paymentdate,this.paymentterms,this.yourreference,this.ourreference,this.projectname,this.deliverymethod,this.deliveryterms});
    PaymentInfo.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        paymentdate = json['paymentdate'];
        paymentterms = json['paymentterms'];
        yourreference = json['yourreference'];
        ourreference = json['ourreference'];
        projectname = json['projectname'];
        deliverymethod = json['deliverymethod'];
        deliveryterms = json['deliveryterms'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'paymentdate': paymentdate,
        'paymentterms': paymentterms,
        'yourreference': yourreference,
        'ourreference': ourreference,
        'projectname': projectname,
        'deliverymethod': deliverymethod,
        'deliveryterms': deliveryterms
    };

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

class CartHandling implements IConvertible
{
    String? withouttax;
    String? taxrate;

    CartHandling({this.withouttax,this.taxrate});
    CartHandling.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class CartTotal implements IConvertible
{
    String? rounding;
    String? withouttax;
    String? tax;
    String? withtax;

    CartTotal({this.rounding,this.withouttax,this.tax,this.withtax});
    CartTotal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        rounding = json['rounding'];
        withouttax = json['withouttax'];
        tax = json['tax'];
        withtax = json['withtax'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'rounding': rounding,
        'withouttax': withouttax,
        'tax': tax,
        'withtax': withtax
    };

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

class Shipping implements IConvertible
{
    String? firstname;
    String? lastname;
    String? company;
    String? street;
    String? street2;
    String? zip;
    String? city;
    String? country;
    String? phone;
    String? withouttax;
    String? taxrate;

    Shipping({this.firstname,this.lastname,this.company,this.street,this.street2,this.zip,this.city,this.country,this.phone,this.withouttax,this.taxrate});
    Shipping.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        firstname = json['firstname'];
        lastname = json['lastname'];
        company = json['company'];
        street = json['street'];
        street2 = json['street2'];
        zip = json['zip'];
        city = json['city'];
        country = json['country'];
        phone = json['phone'];
        withouttax = json['withouttax'];
        taxrate = json['taxrate'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'firstname': firstname,
        'lastname': lastname,
        'company': company,
        'street': street,
        'street2': street2,
        'zip': zip,
        'city': city,
        'country': country,
        'phone': phone,
        'withouttax': withouttax,
        'taxrate': taxrate
    };

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

class Cart implements IConvertible
{
    CartHandling? Handling;
    CartTotal? Total;
    Shipping? Shipping;

    Cart({this.Handling,this.Total,this.Shipping});
    Cart.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Handling = JsonConverters.fromJson(json['Handling'],'CartHandling',context!);
        Total = JsonConverters.fromJson(json['Total'],'CartTotal',context!);
        Shipping = JsonConverters.fromJson(json['Shipping'],'Shipping',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Handling': JsonConverters.toJson(Handling,'CartHandling',context!),
        'Total': JsonConverters.toJson(Total,'CartTotal',context!),
        'Shipping': JsonConverters.toJson(Shipping,'Shipping',context!)
    };

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

class CustomerBilling implements IConvertible
{
    String? firstname;
    String? lastname;
    String? company;
    String? street;
    String? street2;
    String? zip;
    String? city;
    String? country;
    String? phone;
    String? email;

    CustomerBilling({this.firstname,this.lastname,this.company,this.street,this.street2,this.zip,this.city,this.country,this.phone,this.email});
    CustomerBilling.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        firstname = json['firstname'];
        lastname = json['lastname'];
        company = json['company'];
        street = json['street'];
        street2 = json['street2'];
        zip = json['zip'];
        city = json['city'];
        country = json['country'];
        phone = json['phone'];
        email = json['email'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'firstname': firstname,
        'lastname': lastname,
        'company': company,
        'street': street,
        'street2': street2,
        'zip': zip,
        'city': city,
        'country': country,
        'phone': phone,
        'email': email
    };

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

class QvicklyCustomer implements IConvertible
{
    String? nr;
    String? pno;
    CustomerBilling? Billing;

    QvicklyCustomer({this.nr,this.pno,this.Billing});
    QvicklyCustomer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        nr = json['nr'];
        pno = json['pno'];
        Billing = JsonConverters.fromJson(json['Billing'],'CustomerBilling',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'nr': nr,
        'pno': pno,
        'Billing': JsonConverters.toJson(Billing,'CustomerBilling',context!)
    };

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

class InitCheckoutData implements IConvertible
{
    CheckoutData? CheckoutData;
    CheckoutPaymentData? PaymentData;
    PaymentInfo? PaymentInfo;
    List<QvicklyArticle>? Articles;
    Cart? Cart;
    QvicklyCustomer? QvicklyCustomer;

    InitCheckoutData({this.CheckoutData,this.PaymentData,this.PaymentInfo,this.Articles,this.Cart,this.QvicklyCustomer});
    InitCheckoutData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CheckoutData = JsonConverters.fromJson(json['CheckoutData'],'CheckoutData',context!);
        PaymentData = JsonConverters.fromJson(json['PaymentData'],'CheckoutPaymentData',context!);
        PaymentInfo = JsonConverters.fromJson(json['PaymentInfo'],'PaymentInfo',context!);
        Articles = JsonConverters.fromJson(json['Articles'],'List<QvicklyArticle>',context!);
        Cart = JsonConverters.fromJson(json['Cart'],'Cart',context!);
        QvicklyCustomer = JsonConverters.fromJson(json['QvicklyCustomer'],'QvicklyCustomer',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CheckoutData': JsonConverters.toJson(CheckoutData,'CheckoutData',context!),
        'PaymentData': JsonConverters.toJson(PaymentData,'CheckoutPaymentData',context!),
        'PaymentInfo': JsonConverters.toJson(PaymentInfo,'PaymentInfo',context!),
        'Articles': JsonConverters.toJson(Articles,'List<QvicklyArticle>',context!),
        'Cart': JsonConverters.toJson(Cart,'Cart',context!),
        'QvicklyCustomer': JsonConverters.toJson(QvicklyCustomer,'QvicklyCustomer',context!)
    };

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

class InitCheckoutRequestBody implements IConvertible
{
    Credentials? credentials;
    InitCheckoutData? data;
    String? function;

    InitCheckoutRequestBody({this.credentials,this.data,this.function});
    InitCheckoutRequestBody.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        credentials = JsonConverters.fromJson(json['credentials'],'Credentials',context!);
        data = JsonConverters.fromJson(json['data'],'InitCheckoutData',context!);
        function = json['function'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'credentials': JsonConverters.toJson(credentials,'Credentials',context!),
        'data': JsonConverters.toJson(data,'InitCheckoutData',context!),
        'function': function
    };

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

class QvicklyCheckoutResponse implements IConvertible
{
    int? Number;
    String? Status;
    String? OrderId;
    String? Url;

    QvicklyCheckoutResponse({this.Number,this.Status,this.OrderId,this.Url});
    QvicklyCheckoutResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Number = json['Number'];
        Status = json['Status'];
        OrderId = json['OrderId'];
        Url = json['Url'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Number': Number,
        'Status': Status,
        'OrderId': OrderId,
        'Url': Url
    };

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

class QvikclyPaymentData implements IConvertible
{
    String? method;
    String? paymentplanid;
    String? currency;
    String? country;
    String? language;
    String? autoactivate;
    String? orderid;
    String? status;
    String? paymentid_related;
    String? url;

    QvikclyPaymentData({this.method,this.paymentplanid,this.currency,this.country,this.language,this.autoactivate,this.orderid,this.status,this.paymentid_related,this.url});
    QvikclyPaymentData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        method = json['method'];
        paymentplanid = json['paymentplanid'];
        currency = json['currency'];
        country = json['country'];
        language = json['language'];
        autoactivate = json['autoactivate'];
        orderid = json['orderid'];
        status = json['status'];
        paymentid_related = json['paymentid_related'];
        url = json['url'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'method': method,
        'paymentplanid': paymentplanid,
        'currency': currency,
        'country': country,
        'language': language,
        'autoactivate': autoactivate,
        'orderid': orderid,
        'status': status,
        'paymentid_related': paymentid_related,
        'url': url
    };

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

class Card implements IConvertible
{
    String? promptname;
    String? recurring;
    String? recurringnr;
    String? accepturl;
    String? cancelurl;
    String? callbackurl;
    String? returnmethod;

    Card({this.promptname,this.recurring,this.recurringnr,this.accepturl,this.cancelurl,this.callbackurl,this.returnmethod});
    Card.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        promptname = json['promptname'];
        recurring = json['recurring'];
        recurringnr = json['recurringnr'];
        accepturl = json['accepturl'];
        cancelurl = json['cancelurl'];
        callbackurl = json['callbackurl'];
        returnmethod = json['returnmethod'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'promptname': promptname,
        'recurring': recurring,
        'recurringnr': recurringnr,
        'accepturl': accepturl,
        'cancelurl': cancelurl,
        'callbackurl': callbackurl,
        'returnmethod': returnmethod
    };

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

class Settlement implements IConvertible
{
    String? number;
    String? date;

    Settlement({this.number,this.date});
    Settlement.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class QvicklyPaymentResponse implements IConvertible
{
    QvikclyPaymentData? PaymentData;
    PaymentInfo? PaymentInfo;
    Card? Card;
    Settlement? Settlement;
    QvicklyCustomer? QvicklyCustomer;
    List<QvicklyArticle>? Articles;
    Cart? Cart;

    QvicklyPaymentResponse({this.PaymentData,this.PaymentInfo,this.Card,this.Settlement,this.QvicklyCustomer,this.Articles,this.Cart});
    QvicklyPaymentResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        PaymentData = JsonConverters.fromJson(json['PaymentData'],'QvikclyPaymentData',context!);
        PaymentInfo = JsonConverters.fromJson(json['PaymentInfo'],'PaymentInfo',context!);
        Card = JsonConverters.fromJson(json['Card'],'Card',context!);
        Settlement = JsonConverters.fromJson(json['Settlement'],'Settlement',context!);
        QvicklyCustomer = JsonConverters.fromJson(json['QvicklyCustomer'],'QvicklyCustomer',context!);
        Articles = JsonConverters.fromJson(json['Articles'],'List<QvicklyArticle>',context!);
        Cart = JsonConverters.fromJson(json['Cart'],'Cart',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'PaymentData': JsonConverters.toJson(PaymentData,'QvikclyPaymentData',context!),
        'PaymentInfo': JsonConverters.toJson(PaymentInfo,'PaymentInfo',context!),
        'Card': JsonConverters.toJson(Card,'Card',context!),
        'Settlement': JsonConverters.toJson(Settlement,'Settlement',context!),
        'QvicklyCustomer': JsonConverters.toJson(QvicklyCustomer,'QvicklyCustomer',context!),
        'Articles': JsonConverters.toJson(Articles,'List<QvicklyArticle>',context!),
        'Cart': JsonConverters.toJson(Cart,'Cart',context!)
    };

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

enum Payson2CheckoutStatus
{
    None,
    Created,
    FormsFilled,
    ReadyToPay,
    ProcessingPayment,
    ReadyToShip,
    Shipped,
    PaidToAccount,
    Canceled,
    Credited,
    Expired,
    Denied,
}

enum CustomerType
{
    Person,
    Business,
}

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 ExternalReference extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    // @Required()
    String? Id;

    // @Required()
    String? OwnerId;

    // @Required()
    String? ReferenceType;

    String? ExternalData;
    String? CreatedBy;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    DateTime? ModifiedDate;

    ExternalReference({this.CompanyId,this.Id,this.OwnerId,this.ReferenceType,this.ExternalData,this.CreatedBy,this.Updated,this.Created,this.ModifiedDate});
    ExternalReference.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        OwnerId = json['OwnerId'];
        ReferenceType = json['ReferenceType'];
        ExternalData = json['ExternalData'];
        CreatedBy = json['CreatedBy'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'OwnerId': OwnerId,
        'ReferenceType': ReferenceType,
        'ExternalData': ExternalData,
        'CreatedBy': CreatedBy,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

enum CompanyStatus
{
    Registered,
    AwaitingApproval,
    Approved,
    Inactive,
    ClosedDown,
    NotApproved,
}

class ScheduleView extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    DateTime? ModifiedDate;
    int? Id;

    ScheduleView({this.Name,this.ModifiedDate,this.Id});
    ScheduleView.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class WeekNumberSetting extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    WeekNumberSetting({this.Name,this.Description,this.ModifiedDate,this.Id});
    WeekNumberSetting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class BookingTemplate extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? UsedByApplication;

    DateTime? ModifiedDate;
    int? Id;

    BookingTemplate({this.Name,this.Description,this.UsedByApplication,this.ModifiedDate,this.Id});
    BookingTemplate.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        UsedByApplication = json['UsedByApplication'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'UsedByApplication': UsedByApplication,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class CalendarType extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    bool? Active;

    DateTime? ModifiedDate;
    int? Id;

    CalendarType({this.Name,this.Description,this.Active,this.ModifiedDate,this.Id});
    CalendarType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Active = json['Active'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Active': Active,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class FreeSpotTexts extends BaseModel implements IConvertible
{
    // @Required()
    String? TextSingular;

    // @Required()
    String? TextPlural;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    FreeSpotTexts({this.TextSingular,this.TextPlural,this.ModifiedDate,this.Id});
    FreeSpotTexts.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        TextSingular = json['TextSingular'];
        TextPlural = json['TextPlural'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'TextSingular': TextSingular,
        'TextPlural': TextPlural,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class BookingStatusOptions implements IConvertible
{
    int? Id;
    String? Name;
    String? Description;

    BookingStatusOptions({this.Id,this.Name,this.Description});
    BookingStatusOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class BookingSettings extends BaseModel implements IConvertible
{
    // @References(typeof(FreeSpotTexts))
    int? FreeSpotTextsId;

    // @Ignore()
    bool? SendEmailConfirmation;

    // @Ignore()
    List<ScheduleView>? ScheduleViewOptions;

    // @Ignore()
    List<WeekNumberSetting>? WeekNumberSettingOptions;

    // @Ignore()
    List<BookingTemplate>? BookingTemplateOptions;

    // @Ignore()
    List<CalendarType>? CalendarTypeOptions;

    // @Ignore()
    List<FreeSpotTexts>? FreeSpotTextOptions;

    // @Ignore()
    List<BookingStatusOptions>? BookingStatusOptions;

    FreeSpotTexts? FreeSpotTextsInfo;
    // @Ignore()
    String? FreeSpotsTextSingular;

    // @Ignore()
    String? FreeSpotsTextPlural;

    // @Required()
    int? BookingStatusId;

    // @Required()
    int? ScheduleViewId;

    // @Required()
    int? BookingTemplateId;

    // @Required()
    int? CalendarTypeId;

    // @Required()
    bool? AllowBookingOnUnbookedTimes;

    // @Required()
    bool? SendEmailReminder;

    // @Required()
    bool? SendSmsReminder;

    // @Required()
    bool? SendSmsConfirmation;

    // @Required()
    int? EmailReminderTime;

    // @Required()
    int? SmsReminderTime;

    // @Required()
    int? MaxActiveBookings;

    // @Required()
    bool? SendNotifications;

    String? SendNotificationsEmail;
    // @Required()
    bool? EnableMobileApp;

    Duration? ScheduleStartTime;
    Duration? ScheduleEndTime;
    String? ReceiptTemplate;
    // @Required()
    int? ScheduleTimeSlotMinutes;

    // @Required()
    bool? ShowFreeTimesLeft;

    // @Required()
    bool? EnableICalGroupBookings;

    String? AgreementTemplate;
    // @Required()
    bool? ScheduleShowTimeExeptions;

    // @Required()
    bool? EnableBookingsOnSameTime;

    // @Required()
    int? ShowWeekNumberSettingId;

    // @Required()
    bool? EnableShowBookedTimes;

    // @Required()
    bool? EnableSendFollowUpMessage;

    // @Required()
    int? FollowUpMessageTime;

    String? MessageText;
    // @Required()
    bool? ScheduleGroupResources;

    // @Required()
    int? BookSpotUserResponseMinutes;

    // @Required()
    bool? IsBookSpotDirectly;

    // @Required()
    int? BookSpotDirectlyTimeLeftMinutes;

    // @Required()
    bool? SendEmailNotificationQueue;

    // @Required()
    bool? SendSMSNotificationQueue;

    // @Required()
    bool? SchedulerDisableHorizontalScrolling;

    // @Required()
    bool? BookOnlyOnExistingCustomers;

    // @Required()
    bool? AutoGenerateUniquePinCode;

    // @Required()
    bool? WeightedPrices;

    DateTime? ModifiedDate;
    // @Required()
    bool? AutoCreateUserProfile;

    bool? ShowMultipleResourcesAsOne;
    bool? ShowMultiDayAsTime;
    // @Required()
    String? Id;

    BookingSettings({this.FreeSpotTextsId,this.SendEmailConfirmation,this.ScheduleViewOptions,this.WeekNumberSettingOptions,this.BookingTemplateOptions,this.CalendarTypeOptions,this.FreeSpotTextOptions,this.BookingStatusOptions,this.FreeSpotTextsInfo,this.FreeSpotsTextSingular,this.FreeSpotsTextPlural,this.BookingStatusId,this.ScheduleViewId,this.BookingTemplateId,this.CalendarTypeId,this.AllowBookingOnUnbookedTimes,this.SendEmailReminder,this.SendSmsReminder,this.SendSmsConfirmation,this.EmailReminderTime,this.SmsReminderTime,this.MaxActiveBookings,this.SendNotifications,this.SendNotificationsEmail,this.EnableMobileApp,this.ScheduleStartTime,this.ScheduleEndTime,this.ReceiptTemplate,this.ScheduleTimeSlotMinutes,this.ShowFreeTimesLeft,this.EnableICalGroupBookings,this.AgreementTemplate,this.ScheduleShowTimeExeptions,this.EnableBookingsOnSameTime,this.ShowWeekNumberSettingId,this.EnableShowBookedTimes,this.EnableSendFollowUpMessage,this.FollowUpMessageTime,this.MessageText,this.ScheduleGroupResources,this.BookSpotUserResponseMinutes,this.IsBookSpotDirectly,this.BookSpotDirectlyTimeLeftMinutes,this.SendEmailNotificationQueue,this.SendSMSNotificationQueue,this.SchedulerDisableHorizontalScrolling,this.BookOnlyOnExistingCustomers,this.AutoGenerateUniquePinCode,this.WeightedPrices,this.ModifiedDate,this.AutoCreateUserProfile,this.ShowMultipleResourcesAsOne,this.ShowMultiDayAsTime,this.Id});
    BookingSettings.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        FreeSpotTextsId = json['FreeSpotTextsId'];
        SendEmailConfirmation = json['SendEmailConfirmation'];
        ScheduleViewOptions = JsonConverters.fromJson(json['ScheduleViewOptions'],'List<ScheduleView>',context!);
        WeekNumberSettingOptions = JsonConverters.fromJson(json['WeekNumberSettingOptions'],'List<WeekNumberSetting>',context!);
        BookingTemplateOptions = JsonConverters.fromJson(json['BookingTemplateOptions'],'List<BookingTemplate>',context!);
        CalendarTypeOptions = JsonConverters.fromJson(json['CalendarTypeOptions'],'List<CalendarType>',context!);
        FreeSpotTextOptions = JsonConverters.fromJson(json['FreeSpotTextOptions'],'List<FreeSpotTexts>',context!);
        BookingStatusOptions = JsonConverters.fromJson(json['BookingStatusOptions'],'List<BookingStatusOptions>',context!);
        FreeSpotTextsInfo = JsonConverters.fromJson(json['FreeSpotTextsInfo'],'FreeSpotTexts',context!);
        FreeSpotsTextSingular = json['FreeSpotsTextSingular'];
        FreeSpotsTextPlural = json['FreeSpotsTextPlural'];
        BookingStatusId = json['BookingStatusId'];
        ScheduleViewId = json['ScheduleViewId'];
        BookingTemplateId = json['BookingTemplateId'];
        CalendarTypeId = json['CalendarTypeId'];
        AllowBookingOnUnbookedTimes = json['AllowBookingOnUnbookedTimes'];
        SendEmailReminder = json['SendEmailReminder'];
        SendSmsReminder = json['SendSmsReminder'];
        SendSmsConfirmation = json['SendSmsConfirmation'];
        EmailReminderTime = json['EmailReminderTime'];
        SmsReminderTime = json['SmsReminderTime'];
        MaxActiveBookings = json['MaxActiveBookings'];
        SendNotifications = json['SendNotifications'];
        SendNotificationsEmail = json['SendNotificationsEmail'];
        EnableMobileApp = json['EnableMobileApp'];
        ScheduleStartTime = JsonConverters.fromJson(json['ScheduleStartTime'],'Duration',context!);
        ScheduleEndTime = JsonConverters.fromJson(json['ScheduleEndTime'],'Duration',context!);
        ReceiptTemplate = json['ReceiptTemplate'];
        ScheduleTimeSlotMinutes = json['ScheduleTimeSlotMinutes'];
        ShowFreeTimesLeft = json['ShowFreeTimesLeft'];
        EnableICalGroupBookings = json['EnableICalGroupBookings'];
        AgreementTemplate = json['AgreementTemplate'];
        ScheduleShowTimeExeptions = json['ScheduleShowTimeExeptions'];
        EnableBookingsOnSameTime = json['EnableBookingsOnSameTime'];
        ShowWeekNumberSettingId = json['ShowWeekNumberSettingId'];
        EnableShowBookedTimes = json['EnableShowBookedTimes'];
        EnableSendFollowUpMessage = json['EnableSendFollowUpMessage'];
        FollowUpMessageTime = json['FollowUpMessageTime'];
        MessageText = json['MessageText'];
        ScheduleGroupResources = json['ScheduleGroupResources'];
        BookSpotUserResponseMinutes = json['BookSpotUserResponseMinutes'];
        IsBookSpotDirectly = json['IsBookSpotDirectly'];
        BookSpotDirectlyTimeLeftMinutes = json['BookSpotDirectlyTimeLeftMinutes'];
        SendEmailNotificationQueue = json['SendEmailNotificationQueue'];
        SendSMSNotificationQueue = json['SendSMSNotificationQueue'];
        SchedulerDisableHorizontalScrolling = json['SchedulerDisableHorizontalScrolling'];
        BookOnlyOnExistingCustomers = json['BookOnlyOnExistingCustomers'];
        AutoGenerateUniquePinCode = json['AutoGenerateUniquePinCode'];
        WeightedPrices = json['WeightedPrices'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        AutoCreateUserProfile = json['AutoCreateUserProfile'];
        ShowMultipleResourcesAsOne = json['ShowMultipleResourcesAsOne'];
        ShowMultiDayAsTime = json['ShowMultiDayAsTime'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'FreeSpotTextsId': FreeSpotTextsId,
        'SendEmailConfirmation': SendEmailConfirmation,
        'ScheduleViewOptions': JsonConverters.toJson(ScheduleViewOptions,'List<ScheduleView>',context!),
        'WeekNumberSettingOptions': JsonConverters.toJson(WeekNumberSettingOptions,'List<WeekNumberSetting>',context!),
        'BookingTemplateOptions': JsonConverters.toJson(BookingTemplateOptions,'List<BookingTemplate>',context!),
        'CalendarTypeOptions': JsonConverters.toJson(CalendarTypeOptions,'List<CalendarType>',context!),
        'FreeSpotTextOptions': JsonConverters.toJson(FreeSpotTextOptions,'List<FreeSpotTexts>',context!),
        'BookingStatusOptions': JsonConverters.toJson(BookingStatusOptions,'List<BookingStatusOptions>',context!),
        'FreeSpotTextsInfo': JsonConverters.toJson(FreeSpotTextsInfo,'FreeSpotTexts',context!),
        'FreeSpotsTextSingular': FreeSpotsTextSingular,
        'FreeSpotsTextPlural': FreeSpotsTextPlural,
        'BookingStatusId': BookingStatusId,
        'ScheduleViewId': ScheduleViewId,
        'BookingTemplateId': BookingTemplateId,
        'CalendarTypeId': CalendarTypeId,
        'AllowBookingOnUnbookedTimes': AllowBookingOnUnbookedTimes,
        'SendEmailReminder': SendEmailReminder,
        'SendSmsReminder': SendSmsReminder,
        'SendSmsConfirmation': SendSmsConfirmation,
        'EmailReminderTime': EmailReminderTime,
        'SmsReminderTime': SmsReminderTime,
        'MaxActiveBookings': MaxActiveBookings,
        'SendNotifications': SendNotifications,
        'SendNotificationsEmail': SendNotificationsEmail,
        'EnableMobileApp': EnableMobileApp,
        'ScheduleStartTime': JsonConverters.toJson(ScheduleStartTime,'Duration',context!),
        'ScheduleEndTime': JsonConverters.toJson(ScheduleEndTime,'Duration',context!),
        'ReceiptTemplate': ReceiptTemplate,
        'ScheduleTimeSlotMinutes': ScheduleTimeSlotMinutes,
        'ShowFreeTimesLeft': ShowFreeTimesLeft,
        'EnableICalGroupBookings': EnableICalGroupBookings,
        'AgreementTemplate': AgreementTemplate,
        'ScheduleShowTimeExeptions': ScheduleShowTimeExeptions,
        'EnableBookingsOnSameTime': EnableBookingsOnSameTime,
        'ShowWeekNumberSettingId': ShowWeekNumberSettingId,
        'EnableShowBookedTimes': EnableShowBookedTimes,
        'EnableSendFollowUpMessage': EnableSendFollowUpMessage,
        'FollowUpMessageTime': FollowUpMessageTime,
        'MessageText': MessageText,
        'ScheduleGroupResources': ScheduleGroupResources,
        'BookSpotUserResponseMinutes': BookSpotUserResponseMinutes,
        'IsBookSpotDirectly': IsBookSpotDirectly,
        'BookSpotDirectlyTimeLeftMinutes': BookSpotDirectlyTimeLeftMinutes,
        'SendEmailNotificationQueue': SendEmailNotificationQueue,
        'SendSMSNotificationQueue': SendSMSNotificationQueue,
        'SchedulerDisableHorizontalScrolling': SchedulerDisableHorizontalScrolling,
        'BookOnlyOnExistingCustomers': BookOnlyOnExistingCustomers,
        'AutoGenerateUniquePinCode': AutoGenerateUniquePinCode,
        'WeightedPrices': WeightedPrices,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'AutoCreateUserProfile': AutoCreateUserProfile,
        'ShowMultipleResourcesAsOne': ShowMultipleResourcesAsOne,
        'ShowMultiDayAsTime': ShowMultiDayAsTime,
        'Id': Id
    });

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

class CompanyType extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    CompanyType({this.Name,this.Description,this.ModifiedDate,this.Id});
    CompanyType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class CodeLockSystem extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Supplier;

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

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    CodeLockSystem({this.Name,this.Supplier,this.LogoType,this.Description,this.ModifiedDate,this.Id});
    CodeLockSystem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Supplier = json['Supplier'];
        LogoType = json['LogoType'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Supplier': Supplier,
        'LogoType': LogoType,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class CodeLockSetting extends BaseModel implements IConvertible
{
    // @Ignore()
    List<CodeLockSystem>? CodeLockSystemOptions;

    // @Required()
    bool? Active;

    // @Required()
    int? CodeLockSystemsId;

    // @Required()
    int? ValidBeforeMinutes;

    // @Required()
    int? ValidAfterMinutes;

    // @Required()
    bool? DeleteOldBySchedule;

    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

    DateTime? ModifiedDate;
    // @Required()
    bool? SendEmailNotification;

    // @Required()
    bool? SendSMSNotification;

    // @Required()
    int? EmailNotificationTime;

    // @Required()
    int? SMSNotificationTime;

    // @Required()
    String? Id;

    CodeLockSetting({this.CodeLockSystemOptions,this.Active,this.CodeLockSystemsId,this.ValidBeforeMinutes,this.ValidAfterMinutes,this.DeleteOldBySchedule,this.Created,this.Updated,this.ModifiedDate,this.SendEmailNotification,this.SendSMSNotification,this.EmailNotificationTime,this.SMSNotificationTime,this.Id});
    CodeLockSetting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CodeLockSystemOptions = JsonConverters.fromJson(json['CodeLockSystemOptions'],'List<CodeLockSystem>',context!);
        Active = json['Active'];
        CodeLockSystemsId = json['CodeLockSystemsId'];
        ValidBeforeMinutes = json['ValidBeforeMinutes'];
        ValidAfterMinutes = json['ValidAfterMinutes'];
        DeleteOldBySchedule = json['DeleteOldBySchedule'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        SendEmailNotification = json['SendEmailNotification'];
        SendSMSNotification = json['SendSMSNotification'];
        EmailNotificationTime = json['EmailNotificationTime'];
        SMSNotificationTime = json['SMSNotificationTime'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CodeLockSystemOptions': JsonConverters.toJson(CodeLockSystemOptions,'List<CodeLockSystem>',context!),
        'Active': Active,
        'CodeLockSystemsId': CodeLockSystemsId,
        'ValidBeforeMinutes': ValidBeforeMinutes,
        'ValidAfterMinutes': ValidAfterMinutes,
        'DeleteOldBySchedule': DeleteOldBySchedule,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'SendEmailNotification': SendEmailNotification,
        'SendSMSNotification': SendSMSNotification,
        'EmailNotificationTime': EmailNotificationTime,
        'SMSNotificationTime': SMSNotificationTime,
        'Id': Id
    });

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

class AdminPaymentOptions extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    AdminPaymentOptions({this.Name,this.Description,this.ModifiedDate,this.Id});
    AdminPaymentOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class PaymentProviders extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Category;

    String? Url;
    // @Required()
    bool? Active;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    PaymentProviders({this.Name,this.Description,this.Category,this.Url,this.Active,this.ModifiedDate,this.Id});
    PaymentProviders.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Category = json['Category'];
        Url = json['Url'];
        Active = json['Active'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Category': Category,
        'Url': Url,
        'Active': Active,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class PaymentSetting extends BaseModel implements IConvertible
{
    AdminPaymentOptions? AdminPaymentOption;
    // @Ignore()
    List<AdminPaymentOptions>? AdminPaymentOptions;

    // @Ignore()
    List<PaymentProviders>? PaymentProviderOptions;

    // @Required()
    bool? Enabled;

    // @Required()
    int? InvoiceFee;

    // @Required()
    bool? AllowCreditCardPayment;

    // @Required()
    bool? AllowInvoicePayment;

    // @Required()
    bool? AllowBankPayment;

    // @Required()
    bool? GuaranteeOffered;

    // @Required()
    bool? RefundOnCancelBooking;

    int? DefaultPaymentOptionId;
    // @Required()
    int? PaymentProviderId;

    // @Required()
    bool? SendPaymentRequestDirectly;

    DateTime? ModifiedDate;
    // @Required()
    String? Id;

    PaymentSetting({this.AdminPaymentOption,this.AdminPaymentOptions,this.PaymentProviderOptions,this.Enabled,this.InvoiceFee,this.AllowCreditCardPayment,this.AllowInvoicePayment,this.AllowBankPayment,this.GuaranteeOffered,this.RefundOnCancelBooking,this.DefaultPaymentOptionId,this.PaymentProviderId,this.SendPaymentRequestDirectly,this.ModifiedDate,this.Id});
    PaymentSetting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AdminPaymentOption = JsonConverters.fromJson(json['AdminPaymentOption'],'AdminPaymentOptions',context!);
        AdminPaymentOptions = JsonConverters.fromJson(json['AdminPaymentOptions'],'List<AdminPaymentOptions>',context!);
        PaymentProviderOptions = JsonConverters.fromJson(json['PaymentProviderOptions'],'List<PaymentProviders>',context!);
        Enabled = json['Enabled'];
        InvoiceFee = json['InvoiceFee'];
        AllowCreditCardPayment = json['AllowCreditCardPayment'];
        AllowInvoicePayment = json['AllowInvoicePayment'];
        AllowBankPayment = json['AllowBankPayment'];
        GuaranteeOffered = json['GuaranteeOffered'];
        RefundOnCancelBooking = json['RefundOnCancelBooking'];
        DefaultPaymentOptionId = json['DefaultPaymentOptionId'];
        PaymentProviderId = json['PaymentProviderId'];
        SendPaymentRequestDirectly = json['SendPaymentRequestDirectly'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AdminPaymentOption': JsonConverters.toJson(AdminPaymentOption,'AdminPaymentOptions',context!),
        'AdminPaymentOptions': JsonConverters.toJson(AdminPaymentOptions,'List<AdminPaymentOptions>',context!),
        'PaymentProviderOptions': JsonConverters.toJson(PaymentProviderOptions,'List<PaymentProviders>',context!),
        'Enabled': Enabled,
        'InvoiceFee': InvoiceFee,
        'AllowCreditCardPayment': AllowCreditCardPayment,
        'AllowInvoicePayment': AllowInvoicePayment,
        'AllowBankPayment': AllowBankPayment,
        'GuaranteeOffered': GuaranteeOffered,
        'RefundOnCancelBooking': RefundOnCancelBooking,
        'DefaultPaymentOptionId': DefaultPaymentOptionId,
        'PaymentProviderId': PaymentProviderId,
        'SendPaymentRequestDirectly': SendPaymentRequestDirectly,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class LanguageResponse implements IConvertible
{
    String? Id;
    String? Name;

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

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

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

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

class CompanySetting extends BaseModel implements IConvertible
{
    // @Ignore()
    List<LanguageResponse>? Languages;

    // @Required()
    bool? Active;

    String? InactiveMessage;
    // @Required()
    bool? Searchable;

    String? GATrackingId;
    String? FacebookPixelId;
    // @Required()
    bool? MultiLanguage;

    // @Required()
    bool? EnableAPITranslation;

    // @Required()
    String? DefaultLanguage;

    DateTime? ModifiedDate;
    String? GTMTrackingId;
    // @Required()
    bool? ShowOnMarketPlace;

    String? GoogleAdsConversionId;
    String? LinkedinTagId;
    String? GoogleAdsConversionLabel;
    // @Required()
    String? Id;

    CompanySetting({this.Languages,this.Active,this.InactiveMessage,this.Searchable,this.GATrackingId,this.FacebookPixelId,this.MultiLanguage,this.EnableAPITranslation,this.DefaultLanguage,this.ModifiedDate,this.GTMTrackingId,this.ShowOnMarketPlace,this.GoogleAdsConversionId,this.LinkedinTagId,this.GoogleAdsConversionLabel,this.Id});
    CompanySetting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Languages = JsonConverters.fromJson(json['Languages'],'List<LanguageResponse>',context!);
        Active = json['Active'];
        InactiveMessage = json['InactiveMessage'];
        Searchable = json['Searchable'];
        GATrackingId = json['GATrackingId'];
        FacebookPixelId = json['FacebookPixelId'];
        MultiLanguage = json['MultiLanguage'];
        EnableAPITranslation = json['EnableAPITranslation'];
        DefaultLanguage = json['DefaultLanguage'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        GTMTrackingId = json['GTMTrackingId'];
        ShowOnMarketPlace = json['ShowOnMarketPlace'];
        GoogleAdsConversionId = json['GoogleAdsConversionId'];
        LinkedinTagId = json['LinkedinTagId'];
        GoogleAdsConversionLabel = json['GoogleAdsConversionLabel'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Languages': JsonConverters.toJson(Languages,'List<LanguageResponse>',context!),
        'Active': Active,
        'InactiveMessage': InactiveMessage,
        'Searchable': Searchable,
        'GATrackingId': GATrackingId,
        'FacebookPixelId': FacebookPixelId,
        'MultiLanguage': MultiLanguage,
        'EnableAPITranslation': EnableAPITranslation,
        'DefaultLanguage': DefaultLanguage,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'GTMTrackingId': GTMTrackingId,
        'ShowOnMarketPlace': ShowOnMarketPlace,
        'GoogleAdsConversionId': GoogleAdsConversionId,
        'LinkedinTagId': LinkedinTagId,
        'GoogleAdsConversionLabel': GoogleAdsConversionLabel,
        'Id': Id
    });

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

class WidgetServiceLayouts extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Code;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    WidgetServiceLayouts({this.Name,this.Description,this.Code,this.ModifiedDate,this.Id});
    WidgetServiceLayouts.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Code = json['Code'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Code': Code,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class WidgetTimeLayouts extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Code;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    WidgetTimeLayouts({this.Name,this.Description,this.Code,this.ModifiedDate,this.Id});
    WidgetTimeLayouts.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Code = json['Code'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Code': Code,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class WidgetBookingLayouts extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Code;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    WidgetBookingLayouts({this.Name,this.Description,this.Code,this.ModifiedDate,this.Id});
    WidgetBookingLayouts.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Code = json['Code'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Code': Code,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class WidgetBookingMethods extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Code;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    WidgetBookingMethods({this.Name,this.Description,this.Code,this.ModifiedDate,this.Id});
    WidgetBookingMethods.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Code = json['Code'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Code': Code,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class HomepageWidgetSetting extends BaseModel implements IConvertible
{
    // @Ignore()
    List<WidgetServiceLayouts>? WidgetServiceLayoutOptions;

    // @Ignore()
    List<WidgetTimeLayouts>? WidgetTimeLayoutOptions;

    // @Ignore()
    List<WidgetBookingLayouts>? WidgetBookingLayoutOptions;

    // @Ignore()
    List<WidgetBookingMethods>? WidgetBookingMethodOptions;

    // @Required()
    int? ServiceLayoutId;

    // @Required()
    int? TimeLayoutId;

    // @Required()
    int? BookingLayoutId;

    // @Required()
    String? PrimaryColor;

    // @Required()
    bool? ShowServiceImage;

    // @Required()
    bool? ShowNextAvailableTime;

    // @Required()
    bool? ShowEndTime;

    String? BookedTimeSlotText;
    // @Required()
    bool? DarkTheme;

    // @Required()
    bool? ShowRebateCodeField;

    DateTime? ModifiedDate;
    // @Required()
    bool? EnableCreateAccount;

    // @Required()
    bool? EnableLogin;

    // @Required()
    bool? EnableDirectBooking;

    // @Required()
    bool? EnableFacebookLogin;

    // @Required()
    bool? ShowSubscribeToNewsletter;

    // @Required()
    String? Id;

    HomepageWidgetSetting({this.WidgetServiceLayoutOptions,this.WidgetTimeLayoutOptions,this.WidgetBookingLayoutOptions,this.WidgetBookingMethodOptions,this.ServiceLayoutId,this.TimeLayoutId,this.BookingLayoutId,this.PrimaryColor,this.ShowServiceImage,this.ShowNextAvailableTime,this.ShowEndTime,this.BookedTimeSlotText,this.DarkTheme,this.ShowRebateCodeField,this.ModifiedDate,this.EnableCreateAccount,this.EnableLogin,this.EnableDirectBooking,this.EnableFacebookLogin,this.ShowSubscribeToNewsletter,this.Id});
    HomepageWidgetSetting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        WidgetServiceLayoutOptions = JsonConverters.fromJson(json['WidgetServiceLayoutOptions'],'List<WidgetServiceLayouts>',context!);
        WidgetTimeLayoutOptions = JsonConverters.fromJson(json['WidgetTimeLayoutOptions'],'List<WidgetTimeLayouts>',context!);
        WidgetBookingLayoutOptions = JsonConverters.fromJson(json['WidgetBookingLayoutOptions'],'List<WidgetBookingLayouts>',context!);
        WidgetBookingMethodOptions = JsonConverters.fromJson(json['WidgetBookingMethodOptions'],'List<WidgetBookingMethods>',context!);
        ServiceLayoutId = json['ServiceLayoutId'];
        TimeLayoutId = json['TimeLayoutId'];
        BookingLayoutId = json['BookingLayoutId'];
        PrimaryColor = json['PrimaryColor'];
        ShowServiceImage = json['ShowServiceImage'];
        ShowNextAvailableTime = json['ShowNextAvailableTime'];
        ShowEndTime = json['ShowEndTime'];
        BookedTimeSlotText = json['BookedTimeSlotText'];
        DarkTheme = json['DarkTheme'];
        ShowRebateCodeField = json['ShowRebateCodeField'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        EnableCreateAccount = json['EnableCreateAccount'];
        EnableLogin = json['EnableLogin'];
        EnableDirectBooking = json['EnableDirectBooking'];
        EnableFacebookLogin = json['EnableFacebookLogin'];
        ShowSubscribeToNewsletter = json['ShowSubscribeToNewsletter'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'WidgetServiceLayoutOptions': JsonConverters.toJson(WidgetServiceLayoutOptions,'List<WidgetServiceLayouts>',context!),
        'WidgetTimeLayoutOptions': JsonConverters.toJson(WidgetTimeLayoutOptions,'List<WidgetTimeLayouts>',context!),
        'WidgetBookingLayoutOptions': JsonConverters.toJson(WidgetBookingLayoutOptions,'List<WidgetBookingLayouts>',context!),
        'WidgetBookingMethodOptions': JsonConverters.toJson(WidgetBookingMethodOptions,'List<WidgetBookingMethods>',context!),
        'ServiceLayoutId': ServiceLayoutId,
        'TimeLayoutId': TimeLayoutId,
        'BookingLayoutId': BookingLayoutId,
        'PrimaryColor': PrimaryColor,
        'ShowServiceImage': ShowServiceImage,
        'ShowNextAvailableTime': ShowNextAvailableTime,
        'ShowEndTime': ShowEndTime,
        'BookedTimeSlotText': BookedTimeSlotText,
        'DarkTheme': DarkTheme,
        'ShowRebateCodeField': ShowRebateCodeField,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'EnableCreateAccount': EnableCreateAccount,
        'EnableLogin': EnableLogin,
        'EnableDirectBooking': EnableDirectBooking,
        'EnableFacebookLogin': EnableFacebookLogin,
        'ShowSubscribeToNewsletter': ShowSubscribeToNewsletter,
        'Id': Id
    });

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

class HomepageTemplate extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    Uri? ImageUrl;
    // @Required()
    bool? Premium;

    DateTime? ModifiedDate;
    int? Id;

    HomepageTemplate({this.Name,this.Description,this.ImageUrl,this.Premium,this.ModifiedDate,this.Id});
    HomepageTemplate.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
        Premium = json['Premium'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!),
        'Premium': Premium,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class HeroSectionStyle extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    String? Description;
    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    HeroSectionStyle({this.Name,this.Description,this.ModifiedDate,this.Id});
    HeroSectionStyle.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class HomepageSetting extends BaseModel implements ICompany, IConvertible
{
    // @Ignore()
    List<HomepageTemplate>? HomepageTemplateOptions;

    // @Ignore()
    List<HeroSectionStyle>? HomepageHeroSectionStyleOptions;

    // @Ignore()
    String? CompanyId;

    String? WelcomePageHeading;
    String? WelcomePageBody;
    String? AboutUsPageHeading;
    String? AboutUsPageBody;
    // @Required()
    int? HomePageTemplateId;

    String? ImageUrl;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    String? HomepageHeading;
    // @Required()
    int? HeroSectionStyleId;

    DateTime? ModifiedDate;
    // @Required()
    bool? ShowRating;

    // @Required()
    bool? EnableHomepage;

    // @Required()
    String? Id;

    HomepageSetting({this.HomepageTemplateOptions,this.HomepageHeroSectionStyleOptions,this.CompanyId,this.WelcomePageHeading,this.WelcomePageBody,this.AboutUsPageHeading,this.AboutUsPageBody,this.HomePageTemplateId,this.ImageUrl,this.Updated,this.Created,this.HomepageHeading,this.HeroSectionStyleId,this.ModifiedDate,this.ShowRating,this.EnableHomepage,this.Id});
    HomepageSetting.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        HomepageTemplateOptions = JsonConverters.fromJson(json['HomepageTemplateOptions'],'List<HomepageTemplate>',context!);
        HomepageHeroSectionStyleOptions = JsonConverters.fromJson(json['HomepageHeroSectionStyleOptions'],'List<HeroSectionStyle>',context!);
        CompanyId = json['CompanyId'];
        WelcomePageHeading = json['WelcomePageHeading'];
        WelcomePageBody = json['WelcomePageBody'];
        AboutUsPageHeading = json['AboutUsPageHeading'];
        AboutUsPageBody = json['AboutUsPageBody'];
        HomePageTemplateId = json['HomePageTemplateId'];
        ImageUrl = json['ImageUrl'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        HomepageHeading = json['HomepageHeading'];
        HeroSectionStyleId = json['HeroSectionStyleId'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        ShowRating = json['ShowRating'];
        EnableHomepage = json['EnableHomepage'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'HomepageTemplateOptions': JsonConverters.toJson(HomepageTemplateOptions,'List<HomepageTemplate>',context!),
        'HomepageHeroSectionStyleOptions': JsonConverters.toJson(HomepageHeroSectionStyleOptions,'List<HeroSectionStyle>',context!),
        'CompanyId': CompanyId,
        'WelcomePageHeading': WelcomePageHeading,
        'WelcomePageBody': WelcomePageBody,
        'AboutUsPageHeading': AboutUsPageHeading,
        'AboutUsPageBody': AboutUsPageBody,
        'HomePageTemplateId': HomePageTemplateId,
        'ImageUrl': ImageUrl,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'HomepageHeading': HomepageHeading,
        'HeroSectionStyleId': HeroSectionStyleId,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'ShowRating': ShowRating,
        'EnableHomepage': EnableHomepage,
        'Id': Id
    });

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

class AverageRatingScore implements IConvertible
{
    double? AverageScore;
    int? Score1Count;
    int? Score2Count;
    int? Score3Count;
    int? Score4Count;
    int? Score5Count;
    int? Count;

    AverageRatingScore({this.AverageScore,this.Score1Count,this.Score2Count,this.Score3Count,this.Score4Count,this.Score5Count,this.Count});
    AverageRatingScore.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AverageScore = JsonConverters.toDouble(json['AverageScore']);
        Score1Count = json['Score1Count'];
        Score2Count = json['Score2Count'];
        Score3Count = json['Score3Count'];
        Score4Count = json['Score4Count'];
        Score5Count = json['Score5Count'];
        Count = json['Count'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AverageScore': AverageScore,
        'Score1Count': Score1Count,
        'Score2Count': Score2Count,
        'Score3Count': Score3Count,
        'Score4Count': Score4Count,
        'Score5Count': Score5Count,
        'Count': Count
    };

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

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

    // @Required()
    String? Title;

    // @Required()
    String? Description;

    // @Required()
    String? Author;

    // @Required()
    int? Status;

    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

    DateTime? ModifiedDate;
    String? ReviewAnswer;

    Review({this.ReviewId,this.CompanyId,this.Title,this.Description,this.Author,this.Status,this.Created,this.Updated,this.ModifiedDate,this.ReviewAnswer});
    Review.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ReviewId = json['ReviewId'];
        CompanyId = json['CompanyId'];
        Title = json['Title'];
        Description = json['Description'];
        Author = json['Author'];
        Status = json['Status'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        ReviewAnswer = json['ReviewAnswer'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ReviewId': ReviewId,
        'CompanyId': CompanyId,
        'Title': Title,
        'Description': Description,
        'Author': Author,
        'Status': Status,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'ReviewAnswer': ReviewAnswer
    });

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

class Rating extends BaseModel implements IConvertible
{
    String? ReviewId;
    Review? Review;
    // @Required()
    String? CompanyId;

    // @Required()
    int? BookingId;

    // @Required()
    int? RatingScore;

    // @Required()
    int? Status;

    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

    DateTime? ModifiedDate;

    Rating({this.ReviewId,this.Review,this.CompanyId,this.BookingId,this.RatingScore,this.Status,this.Created,this.Updated,this.ModifiedDate});
    Rating.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ReviewId = json['ReviewId'];
        Review = JsonConverters.fromJson(json['Review'],'Review',context!);
        CompanyId = json['CompanyId'];
        BookingId = json['BookingId'];
        RatingScore = json['RatingScore'];
        Status = json['Status'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ReviewId': ReviewId,
        'Review': JsonConverters.toJson(Review,'Review',context!),
        'CompanyId': CompanyId,
        'BookingId': BookingId,
        'RatingScore': RatingScore,
        'Status': Status,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

class LicenseTypeItem extends BaseModel implements IConvertible
{
    // @Ignore()
    String? Name;

    // @Ignore()
    LicenseType? LicenseType;

    // @Required()
    int? LicenseTypesId;

    // @Required()
    int? LicenseItemsId;

    // @Required()
    int? NumberOfItems;

    int? Id;
    DateTime? ModifiedDate;

    LicenseTypeItem({this.Name,this.LicenseType,this.LicenseTypesId,this.LicenseItemsId,this.NumberOfItems,this.Id,this.ModifiedDate});
    LicenseTypeItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        LicenseType = JsonConverters.fromJson(json['LicenseType'],'LicenseType',context!);
        LicenseTypesId = json['LicenseTypesId'];
        LicenseItemsId = json['LicenseItemsId'];
        NumberOfItems = json['NumberOfItems'];
        Id = json['Id'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'LicenseType': JsonConverters.toJson(LicenseType,'LicenseType',context!),
        'LicenseTypesId': LicenseTypesId,
        'LicenseItemsId': LicenseItemsId,
        'NumberOfItems': NumberOfItems,
        'Id': Id,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

class Country extends BaseModel implements IConvertible
{
    // @References(typeof(Currency))
    String? CurrencyId;

    Currency? CurrencyInfo;
    // @Required()
    String? Name;

    String? Culture;
    String? TimeZone;
    DateTime? ModifiedDate;
    // @Required()
    String? Id;

    Country({this.CurrencyId,this.CurrencyInfo,this.Name,this.Culture,this.TimeZone,this.ModifiedDate,this.Id});
    Country.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CurrencyId = json['CurrencyId'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        Name = json['Name'];
        Culture = json['Culture'];
        TimeZone = json['TimeZone'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CurrencyId': CurrencyId,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'Name': Name,
        'Culture': Culture,
        'TimeZone': TimeZone,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class LicensePrice extends BaseModel implements IConvertible
{
    // @Ignore()
    Country? Country;

    // @Ignore()
    bool? MonthlyPayment;

    // @Required()
    int? LicenseTypeId;

    // @Required()
    String? CountryId;

    // @Required()
    int? Price;

    DateTime? ModifiedDate;

    LicensePrice({this.Country,this.MonthlyPayment,this.LicenseTypeId,this.CountryId,this.Price,this.ModifiedDate});
    LicensePrice.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Country = JsonConverters.fromJson(json['Country'],'Country',context!);
        MonthlyPayment = json['MonthlyPayment'];
        LicenseTypeId = json['LicenseTypeId'];
        CountryId = json['CountryId'];
        Price = json['Price'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Country': JsonConverters.toJson(Country,'Country',context!),
        'MonthlyPayment': MonthlyPayment,
        'LicenseTypeId': LicenseTypeId,
        'CountryId': CountryId,
        'Price': Price,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

class LicenseType extends BaseModel implements IConvertible
{
    // @Ignore()
    List<LicenseTypeItem>? LicenseItems;

    // @Ignore()
    List<LicensePrice>? Prices;

    // @Ignore()
    int? PeriodOfNoticeDays;

    // @Ignore()
    LicenseType? NextLicenseOption;

    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    bool? ExtraLicenseOption;

    DateTime? ModifiedDate;
    bool? Active;
    int? Id;

    LicenseType({this.LicenseItems,this.Prices,this.PeriodOfNoticeDays,this.NextLicenseOption,this.Name,this.Description,this.ExtraLicenseOption,this.ModifiedDate,this.Active,this.Id});
    LicenseType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        LicenseItems = JsonConverters.fromJson(json['LicenseItems'],'List<LicenseTypeItem>',context!);
        Prices = JsonConverters.fromJson(json['Prices'],'List<LicensePrice>',context!);
        PeriodOfNoticeDays = json['PeriodOfNoticeDays'];
        NextLicenseOption = JsonConverters.fromJson(json['NextLicenseOption'],'LicenseType',context!);
        Name = json['Name'];
        Description = json['Description'];
        ExtraLicenseOption = json['ExtraLicenseOption'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Active = json['Active'];
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'LicenseItems': JsonConverters.toJson(LicenseItems,'List<LicenseTypeItem>',context!),
        'Prices': JsonConverters.toJson(Prices,'List<LicensePrice>',context!),
        'PeriodOfNoticeDays': PeriodOfNoticeDays,
        'NextLicenseOption': JsonConverters.toJson(NextLicenseOption,'LicenseType',context!),
        'Name': Name,
        'Description': Description,
        'ExtraLicenseOption': ExtraLicenseOption,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Active': Active,
        'Id': Id
    });

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

class License extends BaseModel implements IConvertible
{
    LicenseType? Type;
    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    int? TypeId;

    // @Required()
    DateTime? ValidFrom;

    // @Required()
    DateTime? ValidTo;

    // @Required()
    bool? Active;

    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    DateTime? ModifiedDate;
    String? MetaData;

    License({this.Type,this.CompanyId,this.Id,this.TypeId,this.ValidFrom,this.ValidTo,this.Active,this.Updated,this.Created,this.ModifiedDate,this.MetaData});
    License.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Type = JsonConverters.fromJson(json['Type'],'LicenseType',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        TypeId = json['TypeId'];
        ValidFrom = JsonConverters.fromJson(json['ValidFrom'],'DateTime',context!);
        ValidTo = JsonConverters.fromJson(json['ValidTo'],'DateTime',context!);
        Active = json['Active'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        MetaData = json['MetaData'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Type': JsonConverters.toJson(Type,'LicenseType',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'TypeId': TypeId,
        'ValidFrom': JsonConverters.toJson(ValidFrom,'DateTime',context!),
        'ValidTo': JsonConverters.toJson(ValidTo,'DateTime',context!),
        'Active': Active,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'MetaData': MetaData
    });

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

class CompanyCategory extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Header;

    // @Required()
    String? Description;

    Uri? ImageUrl;
    // @Required()
    bool? Active;

    int? SortOrder;
    DateTime? ModifiedDate;
    int? Id;

    CompanyCategory({this.Name,this.Header,this.Description,this.ImageUrl,this.Active,this.SortOrder,this.ModifiedDate,this.Id});
    CompanyCategory.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Header = json['Header'];
        Description = json['Description'];
        ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
        Active = json['Active'];
        SortOrder = json['SortOrder'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Header': Header,
        'Description': Description,
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!),
        'Active': Active,
        'SortOrder': SortOrder,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class Company extends BaseModel implements IConvertible
{
    // @Ignore()
    CompanyStatus? Status;

    // @Ignore()
    bool? Active;

    // @Ignore()
    List<CustomFieldConfig>? CustomerCustomFieldsConfig;

    // @Ignore()
    String? BookingAgreements;

    // @Ignore()
    BookingSettings? BookingSettings;

    // @Ignore()
    CompanyType? CompanyType;

    // @Ignore()
    CodeLockSetting? CodeLockSettings;

    // @Ignore()
    PaymentSetting? PaymentSettings;

    // @Ignore()
    CompanySetting? Settings;

    // @Ignore()
    HomepageWidgetSetting? WidgetSettings;

    // @Ignore()
    HomepageSetting? HomepageSettings;

    // @Ignore()
    AverageRatingScore? RatingScore;

    // @Ignore()
    List<Rating>? Ratings;

    // @Ignore()
    double? Distance;

    // @Ignore()
    List<License>? Licenses;

    // @Ignore()
    List<License>? ActiveLicenses;

    // @Ignore()
    License? CurrentLicense;

    // @Ignore()
    bool? IsFreeAccount;

    // @Ignore()
    CultureInfo? DefaultLanguage;

    CompanyCategory? Category;
    // @Ignore()
    double? Lat;

    // @Ignore()
    double? Lon;

    // @Ignore()
    bool? IsFavorite;

    // @Ignore()
    List<ExternalReference>? ExternalReferences;

    // @Required()
    String? OrganisationNumber;

    // @Required()
    int? StatusId;

    // @Required()
    int? CategoryId;

    // @Required()
    String? SitePath;

    // @Required()
    String? Name;

    String? Street1;
    String? Street2;
    String? ZipCode;
    String? City;
    String? OpeningHours;
    String? FaxNumber;
    // @Required()
    String? Email;

    String? Phone;
    String? Details;
    String? LogoType;
    // @Required()
    bool? ApprovedByAdmin;

    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    String? IpAddress;
    String? Homepage;
    String? DomainName;
    // @Required()
    String? CountryId;

    // @Required()
    int? CompanyOwnerId;

    int? TypeId;
    DateTime? ModifiedDate;
    // @Required()
    String? Id;

    Company({this.Status,this.Active,this.CustomerCustomFieldsConfig,this.BookingAgreements,this.BookingSettings,this.CompanyType,this.CodeLockSettings,this.PaymentSettings,this.Settings,this.WidgetSettings,this.HomepageSettings,this.RatingScore,this.Ratings,this.Distance,this.Licenses,this.ActiveLicenses,this.CurrentLicense,this.IsFreeAccount,this.DefaultLanguage,this.Category,this.Lat,this.Lon,this.IsFavorite,this.ExternalReferences,this.OrganisationNumber,this.StatusId,this.CategoryId,this.SitePath,this.Name,this.Street1,this.Street2,this.ZipCode,this.City,this.OpeningHours,this.FaxNumber,this.Email,this.Phone,this.Details,this.LogoType,this.ApprovedByAdmin,this.Updated,this.Created,this.IpAddress,this.Homepage,this.DomainName,this.CountryId,this.CompanyOwnerId,this.TypeId,this.ModifiedDate,this.Id});
    Company.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Status = JsonConverters.fromJson(json['Status'],'CompanyStatus',context!);
        Active = json['Active'];
        CustomerCustomFieldsConfig = JsonConverters.fromJson(json['CustomerCustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        BookingAgreements = json['BookingAgreements'];
        BookingSettings = JsonConverters.fromJson(json['BookingSettings'],'BookingSettings',context!);
        CompanyType = JsonConverters.fromJson(json['CompanyType'],'CompanyType',context!);
        CodeLockSettings = JsonConverters.fromJson(json['CodeLockSettings'],'CodeLockSetting',context!);
        PaymentSettings = JsonConverters.fromJson(json['PaymentSettings'],'PaymentSetting',context!);
        Settings = JsonConverters.fromJson(json['Settings'],'CompanySetting',context!);
        WidgetSettings = JsonConverters.fromJson(json['WidgetSettings'],'HomepageWidgetSetting',context!);
        HomepageSettings = JsonConverters.fromJson(json['HomepageSettings'],'HomepageSetting',context!);
        RatingScore = JsonConverters.fromJson(json['RatingScore'],'AverageRatingScore',context!);
        Ratings = JsonConverters.fromJson(json['Ratings'],'List<Rating>',context!);
        Distance = JsonConverters.toDouble(json['Distance']);
        Licenses = JsonConverters.fromJson(json['Licenses'],'List<License>',context!);
        ActiveLicenses = JsonConverters.fromJson(json['ActiveLicenses'],'List<License>',context!);
        CurrentLicense = JsonConverters.fromJson(json['CurrentLicense'],'License',context!);
        IsFreeAccount = json['IsFreeAccount'];
        DefaultLanguage = JsonConverters.fromJson(json['DefaultLanguage'],'CultureInfo',context!);
        Category = JsonConverters.fromJson(json['Category'],'CompanyCategory',context!);
        Lat = JsonConverters.toDouble(json['Lat']);
        Lon = JsonConverters.toDouble(json['Lon']);
        IsFavorite = json['IsFavorite'];
        ExternalReferences = JsonConverters.fromJson(json['ExternalReferences'],'List<ExternalReference>',context!);
        OrganisationNumber = json['OrganisationNumber'];
        StatusId = json['StatusId'];
        CategoryId = json['CategoryId'];
        SitePath = json['SitePath'];
        Name = json['Name'];
        Street1 = json['Street1'];
        Street2 = json['Street2'];
        ZipCode = json['ZipCode'];
        City = json['City'];
        OpeningHours = json['OpeningHours'];
        FaxNumber = json['FaxNumber'];
        Email = json['Email'];
        Phone = json['Phone'];
        Details = json['Details'];
        LogoType = json['LogoType'];
        ApprovedByAdmin = json['ApprovedByAdmin'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        IpAddress = json['IpAddress'];
        Homepage = json['Homepage'];
        DomainName = json['DomainName'];
        CountryId = json['CountryId'];
        CompanyOwnerId = json['CompanyOwnerId'];
        TypeId = json['TypeId'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Status': JsonConverters.toJson(Status,'CompanyStatus',context!),
        'Active': Active,
        'CustomerCustomFieldsConfig': JsonConverters.toJson(CustomerCustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'BookingAgreements': BookingAgreements,
        'BookingSettings': JsonConverters.toJson(BookingSettings,'BookingSettings',context!),
        'CompanyType': JsonConverters.toJson(CompanyType,'CompanyType',context!),
        'CodeLockSettings': JsonConverters.toJson(CodeLockSettings,'CodeLockSetting',context!),
        'PaymentSettings': JsonConverters.toJson(PaymentSettings,'PaymentSetting',context!),
        'Settings': JsonConverters.toJson(Settings,'CompanySetting',context!),
        'WidgetSettings': JsonConverters.toJson(WidgetSettings,'HomepageWidgetSetting',context!),
        'HomepageSettings': JsonConverters.toJson(HomepageSettings,'HomepageSetting',context!),
        'RatingScore': JsonConverters.toJson(RatingScore,'AverageRatingScore',context!),
        'Ratings': JsonConverters.toJson(Ratings,'List<Rating>',context!),
        'Distance': Distance,
        'Licenses': JsonConverters.toJson(Licenses,'List<License>',context!),
        'ActiveLicenses': JsonConverters.toJson(ActiveLicenses,'List<License>',context!),
        'CurrentLicense': JsonConverters.toJson(CurrentLicense,'License',context!),
        'IsFreeAccount': IsFreeAccount,
        'DefaultLanguage': JsonConverters.toJson(DefaultLanguage,'CultureInfo',context!),
        'Category': JsonConverters.toJson(Category,'CompanyCategory',context!),
        'Lat': Lat,
        'Lon': Lon,
        'IsFavorite': IsFavorite,
        'ExternalReferences': JsonConverters.toJson(ExternalReferences,'List<ExternalReference>',context!),
        'OrganisationNumber': OrganisationNumber,
        'StatusId': StatusId,
        'CategoryId': CategoryId,
        'SitePath': SitePath,
        'Name': Name,
        'Street1': Street1,
        'Street2': Street2,
        'ZipCode': ZipCode,
        'City': City,
        'OpeningHours': OpeningHours,
        'FaxNumber': FaxNumber,
        'Email': Email,
        'Phone': Phone,
        'Details': Details,
        'LogoType': LogoType,
        'ApprovedByAdmin': ApprovedByAdmin,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'IpAddress': IpAddress,
        'Homepage': Homepage,
        'DomainName': DomainName,
        'CountryId': CountryId,
        'CompanyOwnerId': CompanyOwnerId,
        'TypeId': TypeId,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

    getTypeName() => "Company";
    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 CustomerComment extends BaseModel implements IConvertible
{
    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? CustomerId;

    // @Required()
    String? Comments;

    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    String? ImageUrl;
    DateTime? ModifiedDate;

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

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

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

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

class Customer extends BaseModel implements IUser, ICustomFieldTable, IConvertible
{
    int? IdentityId;
    String? Id;
    // @Ignore()
    String? CustomerId;

    // @Ignore()
    List<UserAccessKeys>? AccessKeys;

    String? Email;
    // @Ignore()
    List<ExternalReference>? ExternalReferences;

    // @Ignore()
    Company? Company;

    // @Ignore()
    List<CustomFieldConfig>? CustomFieldsConfig;

    // @Ignore()
    List<CustomFieldDataResponse>? CustomFieldsData;

    // @Ignore()
    List<CustomerComment>? Comments;

    // @Ignore()
    List<RebateCode>? RebateCodes;

    String? Firstname;
    // @Ignore()
    String? FullName;

    // @Ignore()
    String? ImageUrl;

    // @Required()
    bool? Active;

    String? FacebookUsername;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    String? IpAddress;
    DateTime? ModifiedDate;
    String? TextField1;
    String? TextField2;
    String? TextField3;
    String? TextField4;
    String? TextField5;
    String? TextField6;
    String? TextField7;
    String? TextField8;
    String? TextField9;
    String? TextField10;
    String? TextField11;
    String? TextField12;
    String? TextField13;
    String? TextField14;
    String? TextField15;
    String? TextField16;
    String? TextField17;
    String? TextField18;
    String? TextField19;
    String? TextField20;
    String? UserId;
    String? Lastname;
    String? Phone;
    String? CorporateIdentityNumber;
    String? InvoiceAddress1;
    String? InvoiceAddress2;
    String? InvoiceCity;
    String? InvoicePostalCode;
    String? InvoiceCountryCode;
    // @Required()
    String? CompanyId;

    bool? SubscribedToNewsletter;

    Customer({this.IdentityId,this.Id,this.CustomerId,this.AccessKeys,this.Email,this.ExternalReferences,this.Company,this.CustomFieldsConfig,this.CustomFieldsData,this.Comments,this.RebateCodes,this.Firstname,this.FullName,this.ImageUrl,this.Active,this.FacebookUsername,this.Updated,this.Created,this.IpAddress,this.ModifiedDate,this.TextField1,this.TextField2,this.TextField3,this.TextField4,this.TextField5,this.TextField6,this.TextField7,this.TextField8,this.TextField9,this.TextField10,this.TextField11,this.TextField12,this.TextField13,this.TextField14,this.TextField15,this.TextField16,this.TextField17,this.TextField18,this.TextField19,this.TextField20,this.UserId,this.Lastname,this.Phone,this.CorporateIdentityNumber,this.InvoiceAddress1,this.InvoiceAddress2,this.InvoiceCity,this.InvoicePostalCode,this.InvoiceCountryCode,this.CompanyId,this.SubscribedToNewsletter});
    Customer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        IdentityId = json['IdentityId'];
        Id = json['Id'];
        CustomerId = json['CustomerId'];
        AccessKeys = JsonConverters.fromJson(json['AccessKeys'],'List<UserAccessKeys>',context!);
        Email = json['Email'];
        ExternalReferences = JsonConverters.fromJson(json['ExternalReferences'],'List<ExternalReference>',context!);
        Company = JsonConverters.fromJson(json['Company'],'Company',context!);
        CustomFieldsConfig = JsonConverters.fromJson(json['CustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsData = JsonConverters.fromJson(json['CustomFieldsData'],'List<CustomFieldDataResponse>',context!);
        Comments = JsonConverters.fromJson(json['Comments'],'List<CustomerComment>',context!);
        RebateCodes = JsonConverters.fromJson(json['RebateCodes'],'List<RebateCode>',context!);
        Firstname = json['Firstname'];
        FullName = json['FullName'];
        ImageUrl = json['ImageUrl'];
        Active = json['Active'];
        FacebookUsername = json['FacebookUsername'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        IpAddress = json['IpAddress'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        TextField1 = json['TextField1'];
        TextField2 = json['TextField2'];
        TextField3 = json['TextField3'];
        TextField4 = json['TextField4'];
        TextField5 = json['TextField5'];
        TextField6 = json['TextField6'];
        TextField7 = json['TextField7'];
        TextField8 = json['TextField8'];
        TextField9 = json['TextField9'];
        TextField10 = json['TextField10'];
        TextField11 = json['TextField11'];
        TextField12 = json['TextField12'];
        TextField13 = json['TextField13'];
        TextField14 = json['TextField14'];
        TextField15 = json['TextField15'];
        TextField16 = json['TextField16'];
        TextField17 = json['TextField17'];
        TextField18 = json['TextField18'];
        TextField19 = json['TextField19'];
        TextField20 = json['TextField20'];
        UserId = json['UserId'];
        Lastname = json['Lastname'];
        Phone = json['Phone'];
        CorporateIdentityNumber = json['CorporateIdentityNumber'];
        InvoiceAddress1 = json['InvoiceAddress1'];
        InvoiceAddress2 = json['InvoiceAddress2'];
        InvoiceCity = json['InvoiceCity'];
        InvoicePostalCode = json['InvoicePostalCode'];
        InvoiceCountryCode = json['InvoiceCountryCode'];
        CompanyId = json['CompanyId'];
        SubscribedToNewsletter = json['SubscribedToNewsletter'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'IdentityId': IdentityId,
        'Id': Id,
        'CustomerId': CustomerId,
        'AccessKeys': JsonConverters.toJson(AccessKeys,'List<UserAccessKeys>',context!),
        'Email': Email,
        'ExternalReferences': JsonConverters.toJson(ExternalReferences,'List<ExternalReference>',context!),
        'Company': JsonConverters.toJson(Company,'Company',context!),
        'CustomFieldsConfig': JsonConverters.toJson(CustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsData': JsonConverters.toJson(CustomFieldsData,'List<CustomFieldDataResponse>',context!),
        'Comments': JsonConverters.toJson(Comments,'List<CustomerComment>',context!),
        'RebateCodes': JsonConverters.toJson(RebateCodes,'List<RebateCode>',context!),
        'Firstname': Firstname,
        'FullName': FullName,
        'ImageUrl': ImageUrl,
        'Active': Active,
        'FacebookUsername': FacebookUsername,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'IpAddress': IpAddress,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'TextField1': TextField1,
        'TextField2': TextField2,
        'TextField3': TextField3,
        'TextField4': TextField4,
        'TextField5': TextField5,
        'TextField6': TextField6,
        'TextField7': TextField7,
        'TextField8': TextField8,
        'TextField9': TextField9,
        'TextField10': TextField10,
        'TextField11': TextField11,
        'TextField12': TextField12,
        'TextField13': TextField13,
        'TextField14': TextField14,
        'TextField15': TextField15,
        'TextField16': TextField16,
        'TextField17': TextField17,
        'TextField18': TextField18,
        'TextField19': TextField19,
        'TextField20': TextField20,
        'UserId': UserId,
        'Lastname': Lastname,
        'Phone': Phone,
        'CorporateIdentityNumber': CorporateIdentityNumber,
        'InvoiceAddress1': InvoiceAddress1,
        'InvoiceAddress2': InvoiceAddress2,
        'InvoiceCity': InvoiceCity,
        'InvoicePostalCode': InvoicePostalCode,
        'InvoiceCountryCode': InvoiceCountryCode,
        'CompanyId': CompanyId,
        'SubscribedToNewsletter': SubscribedToNewsletter
    });

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

enum ItemType
{
    Physical,
    Service,
    Fee,
    Discount,
}

class Item implements IConvertible
{
    String? ItemId;
    double? DiscountRate;
    String? Ean;
    Uri? ImageUri;
    String? Name;
    double? Quantity;
    String? Reference;
    double? TaxRate;
    double? TotalPriceExcludingTax;
    double? TotalPriceIncludingTax;
    double? TotalTaxAmount;
    double? CreditedAmount;
    ItemType? Type;
    double? UnitPrice;
    Uri? Uri;

    Item({this.ItemId,this.DiscountRate,this.Ean,this.ImageUri,this.Name,this.Quantity,this.Reference,this.TaxRate,this.TotalPriceExcludingTax,this.TotalPriceIncludingTax,this.TotalTaxAmount,this.CreditedAmount,this.Type,this.UnitPrice,this.Uri});
    Item.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ItemId = json['ItemId'];
        DiscountRate = JsonConverters.toDouble(json['DiscountRate']);
        Ean = json['Ean'];
        ImageUri = JsonConverters.fromJson(json['ImageUri'],'Uri',context!);
        Name = json['Name'];
        Quantity = JsonConverters.toDouble(json['Quantity']);
        Reference = json['Reference'];
        TaxRate = JsonConverters.toDouble(json['TaxRate']);
        TotalPriceExcludingTax = JsonConverters.toDouble(json['TotalPriceExcludingTax']);
        TotalPriceIncludingTax = JsonConverters.toDouble(json['TotalPriceIncludingTax']);
        TotalTaxAmount = JsonConverters.toDouble(json['TotalTaxAmount']);
        CreditedAmount = JsonConverters.toDouble(json['CreditedAmount']);
        Type = JsonConverters.fromJson(json['Type'],'ItemType',context!);
        UnitPrice = JsonConverters.toDouble(json['UnitPrice']);
        Uri = JsonConverters.fromJson(json['Uri'],'Uri',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ItemId': ItemId,
        'DiscountRate': DiscountRate,
        'Ean': Ean,
        'ImageUri': JsonConverters.toJson(ImageUri,'Uri',context!),
        'Name': Name,
        'Quantity': Quantity,
        'Reference': Reference,
        'TaxRate': TaxRate,
        'TotalPriceExcludingTax': TotalPriceExcludingTax,
        'TotalPriceIncludingTax': TotalPriceIncludingTax,
        'TotalTaxAmount': TotalTaxAmount,
        'CreditedAmount': CreditedAmount,
        'Type': JsonConverters.toJson(Type,'ItemType',context!),
        'UnitPrice': UnitPrice,
        'Uri': JsonConverters.toJson(Uri,'Uri',context!)
    };

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

class Order implements IConvertible
{
    Currency? Currency;
    double? TotalFeeExcludingTax;
    double? TotalFeeIncludingTax;
    double? TotalPriceExcludingTax;
    double? TotalPriceIncludingTax;
    double? TotalTaxAmount;
    double? TotalCreditedAmount;
    List<Item>? Items;

    Order({this.Currency,this.TotalFeeExcludingTax,this.TotalFeeIncludingTax,this.TotalPriceExcludingTax,this.TotalPriceIncludingTax,this.TotalTaxAmount,this.TotalCreditedAmount,this.Items});
    Order.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Currency = JsonConverters.fromJson(json['Currency'],'Currency',context!);
        TotalFeeExcludingTax = JsonConverters.toDouble(json['TotalFeeExcludingTax']);
        TotalFeeIncludingTax = JsonConverters.toDouble(json['TotalFeeIncludingTax']);
        TotalPriceExcludingTax = JsonConverters.toDouble(json['TotalPriceExcludingTax']);
        TotalPriceIncludingTax = JsonConverters.toDouble(json['TotalPriceIncludingTax']);
        TotalTaxAmount = JsonConverters.toDouble(json['TotalTaxAmount']);
        TotalCreditedAmount = JsonConverters.toDouble(json['TotalCreditedAmount']);
        Items = JsonConverters.fromJson(json['Items'],'List<Item>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Currency': JsonConverters.toJson(Currency,'Currency',context!),
        'TotalFeeExcludingTax': TotalFeeExcludingTax,
        'TotalFeeIncludingTax': TotalFeeIncludingTax,
        'TotalPriceExcludingTax': TotalPriceExcludingTax,
        'TotalPriceIncludingTax': TotalPriceIncludingTax,
        'TotalTaxAmount': TotalTaxAmount,
        'TotalCreditedAmount': TotalCreditedAmount,
        'Items': JsonConverters.toJson(Items,'List<Item>',context!)
    };

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

class Merchant implements IConvertible
{
    Uri? CheckoutUri;
    Uri? ConfirmationUri;
    Uri? NotificationUri;
    Uri? ValidationUri;
    Uri? TermsUri;
    String? Reference;
    String? PartnerId;

    Merchant({this.CheckoutUri,this.ConfirmationUri,this.NotificationUri,this.ValidationUri,this.TermsUri,this.Reference,this.PartnerId});
    Merchant.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CheckoutUri = JsonConverters.fromJson(json['CheckoutUri'],'Uri',context!);
        ConfirmationUri = JsonConverters.fromJson(json['ConfirmationUri'],'Uri',context!);
        NotificationUri = JsonConverters.fromJson(json['NotificationUri'],'Uri',context!);
        ValidationUri = JsonConverters.fromJson(json['ValidationUri'],'Uri',context!);
        TermsUri = JsonConverters.fromJson(json['TermsUri'],'Uri',context!);
        Reference = json['Reference'];
        PartnerId = json['PartnerId'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CheckoutUri': JsonConverters.toJson(CheckoutUri,'Uri',context!),
        'ConfirmationUri': JsonConverters.toJson(ConfirmationUri,'Uri',context!),
        'NotificationUri': JsonConverters.toJson(NotificationUri,'Uri',context!),
        'ValidationUri': JsonConverters.toJson(ValidationUri,'Uri',context!),
        'TermsUri': JsonConverters.toJson(TermsUri,'Uri',context!),
        'Reference': Reference,
        'PartnerId': PartnerId
    };

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

enum ColorScheme
{
    White,
    Blue,
    Gray,
    GrayTextLogos,
    BlueTextLogos,
    WhiteTextLogos,
    WhiteNoFooter,
    GrayNoFooter,
    BlueNoFooter,
}

class Gui implements IConvertible
{
    ColorScheme? ColorScheme;
    String? Locale;
    bool? RequestPhone;
    bool? PhoneOptional;

    Gui({this.ColorScheme,this.Locale,this.RequestPhone,this.PhoneOptional});
    Gui.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ColorScheme = JsonConverters.fromJson(json['ColorScheme'],'ColorScheme',context!);
        Locale = json['Locale'];
        RequestPhone = json['RequestPhone'];
        PhoneOptional = json['PhoneOptional'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ColorScheme': JsonConverters.toJson(ColorScheme,'ColorScheme',context!),
        'Locale': Locale,
        'RequestPhone': RequestPhone,
        'PhoneOptional': PhoneOptional
    };

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

class History implements IConvertible
{
    DateTime? Created;
    DateTime? ReadyToPay;
    DateTime? ReadyToShip;
    DateTime? Shipped;
    DateTime? PaidToAccount;
    DateTime? Canceled;
    DateTime? Expired;
    DateTime? Denied;

    History({this.Created,this.ReadyToPay,this.ReadyToShip,this.Shipped,this.PaidToAccount,this.Canceled,this.Expired,this.Denied});
    History.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ReadyToPay = JsonConverters.fromJson(json['ReadyToPay'],'DateTime',context!);
        ReadyToShip = JsonConverters.fromJson(json['ReadyToShip'],'DateTime',context!);
        Shipped = JsonConverters.fromJson(json['Shipped'],'DateTime',context!);
        PaidToAccount = JsonConverters.fromJson(json['PaidToAccount'],'DateTime',context!);
        Canceled = JsonConverters.fromJson(json['Canceled'],'DateTime',context!);
        Expired = JsonConverters.fromJson(json['Expired'],'DateTime',context!);
        Denied = JsonConverters.fromJson(json['Denied'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ReadyToPay': JsonConverters.toJson(ReadyToPay,'DateTime',context!),
        'ReadyToShip': JsonConverters.toJson(ReadyToShip,'DateTime',context!),
        'Shipped': JsonConverters.toJson(Shipped,'DateTime',context!),
        'PaidToAccount': JsonConverters.toJson(PaidToAccount,'DateTime',context!),
        'Canceled': JsonConverters.toJson(Canceled,'DateTime',context!),
        'Expired': JsonConverters.toJson(Expired,'DateTime',context!),
        'Denied': JsonConverters.toJson(Denied,'DateTime',context!)
    };

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

class Payson2CheckoutResponse implements IConvertible
{
    String? Id;
    DateTime? ExpirationTime;
    String? Snippet;
    Payson2CheckoutStatus? Status;
    Customer? Customer;
    Order? Order;
    Merchant? Merchant;
    Gui? Gui;
    History? History;
    int? PurchaseId;

    Payson2CheckoutResponse({this.Id,this.ExpirationTime,this.Snippet,this.Status,this.Customer,this.Order,this.Merchant,this.Gui,this.History,this.PurchaseId});
    Payson2CheckoutResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        ExpirationTime = JsonConverters.fromJson(json['ExpirationTime'],'DateTime',context!);
        Snippet = json['Snippet'];
        Status = JsonConverters.fromJson(json['Status'],'Payson2CheckoutStatus',context!);
        Customer = JsonConverters.fromJson(json['Customer'],'Customer',context!);
        Order = JsonConverters.fromJson(json['Order'],'Order',context!);
        Merchant = JsonConverters.fromJson(json['Merchant'],'Merchant',context!);
        Gui = JsonConverters.fromJson(json['Gui'],'Gui',context!);
        History = JsonConverters.fromJson(json['History'],'History',context!);
        PurchaseId = json['PurchaseId'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'ExpirationTime': JsonConverters.toJson(ExpirationTime,'DateTime',context!),
        'Snippet': Snippet,
        'Status': JsonConverters.toJson(Status,'Payson2CheckoutStatus',context!),
        'Customer': JsonConverters.toJson(Customer,'Customer',context!),
        'Order': JsonConverters.toJson(Order,'Order',context!),
        'Merchant': JsonConverters.toJson(Merchant,'Merchant',context!),
        'Gui': JsonConverters.toJson(Gui,'Gui',context!),
        'History': JsonConverters.toJson(History,'History',context!),
        'PurchaseId': PurchaseId
    };

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

class BaseOptions implements INestedOptions, IConvertible
{
    List<String>? Expand;
    Map<String,dynamic?>? ExtraParams;

    BaseOptions({this.Expand,this.ExtraParams});
    BaseOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Expand = JsonConverters.fromJson(json['Expand'],'List<String>',context!);
        ExtraParams = JsonConverters.fromJson(json['ExtraParams'],'Map<String,dynamic?>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Expand': JsonConverters.toJson(Expand,'List<String>',context!),
        'ExtraParams': JsonConverters.toJson(ExtraParams,'Map<String,dynamic?>',context!)
    };

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

class SessionAfterExpirationRecoveryOptions implements INestedOptions, IConvertible
{
    bool? AllowPromotionCodes;
    bool? Enabled;

    SessionAfterExpirationRecoveryOptions({this.AllowPromotionCodes,this.Enabled});
    SessionAfterExpirationRecoveryOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionAfterExpirationOptions implements INestedOptions, IConvertible
{
    SessionAfterExpirationRecoveryOptions? Recovery;

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

    fromMap(Map<String, dynamic> json) {
        Recovery = JsonConverters.fromJson(json['Recovery'],'SessionAfterExpirationRecoveryOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Recovery': JsonConverters.toJson(Recovery,'SessionAfterExpirationRecoveryOptions',context!)
    };

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

class SessionAutomaticTaxLiabilityOptions implements INestedOptions, IConvertible
{
    String? Account;
    String? Type;

    SessionAutomaticTaxLiabilityOptions({this.Account,this.Type});
    SessionAutomaticTaxLiabilityOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionAutomaticTaxOptions implements INestedOptions, IConvertible
{
    bool? Enabled;
    SessionAutomaticTaxLiabilityOptions? Liability;

    SessionAutomaticTaxOptions({this.Enabled,this.Liability});
    SessionAutomaticTaxOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Enabled = json['Enabled'];
        Liability = JsonConverters.fromJson(json['Liability'],'SessionAutomaticTaxLiabilityOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Enabled': Enabled,
        'Liability': JsonConverters.toJson(Liability,'SessionAutomaticTaxLiabilityOptions',context!)
    };

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

class SessionConsentCollectionPaymentMethodReuseAgreementOptions implements INestedOptions, IConvertible
{
    String? Position;

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

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

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

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

class SessionConsentCollectionOptions implements INestedOptions, IConvertible
{
    SessionConsentCollectionPaymentMethodReuseAgreementOptions? PaymentMethodReuseAgreement;
    String? Promotions;
    String? TermsOfService;

    SessionConsentCollectionOptions({this.PaymentMethodReuseAgreement,this.Promotions,this.TermsOfService});
    SessionConsentCollectionOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        PaymentMethodReuseAgreement = JsonConverters.fromJson(json['PaymentMethodReuseAgreement'],'SessionConsentCollectionPaymentMethodReuseAgreementOptions',context!);
        Promotions = json['Promotions'];
        TermsOfService = json['TermsOfService'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'PaymentMethodReuseAgreement': JsonConverters.toJson(PaymentMethodReuseAgreement,'SessionConsentCollectionPaymentMethodReuseAgreementOptions',context!),
        'Promotions': Promotions,
        'TermsOfService': TermsOfService
    };

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

class SessionCustomFieldDropdownOptionOptions implements INestedOptions, IConvertible
{
    String? Label;
    String? Value;

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

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

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

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

class SessionCustomFieldDropdownOptions implements INestedOptions, IConvertible
{
    String? DefaultValue;
    List<SessionCustomFieldDropdownOptionOptions>? Options;

    SessionCustomFieldDropdownOptions({this.DefaultValue,this.Options});
    SessionCustomFieldDropdownOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        DefaultValue = json['DefaultValue'];
        Options = JsonConverters.fromJson(json['Options'],'List<SessionCustomFieldDropdownOptionOptions>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'DefaultValue': DefaultValue,
        'Options': JsonConverters.toJson(Options,'List<SessionCustomFieldDropdownOptionOptions>',context!)
    };

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

class SessionCustomFieldLabelOptions implements INestedOptions, IConvertible
{
    String? Custom;
    String? Type;

    SessionCustomFieldLabelOptions({this.Custom,this.Type});
    SessionCustomFieldLabelOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionCustomFieldNumericOptions implements INestedOptions, IConvertible
{
    String? DefaultValue;
    int? MaximumLength;
    int? MinimumLength;

    SessionCustomFieldNumericOptions({this.DefaultValue,this.MaximumLength,this.MinimumLength});
    SessionCustomFieldNumericOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'DefaultValue': DefaultValue,
        'MaximumLength': MaximumLength,
        'MinimumLength': MinimumLength
    };

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

class SessionCustomFieldTextOptions implements INestedOptions, IConvertible
{
    String? DefaultValue;
    int? MaximumLength;
    int? MinimumLength;

    SessionCustomFieldTextOptions({this.DefaultValue,this.MaximumLength,this.MinimumLength});
    SessionCustomFieldTextOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'DefaultValue': DefaultValue,
        'MaximumLength': MaximumLength,
        'MinimumLength': MinimumLength
    };

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

class SessionCustomFieldOptions implements INestedOptions, IConvertible
{
    SessionCustomFieldDropdownOptions? Dropdown;
    String? Key;
    SessionCustomFieldLabelOptions? Label;
    SessionCustomFieldNumericOptions? Numeric;
    bool? Optional;
    SessionCustomFieldTextOptions? Text;
    String? Type;

    SessionCustomFieldOptions({this.Dropdown,this.Key,this.Label,this.Numeric,this.Optional,this.Text,this.Type});
    SessionCustomFieldOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Dropdown = JsonConverters.fromJson(json['Dropdown'],'SessionCustomFieldDropdownOptions',context!);
        Key = json['Key'];
        Label = JsonConverters.fromJson(json['Label'],'SessionCustomFieldLabelOptions',context!);
        Numeric = JsonConverters.fromJson(json['Numeric'],'SessionCustomFieldNumericOptions',context!);
        Optional = json['Optional'];
        Text = JsonConverters.fromJson(json['Text'],'SessionCustomFieldTextOptions',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Dropdown': JsonConverters.toJson(Dropdown,'SessionCustomFieldDropdownOptions',context!),
        'Key': Key,
        'Label': JsonConverters.toJson(Label,'SessionCustomFieldLabelOptions',context!),
        'Numeric': JsonConverters.toJson(Numeric,'SessionCustomFieldNumericOptions',context!),
        'Optional': Optional,
        'Text': JsonConverters.toJson(Text,'SessionCustomFieldTextOptions',context!),
        'Type': Type
    };

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

class SessionCustomTextAfterSubmitOptions implements INestedOptions, IConvertible
{
    String? Message;

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

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

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

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

class SessionCustomTextShippingAddressOptions implements INestedOptions, IConvertible
{
    String? Message;

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

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

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

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

class SessionCustomTextSubmitOptions implements INestedOptions, IConvertible
{
    String? Message;

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

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

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

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

class SessionCustomTextTermsOfServiceAcceptanceOptions implements INestedOptions, IConvertible
{
    String? Message;

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

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

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

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

class SessionCustomTextOptions implements INestedOptions, IConvertible
{
    SessionCustomTextAfterSubmitOptions? AfterSubmit;
    SessionCustomTextShippingAddressOptions? ShippingAddress;
    SessionCustomTextSubmitOptions? Submit;
    SessionCustomTextTermsOfServiceAcceptanceOptions? TermsOfServiceAcceptance;

    SessionCustomTextOptions({this.AfterSubmit,this.ShippingAddress,this.Submit,this.TermsOfServiceAcceptance});
    SessionCustomTextOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AfterSubmit = JsonConverters.fromJson(json['AfterSubmit'],'SessionCustomTextAfterSubmitOptions',context!);
        ShippingAddress = JsonConverters.fromJson(json['ShippingAddress'],'SessionCustomTextShippingAddressOptions',context!);
        Submit = JsonConverters.fromJson(json['Submit'],'SessionCustomTextSubmitOptions',context!);
        TermsOfServiceAcceptance = JsonConverters.fromJson(json['TermsOfServiceAcceptance'],'SessionCustomTextTermsOfServiceAcceptanceOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AfterSubmit': JsonConverters.toJson(AfterSubmit,'SessionCustomTextAfterSubmitOptions',context!),
        'ShippingAddress': JsonConverters.toJson(ShippingAddress,'SessionCustomTextShippingAddressOptions',context!),
        'Submit': JsonConverters.toJson(Submit,'SessionCustomTextSubmitOptions',context!),
        'TermsOfServiceAcceptance': JsonConverters.toJson(TermsOfServiceAcceptance,'SessionCustomTextTermsOfServiceAcceptanceOptions',context!)
    };

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

class SessionCustomerUpdateOptions implements INestedOptions, IConvertible
{
    String? Address;
    String? Name;
    String? Shipping;

    SessionCustomerUpdateOptions({this.Address,this.Name,this.Shipping});
    SessionCustomerUpdateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'Address': Address,
        'Name': Name,
        'Shipping': Shipping
    };

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

class SessionDiscountOptions implements INestedOptions, IConvertible
{
    String? Coupon;
    String? PromotionCode;

    SessionDiscountOptions({this.Coupon,this.PromotionCode});
    SessionDiscountOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionInvoiceCreationInvoiceDataCustomFieldOptions implements INestedOptions, IConvertible
{
    String? Name;
    String? Value;

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

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

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

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

class SessionInvoiceCreationInvoiceDataIssuerOptions implements INestedOptions, IConvertible
{
    String? Account;
    String? Type;

    SessionInvoiceCreationInvoiceDataIssuerOptions({this.Account,this.Type});
    SessionInvoiceCreationInvoiceDataIssuerOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionInvoiceCreationInvoiceDataRenderingOptionsOptions implements INestedOptions, IConvertible
{
    String? AmountTaxDisplay;

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

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

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

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

class SessionInvoiceCreationInvoiceDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    List<String>? AccountTaxIds;
    List<SessionInvoiceCreationInvoiceDataCustomFieldOptions>? CustomFields;
    String? Description;
    String? Footer;
    SessionInvoiceCreationInvoiceDataIssuerOptions? Issuer;
    Map<String,String?>? Metadata;
    SessionInvoiceCreationInvoiceDataRenderingOptionsOptions? RenderingOptions;

    SessionInvoiceCreationInvoiceDataOptions({this.AccountTaxIds,this.CustomFields,this.Description,this.Footer,this.Issuer,this.Metadata,this.RenderingOptions});
    SessionInvoiceCreationInvoiceDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AccountTaxIds = JsonConverters.fromJson(json['AccountTaxIds'],'List<String>',context!);
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<SessionInvoiceCreationInvoiceDataCustomFieldOptions>',context!);
        Description = json['Description'];
        Footer = json['Footer'];
        Issuer = JsonConverters.fromJson(json['Issuer'],'SessionInvoiceCreationInvoiceDataIssuerOptions',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        RenderingOptions = JsonConverters.fromJson(json['RenderingOptions'],'SessionInvoiceCreationInvoiceDataRenderingOptionsOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AccountTaxIds': JsonConverters.toJson(AccountTaxIds,'List<String>',context!),
        'CustomFields': JsonConverters.toJson(CustomFields,'List<SessionInvoiceCreationInvoiceDataCustomFieldOptions>',context!),
        'Description': Description,
        'Footer': Footer,
        'Issuer': JsonConverters.toJson(Issuer,'SessionInvoiceCreationInvoiceDataIssuerOptions',context!),
        'Metadata': Metadata,
        'RenderingOptions': JsonConverters.toJson(RenderingOptions,'SessionInvoiceCreationInvoiceDataRenderingOptionsOptions',context!)
    };

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

class SessionInvoiceCreationOptions implements INestedOptions, IConvertible
{
    bool? Enabled;
    SessionInvoiceCreationInvoiceDataOptions? InvoiceData;

    SessionInvoiceCreationOptions({this.Enabled,this.InvoiceData});
    SessionInvoiceCreationOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Enabled = json['Enabled'];
        InvoiceData = JsonConverters.fromJson(json['InvoiceData'],'SessionInvoiceCreationInvoiceDataOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Enabled': Enabled,
        'InvoiceData': JsonConverters.toJson(InvoiceData,'SessionInvoiceCreationInvoiceDataOptions',context!)
    };

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

class SessionLineItemAdjustableQuantityOptions implements INestedOptions, IConvertible
{
    bool? Enabled;
    int? Maximum;
    int? Minimum;

    SessionLineItemAdjustableQuantityOptions({this.Enabled,this.Maximum,this.Minimum});
    SessionLineItemAdjustableQuantityOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'Enabled': Enabled,
        'Maximum': Maximum,
        'Minimum': Minimum
    };

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

class SessionLineItemPriceDataProductDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    String? Description;
    List<String>? Images;
    Map<String,String?>? Metadata;
    String? Name;
    String? TaxCode;

    SessionLineItemPriceDataProductDataOptions({this.Description,this.Images,this.Metadata,this.Name,this.TaxCode});
    SessionLineItemPriceDataProductDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Description = json['Description'];
        Images = JsonConverters.fromJson(json['Images'],'List<String>',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Name = json['Name'];
        TaxCode = json['TaxCode'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Description': Description,
        'Images': JsonConverters.toJson(Images,'List<String>',context!),
        'Metadata': Metadata,
        'Name': Name,
        'TaxCode': TaxCode
    };

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

class SessionLineItemPriceDataRecurringOptions implements INestedOptions, IConvertible
{
    String? Interval;
    int? IntervalCount;

    SessionLineItemPriceDataRecurringOptions({this.Interval,this.IntervalCount});
    SessionLineItemPriceDataRecurringOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionLineItemPriceDataOptions implements INestedOptions, IConvertible
{
    String? Currency;
    String? Product;
    SessionLineItemPriceDataProductDataOptions? ProductData;
    SessionLineItemPriceDataRecurringOptions? Recurring;
    String? TaxBehavior;
    int? UnitAmount;
    double? UnitAmountDecimal;

    SessionLineItemPriceDataOptions({this.Currency,this.Product,this.ProductData,this.Recurring,this.TaxBehavior,this.UnitAmount,this.UnitAmountDecimal});
    SessionLineItemPriceDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Currency = json['Currency'];
        Product = json['Product'];
        ProductData = JsonConverters.fromJson(json['ProductData'],'SessionLineItemPriceDataProductDataOptions',context!);
        Recurring = JsonConverters.fromJson(json['Recurring'],'SessionLineItemPriceDataRecurringOptions',context!);
        TaxBehavior = json['TaxBehavior'];
        UnitAmount = json['UnitAmount'];
        UnitAmountDecimal = JsonConverters.toDouble(json['UnitAmountDecimal']);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Currency': Currency,
        'Product': Product,
        'ProductData': JsonConverters.toJson(ProductData,'SessionLineItemPriceDataProductDataOptions',context!),
        'Recurring': JsonConverters.toJson(Recurring,'SessionLineItemPriceDataRecurringOptions',context!),
        'TaxBehavior': TaxBehavior,
        'UnitAmount': UnitAmount,
        'UnitAmountDecimal': UnitAmountDecimal
    };

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

class SessionLineItemOptions implements INestedOptions, IConvertible
{
    SessionLineItemAdjustableQuantityOptions? AdjustableQuantity;
    List<String>? DynamicTaxRates;
    String? Price;
    SessionLineItemPriceDataOptions? PriceData;
    int? Quantity;
    List<String>? TaxRates;

    SessionLineItemOptions({this.AdjustableQuantity,this.DynamicTaxRates,this.Price,this.PriceData,this.Quantity,this.TaxRates});
    SessionLineItemOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AdjustableQuantity = JsonConverters.fromJson(json['AdjustableQuantity'],'SessionLineItemAdjustableQuantityOptions',context!);
        DynamicTaxRates = JsonConverters.fromJson(json['DynamicTaxRates'],'List<String>',context!);
        Price = json['Price'];
        PriceData = JsonConverters.fromJson(json['PriceData'],'SessionLineItemPriceDataOptions',context!);
        Quantity = json['Quantity'];
        TaxRates = JsonConverters.fromJson(json['TaxRates'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AdjustableQuantity': JsonConverters.toJson(AdjustableQuantity,'SessionLineItemAdjustableQuantityOptions',context!),
        'DynamicTaxRates': JsonConverters.toJson(DynamicTaxRates,'List<String>',context!),
        'Price': Price,
        'PriceData': JsonConverters.toJson(PriceData,'SessionLineItemPriceDataOptions',context!),
        'Quantity': Quantity,
        'TaxRates': JsonConverters.toJson(TaxRates,'List<String>',context!)
    };

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

class AddressOptions implements INestedOptions, IConvertible
{
    String? City;
    String? Country;
    String? Line1;
    String? Line2;
    String? PostalCode;
    String? State;

    AddressOptions({this.City,this.Country,this.Line1,this.Line2,this.PostalCode,this.State});
    AddressOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        City = json['City'];
        Country = json['Country'];
        Line1 = json['Line1'];
        Line2 = json['Line2'];
        PostalCode = json['PostalCode'];
        State = json['State'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'City': City,
        'Country': Country,
        'Line1': Line1,
        'Line2': Line2,
        'PostalCode': PostalCode,
        'State': State
    };

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

class ChargeShippingOptions implements INestedOptions, IConvertible
{
    AddressOptions? Address;
    String? Carrier;
    String? Name;
    String? Phone;
    String? TrackingNumber;

    ChargeShippingOptions({this.Address,this.Carrier,this.Name,this.Phone,this.TrackingNumber});
    ChargeShippingOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Address = JsonConverters.fromJson(json['Address'],'AddressOptions',context!);
        Carrier = json['Carrier'];
        Name = json['Name'];
        Phone = json['Phone'];
        TrackingNumber = json['TrackingNumber'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Address': JsonConverters.toJson(Address,'AddressOptions',context!),
        'Carrier': Carrier,
        'Name': Name,
        'Phone': Phone,
        'TrackingNumber': TrackingNumber
    };

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

class SessionPaymentIntentDataTransferDataOptions implements INestedOptions, IConvertible
{
    int? Amount;
    String? Destination;

    SessionPaymentIntentDataTransferDataOptions({this.Amount,this.Destination});
    SessionPaymentIntentDataTransferDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionPaymentIntentDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    int? ApplicationFeeAmount;
    String? CaptureMethod;
    String? Description;
    Map<String,String?>? Metadata;
    String? OnBehalfOf;
    String? ReceiptEmail;
    String? SetupFutureUsage;
    ChargeShippingOptions? Shipping;
    String? StatementDescriptor;
    String? StatementDescriptorSuffix;
    SessionPaymentIntentDataTransferDataOptions? TransferData;
    String? TransferGroup;

    SessionPaymentIntentDataOptions({this.ApplicationFeeAmount,this.CaptureMethod,this.Description,this.Metadata,this.OnBehalfOf,this.ReceiptEmail,this.SetupFutureUsage,this.Shipping,this.StatementDescriptor,this.StatementDescriptorSuffix,this.TransferData,this.TransferGroup});
    SessionPaymentIntentDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ApplicationFeeAmount = json['ApplicationFeeAmount'];
        CaptureMethod = json['CaptureMethod'];
        Description = json['Description'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        OnBehalfOf = json['OnBehalfOf'];
        ReceiptEmail = json['ReceiptEmail'];
        SetupFutureUsage = json['SetupFutureUsage'];
        Shipping = JsonConverters.fromJson(json['Shipping'],'ChargeShippingOptions',context!);
        StatementDescriptor = json['StatementDescriptor'];
        StatementDescriptorSuffix = json['StatementDescriptorSuffix'];
        TransferData = JsonConverters.fromJson(json['TransferData'],'SessionPaymentIntentDataTransferDataOptions',context!);
        TransferGroup = json['TransferGroup'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ApplicationFeeAmount': ApplicationFeeAmount,
        'CaptureMethod': CaptureMethod,
        'Description': Description,
        'Metadata': Metadata,
        'OnBehalfOf': OnBehalfOf,
        'ReceiptEmail': ReceiptEmail,
        'SetupFutureUsage': SetupFutureUsage,
        'Shipping': JsonConverters.toJson(Shipping,'ChargeShippingOptions',context!),
        'StatementDescriptor': StatementDescriptor,
        'StatementDescriptorSuffix': StatementDescriptorSuffix,
        'TransferData': JsonConverters.toJson(TransferData,'SessionPaymentIntentDataTransferDataOptions',context!),
        'TransferGroup': TransferGroup
    };

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

class SessionPaymentMethodDataOptions implements INestedOptions, IConvertible
{
    String? AllowRedisplay;

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

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

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

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

class SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions implements INestedOptions, IConvertible
{
    String? CustomMandateUrl;
    List<String>? DefaultFor;
    String? IntervalDescription;
    String? PaymentSchedule;
    String? TransactionType;

    SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions({this.CustomMandateUrl,this.DefaultFor,this.IntervalDescription,this.PaymentSchedule,this.TransactionType});
    SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CustomMandateUrl = json['CustomMandateUrl'];
        DefaultFor = JsonConverters.fromJson(json['DefaultFor'],'List<String>',context!);
        IntervalDescription = json['IntervalDescription'];
        PaymentSchedule = json['PaymentSchedule'];
        TransactionType = json['TransactionType'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CustomMandateUrl': CustomMandateUrl,
        'DefaultFor': JsonConverters.toJson(DefaultFor,'List<String>',context!),
        'IntervalDescription': IntervalDescription,
        'PaymentSchedule': PaymentSchedule,
        'TransactionType': TransactionType
    };

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

class SessionPaymentMethodOptionsAcssDebitOptions implements INestedOptions, IConvertible
{
    String? Currency;
    SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions? MandateOptions;
    String? SetupFutureUsage;
    String? VerificationMethod;

    SessionPaymentMethodOptionsAcssDebitOptions({this.Currency,this.MandateOptions,this.SetupFutureUsage,this.VerificationMethod});
    SessionPaymentMethodOptionsAcssDebitOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Currency = json['Currency'];
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Currency': Currency,
        'MandateOptions': JsonConverters.toJson(MandateOptions,'SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions',context!),
        'SetupFutureUsage': SetupFutureUsage,
        'VerificationMethod': VerificationMethod
    };

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

class SessionPaymentMethodOptionsAffirmOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsAfterpayClearpayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsAlipayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsAmazonPayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsAuBecsDebitOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsBacsDebitOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsBancontactOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsBoletoOptions implements INestedOptions, IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsBoletoOptions({this.ExpiresAfterDays,this.SetupFutureUsage});
    SessionPaymentMethodOptionsBoletoOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionPaymentMethodOptionsCardInstallmentsOptions implements INestedOptions, IConvertible
{
    bool? Enabled;

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

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

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

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

class SessionPaymentMethodOptionsCardOptions implements INestedOptions, IConvertible
{
    SessionPaymentMethodOptionsCardInstallmentsOptions? Installments;
    String? RequestThreeDSecure;
    String? SetupFutureUsage;
    String? StatementDescriptorSuffixKana;
    String? StatementDescriptorSuffixKanji;

    SessionPaymentMethodOptionsCardOptions({this.Installments,this.RequestThreeDSecure,this.SetupFutureUsage,this.StatementDescriptorSuffixKana,this.StatementDescriptorSuffixKanji});
    SessionPaymentMethodOptionsCardOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Installments = JsonConverters.fromJson(json['Installments'],'SessionPaymentMethodOptionsCardInstallmentsOptions',context!);
        RequestThreeDSecure = json['RequestThreeDSecure'];
        SetupFutureUsage = json['SetupFutureUsage'];
        StatementDescriptorSuffixKana = json['StatementDescriptorSuffixKana'];
        StatementDescriptorSuffixKanji = json['StatementDescriptorSuffixKanji'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Installments': JsonConverters.toJson(Installments,'SessionPaymentMethodOptionsCardInstallmentsOptions',context!),
        'RequestThreeDSecure': RequestThreeDSecure,
        'SetupFutureUsage': SetupFutureUsage,
        'StatementDescriptorSuffixKana': StatementDescriptorSuffixKana,
        'StatementDescriptorSuffixKanji': StatementDescriptorSuffixKanji
    };

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

class SessionPaymentMethodOptionsCashappOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions implements INestedOptions, IConvertible
{
    String? Country;

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

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

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

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

class SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions implements INestedOptions, IConvertible
{
    SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions? EuBankTransfer;
    List<String>? RequestedAddressTypes;
    String? Type;

    SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions({this.EuBankTransfer,this.RequestedAddressTypes,this.Type});
    SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        EuBankTransfer = JsonConverters.fromJson(json['EuBankTransfer'],'SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions',context!);
        RequestedAddressTypes = JsonConverters.fromJson(json['RequestedAddressTypes'],'List<String>',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'EuBankTransfer': JsonConverters.toJson(EuBankTransfer,'SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions',context!),
        'RequestedAddressTypes': JsonConverters.toJson(RequestedAddressTypes,'List<String>',context!),
        'Type': Type
    };

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

class SessionPaymentMethodOptionsCustomerBalanceOptions implements INestedOptions, IConvertible
{
    SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions? BankTransfer;
    String? FundingType;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsCustomerBalanceOptions({this.BankTransfer,this.FundingType,this.SetupFutureUsage});
    SessionPaymentMethodOptionsCustomerBalanceOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        BankTransfer = JsonConverters.fromJson(json['BankTransfer'],'SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions',context!);
        FundingType = json['FundingType'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'BankTransfer': JsonConverters.toJson(BankTransfer,'SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions',context!),
        'FundingType': FundingType,
        'SetupFutureUsage': SetupFutureUsage
    };

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

class SessionPaymentMethodOptionsEpsOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsFpxOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsGiropayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsGrabpayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsIdealOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsKlarnaOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsKonbiniOptions implements INestedOptions, IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsKonbiniOptions({this.ExpiresAfterDays,this.SetupFutureUsage});
    SessionPaymentMethodOptionsKonbiniOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionPaymentMethodOptionsLinkOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsMobilepayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsMultibancoOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsOxxoOptions implements INestedOptions, IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsOxxoOptions({this.ExpiresAfterDays,this.SetupFutureUsage});
    SessionPaymentMethodOptionsOxxoOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionPaymentMethodOptionsP24Options implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;
    bool? TosShownAndAccepted;

    SessionPaymentMethodOptionsP24Options({this.SetupFutureUsage,this.TosShownAndAccepted});
    SessionPaymentMethodOptionsP24Options.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionPaymentMethodOptionsPaynowOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsPaypalOptions implements INestedOptions, IConvertible
{
    String? CaptureMethod;
    String? PreferredLocale;
    String? Reference;
    String? RiskCorrelationId;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsPaypalOptions({this.CaptureMethod,this.PreferredLocale,this.Reference,this.RiskCorrelationId,this.SetupFutureUsage});
    SessionPaymentMethodOptionsPaypalOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CaptureMethod = json['CaptureMethod'];
        PreferredLocale = json['PreferredLocale'];
        Reference = json['Reference'];
        RiskCorrelationId = json['RiskCorrelationId'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CaptureMethod': CaptureMethod,
        'PreferredLocale': PreferredLocale,
        'Reference': Reference,
        'RiskCorrelationId': RiskCorrelationId,
        'SetupFutureUsage': SetupFutureUsage
    };

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

class SessionPaymentMethodOptionsPixOptions implements INestedOptions, IConvertible
{
    int? ExpiresAfterSeconds;

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

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

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

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

class SessionPaymentMethodOptionsRevolutPayOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsSepaDebitOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsSofortOptions implements INestedOptions, IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsSwishOptions implements INestedOptions, IConvertible
{
    String? Reference;

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

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

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

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

class SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions implements INestedOptions, IConvertible
{
    List<String>? Permissions;
    List<String>? Prefetch;

    SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions({this.Permissions,this.Prefetch});
    SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Permissions = JsonConverters.fromJson(json['Permissions'],'List<String>',context!);
        Prefetch = JsonConverters.fromJson(json['Prefetch'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Permissions': JsonConverters.toJson(Permissions,'List<String>',context!),
        'Prefetch': JsonConverters.toJson(Prefetch,'List<String>',context!)
    };

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

class SessionPaymentMethodOptionsUsBankAccountOptions implements INestedOptions, IConvertible
{
    SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions? FinancialConnections;
    String? SetupFutureUsage;
    String? VerificationMethod;

    SessionPaymentMethodOptionsUsBankAccountOptions({this.FinancialConnections,this.SetupFutureUsage,this.VerificationMethod});
    SessionPaymentMethodOptionsUsBankAccountOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        FinancialConnections = JsonConverters.fromJson(json['FinancialConnections'],'SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'FinancialConnections': JsonConverters.toJson(FinancialConnections,'SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions',context!),
        'SetupFutureUsage': SetupFutureUsage,
        'VerificationMethod': VerificationMethod
    };

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

class SessionPaymentMethodOptionsWechatPayOptions implements INestedOptions, IConvertible
{
    String? AppId;
    String? Client;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsWechatPayOptions({this.AppId,this.Client,this.SetupFutureUsage});
    SessionPaymentMethodOptionsWechatPayOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'AppId': AppId,
        'Client': Client,
        'SetupFutureUsage': SetupFutureUsage
    };

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

class SessionPaymentMethodOptionsOptions implements INestedOptions, IConvertible
{
    SessionPaymentMethodOptionsAcssDebitOptions? AcssDebit;
    SessionPaymentMethodOptionsAffirmOptions? Affirm;
    SessionPaymentMethodOptionsAfterpayClearpayOptions? AfterpayClearpay;
    SessionPaymentMethodOptionsAlipayOptions? Alipay;
    SessionPaymentMethodOptionsAmazonPayOptions? AmazonPay;
    SessionPaymentMethodOptionsAuBecsDebitOptions? AuBecsDebit;
    SessionPaymentMethodOptionsBacsDebitOptions? BacsDebit;
    SessionPaymentMethodOptionsBancontactOptions? Bancontact;
    SessionPaymentMethodOptionsBoletoOptions? Boleto;
    SessionPaymentMethodOptionsCardOptions? Card;
    SessionPaymentMethodOptionsCashappOptions? Cashapp;
    SessionPaymentMethodOptionsCustomerBalanceOptions? CustomerBalance;
    SessionPaymentMethodOptionsEpsOptions? Eps;
    SessionPaymentMethodOptionsFpxOptions? Fpx;
    SessionPaymentMethodOptionsGiropayOptions? Giropay;
    SessionPaymentMethodOptionsGrabpayOptions? Grabpay;
    SessionPaymentMethodOptionsIdealOptions? Ideal;
    SessionPaymentMethodOptionsKlarnaOptions? Klarna;
    SessionPaymentMethodOptionsKonbiniOptions? Konbini;
    SessionPaymentMethodOptionsLinkOptions? Link;
    SessionPaymentMethodOptionsMobilepayOptions? Mobilepay;
    SessionPaymentMethodOptionsMultibancoOptions? Multibanco;
    SessionPaymentMethodOptionsOxxoOptions? Oxxo;
    SessionPaymentMethodOptionsP24Options? P24;
    SessionPaymentMethodOptionsPaynowOptions? Paynow;
    SessionPaymentMethodOptionsPaypalOptions? Paypal;
    SessionPaymentMethodOptionsPixOptions? Pix;
    SessionPaymentMethodOptionsRevolutPayOptions? RevolutPay;
    SessionPaymentMethodOptionsSepaDebitOptions? SepaDebit;
    SessionPaymentMethodOptionsSofortOptions? Sofort;
    SessionPaymentMethodOptionsSwishOptions? Swish;
    SessionPaymentMethodOptionsUsBankAccountOptions? UsBankAccount;
    SessionPaymentMethodOptionsWechatPayOptions? WechatPay;

    SessionPaymentMethodOptionsOptions({this.AcssDebit,this.Affirm,this.AfterpayClearpay,this.Alipay,this.AmazonPay,this.AuBecsDebit,this.BacsDebit,this.Bancontact,this.Boleto,this.Card,this.Cashapp,this.CustomerBalance,this.Eps,this.Fpx,this.Giropay,this.Grabpay,this.Ideal,this.Klarna,this.Konbini,this.Link,this.Mobilepay,this.Multibanco,this.Oxxo,this.P24,this.Paynow,this.Paypal,this.Pix,this.RevolutPay,this.SepaDebit,this.Sofort,this.Swish,this.UsBankAccount,this.WechatPay});
    SessionPaymentMethodOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AcssDebit = JsonConverters.fromJson(json['AcssDebit'],'SessionPaymentMethodOptionsAcssDebitOptions',context!);
        Affirm = JsonConverters.fromJson(json['Affirm'],'SessionPaymentMethodOptionsAffirmOptions',context!);
        AfterpayClearpay = JsonConverters.fromJson(json['AfterpayClearpay'],'SessionPaymentMethodOptionsAfterpayClearpayOptions',context!);
        Alipay = JsonConverters.fromJson(json['Alipay'],'SessionPaymentMethodOptionsAlipayOptions',context!);
        AmazonPay = JsonConverters.fromJson(json['AmazonPay'],'SessionPaymentMethodOptionsAmazonPayOptions',context!);
        AuBecsDebit = JsonConverters.fromJson(json['AuBecsDebit'],'SessionPaymentMethodOptionsAuBecsDebitOptions',context!);
        BacsDebit = JsonConverters.fromJson(json['BacsDebit'],'SessionPaymentMethodOptionsBacsDebitOptions',context!);
        Bancontact = JsonConverters.fromJson(json['Bancontact'],'SessionPaymentMethodOptionsBancontactOptions',context!);
        Boleto = JsonConverters.fromJson(json['Boleto'],'SessionPaymentMethodOptionsBoletoOptions',context!);
        Card = JsonConverters.fromJson(json['Card'],'SessionPaymentMethodOptionsCardOptions',context!);
        Cashapp = JsonConverters.fromJson(json['Cashapp'],'SessionPaymentMethodOptionsCashappOptions',context!);
        CustomerBalance = JsonConverters.fromJson(json['CustomerBalance'],'SessionPaymentMethodOptionsCustomerBalanceOptions',context!);
        Eps = JsonConverters.fromJson(json['Eps'],'SessionPaymentMethodOptionsEpsOptions',context!);
        Fpx = JsonConverters.fromJson(json['Fpx'],'SessionPaymentMethodOptionsFpxOptions',context!);
        Giropay = JsonConverters.fromJson(json['Giropay'],'SessionPaymentMethodOptionsGiropayOptions',context!);
        Grabpay = JsonConverters.fromJson(json['Grabpay'],'SessionPaymentMethodOptionsGrabpayOptions',context!);
        Ideal = JsonConverters.fromJson(json['Ideal'],'SessionPaymentMethodOptionsIdealOptions',context!);
        Klarna = JsonConverters.fromJson(json['Klarna'],'SessionPaymentMethodOptionsKlarnaOptions',context!);
        Konbini = JsonConverters.fromJson(json['Konbini'],'SessionPaymentMethodOptionsKonbiniOptions',context!);
        Link = JsonConverters.fromJson(json['Link'],'SessionPaymentMethodOptionsLinkOptions',context!);
        Mobilepay = JsonConverters.fromJson(json['Mobilepay'],'SessionPaymentMethodOptionsMobilepayOptions',context!);
        Multibanco = JsonConverters.fromJson(json['Multibanco'],'SessionPaymentMethodOptionsMultibancoOptions',context!);
        Oxxo = JsonConverters.fromJson(json['Oxxo'],'SessionPaymentMethodOptionsOxxoOptions',context!);
        P24 = JsonConverters.fromJson(json['P24'],'SessionPaymentMethodOptionsP24Options',context!);
        Paynow = JsonConverters.fromJson(json['Paynow'],'SessionPaymentMethodOptionsPaynowOptions',context!);
        Paypal = JsonConverters.fromJson(json['Paypal'],'SessionPaymentMethodOptionsPaypalOptions',context!);
        Pix = JsonConverters.fromJson(json['Pix'],'SessionPaymentMethodOptionsPixOptions',context!);
        RevolutPay = JsonConverters.fromJson(json['RevolutPay'],'SessionPaymentMethodOptionsRevolutPayOptions',context!);
        SepaDebit = JsonConverters.fromJson(json['SepaDebit'],'SessionPaymentMethodOptionsSepaDebitOptions',context!);
        Sofort = JsonConverters.fromJson(json['Sofort'],'SessionPaymentMethodOptionsSofortOptions',context!);
        Swish = JsonConverters.fromJson(json['Swish'],'SessionPaymentMethodOptionsSwishOptions',context!);
        UsBankAccount = JsonConverters.fromJson(json['UsBankAccount'],'SessionPaymentMethodOptionsUsBankAccountOptions',context!);
        WechatPay = JsonConverters.fromJson(json['WechatPay'],'SessionPaymentMethodOptionsWechatPayOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AcssDebit': JsonConverters.toJson(AcssDebit,'SessionPaymentMethodOptionsAcssDebitOptions',context!),
        'Affirm': JsonConverters.toJson(Affirm,'SessionPaymentMethodOptionsAffirmOptions',context!),
        'AfterpayClearpay': JsonConverters.toJson(AfterpayClearpay,'SessionPaymentMethodOptionsAfterpayClearpayOptions',context!),
        'Alipay': JsonConverters.toJson(Alipay,'SessionPaymentMethodOptionsAlipayOptions',context!),
        'AmazonPay': JsonConverters.toJson(AmazonPay,'SessionPaymentMethodOptionsAmazonPayOptions',context!),
        'AuBecsDebit': JsonConverters.toJson(AuBecsDebit,'SessionPaymentMethodOptionsAuBecsDebitOptions',context!),
        'BacsDebit': JsonConverters.toJson(BacsDebit,'SessionPaymentMethodOptionsBacsDebitOptions',context!),
        'Bancontact': JsonConverters.toJson(Bancontact,'SessionPaymentMethodOptionsBancontactOptions',context!),
        'Boleto': JsonConverters.toJson(Boleto,'SessionPaymentMethodOptionsBoletoOptions',context!),
        'Card': JsonConverters.toJson(Card,'SessionPaymentMethodOptionsCardOptions',context!),
        'Cashapp': JsonConverters.toJson(Cashapp,'SessionPaymentMethodOptionsCashappOptions',context!),
        'CustomerBalance': JsonConverters.toJson(CustomerBalance,'SessionPaymentMethodOptionsCustomerBalanceOptions',context!),
        'Eps': JsonConverters.toJson(Eps,'SessionPaymentMethodOptionsEpsOptions',context!),
        'Fpx': JsonConverters.toJson(Fpx,'SessionPaymentMethodOptionsFpxOptions',context!),
        'Giropay': JsonConverters.toJson(Giropay,'SessionPaymentMethodOptionsGiropayOptions',context!),
        'Grabpay': JsonConverters.toJson(Grabpay,'SessionPaymentMethodOptionsGrabpayOptions',context!),
        'Ideal': JsonConverters.toJson(Ideal,'SessionPaymentMethodOptionsIdealOptions',context!),
        'Klarna': JsonConverters.toJson(Klarna,'SessionPaymentMethodOptionsKlarnaOptions',context!),
        'Konbini': JsonConverters.toJson(Konbini,'SessionPaymentMethodOptionsKonbiniOptions',context!),
        'Link': JsonConverters.toJson(Link,'SessionPaymentMethodOptionsLinkOptions',context!),
        'Mobilepay': JsonConverters.toJson(Mobilepay,'SessionPaymentMethodOptionsMobilepayOptions',context!),
        'Multibanco': JsonConverters.toJson(Multibanco,'SessionPaymentMethodOptionsMultibancoOptions',context!),
        'Oxxo': JsonConverters.toJson(Oxxo,'SessionPaymentMethodOptionsOxxoOptions',context!),
        'P24': JsonConverters.toJson(P24,'SessionPaymentMethodOptionsP24Options',context!),
        'Paynow': JsonConverters.toJson(Paynow,'SessionPaymentMethodOptionsPaynowOptions',context!),
        'Paypal': JsonConverters.toJson(Paypal,'SessionPaymentMethodOptionsPaypalOptions',context!),
        'Pix': JsonConverters.toJson(Pix,'SessionPaymentMethodOptionsPixOptions',context!),
        'RevolutPay': JsonConverters.toJson(RevolutPay,'SessionPaymentMethodOptionsRevolutPayOptions',context!),
        'SepaDebit': JsonConverters.toJson(SepaDebit,'SessionPaymentMethodOptionsSepaDebitOptions',context!),
        'Sofort': JsonConverters.toJson(Sofort,'SessionPaymentMethodOptionsSofortOptions',context!),
        'Swish': JsonConverters.toJson(Swish,'SessionPaymentMethodOptionsSwishOptions',context!),
        'UsBankAccount': JsonConverters.toJson(UsBankAccount,'SessionPaymentMethodOptionsUsBankAccountOptions',context!),
        'WechatPay': JsonConverters.toJson(WechatPay,'SessionPaymentMethodOptionsWechatPayOptions',context!)
    };

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

class SessionPhoneNumberCollectionOptions implements INestedOptions, IConvertible
{
    bool? Enabled;

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

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

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

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

class SessionSavedPaymentMethodOptionsOptions implements INestedOptions, IConvertible
{
    List<String>? AllowRedisplayFilters;
    String? PaymentMethodSave;

    SessionSavedPaymentMethodOptionsOptions({this.AllowRedisplayFilters,this.PaymentMethodSave});
    SessionSavedPaymentMethodOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AllowRedisplayFilters = JsonConverters.fromJson(json['AllowRedisplayFilters'],'List<String>',context!);
        PaymentMethodSave = json['PaymentMethodSave'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AllowRedisplayFilters': JsonConverters.toJson(AllowRedisplayFilters,'List<String>',context!),
        'PaymentMethodSave': PaymentMethodSave
    };

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

class SessionSetupIntentDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    String? Description;
    Map<String,String?>? Metadata;
    String? OnBehalfOf;

    SessionSetupIntentDataOptions({this.Description,this.Metadata,this.OnBehalfOf});
    SessionSetupIntentDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Description = json['Description'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        OnBehalfOf = json['OnBehalfOf'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Description': Description,
        'Metadata': Metadata,
        'OnBehalfOf': OnBehalfOf
    };

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

class SessionShippingAddressCollectionOptions implements INestedOptions, IConvertible
{
    List<String>? AllowedCountries;

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

    fromMap(Map<String, dynamic> json) {
        AllowedCountries = JsonConverters.fromJson(json['AllowedCountries'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AllowedCountries': JsonConverters.toJson(AllowedCountries,'List<String>',context!)
    };

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

class SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions implements INestedOptions, IConvertible
{
    String? Unit;
    int? Value;

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

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

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

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

class SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions implements INestedOptions, IConvertible
{
    String? Unit;
    int? Value;

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

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

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

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

class SessionShippingOptionShippingRateDataDeliveryEstimateOptions implements INestedOptions, IConvertible
{
    SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions? Maximum;
    SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions? Minimum;

    SessionShippingOptionShippingRateDataDeliveryEstimateOptions({this.Maximum,this.Minimum});
    SessionShippingOptionShippingRateDataDeliveryEstimateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Maximum = JsonConverters.fromJson(json['Maximum'],'SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions',context!);
        Minimum = JsonConverters.fromJson(json['Minimum'],'SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Maximum': JsonConverters.toJson(Maximum,'SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions',context!),
        'Minimum': JsonConverters.toJson(Minimum,'SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions',context!)
    };

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

class SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions implements INestedOptions, IConvertible
{
    int? Amount;
    String? TaxBehavior;

    SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions({this.Amount,this.TaxBehavior});
    SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionShippingOptionShippingRateDataFixedAmountOptions implements INestedOptions, IConvertible
{
    int? Amount;
    String? Currency;
    Map<String,SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions?>? CurrencyOptions;

    SessionShippingOptionShippingRateDataFixedAmountOptions({this.Amount,this.Currency,this.CurrencyOptions});
    SessionShippingOptionShippingRateDataFixedAmountOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Amount = json['Amount'];
        Currency = json['Currency'];
        CurrencyOptions = JsonConverters.fromJson(json['CurrencyOptions'],'Map<String,SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions?>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Amount': Amount,
        'Currency': Currency,
        'CurrencyOptions': JsonConverters.toJson(CurrencyOptions,'Map<String,SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions?>',context!)
    };

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

class SessionShippingOptionShippingRateDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    SessionShippingOptionShippingRateDataDeliveryEstimateOptions? DeliveryEstimate;
    String? DisplayName;
    SessionShippingOptionShippingRateDataFixedAmountOptions? FixedAmount;
    Map<String,String?>? Metadata;
    String? TaxBehavior;
    String? TaxCode;
    String? Type;

    SessionShippingOptionShippingRateDataOptions({this.DeliveryEstimate,this.DisplayName,this.FixedAmount,this.Metadata,this.TaxBehavior,this.TaxCode,this.Type});
    SessionShippingOptionShippingRateDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        DeliveryEstimate = JsonConverters.fromJson(json['DeliveryEstimate'],'SessionShippingOptionShippingRateDataDeliveryEstimateOptions',context!);
        DisplayName = json['DisplayName'];
        FixedAmount = JsonConverters.fromJson(json['FixedAmount'],'SessionShippingOptionShippingRateDataFixedAmountOptions',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        TaxBehavior = json['TaxBehavior'];
        TaxCode = json['TaxCode'];
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'DeliveryEstimate': JsonConverters.toJson(DeliveryEstimate,'SessionShippingOptionShippingRateDataDeliveryEstimateOptions',context!),
        'DisplayName': DisplayName,
        'FixedAmount': JsonConverters.toJson(FixedAmount,'SessionShippingOptionShippingRateDataFixedAmountOptions',context!),
        'Metadata': Metadata,
        'TaxBehavior': TaxBehavior,
        'TaxCode': TaxCode,
        'Type': Type
    };

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

class SessionShippingOptionOptions implements INestedOptions, IConvertible
{
    String? ShippingRate;
    SessionShippingOptionShippingRateDataOptions? ShippingRateData;

    SessionShippingOptionOptions({this.ShippingRate,this.ShippingRateData});
    SessionShippingOptionOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ShippingRate = json['ShippingRate'];
        ShippingRateData = JsonConverters.fromJson(json['ShippingRateData'],'SessionShippingOptionShippingRateDataOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ShippingRate': ShippingRate,
        'ShippingRateData': JsonConverters.toJson(ShippingRateData,'SessionShippingOptionShippingRateDataOptions',context!)
    };

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

class SessionSubscriptionDataInvoiceSettingsIssuerOptions implements INestedOptions, IConvertible
{
    String? Account;
    String? Type;

    SessionSubscriptionDataInvoiceSettingsIssuerOptions({this.Account,this.Type});
    SessionSubscriptionDataInvoiceSettingsIssuerOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionSubscriptionDataInvoiceSettingsOptions implements INestedOptions, IConvertible
{
    SessionSubscriptionDataInvoiceSettingsIssuerOptions? Issuer;

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

    fromMap(Map<String, dynamic> json) {
        Issuer = JsonConverters.fromJson(json['Issuer'],'SessionSubscriptionDataInvoiceSettingsIssuerOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Issuer': JsonConverters.toJson(Issuer,'SessionSubscriptionDataInvoiceSettingsIssuerOptions',context!)
    };

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

class SessionSubscriptionDataTransferDataOptions implements INestedOptions, IConvertible
{
    double? AmountPercent;
    String? Destination;

    SessionSubscriptionDataTransferDataOptions({this.AmountPercent,this.Destination});
    SessionSubscriptionDataTransferDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AmountPercent = JsonConverters.toDouble(json['AmountPercent']);
        Destination = json['Destination'];
        return this;
    }

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

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

class SessionSubscriptionDataTrialSettingsEndBehaviorOptions implements INestedOptions, IConvertible
{
    String? MissingPaymentMethod;

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

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

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

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

class SessionSubscriptionDataTrialSettingsOptions implements INestedOptions, IConvertible
{
    SessionSubscriptionDataTrialSettingsEndBehaviorOptions? EndBehavior;

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

    fromMap(Map<String, dynamic> json) {
        EndBehavior = JsonConverters.fromJson(json['EndBehavior'],'SessionSubscriptionDataTrialSettingsEndBehaviorOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'EndBehavior': JsonConverters.toJson(EndBehavior,'SessionSubscriptionDataTrialSettingsEndBehaviorOptions',context!)
    };

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

class SessionSubscriptionDataOptions implements INestedOptions, IHasMetadata, IConvertible
{
    double? ApplicationFeePercent;
    DateTime? BillingCycleAnchor;
    List<String>? DefaultTaxRates;
    String? Description;
    SessionSubscriptionDataInvoiceSettingsOptions? InvoiceSettings;
    Map<String,String?>? Metadata;
    String? OnBehalfOf;
    String? ProrationBehavior;
    SessionSubscriptionDataTransferDataOptions? TransferData;
    DateTime? TrialEnd;
    int? TrialPeriodDays;
    SessionSubscriptionDataTrialSettingsOptions? TrialSettings;

    SessionSubscriptionDataOptions({this.ApplicationFeePercent,this.BillingCycleAnchor,this.DefaultTaxRates,this.Description,this.InvoiceSettings,this.Metadata,this.OnBehalfOf,this.ProrationBehavior,this.TransferData,this.TrialEnd,this.TrialPeriodDays,this.TrialSettings});
    SessionSubscriptionDataOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ApplicationFeePercent = JsonConverters.toDouble(json['ApplicationFeePercent']);
        BillingCycleAnchor = JsonConverters.fromJson(json['BillingCycleAnchor'],'DateTime',context!);
        DefaultTaxRates = JsonConverters.fromJson(json['DefaultTaxRates'],'List<String>',context!);
        Description = json['Description'];
        InvoiceSettings = JsonConverters.fromJson(json['InvoiceSettings'],'SessionSubscriptionDataInvoiceSettingsOptions',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        OnBehalfOf = json['OnBehalfOf'];
        ProrationBehavior = json['ProrationBehavior'];
        TransferData = JsonConverters.fromJson(json['TransferData'],'SessionSubscriptionDataTransferDataOptions',context!);
        TrialEnd = JsonConverters.fromJson(json['TrialEnd'],'DateTime',context!);
        TrialPeriodDays = json['TrialPeriodDays'];
        TrialSettings = JsonConverters.fromJson(json['TrialSettings'],'SessionSubscriptionDataTrialSettingsOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ApplicationFeePercent': ApplicationFeePercent,
        'BillingCycleAnchor': JsonConverters.toJson(BillingCycleAnchor,'DateTime',context!),
        'DefaultTaxRates': JsonConverters.toJson(DefaultTaxRates,'List<String>',context!),
        'Description': Description,
        'InvoiceSettings': JsonConverters.toJson(InvoiceSettings,'SessionSubscriptionDataInvoiceSettingsOptions',context!),
        'Metadata': Metadata,
        'OnBehalfOf': OnBehalfOf,
        'ProrationBehavior': ProrationBehavior,
        'TransferData': JsonConverters.toJson(TransferData,'SessionSubscriptionDataTransferDataOptions',context!),
        'TrialEnd': JsonConverters.toJson(TrialEnd,'DateTime',context!),
        'TrialPeriodDays': TrialPeriodDays,
        'TrialSettings': JsonConverters.toJson(TrialSettings,'SessionSubscriptionDataTrialSettingsOptions',context!)
    };

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

class SessionTaxIdCollectionOptions implements INestedOptions, IConvertible
{
    bool? Enabled;
    String? Required;

    SessionTaxIdCollectionOptions({this.Enabled,this.Required});
    SessionTaxIdCollectionOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionCreateOptions extends BaseOptions implements IHasMetadata, IConvertible
{
    SessionAfterExpirationOptions? AfterExpiration;
    bool? AllowPromotionCodes;
    SessionAutomaticTaxOptions? AutomaticTax;
    String? BillingAddressCollection;
    String? CancelUrl;
    String? ClientReferenceId;
    SessionConsentCollectionOptions? ConsentCollection;
    String? Currency;
    List<SessionCustomFieldOptions>? CustomFields;
    SessionCustomTextOptions? CustomText;
    String? Customer;
    String? CustomerCreation;
    String? CustomerEmail;
    SessionCustomerUpdateOptions? CustomerUpdate;
    List<SessionDiscountOptions>? Discounts;
    DateTime? ExpiresAt;
    SessionInvoiceCreationOptions? InvoiceCreation;
    List<SessionLineItemOptions>? LineItems;
    String? Locale;
    Map<String,String?>? Metadata;
    String? Mode;
    SessionPaymentIntentDataOptions? PaymentIntentData;
    String? PaymentMethodCollection;
    String? PaymentMethodConfiguration;
    SessionPaymentMethodDataOptions? PaymentMethodData;
    SessionPaymentMethodOptionsOptions? PaymentMethodOptions;
    List<String>? PaymentMethodTypes;
    SessionPhoneNumberCollectionOptions? PhoneNumberCollection;
    String? RedirectOnCompletion;
    String? ReturnUrl;
    SessionSavedPaymentMethodOptionsOptions? SavedPaymentMethodOptions;
    SessionSetupIntentDataOptions? SetupIntentData;
    SessionShippingAddressCollectionOptions? ShippingAddressCollection;
    List<SessionShippingOptionOptions>? ShippingOptions;
    String? SubmitType;
    SessionSubscriptionDataOptions? SubscriptionData;
    String? SuccessUrl;
    SessionTaxIdCollectionOptions? TaxIdCollection;
    String? UiMode;

    SessionCreateOptions({this.AfterExpiration,this.AllowPromotionCodes,this.AutomaticTax,this.BillingAddressCollection,this.CancelUrl,this.ClientReferenceId,this.ConsentCollection,this.Currency,this.CustomFields,this.CustomText,this.Customer,this.CustomerCreation,this.CustomerEmail,this.CustomerUpdate,this.Discounts,this.ExpiresAt,this.InvoiceCreation,this.LineItems,this.Locale,this.Metadata,this.Mode,this.PaymentIntentData,this.PaymentMethodCollection,this.PaymentMethodConfiguration,this.PaymentMethodData,this.PaymentMethodOptions,this.PaymentMethodTypes,this.PhoneNumberCollection,this.RedirectOnCompletion,this.ReturnUrl,this.SavedPaymentMethodOptions,this.SetupIntentData,this.ShippingAddressCollection,this.ShippingOptions,this.SubmitType,this.SubscriptionData,this.SuccessUrl,this.TaxIdCollection,this.UiMode});
    SessionCreateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AfterExpiration = JsonConverters.fromJson(json['AfterExpiration'],'SessionAfterExpirationOptions',context!);
        AllowPromotionCodes = json['AllowPromotionCodes'];
        AutomaticTax = JsonConverters.fromJson(json['AutomaticTax'],'SessionAutomaticTaxOptions',context!);
        BillingAddressCollection = json['BillingAddressCollection'];
        CancelUrl = json['CancelUrl'];
        ClientReferenceId = json['ClientReferenceId'];
        ConsentCollection = JsonConverters.fromJson(json['ConsentCollection'],'SessionConsentCollectionOptions',context!);
        Currency = json['Currency'];
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<SessionCustomFieldOptions>',context!);
        CustomText = JsonConverters.fromJson(json['CustomText'],'SessionCustomTextOptions',context!);
        Customer = json['Customer'];
        CustomerCreation = json['CustomerCreation'];
        CustomerEmail = json['CustomerEmail'];
        CustomerUpdate = JsonConverters.fromJson(json['CustomerUpdate'],'SessionCustomerUpdateOptions',context!);
        Discounts = JsonConverters.fromJson(json['Discounts'],'List<SessionDiscountOptions>',context!);
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        InvoiceCreation = JsonConverters.fromJson(json['InvoiceCreation'],'SessionInvoiceCreationOptions',context!);
        LineItems = JsonConverters.fromJson(json['LineItems'],'List<SessionLineItemOptions>',context!);
        Locale = json['Locale'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Mode = json['Mode'];
        PaymentIntentData = JsonConverters.fromJson(json['PaymentIntentData'],'SessionPaymentIntentDataOptions',context!);
        PaymentMethodCollection = json['PaymentMethodCollection'];
        PaymentMethodConfiguration = json['PaymentMethodConfiguration'];
        PaymentMethodData = JsonConverters.fromJson(json['PaymentMethodData'],'SessionPaymentMethodDataOptions',context!);
        PaymentMethodOptions = JsonConverters.fromJson(json['PaymentMethodOptions'],'SessionPaymentMethodOptionsOptions',context!);
        PaymentMethodTypes = JsonConverters.fromJson(json['PaymentMethodTypes'],'List<String>',context!);
        PhoneNumberCollection = JsonConverters.fromJson(json['PhoneNumberCollection'],'SessionPhoneNumberCollectionOptions',context!);
        RedirectOnCompletion = json['RedirectOnCompletion'];
        ReturnUrl = json['ReturnUrl'];
        SavedPaymentMethodOptions = JsonConverters.fromJson(json['SavedPaymentMethodOptions'],'SessionSavedPaymentMethodOptionsOptions',context!);
        SetupIntentData = JsonConverters.fromJson(json['SetupIntentData'],'SessionSetupIntentDataOptions',context!);
        ShippingAddressCollection = JsonConverters.fromJson(json['ShippingAddressCollection'],'SessionShippingAddressCollectionOptions',context!);
        ShippingOptions = JsonConverters.fromJson(json['ShippingOptions'],'List<SessionShippingOptionOptions>',context!);
        SubmitType = json['SubmitType'];
        SubscriptionData = JsonConverters.fromJson(json['SubscriptionData'],'SessionSubscriptionDataOptions',context!);
        SuccessUrl = json['SuccessUrl'];
        TaxIdCollection = JsonConverters.fromJson(json['TaxIdCollection'],'SessionTaxIdCollectionOptions',context!);
        UiMode = json['UiMode'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AfterExpiration': JsonConverters.toJson(AfterExpiration,'SessionAfterExpirationOptions',context!),
        'AllowPromotionCodes': AllowPromotionCodes,
        'AutomaticTax': JsonConverters.toJson(AutomaticTax,'SessionAutomaticTaxOptions',context!),
        'BillingAddressCollection': BillingAddressCollection,
        'CancelUrl': CancelUrl,
        'ClientReferenceId': ClientReferenceId,
        'ConsentCollection': JsonConverters.toJson(ConsentCollection,'SessionConsentCollectionOptions',context!),
        'Currency': Currency,
        'CustomFields': JsonConverters.toJson(CustomFields,'List<SessionCustomFieldOptions>',context!),
        'CustomText': JsonConverters.toJson(CustomText,'SessionCustomTextOptions',context!),
        'Customer': Customer,
        'CustomerCreation': CustomerCreation,
        'CustomerEmail': CustomerEmail,
        'CustomerUpdate': JsonConverters.toJson(CustomerUpdate,'SessionCustomerUpdateOptions',context!),
        'Discounts': JsonConverters.toJson(Discounts,'List<SessionDiscountOptions>',context!),
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'InvoiceCreation': JsonConverters.toJson(InvoiceCreation,'SessionInvoiceCreationOptions',context!),
        'LineItems': JsonConverters.toJson(LineItems,'List<SessionLineItemOptions>',context!),
        'Locale': Locale,
        'Metadata': Metadata,
        'Mode': Mode,
        'PaymentIntentData': JsonConverters.toJson(PaymentIntentData,'SessionPaymentIntentDataOptions',context!),
        'PaymentMethodCollection': PaymentMethodCollection,
        'PaymentMethodConfiguration': PaymentMethodConfiguration,
        'PaymentMethodData': JsonConverters.toJson(PaymentMethodData,'SessionPaymentMethodDataOptions',context!),
        'PaymentMethodOptions': JsonConverters.toJson(PaymentMethodOptions,'SessionPaymentMethodOptionsOptions',context!),
        'PaymentMethodTypes': JsonConverters.toJson(PaymentMethodTypes,'List<String>',context!),
        'PhoneNumberCollection': JsonConverters.toJson(PhoneNumberCollection,'SessionPhoneNumberCollectionOptions',context!),
        'RedirectOnCompletion': RedirectOnCompletion,
        'ReturnUrl': ReturnUrl,
        'SavedPaymentMethodOptions': JsonConverters.toJson(SavedPaymentMethodOptions,'SessionSavedPaymentMethodOptionsOptions',context!),
        'SetupIntentData': JsonConverters.toJson(SetupIntentData,'SessionSetupIntentDataOptions',context!),
        'ShippingAddressCollection': JsonConverters.toJson(ShippingAddressCollection,'SessionShippingAddressCollectionOptions',context!),
        'ShippingOptions': JsonConverters.toJson(ShippingOptions,'List<SessionShippingOptionOptions>',context!),
        'SubmitType': SubmitType,
        'SubscriptionData': JsonConverters.toJson(SubscriptionData,'SessionSubscriptionDataOptions',context!),
        'SuccessUrl': SuccessUrl,
        'TaxIdCollection': JsonConverters.toJson(TaxIdCollection,'SessionTaxIdCollectionOptions',context!),
        'UiMode': UiMode
    });

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

class SessionAfterExpirationRecovery extends StripeEntity1<SessionAfterExpirationRecovery> implements IConvertible
{
    bool? AllowPromotionCodes;
    bool? Enabled;
    DateTime? ExpiresAt;
    String? Url;

    SessionAfterExpirationRecovery({this.AllowPromotionCodes,this.Enabled,this.ExpiresAt,this.Url});
    SessionAfterExpirationRecovery.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AllowPromotionCodes = json['AllowPromotionCodes'];
        Enabled = json['Enabled'];
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        Url = json['Url'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AllowPromotionCodes': AllowPromotionCodes,
        'Enabled': Enabled,
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'Url': Url
    });

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

class SessionAfterExpiration extends StripeEntity1<SessionAfterExpiration> implements IConvertible
{
    SessionAfterExpirationRecovery? Recovery;

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

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Recovery = JsonConverters.fromJson(json['Recovery'],'SessionAfterExpirationRecovery',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Recovery': JsonConverters.toJson(Recovery,'SessionAfterExpirationRecovery',context!)
    });

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

class SessionAutomaticTaxLiability extends StripeEntity1<SessionAutomaticTaxLiability> implements IConvertible
{
    String? Type;

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

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

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

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

class SessionAutomaticTax extends StripeEntity1<SessionAutomaticTax> implements IConvertible
{
    bool? Enabled;
    SessionAutomaticTaxLiability? Liability;
    String? Status;

    SessionAutomaticTax({this.Enabled,this.Liability,this.Status});
    SessionAutomaticTax.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Enabled = json['Enabled'];
        Liability = JsonConverters.fromJson(json['Liability'],'SessionAutomaticTaxLiability',context!);
        Status = json['Status'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Enabled': Enabled,
        'Liability': JsonConverters.toJson(Liability,'SessionAutomaticTaxLiability',context!),
        'Status': Status
    });

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

class SessionConsent extends StripeEntity1<SessionConsent> implements IConvertible
{
    String? Promotions;
    String? TermsOfService;

    SessionConsent({this.Promotions,this.TermsOfService});
    SessionConsent.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionConsentCollectionPaymentMethodReuseAgreement extends StripeEntity1<SessionConsentCollectionPaymentMethodReuseAgreement> implements IConvertible
{
    String? Position;

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

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

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

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

class SessionConsentCollection extends StripeEntity1<SessionConsentCollection> implements IConvertible
{
    SessionConsentCollectionPaymentMethodReuseAgreement? PaymentMethodReuseAgreement;
    String? Promotions;
    String? TermsOfService;

    SessionConsentCollection({this.PaymentMethodReuseAgreement,this.Promotions,this.TermsOfService});
    SessionConsentCollection.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        PaymentMethodReuseAgreement = JsonConverters.fromJson(json['PaymentMethodReuseAgreement'],'SessionConsentCollectionPaymentMethodReuseAgreement',context!);
        Promotions = json['Promotions'];
        TermsOfService = json['TermsOfService'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'PaymentMethodReuseAgreement': JsonConverters.toJson(PaymentMethodReuseAgreement,'SessionConsentCollectionPaymentMethodReuseAgreement',context!),
        'Promotions': Promotions,
        'TermsOfService': TermsOfService
    });

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

class SessionCurrencyConversion extends StripeEntity1<SessionCurrencyConversion> implements IConvertible
{
    int? AmountSubtotal;
    int? AmountTotal;
    double? FxRate;
    String? SourceCurrency;

    SessionCurrencyConversion({this.AmountSubtotal,this.AmountTotal,this.FxRate,this.SourceCurrency});
    SessionCurrencyConversion.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AmountSubtotal = json['AmountSubtotal'];
        AmountTotal = json['AmountTotal'];
        FxRate = JsonConverters.toDouble(json['FxRate']);
        SourceCurrency = json['SourceCurrency'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AmountSubtotal': AmountSubtotal,
        'AmountTotal': AmountTotal,
        'FxRate': FxRate,
        'SourceCurrency': SourceCurrency
    });

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

class SessionCustomFieldDropdownOption extends StripeEntity1<SessionCustomFieldDropdownOption> implements IConvertible
{
    String? Label;
    String? Value;

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

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

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

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

class SessionCustomFieldDropdown extends StripeEntity1<SessionCustomFieldDropdown> implements IConvertible
{
    String? DefaultValue;
    List<SessionCustomFieldDropdownOption>? Options;
    String? Value;

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

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DefaultValue = json['DefaultValue'];
        Options = JsonConverters.fromJson(json['Options'],'List<SessionCustomFieldDropdownOption>',context!);
        Value = json['Value'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DefaultValue': DefaultValue,
        'Options': JsonConverters.toJson(Options,'List<SessionCustomFieldDropdownOption>',context!),
        'Value': Value
    });

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

class SessionCustomFieldLabel extends StripeEntity1<SessionCustomFieldLabel> implements IConvertible
{
    String? Custom;
    String? Type;

    SessionCustomFieldLabel({this.Custom,this.Type});
    SessionCustomFieldLabel.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionCustomFieldNumeric extends StripeEntity1<SessionCustomFieldNumeric> implements IConvertible
{
    String? DefaultValue;
    int? MaximumLength;
    int? MinimumLength;
    String? Value;

    SessionCustomFieldNumeric({this.DefaultValue,this.MaximumLength,this.MinimumLength,this.Value});
    SessionCustomFieldNumeric.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DefaultValue': DefaultValue,
        'MaximumLength': MaximumLength,
        'MinimumLength': MinimumLength,
        'Value': Value
    });

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

class SessionCustomFieldText extends StripeEntity1<SessionCustomFieldText> implements IConvertible
{
    String? DefaultValue;
    int? MaximumLength;
    int? MinimumLength;
    String? Value;

    SessionCustomFieldText({this.DefaultValue,this.MaximumLength,this.MinimumLength,this.Value});
    SessionCustomFieldText.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DefaultValue': DefaultValue,
        'MaximumLength': MaximumLength,
        'MinimumLength': MinimumLength,
        'Value': Value
    });

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

class SessionCustomField extends StripeEntity1<SessionCustomField> implements IConvertible
{
    SessionCustomFieldDropdown? Dropdown;
    String? Key;
    SessionCustomFieldLabel? Label;
    SessionCustomFieldNumeric? Numeric;
    bool? Optional;
    SessionCustomFieldText? Text;
    String? Type;

    SessionCustomField({this.Dropdown,this.Key,this.Label,this.Numeric,this.Optional,this.Text,this.Type});
    SessionCustomField.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Dropdown = JsonConverters.fromJson(json['Dropdown'],'SessionCustomFieldDropdown',context!);
        Key = json['Key'];
        Label = JsonConverters.fromJson(json['Label'],'SessionCustomFieldLabel',context!);
        Numeric = JsonConverters.fromJson(json['Numeric'],'SessionCustomFieldNumeric',context!);
        Optional = json['Optional'];
        Text = JsonConverters.fromJson(json['Text'],'SessionCustomFieldText',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Dropdown': JsonConverters.toJson(Dropdown,'SessionCustomFieldDropdown',context!),
        'Key': Key,
        'Label': JsonConverters.toJson(Label,'SessionCustomFieldLabel',context!),
        'Numeric': JsonConverters.toJson(Numeric,'SessionCustomFieldNumeric',context!),
        'Optional': Optional,
        'Text': JsonConverters.toJson(Text,'SessionCustomFieldText',context!),
        'Type': Type
    });

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

class SessionCustomTextAfterSubmit extends StripeEntity1<SessionCustomTextAfterSubmit> implements IConvertible
{
    String? Message;

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

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

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

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

class SessionCustomTextShippingAddress extends StripeEntity1<SessionCustomTextShippingAddress> implements IConvertible
{
    String? Message;

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

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

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

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

class SessionCustomTextSubmit extends StripeEntity1<SessionCustomTextSubmit> implements IConvertible
{
    String? Message;

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

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

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

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

class SessionCustomTextTermsOfServiceAcceptance extends StripeEntity1<SessionCustomTextTermsOfServiceAcceptance> implements IConvertible
{
    String? Message;

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

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

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

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

class SessionCustomText extends StripeEntity1<SessionCustomText> implements IConvertible
{
    SessionCustomTextAfterSubmit? AfterSubmit;
    SessionCustomTextShippingAddress? ShippingAddress;
    SessionCustomTextSubmit? Submit;
    SessionCustomTextTermsOfServiceAcceptance? TermsOfServiceAcceptance;

    SessionCustomText({this.AfterSubmit,this.ShippingAddress,this.Submit,this.TermsOfServiceAcceptance});
    SessionCustomText.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AfterSubmit = JsonConverters.fromJson(json['AfterSubmit'],'SessionCustomTextAfterSubmit',context!);
        ShippingAddress = JsonConverters.fromJson(json['ShippingAddress'],'SessionCustomTextShippingAddress',context!);
        Submit = JsonConverters.fromJson(json['Submit'],'SessionCustomTextSubmit',context!);
        TermsOfServiceAcceptance = JsonConverters.fromJson(json['TermsOfServiceAcceptance'],'SessionCustomTextTermsOfServiceAcceptance',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AfterSubmit': JsonConverters.toJson(AfterSubmit,'SessionCustomTextAfterSubmit',context!),
        'ShippingAddress': JsonConverters.toJson(ShippingAddress,'SessionCustomTextShippingAddress',context!),
        'Submit': JsonConverters.toJson(Submit,'SessionCustomTextSubmit',context!),
        'TermsOfServiceAcceptance': JsonConverters.toJson(TermsOfServiceAcceptance,'SessionCustomTextTermsOfServiceAcceptance',context!)
    });

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

class Address extends StripeEntity1<Address> implements IConvertible
{
    String? City;
    String? Country;
    String? Line1;
    String? Line2;
    String? PostalCode;
    String? State;

    Address({this.City,this.Country,this.Line1,this.Line2,this.PostalCode,this.State});
    Address.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        City = json['City'];
        Country = json['Country'];
        Line1 = json['Line1'];
        Line2 = json['Line2'];
        PostalCode = json['PostalCode'];
        State = json['State'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'City': City,
        'Country': Country,
        'Line1': Line1,
        'Line2': Line2,
        'PostalCode': PostalCode,
        'State': State
    });

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

class SessionCustomerDetailsTaxId extends StripeEntity1<SessionCustomerDetailsTaxId> implements IConvertible
{
    String? Type;
    String? Value;

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

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

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

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

class SessionCustomerDetails extends StripeEntity1<SessionCustomerDetails> implements IConvertible
{
    Address? Address;
    String? Email;
    String? Name;
    String? Phone;
    String? TaxExempt;
    List<SessionCustomerDetailsTaxId>? TaxIds;

    SessionCustomerDetails({this.Address,this.Email,this.Name,this.Phone,this.TaxExempt,this.TaxIds});
    SessionCustomerDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Address = JsonConverters.fromJson(json['Address'],'Address',context!);
        Email = json['Email'];
        Name = json['Name'];
        Phone = json['Phone'];
        TaxExempt = json['TaxExempt'];
        TaxIds = JsonConverters.fromJson(json['TaxIds'],'List<SessionCustomerDetailsTaxId>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Address': JsonConverters.toJson(Address,'Address',context!),
        'Email': Email,
        'Name': Name,
        'Phone': Phone,
        'TaxExempt': TaxExempt,
        'TaxIds': JsonConverters.toJson(TaxIds,'List<SessionCustomerDetailsTaxId>',context!)
    });

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

class SessionInvoiceCreationInvoiceDataCustomField extends StripeEntity1<SessionInvoiceCreationInvoiceDataCustomField> implements IConvertible
{
    String? Name;
    String? Value;

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

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

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

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

class SessionInvoiceCreationInvoiceDataIssuer extends StripeEntity1<SessionInvoiceCreationInvoiceDataIssuer> implements IConvertible
{
    String? Type;

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

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

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

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

class SessionInvoiceCreationInvoiceDataRenderingOptions extends StripeEntity1<SessionInvoiceCreationInvoiceDataRenderingOptions> implements IConvertible
{
    String? AmountTaxDisplay;

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

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

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

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

class SessionInvoiceCreationInvoiceData extends StripeEntity1<SessionInvoiceCreationInvoiceData> implements IHasMetadata, IConvertible
{
    List<SessionInvoiceCreationInvoiceDataCustomField>? CustomFields;
    String? Description;
    String? Footer;
    SessionInvoiceCreationInvoiceDataIssuer? Issuer;
    Map<String,String?>? Metadata;
    SessionInvoiceCreationInvoiceDataRenderingOptions? RenderingOptions;

    SessionInvoiceCreationInvoiceData({this.CustomFields,this.Description,this.Footer,this.Issuer,this.Metadata,this.RenderingOptions});
    SessionInvoiceCreationInvoiceData.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<SessionInvoiceCreationInvoiceDataCustomField>',context!);
        Description = json['Description'];
        Footer = json['Footer'];
        Issuer = JsonConverters.fromJson(json['Issuer'],'SessionInvoiceCreationInvoiceDataIssuer',context!);
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        RenderingOptions = JsonConverters.fromJson(json['RenderingOptions'],'SessionInvoiceCreationInvoiceDataRenderingOptions',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CustomFields': JsonConverters.toJson(CustomFields,'List<SessionInvoiceCreationInvoiceDataCustomField>',context!),
        'Description': Description,
        'Footer': Footer,
        'Issuer': JsonConverters.toJson(Issuer,'SessionInvoiceCreationInvoiceDataIssuer',context!),
        'Metadata': Metadata,
        'RenderingOptions': JsonConverters.toJson(RenderingOptions,'SessionInvoiceCreationInvoiceDataRenderingOptions',context!)
    });

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

class SessionInvoiceCreation extends StripeEntity1<SessionInvoiceCreation> implements IConvertible
{
    bool? Enabled;
    SessionInvoiceCreationInvoiceData? InvoiceData;

    SessionInvoiceCreation({this.Enabled,this.InvoiceData});
    SessionInvoiceCreation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Enabled = json['Enabled'];
        InvoiceData = JsonConverters.fromJson(json['InvoiceData'],'SessionInvoiceCreationInvoiceData',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Enabled': Enabled,
        'InvoiceData': JsonConverters.toJson(InvoiceData,'SessionInvoiceCreationInvoiceData',context!)
    });

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

class CouponAppliesTo extends StripeEntity1<CouponAppliesTo> implements IConvertible
{
    List<String>? Products;

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

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Products = JsonConverters.fromJson(json['Products'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Products': JsonConverters.toJson(Products,'List<String>',context!)
    });

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

class CouponCurrencyOptions extends StripeEntity1<CouponCurrencyOptions> implements IConvertible
{
    int? AmountOff;

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

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

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

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

class Coupon extends StripeEntity1<Coupon> implements IHasId, IHasMetadata, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    int? AmountOff;
    CouponAppliesTo? AppliesTo;
    DateTime? Created;
    String? Currency;
    Map<String,CouponCurrencyOptions?>? CurrencyOptions;
    bool? Deleted;
    String? Duration;
    int? DurationInMonths;
    bool? Livemode;
    int? MaxRedemptions;
    Map<String,String?>? Metadata;
    String? Name;
    double? PercentOff;
    DateTime? RedeemBy;
    int? TimesRedeemed;
    bool? Valid;

    Coupon({this.Id,this.Object,this.AmountOff,this.AppliesTo,this.Created,this.Currency,this.CurrencyOptions,this.Deleted,this.Duration,this.DurationInMonths,this.Livemode,this.MaxRedemptions,this.Metadata,this.Name,this.PercentOff,this.RedeemBy,this.TimesRedeemed,this.Valid});
    Coupon.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        AmountOff = json['AmountOff'];
        AppliesTo = JsonConverters.fromJson(json['AppliesTo'],'CouponAppliesTo',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Currency = json['Currency'];
        CurrencyOptions = JsonConverters.fromJson(json['CurrencyOptions'],'Map<String,CouponCurrencyOptions?>',context!);
        Deleted = json['Deleted'];
        Duration = json['Duration'];
        DurationInMonths = json['DurationInMonths'];
        Livemode = json['Livemode'];
        MaxRedemptions = json['MaxRedemptions'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Name = json['Name'];
        PercentOff = JsonConverters.toDouble(json['PercentOff']);
        RedeemBy = JsonConverters.fromJson(json['RedeemBy'],'DateTime',context!);
        TimesRedeemed = json['TimesRedeemed'];
        Valid = json['Valid'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'AmountOff': AmountOff,
        'AppliesTo': JsonConverters.toJson(AppliesTo,'CouponAppliesTo',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Currency': Currency,
        'CurrencyOptions': JsonConverters.toJson(CurrencyOptions,'Map<String,CouponCurrencyOptions?>',context!),
        'Deleted': Deleted,
        'Duration': Duration,
        'DurationInMonths': DurationInMonths,
        'Livemode': Livemode,
        'MaxRedemptions': MaxRedemptions,
        'Metadata': Metadata,
        'Name': Name,
        'PercentOff': PercentOff,
        'RedeemBy': JsonConverters.toJson(RedeemBy,'DateTime',context!),
        'TimesRedeemed': TimesRedeemed,
        'Valid': Valid
    });

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

class Discount extends StripeEntity1<Discount> implements IHasId, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    String? CheckoutSession;
    Coupon? Coupon;
    bool? Deleted;
    DateTime? End;
    String? Invoice;
    String? InvoiceItem;
    DateTime? Start;
    String? Subscription;
    String? SubscriptionItem;

    Discount({this.Id,this.Object,this.CheckoutSession,this.Coupon,this.Deleted,this.End,this.Invoice,this.InvoiceItem,this.Start,this.Subscription,this.SubscriptionItem});
    Discount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        CheckoutSession = json['CheckoutSession'];
        Coupon = JsonConverters.fromJson(json['Coupon'],'Coupon',context!);
        Deleted = json['Deleted'];
        End = JsonConverters.fromJson(json['End'],'DateTime',context!);
        Invoice = json['Invoice'];
        InvoiceItem = json['InvoiceItem'];
        Start = JsonConverters.fromJson(json['Start'],'DateTime',context!);
        Subscription = json['Subscription'];
        SubscriptionItem = json['SubscriptionItem'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'CheckoutSession': CheckoutSession,
        'Coupon': JsonConverters.toJson(Coupon,'Coupon',context!),
        'Deleted': Deleted,
        'End': JsonConverters.toJson(End,'DateTime',context!),
        'Invoice': Invoice,
        'InvoiceItem': InvoiceItem,
        'Start': JsonConverters.toJson(Start,'DateTime',context!),
        'Subscription': Subscription,
        'SubscriptionItem': SubscriptionItem
    });

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

class LineItemDiscount extends StripeEntity1<LineItemDiscount> implements IConvertible
{
    int? Amount;
    Discount? Discount;

    LineItemDiscount({this.Amount,this.Discount});
    LineItemDiscount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        Discount = JsonConverters.fromJson(json['Discount'],'Discount',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'Discount': JsonConverters.toJson(Discount,'Discount',context!)
    });

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

class PriceCurrencyOptionsCustomUnitAmount extends StripeEntity1<PriceCurrencyOptionsCustomUnitAmount> implements IConvertible
{
    int? Maximum;
    int? Minimum;
    int? Preset;

    PriceCurrencyOptionsCustomUnitAmount({this.Maximum,this.Minimum,this.Preset});
    PriceCurrencyOptionsCustomUnitAmount.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Maximum': Maximum,
        'Minimum': Minimum,
        'Preset': Preset
    });

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

class PriceCurrencyOptionsTier extends StripeEntity1<PriceCurrencyOptionsTier> implements IConvertible
{
    int? FlatAmount;
    double? FlatAmountDecimal;
    int? UnitAmount;
    double? UnitAmountDecimal;
    int? UpTo;

    PriceCurrencyOptionsTier({this.FlatAmount,this.FlatAmountDecimal,this.UnitAmount,this.UnitAmountDecimal,this.UpTo});
    PriceCurrencyOptionsTier.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        FlatAmount = json['FlatAmount'];
        FlatAmountDecimal = JsonConverters.toDouble(json['FlatAmountDecimal']);
        UnitAmount = json['UnitAmount'];
        UnitAmountDecimal = JsonConverters.toDouble(json['UnitAmountDecimal']);
        UpTo = json['UpTo'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'FlatAmount': FlatAmount,
        'FlatAmountDecimal': FlatAmountDecimal,
        'UnitAmount': UnitAmount,
        'UnitAmountDecimal': UnitAmountDecimal,
        'UpTo': UpTo
    });

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

class PriceCurrencyOptions extends StripeEntity1<PriceCurrencyOptions> implements IConvertible
{
    PriceCurrencyOptionsCustomUnitAmount? CustomUnitAmount;
    String? TaxBehavior;
    List<PriceCurrencyOptionsTier>? Tiers;
    int? UnitAmount;
    double? UnitAmountDecimal;

    PriceCurrencyOptions({this.CustomUnitAmount,this.TaxBehavior,this.Tiers,this.UnitAmount,this.UnitAmountDecimal});
    PriceCurrencyOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CustomUnitAmount = JsonConverters.fromJson(json['CustomUnitAmount'],'PriceCurrencyOptionsCustomUnitAmount',context!);
        TaxBehavior = json['TaxBehavior'];
        Tiers = JsonConverters.fromJson(json['Tiers'],'List<PriceCurrencyOptionsTier>',context!);
        UnitAmount = json['UnitAmount'];
        UnitAmountDecimal = JsonConverters.toDouble(json['UnitAmountDecimal']);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CustomUnitAmount': JsonConverters.toJson(CustomUnitAmount,'PriceCurrencyOptionsCustomUnitAmount',context!),
        'TaxBehavior': TaxBehavior,
        'Tiers': JsonConverters.toJson(Tiers,'List<PriceCurrencyOptionsTier>',context!),
        'UnitAmount': UnitAmount,
        'UnitAmountDecimal': UnitAmountDecimal
    });

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

class PriceCustomUnitAmount extends StripeEntity1<PriceCustomUnitAmount> implements IConvertible
{
    int? Maximum;
    int? Minimum;
    int? Preset;

    PriceCustomUnitAmount({this.Maximum,this.Minimum,this.Preset});
    PriceCustomUnitAmount.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Maximum': Maximum,
        'Minimum': Minimum,
        'Preset': Preset
    });

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

class PriceRecurring extends StripeEntity1<PriceRecurring> implements IConvertible
{
    String? AggregateUsage;
    String? Interval;
    int? IntervalCount;
    String? Meter;
    int? TrialPeriodDays;
    String? UsageType;

    PriceRecurring({this.AggregateUsage,this.Interval,this.IntervalCount,this.Meter,this.TrialPeriodDays,this.UsageType});
    PriceRecurring.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AggregateUsage = json['AggregateUsage'];
        Interval = json['Interval'];
        IntervalCount = json['IntervalCount'];
        Meter = json['Meter'];
        TrialPeriodDays = json['TrialPeriodDays'];
        UsageType = json['UsageType'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AggregateUsage': AggregateUsage,
        'Interval': Interval,
        'IntervalCount': IntervalCount,
        'Meter': Meter,
        'TrialPeriodDays': TrialPeriodDays,
        'UsageType': UsageType
    });

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

class PriceTier extends StripeEntity1<PriceTier> implements IConvertible
{
    int? FlatAmount;
    double? FlatAmountDecimal;
    int? UnitAmount;
    double? UnitAmountDecimal;
    int? UpTo;

    PriceTier({this.FlatAmount,this.FlatAmountDecimal,this.UnitAmount,this.UnitAmountDecimal,this.UpTo});
    PriceTier.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        FlatAmount = json['FlatAmount'];
        FlatAmountDecimal = JsonConverters.toDouble(json['FlatAmountDecimal']);
        UnitAmount = json['UnitAmount'];
        UnitAmountDecimal = JsonConverters.toDouble(json['UnitAmountDecimal']);
        UpTo = json['UpTo'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'FlatAmount': FlatAmount,
        'FlatAmountDecimal': FlatAmountDecimal,
        'UnitAmount': UnitAmount,
        'UnitAmountDecimal': UnitAmountDecimal,
        'UpTo': UpTo
    });

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

class PriceTransformQuantity extends StripeEntity1<PriceTransformQuantity> implements IConvertible
{
    int? DivideBy;
    String? Round;

    PriceTransformQuantity({this.DivideBy,this.Round});
    PriceTransformQuantity.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class Price extends StripeEntity1<Price> implements IHasId, IHasMetadata, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    bool? Active;
    String? BillingScheme;
    DateTime? Created;
    String? Currency;
    Map<String,PriceCurrencyOptions?>? CurrencyOptions;
    PriceCustomUnitAmount? CustomUnitAmount;
    bool? Deleted;
    bool? Livemode;
    String? LookupKey;
    Map<String,String?>? Metadata;
    String? Nickname;
    PriceRecurring? Recurring;
    String? TaxBehavior;
    List<PriceTier>? Tiers;
    String? TiersMode;
    PriceTransformQuantity? TransformQuantity;
    String? Type;
    int? UnitAmount;
    double? UnitAmountDecimal;

    Price({this.Id,this.Object,this.Active,this.BillingScheme,this.Created,this.Currency,this.CurrencyOptions,this.CustomUnitAmount,this.Deleted,this.Livemode,this.LookupKey,this.Metadata,this.Nickname,this.Recurring,this.TaxBehavior,this.Tiers,this.TiersMode,this.TransformQuantity,this.Type,this.UnitAmount,this.UnitAmountDecimal});
    Price.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        Active = json['Active'];
        BillingScheme = json['BillingScheme'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Currency = json['Currency'];
        CurrencyOptions = JsonConverters.fromJson(json['CurrencyOptions'],'Map<String,PriceCurrencyOptions?>',context!);
        CustomUnitAmount = JsonConverters.fromJson(json['CustomUnitAmount'],'PriceCustomUnitAmount',context!);
        Deleted = json['Deleted'];
        Livemode = json['Livemode'];
        LookupKey = json['LookupKey'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Nickname = json['Nickname'];
        Recurring = JsonConverters.fromJson(json['Recurring'],'PriceRecurring',context!);
        TaxBehavior = json['TaxBehavior'];
        Tiers = JsonConverters.fromJson(json['Tiers'],'List<PriceTier>',context!);
        TiersMode = json['TiersMode'];
        TransformQuantity = JsonConverters.fromJson(json['TransformQuantity'],'PriceTransformQuantity',context!);
        Type = json['Type'];
        UnitAmount = json['UnitAmount'];
        UnitAmountDecimal = JsonConverters.toDouble(json['UnitAmountDecimal']);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'Active': Active,
        'BillingScheme': BillingScheme,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Currency': Currency,
        'CurrencyOptions': JsonConverters.toJson(CurrencyOptions,'Map<String,PriceCurrencyOptions?>',context!),
        'CustomUnitAmount': JsonConverters.toJson(CustomUnitAmount,'PriceCustomUnitAmount',context!),
        'Deleted': Deleted,
        'Livemode': Livemode,
        'LookupKey': LookupKey,
        'Metadata': Metadata,
        'Nickname': Nickname,
        'Recurring': JsonConverters.toJson(Recurring,'PriceRecurring',context!),
        'TaxBehavior': TaxBehavior,
        'Tiers': JsonConverters.toJson(Tiers,'List<PriceTier>',context!),
        'TiersMode': TiersMode,
        'TransformQuantity': JsonConverters.toJson(TransformQuantity,'PriceTransformQuantity',context!),
        'Type': Type,
        'UnitAmount': UnitAmount,
        'UnitAmountDecimal': UnitAmountDecimal
    });

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

class TaxRate extends StripeEntity1<TaxRate> implements IHasId, IHasMetadata, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    bool? Active;
    String? Country;
    DateTime? Created;
    String? Description;
    String? DisplayName;
    double? EffectivePercentage;
    bool? Inclusive;
    String? Jurisdiction;
    String? JurisdictionLevel;
    bool? Livemode;
    Map<String,String?>? Metadata;
    double? Percentage;
    String? State;
    String? TaxType;

    TaxRate({this.Id,this.Object,this.Active,this.Country,this.Created,this.Description,this.DisplayName,this.EffectivePercentage,this.Inclusive,this.Jurisdiction,this.JurisdictionLevel,this.Livemode,this.Metadata,this.Percentage,this.State,this.TaxType});
    TaxRate.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        Active = json['Active'];
        Country = json['Country'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Description = json['Description'];
        DisplayName = json['DisplayName'];
        EffectivePercentage = JsonConverters.toDouble(json['EffectivePercentage']);
        Inclusive = json['Inclusive'];
        Jurisdiction = json['Jurisdiction'];
        JurisdictionLevel = json['JurisdictionLevel'];
        Livemode = json['Livemode'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Percentage = JsonConverters.toDouble(json['Percentage']);
        State = json['State'];
        TaxType = json['TaxType'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'Active': Active,
        'Country': Country,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Description': Description,
        'DisplayName': DisplayName,
        'EffectivePercentage': EffectivePercentage,
        'Inclusive': Inclusive,
        'Jurisdiction': Jurisdiction,
        'JurisdictionLevel': JurisdictionLevel,
        'Livemode': Livemode,
        'Metadata': Metadata,
        'Percentage': Percentage,
        'State': State,
        'TaxType': TaxType
    });

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

class LineItemTax extends StripeEntity1<LineItemTax> implements IConvertible
{
    int? Amount;
    TaxRate? Rate;
    String? TaxabilityReason;
    int? TaxableAmount;

    LineItemTax({this.Amount,this.Rate,this.TaxabilityReason,this.TaxableAmount});
    LineItemTax.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        Rate = JsonConverters.fromJson(json['Rate'],'TaxRate',context!);
        TaxabilityReason = json['TaxabilityReason'];
        TaxableAmount = json['TaxableAmount'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'Rate': JsonConverters.toJson(Rate,'TaxRate',context!),
        'TaxabilityReason': TaxabilityReason,
        'TaxableAmount': TaxableAmount
    });

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

class LineItem extends StripeEntity1<LineItem> implements IHasId, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    int? AmountDiscount;
    int? AmountSubtotal;
    int? AmountTax;
    int? AmountTotal;
    String? Currency;
    bool? Deleted;
    String? Description;
    List<LineItemDiscount>? Discounts;
    Price? Price;
    int? Quantity;
    List<LineItemTax>? Taxes;

    LineItem({this.Id,this.Object,this.AmountDiscount,this.AmountSubtotal,this.AmountTax,this.AmountTotal,this.Currency,this.Deleted,this.Description,this.Discounts,this.Price,this.Quantity,this.Taxes});
    LineItem.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        AmountDiscount = json['AmountDiscount'];
        AmountSubtotal = json['AmountSubtotal'];
        AmountTax = json['AmountTax'];
        AmountTotal = json['AmountTotal'];
        Currency = json['Currency'];
        Deleted = json['Deleted'];
        Description = json['Description'];
        Discounts = JsonConverters.fromJson(json['Discounts'],'List<LineItemDiscount>',context!);
        Price = JsonConverters.fromJson(json['Price'],'Price',context!);
        Quantity = json['Quantity'];
        Taxes = JsonConverters.fromJson(json['Taxes'],'List<LineItemTax>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'AmountDiscount': AmountDiscount,
        'AmountSubtotal': AmountSubtotal,
        'AmountTax': AmountTax,
        'AmountTotal': AmountTotal,
        'Currency': Currency,
        'Deleted': Deleted,
        'Description': Description,
        'Discounts': JsonConverters.toJson(Discounts,'List<LineItemDiscount>',context!),
        'Price': JsonConverters.toJson(Price,'Price',context!),
        'Quantity': Quantity,
        'Taxes': JsonConverters.toJson(Taxes,'List<LineItemTax>',context!)
    });

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

class SessionPaymentMethodConfigurationDetails extends StripeEntity1<SessionPaymentMethodConfigurationDetails> implements IHasId, IConvertible
{
    String? Id;
    String? Parent;

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

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

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

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

class SessionPaymentMethodOptionsAcssDebitMandateOptions extends StripeEntity1<SessionPaymentMethodOptionsAcssDebitMandateOptions> implements IConvertible
{
    String? CustomMandateUrl;
    List<String>? DefaultFor;
    String? IntervalDescription;
    String? PaymentSchedule;
    String? TransactionType;

    SessionPaymentMethodOptionsAcssDebitMandateOptions({this.CustomMandateUrl,this.DefaultFor,this.IntervalDescription,this.PaymentSchedule,this.TransactionType});
    SessionPaymentMethodOptionsAcssDebitMandateOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CustomMandateUrl = json['CustomMandateUrl'];
        DefaultFor = JsonConverters.fromJson(json['DefaultFor'],'List<String>',context!);
        IntervalDescription = json['IntervalDescription'];
        PaymentSchedule = json['PaymentSchedule'];
        TransactionType = json['TransactionType'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CustomMandateUrl': CustomMandateUrl,
        'DefaultFor': JsonConverters.toJson(DefaultFor,'List<String>',context!),
        'IntervalDescription': IntervalDescription,
        'PaymentSchedule': PaymentSchedule,
        'TransactionType': TransactionType
    });

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

class SessionPaymentMethodOptionsAcssDebit extends StripeEntity1<SessionPaymentMethodOptionsAcssDebit> implements IConvertible
{
    String? Currency;
    SessionPaymentMethodOptionsAcssDebitMandateOptions? MandateOptions;
    String? SetupFutureUsage;
    String? VerificationMethod;

    SessionPaymentMethodOptionsAcssDebit({this.Currency,this.MandateOptions,this.SetupFutureUsage,this.VerificationMethod});
    SessionPaymentMethodOptionsAcssDebit.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Currency = json['Currency'];
        MandateOptions = JsonConverters.fromJson(json['MandateOptions'],'SessionPaymentMethodOptionsAcssDebitMandateOptions',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Currency': Currency,
        'MandateOptions': JsonConverters.toJson(MandateOptions,'SessionPaymentMethodOptionsAcssDebitMandateOptions',context!),
        'SetupFutureUsage': SetupFutureUsage,
        'VerificationMethod': VerificationMethod
    });

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

class SessionPaymentMethodOptionsAffirm extends StripeEntity1<SessionPaymentMethodOptionsAffirm> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsAfterpayClearpay extends StripeEntity1<SessionPaymentMethodOptionsAfterpayClearpay> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsAlipay extends StripeEntity1<SessionPaymentMethodOptionsAlipay> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsAmazonPay extends StripeEntity1<SessionPaymentMethodOptionsAmazonPay> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsAuBecsDebit extends StripeEntity1<SessionPaymentMethodOptionsAuBecsDebit> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsBacsDebit extends StripeEntity1<SessionPaymentMethodOptionsBacsDebit> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsBancontact extends StripeEntity1<SessionPaymentMethodOptionsBancontact> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsBoleto extends StripeEntity1<SessionPaymentMethodOptionsBoleto> implements IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsBoleto({this.ExpiresAfterDays,this.SetupFutureUsage});
    SessionPaymentMethodOptionsBoleto.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionPaymentMethodOptionsCardInstallments extends StripeEntity1<SessionPaymentMethodOptionsCardInstallments> implements IConvertible
{
    bool? Enabled;

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

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

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

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

class SessionPaymentMethodOptionsCard extends StripeEntity1<SessionPaymentMethodOptionsCard> implements IConvertible
{
    SessionPaymentMethodOptionsCardInstallments? Installments;
    String? RequestThreeDSecure;
    String? SetupFutureUsage;
    String? StatementDescriptorSuffixKana;
    String? StatementDescriptorSuffixKanji;

    SessionPaymentMethodOptionsCard({this.Installments,this.RequestThreeDSecure,this.SetupFutureUsage,this.StatementDescriptorSuffixKana,this.StatementDescriptorSuffixKanji});
    SessionPaymentMethodOptionsCard.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Installments = JsonConverters.fromJson(json['Installments'],'SessionPaymentMethodOptionsCardInstallments',context!);
        RequestThreeDSecure = json['RequestThreeDSecure'];
        SetupFutureUsage = json['SetupFutureUsage'];
        StatementDescriptorSuffixKana = json['StatementDescriptorSuffixKana'];
        StatementDescriptorSuffixKanji = json['StatementDescriptorSuffixKanji'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Installments': JsonConverters.toJson(Installments,'SessionPaymentMethodOptionsCardInstallments',context!),
        'RequestThreeDSecure': RequestThreeDSecure,
        'SetupFutureUsage': SetupFutureUsage,
        'StatementDescriptorSuffixKana': StatementDescriptorSuffixKana,
        'StatementDescriptorSuffixKanji': StatementDescriptorSuffixKanji
    });

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

class SessionPaymentMethodOptionsCashapp extends StripeEntity1<SessionPaymentMethodOptionsCashapp> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer extends StripeEntity1<SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer> implements IConvertible
{
    String? Country;

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

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

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

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

class SessionPaymentMethodOptionsCustomerBalanceBankTransfer extends StripeEntity1<SessionPaymentMethodOptionsCustomerBalanceBankTransfer> implements IConvertible
{
    SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer? EuBankTransfer;
    List<String>? RequestedAddressTypes;
    String? Type;

    SessionPaymentMethodOptionsCustomerBalanceBankTransfer({this.EuBankTransfer,this.RequestedAddressTypes,this.Type});
    SessionPaymentMethodOptionsCustomerBalanceBankTransfer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        EuBankTransfer = JsonConverters.fromJson(json['EuBankTransfer'],'SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer',context!);
        RequestedAddressTypes = JsonConverters.fromJson(json['RequestedAddressTypes'],'List<String>',context!);
        Type = json['Type'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'EuBankTransfer': JsonConverters.toJson(EuBankTransfer,'SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer',context!),
        'RequestedAddressTypes': JsonConverters.toJson(RequestedAddressTypes,'List<String>',context!),
        'Type': Type
    });

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

class SessionPaymentMethodOptionsCustomerBalance extends StripeEntity1<SessionPaymentMethodOptionsCustomerBalance> implements IConvertible
{
    SessionPaymentMethodOptionsCustomerBalanceBankTransfer? BankTransfer;
    String? FundingType;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsCustomerBalance({this.BankTransfer,this.FundingType,this.SetupFutureUsage});
    SessionPaymentMethodOptionsCustomerBalance.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        BankTransfer = JsonConverters.fromJson(json['BankTransfer'],'SessionPaymentMethodOptionsCustomerBalanceBankTransfer',context!);
        FundingType = json['FundingType'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'BankTransfer': JsonConverters.toJson(BankTransfer,'SessionPaymentMethodOptionsCustomerBalanceBankTransfer',context!),
        'FundingType': FundingType,
        'SetupFutureUsage': SetupFutureUsage
    });

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

class SessionPaymentMethodOptionsEps extends StripeEntity1<SessionPaymentMethodOptionsEps> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsFpx extends StripeEntity1<SessionPaymentMethodOptionsFpx> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsGiropay extends StripeEntity1<SessionPaymentMethodOptionsGiropay> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsGrabpay extends StripeEntity1<SessionPaymentMethodOptionsGrabpay> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsIdeal extends StripeEntity1<SessionPaymentMethodOptionsIdeal> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsKlarna extends StripeEntity1<SessionPaymentMethodOptionsKlarna> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsKonbini extends StripeEntity1<SessionPaymentMethodOptionsKonbini> implements IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsKonbini({this.ExpiresAfterDays,this.SetupFutureUsage});
    SessionPaymentMethodOptionsKonbini.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionPaymentMethodOptionsLink extends StripeEntity1<SessionPaymentMethodOptionsLink> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsMobilepay extends StripeEntity1<SessionPaymentMethodOptionsMobilepay> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsMultibanco extends StripeEntity1<SessionPaymentMethodOptionsMultibanco> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsOxxo extends StripeEntity1<SessionPaymentMethodOptionsOxxo> implements IConvertible
{
    int? ExpiresAfterDays;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsOxxo({this.ExpiresAfterDays,this.SetupFutureUsage});
    SessionPaymentMethodOptionsOxxo.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionPaymentMethodOptionsP24 extends StripeEntity1<SessionPaymentMethodOptionsP24> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsPaynow extends StripeEntity1<SessionPaymentMethodOptionsPaynow> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsPaypal extends StripeEntity1<SessionPaymentMethodOptionsPaypal> implements IConvertible
{
    String? CaptureMethod;
    String? PreferredLocale;
    String? Reference;
    String? SetupFutureUsage;

    SessionPaymentMethodOptionsPaypal({this.CaptureMethod,this.PreferredLocale,this.Reference,this.SetupFutureUsage});
    SessionPaymentMethodOptionsPaypal.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaptureMethod = json['CaptureMethod'];
        PreferredLocale = json['PreferredLocale'];
        Reference = json['Reference'];
        SetupFutureUsage = json['SetupFutureUsage'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaptureMethod': CaptureMethod,
        'PreferredLocale': PreferredLocale,
        'Reference': Reference,
        'SetupFutureUsage': SetupFutureUsage
    });

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

class SessionPaymentMethodOptionsPix extends StripeEntity1<SessionPaymentMethodOptionsPix> implements IConvertible
{
    int? ExpiresAfterSeconds;

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

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

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

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

class SessionPaymentMethodOptionsRevolutPay extends StripeEntity1<SessionPaymentMethodOptionsRevolutPay> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsSepaDebit extends StripeEntity1<SessionPaymentMethodOptionsSepaDebit> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsSofort extends StripeEntity1<SessionPaymentMethodOptionsSofort> implements IConvertible
{
    String? SetupFutureUsage;

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

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

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

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

class SessionPaymentMethodOptionsSwish extends StripeEntity1<SessionPaymentMethodOptionsSwish> implements IConvertible
{
    String? Reference;

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

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

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

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

class SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters extends StripeEntity1<SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters> implements IConvertible
{
    List<String>? AccountSubcategories;

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

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AccountSubcategories = JsonConverters.fromJson(json['AccountSubcategories'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AccountSubcategories': JsonConverters.toJson(AccountSubcategories,'List<String>',context!)
    });

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

class SessionPaymentMethodOptionsUsBankAccountFinancialConnections extends StripeEntity1<SessionPaymentMethodOptionsUsBankAccountFinancialConnections> implements IConvertible
{
    SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters? Filters;
    List<String>? Permissions;
    List<String>? Prefetch;
    String? ReturnUrl;

    SessionPaymentMethodOptionsUsBankAccountFinancialConnections({this.Filters,this.Permissions,this.Prefetch,this.ReturnUrl});
    SessionPaymentMethodOptionsUsBankAccountFinancialConnections.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Filters = JsonConverters.fromJson(json['Filters'],'SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters',context!);
        Permissions = JsonConverters.fromJson(json['Permissions'],'List<String>',context!);
        Prefetch = JsonConverters.fromJson(json['Prefetch'],'List<String>',context!);
        ReturnUrl = json['ReturnUrl'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Filters': JsonConverters.toJson(Filters,'SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters',context!),
        'Permissions': JsonConverters.toJson(Permissions,'List<String>',context!),
        'Prefetch': JsonConverters.toJson(Prefetch,'List<String>',context!),
        'ReturnUrl': ReturnUrl
    });

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

class SessionPaymentMethodOptionsUsBankAccount extends StripeEntity1<SessionPaymentMethodOptionsUsBankAccount> implements IConvertible
{
    SessionPaymentMethodOptionsUsBankAccountFinancialConnections? FinancialConnections;
    String? SetupFutureUsage;
    String? VerificationMethod;

    SessionPaymentMethodOptionsUsBankAccount({this.FinancialConnections,this.SetupFutureUsage,this.VerificationMethod});
    SessionPaymentMethodOptionsUsBankAccount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        FinancialConnections = JsonConverters.fromJson(json['FinancialConnections'],'SessionPaymentMethodOptionsUsBankAccountFinancialConnections',context!);
        SetupFutureUsage = json['SetupFutureUsage'];
        VerificationMethod = json['VerificationMethod'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'FinancialConnections': JsonConverters.toJson(FinancialConnections,'SessionPaymentMethodOptionsUsBankAccountFinancialConnections',context!),
        'SetupFutureUsage': SetupFutureUsage,
        'VerificationMethod': VerificationMethod
    });

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

class SessionPaymentMethodOptions extends StripeEntity1<SessionPaymentMethodOptions> implements IConvertible
{
    SessionPaymentMethodOptionsAcssDebit? AcssDebit;
    SessionPaymentMethodOptionsAffirm? Affirm;
    SessionPaymentMethodOptionsAfterpayClearpay? AfterpayClearpay;
    SessionPaymentMethodOptionsAlipay? Alipay;
    SessionPaymentMethodOptionsAmazonPay? AmazonPay;
    SessionPaymentMethodOptionsAuBecsDebit? AuBecsDebit;
    SessionPaymentMethodOptionsBacsDebit? BacsDebit;
    SessionPaymentMethodOptionsBancontact? Bancontact;
    SessionPaymentMethodOptionsBoleto? Boleto;
    SessionPaymentMethodOptionsCard? Card;
    SessionPaymentMethodOptionsCashapp? Cashapp;
    SessionPaymentMethodOptionsCustomerBalance? CustomerBalance;
    SessionPaymentMethodOptionsEps? Eps;
    SessionPaymentMethodOptionsFpx? Fpx;
    SessionPaymentMethodOptionsGiropay? Giropay;
    SessionPaymentMethodOptionsGrabpay? Grabpay;
    SessionPaymentMethodOptionsIdeal? Ideal;
    SessionPaymentMethodOptionsKlarna? Klarna;
    SessionPaymentMethodOptionsKonbini? Konbini;
    SessionPaymentMethodOptionsLink? Link;
    SessionPaymentMethodOptionsMobilepay? Mobilepay;
    SessionPaymentMethodOptionsMultibanco? Multibanco;
    SessionPaymentMethodOptionsOxxo? Oxxo;
    SessionPaymentMethodOptionsP24? P24;
    SessionPaymentMethodOptionsPaynow? Paynow;
    SessionPaymentMethodOptionsPaypal? Paypal;
    SessionPaymentMethodOptionsPix? Pix;
    SessionPaymentMethodOptionsRevolutPay? RevolutPay;
    SessionPaymentMethodOptionsSepaDebit? SepaDebit;
    SessionPaymentMethodOptionsSofort? Sofort;
    SessionPaymentMethodOptionsSwish? Swish;
    SessionPaymentMethodOptionsUsBankAccount? UsBankAccount;

    SessionPaymentMethodOptions({this.AcssDebit,this.Affirm,this.AfterpayClearpay,this.Alipay,this.AmazonPay,this.AuBecsDebit,this.BacsDebit,this.Bancontact,this.Boleto,this.Card,this.Cashapp,this.CustomerBalance,this.Eps,this.Fpx,this.Giropay,this.Grabpay,this.Ideal,this.Klarna,this.Konbini,this.Link,this.Mobilepay,this.Multibanco,this.Oxxo,this.P24,this.Paynow,this.Paypal,this.Pix,this.RevolutPay,this.SepaDebit,this.Sofort,this.Swish,this.UsBankAccount});
    SessionPaymentMethodOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AcssDebit = JsonConverters.fromJson(json['AcssDebit'],'SessionPaymentMethodOptionsAcssDebit',context!);
        Affirm = JsonConverters.fromJson(json['Affirm'],'SessionPaymentMethodOptionsAffirm',context!);
        AfterpayClearpay = JsonConverters.fromJson(json['AfterpayClearpay'],'SessionPaymentMethodOptionsAfterpayClearpay',context!);
        Alipay = JsonConverters.fromJson(json['Alipay'],'SessionPaymentMethodOptionsAlipay',context!);
        AmazonPay = JsonConverters.fromJson(json['AmazonPay'],'SessionPaymentMethodOptionsAmazonPay',context!);
        AuBecsDebit = JsonConverters.fromJson(json['AuBecsDebit'],'SessionPaymentMethodOptionsAuBecsDebit',context!);
        BacsDebit = JsonConverters.fromJson(json['BacsDebit'],'SessionPaymentMethodOptionsBacsDebit',context!);
        Bancontact = JsonConverters.fromJson(json['Bancontact'],'SessionPaymentMethodOptionsBancontact',context!);
        Boleto = JsonConverters.fromJson(json['Boleto'],'SessionPaymentMethodOptionsBoleto',context!);
        Card = JsonConverters.fromJson(json['Card'],'SessionPaymentMethodOptionsCard',context!);
        Cashapp = JsonConverters.fromJson(json['Cashapp'],'SessionPaymentMethodOptionsCashapp',context!);
        CustomerBalance = JsonConverters.fromJson(json['CustomerBalance'],'SessionPaymentMethodOptionsCustomerBalance',context!);
        Eps = JsonConverters.fromJson(json['Eps'],'SessionPaymentMethodOptionsEps',context!);
        Fpx = JsonConverters.fromJson(json['Fpx'],'SessionPaymentMethodOptionsFpx',context!);
        Giropay = JsonConverters.fromJson(json['Giropay'],'SessionPaymentMethodOptionsGiropay',context!);
        Grabpay = JsonConverters.fromJson(json['Grabpay'],'SessionPaymentMethodOptionsGrabpay',context!);
        Ideal = JsonConverters.fromJson(json['Ideal'],'SessionPaymentMethodOptionsIdeal',context!);
        Klarna = JsonConverters.fromJson(json['Klarna'],'SessionPaymentMethodOptionsKlarna',context!);
        Konbini = JsonConverters.fromJson(json['Konbini'],'SessionPaymentMethodOptionsKonbini',context!);
        Link = JsonConverters.fromJson(json['Link'],'SessionPaymentMethodOptionsLink',context!);
        Mobilepay = JsonConverters.fromJson(json['Mobilepay'],'SessionPaymentMethodOptionsMobilepay',context!);
        Multibanco = JsonConverters.fromJson(json['Multibanco'],'SessionPaymentMethodOptionsMultibanco',context!);
        Oxxo = JsonConverters.fromJson(json['Oxxo'],'SessionPaymentMethodOptionsOxxo',context!);
        P24 = JsonConverters.fromJson(json['P24'],'SessionPaymentMethodOptionsP24',context!);
        Paynow = JsonConverters.fromJson(json['Paynow'],'SessionPaymentMethodOptionsPaynow',context!);
        Paypal = JsonConverters.fromJson(json['Paypal'],'SessionPaymentMethodOptionsPaypal',context!);
        Pix = JsonConverters.fromJson(json['Pix'],'SessionPaymentMethodOptionsPix',context!);
        RevolutPay = JsonConverters.fromJson(json['RevolutPay'],'SessionPaymentMethodOptionsRevolutPay',context!);
        SepaDebit = JsonConverters.fromJson(json['SepaDebit'],'SessionPaymentMethodOptionsSepaDebit',context!);
        Sofort = JsonConverters.fromJson(json['Sofort'],'SessionPaymentMethodOptionsSofort',context!);
        Swish = JsonConverters.fromJson(json['Swish'],'SessionPaymentMethodOptionsSwish',context!);
        UsBankAccount = JsonConverters.fromJson(json['UsBankAccount'],'SessionPaymentMethodOptionsUsBankAccount',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AcssDebit': JsonConverters.toJson(AcssDebit,'SessionPaymentMethodOptionsAcssDebit',context!),
        'Affirm': JsonConverters.toJson(Affirm,'SessionPaymentMethodOptionsAffirm',context!),
        'AfterpayClearpay': JsonConverters.toJson(AfterpayClearpay,'SessionPaymentMethodOptionsAfterpayClearpay',context!),
        'Alipay': JsonConverters.toJson(Alipay,'SessionPaymentMethodOptionsAlipay',context!),
        'AmazonPay': JsonConverters.toJson(AmazonPay,'SessionPaymentMethodOptionsAmazonPay',context!),
        'AuBecsDebit': JsonConverters.toJson(AuBecsDebit,'SessionPaymentMethodOptionsAuBecsDebit',context!),
        'BacsDebit': JsonConverters.toJson(BacsDebit,'SessionPaymentMethodOptionsBacsDebit',context!),
        'Bancontact': JsonConverters.toJson(Bancontact,'SessionPaymentMethodOptionsBancontact',context!),
        'Boleto': JsonConverters.toJson(Boleto,'SessionPaymentMethodOptionsBoleto',context!),
        'Card': JsonConverters.toJson(Card,'SessionPaymentMethodOptionsCard',context!),
        'Cashapp': JsonConverters.toJson(Cashapp,'SessionPaymentMethodOptionsCashapp',context!),
        'CustomerBalance': JsonConverters.toJson(CustomerBalance,'SessionPaymentMethodOptionsCustomerBalance',context!),
        'Eps': JsonConverters.toJson(Eps,'SessionPaymentMethodOptionsEps',context!),
        'Fpx': JsonConverters.toJson(Fpx,'SessionPaymentMethodOptionsFpx',context!),
        'Giropay': JsonConverters.toJson(Giropay,'SessionPaymentMethodOptionsGiropay',context!),
        'Grabpay': JsonConverters.toJson(Grabpay,'SessionPaymentMethodOptionsGrabpay',context!),
        'Ideal': JsonConverters.toJson(Ideal,'SessionPaymentMethodOptionsIdeal',context!),
        'Klarna': JsonConverters.toJson(Klarna,'SessionPaymentMethodOptionsKlarna',context!),
        'Konbini': JsonConverters.toJson(Konbini,'SessionPaymentMethodOptionsKonbini',context!),
        'Link': JsonConverters.toJson(Link,'SessionPaymentMethodOptionsLink',context!),
        'Mobilepay': JsonConverters.toJson(Mobilepay,'SessionPaymentMethodOptionsMobilepay',context!),
        'Multibanco': JsonConverters.toJson(Multibanco,'SessionPaymentMethodOptionsMultibanco',context!),
        'Oxxo': JsonConverters.toJson(Oxxo,'SessionPaymentMethodOptionsOxxo',context!),
        'P24': JsonConverters.toJson(P24,'SessionPaymentMethodOptionsP24',context!),
        'Paynow': JsonConverters.toJson(Paynow,'SessionPaymentMethodOptionsPaynow',context!),
        'Paypal': JsonConverters.toJson(Paypal,'SessionPaymentMethodOptionsPaypal',context!),
        'Pix': JsonConverters.toJson(Pix,'SessionPaymentMethodOptionsPix',context!),
        'RevolutPay': JsonConverters.toJson(RevolutPay,'SessionPaymentMethodOptionsRevolutPay',context!),
        'SepaDebit': JsonConverters.toJson(SepaDebit,'SessionPaymentMethodOptionsSepaDebit',context!),
        'Sofort': JsonConverters.toJson(Sofort,'SessionPaymentMethodOptionsSofort',context!),
        'Swish': JsonConverters.toJson(Swish,'SessionPaymentMethodOptionsSwish',context!),
        'UsBankAccount': JsonConverters.toJson(UsBankAccount,'SessionPaymentMethodOptionsUsBankAccount',context!)
    });

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

class SessionPhoneNumberCollection extends StripeEntity1<SessionPhoneNumberCollection> implements IConvertible
{
    bool? Enabled;

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

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

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

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

class SessionSavedPaymentMethodOptions extends StripeEntity1<SessionSavedPaymentMethodOptions> implements IConvertible
{
    List<String>? AllowRedisplayFilters;
    String? PaymentMethodRemove;
    String? PaymentMethodSave;

    SessionSavedPaymentMethodOptions({this.AllowRedisplayFilters,this.PaymentMethodRemove,this.PaymentMethodSave});
    SessionSavedPaymentMethodOptions.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AllowRedisplayFilters = JsonConverters.fromJson(json['AllowRedisplayFilters'],'List<String>',context!);
        PaymentMethodRemove = json['PaymentMethodRemove'];
        PaymentMethodSave = json['PaymentMethodSave'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AllowRedisplayFilters': JsonConverters.toJson(AllowRedisplayFilters,'List<String>',context!),
        'PaymentMethodRemove': PaymentMethodRemove,
        'PaymentMethodSave': PaymentMethodSave
    });

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

class SessionShippingAddressCollection extends StripeEntity1<SessionShippingAddressCollection> implements IConvertible
{
    List<String>? AllowedCountries;

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

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AllowedCountries = JsonConverters.fromJson(json['AllowedCountries'],'List<String>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AllowedCountries': JsonConverters.toJson(AllowedCountries,'List<String>',context!)
    });

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

class SessionShippingCostTax extends StripeEntity1<SessionShippingCostTax> implements IConvertible
{
    int? Amount;
    TaxRate? Rate;
    String? TaxabilityReason;
    int? TaxableAmount;

    SessionShippingCostTax({this.Amount,this.Rate,this.TaxabilityReason,this.TaxableAmount});
    SessionShippingCostTax.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        Rate = JsonConverters.fromJson(json['Rate'],'TaxRate',context!);
        TaxabilityReason = json['TaxabilityReason'];
        TaxableAmount = json['TaxableAmount'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'Rate': JsonConverters.toJson(Rate,'TaxRate',context!),
        'TaxabilityReason': TaxabilityReason,
        'TaxableAmount': TaxableAmount
    });

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

class SessionShippingCost extends StripeEntity1<SessionShippingCost> implements IConvertible
{
    int? AmountSubtotal;
    int? AmountTax;
    int? AmountTotal;
    List<SessionShippingCostTax>? Taxes;

    SessionShippingCost({this.AmountSubtotal,this.AmountTax,this.AmountTotal,this.Taxes});
    SessionShippingCost.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AmountSubtotal = json['AmountSubtotal'];
        AmountTax = json['AmountTax'];
        AmountTotal = json['AmountTotal'];
        Taxes = JsonConverters.fromJson(json['Taxes'],'List<SessionShippingCostTax>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AmountSubtotal': AmountSubtotal,
        'AmountTax': AmountTax,
        'AmountTotal': AmountTotal,
        'Taxes': JsonConverters.toJson(Taxes,'List<SessionShippingCostTax>',context!)
    });

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

class SessionShippingDetails extends StripeEntity1<SessionShippingDetails> implements IConvertible
{
    Address? Address;
    String? Carrier;
    String? Name;
    String? Phone;
    String? TrackingNumber;

    SessionShippingDetails({this.Address,this.Carrier,this.Name,this.Phone,this.TrackingNumber});
    SessionShippingDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Address = JsonConverters.fromJson(json['Address'],'Address',context!);
        Carrier = json['Carrier'];
        Name = json['Name'];
        Phone = json['Phone'];
        TrackingNumber = json['TrackingNumber'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Address': JsonConverters.toJson(Address,'Address',context!),
        'Carrier': Carrier,
        'Name': Name,
        'Phone': Phone,
        'TrackingNumber': TrackingNumber
    });

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

class SessionShippingOption extends StripeEntity1<SessionShippingOption> implements IConvertible
{
    int? ShippingAmount;

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

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

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

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

class SessionTaxIdCollection extends StripeEntity1<SessionTaxIdCollection> implements IConvertible
{
    bool? Enabled;
    String? Required;

    SessionTaxIdCollection({this.Enabled,this.Required});
    SessionTaxIdCollection.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class SessionTotalDetailsBreakdownDiscount extends StripeEntity1<SessionTotalDetailsBreakdownDiscount> implements IConvertible
{
    int? Amount;
    Discount? Discount;

    SessionTotalDetailsBreakdownDiscount({this.Amount,this.Discount});
    SessionTotalDetailsBreakdownDiscount.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        Discount = JsonConverters.fromJson(json['Discount'],'Discount',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'Discount': JsonConverters.toJson(Discount,'Discount',context!)
    });

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

class SessionTotalDetailsBreakdownTax extends StripeEntity1<SessionTotalDetailsBreakdownTax> implements IConvertible
{
    int? Amount;
    TaxRate? Rate;
    String? TaxabilityReason;
    int? TaxableAmount;

    SessionTotalDetailsBreakdownTax({this.Amount,this.Rate,this.TaxabilityReason,this.TaxableAmount});
    SessionTotalDetailsBreakdownTax.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Amount = json['Amount'];
        Rate = JsonConverters.fromJson(json['Rate'],'TaxRate',context!);
        TaxabilityReason = json['TaxabilityReason'];
        TaxableAmount = json['TaxableAmount'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Amount': Amount,
        'Rate': JsonConverters.toJson(Rate,'TaxRate',context!),
        'TaxabilityReason': TaxabilityReason,
        'TaxableAmount': TaxableAmount
    });

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

class SessionTotalDetailsBreakdown extends StripeEntity1<SessionTotalDetailsBreakdown> implements IConvertible
{
    List<SessionTotalDetailsBreakdownDiscount>? Discounts;
    List<SessionTotalDetailsBreakdownTax>? Taxes;

    SessionTotalDetailsBreakdown({this.Discounts,this.Taxes});
    SessionTotalDetailsBreakdown.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Discounts = JsonConverters.fromJson(json['Discounts'],'List<SessionTotalDetailsBreakdownDiscount>',context!);
        Taxes = JsonConverters.fromJson(json['Taxes'],'List<SessionTotalDetailsBreakdownTax>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Discounts': JsonConverters.toJson(Discounts,'List<SessionTotalDetailsBreakdownDiscount>',context!),
        'Taxes': JsonConverters.toJson(Taxes,'List<SessionTotalDetailsBreakdownTax>',context!)
    });

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

class SessionTotalDetails extends StripeEntity1<SessionTotalDetails> implements IConvertible
{
    int? AmountDiscount;
    int? AmountShipping;
    int? AmountTax;
    SessionTotalDetailsBreakdown? Breakdown;

    SessionTotalDetails({this.AmountDiscount,this.AmountShipping,this.AmountTax,this.Breakdown});
    SessionTotalDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        AmountDiscount = json['AmountDiscount'];
        AmountShipping = json['AmountShipping'];
        AmountTax = json['AmountTax'];
        Breakdown = JsonConverters.fromJson(json['Breakdown'],'SessionTotalDetailsBreakdown',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'AmountDiscount': AmountDiscount,
        'AmountShipping': AmountShipping,
        'AmountTax': AmountTax,
        'Breakdown': JsonConverters.toJson(Breakdown,'SessionTotalDetailsBreakdown',context!)
    });

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

class Session extends StripeEntity1<Session> implements IHasId, IHasMetadata, IHasObject, IConvertible
{
    String? Id;
    String? Object;
    SessionAfterExpiration? AfterExpiration;
    bool? AllowPromotionCodes;
    int? AmountSubtotal;
    int? AmountTotal;
    SessionAutomaticTax? AutomaticTax;
    String? BillingAddressCollection;
    String? CancelUrl;
    String? ClientReferenceId;
    String? ClientSecret;
    SessionConsent? Consent;
    SessionConsentCollection? ConsentCollection;
    DateTime? Created;
    String? Currency;
    SessionCurrencyConversion? CurrencyConversion;
    List<SessionCustomField>? CustomFields;
    SessionCustomText? CustomText;
    String? CustomerCreation;
    SessionCustomerDetails? CustomerDetails;
    String? CustomerEmail;
    DateTime? ExpiresAt;
    SessionInvoiceCreation? InvoiceCreation;
    StripeList<LineItem>? LineItems;
    bool? Livemode;
    String? Locale;
    Map<String,String?>? Metadata;
    String? Mode;
    String? PaymentMethodCollection;
    SessionPaymentMethodConfigurationDetails? PaymentMethodConfigurationDetails;
    SessionPaymentMethodOptions? PaymentMethodOptions;
    List<String>? PaymentMethodTypes;
    String? PaymentStatus;
    SessionPhoneNumberCollection? PhoneNumberCollection;
    String? RecoveredFrom;
    String? RedirectOnCompletion;
    String? ReturnUrl;
    SessionSavedPaymentMethodOptions? SavedPaymentMethodOptions;
    SessionShippingAddressCollection? ShippingAddressCollection;
    SessionShippingCost? ShippingCost;
    SessionShippingDetails? ShippingDetails;
    List<SessionShippingOption>? ShippingOptions;
    String? Status;
    String? SubmitType;
    String? SuccessUrl;
    SessionTaxIdCollection? TaxIdCollection;
    SessionTotalDetails? TotalDetails;
    String? UiMode;
    String? Url;

    Session({this.Id,this.Object,this.AfterExpiration,this.AllowPromotionCodes,this.AmountSubtotal,this.AmountTotal,this.AutomaticTax,this.BillingAddressCollection,this.CancelUrl,this.ClientReferenceId,this.ClientSecret,this.Consent,this.ConsentCollection,this.Created,this.Currency,this.CurrencyConversion,this.CustomFields,this.CustomText,this.CustomerCreation,this.CustomerDetails,this.CustomerEmail,this.ExpiresAt,this.InvoiceCreation,this.LineItems,this.Livemode,this.Locale,this.Metadata,this.Mode,this.PaymentMethodCollection,this.PaymentMethodConfigurationDetails,this.PaymentMethodOptions,this.PaymentMethodTypes,this.PaymentStatus,this.PhoneNumberCollection,this.RecoveredFrom,this.RedirectOnCompletion,this.ReturnUrl,this.SavedPaymentMethodOptions,this.ShippingAddressCollection,this.ShippingCost,this.ShippingDetails,this.ShippingOptions,this.Status,this.SubmitType,this.SuccessUrl,this.TaxIdCollection,this.TotalDetails,this.UiMode,this.Url});
    Session.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Object = json['Object'];
        AfterExpiration = JsonConverters.fromJson(json['AfterExpiration'],'SessionAfterExpiration',context!);
        AllowPromotionCodes = json['AllowPromotionCodes'];
        AmountSubtotal = json['AmountSubtotal'];
        AmountTotal = json['AmountTotal'];
        AutomaticTax = JsonConverters.fromJson(json['AutomaticTax'],'SessionAutomaticTax',context!);
        BillingAddressCollection = json['BillingAddressCollection'];
        CancelUrl = json['CancelUrl'];
        ClientReferenceId = json['ClientReferenceId'];
        ClientSecret = json['ClientSecret'];
        Consent = JsonConverters.fromJson(json['Consent'],'SessionConsent',context!);
        ConsentCollection = JsonConverters.fromJson(json['ConsentCollection'],'SessionConsentCollection',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Currency = json['Currency'];
        CurrencyConversion = JsonConverters.fromJson(json['CurrencyConversion'],'SessionCurrencyConversion',context!);
        CustomFields = JsonConverters.fromJson(json['CustomFields'],'List<SessionCustomField>',context!);
        CustomText = JsonConverters.fromJson(json['CustomText'],'SessionCustomText',context!);
        CustomerCreation = json['CustomerCreation'];
        CustomerDetails = JsonConverters.fromJson(json['CustomerDetails'],'SessionCustomerDetails',context!);
        CustomerEmail = json['CustomerEmail'];
        ExpiresAt = JsonConverters.fromJson(json['ExpiresAt'],'DateTime',context!);
        InvoiceCreation = JsonConverters.fromJson(json['InvoiceCreation'],'SessionInvoiceCreation',context!);
        LineItems = JsonConverters.fromJson(json['LineItems'],'StripeList<LineItem>',context!);
        Livemode = json['Livemode'];
        Locale = json['Locale'];
        Metadata = JsonConverters.toStringMap(json['Metadata']);
        Mode = json['Mode'];
        PaymentMethodCollection = json['PaymentMethodCollection'];
        PaymentMethodConfigurationDetails = JsonConverters.fromJson(json['PaymentMethodConfigurationDetails'],'SessionPaymentMethodConfigurationDetails',context!);
        PaymentMethodOptions = JsonConverters.fromJson(json['PaymentMethodOptions'],'SessionPaymentMethodOptions',context!);
        PaymentMethodTypes = JsonConverters.fromJson(json['PaymentMethodTypes'],'List<String>',context!);
        PaymentStatus = json['PaymentStatus'];
        PhoneNumberCollection = JsonConverters.fromJson(json['PhoneNumberCollection'],'SessionPhoneNumberCollection',context!);
        RecoveredFrom = json['RecoveredFrom'];
        RedirectOnCompletion = json['RedirectOnCompletion'];
        ReturnUrl = json['ReturnUrl'];
        SavedPaymentMethodOptions = JsonConverters.fromJson(json['SavedPaymentMethodOptions'],'SessionSavedPaymentMethodOptions',context!);
        ShippingAddressCollection = JsonConverters.fromJson(json['ShippingAddressCollection'],'SessionShippingAddressCollection',context!);
        ShippingCost = JsonConverters.fromJson(json['ShippingCost'],'SessionShippingCost',context!);
        ShippingDetails = JsonConverters.fromJson(json['ShippingDetails'],'SessionShippingDetails',context!);
        ShippingOptions = JsonConverters.fromJson(json['ShippingOptions'],'List<SessionShippingOption>',context!);
        Status = json['Status'];
        SubmitType = json['SubmitType'];
        SuccessUrl = json['SuccessUrl'];
        TaxIdCollection = JsonConverters.fromJson(json['TaxIdCollection'],'SessionTaxIdCollection',context!);
        TotalDetails = JsonConverters.fromJson(json['TotalDetails'],'SessionTotalDetails',context!);
        UiMode = json['UiMode'];
        Url = json['Url'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Object': Object,
        'AfterExpiration': JsonConverters.toJson(AfterExpiration,'SessionAfterExpiration',context!),
        'AllowPromotionCodes': AllowPromotionCodes,
        'AmountSubtotal': AmountSubtotal,
        'AmountTotal': AmountTotal,
        'AutomaticTax': JsonConverters.toJson(AutomaticTax,'SessionAutomaticTax',context!),
        'BillingAddressCollection': BillingAddressCollection,
        'CancelUrl': CancelUrl,
        'ClientReferenceId': ClientReferenceId,
        'ClientSecret': ClientSecret,
        'Consent': JsonConverters.toJson(Consent,'SessionConsent',context!),
        'ConsentCollection': JsonConverters.toJson(ConsentCollection,'SessionConsentCollection',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Currency': Currency,
        'CurrencyConversion': JsonConverters.toJson(CurrencyConversion,'SessionCurrencyConversion',context!),
        'CustomFields': JsonConverters.toJson(CustomFields,'List<SessionCustomField>',context!),
        'CustomText': JsonConverters.toJson(CustomText,'SessionCustomText',context!),
        'CustomerCreation': CustomerCreation,
        'CustomerDetails': JsonConverters.toJson(CustomerDetails,'SessionCustomerDetails',context!),
        'CustomerEmail': CustomerEmail,
        'ExpiresAt': JsonConverters.toJson(ExpiresAt,'DateTime',context!),
        'InvoiceCreation': JsonConverters.toJson(InvoiceCreation,'SessionInvoiceCreation',context!),
        'LineItems': JsonConverters.toJson(LineItems,'StripeList<LineItem>',context!),
        'Livemode': Livemode,
        'Locale': Locale,
        'Metadata': Metadata,
        'Mode': Mode,
        'PaymentMethodCollection': PaymentMethodCollection,
        'PaymentMethodConfigurationDetails': JsonConverters.toJson(PaymentMethodConfigurationDetails,'SessionPaymentMethodConfigurationDetails',context!),
        'PaymentMethodOptions': JsonConverters.toJson(PaymentMethodOptions,'SessionPaymentMethodOptions',context!),
        'PaymentMethodTypes': JsonConverters.toJson(PaymentMethodTypes,'List<String>',context!),
        'PaymentStatus': PaymentStatus,
        'PhoneNumberCollection': JsonConverters.toJson(PhoneNumberCollection,'SessionPhoneNumberCollection',context!),
        'RecoveredFrom': RecoveredFrom,
        'RedirectOnCompletion': RedirectOnCompletion,
        'ReturnUrl': ReturnUrl,
        'SavedPaymentMethodOptions': JsonConverters.toJson(SavedPaymentMethodOptions,'SessionSavedPaymentMethodOptions',context!),
        'ShippingAddressCollection': JsonConverters.toJson(ShippingAddressCollection,'SessionShippingAddressCollection',context!),
        'ShippingCost': JsonConverters.toJson(ShippingCost,'SessionShippingCost',context!),
        'ShippingDetails': JsonConverters.toJson(ShippingDetails,'SessionShippingDetails',context!),
        'ShippingOptions': JsonConverters.toJson(ShippingOptions,'List<SessionShippingOption>',context!),
        'Status': Status,
        'SubmitType': SubmitType,
        'SuccessUrl': SuccessUrl,
        'TaxIdCollection': JsonConverters.toJson(TaxIdCollection,'SessionTaxIdCollection',context!),
        'TotalDetails': JsonConverters.toJson(TotalDetails,'SessionTotalDetails',context!),
        'UiMode': UiMode,
        'Url': Url
    });

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

abstract class IPaysonPaymentCheckout1
{
}

class PaymentLog extends BaseModel implements IConvertible
{
    // @References(typeof(Currency))
    String? CurrencyId;

    Currency? CurrencyInfo;
    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? InternalReferenceId;

    // @Required()
    int? ArticleTypeId;

    String? PaymentReferenceId;
    int? PaymentProviderId;
    String? OrderItemReferenceId;
    double? Amount;
    double? VAT;
    double? AmountCredited;
    String? Comments;
    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

    DateTime? ModifiedDate;

    PaymentLog({this.CurrencyId,this.CurrencyInfo,this.CompanyId,this.Id,this.InternalReferenceId,this.ArticleTypeId,this.PaymentReferenceId,this.PaymentProviderId,this.OrderItemReferenceId,this.Amount,this.VAT,this.AmountCredited,this.Comments,this.Created,this.Updated,this.ModifiedDate});
    PaymentLog.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CurrencyId = json['CurrencyId'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        InternalReferenceId = json['InternalReferenceId'];
        ArticleTypeId = json['ArticleTypeId'];
        PaymentReferenceId = json['PaymentReferenceId'];
        PaymentProviderId = json['PaymentProviderId'];
        OrderItemReferenceId = json['OrderItemReferenceId'];
        Amount = JsonConverters.toDouble(json['Amount']);
        VAT = JsonConverters.toDouble(json['VAT']);
        AmountCredited = JsonConverters.toDouble(json['AmountCredited']);
        Comments = json['Comments'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CurrencyId': CurrencyId,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'InternalReferenceId': InternalReferenceId,
        'ArticleTypeId': ArticleTypeId,
        'PaymentReferenceId': PaymentReferenceId,
        'PaymentProviderId': PaymentProviderId,
        'OrderItemReferenceId': OrderItemReferenceId,
        'Amount': Amount,
        'VAT': VAT,
        'AmountCredited': AmountCredited,
        'Comments': Comments,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

abstract class PayableEntity extends BaseModel
{
    // @Ignore()
    IDbConnectionFactory? DbFactory;

    // @Ignore()
    IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>? QvicklyPaymentManager;

    // @Ignore()
    IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>? Payson2PaymentManager;

    // @Ignore()
    IBokameraPaymentManager<SessionCreateOptions,Session,Session>? StripePaymentManager;

    // @Ignore()
    IPaysonPaymentCheckout1? PaysonPaymentCheckout1;

    // @Ignore()
    ILogger<PayableEntity>? Logger;

    // @Ignore()
    String? InternalReferenceId;

    // @Ignore()
    List<PaymentLog>? PaymentLog;

    String? CompanyId;
    double? PriceVat;
    // @References(typeof(Currency))
    String? CurrencyId;

    // @Ignore()
    Customer? Customer;

    // @Ignore()
    List<Customer>? Customers;

    // @Ignore()
    Company? Company;

    PayableEntity({this.DbFactory,this.QvicklyPaymentManager,this.Payson2PaymentManager,this.StripePaymentManager,this.PaysonPaymentCheckout1,this.Logger,this.InternalReferenceId,this.PaymentLog,this.CompanyId,this.PriceVat,this.CurrencyId,this.Customer,this.Customers,this.Company});
    PayableEntity.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DbFactory = JsonConverters.fromJson(json['DbFactory'],'IDbConnectionFactory',context!);
        QvicklyPaymentManager = JsonConverters.fromJson(json['QvicklyPaymentManager'],'IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>',context!);
        Payson2PaymentManager = JsonConverters.fromJson(json['Payson2PaymentManager'],'IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>',context!);
        StripePaymentManager = JsonConverters.fromJson(json['StripePaymentManager'],'IBokameraPaymentManager<SessionCreateOptions,Session,Session>',context!);
        PaysonPaymentCheckout1 = JsonConverters.fromJson(json['PaysonPaymentCheckout1'],'IPaysonPaymentCheckout1',context!);
        Logger = JsonConverters.fromJson(json['Logger'],'ILogger<PayableEntity>',context!);
        InternalReferenceId = json['InternalReferenceId'];
        PaymentLog = JsonConverters.fromJson(json['PaymentLog'],'List<PaymentLog>',context!);
        CompanyId = json['CompanyId'];
        PriceVat = JsonConverters.toDouble(json['PriceVat']);
        CurrencyId = json['CurrencyId'];
        Customer = JsonConverters.fromJson(json['Customer'],'Customer',context!);
        Customers = JsonConverters.fromJson(json['Customers'],'List<Customer>',context!);
        Company = JsonConverters.fromJson(json['Company'],'Company',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DbFactory': JsonConverters.toJson(DbFactory,'IDbConnectionFactory',context!),
        'QvicklyPaymentManager': JsonConverters.toJson(QvicklyPaymentManager,'IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>',context!),
        'Payson2PaymentManager': JsonConverters.toJson(Payson2PaymentManager,'IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>',context!),
        'StripePaymentManager': JsonConverters.toJson(StripePaymentManager,'IBokameraPaymentManager<SessionCreateOptions,Session,Session>',context!),
        'PaysonPaymentCheckout1': JsonConverters.toJson(PaysonPaymentCheckout1,'IPaysonPaymentCheckout1',context!),
        'Logger': JsonConverters.toJson(Logger,'ILogger<PayableEntity>',context!),
        'InternalReferenceId': InternalReferenceId,
        'PaymentLog': JsonConverters.toJson(PaymentLog,'List<PaymentLog>',context!),
        'CompanyId': CompanyId,
        'PriceVat': PriceVat,
        'CurrencyId': CurrencyId,
        'Customer': JsonConverters.toJson(Customer,'Customer',context!),
        'Customers': JsonConverters.toJson(Customers,'List<Customer>',context!),
        'Company': JsonConverters.toJson(Company,'Company',context!)
    });

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

class RebateCodeStatus extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    String? Description;
    DateTime? ModifiedDate;
    int? Id;

    RebateCodeStatus({this.Name,this.Description,this.ModifiedDate,this.Id});
    RebateCodeStatus.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

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

    int? Id;
    // @Required()
    int? ServiceId;

    // @Required()
    int? ArticleId;

    ArticleServiceRelation({this.CompanyId,this.Id,this.ServiceId,this.ArticleId});
    ArticleServiceRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        ServiceId = json['ServiceId'];
        ArticleId = json['ArticleId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'ServiceId': ServiceId,
        'ArticleId': ArticleId
    });

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

enum ArticleTypeEnum
{
    ServiceArticle,
    StandAloneArticle,
    RebateCodePunchTicketArticle,
    RebateCodeGiftCardArticle,
    RebateCodeValueCardArticle,
}

class Article extends BaseModel implements IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    Company? Company;
    Currency? CurrencyInfo;
    List<ArticleServiceRelation>? ArticleServiceRelations;
    // @Ignore()
    List<int>? ServiceIds;

    // @Ignore()
    ArticleTypeEnum? ArticleType;

    // @Ignore()
    String? ArticleTypeName;

    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? Name;

    // @Required()
    int? ArticleTypeId;

    String? Description;
    String? ImageUrl;
    // @Required()
    bool? Active;

    // @Required()
    int? Amount;

    // @Required()
    double? Price;

    // @Required()
    // @StringLength(50)
    String? CurrencyId;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    DateTime? ModifiedDate;

    Article({this.Company,this.CurrencyInfo,this.ArticleServiceRelations,this.ServiceIds,this.ArticleType,this.ArticleTypeName,this.CompanyId,this.Id,this.Name,this.ArticleTypeId,this.Description,this.ImageUrl,this.Active,this.Amount,this.Price,this.CurrencyId,this.UpdatedDate,this.CreatedDate,this.ModifiedDate});
    Article.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Company = JsonConverters.fromJson(json['Company'],'Company',context!);
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        ArticleServiceRelations = JsonConverters.fromJson(json['ArticleServiceRelations'],'List<ArticleServiceRelation>',context!);
        ServiceIds = JsonConverters.fromJson(json['ServiceIds'],'List<int>',context!);
        ArticleType = JsonConverters.fromJson(json['ArticleType'],'ArticleTypeEnum',context!);
        ArticleTypeName = json['ArticleTypeName'];
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Name = json['Name'];
        ArticleTypeId = json['ArticleTypeId'];
        Description = json['Description'];
        ImageUrl = json['ImageUrl'];
        Active = json['Active'];
        Amount = json['Amount'];
        Price = JsonConverters.toDouble(json['Price']);
        CurrencyId = json['CurrencyId'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Company': JsonConverters.toJson(Company,'Company',context!),
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'ArticleServiceRelations': JsonConverters.toJson(ArticleServiceRelations,'List<ArticleServiceRelation>',context!),
        'ServiceIds': JsonConverters.toJson(ServiceIds,'List<int>',context!),
        'ArticleType': JsonConverters.toJson(ArticleType,'ArticleTypeEnum',context!),
        'ArticleTypeName': ArticleTypeName,
        'CompanyId': CompanyId,
        'Id': Id,
        'Name': Name,
        'ArticleTypeId': ArticleTypeId,
        'Description': Description,
        'ImageUrl': ImageUrl,
        'Active': Active,
        'Amount': Amount,
        'Price': Price,
        'CurrencyId': CurrencyId,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

class RebateCodeDayOfWeekRelation extends BaseModel implements IConvertible
{
    // @Ignore()
    BokaMeraDayOfWeek? DayOfWeek;

    // @Required()
    int? DayOfWeekId;

    // @Required()
    int? RebateCodeId;

    // @Required()
    String? CompanyId;

    int? Id;
    DateTime? ModifiedDate;

    RebateCodeDayOfWeekRelation({this.DayOfWeek,this.DayOfWeekId,this.RebateCodeId,this.CompanyId,this.Id,this.ModifiedDate});
    RebateCodeDayOfWeekRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DayOfWeek = JsonConverters.fromJson(json['DayOfWeek'],'BokaMeraDayOfWeek',context!);
        DayOfWeekId = json['DayOfWeekId'];
        RebateCodeId = json['RebateCodeId'];
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DayOfWeek': JsonConverters.toJson(DayOfWeek,'BokaMeraDayOfWeek',context!),
        'DayOfWeekId': DayOfWeekId,
        'RebateCodeId': RebateCodeId,
        'CompanyId': CompanyId,
        'Id': Id,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

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

    // @Required()
    int? ServiceId;

    // @Required()
    int? RebateCodeId;

    int? Id;
    DateTime? ModifiedDate;

    RebateCodeServiceRelation({this.CompanyId,this.ServiceId,this.RebateCodeId,this.Id,this.ModifiedDate});
    RebateCodeServiceRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        ServiceId = json['ServiceId'];
        RebateCodeId = json['RebateCodeId'];
        Id = json['Id'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'ServiceId': ServiceId,
        'RebateCodeId': RebateCodeId,
        'Id': Id,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

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

    // @Required()
    int? PriceId;

    // @Required()
    int? RebateCodeId;

    int? Id;
    DateTime? ModifiedDate;

    RebateCodeBookingPriceRelation({this.CompanyId,this.PriceId,this.RebateCodeId,this.Id,this.ModifiedDate});
    RebateCodeBookingPriceRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        PriceId = json['PriceId'];
        RebateCodeId = json['RebateCodeId'];
        Id = json['Id'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'PriceId': PriceId,
        'RebateCodeId': RebateCodeId,
        'Id': Id,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

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

    // @Required()
    String? CustomerId;

    // @Required()
    int? RebateCodeId;

    int? Id;
    DateTime? ModifiedDate;
    bool? RebateCodeEmailSentToCustomer;
    String? MessageToReceiver;
    bool? Buyer;

    RebateCodeCustomerRelation({this.CompanyId,this.CustomerId,this.RebateCodeId,this.Id,this.ModifiedDate,this.RebateCodeEmailSentToCustomer,this.MessageToReceiver,this.Buyer});
    RebateCodeCustomerRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        CustomerId = json['CustomerId'];
        RebateCodeId = json['RebateCodeId'];
        Id = json['Id'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        RebateCodeEmailSentToCustomer = json['RebateCodeEmailSentToCustomer'];
        MessageToReceiver = json['MessageToReceiver'];
        Buyer = json['Buyer'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'CustomerId': CustomerId,
        'RebateCodeId': RebateCodeId,
        'Id': Id,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'RebateCodeEmailSentToCustomer': RebateCodeEmailSentToCustomer,
        'MessageToReceiver': MessageToReceiver,
        'Buyer': Buyer
    });

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

class DaysOfWeek extends BaseModel implements IConvertible
{
    // @Required()
    String? DayOfWeek;

    // @Required()
    String? DayOfWeekTranslation;

    bool? DayOfWeekActive;
    int? DayOfWeekSortOrder;
    DateTime? ModifiedDate;
    int? Id;

    DaysOfWeek({this.DayOfWeek,this.DayOfWeekTranslation,this.DayOfWeekActive,this.DayOfWeekSortOrder,this.ModifiedDate,this.Id});
    DaysOfWeek.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DayOfWeek = json['DayOfWeek'];
        DayOfWeekTranslation = json['DayOfWeekTranslation'];
        DayOfWeekActive = json['DayOfWeekActive'];
        DayOfWeekSortOrder = json['DayOfWeekSortOrder'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DayOfWeek': DayOfWeek,
        'DayOfWeekTranslation': DayOfWeekTranslation,
        'DayOfWeekActive': DayOfWeekActive,
        'DayOfWeekSortOrder': DayOfWeekSortOrder,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

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

    // @Required()
    int? BookingId;

    // @Required()
    int? ExceptionId;

    bool? CalendarSync;
    String? CalendarId;
    bool? IsExceptionDeleted;
    DateTime? ModifiedDate;
    int? Id;

    CalendarExport({this.CompanyId,this.BookingId,this.ExceptionId,this.CalendarSync,this.CalendarId,this.IsExceptionDeleted,this.ModifiedDate,this.Id});
    CalendarExport.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        BookingId = json['BookingId'];
        ExceptionId = json['ExceptionId'];
        CalendarSync = json['CalendarSync'];
        CalendarId = json['CalendarId'];
        IsExceptionDeleted = json['IsExceptionDeleted'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'BookingId': BookingId,
        'ExceptionId': ExceptionId,
        'CalendarSync': CalendarSync,
        'CalendarId': CalendarId,
        'IsExceptionDeleted': IsExceptionDeleted,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class BookingLogEventType extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    DateTime? ModifiedDate;
    // @Required()
    int? Id;

    BookingLogEventType({this.Name,this.Description,this.ModifiedDate,this.Id});
    BookingLogEventType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class BookingLog extends BaseModel implements IConvertible
{
    // @References(typeof(BookingLogEventType))
    int? EventTypeId;

    BookingLogEventType? EventType;
    // @Required()
    String? CompanyId;

    // @Required()
    int? BookingId;

    int? Id;
    String? Comments;
    String? UserId;
    // @Required()
    DateTime? Created;

    DateTime? ModifiedDate;

    BookingLog({this.EventTypeId,this.EventType,this.CompanyId,this.BookingId,this.Id,this.Comments,this.UserId,this.Created,this.ModifiedDate});
    BookingLog.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        EventTypeId = json['EventTypeId'];
        EventType = JsonConverters.fromJson(json['EventType'],'BookingLogEventType',context!);
        CompanyId = json['CompanyId'];
        BookingId = json['BookingId'];
        Id = json['Id'];
        Comments = json['Comments'];
        UserId = json['UserId'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'EventTypeId': EventTypeId,
        'EventType': JsonConverters.toJson(EventType,'BookingLogEventType',context!),
        'CompanyId': CompanyId,
        'BookingId': BookingId,
        'Id': Id,
        'Comments': Comments,
        'UserId': UserId,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

class PaymentDetails extends BaseModel implements IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    QvicklyCheckoutResponse? QvicklyCheckoutSerialized;

    // @Ignore()
    Payson2CheckoutResponse? Payson2CheckoutSerialized;

    // @Required()
    String? CompanyId;

    // @Required()
    String? InternalReferenceId;

    // @Required()
    int? ArticleTypeId;

    // @Required()
    String? ExternalResponseData;

    // @Required()
    String? ExternalResponseReference;

    // @Required()
    int? PaymentProviderId;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    DateTime? UpdatedDate;

    DateTime? ModifiedDate;

    PaymentDetails({this.QvicklyCheckoutSerialized,this.Payson2CheckoutSerialized,this.CompanyId,this.InternalReferenceId,this.ArticleTypeId,this.ExternalResponseData,this.ExternalResponseReference,this.PaymentProviderId,this.CreatedDate,this.UpdatedDate,this.ModifiedDate});
    PaymentDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        QvicklyCheckoutSerialized = JsonConverters.fromJson(json['QvicklyCheckoutSerialized'],'QvicklyCheckoutResponse',context!);
        Payson2CheckoutSerialized = JsonConverters.fromJson(json['Payson2CheckoutSerialized'],'Payson2CheckoutResponse',context!);
        CompanyId = json['CompanyId'];
        InternalReferenceId = json['InternalReferenceId'];
        ArticleTypeId = json['ArticleTypeId'];
        ExternalResponseData = json['ExternalResponseData'];
        ExternalResponseReference = json['ExternalResponseReference'];
        PaymentProviderId = json['PaymentProviderId'];
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'QvicklyCheckoutSerialized': JsonConverters.toJson(QvicklyCheckoutSerialized,'QvicklyCheckoutResponse',context!),
        'Payson2CheckoutSerialized': JsonConverters.toJson(Payson2CheckoutSerialized,'Payson2CheckoutResponse',context!),
        'CompanyId': CompanyId,
        'InternalReferenceId': InternalReferenceId,
        'ArticleTypeId': ArticleTypeId,
        'ExternalResponseData': ExternalResponseData,
        'ExternalResponseReference': ExternalResponseReference,
        'PaymentProviderId': PaymentProviderId,
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

class BookingPrice extends BaseModel implements IConvertible
{
    // @References(typeof(Currency))
    String? CurrencyId;

    int? PriceId;
    Currency? CurrencyInfo;
    // @Ignore()
    String? PriceText;

    // @Ignore()
    List<AppliedRebateCodes>? AppliedCodes;

    // @Ignore()
    bool? IsRebate;

    // @Required()
    String? CompanyId;

    // @Required()
    int? BookingId;

    // @Required()
    int? Quantity;

    double? Price;
    double? VAT;
    String? Category;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    // @Required()
    bool? Invoiced;

    // @Required()
    bool? OccupiesSpot;

    DateTime? ModifiedDate;
    int? Id;

    BookingPrice({this.CurrencyId,this.PriceId,this.CurrencyInfo,this.PriceText,this.AppliedCodes,this.IsRebate,this.CompanyId,this.BookingId,this.Quantity,this.Price,this.VAT,this.Category,this.Updated,this.Created,this.Invoiced,this.OccupiesSpot,this.ModifiedDate,this.Id});
    BookingPrice.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CurrencyId = json['CurrencyId'];
        PriceId = json['PriceId'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        PriceText = json['PriceText'];
        AppliedCodes = JsonConverters.fromJson(json['AppliedCodes'],'List<AppliedRebateCodes>',context!);
        IsRebate = json['IsRebate'];
        CompanyId = json['CompanyId'];
        BookingId = json['BookingId'];
        Quantity = json['Quantity'];
        Price = JsonConverters.toDouble(json['Price']);
        VAT = JsonConverters.toDouble(json['VAT']);
        Category = json['Category'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Invoiced = json['Invoiced'];
        OccupiesSpot = json['OccupiesSpot'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CurrencyId': CurrencyId,
        'PriceId': PriceId,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'PriceText': PriceText,
        'AppliedCodes': JsonConverters.toJson(AppliedCodes,'List<AppliedRebateCodes>',context!),
        'IsRebate': IsRebate,
        'CompanyId': CompanyId,
        'BookingId': BookingId,
        'Quantity': Quantity,
        'Price': Price,
        'VAT': VAT,
        'Category': Category,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Invoiced': Invoiced,
        'OccupiesSpot': OccupiesSpot,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class BookingStatus extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Color;

    // @Required()
    String? Icon;

    DateTime? ModifiedDate;
    int? Id;

    BookingStatus({this.Name,this.Description,this.Color,this.Icon,this.ModifiedDate,this.Id});
    BookingStatus.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        Description = json['Description'];
        Color = json['Color'];
        Icon = json['Icon'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'Description': Description,
        'Color': Color,
        'Icon': Icon,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

class BookedResource implements IConvertible
{
    int? Id;
    String? Name;
    String? Color;
    Uri? ImageUrl;
    String? Email;
    String? MobilePhone;
    String? AccessGroup;
    bool? EmailNotification;
    bool? SMSNotification;
    bool? EmailReminder;
    bool? SMSReminder;

    BookedResource({this.Id,this.Name,this.Color,this.ImageUrl,this.Email,this.MobilePhone,this.AccessGroup,this.EmailNotification,this.SMSNotification,this.EmailReminder,this.SMSReminder});
    BookedResource.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        Color = json['Color'];
        ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
        Email = json['Email'];
        MobilePhone = json['MobilePhone'];
        AccessGroup = json['AccessGroup'];
        EmailNotification = json['EmailNotification'];
        SMSNotification = json['SMSNotification'];
        EmailReminder = json['EmailReminder'];
        SMSReminder = json['SMSReminder'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Color': Color,
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!),
        'Email': Email,
        'MobilePhone': MobilePhone,
        'AccessGroup': AccessGroup,
        'EmailNotification': EmailNotification,
        'SMSNotification': SMSNotification,
        'EmailReminder': EmailReminder,
        'SMSReminder': SMSReminder
    };

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

class BookedResourceType implements IConvertible
{
    /**
    * The resource type id
    */
    // @ApiMember(Description="The resource type id")
    int? Id;

    /**
    * The resource type name
    */
    // @ApiMember(Description="The resource type name")
    String? Name;

    /**
    * The resources inside resource type
    */
    // @ApiMember(Description="The resources inside resource type")
    List<BookedResource>? Resources;

    BookedResourceType({this.Id,this.Name,this.Resources});
    BookedResourceType.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        Resources = JsonConverters.fromJson(json['Resources'],'List<BookedResource>',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Resources': JsonConverters.toJson(Resources,'List<BookedResource>',context!)
    };

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

class Booking extends PayableEntity implements IInterval, ICustomFieldTable, IBaseModelUpdated, IBaseModelCreated, IConvertible
{
    // @Ignore()
    Service? Service;

    // @Ignore()
    CalendarExport? CalendarExport;

    // @Ignore()
    List<BookingLog>? Log;

    // @Ignore()
    List<PaymentDetails>? CheckoutLogs;

    // @Ignore()
    List<BookingPrice>? Prices;

    // @Ignore()
    BookingStatusEnum? Status;

    // @Ignore()
    bool? isReserved;

    // @Ignore()
    String? StatusName;

    Currency? CurrencyInfo;
    BookingStatus? BookingStatus;
    // @Ignore()
    double? TotalPrice;

    // @Ignore()
    int? TotalSpots;

    // @Ignore()
    List<Resource>? Resources;

    // @Ignore()
    List<ExternalReference>? ExternalReferences;

    // @Ignore()
    List<BookedResourceType>? BookedResources;

    // @Ignore()
    List<CustomFieldConfig>? CustomFieldsConfig;

    // @Ignore()
    List<CustomFieldDataResponse>? CustomFieldsData;

    // @Ignore()
    String? DeterministicId;

    // @Ignore()
    bool? Active;

    // @Ignore()
    DateTime? LastTimeToUnBook;

    // @Ignore()
    List<PriceMapping>? PriceMappings;

    // @Ignore()
    String? InternalReferenceId;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    int? Id;
    // @Required()
    String? CustomerId;

    // @Required()
    int? ServiceId;

    // @Required()
    int? StatusId;

    DateTime? UnbookedOn;
    String? UnbookedComments;
    String? BookedComments;
    // @Required()
    String? BookedBy;

    String? UnBookedBy;
    // @Required()
    bool? SendSmsReminder;

    // @Required()
    bool? SendEmailReminder;

    // @Required()
    bool? SendSmsConfirmation;

    String? RebateCode;
    String? Comments;
    String? IpAddress;
    // @Required()
    int? NumberOfBookedSpots;

    String? CommentsToCustomer;
    DateTime? PaymentExpiration;
    // @Required()
    bool? SendEmailConfirmation;

    String? CancellationCode;
    DateTime? ModifiedDate;
    String? RatingCode;
    String? TextField1;
    String? TextField2;
    String? TextField3;
    String? TextField4;
    String? TextField5;
    String? TextField6;
    String? TextField7;
    String? TextField8;
    String? TextField9;
    String? TextField10;
    String? TextField11;
    String? TextField12;
    String? TextField13;
    String? TextField14;
    String? TextField15;
    String? TextField16;
    String? TextField17;
    String? TextField18;
    String? TextField19;
    String? TextField20;
    // @Required()
    DateTime? From;

    // @Required()
    DateTime? To;

    Booking({this.Service,this.CalendarExport,this.Log,this.CheckoutLogs,this.Prices,this.Status,this.isReserved,this.StatusName,this.CurrencyInfo,this.BookingStatus,this.TotalPrice,this.TotalSpots,this.Resources,this.ExternalReferences,this.BookedResources,this.CustomFieldsConfig,this.CustomFieldsData,this.DeterministicId,this.Active,this.LastTimeToUnBook,this.PriceMappings,this.InternalReferenceId,this.UpdatedDate,this.CreatedDate,this.Id,this.CustomerId,this.ServiceId,this.StatusId,this.UnbookedOn,this.UnbookedComments,this.BookedComments,this.BookedBy,this.UnBookedBy,this.SendSmsReminder,this.SendEmailReminder,this.SendSmsConfirmation,this.RebateCode,this.Comments,this.IpAddress,this.NumberOfBookedSpots,this.CommentsToCustomer,this.PaymentExpiration,this.SendEmailConfirmation,this.CancellationCode,this.ModifiedDate,this.RatingCode,this.TextField1,this.TextField2,this.TextField3,this.TextField4,this.TextField5,this.TextField6,this.TextField7,this.TextField8,this.TextField9,this.TextField10,this.TextField11,this.TextField12,this.TextField13,this.TextField14,this.TextField15,this.TextField16,this.TextField17,this.TextField18,this.TextField19,this.TextField20,this.From,this.To});
    Booking.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Service = JsonConverters.fromJson(json['Service'],'Service',context!);
        CalendarExport = JsonConverters.fromJson(json['CalendarExport'],'CalendarExport',context!);
        Log = JsonConverters.fromJson(json['Log'],'List<BookingLog>',context!);
        CheckoutLogs = JsonConverters.fromJson(json['CheckoutLogs'],'List<PaymentDetails>',context!);
        Prices = JsonConverters.fromJson(json['Prices'],'List<BookingPrice>',context!);
        Status = JsonConverters.fromJson(json['Status'],'BookingStatusEnum',context!);
        isReserved = json['isReserved'];
        StatusName = json['StatusName'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        BookingStatus = JsonConverters.fromJson(json['BookingStatus'],'BookingStatus',context!);
        TotalPrice = JsonConverters.toDouble(json['TotalPrice']);
        TotalSpots = json['TotalSpots'];
        Resources = JsonConverters.fromJson(json['Resources'],'List<Resource>',context!);
        ExternalReferences = JsonConverters.fromJson(json['ExternalReferences'],'List<ExternalReference>',context!);
        BookedResources = JsonConverters.fromJson(json['BookedResources'],'List<BookedResourceType>',context!);
        CustomFieldsConfig = JsonConverters.fromJson(json['CustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsData = JsonConverters.fromJson(json['CustomFieldsData'],'List<CustomFieldDataResponse>',context!);
        DeterministicId = json['DeterministicId'];
        Active = json['Active'];
        LastTimeToUnBook = JsonConverters.fromJson(json['LastTimeToUnBook'],'DateTime',context!);
        PriceMappings = JsonConverters.fromJson(json['PriceMappings'],'List<PriceMapping>',context!);
        InternalReferenceId = json['InternalReferenceId'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        Id = json['Id'];
        CustomerId = json['CustomerId'];
        ServiceId = json['ServiceId'];
        StatusId = json['StatusId'];
        UnbookedOn = JsonConverters.fromJson(json['UnbookedOn'],'DateTime',context!);
        UnbookedComments = json['UnbookedComments'];
        BookedComments = json['BookedComments'];
        BookedBy = json['BookedBy'];
        UnBookedBy = json['UnBookedBy'];
        SendSmsReminder = json['SendSmsReminder'];
        SendEmailReminder = json['SendEmailReminder'];
        SendSmsConfirmation = json['SendSmsConfirmation'];
        RebateCode = json['RebateCode'];
        Comments = json['Comments'];
        IpAddress = json['IpAddress'];
        NumberOfBookedSpots = json['NumberOfBookedSpots'];
        CommentsToCustomer = json['CommentsToCustomer'];
        PaymentExpiration = JsonConverters.fromJson(json['PaymentExpiration'],'DateTime',context!);
        SendEmailConfirmation = json['SendEmailConfirmation'];
        CancellationCode = json['CancellationCode'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        RatingCode = json['RatingCode'];
        TextField1 = json['TextField1'];
        TextField2 = json['TextField2'];
        TextField3 = json['TextField3'];
        TextField4 = json['TextField4'];
        TextField5 = json['TextField5'];
        TextField6 = json['TextField6'];
        TextField7 = json['TextField7'];
        TextField8 = json['TextField8'];
        TextField9 = json['TextField9'];
        TextField10 = json['TextField10'];
        TextField11 = json['TextField11'];
        TextField12 = json['TextField12'];
        TextField13 = json['TextField13'];
        TextField14 = json['TextField14'];
        TextField15 = json['TextField15'];
        TextField16 = json['TextField16'];
        TextField17 = json['TextField17'];
        TextField18 = json['TextField18'];
        TextField19 = json['TextField19'];
        TextField20 = json['TextField20'];
        From = JsonConverters.fromJson(json['From'],'DateTime',context!);
        To = JsonConverters.fromJson(json['To'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Service': JsonConverters.toJson(Service,'Service',context!),
        'CalendarExport': JsonConverters.toJson(CalendarExport,'CalendarExport',context!),
        'Log': JsonConverters.toJson(Log,'List<BookingLog>',context!),
        'CheckoutLogs': JsonConverters.toJson(CheckoutLogs,'List<PaymentDetails>',context!),
        'Prices': JsonConverters.toJson(Prices,'List<BookingPrice>',context!),
        'Status': JsonConverters.toJson(Status,'BookingStatusEnum',context!),
        'isReserved': isReserved,
        'StatusName': StatusName,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'BookingStatus': JsonConverters.toJson(BookingStatus,'BookingStatus',context!),
        'TotalPrice': TotalPrice,
        'TotalSpots': TotalSpots,
        'Resources': JsonConverters.toJson(Resources,'List<Resource>',context!),
        'ExternalReferences': JsonConverters.toJson(ExternalReferences,'List<ExternalReference>',context!),
        'BookedResources': JsonConverters.toJson(BookedResources,'List<BookedResourceType>',context!),
        'CustomFieldsConfig': JsonConverters.toJson(CustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsData': JsonConverters.toJson(CustomFieldsData,'List<CustomFieldDataResponse>',context!),
        'DeterministicId': DeterministicId,
        'Active': Active,
        'LastTimeToUnBook': JsonConverters.toJson(LastTimeToUnBook,'DateTime',context!),
        'PriceMappings': JsonConverters.toJson(PriceMappings,'List<PriceMapping>',context!),
        'InternalReferenceId': InternalReferenceId,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'Id': Id,
        'CustomerId': CustomerId,
        'ServiceId': ServiceId,
        'StatusId': StatusId,
        'UnbookedOn': JsonConverters.toJson(UnbookedOn,'DateTime',context!),
        'UnbookedComments': UnbookedComments,
        'BookedComments': BookedComments,
        'BookedBy': BookedBy,
        'UnBookedBy': UnBookedBy,
        'SendSmsReminder': SendSmsReminder,
        'SendEmailReminder': SendEmailReminder,
        'SendSmsConfirmation': SendSmsConfirmation,
        'RebateCode': RebateCode,
        'Comments': Comments,
        'IpAddress': IpAddress,
        'NumberOfBookedSpots': NumberOfBookedSpots,
        'CommentsToCustomer': CommentsToCustomer,
        'PaymentExpiration': JsonConverters.toJson(PaymentExpiration,'DateTime',context!),
        'SendEmailConfirmation': SendEmailConfirmation,
        'CancellationCode': CancellationCode,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'RatingCode': RatingCode,
        'TextField1': TextField1,
        'TextField2': TextField2,
        'TextField3': TextField3,
        'TextField4': TextField4,
        'TextField5': TextField5,
        'TextField6': TextField6,
        'TextField7': TextField7,
        'TextField8': TextField8,
        'TextField9': TextField9,
        'TextField10': TextField10,
        'TextField11': TextField11,
        'TextField12': TextField12,
        'TextField13': TextField13,
        'TextField14': TextField14,
        'TextField15': TextField15,
        'TextField16': TextField16,
        'TextField17': TextField17,
        'TextField18': TextField18,
        'TextField19': TextField19,
        'TextField20': TextField20,
        'From': JsonConverters.toJson(From,'DateTime',context!),
        'To': JsonConverters.toJson(To,'DateTime',context!)
    });

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

class RebateCodeTransaction extends BaseModel implements IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    Booking? Booking;

    // @Ignore()
    RebateCode? RebateCode;

    // @Ignore()
    Customer? Customer;

    int? Id;
    String? CompanyId;
    String? Note;
    // @Required()
    int? RebateCodeId;

    // @Required()
    double? Amount;

    // @Required()
    int? Usage;

    int? BookingId;
    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    RebateCodeTransaction({this.Booking,this.RebateCode,this.Customer,this.Id,this.CompanyId,this.Note,this.RebateCodeId,this.Amount,this.Usage,this.BookingId,this.UpdatedDate,this.CreatedDate});
    RebateCodeTransaction.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Booking = JsonConverters.fromJson(json['Booking'],'Booking',context!);
        RebateCode = JsonConverters.fromJson(json['RebateCode'],'RebateCode',context!);
        Customer = JsonConverters.fromJson(json['Customer'],'Customer',context!);
        Id = json['Id'];
        CompanyId = json['CompanyId'];
        Note = json['Note'];
        RebateCodeId = json['RebateCodeId'];
        Amount = JsonConverters.toDouble(json['Amount']);
        Usage = json['Usage'];
        BookingId = json['BookingId'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Booking': JsonConverters.toJson(Booking,'Booking',context!),
        'RebateCode': JsonConverters.toJson(RebateCode,'RebateCode',context!),
        'Customer': JsonConverters.toJson(Customer,'Customer',context!),
        'Id': Id,
        'CompanyId': CompanyId,
        'Note': Note,
        'RebateCodeId': RebateCodeId,
        'Amount': Amount,
        'Usage': Usage,
        'BookingId': BookingId,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!)
    });

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

class RebateCode extends PayableEntity implements IConvertible
{
    // @References(typeof(RebateCodeType))
    int? RebateCodeTypeId;

    RebateCodeType? RebateCodeTypeInfo;
    // @References(typeof(RebateCodeStatus))
    int? RebateCodeStatusId;

    RebateCodeStatus? RebateCodeStatusInfo;
    // @Ignore()
    Article? Article;

    // @Ignore()
    List<Service>? Services;

    List<RebateCodeDayOfWeekRelation>? RebateCodeDayOfWeekRelation;
    List<RebateCodeServiceRelation>? RebateCodeServiceRelation;
    List<RebateCodeBookingPriceRelation>? RebateCodeBookingPriceRelation;
    List<RebateCodeCustomerRelation>? RebateCodeCustomerRelation;
    // @Ignore()
    String? ServicesNames;

    // @Ignore()
    List<DaysOfWeek>? DaysOfWeek;

    // @Ignore()
    RebateCodeStatus? RebateCodeStatus;

    // @Ignore()
    RebateCodeType? RebateCodeType;

    // @Ignore()
    List<RebateCodeTransaction>? Transactions;

    // @Ignore()
    double? RemainingAmount;

    // @Ignore()
    int? RemainingUsage;

    // @Ignore()
    int? CurrentNumberOfUsesPerCustomer;

    // @Ignore()
    bool? IsSpecificByDayOfWeek;

    // @Ignore()
    bool? Active;

    // @Ignore()
    bool? ActiveByStatus;

    // @Ignore()
    String? RebateCodeCurrencySign;

    Currency? CurrencyInfo;
    // @Ignore()
    bool? PaymentReceived;

    // @Ignore()
    String? InternalReferenceId;

    // @Required()
    DateTime? ValidFrom;

    // @Required()
    DateTime? ValidTo;

    // @Required()
    String? RebateCodeSign;

    // @Required()
    int? RebateCodeValue;

    // @Required()
    int? MaxNumberOfUses;

    // @Required()
    int? MaxNumberOfUsesPerCustomer;

    // @Required()
    int? NumberOfUsesUsed;

    String? PersonalNote;
    // @Required()
    String? CreatedBy;

    // @Required()
    DateTime? Created;

    // @Required()
    String? UpdatedBy;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    Duration? FromTime;

    // @Required()
    Duration? ToTime;

    DateTime? ModifiedDate;
    int? Id;
    int? ArticleId;

    RebateCode({this.RebateCodeTypeId,this.RebateCodeTypeInfo,this.RebateCodeStatusId,this.RebateCodeStatusInfo,this.Article,this.Services,this.RebateCodeDayOfWeekRelation,this.RebateCodeServiceRelation,this.RebateCodeBookingPriceRelation,this.RebateCodeCustomerRelation,this.ServicesNames,this.DaysOfWeek,this.RebateCodeStatus,this.RebateCodeType,this.Transactions,this.RemainingAmount,this.RemainingUsage,this.CurrentNumberOfUsesPerCustomer,this.IsSpecificByDayOfWeek,this.Active,this.ActiveByStatus,this.RebateCodeCurrencySign,this.CurrencyInfo,this.PaymentReceived,this.InternalReferenceId,this.ValidFrom,this.ValidTo,this.RebateCodeSign,this.RebateCodeValue,this.MaxNumberOfUses,this.MaxNumberOfUsesPerCustomer,this.NumberOfUsesUsed,this.PersonalNote,this.CreatedBy,this.Created,this.UpdatedBy,this.UpdatedDate,this.FromTime,this.ToTime,this.ModifiedDate,this.Id,this.ArticleId});
    RebateCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        RebateCodeTypeId = json['RebateCodeTypeId'];
        RebateCodeTypeInfo = JsonConverters.fromJson(json['RebateCodeTypeInfo'],'RebateCodeType',context!);
        RebateCodeStatusId = json['RebateCodeStatusId'];
        RebateCodeStatusInfo = JsonConverters.fromJson(json['RebateCodeStatusInfo'],'RebateCodeStatus',context!);
        Article = JsonConverters.fromJson(json['Article'],'Article',context!);
        Services = JsonConverters.fromJson(json['Services'],'List<Service>',context!);
        RebateCodeDayOfWeekRelation = JsonConverters.fromJson(json['RebateCodeDayOfWeekRelation'],'List<RebateCodeDayOfWeekRelation>',context!);
        RebateCodeServiceRelation = JsonConverters.fromJson(json['RebateCodeServiceRelation'],'List<RebateCodeServiceRelation>',context!);
        RebateCodeBookingPriceRelation = JsonConverters.fromJson(json['RebateCodeBookingPriceRelation'],'List<RebateCodeBookingPriceRelation>',context!);
        RebateCodeCustomerRelation = JsonConverters.fromJson(json['RebateCodeCustomerRelation'],'List<RebateCodeCustomerRelation>',context!);
        ServicesNames = json['ServicesNames'];
        DaysOfWeek = JsonConverters.fromJson(json['DaysOfWeek'],'List<DaysOfWeek>',context!);
        RebateCodeStatus = JsonConverters.fromJson(json['RebateCodeStatus'],'RebateCodeStatus',context!);
        RebateCodeType = JsonConverters.fromJson(json['RebateCodeType'],'RebateCodeType',context!);
        Transactions = JsonConverters.fromJson(json['Transactions'],'List<RebateCodeTransaction>',context!);
        RemainingAmount = JsonConverters.toDouble(json['RemainingAmount']);
        RemainingUsage = json['RemainingUsage'];
        CurrentNumberOfUsesPerCustomer = json['CurrentNumberOfUsesPerCustomer'];
        IsSpecificByDayOfWeek = json['IsSpecificByDayOfWeek'];
        Active = json['Active'];
        ActiveByStatus = json['ActiveByStatus'];
        RebateCodeCurrencySign = json['RebateCodeCurrencySign'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        PaymentReceived = json['PaymentReceived'];
        InternalReferenceId = json['InternalReferenceId'];
        ValidFrom = JsonConverters.fromJson(json['ValidFrom'],'DateTime',context!);
        ValidTo = JsonConverters.fromJson(json['ValidTo'],'DateTime',context!);
        RebateCodeSign = json['RebateCodeSign'];
        RebateCodeValue = json['RebateCodeValue'];
        MaxNumberOfUses = json['MaxNumberOfUses'];
        MaxNumberOfUsesPerCustomer = json['MaxNumberOfUsesPerCustomer'];
        NumberOfUsesUsed = json['NumberOfUsesUsed'];
        PersonalNote = json['PersonalNote'];
        CreatedBy = json['CreatedBy'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        UpdatedBy = json['UpdatedBy'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        FromTime = JsonConverters.fromJson(json['FromTime'],'Duration',context!);
        ToTime = JsonConverters.fromJson(json['ToTime'],'Duration',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        ArticleId = json['ArticleId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'RebateCodeTypeId': RebateCodeTypeId,
        'RebateCodeTypeInfo': JsonConverters.toJson(RebateCodeTypeInfo,'RebateCodeType',context!),
        'RebateCodeStatusId': RebateCodeStatusId,
        'RebateCodeStatusInfo': JsonConverters.toJson(RebateCodeStatusInfo,'RebateCodeStatus',context!),
        'Article': JsonConverters.toJson(Article,'Article',context!),
        'Services': JsonConverters.toJson(Services,'List<Service>',context!),
        'RebateCodeDayOfWeekRelation': JsonConverters.toJson(RebateCodeDayOfWeekRelation,'List<RebateCodeDayOfWeekRelation>',context!),
        'RebateCodeServiceRelation': JsonConverters.toJson(RebateCodeServiceRelation,'List<RebateCodeServiceRelation>',context!),
        'RebateCodeBookingPriceRelation': JsonConverters.toJson(RebateCodeBookingPriceRelation,'List<RebateCodeBookingPriceRelation>',context!),
        'RebateCodeCustomerRelation': JsonConverters.toJson(RebateCodeCustomerRelation,'List<RebateCodeCustomerRelation>',context!),
        'ServicesNames': ServicesNames,
        'DaysOfWeek': JsonConverters.toJson(DaysOfWeek,'List<DaysOfWeek>',context!),
        'RebateCodeStatus': JsonConverters.toJson(RebateCodeStatus,'RebateCodeStatus',context!),
        'RebateCodeType': JsonConverters.toJson(RebateCodeType,'RebateCodeType',context!),
        'Transactions': JsonConverters.toJson(Transactions,'List<RebateCodeTransaction>',context!),
        'RemainingAmount': RemainingAmount,
        'RemainingUsage': RemainingUsage,
        'CurrentNumberOfUsesPerCustomer': CurrentNumberOfUsesPerCustomer,
        'IsSpecificByDayOfWeek': IsSpecificByDayOfWeek,
        'Active': Active,
        'ActiveByStatus': ActiveByStatus,
        'RebateCodeCurrencySign': RebateCodeCurrencySign,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'PaymentReceived': PaymentReceived,
        'InternalReferenceId': InternalReferenceId,
        'ValidFrom': JsonConverters.toJson(ValidFrom,'DateTime',context!),
        'ValidTo': JsonConverters.toJson(ValidTo,'DateTime',context!),
        'RebateCodeSign': RebateCodeSign,
        'RebateCodeValue': RebateCodeValue,
        'MaxNumberOfUses': MaxNumberOfUses,
        'MaxNumberOfUsesPerCustomer': MaxNumberOfUsesPerCustomer,
        'NumberOfUsesUsed': NumberOfUsesUsed,
        'PersonalNote': PersonalNote,
        'CreatedBy': CreatedBy,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'UpdatedBy': UpdatedBy,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'FromTime': JsonConverters.toJson(FromTime,'Duration',context!),
        'ToTime': JsonConverters.toJson(ToTime,'Duration',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id,
        'ArticleId': ArticleId
    });

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

class ServicePrice extends BaseModel implements IInterval, IConvertible
{
    // @References(typeof(Currency))
    String? CurrencyId;

    Currency? CurrencyInfo;
    // @Ignore()
    Service? Service;

    // @Ignore()
    List<PriceMapping>? PriceMappings;

    // @Ignore()
    bool? isTimeSpecific;

    // @Ignore()
    bool? isDaysOfWeekSpecific;

    List<ServicePriceDayOfWeekRelation>? DayOfWeeks;
    // @Ignore()
    double? PriceBeforeRebate;

    // @Ignore()
    List<RebateCode>? RebateCodesApplied;

    // @Ignore()
    String? PriceText;

    // @Ignore()
    List<ServicePrice>? OverlappingPrices;

    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    int? ServiceId;

    double? Price;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    // @Required()
    Duration? FromTime;

    // @Required()
    Duration? ToTime;

    // @Required()
    double? VAT;

    String? Category;
    DateTime? ModifiedDate;
    // @Required()
    DateTime? From;

    // @Required()
    DateTime? To;

    // @Required()
    int? CalculationTypeId;

    ServicePrice({this.CurrencyId,this.CurrencyInfo,this.Service,this.PriceMappings,this.isTimeSpecific,this.isDaysOfWeekSpecific,this.DayOfWeeks,this.PriceBeforeRebate,this.RebateCodesApplied,this.PriceText,this.OverlappingPrices,this.CompanyId,this.Id,this.ServiceId,this.Price,this.Updated,this.Created,this.FromTime,this.ToTime,this.VAT,this.Category,this.ModifiedDate,this.From,this.To,this.CalculationTypeId});
    ServicePrice.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CurrencyId = json['CurrencyId'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        Service = JsonConverters.fromJson(json['Service'],'Service',context!);
        PriceMappings = JsonConverters.fromJson(json['PriceMappings'],'List<PriceMapping>',context!);
        isTimeSpecific = json['isTimeSpecific'];
        isDaysOfWeekSpecific = json['isDaysOfWeekSpecific'];
        DayOfWeeks = JsonConverters.fromJson(json['DayOfWeeks'],'List<ServicePriceDayOfWeekRelation>',context!);
        PriceBeforeRebate = JsonConverters.toDouble(json['PriceBeforeRebate']);
        RebateCodesApplied = JsonConverters.fromJson(json['RebateCodesApplied'],'List<RebateCode>',context!);
        PriceText = json['PriceText'];
        OverlappingPrices = JsonConverters.fromJson(json['OverlappingPrices'],'List<ServicePrice>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        ServiceId = json['ServiceId'];
        Price = JsonConverters.toDouble(json['Price']);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        FromTime = JsonConverters.fromJson(json['FromTime'],'Duration',context!);
        ToTime = JsonConverters.fromJson(json['ToTime'],'Duration',context!);
        VAT = JsonConverters.toDouble(json['VAT']);
        Category = json['Category'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        From = JsonConverters.fromJson(json['From'],'DateTime',context!);
        To = JsonConverters.fromJson(json['To'],'DateTime',context!);
        CalculationTypeId = json['CalculationTypeId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CurrencyId': CurrencyId,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'Service': JsonConverters.toJson(Service,'Service',context!),
        'PriceMappings': JsonConverters.toJson(PriceMappings,'List<PriceMapping>',context!),
        'isTimeSpecific': isTimeSpecific,
        'isDaysOfWeekSpecific': isDaysOfWeekSpecific,
        'DayOfWeeks': JsonConverters.toJson(DayOfWeeks,'List<ServicePriceDayOfWeekRelation>',context!),
        'PriceBeforeRebate': PriceBeforeRebate,
        'RebateCodesApplied': JsonConverters.toJson(RebateCodesApplied,'List<RebateCode>',context!),
        'PriceText': PriceText,
        'OverlappingPrices': JsonConverters.toJson(OverlappingPrices,'List<ServicePrice>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'ServiceId': ServiceId,
        'Price': Price,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'FromTime': JsonConverters.toJson(FromTime,'Duration',context!),
        'ToTime': JsonConverters.toJson(ToTime,'Duration',context!),
        'VAT': VAT,
        'Category': Category,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'From': JsonConverters.toJson(From,'DateTime',context!),
        'To': JsonConverters.toJson(To,'DateTime',context!),
        'CalculationTypeId': CalculationTypeId
    });

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

class Service extends BaseModel implements ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    List<ResourceType>? ResourceTypes;

    // @Ignore()
    List<Resource>? Resources;

    // @Ignore()
    TotalPriceInformation? TotalPrice;

    // @Ignore()
    List<ServicePrice>? Prices;

    // @Ignore()
    List<BookingStatusOptions>? BookingStatusOptions;

    // @Ignore()
    bool? IsGroupBooking;

    // @Ignore()
    bool? IsMultipleResource;

    // @Ignore()
    BookingSettings? Settings;

    // @Ignore()
    PaymentSetting? PaymentSetting;

    // @Ignore()
    List<CustomFieldConfig>? BookingCustomFieldsConfig;

    // @Ignore()
    List<CustomFieldConfig>? CustomerCustomFieldsConfig;

    // @Ignore()
    List<CustomFieldConfig>? CustomFieldsConfig;

    // @Ignore()
    List<CustomFieldDataResponse>? CustomFieldsData;

    // @Ignore()
    List<ISchedule>? Schedules;

    // @Ignore()
    List<Booking>? CustomerActiveBookings;

    // @Ignore()
    ScheduleType? ScheduleType;

    // @Ignore()
    Duration? LastTimeToUnbookThreshold;

    // @Ignore()
    Duration? LastTimeToBookThreshold;

    // @Ignore()
    AverageRatingScore? RatingScore;

    // @Ignore()
    List<Rating>? Ratings;

    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    String? Group;
    // @Required()
    bool? Active;

    // @Required()
    int? SortOrder;

    // @Required()
    int? PauseAfterBooking;

    // @Required()
    int? UnbookBeforeDays;

    // @Required()
    int? UnbookBeforeHours;

    // @Required()
    int? UnbookBeforeMinutes;

    // @Required()
    int? BookBeforeDays;

    // @Required()
    int? BookBeforeHours;

    // @Required()
    int? BookBeforeMinutes;

    int? Duration;
    int? DurationTypeId;
    int? MinDuration;
    int? MaxDuration;
    int? DurationInterval;
    int? TotalSpots;
    String? ImageUrl;
    // @Required()
    int? ScheduleTypeId;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    bool? OnlyVisibleByAdmin;

    // @Required()
    int? MinNumberOfSpotsPerBooking;

    // @Required()
    int? MaxNumberOfSpotsPerBooking;

    // @Required()
    int? MinNumberOfResourcesToBook;

    // @Required()
    int? MaxNumberOfResourcesToBook;

    // @Required()
    bool? IsPaymentEnabled;

    // @Required()
    int? MaxPaymentTime;

    // @Required()
    bool? LockSpotsToBooking;

    // @Required()
    bool? EnableBookingQueue;

    DateTime? ModifiedDate;
    // @Required()
    int? BookingStatusId;

    // @Required()
    bool? EnableCodeLockSync;

    // @Required()
    bool? EnableCustomerManualPayment;

    int? PriceViewTypeId;
    String? TextField1;
    String? TextField2;
    String? TextField3;
    String? TextField4;
    String? TextField5;
    String? TextField6;
    String? TextField7;
    String? TextField8;
    String? TextField9;
    String? TextField10;
    String? TextField11;
    String? TextField12;
    String? TextField13;
    String? TextField14;
    String? TextField15;
    String? TextField16;
    String? TextField17;
    String? TextField18;
    String? TextField19;
    String? TextField20;

    Service({this.ResourceTypes,this.Resources,this.TotalPrice,this.Prices,this.BookingStatusOptions,this.IsGroupBooking,this.IsMultipleResource,this.Settings,this.PaymentSetting,this.BookingCustomFieldsConfig,this.CustomerCustomFieldsConfig,this.CustomFieldsConfig,this.CustomFieldsData,this.Schedules,this.CustomerActiveBookings,this.ScheduleType,this.LastTimeToUnbookThreshold,this.LastTimeToBookThreshold,this.RatingScore,this.Ratings,this.CompanyId,this.Id,this.Name,this.Description,this.Group,this.Active,this.SortOrder,this.PauseAfterBooking,this.UnbookBeforeDays,this.UnbookBeforeHours,this.UnbookBeforeMinutes,this.BookBeforeDays,this.BookBeforeHours,this.BookBeforeMinutes,this.Duration,this.DurationTypeId,this.MinDuration,this.MaxDuration,this.DurationInterval,this.TotalSpots,this.ImageUrl,this.ScheduleTypeId,this.UpdatedDate,this.CreatedDate,this.OnlyVisibleByAdmin,this.MinNumberOfSpotsPerBooking,this.MaxNumberOfSpotsPerBooking,this.MinNumberOfResourcesToBook,this.MaxNumberOfResourcesToBook,this.IsPaymentEnabled,this.MaxPaymentTime,this.LockSpotsToBooking,this.EnableBookingQueue,this.ModifiedDate,this.BookingStatusId,this.EnableCodeLockSync,this.EnableCustomerManualPayment,this.PriceViewTypeId,this.TextField1,this.TextField2,this.TextField3,this.TextField4,this.TextField5,this.TextField6,this.TextField7,this.TextField8,this.TextField9,this.TextField10,this.TextField11,this.TextField12,this.TextField13,this.TextField14,this.TextField15,this.TextField16,this.TextField17,this.TextField18,this.TextField19,this.TextField20});
    Service.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ResourceTypes = JsonConverters.fromJson(json['ResourceTypes'],'List<ResourceType>',context!);
        Resources = JsonConverters.fromJson(json['Resources'],'List<Resource>',context!);
        TotalPrice = JsonConverters.fromJson(json['TotalPrice'],'TotalPriceInformation',context!);
        Prices = JsonConverters.fromJson(json['Prices'],'List<ServicePrice>',context!);
        BookingStatusOptions = JsonConverters.fromJson(json['BookingStatusOptions'],'List<BookingStatusOptions>',context!);
        IsGroupBooking = json['IsGroupBooking'];
        IsMultipleResource = json['IsMultipleResource'];
        Settings = JsonConverters.fromJson(json['Settings'],'BookingSettings',context!);
        PaymentSetting = JsonConverters.fromJson(json['PaymentSetting'],'PaymentSetting',context!);
        BookingCustomFieldsConfig = JsonConverters.fromJson(json['BookingCustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomerCustomFieldsConfig = JsonConverters.fromJson(json['CustomerCustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsConfig = JsonConverters.fromJson(json['CustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsData = JsonConverters.fromJson(json['CustomFieldsData'],'List<CustomFieldDataResponse>',context!);
        Schedules = JsonConverters.fromJson(json['Schedules'],'List<ISchedule>',context!);
        CustomerActiveBookings = JsonConverters.fromJson(json['CustomerActiveBookings'],'List<Booking>',context!);
        ScheduleType = JsonConverters.fromJson(json['ScheduleType'],'ScheduleType',context!);
        LastTimeToUnbookThreshold = JsonConverters.fromJson(json['LastTimeToUnbookThreshold'],'Duration',context!);
        LastTimeToBookThreshold = JsonConverters.fromJson(json['LastTimeToBookThreshold'],'Duration',context!);
        RatingScore = JsonConverters.fromJson(json['RatingScore'],'AverageRatingScore',context!);
        Ratings = JsonConverters.fromJson(json['Ratings'],'List<Rating>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Name = json['Name'];
        Description = json['Description'];
        Group = json['Group'];
        Active = json['Active'];
        SortOrder = json['SortOrder'];
        PauseAfterBooking = json['PauseAfterBooking'];
        UnbookBeforeDays = json['UnbookBeforeDays'];
        UnbookBeforeHours = json['UnbookBeforeHours'];
        UnbookBeforeMinutes = json['UnbookBeforeMinutes'];
        BookBeforeDays = json['BookBeforeDays'];
        BookBeforeHours = json['BookBeforeHours'];
        BookBeforeMinutes = json['BookBeforeMinutes'];
        Duration = json['Duration'];
        DurationTypeId = json['DurationTypeId'];
        MinDuration = json['MinDuration'];
        MaxDuration = json['MaxDuration'];
        DurationInterval = json['DurationInterval'];
        TotalSpots = json['TotalSpots'];
        ImageUrl = json['ImageUrl'];
        ScheduleTypeId = json['ScheduleTypeId'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        OnlyVisibleByAdmin = json['OnlyVisibleByAdmin'];
        MinNumberOfSpotsPerBooking = json['MinNumberOfSpotsPerBooking'];
        MaxNumberOfSpotsPerBooking = json['MaxNumberOfSpotsPerBooking'];
        MinNumberOfResourcesToBook = json['MinNumberOfResourcesToBook'];
        MaxNumberOfResourcesToBook = json['MaxNumberOfResourcesToBook'];
        IsPaymentEnabled = json['IsPaymentEnabled'];
        MaxPaymentTime = json['MaxPaymentTime'];
        LockSpotsToBooking = json['LockSpotsToBooking'];
        EnableBookingQueue = json['EnableBookingQueue'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        BookingStatusId = json['BookingStatusId'];
        EnableCodeLockSync = json['EnableCodeLockSync'];
        EnableCustomerManualPayment = json['EnableCustomerManualPayment'];
        PriceViewTypeId = json['PriceViewTypeId'];
        TextField1 = json['TextField1'];
        TextField2 = json['TextField2'];
        TextField3 = json['TextField3'];
        TextField4 = json['TextField4'];
        TextField5 = json['TextField5'];
        TextField6 = json['TextField6'];
        TextField7 = json['TextField7'];
        TextField8 = json['TextField8'];
        TextField9 = json['TextField9'];
        TextField10 = json['TextField10'];
        TextField11 = json['TextField11'];
        TextField12 = json['TextField12'];
        TextField13 = json['TextField13'];
        TextField14 = json['TextField14'];
        TextField15 = json['TextField15'];
        TextField16 = json['TextField16'];
        TextField17 = json['TextField17'];
        TextField18 = json['TextField18'];
        TextField19 = json['TextField19'];
        TextField20 = json['TextField20'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ResourceTypes': JsonConverters.toJson(ResourceTypes,'List<ResourceType>',context!),
        'Resources': JsonConverters.toJson(Resources,'List<Resource>',context!),
        'TotalPrice': JsonConverters.toJson(TotalPrice,'TotalPriceInformation',context!),
        'Prices': JsonConverters.toJson(Prices,'List<ServicePrice>',context!),
        'BookingStatusOptions': JsonConverters.toJson(BookingStatusOptions,'List<BookingStatusOptions>',context!),
        'IsGroupBooking': IsGroupBooking,
        'IsMultipleResource': IsMultipleResource,
        'Settings': JsonConverters.toJson(Settings,'BookingSettings',context!),
        'PaymentSetting': JsonConverters.toJson(PaymentSetting,'PaymentSetting',context!),
        'BookingCustomFieldsConfig': JsonConverters.toJson(BookingCustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomerCustomFieldsConfig': JsonConverters.toJson(CustomerCustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsConfig': JsonConverters.toJson(CustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsData': JsonConverters.toJson(CustomFieldsData,'List<CustomFieldDataResponse>',context!),
        'Schedules': JsonConverters.toJson(Schedules,'List<ISchedule>',context!),
        'CustomerActiveBookings': JsonConverters.toJson(CustomerActiveBookings,'List<Booking>',context!),
        'ScheduleType': JsonConverters.toJson(ScheduleType,'ScheduleType',context!),
        'LastTimeToUnbookThreshold': JsonConverters.toJson(LastTimeToUnbookThreshold,'Duration',context!),
        'LastTimeToBookThreshold': JsonConverters.toJson(LastTimeToBookThreshold,'Duration',context!),
        'RatingScore': JsonConverters.toJson(RatingScore,'AverageRatingScore',context!),
        'Ratings': JsonConverters.toJson(Ratings,'List<Rating>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'Name': Name,
        'Description': Description,
        'Group': Group,
        'Active': Active,
        'SortOrder': SortOrder,
        'PauseAfterBooking': PauseAfterBooking,
        'UnbookBeforeDays': UnbookBeforeDays,
        'UnbookBeforeHours': UnbookBeforeHours,
        'UnbookBeforeMinutes': UnbookBeforeMinutes,
        'BookBeforeDays': BookBeforeDays,
        'BookBeforeHours': BookBeforeHours,
        'BookBeforeMinutes': BookBeforeMinutes,
        'Duration': Duration,
        'DurationTypeId': DurationTypeId,
        'MinDuration': MinDuration,
        'MaxDuration': MaxDuration,
        'DurationInterval': DurationInterval,
        'TotalSpots': TotalSpots,
        'ImageUrl': ImageUrl,
        'ScheduleTypeId': ScheduleTypeId,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'OnlyVisibleByAdmin': OnlyVisibleByAdmin,
        'MinNumberOfSpotsPerBooking': MinNumberOfSpotsPerBooking,
        'MaxNumberOfSpotsPerBooking': MaxNumberOfSpotsPerBooking,
        'MinNumberOfResourcesToBook': MinNumberOfResourcesToBook,
        'MaxNumberOfResourcesToBook': MaxNumberOfResourcesToBook,
        'IsPaymentEnabled': IsPaymentEnabled,
        'MaxPaymentTime': MaxPaymentTime,
        'LockSpotsToBooking': LockSpotsToBooking,
        'EnableBookingQueue': EnableBookingQueue,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'BookingStatusId': BookingStatusId,
        'EnableCodeLockSync': EnableCodeLockSync,
        'EnableCustomerManualPayment': EnableCustomerManualPayment,
        'PriceViewTypeId': PriceViewTypeId,
        'TextField1': TextField1,
        'TextField2': TextField2,
        'TextField3': TextField3,
        'TextField4': TextField4,
        'TextField5': TextField5,
        'TextField6': TextField6,
        'TextField7': TextField7,
        'TextField8': TextField8,
        'TextField9': TextField9,
        'TextField10': TextField10,
        'TextField11': TextField11,
        'TextField12': TextField12,
        'TextField13': TextField13,
        'TextField14': TextField14,
        'TextField15': TextField15,
        'TextField16': TextField16,
        'TextField17': TextField17,
        'TextField18': TextField18,
        'TextField19': TextField19,
        'TextField20': TextField20
    });

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

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

    int? Id;
    // @Required()
    int? CustomFieldConfigId;

    // @Required()
    int? ServiceId;

    DateTime? ModifiedDate;

    CustomFieldServiceRelation({this.CompanyId,this.Id,this.CustomFieldConfigId,this.ServiceId,this.ModifiedDate});
    CustomFieldServiceRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        CustomFieldConfigId = json['CustomFieldConfigId'];
        ServiceId = json['ServiceId'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Id': Id,
        'CustomFieldConfigId': CustomFieldConfigId,
        'ServiceId': ServiceId,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

class CustomFieldConfig extends BaseModel implements IConvertible
{
    // @Ignore()
    List<CustomFieldValue>? Values;

    CustomField? CustomField;
    // @Ignore()
    RegEx? RegEx;

    // @Ignore()
    List<Service>? Services;

    List<CustomFieldServiceRelation>? CustomFieldServiceRelation;
    // @Required()
    String? CompanyId;

    int? Id;
    int? GroupId;
    // @Required()
    int? FieldId;

    // @Required()
    int? IconId;

    int? RegExId;
    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    String? Datatype;

    // @Required()
    int? MaxLength;

    // @Required()
    bool? IsPublic;

    // @Required()
    bool? IsHidden;

    // @Required()
    bool? IsMandatory;

    String? DefaultValue;
    String? RegExErrorMessage;
    String? MandatoryErrorMessage;
    int? Width;
    // @Required()
    bool? MultipleLineText;

    DateTime? ModifiedDate;

    CustomFieldConfig({this.Values,this.CustomField,this.RegEx,this.Services,this.CustomFieldServiceRelation,this.CompanyId,this.Id,this.GroupId,this.FieldId,this.IconId,this.RegExId,this.Name,this.Description,this.Datatype,this.MaxLength,this.IsPublic,this.IsHidden,this.IsMandatory,this.DefaultValue,this.RegExErrorMessage,this.MandatoryErrorMessage,this.Width,this.MultipleLineText,this.ModifiedDate});
    CustomFieldConfig.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Values = JsonConverters.fromJson(json['Values'],'List<CustomFieldValue>',context!);
        CustomField = JsonConverters.fromJson(json['CustomField'],'CustomField',context!);
        RegEx = JsonConverters.fromJson(json['RegEx'],'RegEx',context!);
        Services = JsonConverters.fromJson(json['Services'],'List<Service>',context!);
        CustomFieldServiceRelation = JsonConverters.fromJson(json['CustomFieldServiceRelation'],'List<CustomFieldServiceRelation>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        GroupId = json['GroupId'];
        FieldId = json['FieldId'];
        IconId = json['IconId'];
        RegExId = json['RegExId'];
        Name = json['Name'];
        Description = json['Description'];
        Datatype = json['Datatype'];
        MaxLength = json['MaxLength'];
        IsPublic = json['IsPublic'];
        IsHidden = json['IsHidden'];
        IsMandatory = json['IsMandatory'];
        DefaultValue = json['DefaultValue'];
        RegExErrorMessage = json['RegExErrorMessage'];
        MandatoryErrorMessage = json['MandatoryErrorMessage'];
        Width = json['Width'];
        MultipleLineText = json['MultipleLineText'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Values': JsonConverters.toJson(Values,'List<CustomFieldValue>',context!),
        'CustomField': JsonConverters.toJson(CustomField,'CustomField',context!),
        'RegEx': JsonConverters.toJson(RegEx,'RegEx',context!),
        'Services': JsonConverters.toJson(Services,'List<Service>',context!),
        'CustomFieldServiceRelation': JsonConverters.toJson(CustomFieldServiceRelation,'List<CustomFieldServiceRelation>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'GroupId': GroupId,
        'FieldId': FieldId,
        'IconId': IconId,
        'RegExId': RegExId,
        'Name': Name,
        'Description': Description,
        'Datatype': Datatype,
        'MaxLength': MaxLength,
        'IsPublic': IsPublic,
        'IsHidden': IsHidden,
        'IsMandatory': IsMandatory,
        'DefaultValue': DefaultValue,
        'RegExErrorMessage': RegExErrorMessage,
        'MandatoryErrorMessage': MandatoryErrorMessage,
        'Width': Width,
        'MultipleLineText': MultipleLineText,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

class Resource extends BaseModel implements ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    int? Priority;

    // @Ignore()
    List<ISchedule>? Schedules;

    // @Ignore()
    List<ITimeException>? Exceptions;

    // @Ignore()
    List<IBookedTime>? Bookings;

    // @Ignore()
    List<CustomFieldConfig>? CustomFieldsConfig;

    // @Ignore()
    List<CustomFieldDataResponse>? CustomFieldsData;

    // @Required()
    String? CompanyId;

    int? Id;
    // @Required()
    String? Name;

    // @Required()
    bool? Active;

    String? Description;
    String? ImageUrl;
    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    String? Color;

    String? Email;
    String? MobilePhone;
    bool? EmailNotification;
    bool? SMSNotification;
    // @Required()
    bool? SendSMSReminder;

    // @Required()
    bool? SendEmailReminder;

    DateTime? ModifiedDate;
    String? AccessGroup;
    String? TextField1;
    String? TextField2;
    String? TextField3;
    String? TextField4;
    String? TextField5;
    String? TextField6;
    String? TextField7;
    String? TextField8;
    String? TextField9;
    String? TextField10;
    String? TextField11;
    String? TextField12;
    String? TextField13;
    String? TextField14;
    String? TextField15;
    String? TextField16;
    String? TextField17;
    String? TextField18;
    String? TextField19;
    String? TextField20;

    Resource({this.Priority,this.Schedules,this.Exceptions,this.Bookings,this.CustomFieldsConfig,this.CustomFieldsData,this.CompanyId,this.Id,this.Name,this.Active,this.Description,this.ImageUrl,this.UpdatedDate,this.CreatedDate,this.Color,this.Email,this.MobilePhone,this.EmailNotification,this.SMSNotification,this.SendSMSReminder,this.SendEmailReminder,this.ModifiedDate,this.AccessGroup,this.TextField1,this.TextField2,this.TextField3,this.TextField4,this.TextField5,this.TextField6,this.TextField7,this.TextField8,this.TextField9,this.TextField10,this.TextField11,this.TextField12,this.TextField13,this.TextField14,this.TextField15,this.TextField16,this.TextField17,this.TextField18,this.TextField19,this.TextField20});
    Resource.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Priority = json['Priority'];
        Schedules = JsonConverters.fromJson(json['Schedules'],'List<ISchedule>',context!);
        Exceptions = JsonConverters.fromJson(json['Exceptions'],'List<ITimeException>',context!);
        Bookings = JsonConverters.fromJson(json['Bookings'],'List<IBookedTime>',context!);
        CustomFieldsConfig = JsonConverters.fromJson(json['CustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsData = JsonConverters.fromJson(json['CustomFieldsData'],'List<CustomFieldDataResponse>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Name = json['Name'];
        Active = json['Active'];
        Description = json['Description'];
        ImageUrl = json['ImageUrl'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        Color = json['Color'];
        Email = json['Email'];
        MobilePhone = json['MobilePhone'];
        EmailNotification = json['EmailNotification'];
        SMSNotification = json['SMSNotification'];
        SendSMSReminder = json['SendSMSReminder'];
        SendEmailReminder = json['SendEmailReminder'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        AccessGroup = json['AccessGroup'];
        TextField1 = json['TextField1'];
        TextField2 = json['TextField2'];
        TextField3 = json['TextField3'];
        TextField4 = json['TextField4'];
        TextField5 = json['TextField5'];
        TextField6 = json['TextField6'];
        TextField7 = json['TextField7'];
        TextField8 = json['TextField8'];
        TextField9 = json['TextField9'];
        TextField10 = json['TextField10'];
        TextField11 = json['TextField11'];
        TextField12 = json['TextField12'];
        TextField13 = json['TextField13'];
        TextField14 = json['TextField14'];
        TextField15 = json['TextField15'];
        TextField16 = json['TextField16'];
        TextField17 = json['TextField17'];
        TextField18 = json['TextField18'];
        TextField19 = json['TextField19'];
        TextField20 = json['TextField20'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Priority': Priority,
        'Schedules': JsonConverters.toJson(Schedules,'List<ISchedule>',context!),
        'Exceptions': JsonConverters.toJson(Exceptions,'List<ITimeException>',context!),
        'Bookings': JsonConverters.toJson(Bookings,'List<IBookedTime>',context!),
        'CustomFieldsConfig': JsonConverters.toJson(CustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsData': JsonConverters.toJson(CustomFieldsData,'List<CustomFieldDataResponse>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'Name': Name,
        'Active': Active,
        'Description': Description,
        'ImageUrl': ImageUrl,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'Color': Color,
        'Email': Email,
        'MobilePhone': MobilePhone,
        'EmailNotification': EmailNotification,
        'SMSNotification': SMSNotification,
        'SendSMSReminder': SendSMSReminder,
        'SendEmailReminder': SendEmailReminder,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'AccessGroup': AccessGroup,
        'TextField1': TextField1,
        'TextField2': TextField2,
        'TextField3': TextField3,
        'TextField4': TextField4,
        'TextField5': TextField5,
        'TextField6': TextField6,
        'TextField7': TextField7,
        'TextField8': TextField8,
        'TextField9': TextField9,
        'TextField10': TextField10,
        'TextField11': TextField11,
        'TextField12': TextField12,
        'TextField13': TextField13,
        'TextField14': TextField14,
        'TextField15': TextField15,
        'TextField16': TextField16,
        'TextField17': TextField17,
        'TextField18': TextField18,
        'TextField19': TextField19,
        'TextField20': TextField20
    });

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

class KeyCloakRole implements IConvertible
{
    String? Id;
    String? Name;

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

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

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

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

class CompanyUser extends BaseModel implements IUser, IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    Resource? Resource;
    // @Ignore()
    List<KeyCloakRole>? Roles;

    String? Email;
    int? ResourceId;
    String? WorkerId;
    // @Required()
    bool? Active;

    // @Required()
    bool? IsSuperAdmin;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    DateTime? UpdatedDate;

    DateTime? ModifiedDate;
    // @Required()
    String? CompanyId;

    // @Required()
    String? Id;

    String? UserId;
    String? Firstname;
    String? Lastname;
    String? Phone;

    CompanyUser({this.Resource,this.Roles,this.Email,this.ResourceId,this.WorkerId,this.Active,this.IsSuperAdmin,this.CreatedDate,this.UpdatedDate,this.ModifiedDate,this.CompanyId,this.Id,this.UserId,this.Firstname,this.Lastname,this.Phone});
    CompanyUser.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Resource = JsonConverters.fromJson(json['Resource'],'Resource',context!);
        Roles = JsonConverters.fromJson(json['Roles'],'List<KeyCloakRole>',context!);
        Email = json['Email'];
        ResourceId = json['ResourceId'];
        WorkerId = json['WorkerId'];
        Active = json['Active'];
        IsSuperAdmin = json['IsSuperAdmin'];
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        UserId = json['UserId'];
        Firstname = json['Firstname'];
        Lastname = json['Lastname'];
        Phone = json['Phone'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Resource': JsonConverters.toJson(Resource,'Resource',context!),
        'Roles': JsonConverters.toJson(Roles,'List<KeyCloakRole>',context!),
        'Email': Email,
        'ResourceId': ResourceId,
        'WorkerId': WorkerId,
        'Active': Active,
        'IsSuperAdmin': IsSuperAdmin,
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'UserId': UserId,
        'Firstname': Firstname,
        'Lastname': Lastname,
        'Phone': Phone
    });

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

class SupportCase extends BaseModel implements IConvertible
{
    // @References(typeof(CaseArea))
    int? CaseAreaId;

    CaseArea? CaseArea;
    // @References(typeof(CaseType))
    int? CaseTypeId;

    CaseType? CaseType;
    // @References(typeof(CaseStatus))
    int? CaseStatusId;

    CaseStatus? CaseStatus;
    // @Ignore()
    List<CaseComment>? Comments;

    // @Ignore()
    List<CaseArea>? CaseAreaOptions;

    // @Ignore()
    List<CaseType>? CaseTypeOptions;

    // @Ignore()
    List<CaseStatus>? CaseStatusOptions;

    // @Ignore()
    List<CaseAttachment>? Attachments;

    List<CaseAttachmentRelation>? AttachmentRelation;
    CompanyUser? CompanyUser;
    Company? Company;
    // @Ignore()
    bool? Active;

    // @Required()
    String? CompanyId;

    int? Id;
    String? CompanyUserId;
    // @Required()
    String? Title;

    // @Required()
    String? Description;

    // @Required()
    String? CreatedBy;

    // @Required()
    String? UpdatedBy;

    String? SolvedBy;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    String? CaseOwner;
    DateTime? ModifiedDate;

    SupportCase({this.CaseAreaId,this.CaseArea,this.CaseTypeId,this.CaseType,this.CaseStatusId,this.CaseStatus,this.Comments,this.CaseAreaOptions,this.CaseTypeOptions,this.CaseStatusOptions,this.Attachments,this.AttachmentRelation,this.CompanyUser,this.Company,this.Active,this.CompanyId,this.Id,this.CompanyUserId,this.Title,this.Description,this.CreatedBy,this.UpdatedBy,this.SolvedBy,this.Updated,this.Created,this.CaseOwner,this.ModifiedDate});
    SupportCase.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CaseAreaId = json['CaseAreaId'];
        CaseArea = JsonConverters.fromJson(json['CaseArea'],'CaseArea',context!);
        CaseTypeId = json['CaseTypeId'];
        CaseType = JsonConverters.fromJson(json['CaseType'],'CaseType',context!);
        CaseStatusId = json['CaseStatusId'];
        CaseStatus = JsonConverters.fromJson(json['CaseStatus'],'CaseStatus',context!);
        Comments = JsonConverters.fromJson(json['Comments'],'List<CaseComment>',context!);
        CaseAreaOptions = JsonConverters.fromJson(json['CaseAreaOptions'],'List<CaseArea>',context!);
        CaseTypeOptions = JsonConverters.fromJson(json['CaseTypeOptions'],'List<CaseType>',context!);
        CaseStatusOptions = JsonConverters.fromJson(json['CaseStatusOptions'],'List<CaseStatus>',context!);
        Attachments = JsonConverters.fromJson(json['Attachments'],'List<CaseAttachment>',context!);
        AttachmentRelation = JsonConverters.fromJson(json['AttachmentRelation'],'List<CaseAttachmentRelation>',context!);
        CompanyUser = JsonConverters.fromJson(json['CompanyUser'],'CompanyUser',context!);
        Company = JsonConverters.fromJson(json['Company'],'Company',context!);
        Active = json['Active'];
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        CompanyUserId = json['CompanyUserId'];
        Title = json['Title'];
        Description = json['Description'];
        CreatedBy = json['CreatedBy'];
        UpdatedBy = json['UpdatedBy'];
        SolvedBy = json['SolvedBy'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        CaseOwner = json['CaseOwner'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CaseAreaId': CaseAreaId,
        'CaseArea': JsonConverters.toJson(CaseArea,'CaseArea',context!),
        'CaseTypeId': CaseTypeId,
        'CaseType': JsonConverters.toJson(CaseType,'CaseType',context!),
        'CaseStatusId': CaseStatusId,
        'CaseStatus': JsonConverters.toJson(CaseStatus,'CaseStatus',context!),
        'Comments': JsonConverters.toJson(Comments,'List<CaseComment>',context!),
        'CaseAreaOptions': JsonConverters.toJson(CaseAreaOptions,'List<CaseArea>',context!),
        'CaseTypeOptions': JsonConverters.toJson(CaseTypeOptions,'List<CaseType>',context!),
        'CaseStatusOptions': JsonConverters.toJson(CaseStatusOptions,'List<CaseStatus>',context!),
        'Attachments': JsonConverters.toJson(Attachments,'List<CaseAttachment>',context!),
        'AttachmentRelation': JsonConverters.toJson(AttachmentRelation,'List<CaseAttachmentRelation>',context!),
        'CompanyUser': JsonConverters.toJson(CompanyUser,'CompanyUser',context!),
        'Company': JsonConverters.toJson(Company,'Company',context!),
        'Active': Active,
        'CompanyId': CompanyId,
        'Id': Id,
        'CompanyUserId': CompanyUserId,
        'Title': Title,
        'Description': Description,
        'CreatedBy': CreatedBy,
        'UpdatedBy': UpdatedBy,
        'SolvedBy': SolvedBy,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'CaseOwner': CaseOwner,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

// @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
// @ValidateRequest(Validator="IsAuthenticated")
class SupportCaseQuery extends QueryDb2<SupportCase,SupportCaseQueryResponse> implements ICompany, IConvertible
{
    /**
    * The company id, if empty will use the company id for the user you are logged in with.
    */
    // @ApiMember(Description="The company id, if empty will use the company id for the user you are logged in with.")
    String? CompanyId;

    /**
    * If you want to search on active support cases
    */
    // @ApiMember(DataType="boolean", Description="If you want to search on active support cases", ParameterType="query")
    bool? Active;

    /**
    * Support Case Id
    */
    // @ApiMember(DataType="int", Description="Support Case Id", ParameterType="query")
    int? Id;

    /**
    * If you want to include the support case comments
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the support case comments", ParameterType="query")
    bool? IncludeComments;

    /**
    * If you want to include the support case status information
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the support case status information", ParameterType="query")
    bool? IncludeCaseStatusInformation;

    /**
    * If you want to include the support case type information
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the support case type information", ParameterType="query")
    bool? IncludeCaseTypeInformation;

    /**
    * If you want to include the support case area information
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the support case area information", ParameterType="query")
    bool? IncludeCaseAreaInformation;

    /**
    * If you want to include the support case comments
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the support case comments", ParameterType="query")
    bool? IncludeCaseComments;

    /**
    * If you want to include the support case attachments
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the support case attachments", ParameterType="query")
    bool? IncludeCaseAttachments;

    /**
    * If you want to include the support case status  options to select from
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the support case status  options to select from", ParameterType="query")
    bool? IncludeCaseStatusOptions;

    /**
    * If you want to include the support case type  options to select from
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the support case type  options to select from", ParameterType="query")
    bool? IncludeCaseTypeOptions;

    /**
    * If you want to include the support case area options to select from
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the support case area options to select from", ParameterType="query")
    bool? IncludeCaseAreaOptions;

    ResponseStatus? ResponseStatus;

    SupportCaseQuery({this.CompanyId,this.Active,this.Id,this.IncludeComments,this.IncludeCaseStatusInformation,this.IncludeCaseTypeInformation,this.IncludeCaseAreaInformation,this.IncludeCaseComments,this.IncludeCaseAttachments,this.IncludeCaseStatusOptions,this.IncludeCaseTypeOptions,this.IncludeCaseAreaOptions,this.ResponseStatus});
    SupportCaseQuery.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        Active = json['Active'];
        Id = json['Id'];
        IncludeComments = json['IncludeComments'];
        IncludeCaseStatusInformation = json['IncludeCaseStatusInformation'];
        IncludeCaseTypeInformation = json['IncludeCaseTypeInformation'];
        IncludeCaseAreaInformation = json['IncludeCaseAreaInformation'];
        IncludeCaseComments = json['IncludeCaseComments'];
        IncludeCaseAttachments = json['IncludeCaseAttachments'];
        IncludeCaseStatusOptions = json['IncludeCaseStatusOptions'];
        IncludeCaseTypeOptions = json['IncludeCaseTypeOptions'];
        IncludeCaseAreaOptions = json['IncludeCaseAreaOptions'];
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'Active': Active,
        'Id': Id,
        'IncludeComments': IncludeComments,
        'IncludeCaseStatusInformation': IncludeCaseStatusInformation,
        'IncludeCaseTypeInformation': IncludeCaseTypeInformation,
        'IncludeCaseAreaInformation': IncludeCaseAreaInformation,
        'IncludeCaseComments': IncludeCaseComments,
        'IncludeCaseAttachments': IncludeCaseAttachments,
        'IncludeCaseStatusOptions': IncludeCaseStatusOptions,
        'IncludeCaseTypeOptions': IncludeCaseTypeOptions,
        'IncludeCaseAreaOptions': IncludeCaseAreaOptions,
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!)
    });

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

class Currency extends BaseModel implements IConvertible
{
    // @Required()
    String? Name;

    // @Required()
    String? CurrencySign;

    // @Required()
    bool? Active;

    DateTime? ModifiedDate;
    // @Required()
    String? Id;

    Currency({this.Name,this.CurrencySign,this.Active,this.ModifiedDate,this.Id});
    Currency.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Name = json['Name'];
        CurrencySign = json['CurrencySign'];
        Active = json['Active'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Name': Name,
        'CurrencySign': CurrencySign,
        'Active': Active,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

abstract class IBokameraPaymentManager<TCreatedCheckoutResponse,TCheckoutResponse,TPaymentResponse>
{
}

class QvicklyArticle implements IConvertible
{
    String? artnr;
    String? title;
    int? quantity;
    int? aprice;
    int? tax;
    int? discount;
    int? withouttax;
    int? taxrate;

    QvicklyArticle({this.artnr,this.title,this.quantity,this.aprice,this.tax,this.discount,this.withouttax,this.taxrate});
    QvicklyArticle.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        artnr = json['artnr'];
        title = json['title'];
        quantity = json['quantity'];
        aprice = json['aprice'];
        tax = json['tax'];
        discount = json['discount'];
        withouttax = json['withouttax'];
        taxrate = json['taxrate'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'artnr': artnr,
        'title': title,
        'quantity': quantity,
        'aprice': aprice,
        'tax': tax,
        'discount': discount,
        'withouttax': withouttax,
        'taxrate': taxrate
    };

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

class Customer implements IConvertible
{
    String? City;
    String? CountryCode;
    String? IdentityNumber;
    String? Email;
    String? FirstName;
    String? LastName;
    String? Phone;
    String? PostalCode;
    String? Street;
    String? Reference;
    CustomerType? Type;

    Customer({this.City,this.CountryCode,this.IdentityNumber,this.Email,this.FirstName,this.LastName,this.Phone,this.PostalCode,this.Street,this.Reference,this.Type});
    Customer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        City = json['City'];
        CountryCode = json['CountryCode'];
        IdentityNumber = json['IdentityNumber'];
        Email = json['Email'];
        FirstName = json['FirstName'];
        LastName = json['LastName'];
        Phone = json['Phone'];
        PostalCode = json['PostalCode'];
        Street = json['Street'];
        Reference = json['Reference'];
        Type = JsonConverters.fromJson(json['Type'],'CustomerType',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'City': City,
        'CountryCode': CountryCode,
        'IdentityNumber': IdentityNumber,
        'Email': Email,
        'FirstName': FirstName,
        'LastName': LastName,
        'Phone': Phone,
        'PostalCode': PostalCode,
        'Street': Street,
        'Reference': Reference,
        'Type': JsonConverters.toJson(Type,'CustomerType',context!)
    };

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

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

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

abstract class StripeEntity1<T> extends StripeEntity
{
    StripeEntity1();
    StripeEntity1.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "StripeEntity<$T>";
    TypeContext? context = _ctx;
}

class StripeList<T> extends StripeEntity1<StripeList<T>> implements IHasObject, IConvertible
{
    StripeList();
    StripeList.fromJson(Map<String, dynamic> json) : super.fromJson(json);
    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson();
    getTypeName() => "StripeList<$T>";
    TypeContext? context = _ctx;
}

abstract class ILogger<TCategoryName> extends ILogger
{
}

class AccessKeyTypeResponse implements IConvertible
{
    int? Id;
    String? KeyType;
    String? Description;

    AccessKeyTypeResponse({this.Id,this.KeyType,this.Description});
    AccessKeyTypeResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

// @DataContract
class QueryResponse<AccessKeyTypeResponse> implements IConvertible
{
    // @DataMember(Order=1)
    int? Offset;

    // @DataMember(Order=2)
    int? Total;

    // @DataMember(Order=3)
    List<AccessKeyTypeResponse>? Results;

    // @DataMember(Order=4)
    Map<String,String?>? Meta;

    // @DataMember(Order=5)
    ResponseStatus? ResponseStatus;

    QueryResponse({this.Offset,this.Total,this.Results,this.Meta,this.ResponseStatus});
    QueryResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Offset = json['Offset'];
        Total = json['Total'];
        Results = JsonConverters.fromJson(json['Results'],'List<${runtimeGenericTypeDefs(this,[0]).join(",")}>',context!);
        Meta = JsonConverters.toStringMap(json['Meta']);
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Offset': Offset,
        'Total': Total,
        'Results': JsonConverters.toJson(Results,'List<AccessKeyTypeResponse>',context!),
        'Meta': Meta,
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!)
    };

    getTypeName() => "QueryResponse<$AccessKeyTypeResponse>";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'testapi.bokamera.se', types: <String, TypeInfo> {
    'SupportCaseStatusResponse': TypeInfo(TypeOf.Class, create:() => SupportCaseStatusResponse()),
    'SupportCaseTypeResponse': TypeInfo(TypeOf.Class, create:() => SupportCaseTypeResponse()),
    'SupportCaseAreaResponse': TypeInfo(TypeOf.Class, create:() => SupportCaseAreaResponse()),
    'SupportCaseCommentsResponse': TypeInfo(TypeOf.Class, create:() => SupportCaseCommentsResponse()),
    'SupportCaseAttachmentResponse': TypeInfo(TypeOf.Class, create:() => SupportCaseAttachmentResponse()),
    'SupportCaseQueryResponse': TypeInfo(TypeOf.Class, create:() => SupportCaseQueryResponse()),
    'List<SupportCaseCommentsResponse>': TypeInfo(TypeOf.Class, create:() => <SupportCaseCommentsResponse>[]),
    'List<SupportCaseAttachmentResponse>': TypeInfo(TypeOf.Class, create:() => <SupportCaseAttachmentResponse>[]),
    'List<SupportCaseStatusResponse>': TypeInfo(TypeOf.Class, create:() => <SupportCaseStatusResponse>[]),
    'List<SupportCaseTypeResponse>': TypeInfo(TypeOf.Class, create:() => <SupportCaseTypeResponse>[]),
    'List<SupportCaseAreaResponse>': TypeInfo(TypeOf.Class, create:() => <SupportCaseAreaResponse>[]),
    'BaseModel': TypeInfo(TypeOf.Class, create:() => BaseModel()),
    'CaseArea': TypeInfo(TypeOf.Class, create:() => CaseArea()),
    'CaseType': TypeInfo(TypeOf.Class, create:() => CaseType()),
    'CaseStatus': TypeInfo(TypeOf.Class, create:() => CaseStatus()),
    'CaseComment': TypeInfo(TypeOf.Class, create:() => CaseComment()),
    'CaseAttachment': TypeInfo(TypeOf.Class, create:() => CaseAttachment()),
    'CaseAttachmentRelation': TypeInfo(TypeOf.Class, create:() => CaseAttachmentRelation()),
    'ScheduleType': TypeInfo(TypeOf.Enum, enumValues:ScheduleType.values),
    'ISchedule': TypeInfo(TypeOf.Interface),
    'ITimeException': TypeInfo(TypeOf.Interface),
    'BookingStatusEnum': TypeInfo(TypeOf.Enum, enumValues:BookingStatusEnum.values),
    'BookedCustomer': TypeInfo(TypeOf.Class, create:() => BookedCustomer()),
    'IBookedTime': TypeInfo(TypeOf.Interface),
    'CustomFieldValue': TypeInfo(TypeOf.Class, create:() => CustomFieldValue()),
    'CustomField': TypeInfo(TypeOf.Class, create:() => CustomField()),
    'RegEx': TypeInfo(TypeOf.Class, create:() => RegEx()),
    'ResourceType': TypeInfo(TypeOf.Class, create:() => ResourceType()),
    'List<Resource>': TypeInfo(TypeOf.Class, create:() => <Resource>[]),
    'Resource': TypeInfo(TypeOf.Class, create:() => Resource()),
    'RebateCodeType': TypeInfo(TypeOf.Class, create:() => RebateCodeType()),
    'AppliedRebateCodes': TypeInfo(TypeOf.Class, create:() => AppliedRebateCodes()),
    'TotalPriceInformation': TypeInfo(TypeOf.Class, create:() => TotalPriceInformation()),
    'List<AppliedRebateCodes>': TypeInfo(TypeOf.Class, create:() => <AppliedRebateCodes>[]),
    'Currency': TypeInfo(TypeOf.Enum, enumValues:Currency.values),
    'PriceMapping': TypeInfo(TypeOf.Class, create:() => PriceMapping()),
    'BokaMeraDayOfWeek': TypeInfo(TypeOf.Enum, enumValues:BokaMeraDayOfWeek.values),
    'ServicePriceDayOfWeekRelation': TypeInfo(TypeOf.Class, create:() => ServicePriceDayOfWeekRelation()),
    'IDbConnectionFactory': TypeInfo(TypeOf.Interface),
    'ServerData': TypeInfo(TypeOf.Class, create:() => ServerData()),
    'Credentials': TypeInfo(TypeOf.Class, create:() => Credentials()),
    'CheckoutData': TypeInfo(TypeOf.Class, create:() => CheckoutData()),
    'Uri': TypeInfo(TypeOf.Class, create:() => Uri()),
    'CheckoutPaymentData': TypeInfo(TypeOf.Class, create:() => CheckoutPaymentData()),
    'PaymentInfo': TypeInfo(TypeOf.Class, create:() => PaymentInfo()),
    'CartHandling': TypeInfo(TypeOf.Class, create:() => CartHandling()),
    'CartTotal': TypeInfo(TypeOf.Class, create:() => CartTotal()),
    'Shipping': TypeInfo(TypeOf.Class, create:() => Shipping()),
    'Cart': TypeInfo(TypeOf.Class, create:() => Cart()),
    'CustomerBilling': TypeInfo(TypeOf.Class, create:() => CustomerBilling()),
    'QvicklyCustomer': TypeInfo(TypeOf.Class, create:() => QvicklyCustomer()),
    'InitCheckoutData': TypeInfo(TypeOf.Class, create:() => InitCheckoutData()),
    'List<QvicklyArticle>': TypeInfo(TypeOf.Class, create:() => <QvicklyArticle>[]),
    'QvicklyArticle': TypeInfo(TypeOf.Class, create:() => QvicklyArticle()),
    'InitCheckoutRequestBody': TypeInfo(TypeOf.Class, create:() => InitCheckoutRequestBody()),
    'QvicklyCheckoutResponse': TypeInfo(TypeOf.Class, create:() => QvicklyCheckoutResponse()),
    'QvikclyPaymentData': TypeInfo(TypeOf.Class, create:() => QvikclyPaymentData()),
    'Card': TypeInfo(TypeOf.Class, create:() => Card()),
    'Settlement': TypeInfo(TypeOf.Class, create:() => Settlement()),
    'QvicklyPaymentResponse': TypeInfo(TypeOf.Class, create:() => QvicklyPaymentResponse()),
    'Payson2CheckoutStatus': TypeInfo(TypeOf.Enum, enumValues:Payson2CheckoutStatus.values),
    'CustomerType': TypeInfo(TypeOf.Enum, enumValues:CustomerType.values),
    'UserAccessKeys': TypeInfo(TypeOf.Class, create:() => UserAccessKeys()),
    'ExternalReference': TypeInfo(TypeOf.Class, create:() => ExternalReference()),
    'CompanyStatus': TypeInfo(TypeOf.Enum, enumValues:CompanyStatus.values),
    'ScheduleView': TypeInfo(TypeOf.Class, create:() => ScheduleView()),
    'WeekNumberSetting': TypeInfo(TypeOf.Class, create:() => WeekNumberSetting()),
    'BookingTemplate': TypeInfo(TypeOf.Class, create:() => BookingTemplate()),
    'CalendarType': TypeInfo(TypeOf.Class, create:() => CalendarType()),
    'FreeSpotTexts': TypeInfo(TypeOf.Class, create:() => FreeSpotTexts()),
    'BookingStatusOptions': TypeInfo(TypeOf.Class, create:() => BookingStatusOptions()),
    'BookingSettings': TypeInfo(TypeOf.Class, create:() => BookingSettings()),
    'List<ScheduleView>': TypeInfo(TypeOf.Class, create:() => <ScheduleView>[]),
    'List<WeekNumberSetting>': TypeInfo(TypeOf.Class, create:() => <WeekNumberSetting>[]),
    'List<BookingTemplate>': TypeInfo(TypeOf.Class, create:() => <BookingTemplate>[]),
    'List<CalendarType>': TypeInfo(TypeOf.Class, create:() => <CalendarType>[]),
    'List<FreeSpotTexts>': TypeInfo(TypeOf.Class, create:() => <FreeSpotTexts>[]),
    'List<BookingStatusOptions>': TypeInfo(TypeOf.Class, create:() => <BookingStatusOptions>[]),
    'CompanyType': TypeInfo(TypeOf.Class, create:() => CompanyType()),
    'CodeLockSystem': TypeInfo(TypeOf.Class, create:() => CodeLockSystem()),
    'CodeLockSetting': TypeInfo(TypeOf.Class, create:() => CodeLockSetting()),
    'List<CodeLockSystem>': TypeInfo(TypeOf.Class, create:() => <CodeLockSystem>[]),
    'AdminPaymentOptions': TypeInfo(TypeOf.Class, create:() => AdminPaymentOptions()),
    'PaymentProviders': TypeInfo(TypeOf.Class, create:() => PaymentProviders()),
    'PaymentSetting': TypeInfo(TypeOf.Class, create:() => PaymentSetting()),
    'List<AdminPaymentOptions>': TypeInfo(TypeOf.Class, create:() => <AdminPaymentOptions>[]),
    'List<PaymentProviders>': TypeInfo(TypeOf.Class, create:() => <PaymentProviders>[]),
    'LanguageResponse': TypeInfo(TypeOf.Class, create:() => LanguageResponse()),
    'CompanySetting': TypeInfo(TypeOf.Class, create:() => CompanySetting()),
    'List<LanguageResponse>': TypeInfo(TypeOf.Class, create:() => <LanguageResponse>[]),
    'WidgetServiceLayouts': TypeInfo(TypeOf.Class, create:() => WidgetServiceLayouts()),
    'WidgetTimeLayouts': TypeInfo(TypeOf.Class, create:() => WidgetTimeLayouts()),
    'WidgetBookingLayouts': TypeInfo(TypeOf.Class, create:() => WidgetBookingLayouts()),
    'WidgetBookingMethods': TypeInfo(TypeOf.Class, create:() => WidgetBookingMethods()),
    'HomepageWidgetSetting': TypeInfo(TypeOf.Class, create:() => HomepageWidgetSetting()),
    'List<WidgetServiceLayouts>': TypeInfo(TypeOf.Class, create:() => <WidgetServiceLayouts>[]),
    'List<WidgetTimeLayouts>': TypeInfo(TypeOf.Class, create:() => <WidgetTimeLayouts>[]),
    'List<WidgetBookingLayouts>': TypeInfo(TypeOf.Class, create:() => <WidgetBookingLayouts>[]),
    'List<WidgetBookingMethods>': TypeInfo(TypeOf.Class, create:() => <WidgetBookingMethods>[]),
    'HomepageTemplate': TypeInfo(TypeOf.Class, create:() => HomepageTemplate()),
    'HeroSectionStyle': TypeInfo(TypeOf.Class, create:() => HeroSectionStyle()),
    'HomepageSetting': TypeInfo(TypeOf.Class, create:() => HomepageSetting()),
    'List<HomepageTemplate>': TypeInfo(TypeOf.Class, create:() => <HomepageTemplate>[]),
    'List<HeroSectionStyle>': TypeInfo(TypeOf.Class, create:() => <HeroSectionStyle>[]),
    'AverageRatingScore': TypeInfo(TypeOf.Class, create:() => AverageRatingScore()),
    'Review': TypeInfo(TypeOf.Class, create:() => Review()),
    'Rating': TypeInfo(TypeOf.Class, create:() => Rating()),
    'LicenseTypeItem': TypeInfo(TypeOf.Class, create:() => LicenseTypeItem()),
    'LicenseType': TypeInfo(TypeOf.Class, create:() => LicenseType()),
    'Country': TypeInfo(TypeOf.Class, create:() => Country()),
    'LicensePrice': TypeInfo(TypeOf.Class, create:() => LicensePrice()),
    'List<LicenseTypeItem>': TypeInfo(TypeOf.Class, create:() => <LicenseTypeItem>[]),
    'List<LicensePrice>': TypeInfo(TypeOf.Class, create:() => <LicensePrice>[]),
    'License': TypeInfo(TypeOf.Class, create:() => License()),
    'CompanyCategory': TypeInfo(TypeOf.Class, create:() => CompanyCategory()),
    'Company': TypeInfo(TypeOf.Class, create:() => Company()),
    'List<CustomFieldConfig>': TypeInfo(TypeOf.Class, create:() => <CustomFieldConfig>[]),
    'CustomFieldConfig': TypeInfo(TypeOf.Class, create:() => CustomFieldConfig()),
    'List<Rating>': TypeInfo(TypeOf.Class, create:() => <Rating>[]),
    'List<License>': TypeInfo(TypeOf.Class, create:() => <License>[]),
    'CultureInfo': TypeInfo(TypeOf.Class, create:() => CultureInfo()),
    'List<ExternalReference>': TypeInfo(TypeOf.Class, create:() => <ExternalReference>[]),
    'CustomFieldDataResponse': TypeInfo(TypeOf.Class, create:() => CustomFieldDataResponse()),
    'CustomerComment': TypeInfo(TypeOf.Class, create:() => CustomerComment()),
    'Customer': TypeInfo(TypeOf.Class, create:() => Customer()),
    'List<UserAccessKeys>': TypeInfo(TypeOf.Class, create:() => <UserAccessKeys>[]),
    'List<CustomFieldDataResponse>': TypeInfo(TypeOf.Class, create:() => <CustomFieldDataResponse>[]),
    'List<CustomerComment>': TypeInfo(TypeOf.Class, create:() => <CustomerComment>[]),
    'List<RebateCode>': TypeInfo(TypeOf.Class, create:() => <RebateCode>[]),
    'RebateCode': TypeInfo(TypeOf.Class, create:() => RebateCode()),
    'ItemType': TypeInfo(TypeOf.Enum, enumValues:ItemType.values),
    'Item': TypeInfo(TypeOf.Class, create:() => Item()),
    'Order': TypeInfo(TypeOf.Class, create:() => Order()),
    'List<Item>': TypeInfo(TypeOf.Class, create:() => <Item>[]),
    'Merchant': TypeInfo(TypeOf.Class, create:() => Merchant()),
    'ColorScheme': TypeInfo(TypeOf.Enum, enumValues:ColorScheme.values),
    'Gui': TypeInfo(TypeOf.Class, create:() => Gui()),
    'History': TypeInfo(TypeOf.Class, create:() => History()),
    'Payson2CheckoutResponse': TypeInfo(TypeOf.Class, create:() => Payson2CheckoutResponse()),
    'BaseOptions': TypeInfo(TypeOf.Class, create:() => BaseOptions()),
    'Map<String,dynamic?>': TypeInfo(TypeOf.Class, create:() => Map<String,dynamic?>()),
    'SessionAfterExpirationRecoveryOptions': TypeInfo(TypeOf.Class, create:() => SessionAfterExpirationRecoveryOptions()),
    'SessionAfterExpirationOptions': TypeInfo(TypeOf.Class, create:() => SessionAfterExpirationOptions()),
    'SessionAutomaticTaxLiabilityOptions': TypeInfo(TypeOf.Class, create:() => SessionAutomaticTaxLiabilityOptions()),
    'SessionAutomaticTaxOptions': TypeInfo(TypeOf.Class, create:() => SessionAutomaticTaxOptions()),
    'SessionConsentCollectionPaymentMethodReuseAgreementOptions': TypeInfo(TypeOf.Class, create:() => SessionConsentCollectionPaymentMethodReuseAgreementOptions()),
    'SessionConsentCollectionOptions': TypeInfo(TypeOf.Class, create:() => SessionConsentCollectionOptions()),
    'SessionCustomFieldDropdownOptionOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldDropdownOptionOptions()),
    'SessionCustomFieldDropdownOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldDropdownOptions()),
    'List<SessionCustomFieldDropdownOptionOptions>': TypeInfo(TypeOf.Class, create:() => <SessionCustomFieldDropdownOptionOptions>[]),
    'SessionCustomFieldLabelOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldLabelOptions()),
    'SessionCustomFieldNumericOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldNumericOptions()),
    'SessionCustomFieldTextOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldTextOptions()),
    'SessionCustomFieldOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldOptions()),
    'SessionCustomTextAfterSubmitOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomTextAfterSubmitOptions()),
    'SessionCustomTextShippingAddressOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomTextShippingAddressOptions()),
    'SessionCustomTextSubmitOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomTextSubmitOptions()),
    'SessionCustomTextTermsOfServiceAcceptanceOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomTextTermsOfServiceAcceptanceOptions()),
    'SessionCustomTextOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomTextOptions()),
    'SessionCustomerUpdateOptions': TypeInfo(TypeOf.Class, create:() => SessionCustomerUpdateOptions()),
    'SessionDiscountOptions': TypeInfo(TypeOf.Class, create:() => SessionDiscountOptions()),
    'SessionInvoiceCreationInvoiceDataCustomFieldOptions': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataCustomFieldOptions()),
    'SessionInvoiceCreationInvoiceDataIssuerOptions': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataIssuerOptions()),
    'SessionInvoiceCreationInvoiceDataRenderingOptionsOptions': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataRenderingOptionsOptions()),
    'SessionInvoiceCreationInvoiceDataOptions': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataOptions()),
    'List<SessionInvoiceCreationInvoiceDataCustomFieldOptions>': TypeInfo(TypeOf.Class, create:() => <SessionInvoiceCreationInvoiceDataCustomFieldOptions>[]),
    'SessionInvoiceCreationOptions': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationOptions()),
    'SessionLineItemAdjustableQuantityOptions': TypeInfo(TypeOf.Class, create:() => SessionLineItemAdjustableQuantityOptions()),
    'SessionLineItemPriceDataProductDataOptions': TypeInfo(TypeOf.Class, create:() => SessionLineItemPriceDataProductDataOptions()),
    'SessionLineItemPriceDataRecurringOptions': TypeInfo(TypeOf.Class, create:() => SessionLineItemPriceDataRecurringOptions()),
    'SessionLineItemPriceDataOptions': TypeInfo(TypeOf.Class, create:() => SessionLineItemPriceDataOptions()),
    'SessionLineItemOptions': TypeInfo(TypeOf.Class, create:() => SessionLineItemOptions()),
    'AddressOptions': TypeInfo(TypeOf.Class, create:() => AddressOptions()),
    'ChargeShippingOptions': TypeInfo(TypeOf.Class, create:() => ChargeShippingOptions()),
    'SessionPaymentIntentDataTransferDataOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentIntentDataTransferDataOptions()),
    'SessionPaymentIntentDataOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentIntentDataOptions()),
    'SessionPaymentMethodDataOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodDataOptions()),
    'SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions()),
    'SessionPaymentMethodOptionsAcssDebitOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAcssDebitOptions()),
    'SessionPaymentMethodOptionsAffirmOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAffirmOptions()),
    'SessionPaymentMethodOptionsAfterpayClearpayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAfterpayClearpayOptions()),
    'SessionPaymentMethodOptionsAlipayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAlipayOptions()),
    'SessionPaymentMethodOptionsAmazonPayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAmazonPayOptions()),
    'SessionPaymentMethodOptionsAuBecsDebitOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAuBecsDebitOptions()),
    'SessionPaymentMethodOptionsBacsDebitOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsBacsDebitOptions()),
    'SessionPaymentMethodOptionsBancontactOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsBancontactOptions()),
    'SessionPaymentMethodOptionsBoletoOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsBoletoOptions()),
    'SessionPaymentMethodOptionsCardInstallmentsOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCardInstallmentsOptions()),
    'SessionPaymentMethodOptionsCardOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCardOptions()),
    'SessionPaymentMethodOptionsCashappOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCashappOptions()),
    'SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions()),
    'SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions()),
    'SessionPaymentMethodOptionsCustomerBalanceOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCustomerBalanceOptions()),
    'SessionPaymentMethodOptionsEpsOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsEpsOptions()),
    'SessionPaymentMethodOptionsFpxOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsFpxOptions()),
    'SessionPaymentMethodOptionsGiropayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsGiropayOptions()),
    'SessionPaymentMethodOptionsGrabpayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsGrabpayOptions()),
    'SessionPaymentMethodOptionsIdealOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsIdealOptions()),
    'SessionPaymentMethodOptionsKlarnaOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsKlarnaOptions()),
    'SessionPaymentMethodOptionsKonbiniOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsKonbiniOptions()),
    'SessionPaymentMethodOptionsLinkOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsLinkOptions()),
    'SessionPaymentMethodOptionsMobilepayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsMobilepayOptions()),
    'SessionPaymentMethodOptionsMultibancoOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsMultibancoOptions()),
    'SessionPaymentMethodOptionsOxxoOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsOxxoOptions()),
    'SessionPaymentMethodOptionsP24Options': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsP24Options()),
    'SessionPaymentMethodOptionsPaynowOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsPaynowOptions()),
    'SessionPaymentMethodOptionsPaypalOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsPaypalOptions()),
    'SessionPaymentMethodOptionsPixOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsPixOptions()),
    'SessionPaymentMethodOptionsRevolutPayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsRevolutPayOptions()),
    'SessionPaymentMethodOptionsSepaDebitOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsSepaDebitOptions()),
    'SessionPaymentMethodOptionsSofortOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsSofortOptions()),
    'SessionPaymentMethodOptionsSwishOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsSwishOptions()),
    'SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions()),
    'SessionPaymentMethodOptionsUsBankAccountOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsUsBankAccountOptions()),
    'SessionPaymentMethodOptionsWechatPayOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsWechatPayOptions()),
    'SessionPaymentMethodOptionsOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsOptions()),
    'SessionPhoneNumberCollectionOptions': TypeInfo(TypeOf.Class, create:() => SessionPhoneNumberCollectionOptions()),
    'SessionSavedPaymentMethodOptionsOptions': TypeInfo(TypeOf.Class, create:() => SessionSavedPaymentMethodOptionsOptions()),
    'SessionSetupIntentDataOptions': TypeInfo(TypeOf.Class, create:() => SessionSetupIntentDataOptions()),
    'SessionShippingAddressCollectionOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingAddressCollectionOptions()),
    'SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions()),
    'SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions()),
    'SessionShippingOptionShippingRateDataDeliveryEstimateOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionShippingRateDataDeliveryEstimateOptions()),
    'SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions()),
    'SessionShippingOptionShippingRateDataFixedAmountOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionShippingRateDataFixedAmountOptions()),
    'Map<String,SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions?>': TypeInfo(TypeOf.Class, create:() => Map<String,SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions?>()),
    'SessionShippingOptionShippingRateDataOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionShippingRateDataOptions()),
    'SessionShippingOptionOptions': TypeInfo(TypeOf.Class, create:() => SessionShippingOptionOptions()),
    'SessionSubscriptionDataInvoiceSettingsIssuerOptions': TypeInfo(TypeOf.Class, create:() => SessionSubscriptionDataInvoiceSettingsIssuerOptions()),
    'SessionSubscriptionDataInvoiceSettingsOptions': TypeInfo(TypeOf.Class, create:() => SessionSubscriptionDataInvoiceSettingsOptions()),
    'SessionSubscriptionDataTransferDataOptions': TypeInfo(TypeOf.Class, create:() => SessionSubscriptionDataTransferDataOptions()),
    'SessionSubscriptionDataTrialSettingsEndBehaviorOptions': TypeInfo(TypeOf.Class, create:() => SessionSubscriptionDataTrialSettingsEndBehaviorOptions()),
    'SessionSubscriptionDataTrialSettingsOptions': TypeInfo(TypeOf.Class, create:() => SessionSubscriptionDataTrialSettingsOptions()),
    'SessionSubscriptionDataOptions': TypeInfo(TypeOf.Class, create:() => SessionSubscriptionDataOptions()),
    'SessionTaxIdCollectionOptions': TypeInfo(TypeOf.Class, create:() => SessionTaxIdCollectionOptions()),
    'SessionCreateOptions': TypeInfo(TypeOf.Class, create:() => SessionCreateOptions()),
    'List<SessionCustomFieldOptions>': TypeInfo(TypeOf.Class, create:() => <SessionCustomFieldOptions>[]),
    'List<SessionDiscountOptions>': TypeInfo(TypeOf.Class, create:() => <SessionDiscountOptions>[]),
    'List<SessionLineItemOptions>': TypeInfo(TypeOf.Class, create:() => <SessionLineItemOptions>[]),
    'List<SessionShippingOptionOptions>': TypeInfo(TypeOf.Class, create:() => <SessionShippingOptionOptions>[]),
    'SessionAfterExpirationRecovery': TypeInfo(TypeOf.Class, create:() => SessionAfterExpirationRecovery()),
    'SessionAfterExpiration': TypeInfo(TypeOf.Class, create:() => SessionAfterExpiration()),
    'SessionAutomaticTaxLiability': TypeInfo(TypeOf.Class, create:() => SessionAutomaticTaxLiability()),
    'SessionAutomaticTax': TypeInfo(TypeOf.Class, create:() => SessionAutomaticTax()),
    'SessionConsent': TypeInfo(TypeOf.Class, create:() => SessionConsent()),
    'SessionConsentCollectionPaymentMethodReuseAgreement': TypeInfo(TypeOf.Class, create:() => SessionConsentCollectionPaymentMethodReuseAgreement()),
    'SessionConsentCollection': TypeInfo(TypeOf.Class, create:() => SessionConsentCollection()),
    'SessionCurrencyConversion': TypeInfo(TypeOf.Class, create:() => SessionCurrencyConversion()),
    'SessionCustomFieldDropdownOption': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldDropdownOption()),
    'SessionCustomFieldDropdown': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldDropdown()),
    'List<SessionCustomFieldDropdownOption>': TypeInfo(TypeOf.Class, create:() => <SessionCustomFieldDropdownOption>[]),
    'SessionCustomFieldLabel': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldLabel()),
    'SessionCustomFieldNumeric': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldNumeric()),
    'SessionCustomFieldText': TypeInfo(TypeOf.Class, create:() => SessionCustomFieldText()),
    'SessionCustomField': TypeInfo(TypeOf.Class, create:() => SessionCustomField()),
    'SessionCustomTextAfterSubmit': TypeInfo(TypeOf.Class, create:() => SessionCustomTextAfterSubmit()),
    'SessionCustomTextShippingAddress': TypeInfo(TypeOf.Class, create:() => SessionCustomTextShippingAddress()),
    'SessionCustomTextSubmit': TypeInfo(TypeOf.Class, create:() => SessionCustomTextSubmit()),
    'SessionCustomTextTermsOfServiceAcceptance': TypeInfo(TypeOf.Class, create:() => SessionCustomTextTermsOfServiceAcceptance()),
    'SessionCustomText': TypeInfo(TypeOf.Class, create:() => SessionCustomText()),
    'Address': TypeInfo(TypeOf.Class, create:() => Address()),
    'SessionCustomerDetailsTaxId': TypeInfo(TypeOf.Class, create:() => SessionCustomerDetailsTaxId()),
    'SessionCustomerDetails': TypeInfo(TypeOf.Class, create:() => SessionCustomerDetails()),
    'List<SessionCustomerDetailsTaxId>': TypeInfo(TypeOf.Class, create:() => <SessionCustomerDetailsTaxId>[]),
    'SessionInvoiceCreationInvoiceDataCustomField': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataCustomField()),
    'SessionInvoiceCreationInvoiceDataIssuer': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataIssuer()),
    'SessionInvoiceCreationInvoiceDataRenderingOptions': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceDataRenderingOptions()),
    'SessionInvoiceCreationInvoiceData': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreationInvoiceData()),
    'List<SessionInvoiceCreationInvoiceDataCustomField>': TypeInfo(TypeOf.Class, create:() => <SessionInvoiceCreationInvoiceDataCustomField>[]),
    'SessionInvoiceCreation': TypeInfo(TypeOf.Class, create:() => SessionInvoiceCreation()),
    'CouponAppliesTo': TypeInfo(TypeOf.Class, create:() => CouponAppliesTo()),
    'CouponCurrencyOptions': TypeInfo(TypeOf.Class, create:() => CouponCurrencyOptions()),
    'Coupon': TypeInfo(TypeOf.Class, create:() => Coupon()),
    'Map<String,CouponCurrencyOptions?>': TypeInfo(TypeOf.Class, create:() => Map<String,CouponCurrencyOptions?>()),
    'Discount': TypeInfo(TypeOf.Class, create:() => Discount()),
    'LineItemDiscount': TypeInfo(TypeOf.Class, create:() => LineItemDiscount()),
    'PriceCurrencyOptionsCustomUnitAmount': TypeInfo(TypeOf.Class, create:() => PriceCurrencyOptionsCustomUnitAmount()),
    'PriceCurrencyOptionsTier': TypeInfo(TypeOf.Class, create:() => PriceCurrencyOptionsTier()),
    'PriceCurrencyOptions': TypeInfo(TypeOf.Class, create:() => PriceCurrencyOptions()),
    'List<PriceCurrencyOptionsTier>': TypeInfo(TypeOf.Class, create:() => <PriceCurrencyOptionsTier>[]),
    'PriceCustomUnitAmount': TypeInfo(TypeOf.Class, create:() => PriceCustomUnitAmount()),
    'PriceRecurring': TypeInfo(TypeOf.Class, create:() => PriceRecurring()),
    'PriceTier': TypeInfo(TypeOf.Class, create:() => PriceTier()),
    'PriceTransformQuantity': TypeInfo(TypeOf.Class, create:() => PriceTransformQuantity()),
    'Price': TypeInfo(TypeOf.Class, create:() => Price()),
    'Map<String,PriceCurrencyOptions?>': TypeInfo(TypeOf.Class, create:() => Map<String,PriceCurrencyOptions?>()),
    'List<PriceTier>': TypeInfo(TypeOf.Class, create:() => <PriceTier>[]),
    'TaxRate': TypeInfo(TypeOf.Class, create:() => TaxRate()),
    'LineItemTax': TypeInfo(TypeOf.Class, create:() => LineItemTax()),
    'LineItem': TypeInfo(TypeOf.Class, create:() => LineItem()),
    'List<LineItemDiscount>': TypeInfo(TypeOf.Class, create:() => <LineItemDiscount>[]),
    'List<LineItemTax>': TypeInfo(TypeOf.Class, create:() => <LineItemTax>[]),
    'SessionPaymentMethodConfigurationDetails': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodConfigurationDetails()),
    'SessionPaymentMethodOptionsAcssDebitMandateOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAcssDebitMandateOptions()),
    'SessionPaymentMethodOptionsAcssDebit': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAcssDebit()),
    'SessionPaymentMethodOptionsAffirm': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAffirm()),
    'SessionPaymentMethodOptionsAfterpayClearpay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAfterpayClearpay()),
    'SessionPaymentMethodOptionsAlipay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAlipay()),
    'SessionPaymentMethodOptionsAmazonPay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAmazonPay()),
    'SessionPaymentMethodOptionsAuBecsDebit': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsAuBecsDebit()),
    'SessionPaymentMethodOptionsBacsDebit': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsBacsDebit()),
    'SessionPaymentMethodOptionsBancontact': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsBancontact()),
    'SessionPaymentMethodOptionsBoleto': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsBoleto()),
    'SessionPaymentMethodOptionsCardInstallments': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCardInstallments()),
    'SessionPaymentMethodOptionsCard': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCard()),
    'SessionPaymentMethodOptionsCashapp': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCashapp()),
    'SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer()),
    'SessionPaymentMethodOptionsCustomerBalanceBankTransfer': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCustomerBalanceBankTransfer()),
    'SessionPaymentMethodOptionsCustomerBalance': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsCustomerBalance()),
    'SessionPaymentMethodOptionsEps': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsEps()),
    'SessionPaymentMethodOptionsFpx': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsFpx()),
    'SessionPaymentMethodOptionsGiropay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsGiropay()),
    'SessionPaymentMethodOptionsGrabpay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsGrabpay()),
    'SessionPaymentMethodOptionsIdeal': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsIdeal()),
    'SessionPaymentMethodOptionsKlarna': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsKlarna()),
    'SessionPaymentMethodOptionsKonbini': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsKonbini()),
    'SessionPaymentMethodOptionsLink': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsLink()),
    'SessionPaymentMethodOptionsMobilepay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsMobilepay()),
    'SessionPaymentMethodOptionsMultibanco': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsMultibanco()),
    'SessionPaymentMethodOptionsOxxo': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsOxxo()),
    'SessionPaymentMethodOptionsP24': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsP24()),
    'SessionPaymentMethodOptionsPaynow': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsPaynow()),
    'SessionPaymentMethodOptionsPaypal': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsPaypal()),
    'SessionPaymentMethodOptionsPix': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsPix()),
    'SessionPaymentMethodOptionsRevolutPay': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsRevolutPay()),
    'SessionPaymentMethodOptionsSepaDebit': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsSepaDebit()),
    'SessionPaymentMethodOptionsSofort': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsSofort()),
    'SessionPaymentMethodOptionsSwish': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsSwish()),
    'SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters()),
    'SessionPaymentMethodOptionsUsBankAccountFinancialConnections': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsUsBankAccountFinancialConnections()),
    'SessionPaymentMethodOptionsUsBankAccount': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptionsUsBankAccount()),
    'SessionPaymentMethodOptions': TypeInfo(TypeOf.Class, create:() => SessionPaymentMethodOptions()),
    'SessionPhoneNumberCollection': TypeInfo(TypeOf.Class, create:() => SessionPhoneNumberCollection()),
    'SessionSavedPaymentMethodOptions': TypeInfo(TypeOf.Class, create:() => SessionSavedPaymentMethodOptions()),
    'SessionShippingAddressCollection': TypeInfo(TypeOf.Class, create:() => SessionShippingAddressCollection()),
    'SessionShippingCostTax': TypeInfo(TypeOf.Class, create:() => SessionShippingCostTax()),
    'SessionShippingCost': TypeInfo(TypeOf.Class, create:() => SessionShippingCost()),
    'List<SessionShippingCostTax>': TypeInfo(TypeOf.Class, create:() => <SessionShippingCostTax>[]),
    'SessionShippingDetails': TypeInfo(TypeOf.Class, create:() => SessionShippingDetails()),
    'SessionShippingOption': TypeInfo(TypeOf.Class, create:() => SessionShippingOption()),
    'SessionTaxIdCollection': TypeInfo(TypeOf.Class, create:() => SessionTaxIdCollection()),
    'SessionTotalDetailsBreakdownDiscount': TypeInfo(TypeOf.Class, create:() => SessionTotalDetailsBreakdownDiscount()),
    'SessionTotalDetailsBreakdownTax': TypeInfo(TypeOf.Class, create:() => SessionTotalDetailsBreakdownTax()),
    'SessionTotalDetailsBreakdown': TypeInfo(TypeOf.Class, create:() => SessionTotalDetailsBreakdown()),
    'List<SessionTotalDetailsBreakdownDiscount>': TypeInfo(TypeOf.Class, create:() => <SessionTotalDetailsBreakdownDiscount>[]),
    'List<SessionTotalDetailsBreakdownTax>': TypeInfo(TypeOf.Class, create:() => <SessionTotalDetailsBreakdownTax>[]),
    'SessionTotalDetails': TypeInfo(TypeOf.Class, create:() => SessionTotalDetails()),
    'Session': TypeInfo(TypeOf.Class, create:() => Session()),
    'List<SessionCustomField>': TypeInfo(TypeOf.Class, create:() => <SessionCustomField>[]),
    'StripeList<LineItem>': TypeInfo(TypeOf.Class, create:() => StripeList<LineItem>()),
    'List<SessionShippingOption>': TypeInfo(TypeOf.Class, create:() => <SessionShippingOption>[]),
    'IPaysonPaymentCheckout1': TypeInfo(TypeOf.Interface),
    'PaymentLog': TypeInfo(TypeOf.Class, create:() => PaymentLog()),
    'PayableEntity': TypeInfo(TypeOf.AbstractClass),
    'IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>': TypeInfo(TypeOf.Class, create:() => IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>()),
    'IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>': TypeInfo(TypeOf.Class, create:() => IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>()),
    'IBokameraPaymentManager<SessionCreateOptions,Session,Session>': TypeInfo(TypeOf.Class, create:() => IBokameraPaymentManager<SessionCreateOptions,Session,Session>()),
    'ILogger<PayableEntity>': TypeInfo(TypeOf.Class, create:() => ILogger<PayableEntity>()),
    'List<PaymentLog>': TypeInfo(TypeOf.Class, create:() => <PaymentLog>[]),
    'List<Customer>': TypeInfo(TypeOf.Class, create:() => <Customer>[]),
    'RebateCodeStatus': TypeInfo(TypeOf.Class, create:() => RebateCodeStatus()),
    'ArticleServiceRelation': TypeInfo(TypeOf.Class, create:() => ArticleServiceRelation()),
    'ArticleTypeEnum': TypeInfo(TypeOf.Enum, enumValues:ArticleTypeEnum.values),
    'Article': TypeInfo(TypeOf.Class, create:() => Article()),
    'List<ArticleServiceRelation>': TypeInfo(TypeOf.Class, create:() => <ArticleServiceRelation>[]),
    'RebateCodeDayOfWeekRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeDayOfWeekRelation()),
    'RebateCodeServiceRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeServiceRelation()),
    'RebateCodeBookingPriceRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeBookingPriceRelation()),
    'RebateCodeCustomerRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeCustomerRelation()),
    'DaysOfWeek': TypeInfo(TypeOf.Class, create:() => DaysOfWeek()),
    'CalendarExport': TypeInfo(TypeOf.Class, create:() => CalendarExport()),
    'BookingLogEventType': TypeInfo(TypeOf.Class, create:() => BookingLogEventType()),
    'BookingLog': TypeInfo(TypeOf.Class, create:() => BookingLog()),
    'PaymentDetails': TypeInfo(TypeOf.Class, create:() => PaymentDetails()),
    'BookingPrice': TypeInfo(TypeOf.Class, create:() => BookingPrice()),
    'BookingStatus': TypeInfo(TypeOf.Class, create:() => BookingStatus()),
    'BookedResource': TypeInfo(TypeOf.Class, create:() => BookedResource()),
    'BookedResourceType': TypeInfo(TypeOf.Class, create:() => BookedResourceType()),
    'List<BookedResource>': TypeInfo(TypeOf.Class, create:() => <BookedResource>[]),
    'Booking': TypeInfo(TypeOf.Class, create:() => Booking()),
    'Service': TypeInfo(TypeOf.Class, create:() => Service()),
    'List<BookingLog>': TypeInfo(TypeOf.Class, create:() => <BookingLog>[]),
    'List<PaymentDetails>': TypeInfo(TypeOf.Class, create:() => <PaymentDetails>[]),
    'List<BookingPrice>': TypeInfo(TypeOf.Class, create:() => <BookingPrice>[]),
    'List<BookedResourceType>': TypeInfo(TypeOf.Class, create:() => <BookedResourceType>[]),
    'List<PriceMapping>': TypeInfo(TypeOf.Class, create:() => <PriceMapping>[]),
    'RebateCodeTransaction': TypeInfo(TypeOf.Class, create:() => RebateCodeTransaction()),
    'List<Service>': TypeInfo(TypeOf.Class, create:() => <Service>[]),
    'List<RebateCodeDayOfWeekRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeDayOfWeekRelation>[]),
    'List<RebateCodeServiceRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeServiceRelation>[]),
    'List<RebateCodeBookingPriceRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeBookingPriceRelation>[]),
    'List<RebateCodeCustomerRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeCustomerRelation>[]),
    'List<DaysOfWeek>': TypeInfo(TypeOf.Class, create:() => <DaysOfWeek>[]),
    'List<RebateCodeTransaction>': TypeInfo(TypeOf.Class, create:() => <RebateCodeTransaction>[]),
    'ServicePrice': TypeInfo(TypeOf.Class, create:() => ServicePrice()),
    'List<ServicePriceDayOfWeekRelation>': TypeInfo(TypeOf.Class, create:() => <ServicePriceDayOfWeekRelation>[]),
    'List<ServicePrice>': TypeInfo(TypeOf.Class, create:() => <ServicePrice>[]),
    'List<ResourceType>': TypeInfo(TypeOf.Class, create:() => <ResourceType>[]),
    'List<ISchedule>': TypeInfo(TypeOf.Class, create:() => <ISchedule>[]),
    'List<Booking>': TypeInfo(TypeOf.Class, create:() => <Booking>[]),
    'CustomFieldServiceRelation': TypeInfo(TypeOf.Class, create:() => CustomFieldServiceRelation()),
    'List<CustomFieldValue>': TypeInfo(TypeOf.Class, create:() => <CustomFieldValue>[]),
    'List<CustomFieldServiceRelation>': TypeInfo(TypeOf.Class, create:() => <CustomFieldServiceRelation>[]),
    'List<ITimeException>': TypeInfo(TypeOf.Class, create:() => <ITimeException>[]),
    'List<IBookedTime>': TypeInfo(TypeOf.Class, create:() => <IBookedTime>[]),
    'KeyCloakRole': TypeInfo(TypeOf.Class, create:() => KeyCloakRole()),
    'CompanyUser': TypeInfo(TypeOf.Class, create:() => CompanyUser()),
    'List<KeyCloakRole>': TypeInfo(TypeOf.Class, create:() => <KeyCloakRole>[]),
    'SupportCase': TypeInfo(TypeOf.Class, create:() => SupportCase()),
    'List<CaseComment>': TypeInfo(TypeOf.Class, create:() => <CaseComment>[]),
    'List<CaseArea>': TypeInfo(TypeOf.Class, create:() => <CaseArea>[]),
    'List<CaseType>': TypeInfo(TypeOf.Class, create:() => <CaseType>[]),
    'List<CaseStatus>': TypeInfo(TypeOf.Class, create:() => <CaseStatus>[]),
    'List<CaseAttachment>': TypeInfo(TypeOf.Class, create:() => <CaseAttachment>[]),
    'List<CaseAttachmentRelation>': TypeInfo(TypeOf.Class, create:() => <CaseAttachmentRelation>[]),
    'SupportCaseQuery': TypeInfo(TypeOf.Class, create:() => SupportCaseQuery()),
    'List<SupportCaseQueryResponse>': TypeInfo(TypeOf.Class, create:() => <SupportCaseQueryResponse>[]),
    'IBokameraPaymentManager<TCreatedCheckoutResponse,TCheckoutResponse,TPaymentResponse>': TypeInfo(TypeOf.Interface),
    'StripeEntity': TypeInfo(TypeOf.AbstractClass),
    'StripeEntity1<T>': TypeInfo(TypeOf.AbstractClass),
    'StripeList<T>': TypeInfo(TypeOf.Class, create:() => StripeList<T>()),
    'ILogger<TCategoryName>': TypeInfo(TypeOf.Interface),
    'AccessKeyTypeResponse': TypeInfo(TypeOf.Class, create:() => AccessKeyTypeResponse()),
    'QueryResponse<AccessKeyTypeResponse>': TypeInfo(TypeOf.Class, create:() => QueryResponse<AccessKeyTypeResponse>()),
});

Dart SupportCaseQuery 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.

GET /support/cases HTTP/1.1 
Host: testapi.bokamera.se 
Accept: text/jsonl
HTTP/1.1 200 OK
Content-Type: text/jsonl
Content-Length: length

{"Offset":0,"Total":0,"Results":[{"Id":0,"Title":"String","Description":"String","CaseStatusId":0,"CaseTypeId":0,"CaseAreaId":0,"CreatedBy":"String","UpdatedBy":"String","SolvedBy":"String","CaseOwner":"String","CaseStatus":{"Id":0,"Name":"String","Description":"String","Icon":"String","Color":"String"},"CaseType":{"Id":0,"Name":"String","Description":"String"},"CaseArea":{"Id":0,"Name":"String","Description":"String"},"Comments":[{"SupportCaseId":0,"Id":0,"Comment":"String","CreatedBy":"String"}],"Attachments":[{"Id":0,"FileUrl":"String"}],"CaseStatusOptions":[{"Id":0,"Name":"String","Description":"String","Icon":"String","Color":"String"}],"CaseTypeOptions":[{"Id":0,"Name":"String","Description":"String"}],"CaseAreaOptions":[{"Id":0,"Name":"String","Description":"String"}]}],"Meta":{"String":"String"},"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}