BokaMera.API.Host

<back to all web services

ServicePricesQuery

Requires Authentication
Requires any of the roles:bookingsupplier-administrator-write, bookingsupplier-administrator-read, superadmin
The following routes are available for this service:
GET/services/pricesGet all prices for all servicesGet all prices for all services
import 'package:servicestack/servicestack.dart';

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

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

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

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

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

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

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

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

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

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

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

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

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

class DayOfWeekDto implements IConvertible
{
    int? DayOfWeekId;
    int? DotNetDayOfWeekId;
    String? DayOfWeek;

    DayOfWeekDto({this.DayOfWeekId,this.DotNetDayOfWeekId,this.DayOfWeek});
    DayOfWeekDto.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'DayOfWeekId': DayOfWeekId,
        'DotNetDayOfWeekId': DotNetDayOfWeekId,
        'DayOfWeek': DayOfWeek
    };

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

class GroupBookingSettings implements IConvertible
{
    bool? Active;
    int? Min;
    int? Max;

    GroupBookingSettings({this.Active,this.Min,this.Max});
    GroupBookingSettings.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'Active': Active,
        'Min': Min,
        'Max': Max
    };

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

class MultipleResourceSettings implements IConvertible
{
    bool? Active;
    int? Min;
    int? Max;

    MultipleResourceSettings({this.Active,this.Min,this.Max});
    MultipleResourceSettings.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'Active': Active,
        'Min': Min,
        'Max': Max
    };

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

class ServiceInfoResponse implements IConvertible
{
    int? Id;
    String? Name;
    String? Description;
    Uri? ImageUrl;
    int? LengthInMinutes;
    int? MaxNumberOfSpotsPerBooking;
    GroupBookingSettings? GroupBooking;
    MultipleResourceSettings? MultipleResource;
    bool? IsGroupBooking;
    bool? IsPaymentEnabled;

    ServiceInfoResponse({this.Id,this.Name,this.Description,this.ImageUrl,this.LengthInMinutes,this.MaxNumberOfSpotsPerBooking,this.GroupBooking,this.MultipleResource,this.IsGroupBooking,this.IsPaymentEnabled});
    ServiceInfoResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        Description = json['Description'];
        ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
        LengthInMinutes = json['LengthInMinutes'];
        MaxNumberOfSpotsPerBooking = json['MaxNumberOfSpotsPerBooking'];
        GroupBooking = JsonConverters.fromJson(json['GroupBooking'],'GroupBookingSettings',context!);
        MultipleResource = JsonConverters.fromJson(json['MultipleResource'],'MultipleResourceSettings',context!);
        IsGroupBooking = json['IsGroupBooking'];
        IsPaymentEnabled = json['IsPaymentEnabled'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Description': Description,
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!),
        'LengthInMinutes': LengthInMinutes,
        'MaxNumberOfSpotsPerBooking': MaxNumberOfSpotsPerBooking,
        'GroupBooking': JsonConverters.toJson(GroupBooking,'GroupBookingSettings',context!),
        'MultipleResource': JsonConverters.toJson(MultipleResource,'MultipleResourceSettings',context!),
        'IsGroupBooking': IsGroupBooking,
        'IsPaymentEnabled': IsPaymentEnabled
    };

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

class ServicePriceResponse implements IConvertible
{
    /**
    * The company id
    */
    // @ApiMember(Description="The company id")
    String? CompanyId;

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

    /**
    * The service id
    */
    // @ApiMember(Description="The service id")
    int? ServiceId;

    /**
    * The price
    */
    // @ApiMember(Description="The price")
    double? Price;

    /**
    * The price calculation type id, 1 = Normal, price is for the service total duration, 2 = Price is per minute, 3 = Price is per hour, 4= Price is per day
    */
    // @ApiMember(Description="The price calculation type id, 1 = Normal, price is for the service total duration, 2 = Price is per minute, 3 = Price is per hour, 4= Price is per day")
    int? CalculationTypeId;

    /**
    * The price currency
    */
    // @ApiMember(Description="The price currency")
    String? CurrencyId;

    /**
    * The price sign
    */
    // @ApiMember(Description="The price sign")
    String? PriceSign;

    /**
    * The price VAT in percent
    */
    // @ApiMember(Description="The price VAT in percent")
    double? VAT;

    /**
    * The price category if price has a category
    */
    // @ApiMember(Description="The price category if price has a category")
    String? Category;

    /**
    * The price text to display
    */
    // @ApiMember(Description="The price text to display")
    String? PriceText;

    /**
    * The valid from date for the price.
    */
    // @ApiMember(Description="The valid from date for the price.")
    DateTime? From;

    /**
    * The valid to date for the price.
    */
    // @ApiMember(Description="The valid to date for the price.")
    DateTime? To;

    /**
    * If the price is only valid for specific days in week add a comma separated list of which days this day price belongs to, 1 = Monday .. 7 = Sunday. All old days connected will be removed on update.
    */
    // @ApiMember(Description="If the price is only valid for specific days in week add a comma separated list of which days this day price belongs to, 1 = Monday .. 7 = Sunday. All old days connected will be removed on update.")
    List<DayOfWeekDto>? DaysOfWeek;

    /**
    * If the price is only valid for specific days in week add a comma separated list of which days this day price belongs to, 1 = Monday .. 7 = Sunday. All old days connected will be removed on update.
    */
    // @ApiMember(Description="If the price is only valid for specific days in week add a comma separated list of which days this day price belongs to, 1 = Monday .. 7 = Sunday. All old days connected will be removed on update.")
    Duration? FromTime;

    /**
    * If the price is only valid for a specific time span during a time of day enter the FromTime and ToTime parameters.
    */
    // @ApiMember(Description="If the price is only valid for a specific time span during a time of day enter the FromTime and ToTime parameters.")
    Duration? ToTime;

    ServiceInfoResponse? Service;
    /**
    * If the price is only valid for a specific time span
    */
    // @ApiMember(Description="If the price is only valid for a specific time span")
    bool? IsTimeSpecific;

    /**
    * If the price is only valid for specific days of week
    */
    // @ApiMember(Description="If the price is only valid for specific days of week")
    bool? IsDaysOfWeekSpecific;

    /**
    * If the price is Weighted
    */
    // @ApiMember(Description="If the price is Weighted")
    bool? IsWeighted;

    ServicePriceResponse({this.CompanyId,this.Id,this.ServiceId,this.Price,this.CalculationTypeId,this.CurrencyId,this.PriceSign,this.VAT,this.Category,this.PriceText,this.From,this.To,this.DaysOfWeek,this.FromTime,this.ToTime,this.Service,this.IsTimeSpecific,this.IsDaysOfWeekSpecific,this.IsWeighted});
    ServicePriceResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        ServiceId = json['ServiceId'];
        Price = JsonConverters.toDouble(json['Price']);
        CalculationTypeId = json['CalculationTypeId'];
        CurrencyId = json['CurrencyId'];
        PriceSign = json['PriceSign'];
        VAT = JsonConverters.toDouble(json['VAT']);
        Category = json['Category'];
        PriceText = json['PriceText'];
        From = JsonConverters.fromJson(json['From'],'DateTime',context!);
        To = JsonConverters.fromJson(json['To'],'DateTime',context!);
        DaysOfWeek = JsonConverters.fromJson(json['DaysOfWeek'],'List<DayOfWeekDto>',context!);
        FromTime = JsonConverters.fromJson(json['FromTime'],'Duration',context!);
        ToTime = JsonConverters.fromJson(json['ToTime'],'Duration',context!);
        Service = JsonConverters.fromJson(json['Service'],'ServiceInfoResponse',context!);
        IsTimeSpecific = json['IsTimeSpecific'];
        IsDaysOfWeekSpecific = json['IsDaysOfWeekSpecific'];
        IsWeighted = json['IsWeighted'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'CompanyId': CompanyId,
        'Id': Id,
        'ServiceId': ServiceId,
        'Price': Price,
        'CalculationTypeId': CalculationTypeId,
        'CurrencyId': CurrencyId,
        'PriceSign': PriceSign,
        'VAT': VAT,
        'Category': Category,
        'PriceText': PriceText,
        'From': JsonConverters.toJson(From,'DateTime',context!),
        'To': JsonConverters.toJson(To,'DateTime',context!),
        'DaysOfWeek': JsonConverters.toJson(DaysOfWeek,'List<DayOfWeekDto>',context!),
        'FromTime': JsonConverters.toJson(FromTime,'Duration',context!),
        'ToTime': JsonConverters.toJson(ToTime,'Duration',context!),
        'Service': JsonConverters.toJson(Service,'ServiceInfoResponse',context!),
        'IsTimeSpecific': IsTimeSpecific,
        'IsDaysOfWeekSpecific': IsDaysOfWeekSpecific,
        'IsWeighted': IsWeighted
    };

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

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

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

enum Currency
{
    SEK,
    EUR,
}

enum ScheduleType
{
    NotDefined,
    RecurringSchedule,
    DateSchedule,
}

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

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

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

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

    BookedCustomer({this.Id,this.Firstname,this.Lastname,this.Email,this.Phone,this.FacebookUserName,this.ImageUrl,this.CorporateIdentityNumber,this.InvoiceAddress1,this.InvoiceAddress2,this.InvoiceCity,this.InvoicePostalCode,this.InvoiceCountryCode});
    BookedCustomer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Firstname = json['Firstname'];
        Lastname = json['Lastname'];
        Email = json['Email'];
        Phone = json['Phone'];
        FacebookUserName = json['FacebookUserName'];
        ImageUrl = json['ImageUrl'];
        CorporateIdentityNumber = json['CorporateIdentityNumber'];
        InvoiceAddress1 = json['InvoiceAddress1'];
        InvoiceAddress2 = json['InvoiceAddress2'];
        InvoiceCity = json['InvoiceCity'];
        InvoicePostalCode = json['InvoicePostalCode'];
        InvoiceCountryCode = json['InvoiceCountryCode'];
        return this;
    }

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

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

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

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

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

    // @Required()
    bool? Active;

    int? SortOrder;
    DateTime? ModifiedDate;

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

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

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

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

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

    // @Required()
    String? Column;

    // @Required()
    String? DataType;

    // @Required()
    String? Description;

    // @Required()
    bool? Active;

    DateTime? ModifiedDate;
    int? Id;

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? RegExCode;

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

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

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

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

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

class 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 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 ResourceType extends BaseModel implements IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    bool? SelectableByUser;

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

    // @Required()
    String? CompanyId;

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

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

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    DateTime? ModifiedDate;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    // @Required()
    int? AccessKeyTypeId;

    // @Required()
    String? Value;

    // @Required()
    String? CustomerId;

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

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

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

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

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

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

    // @Required()
    String? Id;

    // @Required()
    String? OwnerId;

    // @Required()
    String? ReferenceType;

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

    // @Required()
    DateTime? Created;

    DateTime? ModifiedDate;

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

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

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

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

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

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

    // @Required()
    String? Comments;

    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    String? ImageUrl;
    DateTime? ModifiedDate;

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

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

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

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

enum CustomerType
{
    Person,
    Business,
}

class Customer implements IConvertible
{
    String? City;
    String? CountryCode;
    String? IdentityNumber;
    String? Email;
    String? FirstName;
    String? LastName;
    String? Phone;
    String? PostalCode;
    String? Street;
    String? Reference;
    CustomerType? Type;

    Customer({this.City,this.CountryCode,this.IdentityNumber,this.Email,this.FirstName,this.LastName,this.Phone,this.PostalCode,this.Street,this.Reference,this.Type});
    Customer.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        City = json['City'];
        CountryCode = json['CountryCode'];
        IdentityNumber = json['IdentityNumber'];
        Email = json['Email'];
        FirstName = json['FirstName'];
        LastName = json['LastName'];
        Phone = json['Phone'];
        PostalCode = json['PostalCode'];
        Street = json['Street'];
        Reference = json['Reference'];
        Type = JsonConverters.fromJson(json['Type'],'CustomerType',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'City': City,
        'CountryCode': CountryCode,
        'IdentityNumber': IdentityNumber,
        'Email': Email,
        'FirstName': FirstName,
        'LastName': LastName,
        'Phone': Phone,
        'PostalCode': PostalCode,
        'Street': Street,
        'Reference': Reference,
        'Type': JsonConverters.toJson(Type,'CustomerType',context!)
    };

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

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

    // @Required()
    int? BookingId;

    // @Required()
    int? ExceptionId;

    bool? CalendarSync;
    String? CalendarId;
    bool? IsExceptionDeleted;
    DateTime? ModifiedDate;
    int? Id;

    CalendarExport({this.CompanyId,this.BookingId,this.ExceptionId,this.CalendarSync,this.CalendarId,this.IsExceptionDeleted,this.ModifiedDate,this.Id});
    CalendarExport.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

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

    // @Required()
    String? Description;

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

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

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

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

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

class BookingLog extends BaseModel implements IConvertible
{
    // @References(typeof(BookingLogEventType))
    int? EventTypeId;

    BookingLogEventType? EventType;
    // @Required()
    String? CompanyId;

    // @Required()
    int? BookingId;

    int? Id;
    String? Comments;
    String? UserId;
    // @Required()
    DateTime? Created;

    DateTime? ModifiedDate;

    BookingLog({this.EventTypeId,this.EventType,this.CompanyId,this.BookingId,this.Id,this.Comments,this.UserId,this.Created,this.ModifiedDate});
    BookingLog.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        EventTypeId = json['EventTypeId'];
        EventType = JsonConverters.fromJson(json['EventType'],'BookingLogEventType',context!);
        CompanyId = json['CompanyId'];
        BookingId = json['BookingId'];
        Id = json['Id'];
        Comments = json['Comments'];
        UserId = json['UserId'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'EventTypeId': EventTypeId,
        'EventType': JsonConverters.toJson(EventType,'BookingLogEventType',context!),
        'CompanyId': CompanyId,
        'BookingId': BookingId,
        'Id': Id,
        'Comments': Comments,
        'UserId': UserId,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

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

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

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

    String? PaymentReferenceId;
    int? PaymentProviderId;
    String? OrderItemReferenceId;
    double? Amount;
    double? VAT;
    double? AmountCredited;
    String? Comments;
    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

    DateTime? ModifiedDate;

    PaymentLog({this.CurrencyId,this.CurrencyInfo,this.CompanyId,this.Id,this.BookingId,this.PaymentReferenceId,this.PaymentProviderId,this.OrderItemReferenceId,this.Amount,this.VAT,this.AmountCredited,this.Comments,this.Created,this.Updated,this.ModifiedDate});
    PaymentLog.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CurrencyId = json['CurrencyId'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        BookingId = json['BookingId'];
        PaymentReferenceId = json['PaymentReferenceId'];
        PaymentProviderId = json['PaymentProviderId'];
        OrderItemReferenceId = json['OrderItemReferenceId'];
        Amount = JsonConverters.toDouble(json['Amount']);
        VAT = JsonConverters.toDouble(json['VAT']);
        AmountCredited = JsonConverters.toDouble(json['AmountCredited']);
        Comments = json['Comments'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CurrencyId': CurrencyId,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'BookingId': BookingId,
        'PaymentReferenceId': PaymentReferenceId,
        'PaymentProviderId': PaymentProviderId,
        'OrderItemReferenceId': OrderItemReferenceId,
        'Amount': Amount,
        'VAT': VAT,
        'AmountCredited': AmountCredited,
        'Comments': Comments,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

class PaymentDetails extends BaseModel implements IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    QvicklyCheckoutResponse? QvicklyCheckoutSerialized;

    // @Ignore()
    Payson2CheckoutResponse? Payson2CheckoutSerialized;

    // @Required()
    String? CompanyId;

    // @Required()
    int? BookingId;

    // @Required()
    String? ExternalResponseData;

    // @Required()
    String? ExternalResponseReference;

    // @Required()
    int? PaymentProviderId;

    // @Required()
    bool? IsPayment;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    DateTime? UpdatedDate;

    DateTime? ModifiedDate;

    PaymentDetails({this.QvicklyCheckoutSerialized,this.Payson2CheckoutSerialized,this.CompanyId,this.BookingId,this.ExternalResponseData,this.ExternalResponseReference,this.PaymentProviderId,this.IsPayment,this.CreatedDate,this.UpdatedDate,this.ModifiedDate});
    PaymentDetails.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        QvicklyCheckoutSerialized = JsonConverters.fromJson(json['QvicklyCheckoutSerialized'],'QvicklyCheckoutResponse',context!);
        Payson2CheckoutSerialized = JsonConverters.fromJson(json['Payson2CheckoutSerialized'],'Payson2CheckoutResponse',context!);
        CompanyId = json['CompanyId'];
        BookingId = json['BookingId'];
        ExternalResponseData = json['ExternalResponseData'];
        ExternalResponseReference = json['ExternalResponseReference'];
        PaymentProviderId = json['PaymentProviderId'];
        IsPayment = json['IsPayment'];
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'QvicklyCheckoutSerialized': JsonConverters.toJson(QvicklyCheckoutSerialized,'QvicklyCheckoutResponse',context!),
        'Payson2CheckoutSerialized': JsonConverters.toJson(Payson2CheckoutSerialized,'Payson2CheckoutResponse',context!),
        'CompanyId': CompanyId,
        'BookingId': BookingId,
        'ExternalResponseData': ExternalResponseData,
        'ExternalResponseReference': ExternalResponseReference,
        'PaymentProviderId': PaymentProviderId,
        'IsPayment': IsPayment,
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

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

    int? PriceId;
    Currency? CurrencyInfo;
    // @Ignore()
    String? PriceText;

    // @Ignore()
    List<AppliedRebateCodes>? AppliedCodes;

    // @Ignore()
    bool? IsRebate;

    // @Required()
    String? CompanyId;

    // @Required()
    int? BookingId;

    // @Required()
    int? Quantity;

    double? Price;
    double? VAT;
    String? Category;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    // @Required()
    bool? Invoiced;

    // @Required()
    bool? OccupiesSpot;

    DateTime? ModifiedDate;
    int? Id;

    BookingPrice({this.CurrencyId,this.PriceId,this.CurrencyInfo,this.PriceText,this.AppliedCodes,this.IsRebate,this.CompanyId,this.BookingId,this.Quantity,this.Price,this.VAT,this.Category,this.Updated,this.Created,this.Invoiced,this.OccupiesSpot,this.ModifiedDate,this.Id});
    BookingPrice.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CurrencyId = json['CurrencyId'];
        PriceId = json['PriceId'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        PriceText = json['PriceText'];
        AppliedCodes = JsonConverters.fromJson(json['AppliedCodes'],'List<AppliedRebateCodes>',context!);
        IsRebate = json['IsRebate'];
        CompanyId = json['CompanyId'];
        BookingId = json['BookingId'];
        Quantity = json['Quantity'];
        Price = JsonConverters.toDouble(json['Price']);
        VAT = JsonConverters.toDouble(json['VAT']);
        Category = json['Category'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        Invoiced = json['Invoiced'];
        OccupiesSpot = json['OccupiesSpot'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CurrencyId': CurrencyId,
        'PriceId': PriceId,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'PriceText': PriceText,
        'AppliedCodes': JsonConverters.toJson(AppliedCodes,'List<AppliedRebateCodes>',context!),
        'IsRebate': IsRebate,
        'CompanyId': CompanyId,
        'BookingId': BookingId,
        'Quantity': Quantity,
        'Price': Price,
        'VAT': VAT,
        'Category': Category,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'Invoiced': Invoiced,
        'OccupiesSpot': OccupiesSpot,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

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

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

    // @Required()
    String? Description;

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

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

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

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

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

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

    // @Required()
    String? Supplier;

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

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

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

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

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

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

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

    // @Required()
    bool? Active;

    // @Required()
    int? CodeLockSystemsId;

    // @Required()
    int? ValidBeforeMinutes;

    // @Required()
    int? ValidAfterMinutes;

    // @Required()
    bool? DeleteOldBySchedule;

    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

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

    // @Required()
    bool? SendSMSNotification;

    // @Required()
    int? EmailNotificationTime;

    // @Required()
    int? SMSNotificationTime;

    // @Required()
    String? Id;

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

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

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

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

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

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

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

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

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

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

    // @Required()
    bool? Active;

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

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

    // @Required()
    bool? EnableAPITranslation;

    // @Required()
    String? DefaultLanguage;

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

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

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? Code;

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

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? Code;

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

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? Code;

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

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? Code;

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

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

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

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

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

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

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

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

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

    // @Required()
    int? ServiceLayoutId;

    // @Required()
    int? TimeLayoutId;

    // @Required()
    int? BookingLayoutId;

    // @Required()
    String? PrimaryColor;

    // @Required()
    bool? ShowServiceImage;

    // @Required()
    bool? ShowNextAvailableTime;

    // @Required()
    bool? ShowEndTime;

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

    // @Required()
    bool? ShowRebateCodeField;

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

    // @Required()
    bool? EnableLogin;

    // @Required()
    bool? EnableDirectBooking;

    // @Required()
    bool? EnableFacebookLogin;

    // @Required()
    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.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'];
        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,
        '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;

    // @Required()
    int? LicenseTypesId;

    // @Required()
    int? LicenseItemsId;

    // @Required()
    int? NumberOfItems;

    int? Id;
    DateTime? ModifiedDate;

    LicenseTypeItem({this.Name,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'];
        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,
        'LicenseTypesId': LicenseTypesId,
        'LicenseItemsId': LicenseItemsId,
        'NumberOfItems': NumberOfItems,
        'Id': Id,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

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

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

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

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

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

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

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

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

    // @Ignore()
    bool? MonthlyPayment;

    // @Required()
    int? LicenseTypeId;

    // @Required()
    String? CountryId;

    // @Required()
    int? Price;

    DateTime? ModifiedDate;

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

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

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

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

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

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

    // @Ignore()
    int? PeriodOfNoticeDays;

    // @Ignore()
    LicenseType? NextLicenseOption;

    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    bool? ExtraLicenseOption;

    DateTime? ModifiedDate;
    int? Id;

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

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

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

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

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

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

    // @Required()
    DateTime? ValidFrom;

    // @Required()
    DateTime? ValidTo;

    // @Required()
    bool? Active;

    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    DateTime? ModifiedDate;
    String? MetaData;

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

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

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

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

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

    // @Required()
    String? Header;

    // @Required()
    String? Description;

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

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

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

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

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

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

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

    // @Ignore()
    bool? Active;

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

    // @Ignore()
    String? BookingAgreements;

    // @Ignore()
    BookingSettings? BookingSettings;

    // @Ignore()
    CompanyType? CompanyType;

    // @Ignore()
    CodeLockSetting? CodeLockSettings;

    // @Ignore()
    PaymentSetting? PaymentSettings;

    // @Ignore()
    CompanySetting? Settings;

    // @Ignore()
    HomepageWidgetSetting? WidgetSettings;

    // @Ignore()
    HomepageSetting? HomepageSettings;

    // @Ignore()
    AverageRatingScore? RatingScore;

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

    // @Ignore()
    double? Distance;

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

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

    // @Ignore()
    License? CurrentLicense;

    // @Ignore()
    bool? IsFreeAccount;

    // @Ignore()
    CultureInfo? DefaultLanguage;

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

    // @Ignore()
    double? Lon;

    // @Ignore()
    bool? IsFavorite;

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

    // @Required()
    String? OrganisationNumber;

    // @Required()
    int? StatusId;

    // @Required()
    int? CategoryId;

    // @Required()
    String? SitePath;

    // @Required()
    String? Name;

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

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

    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

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

    // @Required()
    int? CompanyOwnerId;

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

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? Color;

    // @Required()
    String? Icon;

    DateTime? ModifiedDate;
    int? Id;

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

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

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

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

class BookedResource implements IConvertible
{
    int? Id;
    String? Name;
    String? Color;
    Uri? ImageUrl;
    String? Email;
    String? MobilePhone;
    String? AccessGroup;
    bool? EmailNotification;
    bool? SMSNotification;
    bool? EmailReminder;
    bool? SMSReminder;

    BookedResource({this.Id,this.Name,this.Color,this.ImageUrl,this.Email,this.MobilePhone,this.AccessGroup,this.EmailNotification,this.SMSNotification,this.EmailReminder,this.SMSReminder});
    BookedResource.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        Name = json['Name'];
        Color = json['Color'];
        ImageUrl = JsonConverters.fromJson(json['ImageUrl'],'Uri',context!);
        Email = json['Email'];
        MobilePhone = json['MobilePhone'];
        AccessGroup = json['AccessGroup'];
        EmailNotification = json['EmailNotification'];
        SMSNotification = json['SMSNotification'];
        EmailReminder = json['EmailReminder'];
        SMSReminder = json['SMSReminder'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Color': Color,
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!),
        'Email': Email,
        'MobilePhone': MobilePhone,
        'AccessGroup': AccessGroup,
        'EmailNotification': EmailNotification,
        'SMSNotification': SMSNotification,
        'EmailReminder': EmailReminder,
        'SMSReminder': SMSReminder
    };

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

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

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

    /**
    * The resources inside resource type
    */
    // @ApiMember(Description="The resources inside resource type")
    List<BookedResource>? Resources;

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

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

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Resources': JsonConverters.toJson(Resources,'List<BookedResource>',context!)
    };

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

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

    // @Required()
    String? Id;

    // @Required()
    int? PriceId;

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

    // @Required()
    DateTime? CreatedDate;

    DateTime? ModifiedDate;

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

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

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

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

class Booking extends BaseModel implements IInterval, ICustomFieldTable, IBaseModelUpdated, IBaseModelCreated, IConvertible
{
    // @Ignore()
    Customer? Customer;

    // @Ignore()
    Service? Service;

    // @Ignore()
    CalendarExport? CalendarExport;

    // @Ignore()
    List<BookingLog>? Log;

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

    // @Ignore()
    List<PaymentDetails>? CheckoutLogs;

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

    // @Ignore()
    BookingStatusEnum? Status;

    // @Ignore()
    bool? isReserved;

    // @Ignore()
    String? StatusName;

    // @Ignore()
    Company? Company;

    // @References(typeof(Currency))
    String? CurrencyId;

    Currency? CurrencyInfo;
    BookingStatus? BookingStatus;
    // @Ignore()
    double? TotalPrice;

    // @Ignore()
    int? TotalSpots;

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

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

    // @Ignore()
    List<BookedResourceType>? BookedResources;

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

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

    // @Ignore()
    bool? Active;

    // @Ignore()
    DateTime? LastTimeToUnBook;

    // @Ignore()
    List<PriceMapping>? PriceMappings;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    String? CompanyId;

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

    // @Required()
    int? ServiceId;

    // @Required()
    int? StatusId;

    DateTime? UnbookedOn;
    String? UnbookedComments;
    String? BookedComments;
    // @Required()
    String? BookedBy;

    String? UnBookedBy;
    // @Required()
    bool? SendSmsReminder;

    // @Required()
    bool? SendEmailReminder;

    // @Required()
    bool? SendSmsConfirmation;

    String? RebateCode;
    String? Comments;
    String? IpAddress;
    // @Required()
    int? NumberOfBookedSpots;

    String? CommentsToCustomer;
    DateTime? PaymentExpiration;
    double? PriceVat;
    // @Required()
    bool? SendEmailConfirmation;

    String? CancellationCode;
    DateTime? ModifiedDate;
    String? RatingCode;
    String? TextField1;
    String? TextField2;
    String? TextField3;
    String? TextField4;
    String? TextField5;
    String? TextField6;
    String? TextField7;
    String? TextField8;
    String? TextField9;
    String? TextField10;
    String? TextField11;
    String? TextField12;
    String? TextField13;
    String? TextField14;
    String? TextField15;
    String? TextField16;
    String? TextField17;
    String? TextField18;
    String? TextField19;
    String? TextField20;
    // @Required()
    DateTime? From;

    // @Required()
    DateTime? To;

    Booking({this.Customer,this.Service,this.CalendarExport,this.Log,this.PaymentLog,this.CheckoutLogs,this.Prices,this.Status,this.isReserved,this.StatusName,this.Company,this.CurrencyId,this.CurrencyInfo,this.BookingStatus,this.TotalPrice,this.TotalSpots,this.Resources,this.ExternalReferences,this.BookedResources,this.CustomFieldsConfig,this.CustomFieldsData,this.Active,this.LastTimeToUnBook,this.PriceMappings,this.UpdatedDate,this.CreatedDate,this.CompanyId,this.Id,this.CustomerId,this.ServiceId,this.StatusId,this.UnbookedOn,this.UnbookedComments,this.BookedComments,this.BookedBy,this.UnBookedBy,this.SendSmsReminder,this.SendEmailReminder,this.SendSmsConfirmation,this.RebateCode,this.Comments,this.IpAddress,this.NumberOfBookedSpots,this.CommentsToCustomer,this.PaymentExpiration,this.PriceVat,this.SendEmailConfirmation,this.CancellationCode,this.ModifiedDate,this.RatingCode,this.TextField1,this.TextField2,this.TextField3,this.TextField4,this.TextField5,this.TextField6,this.TextField7,this.TextField8,this.TextField9,this.TextField10,this.TextField11,this.TextField12,this.TextField13,this.TextField14,this.TextField15,this.TextField16,this.TextField17,this.TextField18,this.TextField19,this.TextField20,this.From,this.To});
    Booking.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Customer = JsonConverters.fromJson(json['Customer'],'Customer',context!);
        Service = JsonConverters.fromJson(json['Service'],'Service',context!);
        CalendarExport = JsonConverters.fromJson(json['CalendarExport'],'CalendarExport',context!);
        Log = JsonConverters.fromJson(json['Log'],'List<BookingLog>',context!);
        PaymentLog = JsonConverters.fromJson(json['PaymentLog'],'List<PaymentLog>',context!);
        CheckoutLogs = JsonConverters.fromJson(json['CheckoutLogs'],'List<PaymentDetails>',context!);
        Prices = JsonConverters.fromJson(json['Prices'],'List<BookingPrice>',context!);
        Status = JsonConverters.fromJson(json['Status'],'BookingStatusEnum',context!);
        isReserved = json['isReserved'];
        StatusName = json['StatusName'];
        Company = JsonConverters.fromJson(json['Company'],'Company',context!);
        CurrencyId = json['CurrencyId'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        BookingStatus = JsonConverters.fromJson(json['BookingStatus'],'BookingStatus',context!);
        TotalPrice = JsonConverters.toDouble(json['TotalPrice']);
        TotalSpots = json['TotalSpots'];
        Resources = JsonConverters.fromJson(json['Resources'],'List<Resource>',context!);
        ExternalReferences = JsonConverters.fromJson(json['ExternalReferences'],'List<ExternalReference>',context!);
        BookedResources = JsonConverters.fromJson(json['BookedResources'],'List<BookedResourceType>',context!);
        CustomFieldsConfig = JsonConverters.fromJson(json['CustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsData = JsonConverters.fromJson(json['CustomFieldsData'],'List<CustomFieldDataResponse>',context!);
        Active = json['Active'];
        LastTimeToUnBook = JsonConverters.fromJson(json['LastTimeToUnBook'],'DateTime',context!);
        PriceMappings = JsonConverters.fromJson(json['PriceMappings'],'List<PriceMapping>',context!);
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        CustomerId = json['CustomerId'];
        ServiceId = json['ServiceId'];
        StatusId = json['StatusId'];
        UnbookedOn = JsonConverters.fromJson(json['UnbookedOn'],'DateTime',context!);
        UnbookedComments = json['UnbookedComments'];
        BookedComments = json['BookedComments'];
        BookedBy = json['BookedBy'];
        UnBookedBy = json['UnBookedBy'];
        SendSmsReminder = json['SendSmsReminder'];
        SendEmailReminder = json['SendEmailReminder'];
        SendSmsConfirmation = json['SendSmsConfirmation'];
        RebateCode = json['RebateCode'];
        Comments = json['Comments'];
        IpAddress = json['IpAddress'];
        NumberOfBookedSpots = json['NumberOfBookedSpots'];
        CommentsToCustomer = json['CommentsToCustomer'];
        PaymentExpiration = JsonConverters.fromJson(json['PaymentExpiration'],'DateTime',context!);
        PriceVat = JsonConverters.toDouble(json['PriceVat']);
        SendEmailConfirmation = json['SendEmailConfirmation'];
        CancellationCode = json['CancellationCode'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        RatingCode = json['RatingCode'];
        TextField1 = json['TextField1'];
        TextField2 = json['TextField2'];
        TextField3 = json['TextField3'];
        TextField4 = json['TextField4'];
        TextField5 = json['TextField5'];
        TextField6 = json['TextField6'];
        TextField7 = json['TextField7'];
        TextField8 = json['TextField8'];
        TextField9 = json['TextField9'];
        TextField10 = json['TextField10'];
        TextField11 = json['TextField11'];
        TextField12 = json['TextField12'];
        TextField13 = json['TextField13'];
        TextField14 = json['TextField14'];
        TextField15 = json['TextField15'];
        TextField16 = json['TextField16'];
        TextField17 = json['TextField17'];
        TextField18 = json['TextField18'];
        TextField19 = json['TextField19'];
        TextField20 = json['TextField20'];
        From = JsonConverters.fromJson(json['From'],'DateTime',context!);
        To = JsonConverters.fromJson(json['To'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Customer': JsonConverters.toJson(Customer,'Customer',context!),
        'Service': JsonConverters.toJson(Service,'Service',context!),
        'CalendarExport': JsonConverters.toJson(CalendarExport,'CalendarExport',context!),
        'Log': JsonConverters.toJson(Log,'List<BookingLog>',context!),
        'PaymentLog': JsonConverters.toJson(PaymentLog,'List<PaymentLog>',context!),
        'CheckoutLogs': JsonConverters.toJson(CheckoutLogs,'List<PaymentDetails>',context!),
        'Prices': JsonConverters.toJson(Prices,'List<BookingPrice>',context!),
        'Status': JsonConverters.toJson(Status,'BookingStatusEnum',context!),
        'isReserved': isReserved,
        'StatusName': StatusName,
        'Company': JsonConverters.toJson(Company,'Company',context!),
        'CurrencyId': CurrencyId,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'BookingStatus': JsonConverters.toJson(BookingStatus,'BookingStatus',context!),
        'TotalPrice': TotalPrice,
        'TotalSpots': TotalSpots,
        'Resources': JsonConverters.toJson(Resources,'List<Resource>',context!),
        'ExternalReferences': JsonConverters.toJson(ExternalReferences,'List<ExternalReference>',context!),
        'BookedResources': JsonConverters.toJson(BookedResources,'List<BookedResourceType>',context!),
        'CustomFieldsConfig': JsonConverters.toJson(CustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsData': JsonConverters.toJson(CustomFieldsData,'List<CustomFieldDataResponse>',context!),
        'Active': Active,
        'LastTimeToUnBook': JsonConverters.toJson(LastTimeToUnBook,'DateTime',context!),
        'PriceMappings': JsonConverters.toJson(PriceMappings,'List<PriceMapping>',context!),
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'CustomerId': CustomerId,
        'ServiceId': ServiceId,
        'StatusId': StatusId,
        'UnbookedOn': JsonConverters.toJson(UnbookedOn,'DateTime',context!),
        'UnbookedComments': UnbookedComments,
        'BookedComments': BookedComments,
        'BookedBy': BookedBy,
        'UnBookedBy': UnBookedBy,
        'SendSmsReminder': SendSmsReminder,
        'SendEmailReminder': SendEmailReminder,
        'SendSmsConfirmation': SendSmsConfirmation,
        'RebateCode': RebateCode,
        'Comments': Comments,
        'IpAddress': IpAddress,
        'NumberOfBookedSpots': NumberOfBookedSpots,
        'CommentsToCustomer': CommentsToCustomer,
        'PaymentExpiration': JsonConverters.toJson(PaymentExpiration,'DateTime',context!),
        'PriceVat': PriceVat,
        'SendEmailConfirmation': SendEmailConfirmation,
        'CancellationCode': CancellationCode,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'RatingCode': RatingCode,
        'TextField1': TextField1,
        'TextField2': TextField2,
        'TextField3': TextField3,
        'TextField4': TextField4,
        'TextField5': TextField5,
        'TextField6': TextField6,
        'TextField7': TextField7,
        'TextField8': TextField8,
        'TextField9': TextField9,
        'TextField10': TextField10,
        'TextField11': TextField11,
        'TextField12': TextField12,
        'TextField13': TextField13,
        'TextField14': TextField14,
        'TextField15': TextField15,
        'TextField16': TextField16,
        'TextField17': TextField17,
        'TextField18': TextField18,
        'TextField19': TextField19,
        'TextField20': TextField20,
        'From': JsonConverters.toJson(From,'DateTime',context!),
        'To': JsonConverters.toJson(To,'DateTime',context!)
    });

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

class Service extends BaseModel implements ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    List<ResourceType>? ResourceTypes;

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

    // @Ignore()
    TotalPriceInformation? TotalPrice;

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

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

    // @Ignore()
    bool? IsGroupBooking;

    // @Ignore()
    bool? IsMultipleResource;

    // @Ignore()
    BookingSettings? Settings;

    // @Ignore()
    PaymentSetting? PaymentSetting;

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

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

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

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

    // @Ignore()
    List<ISchedule>? Schedules;

    // @Ignore()
    List<Booking>? CustomerActiveBookings;

    // @Ignore()
    ScheduleType? ScheduleType;

    // @Ignore()
    Duration? LastTimeToUnbookThreshold;

    // @Ignore()
    Duration? LastTimeToBookThreshold;

    // @Ignore()
    AverageRatingScore? RatingScore;

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

    // @Required()
    String? CompanyId;

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

    // @Required()
    String? Description;

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

    // @Required()
    int? SortOrder;

    // @Required()
    int? PauseAfterBooking;

    // @Required()
    int? UnbookBeforeDays;

    // @Required()
    int? UnbookBeforeHours;

    // @Required()
    int? UnbookBeforeMinutes;

    // @Required()
    int? BookBeforeDays;

    // @Required()
    int? BookBeforeHours;

    // @Required()
    int? BookBeforeMinutes;

    int? Duration;
    int? DurationTypeId;
    int? MinDuration;
    int? MaxDuration;
    int? DurationInterval;
    int? TotalSpots;
    String? ImageUrl;
    // @Required()
    int? ScheduleTypeId;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    bool? OnlyVisibleByAdmin;

    // @Required()
    int? MaxNumberOfSpotsPerBooking;

    // @Required()
    int? MinNumberOfResourcesToBook;

    // @Required()
    int? MaxNumberOfResourcesToBook;

    // @Required()
    bool? IsPaymentEnabled;

    // @Required()
    int? MaxPaymentTime;

    // @Required()
    bool? LockSpotsToBooking;

    // @Required()
    bool? EnableBookingQueue;

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

    // @Required()
    bool? EnableCodeLockSync;

    // @Required()
    bool? EnableCustomerManualPayment;

    int? PriceViewTypeId;
    String? TextField1;
    String? TextField2;
    String? TextField3;
    String? TextField4;
    String? TextField5;
    String? TextField6;
    String? TextField7;
    String? TextField8;
    String? TextField9;
    String? TextField10;
    String? TextField11;
    String? TextField12;
    String? TextField13;
    String? TextField14;
    String? TextField15;
    String? TextField16;
    String? TextField17;
    String? TextField18;
    String? TextField19;
    String? TextField20;

    Service({this.ResourceTypes,this.Resources,this.TotalPrice,this.Prices,this.BookingStatusOptions,this.IsGroupBooking,this.IsMultipleResource,this.Settings,this.PaymentSetting,this.BookingCustomFieldsConfig,this.CustomerCustomFieldsConfig,this.CustomFieldsConfig,this.CustomFieldsData,this.Schedules,this.CustomerActiveBookings,this.ScheduleType,this.LastTimeToUnbookThreshold,this.LastTimeToBookThreshold,this.RatingScore,this.Ratings,this.CompanyId,this.Id,this.Name,this.Description,this.Group,this.Active,this.SortOrder,this.PauseAfterBooking,this.UnbookBeforeDays,this.UnbookBeforeHours,this.UnbookBeforeMinutes,this.BookBeforeDays,this.BookBeforeHours,this.BookBeforeMinutes,this.Duration,this.DurationTypeId,this.MinDuration,this.MaxDuration,this.DurationInterval,this.TotalSpots,this.ImageUrl,this.ScheduleTypeId,this.UpdatedDate,this.CreatedDate,this.OnlyVisibleByAdmin,this.MaxNumberOfSpotsPerBooking,this.MinNumberOfResourcesToBook,this.MaxNumberOfResourcesToBook,this.IsPaymentEnabled,this.MaxPaymentTime,this.LockSpotsToBooking,this.EnableBookingQueue,this.ModifiedDate,this.BookingStatusId,this.EnableCodeLockSync,this.EnableCustomerManualPayment,this.PriceViewTypeId,this.TextField1,this.TextField2,this.TextField3,this.TextField4,this.TextField5,this.TextField6,this.TextField7,this.TextField8,this.TextField9,this.TextField10,this.TextField11,this.TextField12,this.TextField13,this.TextField14,this.TextField15,this.TextField16,this.TextField17,this.TextField18,this.TextField19,this.TextField20});
    Service.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        ResourceTypes = JsonConverters.fromJson(json['ResourceTypes'],'List<ResourceType>',context!);
        Resources = JsonConverters.fromJson(json['Resources'],'List<Resource>',context!);
        TotalPrice = JsonConverters.fromJson(json['TotalPrice'],'TotalPriceInformation',context!);
        Prices = JsonConverters.fromJson(json['Prices'],'List<ServicePrice>',context!);
        BookingStatusOptions = JsonConverters.fromJson(json['BookingStatusOptions'],'List<BookingStatusOptions>',context!);
        IsGroupBooking = json['IsGroupBooking'];
        IsMultipleResource = json['IsMultipleResource'];
        Settings = JsonConverters.fromJson(json['Settings'],'BookingSettings',context!);
        PaymentSetting = JsonConverters.fromJson(json['PaymentSetting'],'PaymentSetting',context!);
        BookingCustomFieldsConfig = JsonConverters.fromJson(json['BookingCustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomerCustomFieldsConfig = JsonConverters.fromJson(json['CustomerCustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsConfig = JsonConverters.fromJson(json['CustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsData = JsonConverters.fromJson(json['CustomFieldsData'],'List<CustomFieldDataResponse>',context!);
        Schedules = JsonConverters.fromJson(json['Schedules'],'List<ISchedule>',context!);
        CustomerActiveBookings = JsonConverters.fromJson(json['CustomerActiveBookings'],'List<Booking>',context!);
        ScheduleType = JsonConverters.fromJson(json['ScheduleType'],'ScheduleType',context!);
        LastTimeToUnbookThreshold = JsonConverters.fromJson(json['LastTimeToUnbookThreshold'],'Duration',context!);
        LastTimeToBookThreshold = JsonConverters.fromJson(json['LastTimeToBookThreshold'],'Duration',context!);
        RatingScore = JsonConverters.fromJson(json['RatingScore'],'AverageRatingScore',context!);
        Ratings = JsonConverters.fromJson(json['Ratings'],'List<Rating>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Name = json['Name'];
        Description = json['Description'];
        Group = json['Group'];
        Active = json['Active'];
        SortOrder = json['SortOrder'];
        PauseAfterBooking = json['PauseAfterBooking'];
        UnbookBeforeDays = json['UnbookBeforeDays'];
        UnbookBeforeHours = json['UnbookBeforeHours'];
        UnbookBeforeMinutes = json['UnbookBeforeMinutes'];
        BookBeforeDays = json['BookBeforeDays'];
        BookBeforeHours = json['BookBeforeHours'];
        BookBeforeMinutes = json['BookBeforeMinutes'];
        Duration = json['Duration'];
        DurationTypeId = json['DurationTypeId'];
        MinDuration = json['MinDuration'];
        MaxDuration = json['MaxDuration'];
        DurationInterval = json['DurationInterval'];
        TotalSpots = json['TotalSpots'];
        ImageUrl = json['ImageUrl'];
        ScheduleTypeId = json['ScheduleTypeId'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        OnlyVisibleByAdmin = json['OnlyVisibleByAdmin'];
        MaxNumberOfSpotsPerBooking = json['MaxNumberOfSpotsPerBooking'];
        MinNumberOfResourcesToBook = json['MinNumberOfResourcesToBook'];
        MaxNumberOfResourcesToBook = json['MaxNumberOfResourcesToBook'];
        IsPaymentEnabled = json['IsPaymentEnabled'];
        MaxPaymentTime = json['MaxPaymentTime'];
        LockSpotsToBooking = json['LockSpotsToBooking'];
        EnableBookingQueue = json['EnableBookingQueue'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        BookingStatusId = json['BookingStatusId'];
        EnableCodeLockSync = json['EnableCodeLockSync'];
        EnableCustomerManualPayment = json['EnableCustomerManualPayment'];
        PriceViewTypeId = json['PriceViewTypeId'];
        TextField1 = json['TextField1'];
        TextField2 = json['TextField2'];
        TextField3 = json['TextField3'];
        TextField4 = json['TextField4'];
        TextField5 = json['TextField5'];
        TextField6 = json['TextField6'];
        TextField7 = json['TextField7'];
        TextField8 = json['TextField8'];
        TextField9 = json['TextField9'];
        TextField10 = json['TextField10'];
        TextField11 = json['TextField11'];
        TextField12 = json['TextField12'];
        TextField13 = json['TextField13'];
        TextField14 = json['TextField14'];
        TextField15 = json['TextField15'];
        TextField16 = json['TextField16'];
        TextField17 = json['TextField17'];
        TextField18 = json['TextField18'];
        TextField19 = json['TextField19'];
        TextField20 = json['TextField20'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'ResourceTypes': JsonConverters.toJson(ResourceTypes,'List<ResourceType>',context!),
        'Resources': JsonConverters.toJson(Resources,'List<Resource>',context!),
        'TotalPrice': JsonConverters.toJson(TotalPrice,'TotalPriceInformation',context!),
        'Prices': JsonConverters.toJson(Prices,'List<ServicePrice>',context!),
        'BookingStatusOptions': JsonConverters.toJson(BookingStatusOptions,'List<BookingStatusOptions>',context!),
        'IsGroupBooking': IsGroupBooking,
        'IsMultipleResource': IsMultipleResource,
        'Settings': JsonConverters.toJson(Settings,'BookingSettings',context!),
        'PaymentSetting': JsonConverters.toJson(PaymentSetting,'PaymentSetting',context!),
        'BookingCustomFieldsConfig': JsonConverters.toJson(BookingCustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomerCustomFieldsConfig': JsonConverters.toJson(CustomerCustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsConfig': JsonConverters.toJson(CustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsData': JsonConverters.toJson(CustomFieldsData,'List<CustomFieldDataResponse>',context!),
        'Schedules': JsonConverters.toJson(Schedules,'List<ISchedule>',context!),
        'CustomerActiveBookings': JsonConverters.toJson(CustomerActiveBookings,'List<Booking>',context!),
        'ScheduleType': JsonConverters.toJson(ScheduleType,'ScheduleType',context!),
        'LastTimeToUnbookThreshold': JsonConverters.toJson(LastTimeToUnbookThreshold,'Duration',context!),
        'LastTimeToBookThreshold': JsonConverters.toJson(LastTimeToBookThreshold,'Duration',context!),
        'RatingScore': JsonConverters.toJson(RatingScore,'AverageRatingScore',context!),
        'Ratings': JsonConverters.toJson(Ratings,'List<Rating>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'Name': Name,
        'Description': Description,
        'Group': Group,
        'Active': Active,
        'SortOrder': SortOrder,
        'PauseAfterBooking': PauseAfterBooking,
        'UnbookBeforeDays': UnbookBeforeDays,
        'UnbookBeforeHours': UnbookBeforeHours,
        'UnbookBeforeMinutes': UnbookBeforeMinutes,
        'BookBeforeDays': BookBeforeDays,
        'BookBeforeHours': BookBeforeHours,
        'BookBeforeMinutes': BookBeforeMinutes,
        'Duration': Duration,
        'DurationTypeId': DurationTypeId,
        'MinDuration': MinDuration,
        'MaxDuration': MaxDuration,
        'DurationInterval': DurationInterval,
        'TotalSpots': TotalSpots,
        'ImageUrl': ImageUrl,
        'ScheduleTypeId': ScheduleTypeId,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'OnlyVisibleByAdmin': OnlyVisibleByAdmin,
        'MaxNumberOfSpotsPerBooking': MaxNumberOfSpotsPerBooking,
        'MinNumberOfResourcesToBook': MinNumberOfResourcesToBook,
        'MaxNumberOfResourcesToBook': MaxNumberOfResourcesToBook,
        'IsPaymentEnabled': IsPaymentEnabled,
        'MaxPaymentTime': MaxPaymentTime,
        'LockSpotsToBooking': LockSpotsToBooking,
        'EnableBookingQueue': EnableBookingQueue,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'BookingStatusId': BookingStatusId,
        'EnableCodeLockSync': EnableCodeLockSync,
        'EnableCustomerManualPayment': EnableCustomerManualPayment,
        'PriceViewTypeId': PriceViewTypeId,
        'TextField1': TextField1,
        'TextField2': TextField2,
        'TextField3': TextField3,
        'TextField4': TextField4,
        'TextField5': TextField5,
        'TextField6': TextField6,
        'TextField7': TextField7,
        'TextField8': TextField8,
        'TextField9': TextField9,
        'TextField10': TextField10,
        'TextField11': TextField11,
        'TextField12': TextField12,
        'TextField13': TextField13,
        'TextField14': TextField14,
        'TextField15': TextField15,
        'TextField16': TextField16,
        'TextField17': TextField17,
        'TextField18': TextField18,
        'TextField19': TextField19,
        'TextField20': TextField20
    });

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

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

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

    // @Required()
    String? CompanyId;

    // @Required()
    int? ServicePriceId;

    // @Required()
    int? DayOfWeekId;

    DateTime? ModifiedDate;
    int? Id;

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

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

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

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

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

    // @Required()
    int? DayOfWeekId;

    // @Required()
    int? RebateCodeId;

    // @Required()
    String? CompanyId;

    int? Id;
    DateTime? ModifiedDate;

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

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

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

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

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

    // @Required()
    int? ServiceId;

    // @Required()
    int? RebateCodeId;

    int? Id;
    DateTime? ModifiedDate;

    RebateCodeServiceRelation({this.CompanyId,this.ServiceId,this.RebateCodeId,this.Id,this.ModifiedDate});
    RebateCodeServiceRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

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

    // @Required()
    int? PriceId;

    // @Required()
    int? RebateCodeId;

    int? Id;
    DateTime? ModifiedDate;

    RebateCodeBookingPriceRelation({this.CompanyId,this.PriceId,this.RebateCodeId,this.Id,this.ModifiedDate});
    RebateCodeBookingPriceRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

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

    // @Required()
    String? CustomerId;

    // @Required()
    int? RebateCodeId;

    int? Id;
    DateTime? ModifiedDate;

    RebateCodeCustomerRelation({this.CompanyId,this.CustomerId,this.RebateCodeId,this.Id,this.ModifiedDate});
    RebateCodeCustomerRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class DaysOfWeek extends BaseModel implements IConvertible
{
    // @Required()
    String? DayOfWeek;

    // @Required()
    String? DayOfWeekTranslation;

    bool? DayOfWeekActive;
    int? DayOfWeekSortOrder;
    DateTime? ModifiedDate;
    int? Id;

    DaysOfWeek({this.DayOfWeek,this.DayOfWeekTranslation,this.DayOfWeekActive,this.DayOfWeekSortOrder,this.ModifiedDate,this.Id});
    DaysOfWeek.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

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

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

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

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

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

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

class RebateCode extends BaseModel implements IConvertible
{
    // @References(typeof(RebateCodeType))
    int? RebateCodeTypeId;

    RebateCodeType? RebateCodeTypeInfo;
    // @References(typeof(RebateCodeStatus))
    int? RebateCodeStatusId;

    RebateCodeType? RebateCodeStatusInfo;
    // @Ignore()
    List<Service>? Services;

    List<RebateCodeDayOfWeekRelation>? RebateCodeDayOfWeekRelation;
    List<RebateCodeServiceRelation>? RebateCodeServiceRelation;
    List<RebateCodeBookingPriceRelation>? RebateCodeBookingPriceRelation;
    List<RebateCodeCustomerRelation>? RebateCodeCustomerRelation;
    // @Ignore()
    List<DaysOfWeek>? DaysOfWeek;

    // @Ignore()
    List<Customer>? Customers;

    // @Ignore()
    RebateCodeStatus? RebateCodeStatus;

    // @Ignore()
    RebateCodeType? RebateCodeType;

    // @Ignore()
    int? CurrentNumberOfUsesPerCustomer;

    // @Ignore()
    bool? IsSpecificByDayOfWeek;

    // @Ignore()
    bool? Active;

    String? CompanyId;
    // @Required()
    DateTime? ValidFrom;

    // @Required()
    DateTime? ValidTo;

    // @Required()
    String? RebateCodeSign;

    // @Required()
    int? RebateCodeValue;

    // @Required()
    int? MaxNumberOfUses;

    // @Required()
    int? MaxNumberOfUsesPerCustomer;

    // @Required()
    int? NumberOfUsesUsed;

    String? PersonalNote;
    // @Required()
    String? CreatedBy;

    // @Required()
    DateTime? Created;

    // @Required()
    String? UpdatedBy;

    // @Required()
    DateTime? Updated;

    // @Required()
    Duration? FromTime;

    // @Required()
    Duration? ToTime;

    DateTime? ModifiedDate;
    int? Id;

    RebateCode({this.RebateCodeTypeId,this.RebateCodeTypeInfo,this.RebateCodeStatusId,this.RebateCodeStatusInfo,this.Services,this.RebateCodeDayOfWeekRelation,this.RebateCodeServiceRelation,this.RebateCodeBookingPriceRelation,this.RebateCodeCustomerRelation,this.DaysOfWeek,this.Customers,this.RebateCodeStatus,this.RebateCodeType,this.CurrentNumberOfUsesPerCustomer,this.IsSpecificByDayOfWeek,this.Active,this.CompanyId,this.ValidFrom,this.ValidTo,this.RebateCodeSign,this.RebateCodeValue,this.MaxNumberOfUses,this.MaxNumberOfUsesPerCustomer,this.NumberOfUsesUsed,this.PersonalNote,this.CreatedBy,this.Created,this.UpdatedBy,this.Updated,this.FromTime,this.ToTime,this.ModifiedDate,this.Id});
    RebateCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        RebateCodeTypeId = json['RebateCodeTypeId'];
        RebateCodeTypeInfo = JsonConverters.fromJson(json['RebateCodeTypeInfo'],'RebateCodeType',context!);
        RebateCodeStatusId = json['RebateCodeStatusId'];
        RebateCodeStatusInfo = JsonConverters.fromJson(json['RebateCodeStatusInfo'],'RebateCodeType',context!);
        Services = JsonConverters.fromJson(json['Services'],'List<Service>',context!);
        RebateCodeDayOfWeekRelation = JsonConverters.fromJson(json['RebateCodeDayOfWeekRelation'],'List<RebateCodeDayOfWeekRelation>',context!);
        RebateCodeServiceRelation = JsonConverters.fromJson(json['RebateCodeServiceRelation'],'List<RebateCodeServiceRelation>',context!);
        RebateCodeBookingPriceRelation = JsonConverters.fromJson(json['RebateCodeBookingPriceRelation'],'List<RebateCodeBookingPriceRelation>',context!);
        RebateCodeCustomerRelation = JsonConverters.fromJson(json['RebateCodeCustomerRelation'],'List<RebateCodeCustomerRelation>',context!);
        DaysOfWeek = JsonConverters.fromJson(json['DaysOfWeek'],'List<DaysOfWeek>',context!);
        Customers = JsonConverters.fromJson(json['Customers'],'List<Customer>',context!);
        RebateCodeStatus = JsonConverters.fromJson(json['RebateCodeStatus'],'RebateCodeStatus',context!);
        RebateCodeType = JsonConverters.fromJson(json['RebateCodeType'],'RebateCodeType',context!);
        CurrentNumberOfUsesPerCustomer = json['CurrentNumberOfUsesPerCustomer'];
        IsSpecificByDayOfWeek = json['IsSpecificByDayOfWeek'];
        Active = json['Active'];
        CompanyId = json['CompanyId'];
        ValidFrom = JsonConverters.fromJson(json['ValidFrom'],'DateTime',context!);
        ValidTo = JsonConverters.fromJson(json['ValidTo'],'DateTime',context!);
        RebateCodeSign = json['RebateCodeSign'];
        RebateCodeValue = json['RebateCodeValue'];
        MaxNumberOfUses = json['MaxNumberOfUses'];
        MaxNumberOfUsesPerCustomer = json['MaxNumberOfUsesPerCustomer'];
        NumberOfUsesUsed = json['NumberOfUsesUsed'];
        PersonalNote = json['PersonalNote'];
        CreatedBy = json['CreatedBy'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        UpdatedBy = json['UpdatedBy'];
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        FromTime = JsonConverters.fromJson(json['FromTime'],'Duration',context!);
        ToTime = JsonConverters.fromJson(json['ToTime'],'Duration',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'RebateCodeTypeId': RebateCodeTypeId,
        'RebateCodeTypeInfo': JsonConverters.toJson(RebateCodeTypeInfo,'RebateCodeType',context!),
        'RebateCodeStatusId': RebateCodeStatusId,
        'RebateCodeStatusInfo': JsonConverters.toJson(RebateCodeStatusInfo,'RebateCodeType',context!),
        'Services': JsonConverters.toJson(Services,'List<Service>',context!),
        'RebateCodeDayOfWeekRelation': JsonConverters.toJson(RebateCodeDayOfWeekRelation,'List<RebateCodeDayOfWeekRelation>',context!),
        'RebateCodeServiceRelation': JsonConverters.toJson(RebateCodeServiceRelation,'List<RebateCodeServiceRelation>',context!),
        'RebateCodeBookingPriceRelation': JsonConverters.toJson(RebateCodeBookingPriceRelation,'List<RebateCodeBookingPriceRelation>',context!),
        'RebateCodeCustomerRelation': JsonConverters.toJson(RebateCodeCustomerRelation,'List<RebateCodeCustomerRelation>',context!),
        'DaysOfWeek': JsonConverters.toJson(DaysOfWeek,'List<DaysOfWeek>',context!),
        'Customers': JsonConverters.toJson(Customers,'List<Customer>',context!),
        'RebateCodeStatus': JsonConverters.toJson(RebateCodeStatus,'RebateCodeStatus',context!),
        'RebateCodeType': JsonConverters.toJson(RebateCodeType,'RebateCodeType',context!),
        'CurrentNumberOfUsesPerCustomer': CurrentNumberOfUsesPerCustomer,
        'IsSpecificByDayOfWeek': IsSpecificByDayOfWeek,
        'Active': Active,
        'CompanyId': CompanyId,
        'ValidFrom': JsonConverters.toJson(ValidFrom,'DateTime',context!),
        'ValidTo': JsonConverters.toJson(ValidTo,'DateTime',context!),
        'RebateCodeSign': RebateCodeSign,
        'RebateCodeValue': RebateCodeValue,
        'MaxNumberOfUses': MaxNumberOfUses,
        'MaxNumberOfUsesPerCustomer': MaxNumberOfUsesPerCustomer,
        'NumberOfUsesUsed': NumberOfUsesUsed,
        'PersonalNote': PersonalNote,
        'CreatedBy': CreatedBy,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'UpdatedBy': UpdatedBy,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'FromTime': JsonConverters.toJson(FromTime,'Duration',context!),
        'ToTime': JsonConverters.toJson(ToTime,'Duration',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

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

    Currency? CurrencyInfo;
    // @Ignore()
    Service? Service;

    // @Ignore()
    List<PriceMapping>? PriceMappings;

    // @Ignore()
    bool? isTimeSpecific;

    // @Ignore()
    bool? isDaysOfWeekSpecific;

    List<ServicePriceDayOfWeekRelation>? DayOfWeeks;
    // @Ignore()
    double? PriceBeforeRebate;

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

    // @Ignore()
    String? PriceText;

    // @Ignore()
    bool? IsWeighted;

    // @Ignore()
    List<ServicePrice>? OverlappingPrices;

    // @Required()
    String? CompanyId;

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

    double? Price;
    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    // @Required()
    Duration? FromTime;

    // @Required()
    Duration? ToTime;

    // @Required()
    double? VAT;

    String? Category;
    DateTime? ModifiedDate;
    // @Required()
    DateTime? From;

    // @Required()
    DateTime? To;

    // @Required()
    int? CalculationTypeId;

    ServicePrice({this.CurrencyId,this.CurrencyInfo,this.Service,this.PriceMappings,this.isTimeSpecific,this.isDaysOfWeekSpecific,this.DayOfWeeks,this.PriceBeforeRebate,this.RebateCodesApplied,this.PriceText,this.IsWeighted,this.OverlappingPrices,this.CompanyId,this.Id,this.ServiceId,this.Price,this.Updated,this.Created,this.FromTime,this.ToTime,this.VAT,this.Category,this.ModifiedDate,this.From,this.To,this.CalculationTypeId});
    ServicePrice.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CurrencyId = json['CurrencyId'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        Service = JsonConverters.fromJson(json['Service'],'Service',context!);
        PriceMappings = JsonConverters.fromJson(json['PriceMappings'],'List<PriceMapping>',context!);
        isTimeSpecific = json['isTimeSpecific'];
        isDaysOfWeekSpecific = json['isDaysOfWeekSpecific'];
        DayOfWeeks = JsonConverters.fromJson(json['DayOfWeeks'],'List<ServicePriceDayOfWeekRelation>',context!);
        PriceBeforeRebate = JsonConverters.toDouble(json['PriceBeforeRebate']);
        RebateCodesApplied = JsonConverters.fromJson(json['RebateCodesApplied'],'List<RebateCode>',context!);
        PriceText = json['PriceText'];
        IsWeighted = json['IsWeighted'];
        OverlappingPrices = JsonConverters.fromJson(json['OverlappingPrices'],'List<ServicePrice>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        ServiceId = json['ServiceId'];
        Price = JsonConverters.toDouble(json['Price']);
        Updated = JsonConverters.fromJson(json['Updated'],'DateTime',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        FromTime = JsonConverters.fromJson(json['FromTime'],'Duration',context!);
        ToTime = JsonConverters.fromJson(json['ToTime'],'Duration',context!);
        VAT = JsonConverters.toDouble(json['VAT']);
        Category = json['Category'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        From = JsonConverters.fromJson(json['From'],'DateTime',context!);
        To = JsonConverters.fromJson(json['To'],'DateTime',context!);
        CalculationTypeId = json['CalculationTypeId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CurrencyId': CurrencyId,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'Service': JsonConverters.toJson(Service,'Service',context!),
        'PriceMappings': JsonConverters.toJson(PriceMappings,'List<PriceMapping>',context!),
        'isTimeSpecific': isTimeSpecific,
        'isDaysOfWeekSpecific': isDaysOfWeekSpecific,
        'DayOfWeeks': JsonConverters.toJson(DayOfWeeks,'List<ServicePriceDayOfWeekRelation>',context!),
        'PriceBeforeRebate': PriceBeforeRebate,
        'RebateCodesApplied': JsonConverters.toJson(RebateCodesApplied,'List<RebateCode>',context!),
        'PriceText': PriceText,
        'IsWeighted': IsWeighted,
        'OverlappingPrices': JsonConverters.toJson(OverlappingPrices,'List<ServicePrice>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'ServiceId': ServiceId,
        'Price': Price,
        'Updated': JsonConverters.toJson(Updated,'DateTime',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'FromTime': JsonConverters.toJson(FromTime,'Duration',context!),
        'ToTime': JsonConverters.toJson(ToTime,'Duration',context!),
        'VAT': VAT,
        'Category': Category,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'From': JsonConverters.toJson(From,'DateTime',context!),
        'To': JsonConverters.toJson(To,'DateTime',context!),
        'CalculationTypeId': CalculationTypeId
    });

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

// @ValidateRequest(Validator="IsAuthenticated")
class ServicePricesQuery extends QueryDb2<ServicePrice,ServicePriceResponse> implements IConvertible
{
    /**
    * Company to show services for
    */
    // @ApiMember(Description="Company to show services for", ParameterType="query")
    String? CompanyId;

    /**
    * Service id
    */
    // @ApiMember(Description="Service id", ParameterType="query")
    int? ServiceId;

    /**
    * Only get prices for active services
    */
    // @ApiMember(Description="Only get prices for active services", ParameterType="query")
    bool? Active;

    /**
    * The max limit of records you want to retrieve, default is 100
    */
    // @ApiMember(DataType="int", Description="The max limit of records you want to retrieve, default is 100", ParameterType="query")
    int? MaxLimit;

    /**
    * If you want to include the service information for the booking
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the service information for the booking", ParameterType="query")
    bool? IncludeServiceInformation;

    ServicePricesQuery({this.CompanyId,this.ServiceId,this.Active,this.MaxLimit,this.IncludeServiceInformation});
    ServicePricesQuery.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        ServiceId = json['ServiceId'];
        Active = json['Active'];
        MaxLimit = json['MaxLimit'];
        IncludeServiceInformation = json['IncludeServiceInformation'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'ServiceId': ServiceId,
        'Active': Active,
        'MaxLimit': MaxLimit,
        'IncludeServiceInformation': IncludeServiceInformation
    });

    getTypeName() => "ServicePricesQuery";
    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 Customer extends BaseModel implements IUser, ICustomFieldTable, IConvertible
{
    int? IdentityId;
    String? Id;
    // @Ignore()
    String? CustomerId;

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

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

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

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

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

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

    // @Required()
    bool? Active;

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

    // @Required()
    DateTime? Created;

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

    bool? SubscribedToNewsletter;

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

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

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

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

class AccessKeyTypeResponse implements IConvertible
{
    int? Id;
    String? KeyType;
    String? Description;

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

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

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

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

// @DataContract
class QueryResponse<AccessKeyTypeResponse> implements IConvertible
{
    // @DataMember(Order=1)
    int? Offset;

    // @DataMember(Order=2)
    int? Total;

    // @DataMember(Order=3)
    List<AccessKeyTypeResponse>? Results;

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

    // @DataMember(Order=5)
    ResponseStatus? ResponseStatus;

    QueryResponse({this.Offset,this.Total,this.Results,this.Meta,this.ResponseStatus});
    QueryResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Offset = json['Offset'];
        Total = json['Total'];
        Results = JsonConverters.fromJson(json['Results'],'List<${runtimeGenericTypeDefs(this,[0]).join(",")}>',context!);
        Meta = JsonConverters.toStringMap(json['Meta']);
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Offset': Offset,
        'Total': Total,
        'Results': JsonConverters.toJson(Results,'List<AccessKeyTypeResponse>',context!),
        'Meta': Meta,
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!)
    };

    getTypeName() => "QueryResponse<$AccessKeyTypeResponse>";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'testapi.bokamera.se', types: <String, TypeInfo> {
    'DayOfWeekDto': TypeInfo(TypeOf.Class, create:() => DayOfWeekDto()),
    'GroupBookingSettings': TypeInfo(TypeOf.Class, create:() => GroupBookingSettings()),
    'MultipleResourceSettings': TypeInfo(TypeOf.Class, create:() => MultipleResourceSettings()),
    'ServiceInfoResponse': TypeInfo(TypeOf.Class, create:() => ServiceInfoResponse()),
    'Uri': TypeInfo(TypeOf.Class, create:() => Uri()),
    'ServicePriceResponse': TypeInfo(TypeOf.Class, create:() => ServicePriceResponse()),
    'List<DayOfWeekDto>': TypeInfo(TypeOf.Class, create:() => <DayOfWeekDto>[]),
    'BaseModel': TypeInfo(TypeOf.Class, create:() => BaseModel()),
    'Currency': TypeInfo(TypeOf.Enum, enumValues:Currency.values),
    'ScheduleType': TypeInfo(TypeOf.Enum, enumValues:ScheduleType.values),
    'ISchedule': TypeInfo(TypeOf.Interface),
    'ITimeException': TypeInfo(TypeOf.Interface),
    'BookingStatusEnum': TypeInfo(TypeOf.Enum, enumValues:BookingStatusEnum.values),
    'BookedCustomer': TypeInfo(TypeOf.Class, create:() => BookedCustomer()),
    'IBookedTime': TypeInfo(TypeOf.Interface),
    'CustomFieldValue': TypeInfo(TypeOf.Class, create:() => CustomFieldValue()),
    'CustomField': TypeInfo(TypeOf.Class, create:() => CustomField()),
    'RegEx': TypeInfo(TypeOf.Class, create:() => RegEx()),
    '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>[]),
    '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>[]),
    'ResourceType': TypeInfo(TypeOf.Class, create:() => ResourceType()),
    'List<Resource>': TypeInfo(TypeOf.Class, create:() => <Resource>[]),
    'RebateCodeType': TypeInfo(TypeOf.Class, create:() => RebateCodeType()),
    'AppliedRebateCodes': TypeInfo(TypeOf.Class, create:() => AppliedRebateCodes()),
    'TotalPriceInformation': TypeInfo(TypeOf.Class, create:() => TotalPriceInformation()),
    'List<AppliedRebateCodes>': TypeInfo(TypeOf.Class, create:() => <AppliedRebateCodes>[]),
    'BookingStatusOptions': TypeInfo(TypeOf.Class, create:() => BookingStatusOptions()),
    '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()),
    '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>[]),
    '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>[]),
    'UserAccessKeys': TypeInfo(TypeOf.Class, create:() => UserAccessKeys()),
    'ExternalReference': TypeInfo(TypeOf.Class, create:() => ExternalReference()),
    'CustomerComment': TypeInfo(TypeOf.Class, create:() => CustomerComment()),
    'CustomerType': TypeInfo(TypeOf.Enum, enumValues:CustomerType.values),
    'Customer': TypeInfo(TypeOf.Class, create:() => Customer()),
    'CalendarExport': TypeInfo(TypeOf.Class, create:() => CalendarExport()),
    'BookingLogEventType': TypeInfo(TypeOf.Class, create:() => BookingLogEventType()),
    'BookingLog': TypeInfo(TypeOf.Class, create:() => BookingLog()),
    'PaymentLog': TypeInfo(TypeOf.Class, create:() => PaymentLog()),
    'QvicklyCheckoutResponse': TypeInfo(TypeOf.Class, create:() => QvicklyCheckoutResponse()),
    'Payson2CheckoutStatus': TypeInfo(TypeOf.Enum, enumValues:Payson2CheckoutStatus.values),
    'ItemType': TypeInfo(TypeOf.Enum, enumValues:ItemType.values),
    'Item': TypeInfo(TypeOf.Class, create:() => Item()),
    'Order': TypeInfo(TypeOf.Class, create:() => Order()),
    'List<Item>': TypeInfo(TypeOf.Class, create:() => <Item>[]),
    'Merchant': TypeInfo(TypeOf.Class, create:() => Merchant()),
    'ColorScheme': TypeInfo(TypeOf.Enum, enumValues:ColorScheme.values),
    'Gui': TypeInfo(TypeOf.Class, create:() => Gui()),
    'History': TypeInfo(TypeOf.Class, create:() => History()),
    'Payson2CheckoutResponse': TypeInfo(TypeOf.Class, create:() => Payson2CheckoutResponse()),
    'PaymentDetails': TypeInfo(TypeOf.Class, create:() => PaymentDetails()),
    'BookingPrice': TypeInfo(TypeOf.Class, create:() => BookingPrice()),
    'CompanyStatus': TypeInfo(TypeOf.Enum, enumValues:CompanyStatus.values),
    'CompanyType': TypeInfo(TypeOf.Class, create:() => CompanyType()),
    'CodeLockSystem': TypeInfo(TypeOf.Class, create:() => CodeLockSystem()),
    'CodeLockSetting': TypeInfo(TypeOf.Class, create:() => CodeLockSetting()),
    'List<CodeLockSystem>': TypeInfo(TypeOf.Class, create:() => <CodeLockSystem>[]),
    '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()),
    'Country': TypeInfo(TypeOf.Class, create:() => Country()),
    'LicensePrice': TypeInfo(TypeOf.Class, create:() => LicensePrice()),
    'LicenseType': TypeInfo(TypeOf.Class, create:() => LicenseType()),
    'List<LicenseTypeItem>': TypeInfo(TypeOf.Class, create:() => <LicenseTypeItem>[]),
    'List<LicensePrice>': TypeInfo(TypeOf.Class, create:() => <LicensePrice>[]),
    'License': TypeInfo(TypeOf.Class, create:() => License()),
    'CompanyCategory': TypeInfo(TypeOf.Class, create:() => CompanyCategory()),
    'Company': TypeInfo(TypeOf.Class, create:() => Company()),
    'List<Rating>': TypeInfo(TypeOf.Class, create:() => <Rating>[]),
    'List<License>': TypeInfo(TypeOf.Class, create:() => <License>[]),
    'CultureInfo': TypeInfo(TypeOf.Class, create:() => CultureInfo()),
    'List<ExternalReference>': TypeInfo(TypeOf.Class, create:() => <ExternalReference>[]),
    'BookingStatus': TypeInfo(TypeOf.Class, create:() => BookingStatus()),
    'BookedResource': TypeInfo(TypeOf.Class, create:() => BookedResource()),
    'BookedResourceType': TypeInfo(TypeOf.Class, create:() => BookedResourceType()),
    'List<BookedResource>': TypeInfo(TypeOf.Class, create:() => <BookedResource>[]),
    'PriceMapping': TypeInfo(TypeOf.Class, create:() => PriceMapping()),
    'Booking': TypeInfo(TypeOf.Class, create:() => Booking()),
    'List<BookingLog>': TypeInfo(TypeOf.Class, create:() => <BookingLog>[]),
    'List<PaymentLog>': TypeInfo(TypeOf.Class, create:() => <PaymentLog>[]),
    'List<PaymentDetails>': TypeInfo(TypeOf.Class, create:() => <PaymentDetails>[]),
    'List<BookingPrice>': TypeInfo(TypeOf.Class, create:() => <BookingPrice>[]),
    'List<BookedResourceType>': TypeInfo(TypeOf.Class, create:() => <BookedResourceType>[]),
    'List<PriceMapping>': TypeInfo(TypeOf.Class, create:() => <PriceMapping>[]),
    'List<ResourceType>': TypeInfo(TypeOf.Class, create:() => <ResourceType>[]),
    'List<ServicePrice>': TypeInfo(TypeOf.Class, create:() => <ServicePrice>[]),
    'ServicePrice': TypeInfo(TypeOf.Class, create:() => ServicePrice()),
    'List<Booking>': TypeInfo(TypeOf.Class, create:() => <Booking>[]),
    'BokaMeraDayOfWeek': TypeInfo(TypeOf.Enum, enumValues:BokaMeraDayOfWeek.values),
    'ServicePriceDayOfWeekRelation': TypeInfo(TypeOf.Class, create:() => ServicePriceDayOfWeekRelation()),
    'RebateCodeDayOfWeekRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeDayOfWeekRelation()),
    'RebateCodeServiceRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeServiceRelation()),
    'RebateCodeBookingPriceRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeBookingPriceRelation()),
    'RebateCodeCustomerRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeCustomerRelation()),
    'DaysOfWeek': TypeInfo(TypeOf.Class, create:() => DaysOfWeek()),
    'RebateCodeStatus': TypeInfo(TypeOf.Class, create:() => RebateCodeStatus()),
    'RebateCode': TypeInfo(TypeOf.Class, create:() => RebateCode()),
    'List<RebateCodeDayOfWeekRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeDayOfWeekRelation>[]),
    'List<RebateCodeServiceRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeServiceRelation>[]),
    'List<RebateCodeBookingPriceRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeBookingPriceRelation>[]),
    'List<RebateCodeCustomerRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeCustomerRelation>[]),
    'List<DaysOfWeek>': TypeInfo(TypeOf.Class, create:() => <DaysOfWeek>[]),
    'List<Customer>': TypeInfo(TypeOf.Class, create:() => <Customer>[]),
    'List<ServicePriceDayOfWeekRelation>': TypeInfo(TypeOf.Class, create:() => <ServicePriceDayOfWeekRelation>[]),
    'List<RebateCode>': TypeInfo(TypeOf.Class, create:() => <RebateCode>[]),
    'ServicePricesQuery': TypeInfo(TypeOf.Class, create:() => ServicePricesQuery()),
    'List<ServicePriceResponse>': TypeInfo(TypeOf.Class, create:() => <ServicePriceResponse>[]),
    'List<UserAccessKeys>': TypeInfo(TypeOf.Class, create:() => <UserAccessKeys>[]),
    'List<CustomerComment>': TypeInfo(TypeOf.Class, create:() => <CustomerComment>[]),
    'AccessKeyTypeResponse': TypeInfo(TypeOf.Class, create:() => AccessKeyTypeResponse()),
    'QueryResponse<AccessKeyTypeResponse>': TypeInfo(TypeOf.Class, create:() => QueryResponse<AccessKeyTypeResponse>()),
});

Dart ServicePricesQuery DTOs

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

To embed the response in a jsonp callback, append ?callback=myCallback

HTTP + JSON

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

GET /services/prices HTTP/1.1 
Host: testapi.bokamera.se 
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: length

{"Offset":0,"Total":0,"Results":[{"Id":0,"ServiceId":0,"Price":0,"CalculationTypeId":0,"CurrencyId":"String","PriceSign":"String","VAT":0,"Category":"String","PriceText":"String","DaysOfWeek":[{"DayOfWeekId":0,"DotNetDayOfWeekId":0,"DayOfWeek":"String"}],"FromTime":"00:00:00","ToTime":"00:00:00","Service":{"Id":0,"Name":"String","Description":"String","LengthInMinutes":0,"MaxNumberOfSpotsPerBooking":0,"GroupBooking":{"Active":false,"Min":0,"Max":0},"MultipleResource":{"Active":false,"Min":0,"Max":0},"IsGroupBooking":false,"IsPaymentEnabled":false},"IsTimeSpecific":false,"IsDaysOfWeekSpecific":false,"IsWeighted":false}],"Meta":{"String":"String"},"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}