/* Options:
Date: 2025-04-14 05:09:06
Version: 8.23
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://api.bokamera.se

//GlobalNamespace: 
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddImplicitVersion: 
//AddDescriptionAsComments: True
IncludeTypes: SuperAdminCompanyQuery.*
//ExcludeTypes: 
//DefaultImports: package:servicestack/servicestack.dart
*/

import 'package:servicestack/servicestack.dart';

abstract class ICompany
{
    String? CompanyId;
}

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

abstract class IInterval
{
    DateTime? From;
    DateTime? To;
}

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 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 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;
}

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

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 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 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 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;
    bool? SendCustomerInformationToExternalProviders;
    // @Required()
    String? Id;

    bool? IsWebhookFeatureEnabled;
    int? SmsMessageSendLimit;
    int? EmailMessageSendLimit;

    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.SendCustomerInformationToExternalProviders,this.Id,this.IsWebhookFeatureEnabled,this.SmsMessageSendLimit,this.EmailMessageSendLimit});
    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'];
        SendCustomerInformationToExternalProviders = json['SendCustomerInformationToExternalProviders'];
        Id = json['Id'];
        IsWebhookFeatureEnabled = json['IsWebhookFeatureEnabled'];
        SmsMessageSendLimit = json['SmsMessageSendLimit'];
        EmailMessageSendLimit = json['EmailMessageSendLimit'];
        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,
        'SendCustomerInformationToExternalProviders': SendCustomerInformationToExternalProviders,
        'Id': Id,
        'IsWebhookFeatureEnabled': IsWebhookFeatureEnabled,
        'SmsMessageSendLimit': SmsMessageSendLimit,
        'EmailMessageSendLimit': EmailMessageSendLimit
    });

    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;
}

enum Currency
{
    SEK,
    EUR,
}

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()
    bool? IsFree;

    // @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.IsFree,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!);
        IsFree = json['IsFree'];
        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!),
        'IsFree': IsFree,
        '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;
}

enum ScheduleType
{
    NotDefined,
    RecurringSchedule,
    DateSchedule,
}

abstract class ISchedule
{
    String? CompanyId;
    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;
}

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 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 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 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;
}

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<CompanyUser>? CompanyUsers;

    // @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;

    DateTime? DeletionNotificationDate;

    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.CompanyUsers,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,this.DeletionNotificationDate});
    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!);
        CompanyUsers = JsonConverters.fromJson(json['CompanyUsers'],'List<CompanyUser>',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'];
        DeletionNotificationDate = JsonConverters.fromJson(json['DeletionNotificationDate'],'DateTime',context!);
        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!),
        'CompanyUsers': JsonConverters.toJson(CompanyUsers,'List<CompanyUser>',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,
        'DeletionNotificationDate': JsonConverters.toJson(DeletionNotificationDate,'DateTime',context!)
    });

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

class CompanyUser extends BaseModel implements IUser, IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    Resource? Resource;
    // @Ignore()
    List<KeyCloakRole>? Roles;

    // @Ignore()
    Company? Company;

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

    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.Company,this.Email,this.FullName,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!);
        Company = JsonConverters.fromJson(json['Company'],'Company',context!);
        Email = json['Email'];
        FullName = json['FullName'];
        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!),
        'Company': JsonConverters.toJson(Company,'Company',context!),
        'Email': Email,
        'FullName': FullName,
        '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 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;
}

class RatingReviewResponse implements IConvertible
{
    /**
    * The title for the review
    */
    // @ApiMember(Description="The title for the review")
    String? Title;

    /**
    * The description for the review
    */
    // @ApiMember(Description="The description for the review")
    String? Description;

    /**
    * The rating score
    */
    // @ApiMember(Description="The rating score")
    int? RatingScore;

    /**
    * The review author
    */
    // @ApiMember(Description="The review author")
    String? Author;

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

    /**
    * The review answer from the company
    */
    // @ApiMember(Description="The review answer from the company")
    String? ReviewAnswer;

    RatingReviewResponse({this.Title,this.Description,this.RatingScore,this.Author,this.Created,this.ReviewAnswer});
    RatingReviewResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'Title': Title,
        'Description': Description,
        'RatingScore': RatingScore,
        'Author': Author,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ReviewAnswer': ReviewAnswer
    };

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

class CustomFieldValueResponse implements IConvertible
{
    String? Value;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

enum CodeLockSystemType
{
    Sample,
    RcoM5,
    AxemaVaka,
    VanderbiltOmnis,
    ParakeyParakey,
    AmidoDax,
    TelkeyTelkey,
    TechSolutionsSiedle,
    Accessy,
    Zesec,
    Enabla,
}

class CompanyBookingSettings implements IConvertible
{
    bool? EnableMobileApp;
    String? BookingReceiptMessage;
    bool? ShowFreeTimesLeft;
    bool? EnableShowBookedTimes;
    String? BookingAgreement;
    /**
    * The settings for how to display week number. 1 = ShowWeekNumberFromDate, 2 = ShowWeekNumberToDate, 3 = ShowWeekNumberFromToDate, 4 = DontShowWeekNumber  
    */
    // @ApiMember(DataType="int", Description="The settings for how to display week number. 1 = ShowWeekNumberFromDate, 2 = ShowWeekNumberToDate, 3 = ShowWeekNumberFromToDate, 4 = DontShowWeekNumber  ")
    int? WeekNumberSetting;

    bool? ShowBookedTimes;
    /**
    * The payment provider id. 1 = Payson Checkout 1.0, 2= Payson Checkout 2.0 ... To get the full payment provider for the company call GET /payment/settings
    */
    // @ApiMember(Description="The payment provider id. 1 = Payson Checkout 1.0, 2= Payson Checkout 2.0 ... To get the full payment provider for the company call GET /payment/settings")
    int? PaymentProviderId;

    /**
    * If it's only allowed for existing customers to book
    */
    // @ApiMember(DataType="boolean", Description="If it's only allowed for existing customers to book")
    bool? BookOnlyOnExistingCustomers;

    /**
    * If payment is enabled
    */
    // @ApiMember(DataType="boolean", Description="If payment is enabled")
    bool? PaymentEnabled;

    CompanyBookingSettings({this.EnableMobileApp,this.BookingReceiptMessage,this.ShowFreeTimesLeft,this.EnableShowBookedTimes,this.BookingAgreement,this.WeekNumberSetting,this.ShowBookedTimes,this.PaymentProviderId,this.BookOnlyOnExistingCustomers,this.PaymentEnabled});
    CompanyBookingSettings.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        EnableMobileApp = json['EnableMobileApp'];
        BookingReceiptMessage = json['BookingReceiptMessage'];
        ShowFreeTimesLeft = json['ShowFreeTimesLeft'];
        EnableShowBookedTimes = json['EnableShowBookedTimes'];
        BookingAgreement = json['BookingAgreement'];
        WeekNumberSetting = json['WeekNumberSetting'];
        ShowBookedTimes = json['ShowBookedTimes'];
        PaymentProviderId = json['PaymentProviderId'];
        BookOnlyOnExistingCustomers = json['BookOnlyOnExistingCustomers'];
        PaymentEnabled = json['PaymentEnabled'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'EnableMobileApp': EnableMobileApp,
        'BookingReceiptMessage': BookingReceiptMessage,
        'ShowFreeTimesLeft': ShowFreeTimesLeft,
        'EnableShowBookedTimes': EnableShowBookedTimes,
        'BookingAgreement': BookingAgreement,
        'WeekNumberSetting': WeekNumberSetting,
        'ShowBookedTimes': ShowBookedTimes,
        'PaymentProviderId': PaymentProviderId,
        'BookOnlyOnExistingCustomers': BookOnlyOnExistingCustomers,
        'PaymentEnabled': PaymentEnabled
    };

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

class CompanySystemSettings implements IConvertible
{
    /**
    * If the booking is active or not
    */
    // @ApiMember(DataType="bool", Description="If the booking is active or not")
    bool? Active;

    /**
    * If the booking is not active, what message to show to the customers
    */
    // @ApiMember(DataType="string", Description="If the booking is not active, what message to show to the customers")
    String? InactiveMessage;

    /**
    * If the company should be visible in search results on hompage
    */
    // @ApiMember(DataType="bool", Description="If the company should be visible in search results on hompage")
    bool? Searchable;

    /**
    * If you have a google analytics account and want to track your customers behaviors.
    */
    // @ApiMember(DataType="string", Description="If you have a google analytics account and want to track your customers behaviors.")
    String? GATrackingId;

    /**
    * If you have a google Ads Conversion Id account and want to track your customers behaviors.
    */
    // @ApiMember(DataType="string", Description="If you have a google Ads Conversion Id account and want to track your customers behaviors.")
    String? GoogleAdsConversionId;

    /**
    * If you have a LinkedIn account and want to track your customers behaviors.
    */
    // @ApiMember(DataType="string", Description="If you have a LinkedIn account and want to track your customers behaviors.")
    String? LinkedinTagId;

    /**
    * If you have a Google Ads Conversion Label and want to track your customers behaviors.
    */
    // @ApiMember(DataType="string", Description="If you have a Google Ads Conversion Label and want to track your customers behaviors.")
    String? GoogleAdsConversionLabel;

    /**
    * If you have a google tag manager account and want to track your customers behaviors.
    */
    // @ApiMember(DataType="string", Description="If you have a google tag manager account and want to track your customers behaviors.")
    String? GTMTrackingId;

    /**
    * If you have a facebook account and want to track your customers behaviors.
    */
    // @ApiMember(DataType="string", Description="If you have a facebook account and want to track your customers behaviors.")
    String? FacebookPixelId;

    /**
    * If you want your customers to be albe to change language on your homepage
    */
    // @ApiMember(DataType="bool", Description="If you want your customers to be albe to change language on your homepage")
    bool? MultiLanguage;

    /**
    * If the company should be visible on the marketplace
    */
    // @ApiMember(DataType="bool", Description="If the company should be visible on the marketplace")
    bool? ShowOnMarketplace;

    /**
    * If you want your own written text on your homepage to be translated using google analytics when a user changes language
    */
    // @ApiMember(DataType="bool", Description="If you want your own written text on your homepage to be translated using google analytics when a user changes language")
    bool? EnableAPITranslation;

    /**
    * What is the standard language your homepage information is written in. Select from the different countries, ie. SE,NO,EN
    */
    // @ApiMember(DataType="string", Description="What is the standard language your homepage information is written in. Select from the different countries, ie. SE,NO,EN")
    String? DefaultLanguage;

    /**
    * If you want to allow to send customer information in the tracking events to the external providers. Note you as a company are responsible for informing your customers and handling the data in terms of GDPR. 
    */
    // @ApiMember(Description="If you want to allow to send customer information in the tracking events to the external providers. Note you as a company are responsible for informing your customers and handling the data in terms of GDPR. ")
    bool? SendCustomerInformationToExternalProviders;

    /**
    * The maximum number of SMS messages that can be sent per day.
    */
    // @ApiMember(Description="The maximum number of SMS messages that can be sent per day.")
    int? SMSMessageDailySendLimit;

    /**
    * The maximum number of email messages that can be sent per day.
    */
    // @ApiMember(Description="The maximum number of email messages that can be sent per day.")
    int? EmailMessageDailySendLimit;

    CompanySystemSettings({this.Active,this.InactiveMessage,this.Searchable,this.GATrackingId,this.GoogleAdsConversionId,this.LinkedinTagId,this.GoogleAdsConversionLabel,this.GTMTrackingId,this.FacebookPixelId,this.MultiLanguage,this.ShowOnMarketplace,this.EnableAPITranslation,this.DefaultLanguage,this.SendCustomerInformationToExternalProviders,this.SMSMessageDailySendLimit,this.EmailMessageDailySendLimit});
    CompanySystemSettings.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Active = json['Active'];
        InactiveMessage = json['InactiveMessage'];
        Searchable = json['Searchable'];
        GATrackingId = json['GATrackingId'];
        GoogleAdsConversionId = json['GoogleAdsConversionId'];
        LinkedinTagId = json['LinkedinTagId'];
        GoogleAdsConversionLabel = json['GoogleAdsConversionLabel'];
        GTMTrackingId = json['GTMTrackingId'];
        FacebookPixelId = json['FacebookPixelId'];
        MultiLanguage = json['MultiLanguage'];
        ShowOnMarketplace = json['ShowOnMarketplace'];
        EnableAPITranslation = json['EnableAPITranslation'];
        DefaultLanguage = json['DefaultLanguage'];
        SendCustomerInformationToExternalProviders = json['SendCustomerInformationToExternalProviders'];
        SMSMessageDailySendLimit = json['SMSMessageDailySendLimit'];
        EmailMessageDailySendLimit = json['EmailMessageDailySendLimit'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Active': Active,
        'InactiveMessage': InactiveMessage,
        'Searchable': Searchable,
        'GATrackingId': GATrackingId,
        'GoogleAdsConversionId': GoogleAdsConversionId,
        'LinkedinTagId': LinkedinTagId,
        'GoogleAdsConversionLabel': GoogleAdsConversionLabel,
        'GTMTrackingId': GTMTrackingId,
        'FacebookPixelId': FacebookPixelId,
        'MultiLanguage': MultiLanguage,
        'ShowOnMarketplace': ShowOnMarketplace,
        'EnableAPITranslation': EnableAPITranslation,
        'DefaultLanguage': DefaultLanguage,
        'SendCustomerInformationToExternalProviders': SendCustomerInformationToExternalProviders,
        'SMSMessageDailySendLimit': SMSMessageDailySendLimit,
        'EmailMessageDailySendLimit': EmailMessageDailySendLimit
    };

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

class CompanyWidgetSettings implements IConvertible
{
    /**
    * The service layouts id.
    */
    // @ApiMember(Description="The service layouts id.")
    int? ServiceLayoutId;

    /**
    * The time layouts id.
    */
    // @ApiMember(Description="The time layouts id.")
    int? TimeLayoutId;

    /**
    * The booking layouts id.
    */
    // @ApiMember(Description="The booking layouts id.")
    int? BookingLayoutId;

    /**
    * The primary color of the booking widget.
    */
    // @ApiMember(Description="The primary color of the booking widget.")
    String? PrimaryColor;

    /**
    * If you should show the service image in the booking widget.
    */
    // @ApiMember(Description="If you should show the service image in the booking widget.")
    bool? ShowServiceImage;

    /**
    * If you should show the rebate code field in the booking widget.
    */
    // @ApiMember(Description="If you should show the rebate code field in the booking widget.")
    bool? ShowRebateCodeField;

    /**
    * If you should show the next available time in the booking widget.
    */
    // @ApiMember(Description="If you should show the next available time in the booking widget.")
    bool? ShowNextAvailableTime;

    /**
    * If you should show the end time in the booking widget.
    */
    // @ApiMember(Description="If you should show the end time in the booking widget.")
    bool? ShowEndTime;

    /**
    * What text to show on booked time slots. Default text is Booked
    */
    // @ApiMember(Description="What text to show on booked time slots. Default text is Booked")
    String? BookedTimeSlotText;

    /**
    * If the widget should be displayed in dark theme
    */
    // @ApiMember(Description="If the widget should be displayed in dark theme")
    bool? DarkTheme;

    /**
    * If you should show the subscribe to newsletter checkbox in the booking widget.
    */
    // @ApiMember(Description="If you should show the subscribe to newsletter checkbox in the booking widget.")
    bool? ShowSubscribeToNewsletter;

    CompanyWidgetSettings({this.ServiceLayoutId,this.TimeLayoutId,this.BookingLayoutId,this.PrimaryColor,this.ShowServiceImage,this.ShowRebateCodeField,this.ShowNextAvailableTime,this.ShowEndTime,this.BookedTimeSlotText,this.DarkTheme,this.ShowSubscribeToNewsletter});
    CompanyWidgetSettings.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ServiceLayoutId = json['ServiceLayoutId'];
        TimeLayoutId = json['TimeLayoutId'];
        BookingLayoutId = json['BookingLayoutId'];
        PrimaryColor = json['PrimaryColor'];
        ShowServiceImage = json['ShowServiceImage'];
        ShowRebateCodeField = json['ShowRebateCodeField'];
        ShowNextAvailableTime = json['ShowNextAvailableTime'];
        ShowEndTime = json['ShowEndTime'];
        BookedTimeSlotText = json['BookedTimeSlotText'];
        DarkTheme = json['DarkTheme'];
        ShowSubscribeToNewsletter = json['ShowSubscribeToNewsletter'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ServiceLayoutId': ServiceLayoutId,
        'TimeLayoutId': TimeLayoutId,
        'BookingLayoutId': BookingLayoutId,
        'PrimaryColor': PrimaryColor,
        'ShowServiceImage': ShowServiceImage,
        'ShowRebateCodeField': ShowRebateCodeField,
        'ShowNextAvailableTime': ShowNextAvailableTime,
        'ShowEndTime': ShowEndTime,
        'BookedTimeSlotText': BookedTimeSlotText,
        'DarkTheme': DarkTheme,
        'ShowSubscribeToNewsletter': ShowSubscribeToNewsletter
    };

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

class HomepageSettingsResponse implements IConvertible
{
    /**
    * The text for homepage heading
    */
    // @ApiMember(Description="The text for homepage heading")
    String? HomepageHeading;

    /**
    * The text for homepage startpage heading
    */
    // @ApiMember(Description="The text for homepage startpage heading")
    String? WelcomePageHeading;

    /**
    * The text for homepage startpage body
    */
    // @ApiMember(Description="The text for homepage startpage body")
    String? WelcomePageBody;

    /**
    * The text for homepage about us page heading
    */
    // @ApiMember(Description="The text for homepage about us page heading")
    String? AboutUsPageHeading;

    /**
    * The text for homepage about us page body
    */
    // @ApiMember(Description="The text for homepage about us page body")
    String? AboutUsPageBody;

    /**
    * The startpage image url
    */
    // @ApiMember(Description="The startpage image url")
    Uri? ImageUrl;

    /**
    * The cover image url
    */
    // @ApiMember(Description="The cover image url")
    Uri? CoverImage;

    /**
    * Show rating on the page
    */
    // @ApiMember(Description="Show rating on the page")
    bool? ShowRating;

    /**
    * The template for the homepage
    */
    // @ApiMember(Description="The template for the homepage")
    int? HomePageTemplateId;

    /**
    * The hero section style for the homepage
    */
    // @ApiMember(Description="The hero section style for the homepage")
    int? HeroSectionStyleId;

    /**
    * Enable the BokaMera Homepage
    */
    // @ApiMember(Description="Enable the BokaMera Homepage")
    bool? EnableHomepage;

    HomepageSettingsResponse({this.HomepageHeading,this.WelcomePageHeading,this.WelcomePageBody,this.AboutUsPageHeading,this.AboutUsPageBody,this.ImageUrl,this.CoverImage,this.ShowRating,this.HomePageTemplateId,this.HeroSectionStyleId,this.EnableHomepage});
    HomepageSettingsResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        HomepageHeading = json['HomepageHeading'];
        WelcomePageHeading = json['WelcomePageHeading'];
        WelcomePageBody = json['WelcomePageBody'];
        AboutUsPageHeading = json['AboutUsPageHeading'];
        AboutUsPageBody = json['AboutUsPageBody'];
        ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
        CoverImage = JsonConverters.fromJson(json['CoverImage'],'Uri',context!);
        ShowRating = json['ShowRating'];
        HomePageTemplateId = json['HomePageTemplateId'];
        HeroSectionStyleId = json['HeroSectionStyleId'];
        EnableHomepage = json['EnableHomepage'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'HomepageHeading': HomepageHeading,
        'WelcomePageHeading': WelcomePageHeading,
        'WelcomePageBody': WelcomePageBody,
        'AboutUsPageHeading': AboutUsPageHeading,
        'AboutUsPageBody': AboutUsPageBody,
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!),
        'CoverImage': JsonConverters.toJson(CoverImage,'Uri',context!),
        'ShowRating': ShowRating,
        'HomePageTemplateId': HomePageTemplateId,
        'HeroSectionStyleId': HeroSectionStyleId,
        'EnableHomepage': EnableHomepage
    };

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

class CompanyRatingSummary implements IConvertible
{
    /**
    * The average rating score
    */
    // @ApiMember(Description="The average rating score")
    double? AverageScore;

    /**
    * The number of ratings of score 1
    */
    // @ApiMember(Description="The number of ratings of score 1")
    int? RatingScore1Count;

    /**
    * The number of ratings of score 2
    */
    // @ApiMember(Description="The number of ratings of score 2")
    int? RatingScore2Count;

    /**
    * The number of ratings of score 3
    */
    // @ApiMember(Description="The number of ratings of score 3")
    int? RatingScore3Count;

    /**
    * The number of ratings of score 4
    */
    // @ApiMember(Description="The number of ratings of score 4")
    int? RaingScore4Count;

    /**
    * The number of ratings of score 5
    */
    // @ApiMember(Description="The number of ratings of score 5")
    int? RatingScore5Count;

    /**
    * The number of ratings
    */
    // @ApiMember(Description="The number of ratings")
    int? Count;

    CompanyRatingSummary({this.AverageScore,this.RatingScore1Count,this.RatingScore2Count,this.RatingScore3Count,this.RaingScore4Count,this.RatingScore5Count,this.Count});
    CompanyRatingSummary.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        AverageScore = JsonConverters.toDouble(json['AverageScore']);
        RatingScore1Count = json['RatingScore1Count'];
        RatingScore2Count = json['RatingScore2Count'];
        RatingScore3Count = json['RatingScore3Count'];
        RaingScore4Count = json['RaingScore4Count'];
        RatingScore5Count = json['RatingScore5Count'];
        Count = json['Count'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'AverageScore': AverageScore,
        'RatingScore1Count': RatingScore1Count,
        'RatingScore2Count': RatingScore2Count,
        'RatingScore3Count': RatingScore3Count,
        'RaingScore4Count': RaingScore4Count,
        'RatingScore5Count': RatingScore5Count,
        'Count': Count
    };

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

abstract class IBaseModelCreated
{
    DateTime? CreatedDate;
}

abstract class IBaseModelUpdated
{
    DateTime? UpdatedDate;
}

abstract class ICustomFieldTable
{
    List<CustomFieldConfig>? CustomFieldsConfig;
    List<CustomFieldDataResponse>? CustomFieldsData;
    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;
}

abstract class IUser
{
    String? Id;
    String? UserId;
    String? Email;
    String? Firstname;
    String? Lastname;
    String? Phone;
}

class CompanyQueryResponse implements IConvertible
{
    String? Id;
    String? Name;
    /**
    * The organisation number will only be visible if your owner to the company
    */
    // @ApiMember(DataType="string", Description="The organisation number will only be visible if your owner to the company")
    String? OrganisationNumber;

    /**
    * What type of company. If it's used for personal use or as a company.
    */
    // @ApiMember(DataType="int", Description="What type of company. If it's used for personal use or as a company.")
    int? TypeId;

    String? Details;
    int? CategoryId;
    String? Category;
    Uri? LogoType;
    Uri? CoverImage;
    String? Street1;
    String? Street2;
    String? ZipCode;
    String? City;
    String? CountryId;
    String? Longitude;
    String? Latitude;
    double? Distance;
    String? Phone;
    String? Email;
    String? Homepage;
    String? SitePath;
    bool? Active;
    CodeLockSystemType? CodeLockSystem;
    bool? IsFreeAccount;
    /**
    * Will show when the company was updated, note it will only be shown if your logged in as admin for the company.
    */
    // @ApiMember(DataType="datetime", Description="Will show when the company was updated, note it will only be shown if your logged in as admin for the company.")
    DateTime? Updated;

    /**
    * Will show when the company was created, note it will only be shown if your logged in as admin for the company.
    */
    // @ApiMember(DataType="datetime", Description="Will show when the company was created, note it will only be shown if your logged in as admin for the company.")
    DateTime? Created;

    int? StatusId;
    /**
    * If the company is marked as favourite for the logged in user
    */
    // @ApiMember(DataType="boolean", Description="If the company is marked as favourite for the logged in user")
    bool? IsFavorite;

    String? BookingAgreements;
    CompanyBookingSettings? BookingSettings;
    CompanySystemSettings? SystemSettings;
    CompanyWidgetSettings? WidgetSettings;
    HomepageSettingsResponse? HomepageSettings;
    CompanyRatingSummary? RatingSummary;
    List<RatingReviewResponse>? Reviews;
    List<CustomFieldConfigData>? CustomerCustomFields;
    ResponseStatus? ResponseStatus;

    CompanyQueryResponse({this.Id,this.Name,this.OrganisationNumber,this.TypeId,this.Details,this.CategoryId,this.Category,this.LogoType,this.CoverImage,this.Street1,this.Street2,this.ZipCode,this.City,this.CountryId,this.Longitude,this.Latitude,this.Distance,this.Phone,this.Email,this.Homepage,this.SitePath,this.Active,this.CodeLockSystem,this.IsFreeAccount,this.Updated,this.Created,this.StatusId,this.IsFavorite,this.BookingAgreements,this.BookingSettings,this.SystemSettings,this.WidgetSettings,this.HomepageSettings,this.RatingSummary,this.Reviews,this.CustomerCustomFields,this.ResponseStatus});
    CompanyQueryResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        OrganisationNumber = json['OrganisationNumber'];
        TypeId = json['TypeId'];
        Details = json['Details'];
        CategoryId = json['CategoryId'];
        Category = json['Category'];
        LogoType = JsonConverters.fromJson(json['LogoType'],'Uri',context!);
        CoverImage = JsonConverters.fromJson(json['CoverImage'],'Uri',context!);
        Street1 = json['Street1'];
        Street2 = json['Street2'];
        ZipCode = json['ZipCode'];
        City = json['City'];
        CountryId = json['CountryId'];
        Longitude = json['Longitude'];
        Latitude = json['Latitude'];
        Distance = JsonConverters.toDouble(json['Distance']);
        Phone = json['Phone'];
        Email = json['Email'];
        Homepage = json['Homepage'];
        SitePath = json['SitePath'];
        Active = json['Active'];
        CodeLockSystem = JsonConverters.fromJson(json['CodeLockSystem'],'CodeLockSystemType',context!);
        IsFreeAccount = json['IsFreeAccount'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        StatusId = json['StatusId'];
        IsFavorite = json['IsFavorite'];
        BookingAgreements = json['BookingAgreements'];
        BookingSettings = JsonConverters.fromJson(json['BookingSettings'],'CompanyBookingSettings',context!);
        SystemSettings = JsonConverters.fromJson(json['SystemSettings'],'CompanySystemSettings',context!);
        WidgetSettings = JsonConverters.fromJson(json['WidgetSettings'],'CompanyWidgetSettings',context!);
        HomepageSettings = JsonConverters.fromJson(json['HomepageSettings'],'HomepageSettingsResponse',context!);
        RatingSummary = JsonConverters.fromJson(json['RatingSummary'],'CompanyRatingSummary',context!);
        Reviews = JsonConverters.fromJson(json['Reviews'],'List<RatingReviewResponse>',context!);
        CustomerCustomFields = JsonConverters.fromJson(json['CustomerCustomFields'],'List<CustomFieldConfigData>',context!);
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'OrganisationNumber': OrganisationNumber,
        'TypeId': TypeId,
        'Details': Details,
        'CategoryId': CategoryId,
        'Category': Category,
        'LogoType': JsonConverters.toJson(LogoType,'Uri',context!),
        'CoverImage': JsonConverters.toJson(CoverImage,'Uri',context!),
        'Street1': Street1,
        'Street2': Street2,
        'ZipCode': ZipCode,
        'City': City,
        'CountryId': CountryId,
        'Longitude': Longitude,
        'Latitude': Latitude,
        'Distance': Distance,
        'Phone': Phone,
        'Email': Email,
        'Homepage': Homepage,
        'SitePath': SitePath,
        'Active': Active,
        'CodeLockSystem': JsonConverters.toJson(CodeLockSystem,'CodeLockSystemType',context!),
        'IsFreeAccount': IsFreeAccount,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'StatusId': StatusId,
        'IsFavorite': IsFavorite,
        'BookingAgreements': BookingAgreements,
        'BookingSettings': JsonConverters.toJson(BookingSettings,'CompanyBookingSettings',context!),
        'SystemSettings': JsonConverters.toJson(SystemSettings,'CompanySystemSettings',context!),
        'WidgetSettings': JsonConverters.toJson(WidgetSettings,'CompanyWidgetSettings',context!),
        'HomepageSettings': JsonConverters.toJson(HomepageSettings,'HomepageSettingsResponse',context!),
        'RatingSummary': JsonConverters.toJson(RatingSummary,'CompanyRatingSummary',context!),
        'Reviews': JsonConverters.toJson(Reviews,'List<RatingReviewResponse>',context!),
        'CustomerCustomFields': JsonConverters.toJson(CustomerCustomFields,'List<CustomFieldConfigData>',context!),
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!)
    };

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

// @Route("/superadmin/companies", "GET")
class SuperAdminCompanyQuery extends QueryDb2<Company,CompanyQueryResponse> implements IReturn<QueryResponse<CompanyQueryResponse>>, IConvertible, IGet
{
    /**
    * Id for a specific company you want to retrieve.
    */
    // @ApiMember(Description="Id for a specific company you want to retrieve.", ParameterType="query")
    String? Id;

    /**
    * Include companies in these categories.
    */
    // @ApiMember(Description="Include companies in these categories.", ParameterType="query")
    List<int>? Categories;

    /**
    * The site path url for the company homepage
    */
    // @ApiMember(Description="The site path url for the company homepage", ParameterType="query")
    String? SitePath;

    /**
    * Search active companies. You're only allowed to search active companies.
    */
    // @ApiMember(Description="Search active companies. You're only allowed to search active companies.", ParameterType="query")
    bool? Active;

    /**
    * Maxium distance from the coordinates to be included in the result.
    */
    // @ApiMember(Description="Maxium distance from the coordinates to be included in the result.", ParameterType="query")
    double? Distance;

    /**
    * Will search by any company name or city that contains the search string provided.
    */
    // @ApiMember(Description="Will search by any company name or city that contains the search string provided.", ParameterType="query")
    String? Search;

    /**
    * Will search by any company owner id. Default is 1 = BokaMera.
    */
    // @ApiMember(Description="Will search by any company owner id. Default is 1 = BokaMera.", ParameterType="query")
    int? CompanyOwnerId;

    /**
    * If you want to get the booking agreements loaded into the field BookingAgreements
    */
    // @ApiMember(DataType="boolean", Description="If you want to get the booking agreements loaded into the field BookingAgreements", ParameterType="query")
    bool? IncludeBookingAgreements;

    /**
    * If you want to get the booking settings loaded into the field BookingSettings
    */
    // @ApiMember(DataType="boolean", Description="If you want to get the booking settings loaded into the field BookingSettings", ParameterType="query")
    bool? IncludeBookingSettings;

    /**
    * If you want to get the system settings loaded into the field SystemSettings
    */
    // @ApiMember(DataType="boolean", Description="If you want to get the system settings loaded into the field SystemSettings", ParameterType="query")
    bool? IncludeSystemSettings;

    /**
    * If you want to get the widget settings loaded into the field WidgetSettings
    */
    // @ApiMember(DataType="boolean", Description="If you want to get the widget settings loaded into the field WidgetSettings", ParameterType="query")
    bool? IncludeWidgetSettings;

    /**
    * If you want to get the homepage settings loaded into the field HomepageSettings
    */
    // @ApiMember(DataType="boolean", Description="If you want to get the homepage settings loaded into the field HomepageSettings", ParameterType="query")
    bool? IncludeHomepageSettings;

    /**
    * If you want to include the connected custom fields for the customers
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the connected custom fields for the customers", ParameterType="query")
    bool? IncludeCustomerCustomFields;

    /**
    * If you want to include the connected custom fields
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the connected custom fields", ParameterType="query")
    bool? IncludeCustomFields;

    /**
    * If you want to include the rating reviews
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the rating reviews", ParameterType="query")
    bool? IncludeRatingReviews;

    /**
    * If you want to include the rating summary
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the rating summary", ParameterType="query")
    bool? IncludeRatingSummary;

    /**
    * Company user email
    */
    // @ApiMember(Description="Company user email", ParameterType="query")
    String? CompanyUserEmail;

    SuperAdminCompanyQuery({this.Id,this.Categories,this.SitePath,this.Active,this.Distance,this.Search,this.CompanyOwnerId,this.IncludeBookingAgreements,this.IncludeBookingSettings,this.IncludeSystemSettings,this.IncludeWidgetSettings,this.IncludeHomepageSettings,this.IncludeCustomerCustomFields,this.IncludeCustomFields,this.IncludeRatingReviews,this.IncludeRatingSummary,this.CompanyUserEmail});
    SuperAdminCompanyQuery.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Id = json['Id'];
        Categories = JsonConverters.fromJson(json['Categories'],'List<int>',context!);
        SitePath = json['SitePath'];
        Active = json['Active'];
        Distance = JsonConverters.toDouble(json['Distance']);
        Search = json['Search'];
        CompanyOwnerId = json['CompanyOwnerId'];
        IncludeBookingAgreements = json['IncludeBookingAgreements'];
        IncludeBookingSettings = json['IncludeBookingSettings'];
        IncludeSystemSettings = json['IncludeSystemSettings'];
        IncludeWidgetSettings = json['IncludeWidgetSettings'];
        IncludeHomepageSettings = json['IncludeHomepageSettings'];
        IncludeCustomerCustomFields = json['IncludeCustomerCustomFields'];
        IncludeCustomFields = json['IncludeCustomFields'];
        IncludeRatingReviews = json['IncludeRatingReviews'];
        IncludeRatingSummary = json['IncludeRatingSummary'];
        CompanyUserEmail = json['CompanyUserEmail'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Id': Id,
        'Categories': JsonConverters.toJson(Categories,'List<int>',context!),
        'SitePath': SitePath,
        'Active': Active,
        'Distance': Distance,
        'Search': Search,
        'CompanyOwnerId': CompanyOwnerId,
        'IncludeBookingAgreements': IncludeBookingAgreements,
        'IncludeBookingSettings': IncludeBookingSettings,
        'IncludeSystemSettings': IncludeSystemSettings,
        'IncludeWidgetSettings': IncludeWidgetSettings,
        'IncludeHomepageSettings': IncludeHomepageSettings,
        'IncludeCustomerCustomFields': IncludeCustomerCustomFields,
        'IncludeCustomFields': IncludeCustomFields,
        'IncludeRatingReviews': IncludeRatingReviews,
        'IncludeRatingSummary': IncludeRatingSummary,
        'CompanyUserEmail': CompanyUserEmail
    });

    createResponse() => QueryResponse<CompanyQueryResponse>();
    getResponseTypeName() => "QueryResponse<CompanyQueryResponse>";
    getTypeName() => "SuperAdminCompanyQuery";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'api.bokamera.se', types: <String, TypeInfo> {
    'ICompany': TypeInfo(TypeOf.Interface),
    'BookingStatusEnum': TypeInfo(TypeOf.Enum, enumValues:BookingStatusEnum.values),
    'IInterval': TypeInfo(TypeOf.Interface),
    'BaseModel': TypeInfo(TypeOf.Class, create:() => BaseModel()),
    'CompanyCategory': TypeInfo(TypeOf.Class, create:() => CompanyCategory()),
    'Uri': TypeInfo(TypeOf.Class, create:() => Uri()),
    'CompanyType': TypeInfo(TypeOf.Class, create:() => CompanyType()),
    'CompanyStatus': TypeInfo(TypeOf.Enum, enumValues:CompanyStatus.values),
    'CustomFieldValue': TypeInfo(TypeOf.Class, create:() => CustomFieldValue()),
    'CustomField': TypeInfo(TypeOf.Class, create:() => CustomField()),
    'RegEx': TypeInfo(TypeOf.Class, create:() => RegEx()),
    'CustomFieldServiceRelation': TypeInfo(TypeOf.Class, create:() => CustomFieldServiceRelation()),
    'CustomFieldConfig': TypeInfo(TypeOf.Class, create:() => CustomFieldConfig()),
    'List<CustomFieldValue>': TypeInfo(TypeOf.Class, create:() => <CustomFieldValue>[]),
    'List<Service>': TypeInfo(TypeOf.Class, create:() => <Service>[]),
    'Service': TypeInfo(TypeOf.Class, create:() => Service()),
    'List<CustomFieldServiceRelation>': TypeInfo(TypeOf.Class, create:() => <CustomFieldServiceRelation>[]),
    '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>[]),
    '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()),
    'Currency': TypeInfo(TypeOf.Enum, enumValues:Currency.values),
    '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()),
    'ScheduleType': TypeInfo(TypeOf.Enum, enumValues:ScheduleType.values),
    'ISchedule': TypeInfo(TypeOf.Interface),
    'ITimeException': TypeInfo(TypeOf.Interface),
    'BookedCustomer': TypeInfo(TypeOf.Class, create:() => BookedCustomer()),
    'IBookedTime': TypeInfo(TypeOf.Interface),
    'CustomFieldDataResponse': TypeInfo(TypeOf.Class, create:() => CustomFieldDataResponse()),
    'Resource': TypeInfo(TypeOf.Class, create:() => Resource()),
    'List<ISchedule>': TypeInfo(TypeOf.Class, create:() => <ISchedule>[]),
    'List<ITimeException>': TypeInfo(TypeOf.Class, create:() => <ITimeException>[]),
    'List<IBookedTime>': TypeInfo(TypeOf.Class, create:() => <IBookedTime>[]),
    'List<CustomFieldConfig>': TypeInfo(TypeOf.Class, create:() => <CustomFieldConfig>[]),
    'List<CustomFieldDataResponse>': TypeInfo(TypeOf.Class, create:() => <CustomFieldDataResponse>[]),
    'KeyCloakRole': TypeInfo(TypeOf.Class, create:() => KeyCloakRole()),
    'ExternalReference': TypeInfo(TypeOf.Class, create:() => ExternalReference()),
    'Company': TypeInfo(TypeOf.Class, create:() => Company()),
    'List<Rating>': TypeInfo(TypeOf.Class, create:() => <Rating>[]),
    'List<License>': TypeInfo(TypeOf.Class, create:() => <License>[]),
    'List<CompanyUser>': TypeInfo(TypeOf.Class, create:() => <CompanyUser>[]),
    'CompanyUser': TypeInfo(TypeOf.Class, create:() => CompanyUser()),
    'CultureInfo': TypeInfo(TypeOf.Class, create:() => CultureInfo()),
    'List<ExternalReference>': TypeInfo(TypeOf.Class, create:() => <ExternalReference>[]),
    'List<KeyCloakRole>': TypeInfo(TypeOf.Class, create:() => <KeyCloakRole>[]),
    'RatingReviewResponse': TypeInfo(TypeOf.Class, create:() => RatingReviewResponse()),
    'CustomFieldValueResponse': TypeInfo(TypeOf.Class, create:() => CustomFieldValueResponse()),
    'CustomFieldConfigData': TypeInfo(TypeOf.Class, create:() => CustomFieldConfigData()),
    'List<CustomFieldValueResponse>': TypeInfo(TypeOf.Class, create:() => <CustomFieldValueResponse>[]),
    'CodeLockSystemType': TypeInfo(TypeOf.Enum, enumValues:CodeLockSystemType.values),
    'CompanyBookingSettings': TypeInfo(TypeOf.Class, create:() => CompanyBookingSettings()),
    'CompanySystemSettings': TypeInfo(TypeOf.Class, create:() => CompanySystemSettings()),
    'CompanyWidgetSettings': TypeInfo(TypeOf.Class, create:() => CompanyWidgetSettings()),
    'HomepageSettingsResponse': TypeInfo(TypeOf.Class, create:() => HomepageSettingsResponse()),
    'CompanyRatingSummary': TypeInfo(TypeOf.Class, create:() => CompanyRatingSummary()),
    'IBaseModelCreated': TypeInfo(TypeOf.Interface),
    'IBaseModelUpdated': TypeInfo(TypeOf.Interface),
    'ICustomFieldTable': TypeInfo(TypeOf.Interface),
    'IUser': TypeInfo(TypeOf.Interface),
    'CompanyQueryResponse': TypeInfo(TypeOf.Class, create:() => CompanyQueryResponse()),
    'List<RatingReviewResponse>': TypeInfo(TypeOf.Class, create:() => <RatingReviewResponse>[]),
    'List<CustomFieldConfigData>': TypeInfo(TypeOf.Class, create:() => <CustomFieldConfigData>[]),
    'QueryResponse<CompanyQueryResponse>': TypeInfo(TypeOf.Class, create:() => QueryResponse<CompanyQueryResponse>()),
    'SuperAdminCompanyQuery': TypeInfo(TypeOf.Class, create:() => SuperAdminCompanyQuery()),
    'List<CompanyQueryResponse>': TypeInfo(TypeOf.Class, create:() => <CompanyQueryResponse>[]),
});