BokaMera.API.Host

<back to all web services

ResourceTimeExceptionQuery

Requires Authentication
Requires any of the roles:bookingsupplier-administrator-write, superadmin, bookingsupplier-administrator-read
The following routes are available for this service:
GET/timeexceptionsFind time exceptions belonging to resourcesFind time exceptions belonging to resources that the user have access to. This method can only be called by users with administrative privilegies.
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 TimeExceptionReosurceDetails implements IConvertible
{
    /**
    * Ids of the resources that owns this exception
    */
    // @ApiMember(Description="Ids of the resources that owns this exception")
    int? Id;

    /**
    * Name of the resource
    */
    // @ApiMember(Description="Name of the resource")
    String? Name;

    /**
    * Description of the resource
    */
    // @ApiMember(Description="Description of the resource")
    String? Description;

    /**
    * Color of the resource
    */
    // @ApiMember(Description="Color of the resource")
    String? Color;

    /**
    * Image of the resource
    */
    // @ApiMember(Description="Image of the resource")
    Uri? ImageUrl;

    ResponseStatus? ResponseStatus;

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

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

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'Name': Name,
        'Description': Description,
        'Color': Color,
        'ImageUrl': JsonConverters.toJson(ImageUrl,'Uri',context!),
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!)
    };

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

class ExceptionCalendarExportStatus implements IConvertible
{
    String? CalendarId;
    int? ExceptionId;
    bool? Synced;

    ExceptionCalendarExportStatus({this.CalendarId,this.ExceptionId,this.Synced});
    ExceptionCalendarExportStatus.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

    Map<String, dynamic> toJson() => {
        'CalendarId': CalendarId,
        'ExceptionId': ExceptionId,
        'Synced': Synced
    };

    getTypeName() => "ExceptionCalendarExportStatus";
    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 ResourceTimeExceptionQueryResponse implements IConvertible
{
    /**
    * Time exception id
    */
    // @ApiMember(Description="Time exception id")
    int? Id;

    /**
    * Time company id
    */
    // @ApiMember(Description="Time company id")
    String? CompanyId;

    /**
    * If it's locked for editing for the logged in administrator
    */
    // @ApiMember(Description="If it's locked for editing for the logged in administrator")
    bool? Locked;

    /**
    * Resources that owns this exception
    */
    // @ApiMember(Description="Resources that owns this exception")
    List<int>? ResourceIds;

    /**
    * Resources that owns this exception
    */
    // @ApiMember(Description="Resources that owns this exception")
    List<TimeExceptionReosurceDetails>? Resources;

    /**
    * Indicates wheter or not the time exception is recurring
    */
    // @ApiMember(Description="Indicates wheter or not the time exception is recurring")
    bool? IsRecurring;

    /**
    * Time exception starting timestamp
    */
    // @ApiMember(Description="Time exception starting timestamp")
    DateTime? From;

    /**
    * Time exception ending timestamp
    */
    // @ApiMember(Description="Time exception ending timestamp")
    DateTime? To;

    /**
    * If recurring then this value indicates the time of day when the time exception begins
    */
    // @ApiMember(Description="If recurring then this value indicates the time of day when the time exception begins")
    Duration? FromTime;

    /**
    * If recurring then this value indicates the time of day when the time exception ends
    */
    // @ApiMember(Description="If recurring then this value indicates the time of day when the time exception ends")
    Duration? ToTime;

    /**
    * The reason of the time exception, example: Vacation, doctors appointment, ...
    */
    // @ApiMember(Description="The reason of the time exception, example: Vacation, doctors appointment, ...")
    String? ReasonText;

    /**
    * The reason of the time exception that could be public to customers, example: Vacation, Closed, Sick leave, ...
    */
    // @ApiMember(Description="The reason of the time exception that could be public to customers, example: Vacation, Closed, Sick leave, ...")
    String? ReasonTextPublic;

    /**
    * What hexadecimal color code the exception should have in the scheduler
    */
    // @ApiMember(Description="What hexadecimal color code the exception should have in the scheduler")
    String? Color;

    /**
    * If the time exception should block the time in the scheduler so it's not avaialable to book
    */
    // @ApiMember(Description="If the time exception should block the time in the scheduler so it's not avaialable to book")
    bool? BlockTime;

    /**
    * If the ReasonText should only be visible to conncted resources. If false, all resources will be able to see it
    */
    // @ApiMember(Description="If the ReasonText should only be visible to conncted resources. If false, all resources will be able to see it")
    bool? Private;

    /**
    * The status for export to calendars like Gcal
    */
    // @ApiMember(Description="The status for export to calendars like Gcal")
    ExceptionCalendarExportStatus? CalendarExportStatus;

    /**
    * If recurring, an array indicating which days of the week the exception recures on where 1 = Monday .. 7 = Sunday. When recurring then the time portion of the Fields From and To indicates the time of day the recurrence occurs
    */
    // @ApiMember(Description="If recurring, an array indicating which days of the week the exception recures on where 1 = Monday .. 7 = Sunday. When recurring then the time portion of the Fields From and To indicates the time of day the recurrence occurs")
    List<DayOfWeekDto>? DaysOfWeek;

    /**
    * The datetime the exception was created
    */
    // @ApiMember(Description="The datetime the exception was created")
    DateTime? Created;

    ResponseStatus? ResponseStatus;

    ResourceTimeExceptionQueryResponse({this.Id,this.CompanyId,this.Locked,this.ResourceIds,this.Resources,this.IsRecurring,this.From,this.To,this.FromTime,this.ToTime,this.ReasonText,this.ReasonTextPublic,this.Color,this.BlockTime,this.Private,this.CalendarExportStatus,this.DaysOfWeek,this.Created,this.ResponseStatus});
    ResourceTimeExceptionQueryResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Id = json['Id'];
        CompanyId = json['CompanyId'];
        Locked = json['Locked'];
        ResourceIds = JsonConverters.fromJson(json['ResourceIds'],'List<int>',context!);
        Resources = JsonConverters.fromJson(json['Resources'],'List<TimeExceptionReosurceDetails>',context!);
        IsRecurring = json['IsRecurring'];
        From = JsonConverters.fromJson(json['From'],'DateTime',context!);
        To = JsonConverters.fromJson(json['To'],'DateTime',context!);
        FromTime = JsonConverters.fromJson(json['FromTime'],'Duration',context!);
        ToTime = JsonConverters.fromJson(json['ToTime'],'Duration',context!);
        ReasonText = json['ReasonText'];
        ReasonTextPublic = json['ReasonTextPublic'];
        Color = json['Color'];
        BlockTime = json['BlockTime'];
        Private = json['Private'];
        CalendarExportStatus = JsonConverters.fromJson(json['CalendarExportStatus'],'ExceptionCalendarExportStatus',context!);
        DaysOfWeek = JsonConverters.fromJson(json['DaysOfWeek'],'List<DayOfWeekDto>',context!);
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        ResponseStatus = JsonConverters.fromJson(json['ResponseStatus'],'ResponseStatus',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Id': Id,
        'CompanyId': CompanyId,
        'Locked': Locked,
        'ResourceIds': JsonConverters.toJson(ResourceIds,'List<int>',context!),
        'Resources': JsonConverters.toJson(Resources,'List<TimeExceptionReosurceDetails>',context!),
        'IsRecurring': IsRecurring,
        'From': JsonConverters.toJson(From,'DateTime',context!),
        'To': JsonConverters.toJson(To,'DateTime',context!),
        'FromTime': JsonConverters.toJson(FromTime,'Duration',context!),
        'ToTime': JsonConverters.toJson(ToTime,'Duration',context!),
        'ReasonText': ReasonText,
        'ReasonTextPublic': ReasonTextPublic,
        'Color': Color,
        'BlockTime': BlockTime,
        'Private': Private,
        'CalendarExportStatus': JsonConverters.toJson(CalendarExportStatus,'ExceptionCalendarExportStatus',context!),
        'DaysOfWeek': JsonConverters.toJson(DaysOfWeek,'List<DayOfWeekDto>',context!),
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'ResponseStatus': JsonConverters.toJson(ResponseStatus,'ResponseStatus',context!)
    };

    getTypeName() => "ResourceTimeExceptionQueryResponse";
    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 BokaMeraDayOfWeek
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday,
}

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

    // @Required()
    int? DayOfWeekId;

    // @Required()
    String? CompanyId;

    // @Required()
    int? ResourceTimeExceptionId;

    DateTime? ModifiedDate;
    int? Id;

    ResourceTimeExceptionDayOfWeekRelation({this.DayOfWeek,this.DayOfWeekId,this.CompanyId,this.ResourceTimeExceptionId,this.ModifiedDate,this.Id});
    ResourceTimeExceptionDayOfWeekRelation.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'];
        CompanyId = json['CompanyId'];
        ResourceTimeExceptionId = json['ResourceTimeExceptionId'];
        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!),
        'DayOfWeekId': DayOfWeekId,
        'CompanyId': CompanyId,
        'ResourceTimeExceptionId': ResourceTimeExceptionId,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id
    });

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

enum ScheduleType
{
    NotDefined,
    RecurringSchedule,
    DateSchedule,
}

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

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

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

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

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

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

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

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

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

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

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

    // @Required()
    bool? Active;

    int? SortOrder;
    DateTime? ModifiedDate;

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

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

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

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

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

    // @Required()
    String? Column;

    // @Required()
    String? DataType;

    // @Required()
    String? Description;

    // @Required()
    bool? Active;

    DateTime? ModifiedDate;
    int? Id;

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? RegExCode;

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

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

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

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

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

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

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

    // @Required()
    String? CompanyId;

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

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

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    DateTime? ModifiedDate;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

enum Currency
{
    SEK,
    EUR,
}

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

    // @Required()
    String? Id;

    // @Required()
    int? PriceId;

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

    // @Required()
    DateTime? CreatedDate;

    DateTime? ModifiedDate;

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

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

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

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

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

    // @Required()
    String? CompanyId;

    // @Required()
    int? ServicePriceId;

    // @Required()
    int? DayOfWeekId;

    DateTime? ModifiedDate;
    int? Id;

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

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

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

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

abstract class IDbConnectionFactory
{
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

enum CustomerType
{
    Person,
    Business,
}

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

    // @Required()
    int? AccessKeyTypeId;

    // @Required()
    String? Value;

    // @Required()
    String? CustomerId;

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

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

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

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

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

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

    // @Required()
    String? Id;

    // @Required()
    String? OwnerId;

    // @Required()
    String? ReferenceType;

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

    // @Required()
    DateTime? Created;

    DateTime? ModifiedDate;

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

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

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

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

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

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

    DateTime? ModifiedDate;
    int? Id;

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

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

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

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

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

    // @Required()
    String? Description;

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

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? UsedByApplication;

    DateTime? ModifiedDate;
    int? Id;

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    bool? Active;

    DateTime? ModifiedDate;
    int? Id;

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

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

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

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

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

    // @Required()
    String? TextPlural;

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

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

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

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

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

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

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

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

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

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

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

    // @Ignore()
    bool? SendEmailConfirmation;

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

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

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

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

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

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

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

    // @Ignore()
    String? FreeSpotsTextPlural;

    // @Required()
    int? BookingStatusId;

    // @Required()
    int? ScheduleViewId;

    // @Required()
    int? BookingTemplateId;

    // @Required()
    int? CalendarTypeId;

    // @Required()
    bool? AllowBookingOnUnbookedTimes;

    // @Required()
    bool? SendEmailReminder;

    // @Required()
    bool? SendSmsReminder;

    // @Required()
    bool? SendSmsConfirmation;

    // @Required()
    int? EmailReminderTime;

    // @Required()
    int? SmsReminderTime;

    // @Required()
    int? MaxActiveBookings;

    // @Required()
    bool? SendNotifications;

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

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

    // @Required()
    bool? ShowFreeTimesLeft;

    // @Required()
    bool? EnableICalGroupBookings;

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

    // @Required()
    bool? EnableBookingsOnSameTime;

    // @Required()
    int? ShowWeekNumberSettingId;

    // @Required()
    bool? EnableShowBookedTimes;

    // @Required()
    bool? EnableSendFollowUpMessage;

    // @Required()
    int? FollowUpMessageTime;

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

    // @Required()
    int? BookSpotUserResponseMinutes;

    // @Required()
    bool? IsBookSpotDirectly;

    // @Required()
    int? BookSpotDirectlyTimeLeftMinutes;

    // @Required()
    bool? SendEmailNotificationQueue;

    // @Required()
    bool? SendSMSNotificationQueue;

    // @Required()
    bool? SchedulerDisableHorizontalScrolling;

    // @Required()
    bool? BookOnlyOnExistingCustomers;

    // @Required()
    bool? AutoGenerateUniquePinCode;

    // @Required()
    bool? WeightedPrices;

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

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

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

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

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

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

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

    // @Required()
    String? Description;

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

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

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

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

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

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

    // @Required()
    String? Supplier;

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

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

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

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

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

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

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

    // @Required()
    bool? Active;

    // @Required()
    int? CodeLockSystemsId;

    // @Required()
    int? ValidBeforeMinutes;

    // @Required()
    int? ValidAfterMinutes;

    // @Required()
    bool? DeleteOldBySchedule;

    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

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

    // @Required()
    bool? SendSMSNotification;

    // @Required()
    int? EmailNotificationTime;

    // @Required()
    int? SMSNotificationTime;

    // @Required()
    String? Id;

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

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

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

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

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

    // @Required()
    String? Description;

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

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? Category;

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

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

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

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

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

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

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

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

    // @Required()
    bool? Enabled;

    // @Required()
    int? InvoiceFee;

    // @Required()
    bool? AllowCreditCardPayment;

    // @Required()
    bool? AllowInvoicePayment;

    // @Required()
    bool? AllowBankPayment;

    // @Required()
    bool? GuaranteeOffered;

    // @Required()
    bool? RefundOnCancelBooking;

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

    // @Required()
    bool? SendPaymentRequestDirectly;

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

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

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

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

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

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

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

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

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

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

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

    // @Required()
    bool? Active;

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

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

    // @Required()
    bool? EnableAPITranslation;

    // @Required()
    String? DefaultLanguage;

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

    String? GoogleAdsConversionId;
    String? LinkedinTagId;
    String? GoogleAdsConversionLabel;
    bool? SendCustomerInformationToExternalProviders;
    // @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.SendCustomerInformationToExternalProviders,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'];
        SendCustomerInformationToExternalProviders = json['SendCustomerInformationToExternalProviders'];
        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,
        'SendCustomerInformationToExternalProviders': SendCustomerInformationToExternalProviders,
        'Id': Id
    });

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

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

    // @Required()
    String? Description;

    // @Required()
    String? Code;

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

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? Code;

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

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? Code;

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

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? Code;

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

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

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

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

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

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

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

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

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

    // @Required()
    int? ServiceLayoutId;

    // @Required()
    int? TimeLayoutId;

    // @Required()
    int? BookingLayoutId;

    // @Required()
    String? PrimaryColor;

    // @Required()
    bool? ShowServiceImage;

    // @Required()
    bool? ShowNextAvailableTime;

    // @Required()
    bool? ShowEndTime;

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

    // @Required()
    bool? ShowRebateCodeField;

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

    // @Required()
    bool? EnableLogin;

    // @Required()
    bool? EnableDirectBooking;

    // @Required()
    bool? EnableFacebookLogin;

    // @Required()
    bool? ShowSubscribeToNewsletter;

    // @Required()
    String? Id;

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

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

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

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

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

    // @Required()
    String? Description;

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

    DateTime? ModifiedDate;
    int? Id;

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

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

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

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

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

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

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

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

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

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

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

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

    // @Ignore()
    String? CompanyId;

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

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

    // @Required()
    DateTime? Created;

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

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

    // @Required()
    bool? EnableHomepage;

    // @Required()
    String? Id;

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

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

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

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

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

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

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

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

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

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

    // @Required()
    String? Title;

    // @Required()
    String? Description;

    // @Required()
    String? Author;

    // @Required()
    int? Status;

    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

    DateTime? ModifiedDate;
    String? ReviewAnswer;

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

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

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

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

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

    // @Required()
    int? BookingId;

    // @Required()
    int? RatingScore;

    // @Required()
    int? Status;

    // @Required()
    DateTime? Created;

    // @Required()
    DateTime? Updated;

    DateTime? ModifiedDate;

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

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

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

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

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

    // @Ignore()
    LicenseType? LicenseType;

    // @Required()
    int? LicenseTypesId;

    // @Required()
    int? LicenseItemsId;

    // @Required()
    int? NumberOfItems;

    int? Id;
    DateTime? ModifiedDate;

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

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

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

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

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

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

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

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

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

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

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

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

    // @Ignore()
    bool? MonthlyPayment;

    // @Required()
    int? LicenseTypeId;

    // @Required()
    String? CountryId;

    // @Required()
    int? Price;

    DateTime? ModifiedDate;

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

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

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

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

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

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

    // @Ignore()
    int? PeriodOfNoticeDays;

    // @Ignore()
    LicenseType? NextLicenseOption;

    // @Required()
    String? Name;

    // @Required()
    String? Description;

    // @Required()
    bool? ExtraLicenseOption;

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

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

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

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

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

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

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

    // @Required()
    DateTime? ValidFrom;

    // @Required()
    DateTime? ValidTo;

    // @Required()
    bool? Active;

    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    DateTime? ModifiedDate;
    String? MetaData;

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

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

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

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

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

    // @Required()
    String? Header;

    // @Required()
    String? Description;

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

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

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

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

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

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

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

    // @Ignore()
    bool? Active;

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

    // @Ignore()
    String? BookingAgreements;

    // @Ignore()
    BookingSettings? BookingSettings;

    // @Ignore()
    CompanyType? CompanyType;

    // @Ignore()
    CodeLockSetting? CodeLockSettings;

    // @Ignore()
    PaymentSetting? PaymentSettings;

    // @Ignore()
    CompanySetting? Settings;

    // @Ignore()
    HomepageWidgetSetting? WidgetSettings;

    // @Ignore()
    HomepageSetting? HomepageSettings;

    // @Ignore()
    AverageRatingScore? RatingScore;

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

    // @Ignore()
    double? Distance;

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

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

    // @Ignore()
    License? CurrentLicense;

    // @Ignore()
    bool? IsFreeAccount;

    // @Ignore()
    CultureInfo? DefaultLanguage;

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

    // @Ignore()
    double? Lon;

    // @Ignore()
    bool? IsFavorite;

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

    // @Required()
    String? OrganisationNumber;

    // @Required()
    int? StatusId;

    // @Required()
    int? CategoryId;

    // @Required()
    String? SitePath;

    // @Required()
    String? Name;

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

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

    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

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

    // @Required()
    int? CompanyOwnerId;

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

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

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

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

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

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

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

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

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

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

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

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

    // @Required()
    String? Comments;

    // @Required()
    DateTime? Updated;

    // @Required()
    DateTime? Created;

    String? ImageUrl;
    DateTime? ModifiedDate;

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

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

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

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

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

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

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

    // @Ignore()
    Company? Company;

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

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

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

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

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

    // @Required()
    bool? Active;

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

    // @Required()
    DateTime? Created;

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

    bool? SubscribedToNewsletter;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract class IPaysonPaymentCheckout1
{
}

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

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

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

    // @Required()
    int? ArticleTypeId;

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

    // @Required()
    DateTime? Updated;

    DateTime? ModifiedDate;

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

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

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

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

abstract class PayableEntity extends BaseModel implements IPayableEntity
{
    // @Ignore()
    IDbConnectionFactory? DbFactory;

    // @Ignore()
    IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>? QvicklyPaymentManager;

    // @Ignore()
    IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>? Payson2PaymentManager;

    // @Ignore()
    IPaysonPaymentCheckout1? PaysonPaymentCheckout1;

    // @Ignore()
    ILogger<PayableEntity>? Logger;

    // @Ignore()
    String? InternalReferenceId;

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

    String? CompanyId;
    double? PriceVat;
    // @References(typeof(Currency))
    String? CurrencyId;

    // @Ignore()
    Customer? Customer;

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

    // @Ignore()
    Company? Company;

    PayableEntity({this.DbFactory,this.QvicklyPaymentManager,this.Payson2PaymentManager,this.PaysonPaymentCheckout1,this.Logger,this.InternalReferenceId,this.PaymentLog,this.CompanyId,this.PriceVat,this.CurrencyId,this.Customer,this.Customers,this.Company});
    PayableEntity.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DbFactory = JsonConverters.fromJson(json['DbFactory'],'IDbConnectionFactory',context!);
        QvicklyPaymentManager = JsonConverters.fromJson(json['QvicklyPaymentManager'],'IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>',context!);
        Payson2PaymentManager = JsonConverters.fromJson(json['Payson2PaymentManager'],'IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>',context!);
        PaysonPaymentCheckout1 = JsonConverters.fromJson(json['PaysonPaymentCheckout1'],'IPaysonPaymentCheckout1',context!);
        Logger = JsonConverters.fromJson(json['Logger'],'ILogger<PayableEntity>',context!);
        InternalReferenceId = json['InternalReferenceId'];
        PaymentLog = JsonConverters.fromJson(json['PaymentLog'],'List<PaymentLog>',context!);
        CompanyId = json['CompanyId'];
        PriceVat = JsonConverters.toDouble(json['PriceVat']);
        CurrencyId = json['CurrencyId'];
        Customer = JsonConverters.fromJson(json['Customer'],'Customer',context!);
        Customers = JsonConverters.fromJson(json['Customers'],'List<Customer>',context!);
        Company = JsonConverters.fromJson(json['Company'],'Company',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DbFactory': JsonConverters.toJson(DbFactory,'IDbConnectionFactory',context!),
        'QvicklyPaymentManager': JsonConverters.toJson(QvicklyPaymentManager,'IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>',context!),
        'Payson2PaymentManager': JsonConverters.toJson(Payson2PaymentManager,'IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>',context!),
        'PaysonPaymentCheckout1': JsonConverters.toJson(PaysonPaymentCheckout1,'IPaysonPaymentCheckout1',context!),
        'Logger': JsonConverters.toJson(Logger,'ILogger<PayableEntity>',context!),
        'InternalReferenceId': InternalReferenceId,
        'PaymentLog': JsonConverters.toJson(PaymentLog,'List<PaymentLog>',context!),
        'CompanyId': CompanyId,
        'PriceVat': PriceVat,
        'CurrencyId': CurrencyId,
        'Customer': JsonConverters.toJson(Customer,'Customer',context!),
        'Customers': JsonConverters.toJson(Customers,'List<Customer>',context!),
        'Company': JsonConverters.toJson(Company,'Company',context!)
    });

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

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

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

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

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

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

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

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

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

    // @Required()
    int? ArticleId;

    ArticleServiceRelation({this.CompanyId,this.Id,this.ServiceId,this.ArticleId});
    ArticleServiceRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

enum ArticleTypeEnum
{
    ServiceArticle,
    StandAloneArticle,
    RebateCodePunchTicketArticle,
    RebateCodeGiftCardArticle,
    RebateCodeValueCardArticle,
}

class Article extends BaseModel implements IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    Company? Company;
    Currency? CurrencyInfo;
    List<ArticleServiceRelation>? ArticleServiceRelations;
    // @Ignore()
    List<int>? ServiceIds;

    // @Ignore()
    ArticleTypeEnum? ArticleType;

    // @Ignore()
    String? ArticleTypeName;

    // @Required()
    String? CompanyId;

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

    // @Required()
    int? ArticleTypeId;

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

    // @Required()
    int? Amount;

    // @Required()
    double? Price;

    // @Required()
    // @StringLength(50)
    String? CurrencyId;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    DateTime? ModifiedDate;

    Article({this.Company,this.CurrencyInfo,this.ArticleServiceRelations,this.ServiceIds,this.ArticleType,this.ArticleTypeName,this.CompanyId,this.Id,this.Name,this.ArticleTypeId,this.Description,this.ImageUrl,this.Active,this.Amount,this.Price,this.CurrencyId,this.UpdatedDate,this.CreatedDate,this.ModifiedDate});
    Article.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Company = JsonConverters.fromJson(json['Company'],'Company',context!);
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        ArticleServiceRelations = JsonConverters.fromJson(json['ArticleServiceRelations'],'List<ArticleServiceRelation>',context!);
        ServiceIds = JsonConverters.fromJson(json['ServiceIds'],'List<int>',context!);
        ArticleType = JsonConverters.fromJson(json['ArticleType'],'ArticleTypeEnum',context!);
        ArticleTypeName = json['ArticleTypeName'];
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Name = json['Name'];
        ArticleTypeId = json['ArticleTypeId'];
        Description = json['Description'];
        ImageUrl = json['ImageUrl'];
        Active = json['Active'];
        Amount = json['Amount'];
        Price = JsonConverters.toDouble(json['Price']);
        CurrencyId = json['CurrencyId'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Company': JsonConverters.toJson(Company,'Company',context!),
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'ArticleServiceRelations': JsonConverters.toJson(ArticleServiceRelations,'List<ArticleServiceRelation>',context!),
        'ServiceIds': JsonConverters.toJson(ServiceIds,'List<int>',context!),
        'ArticleType': JsonConverters.toJson(ArticleType,'ArticleTypeEnum',context!),
        'ArticleTypeName': ArticleTypeName,
        'CompanyId': CompanyId,
        'Id': Id,
        'Name': Name,
        'ArticleTypeId': ArticleTypeId,
        'Description': Description,
        'ImageUrl': ImageUrl,
        'Active': Active,
        'Amount': Amount,
        'Price': Price,
        'CurrencyId': CurrencyId,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

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

    // @Required()
    int? DayOfWeekId;

    // @Required()
    int? RebateCodeId;

    // @Required()
    String? CompanyId;

    int? Id;
    DateTime? ModifiedDate;

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

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

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

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

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

    // @Required()
    int? ServiceId;

    // @Required()
    int? RebateCodeId;

    int? Id;
    DateTime? ModifiedDate;

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

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

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

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

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

    // @Required()
    int? PriceId;

    // @Required()
    int? RebateCodeId;

    int? Id;
    DateTime? ModifiedDate;

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

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

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

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

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

    // @Required()
    String? CustomerId;

    // @Required()
    int? RebateCodeId;

    int? Id;
    DateTime? ModifiedDate;
    bool? RebateCodeEmailSentToCustomer;
    String? MessageToReceiver;
    bool? Buyer;

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

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

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

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

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

    // @Required()
    String? DayOfWeekTranslation;

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

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

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

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

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

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

    // @Required()
    int? BookingId;

    // @Required()
    int? ExceptionId;

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

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

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

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

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

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

    // @Required()
    String? Description;

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

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

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

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

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

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

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

    // @Required()
    int? BookingId;

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

    DateTime? ModifiedDate;

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

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

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

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

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

    // @Ignore()
    Payson2CheckoutResponse? Payson2CheckoutSerialized;

    // @Required()
    String? CompanyId;

    // @Required()
    String? InternalReferenceId;

    // @Required()
    int? ArticleTypeId;

    // @Required()
    String? ExternalResponseData;

    // @Required()
    String? ExternalResponseReference;

    // @Required()
    int? PaymentProviderId;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    DateTime? UpdatedDate;

    DateTime? ModifiedDate;

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

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

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

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

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

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

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

    // @Ignore()
    bool? IsRebate;

    // @Required()
    String? CompanyId;

    // @Required()
    int? BookingId;

    // @Required()
    int? Quantity;

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

    // @Required()
    DateTime? Created;

    // @Required()
    bool? Invoiced;

    // @Required()
    bool? OccupiesSpot;

    DateTime? ModifiedDate;
    int? Id;

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

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

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

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

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

    // @Required()
    String? Description;

    // @Required()
    String? Color;

    // @Required()
    String? Icon;

    DateTime? ModifiedDate;
    int? Id;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    // @Ignore()
    CalendarExport? CalendarExport;

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

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

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

    // @Ignore()
    BookingStatusEnum? Status;

    // @Ignore()
    bool? IsReserved;

    // @Ignore()
    String? StatusName;

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

    // @Ignore()
    int? TotalSpots;

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

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

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

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

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

    // @Ignore()
    String? DeterministicId;

    // @Ignore()
    bool? Active;

    // @Ignore()
    DateTime? LastTimeToUnBook;

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

    // @Ignore()
    String? InternalReferenceId;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

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

    // @Required()
    int? ServiceId;

    // @Required()
    int? StatusId;

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

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

    // @Required()
    bool? SendEmailReminder;

    // @Required()
    bool? SendSmsConfirmation;

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

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

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

    // @Required()
    DateTime? To;

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

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

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

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

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

    // @Ignore()
    RebateCode? RebateCode;

    // @Ignore()
    Customer? Customer;

    int? Id;
    String? CompanyId;
    String? Note;
    // @Required()
    int? RebateCodeId;

    // @Required()
    double? Amount;

    // @Required()
    int? Usage;

    int? BookingId;
    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    RebateCodeTransaction({this.Booking,this.RebateCode,this.Customer,this.Id,this.CompanyId,this.Note,this.RebateCodeId,this.Amount,this.Usage,this.BookingId,this.UpdatedDate,this.CreatedDate});
    RebateCodeTransaction.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Booking = JsonConverters.fromJson(json['Booking'],'Booking',context!);
        RebateCode = JsonConverters.fromJson(json['RebateCode'],'RebateCode',context!);
        Customer = JsonConverters.fromJson(json['Customer'],'Customer',context!);
        Id = json['Id'];
        CompanyId = json['CompanyId'];
        Note = json['Note'];
        RebateCodeId = json['RebateCodeId'];
        Amount = JsonConverters.toDouble(json['Amount']);
        Usage = json['Usage'];
        BookingId = json['BookingId'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Booking': JsonConverters.toJson(Booking,'Booking',context!),
        'RebateCode': JsonConverters.toJson(RebateCode,'RebateCode',context!),
        'Customer': JsonConverters.toJson(Customer,'Customer',context!),
        'Id': Id,
        'CompanyId': CompanyId,
        'Note': Note,
        'RebateCodeId': RebateCodeId,
        'Amount': Amount,
        'Usage': Usage,
        'BookingId': BookingId,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!)
    });

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

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

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

    RebateCodeStatus? RebateCodeStatusInfo;
    // @Ignore()
    Article? Article;

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

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

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

    // @Ignore()
    RebateCodeStatus? RebateCodeStatus;

    // @Ignore()
    RebateCodeType? RebateCodeType;

    // @Ignore()
    List<RebateCodeTransaction>? Transactions;

    // @Ignore()
    double? RemainingAmount;

    // @Ignore()
    int? RemainingUsage;

    // @Ignore()
    int? CurrentNumberOfUsesPerCustomer;

    // @Ignore()
    bool? IsSpecificByDayOfWeek;

    // @Ignore()
    bool? Active;

    // @Ignore()
    bool? ActiveByStatus;

    // @Ignore()
    String? RebateCodeCurrencySign;

    Currency? CurrencyInfo;
    // @Ignore()
    bool? PaymentReceived;

    // @Ignore()
    String? InternalReferenceId;

    // @Required()
    DateTime? ValidFrom;

    // @Required()
    DateTime? ValidTo;

    // @Required()
    String? RebateCodeSign;

    // @Required()
    int? RebateCodeValue;

    // @Required()
    int? MaxNumberOfUses;

    // @Required()
    int? MaxNumberOfUsesPerCustomer;

    // @Required()
    int? NumberOfUsesUsed;

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

    // @Required()
    DateTime? Created;

    // @Required()
    String? UpdatedBy;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    Duration? FromTime;

    // @Required()
    Duration? ToTime;

    DateTime? ModifiedDate;
    int? Id;
    int? ArticleId;

    RebateCode({this.RebateCodeTypeId,this.RebateCodeTypeInfo,this.RebateCodeStatusId,this.RebateCodeStatusInfo,this.Article,this.Services,this.RebateCodeDayOfWeekRelation,this.RebateCodeServiceRelation,this.RebateCodeBookingPriceRelation,this.RebateCodeCustomerRelation,this.ServicesNames,this.DaysOfWeek,this.RebateCodeStatus,this.RebateCodeType,this.Transactions,this.RemainingAmount,this.RemainingUsage,this.CurrentNumberOfUsesPerCustomer,this.IsSpecificByDayOfWeek,this.Active,this.ActiveByStatus,this.RebateCodeCurrencySign,this.CurrencyInfo,this.PaymentReceived,this.InternalReferenceId,this.ValidFrom,this.ValidTo,this.RebateCodeSign,this.RebateCodeValue,this.MaxNumberOfUses,this.MaxNumberOfUsesPerCustomer,this.NumberOfUsesUsed,this.PersonalNote,this.CreatedBy,this.Created,this.UpdatedBy,this.UpdatedDate,this.FromTime,this.ToTime,this.ModifiedDate,this.Id,this.ArticleId});
    RebateCode.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        RebateCodeTypeId = json['RebateCodeTypeId'];
        RebateCodeTypeInfo = JsonConverters.fromJson(json['RebateCodeTypeInfo'],'RebateCodeType',context!);
        RebateCodeStatusId = json['RebateCodeStatusId'];
        RebateCodeStatusInfo = JsonConverters.fromJson(json['RebateCodeStatusInfo'],'RebateCodeStatus',context!);
        Article = JsonConverters.fromJson(json['Article'],'Article',context!);
        Services = JsonConverters.fromJson(json['Services'],'List<Service>',context!);
        RebateCodeDayOfWeekRelation = JsonConverters.fromJson(json['RebateCodeDayOfWeekRelation'],'List<RebateCodeDayOfWeekRelation>',context!);
        RebateCodeServiceRelation = JsonConverters.fromJson(json['RebateCodeServiceRelation'],'List<RebateCodeServiceRelation>',context!);
        RebateCodeBookingPriceRelation = JsonConverters.fromJson(json['RebateCodeBookingPriceRelation'],'List<RebateCodeBookingPriceRelation>',context!);
        RebateCodeCustomerRelation = JsonConverters.fromJson(json['RebateCodeCustomerRelation'],'List<RebateCodeCustomerRelation>',context!);
        ServicesNames = json['ServicesNames'];
        DaysOfWeek = JsonConverters.fromJson(json['DaysOfWeek'],'List<DaysOfWeek>',context!);
        RebateCodeStatus = JsonConverters.fromJson(json['RebateCodeStatus'],'RebateCodeStatus',context!);
        RebateCodeType = JsonConverters.fromJson(json['RebateCodeType'],'RebateCodeType',context!);
        Transactions = JsonConverters.fromJson(json['Transactions'],'List<RebateCodeTransaction>',context!);
        RemainingAmount = JsonConverters.toDouble(json['RemainingAmount']);
        RemainingUsage = json['RemainingUsage'];
        CurrentNumberOfUsesPerCustomer = json['CurrentNumberOfUsesPerCustomer'];
        IsSpecificByDayOfWeek = json['IsSpecificByDayOfWeek'];
        Active = json['Active'];
        ActiveByStatus = json['ActiveByStatus'];
        RebateCodeCurrencySign = json['RebateCodeCurrencySign'];
        CurrencyInfo = JsonConverters.fromJson(json['CurrencyInfo'],'Currency',context!);
        PaymentReceived = json['PaymentReceived'];
        InternalReferenceId = json['InternalReferenceId'];
        ValidFrom = JsonConverters.fromJson(json['ValidFrom'],'DateTime',context!);
        ValidTo = JsonConverters.fromJson(json['ValidTo'],'DateTime',context!);
        RebateCodeSign = json['RebateCodeSign'];
        RebateCodeValue = json['RebateCodeValue'];
        MaxNumberOfUses = json['MaxNumberOfUses'];
        MaxNumberOfUsesPerCustomer = json['MaxNumberOfUsesPerCustomer'];
        NumberOfUsesUsed = json['NumberOfUsesUsed'];
        PersonalNote = json['PersonalNote'];
        CreatedBy = json['CreatedBy'];
        Created = JsonConverters.fromJson(json['Created'],'DateTime',context!);
        UpdatedBy = json['UpdatedBy'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        FromTime = JsonConverters.fromJson(json['FromTime'],'Duration',context!);
        ToTime = JsonConverters.fromJson(json['ToTime'],'Duration',context!);
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        Id = json['Id'];
        ArticleId = json['ArticleId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'RebateCodeTypeId': RebateCodeTypeId,
        'RebateCodeTypeInfo': JsonConverters.toJson(RebateCodeTypeInfo,'RebateCodeType',context!),
        'RebateCodeStatusId': RebateCodeStatusId,
        'RebateCodeStatusInfo': JsonConverters.toJson(RebateCodeStatusInfo,'RebateCodeStatus',context!),
        'Article': JsonConverters.toJson(Article,'Article',context!),
        'Services': JsonConverters.toJson(Services,'List<Service>',context!),
        'RebateCodeDayOfWeekRelation': JsonConverters.toJson(RebateCodeDayOfWeekRelation,'List<RebateCodeDayOfWeekRelation>',context!),
        'RebateCodeServiceRelation': JsonConverters.toJson(RebateCodeServiceRelation,'List<RebateCodeServiceRelation>',context!),
        'RebateCodeBookingPriceRelation': JsonConverters.toJson(RebateCodeBookingPriceRelation,'List<RebateCodeBookingPriceRelation>',context!),
        'RebateCodeCustomerRelation': JsonConverters.toJson(RebateCodeCustomerRelation,'List<RebateCodeCustomerRelation>',context!),
        'ServicesNames': ServicesNames,
        'DaysOfWeek': JsonConverters.toJson(DaysOfWeek,'List<DaysOfWeek>',context!),
        'RebateCodeStatus': JsonConverters.toJson(RebateCodeStatus,'RebateCodeStatus',context!),
        'RebateCodeType': JsonConverters.toJson(RebateCodeType,'RebateCodeType',context!),
        'Transactions': JsonConverters.toJson(Transactions,'List<RebateCodeTransaction>',context!),
        'RemainingAmount': RemainingAmount,
        'RemainingUsage': RemainingUsage,
        'CurrentNumberOfUsesPerCustomer': CurrentNumberOfUsesPerCustomer,
        'IsSpecificByDayOfWeek': IsSpecificByDayOfWeek,
        'Active': Active,
        'ActiveByStatus': ActiveByStatus,
        'RebateCodeCurrencySign': RebateCodeCurrencySign,
        'CurrencyInfo': JsonConverters.toJson(CurrencyInfo,'Currency',context!),
        'PaymentReceived': PaymentReceived,
        'InternalReferenceId': InternalReferenceId,
        'ValidFrom': JsonConverters.toJson(ValidFrom,'DateTime',context!),
        'ValidTo': JsonConverters.toJson(ValidTo,'DateTime',context!),
        'RebateCodeSign': RebateCodeSign,
        'RebateCodeValue': RebateCodeValue,
        'MaxNumberOfUses': MaxNumberOfUses,
        'MaxNumberOfUsesPerCustomer': MaxNumberOfUsesPerCustomer,
        'NumberOfUsesUsed': NumberOfUsesUsed,
        'PersonalNote': PersonalNote,
        'CreatedBy': CreatedBy,
        'Created': JsonConverters.toJson(Created,'DateTime',context!),
        'UpdatedBy': UpdatedBy,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'FromTime': JsonConverters.toJson(FromTime,'Duration',context!),
        'ToTime': JsonConverters.toJson(ToTime,'Duration',context!),
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'Id': Id,
        'ArticleId': ArticleId
    });

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

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

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

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

    // @Ignore()
    bool? isTimeSpecific;

    // @Ignore()
    bool? isDaysOfWeekSpecific;

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

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

    // @Ignore()
    String? PriceText;

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

    // @Required()
    String? CompanyId;

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

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

    // @Required()
    DateTime? Created;

    // @Required()
    Duration? FromTime;

    // @Required()
    Duration? ToTime;

    // @Required()
    double? VAT;

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

    // @Required()
    DateTime? To;

    // @Required()
    int? CalculationTypeId;

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

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

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

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

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

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

    // @Ignore()
    TotalPriceInformation? TotalPrice;

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

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

    // @Ignore()
    bool? IsGroupBooking;

    // @Ignore()
    bool? IsMultipleResource;

    // @Ignore()
    BookingSettings? Settings;

    // @Ignore()
    PaymentSetting? PaymentSetting;

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

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

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

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

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

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

    // @Ignore()
    ScheduleType? ScheduleType;

    // @Ignore()
    Duration? LastTimeToUnbookThreshold;

    // @Ignore()
    Duration? LastTimeToBookThreshold;

    // @Ignore()
    AverageRatingScore? RatingScore;

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

    // @Required()
    String? CompanyId;

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

    // @Required()
    String? Description;

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

    // @Required()
    int? SortOrder;

    // @Required()
    int? PauseAfterBooking;

    // @Required()
    int? UnbookBeforeDays;

    // @Required()
    int? UnbookBeforeHours;

    // @Required()
    int? UnbookBeforeMinutes;

    // @Required()
    int? BookBeforeDays;

    // @Required()
    int? BookBeforeHours;

    // @Required()
    int? BookBeforeMinutes;

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

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    bool? OnlyVisibleByAdmin;

    // @Required()
    int? MinNumberOfSpotsPerBooking;

    // @Required()
    int? MaxNumberOfSpotsPerBooking;

    // @Required()
    int? MinNumberOfResourcesToBook;

    // @Required()
    int? MaxNumberOfResourcesToBook;

    // @Required()
    bool? IsPaymentEnabled;

    // @Required()
    int? MaxPaymentTime;

    // @Required()
    bool? LockSpotsToBooking;

    // @Required()
    bool? EnableBookingQueue;

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

    // @Required()
    bool? EnableCodeLockSync;

    // @Required()
    bool? EnableCustomerManualPayment;

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

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

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

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

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

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

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

    // @Required()
    int? ServiceId;

    DateTime? ModifiedDate;

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

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

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

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

class CustomFieldConfig extends BaseModel implements IConvertible
{
    // @Ignore()
    List<CustomFieldValue>? Values;

    CustomField? CustomField;
    // @Ignore()
    RegEx? RegEx;

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

    List<CustomFieldServiceRelation>? CustomFieldServiceRelation;
    // @Required()
    String? CompanyId;

    int? Id;
    int? GroupId;
    // @Required()
    int? FieldId;

    // @Required()
    int? IconId;

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

    // @Required()
    String? Description;

    // @Required()
    String? Datatype;

    // @Required()
    int? MaxLength;

    // @Required()
    bool? IsPublic;

    // @Required()
    bool? IsHidden;

    // @Required()
    bool? IsMandatory;

    String? DefaultValue;
    String? RegExErrorMessage;
    String? MandatoryErrorMessage;
    int? Width;
    // @Required()
    bool? MultipleLineText;

    DateTime? ModifiedDate;

    CustomFieldConfig({this.Values,this.CustomField,this.RegEx,this.Services,this.CustomFieldServiceRelation,this.CompanyId,this.Id,this.GroupId,this.FieldId,this.IconId,this.RegExId,this.Name,this.Description,this.Datatype,this.MaxLength,this.IsPublic,this.IsHidden,this.IsMandatory,this.DefaultValue,this.RegExErrorMessage,this.MandatoryErrorMessage,this.Width,this.MultipleLineText,this.ModifiedDate});
    CustomFieldConfig.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Values = JsonConverters.fromJson(json['Values'],'List<CustomFieldValue>',context!);
        CustomField = JsonConverters.fromJson(json['CustomField'],'CustomField',context!);
        RegEx = JsonConverters.fromJson(json['RegEx'],'RegEx',context!);
        Services = JsonConverters.fromJson(json['Services'],'List<Service>',context!);
        CustomFieldServiceRelation = JsonConverters.fromJson(json['CustomFieldServiceRelation'],'List<CustomFieldServiceRelation>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        GroupId = json['GroupId'];
        FieldId = json['FieldId'];
        IconId = json['IconId'];
        RegExId = json['RegExId'];
        Name = json['Name'];
        Description = json['Description'];
        Datatype = json['Datatype'];
        MaxLength = json['MaxLength'];
        IsPublic = json['IsPublic'];
        IsHidden = json['IsHidden'];
        IsMandatory = json['IsMandatory'];
        DefaultValue = json['DefaultValue'];
        RegExErrorMessage = json['RegExErrorMessage'];
        MandatoryErrorMessage = json['MandatoryErrorMessage'];
        Width = json['Width'];
        MultipleLineText = json['MultipleLineText'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Values': JsonConverters.toJson(Values,'List<CustomFieldValue>',context!),
        'CustomField': JsonConverters.toJson(CustomField,'CustomField',context!),
        'RegEx': JsonConverters.toJson(RegEx,'RegEx',context!),
        'Services': JsonConverters.toJson(Services,'List<Service>',context!),
        'CustomFieldServiceRelation': JsonConverters.toJson(CustomFieldServiceRelation,'List<CustomFieldServiceRelation>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'GroupId': GroupId,
        'FieldId': FieldId,
        'IconId': IconId,
        'RegExId': RegExId,
        'Name': Name,
        'Description': Description,
        'Datatype': Datatype,
        'MaxLength': MaxLength,
        'IsPublic': IsPublic,
        'IsHidden': IsHidden,
        'IsMandatory': IsMandatory,
        'DefaultValue': DefaultValue,
        'RegExErrorMessage': RegExErrorMessage,
        'MandatoryErrorMessage': MandatoryErrorMessage,
        'Width': Width,
        'MultipleLineText': MultipleLineText,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!)
    });

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

class Resource extends BaseModel implements ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    // @Ignore()
    int? Priority;

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

    // @Ignore()
    List<ITimeException>? Exceptions;

    // @Ignore()
    List<IBookedTime>? Bookings;

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

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

    // @Required()
    String? CompanyId;

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

    // @Required()
    bool? Active;

    String? Description;
    String? ImageUrl;
    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    // @Required()
    String? Color;

    String? Email;
    String? MobilePhone;
    bool? EmailNotification;
    bool? SMSNotification;
    // @Required()
    bool? SendSMSReminder;

    // @Required()
    bool? SendEmailReminder;

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

    Resource({this.Priority,this.Schedules,this.Exceptions,this.Bookings,this.CustomFieldsConfig,this.CustomFieldsData,this.CompanyId,this.Id,this.Name,this.Active,this.Description,this.ImageUrl,this.UpdatedDate,this.CreatedDate,this.Color,this.Email,this.MobilePhone,this.EmailNotification,this.SMSNotification,this.SendSMSReminder,this.SendEmailReminder,this.ModifiedDate,this.AccessGroup,this.TextField1,this.TextField2,this.TextField3,this.TextField4,this.TextField5,this.TextField6,this.TextField7,this.TextField8,this.TextField9,this.TextField10,this.TextField11,this.TextField12,this.TextField13,this.TextField14,this.TextField15,this.TextField16,this.TextField17,this.TextField18,this.TextField19,this.TextField20});
    Resource.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        Priority = json['Priority'];
        Schedules = JsonConverters.fromJson(json['Schedules'],'List<ISchedule>',context!);
        Exceptions = JsonConverters.fromJson(json['Exceptions'],'List<ITimeException>',context!);
        Bookings = JsonConverters.fromJson(json['Bookings'],'List<IBookedTime>',context!);
        CustomFieldsConfig = JsonConverters.fromJson(json['CustomFieldsConfig'],'List<CustomFieldConfig>',context!);
        CustomFieldsData = JsonConverters.fromJson(json['CustomFieldsData'],'List<CustomFieldDataResponse>',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        Name = json['Name'];
        Active = json['Active'];
        Description = json['Description'];
        ImageUrl = json['ImageUrl'];
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        Color = json['Color'];
        Email = json['Email'];
        MobilePhone = json['MobilePhone'];
        EmailNotification = json['EmailNotification'];
        SMSNotification = json['SMSNotification'];
        SendSMSReminder = json['SendSMSReminder'];
        SendEmailReminder = json['SendEmailReminder'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        AccessGroup = json['AccessGroup'];
        TextField1 = json['TextField1'];
        TextField2 = json['TextField2'];
        TextField3 = json['TextField3'];
        TextField4 = json['TextField4'];
        TextField5 = json['TextField5'];
        TextField6 = json['TextField6'];
        TextField7 = json['TextField7'];
        TextField8 = json['TextField8'];
        TextField9 = json['TextField9'];
        TextField10 = json['TextField10'];
        TextField11 = json['TextField11'];
        TextField12 = json['TextField12'];
        TextField13 = json['TextField13'];
        TextField14 = json['TextField14'];
        TextField15 = json['TextField15'];
        TextField16 = json['TextField16'];
        TextField17 = json['TextField17'];
        TextField18 = json['TextField18'];
        TextField19 = json['TextField19'];
        TextField20 = json['TextField20'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'Priority': Priority,
        'Schedules': JsonConverters.toJson(Schedules,'List<ISchedule>',context!),
        'Exceptions': JsonConverters.toJson(Exceptions,'List<ITimeException>',context!),
        'Bookings': JsonConverters.toJson(Bookings,'List<IBookedTime>',context!),
        'CustomFieldsConfig': JsonConverters.toJson(CustomFieldsConfig,'List<CustomFieldConfig>',context!),
        'CustomFieldsData': JsonConverters.toJson(CustomFieldsData,'List<CustomFieldDataResponse>',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'Name': Name,
        'Active': Active,
        'Description': Description,
        'ImageUrl': ImageUrl,
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'Color': Color,
        'Email': Email,
        'MobilePhone': MobilePhone,
        'EmailNotification': EmailNotification,
        'SMSNotification': SMSNotification,
        'SendSMSReminder': SendSMSReminder,
        'SendEmailReminder': SendEmailReminder,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'AccessGroup': AccessGroup,
        'TextField1': TextField1,
        'TextField2': TextField2,
        'TextField3': TextField3,
        'TextField4': TextField4,
        'TextField5': TextField5,
        'TextField6': TextField6,
        'TextField7': TextField7,
        'TextField8': TextField8,
        'TextField9': TextField9,
        'TextField10': TextField10,
        'TextField11': TextField11,
        'TextField12': TextField12,
        'TextField13': TextField13,
        'TextField14': TextField14,
        'TextField15': TextField15,
        'TextField16': TextField16,
        'TextField17': TextField17,
        'TextField18': TextField18,
        'TextField19': TextField19,
        'TextField20': TextField20
    });

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

class ResourceTimeExceptionResourceRelation extends BaseModel implements IConvertible
{
    // @Ignore()
    Resource? Resource;

    // @Required()
    String? CompanyId;

    // @Required()
    int? ResourceTimeExceptionId;

    // @Required()
    int? ResourceId;

    int? Id;
    DateTime? ModifiedDate;

    ResourceTimeExceptionResourceRelation({this.Resource,this.CompanyId,this.ResourceTimeExceptionId,this.ResourceId,this.Id,this.ModifiedDate});
    ResourceTimeExceptionResourceRelation.fromJson(Map<String, dynamic> json) { fromMap(json); }

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

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

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

class ResourceTimeException extends BaseModel implements IInterval, IBaseModelCreated, IBaseModelUpdated, IConvertible
{
    List<ResourceTimeExceptionDayOfWeekRelation>? DayOfWeeks;
    List<ResourceTimeExceptionResourceRelation>? Resources;
    // @Ignore()
    CalendarExport? CalendarExport;

    // @Required()
    String? CompanyId;

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

    // @Required()
    Duration? FromTime;

    // @Required()
    Duration? ToTime;

    // @Required()
    DateTime? UpdatedDate;

    // @Required()
    DateTime? CreatedDate;

    String? Color;
    String? ReasonTextPublic;
    // @Required()
    bool? BlockTime;

    // @Required()
    bool? Private;

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

    // @Required()
    DateTime? To;

    ResourceTimeException({this.DayOfWeeks,this.Resources,this.CalendarExport,this.CompanyId,this.Id,this.ReasonText,this.FromTime,this.ToTime,this.UpdatedDate,this.CreatedDate,this.Color,this.ReasonTextPublic,this.BlockTime,this.Private,this.ModifiedDate,this.From,this.To});
    ResourceTimeException.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        DayOfWeeks = JsonConverters.fromJson(json['DayOfWeeks'],'List<ResourceTimeExceptionDayOfWeekRelation>',context!);
        Resources = JsonConverters.fromJson(json['Resources'],'List<ResourceTimeExceptionResourceRelation>',context!);
        CalendarExport = JsonConverters.fromJson(json['CalendarExport'],'CalendarExport',context!);
        CompanyId = json['CompanyId'];
        Id = json['Id'];
        ReasonText = json['ReasonText'];
        FromTime = JsonConverters.fromJson(json['FromTime'],'Duration',context!);
        ToTime = JsonConverters.fromJson(json['ToTime'],'Duration',context!);
        UpdatedDate = JsonConverters.fromJson(json['UpdatedDate'],'DateTime',context!);
        CreatedDate = JsonConverters.fromJson(json['CreatedDate'],'DateTime',context!);
        Color = json['Color'];
        ReasonTextPublic = json['ReasonTextPublic'];
        BlockTime = json['BlockTime'];
        Private = json['Private'];
        ModifiedDate = JsonConverters.fromJson(json['ModifiedDate'],'DateTime',context!);
        From = JsonConverters.fromJson(json['From'],'DateTime',context!);
        To = JsonConverters.fromJson(json['To'],'DateTime',context!);
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'DayOfWeeks': JsonConverters.toJson(DayOfWeeks,'List<ResourceTimeExceptionDayOfWeekRelation>',context!),
        'Resources': JsonConverters.toJson(Resources,'List<ResourceTimeExceptionResourceRelation>',context!),
        'CalendarExport': JsonConverters.toJson(CalendarExport,'CalendarExport',context!),
        'CompanyId': CompanyId,
        'Id': Id,
        'ReasonText': ReasonText,
        'FromTime': JsonConverters.toJson(FromTime,'Duration',context!),
        'ToTime': JsonConverters.toJson(ToTime,'Duration',context!),
        'UpdatedDate': JsonConverters.toJson(UpdatedDate,'DateTime',context!),
        'CreatedDate': JsonConverters.toJson(CreatedDate,'DateTime',context!),
        'Color': Color,
        'ReasonTextPublic': ReasonTextPublic,
        'BlockTime': BlockTime,
        'Private': Private,
        'ModifiedDate': JsonConverters.toJson(ModifiedDate,'DateTime',context!),
        'From': JsonConverters.toJson(From,'DateTime',context!),
        'To': JsonConverters.toJson(To,'DateTime',context!)
    });

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

// @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
// @ApiResponse(Description="You have too low privilegies to call this service", StatusCode=403)
// @ValidateRequest(Validator="IsAuthenticated")
class ResourceTimeExceptionQuery extends QueryDb2<ResourceTimeException,ResourceTimeExceptionQueryResponse> implements IConvertible
{
    /**
    * The company id, if empty will use the company id for the user you are logged in with.
    */
    // @ApiMember(Description="The company id, if empty will use the company id for the user you are logged in with.")
    String? CompanyId;

    /**
    * Enter the resource id's separated by comma that you want to see time exceptions for, if no value is given all time exceptions will be returned
    */
    // @ApiMember(Description="Enter the resource id's separated by comma that you want to see time exceptions for, if no value is given all time exceptions will be returned", ParameterType="query")
    List<int>? ResourceIds;

    /**
    * Start of interval to query for time exceptions. UTC+0 and parameter as defined by date-time - RFC3339
    */
    // @ApiMember(DataType="dateTime", Description="Start of interval to query for time exceptions. UTC+0 and parameter as defined by date-time - RFC3339")
    DateTime? TimeExceptionStart;

    /**
    * End of interval to query for time exceptions. UTC+0 and parameter as defined by date-time - RFC3339
    */
    // @ApiMember(DataType="dateTime", Description="End of interval to query for time exceptions. UTC+0 and parameter as defined by date-time - RFC3339")
    DateTime? TimeExceptionEnd;

    /**
    * Include only recurring time exceptions or not, if no value is given, all time exceptions will be returned
    */
    // @ApiMember(Description="Include only recurring time exceptions or not, if no value is given, all time exceptions will be returned", ParameterType="query")
    bool? IsRecurring;

    /**
    * Include only time exceptions that are blocking, if no value is given, all time exceptions will be returned
    */
    // @ApiMember(Description="Include only time exceptions that are blocking, if no value is given, all time exceptions will be returned", ParameterType="query")
    bool? IsBlocking;

    /**
    * If you want to include the resource details
    */
    // @ApiMember(DataType="boolean", Description="If you want to include the resource details", ParameterType="query")
    bool? IncludeResourceDetails;

    /**
    * If you want to include google calendar sync status
    */
    // @ApiMember(DataType="boolean", Description="If you want to include google calendar sync status", ParameterType="query")
    bool? IncludeCalendarExportStatus;

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

    ResourceTimeExceptionQuery({this.CompanyId,this.ResourceIds,this.TimeExceptionStart,this.TimeExceptionEnd,this.IsRecurring,this.IsBlocking,this.IncludeResourceDetails,this.IncludeCalendarExportStatus,this.MaxLimit});
    ResourceTimeExceptionQuery.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        CompanyId = json['CompanyId'];
        ResourceIds = JsonConverters.fromJson(json['ResourceIds'],'List<int>',context!);
        TimeExceptionStart = JsonConverters.fromJson(json['TimeExceptionStart'],'DateTime',context!);
        TimeExceptionEnd = JsonConverters.fromJson(json['TimeExceptionEnd'],'DateTime',context!);
        IsRecurring = json['IsRecurring'];
        IsBlocking = json['IsBlocking'];
        IncludeResourceDetails = json['IncludeResourceDetails'];
        IncludeCalendarExportStatus = json['IncludeCalendarExportStatus'];
        MaxLimit = json['MaxLimit'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'CompanyId': CompanyId,
        'ResourceIds': JsonConverters.toJson(ResourceIds,'List<int>',context!),
        'TimeExceptionStart': JsonConverters.toJson(TimeExceptionStart,'DateTime',context!),
        'TimeExceptionEnd': JsonConverters.toJson(TimeExceptionEnd,'DateTime',context!),
        'IsRecurring': IsRecurring,
        'IsBlocking': IsBlocking,
        'IncludeResourceDetails': IncludeResourceDetails,
        'IncludeCalendarExportStatus': IncludeCalendarExportStatus,
        'MaxLimit': MaxLimit
    });

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

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

    // @Required()
    String? CurrencySign;

    // @Required()
    bool? Active;

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

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

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

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

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

abstract class IBokameraPaymentManager<TCreatedCheckoutResponse,TCheckoutResponse,TPaymentResponse>
{
}

class QvicklyArticle implements IConvertible
{
    String? artnr;
    String? title;
    int? quantity;
    int? aprice;
    int? tax;
    int? discount;
    int? withouttax;
    int? taxrate;

    QvicklyArticle({this.artnr,this.title,this.quantity,this.aprice,this.tax,this.discount,this.withouttax,this.taxrate});
    QvicklyArticle.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        artnr = json['artnr'];
        title = json['title'];
        quantity = json['quantity'];
        aprice = json['aprice'];
        tax = json['tax'];
        discount = json['discount'];
        withouttax = json['withouttax'];
        taxrate = json['taxrate'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'artnr': artnr,
        'title': title,
        'quantity': quantity,
        'aprice': aprice,
        'tax': tax,
        'discount': discount,
        'withouttax': withouttax,
        'taxrate': taxrate
    };

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

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

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

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

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

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

abstract class ILogger<TCategoryName> extends ILogger
{
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

TypeContext _ctx = TypeContext(library: 'api.bokamera.se', types: <String, TypeInfo> {
    'TimeExceptionReosurceDetails': TypeInfo(TypeOf.Class, create:() => TimeExceptionReosurceDetails()),
    'Uri': TypeInfo(TypeOf.Class, create:() => Uri()),
    'ExceptionCalendarExportStatus': TypeInfo(TypeOf.Class, create:() => ExceptionCalendarExportStatus()),
    'DayOfWeekDto': TypeInfo(TypeOf.Class, create:() => DayOfWeekDto()),
    'ResourceTimeExceptionQueryResponse': TypeInfo(TypeOf.Class, create:() => ResourceTimeExceptionQueryResponse()),
    'List<TimeExceptionReosurceDetails>': TypeInfo(TypeOf.Class, create:() => <TimeExceptionReosurceDetails>[]),
    'List<DayOfWeekDto>': TypeInfo(TypeOf.Class, create:() => <DayOfWeekDto>[]),
    'BaseModel': TypeInfo(TypeOf.Class, create:() => BaseModel()),
    'BokaMeraDayOfWeek': TypeInfo(TypeOf.Enum, enumValues:BokaMeraDayOfWeek.values),
    'ResourceTimeExceptionDayOfWeekRelation': TypeInfo(TypeOf.Class, create:() => ResourceTimeExceptionDayOfWeekRelation()),
    'ScheduleType': TypeInfo(TypeOf.Enum, enumValues:ScheduleType.values),
    'ISchedule': TypeInfo(TypeOf.Interface),
    'ITimeException': TypeInfo(TypeOf.Interface),
    'BookingStatusEnum': TypeInfo(TypeOf.Enum, enumValues:BookingStatusEnum.values),
    'BookedCustomer': TypeInfo(TypeOf.Class, create:() => BookedCustomer()),
    'IBookedTime': TypeInfo(TypeOf.Interface),
    'CustomFieldValue': TypeInfo(TypeOf.Class, create:() => CustomFieldValue()),
    'CustomField': TypeInfo(TypeOf.Class, create:() => CustomField()),
    'RegEx': TypeInfo(TypeOf.Class, create:() => RegEx()),
    'ResourceType': TypeInfo(TypeOf.Class, create:() => ResourceType()),
    'List<Resource>': TypeInfo(TypeOf.Class, create:() => <Resource>[]),
    'Resource': TypeInfo(TypeOf.Class, create:() => Resource()),
    'RebateCodeType': TypeInfo(TypeOf.Class, create:() => RebateCodeType()),
    'AppliedRebateCodes': TypeInfo(TypeOf.Class, create:() => AppliedRebateCodes()),
    'TotalPriceInformation': TypeInfo(TypeOf.Class, create:() => TotalPriceInformation()),
    'List<AppliedRebateCodes>': TypeInfo(TypeOf.Class, create:() => <AppliedRebateCodes>[]),
    'Currency': TypeInfo(TypeOf.Enum, enumValues:Currency.values),
    'PriceMapping': TypeInfo(TypeOf.Class, create:() => PriceMapping()),
    'ServicePriceDayOfWeekRelation': TypeInfo(TypeOf.Class, create:() => ServicePriceDayOfWeekRelation()),
    'IDbConnectionFactory': TypeInfo(TypeOf.Interface),
    'ServerData': TypeInfo(TypeOf.Class, create:() => ServerData()),
    'Credentials': TypeInfo(TypeOf.Class, create:() => Credentials()),
    'CheckoutData': TypeInfo(TypeOf.Class, create:() => CheckoutData()),
    'CheckoutPaymentData': TypeInfo(TypeOf.Class, create:() => CheckoutPaymentData()),
    'PaymentInfo': TypeInfo(TypeOf.Class, create:() => PaymentInfo()),
    'CartHandling': TypeInfo(TypeOf.Class, create:() => CartHandling()),
    'CartTotal': TypeInfo(TypeOf.Class, create:() => CartTotal()),
    'Shipping': TypeInfo(TypeOf.Class, create:() => Shipping()),
    'Cart': TypeInfo(TypeOf.Class, create:() => Cart()),
    'CustomerBilling': TypeInfo(TypeOf.Class, create:() => CustomerBilling()),
    'QvicklyCustomer': TypeInfo(TypeOf.Class, create:() => QvicklyCustomer()),
    'InitCheckoutData': TypeInfo(TypeOf.Class, create:() => InitCheckoutData()),
    'List<QvicklyArticle>': TypeInfo(TypeOf.Class, create:() => <QvicklyArticle>[]),
    'QvicklyArticle': TypeInfo(TypeOf.Class, create:() => QvicklyArticle()),
    'InitCheckoutRequestBody': TypeInfo(TypeOf.Class, create:() => InitCheckoutRequestBody()),
    'QvicklyCheckoutResponse': TypeInfo(TypeOf.Class, create:() => QvicklyCheckoutResponse()),
    'QvikclyPaymentData': TypeInfo(TypeOf.Class, create:() => QvikclyPaymentData()),
    'Card': TypeInfo(TypeOf.Class, create:() => Card()),
    'Settlement': TypeInfo(TypeOf.Class, create:() => Settlement()),
    'QvicklyPaymentResponse': TypeInfo(TypeOf.Class, create:() => QvicklyPaymentResponse()),
    'Payson2CheckoutStatus': TypeInfo(TypeOf.Enum, enumValues:Payson2CheckoutStatus.values),
    'CustomerType': TypeInfo(TypeOf.Enum, enumValues:CustomerType.values),
    'UserAccessKeys': TypeInfo(TypeOf.Class, create:() => UserAccessKeys()),
    'ExternalReference': TypeInfo(TypeOf.Class, create:() => ExternalReference()),
    'CompanyStatus': TypeInfo(TypeOf.Enum, enumValues:CompanyStatus.values),
    'ScheduleView': TypeInfo(TypeOf.Class, create:() => ScheduleView()),
    'WeekNumberSetting': TypeInfo(TypeOf.Class, create:() => WeekNumberSetting()),
    'BookingTemplate': TypeInfo(TypeOf.Class, create:() => BookingTemplate()),
    'CalendarType': TypeInfo(TypeOf.Class, create:() => CalendarType()),
    'FreeSpotTexts': TypeInfo(TypeOf.Class, create:() => FreeSpotTexts()),
    'BookingStatusOptions': TypeInfo(TypeOf.Class, create:() => BookingStatusOptions()),
    'BookingSettings': TypeInfo(TypeOf.Class, create:() => BookingSettings()),
    'List<ScheduleView>': TypeInfo(TypeOf.Class, create:() => <ScheduleView>[]),
    'List<WeekNumberSetting>': TypeInfo(TypeOf.Class, create:() => <WeekNumberSetting>[]),
    'List<BookingTemplate>': TypeInfo(TypeOf.Class, create:() => <BookingTemplate>[]),
    'List<CalendarType>': TypeInfo(TypeOf.Class, create:() => <CalendarType>[]),
    'List<FreeSpotTexts>': TypeInfo(TypeOf.Class, create:() => <FreeSpotTexts>[]),
    'List<BookingStatusOptions>': TypeInfo(TypeOf.Class, create:() => <BookingStatusOptions>[]),
    'CompanyType': TypeInfo(TypeOf.Class, create:() => CompanyType()),
    'CodeLockSystem': TypeInfo(TypeOf.Class, create:() => CodeLockSystem()),
    'CodeLockSetting': TypeInfo(TypeOf.Class, create:() => CodeLockSetting()),
    'List<CodeLockSystem>': TypeInfo(TypeOf.Class, create:() => <CodeLockSystem>[]),
    'AdminPaymentOptions': TypeInfo(TypeOf.Class, create:() => AdminPaymentOptions()),
    'PaymentProviders': TypeInfo(TypeOf.Class, create:() => PaymentProviders()),
    'PaymentSetting': TypeInfo(TypeOf.Class, create:() => PaymentSetting()),
    'List<AdminPaymentOptions>': TypeInfo(TypeOf.Class, create:() => <AdminPaymentOptions>[]),
    'List<PaymentProviders>': TypeInfo(TypeOf.Class, create:() => <PaymentProviders>[]),
    'LanguageResponse': TypeInfo(TypeOf.Class, create:() => LanguageResponse()),
    'CompanySetting': TypeInfo(TypeOf.Class, create:() => CompanySetting()),
    'List<LanguageResponse>': TypeInfo(TypeOf.Class, create:() => <LanguageResponse>[]),
    'WidgetServiceLayouts': TypeInfo(TypeOf.Class, create:() => WidgetServiceLayouts()),
    'WidgetTimeLayouts': TypeInfo(TypeOf.Class, create:() => WidgetTimeLayouts()),
    'WidgetBookingLayouts': TypeInfo(TypeOf.Class, create:() => WidgetBookingLayouts()),
    'WidgetBookingMethods': TypeInfo(TypeOf.Class, create:() => WidgetBookingMethods()),
    'HomepageWidgetSetting': TypeInfo(TypeOf.Class, create:() => HomepageWidgetSetting()),
    'List<WidgetServiceLayouts>': TypeInfo(TypeOf.Class, create:() => <WidgetServiceLayouts>[]),
    'List<WidgetTimeLayouts>': TypeInfo(TypeOf.Class, create:() => <WidgetTimeLayouts>[]),
    'List<WidgetBookingLayouts>': TypeInfo(TypeOf.Class, create:() => <WidgetBookingLayouts>[]),
    'List<WidgetBookingMethods>': TypeInfo(TypeOf.Class, create:() => <WidgetBookingMethods>[]),
    'HomepageTemplate': TypeInfo(TypeOf.Class, create:() => HomepageTemplate()),
    'HeroSectionStyle': TypeInfo(TypeOf.Class, create:() => HeroSectionStyle()),
    'HomepageSetting': TypeInfo(TypeOf.Class, create:() => HomepageSetting()),
    'List<HomepageTemplate>': TypeInfo(TypeOf.Class, create:() => <HomepageTemplate>[]),
    'List<HeroSectionStyle>': TypeInfo(TypeOf.Class, create:() => <HeroSectionStyle>[]),
    'AverageRatingScore': TypeInfo(TypeOf.Class, create:() => AverageRatingScore()),
    'Review': TypeInfo(TypeOf.Class, create:() => Review()),
    'Rating': TypeInfo(TypeOf.Class, create:() => Rating()),
    'LicenseTypeItem': TypeInfo(TypeOf.Class, create:() => LicenseTypeItem()),
    'LicenseType': TypeInfo(TypeOf.Class, create:() => LicenseType()),
    'Country': TypeInfo(TypeOf.Class, create:() => Country()),
    'LicensePrice': TypeInfo(TypeOf.Class, create:() => LicensePrice()),
    'List<LicenseTypeItem>': TypeInfo(TypeOf.Class, create:() => <LicenseTypeItem>[]),
    'List<LicensePrice>': TypeInfo(TypeOf.Class, create:() => <LicensePrice>[]),
    'License': TypeInfo(TypeOf.Class, create:() => License()),
    'CompanyCategory': TypeInfo(TypeOf.Class, create:() => CompanyCategory()),
    'Company': TypeInfo(TypeOf.Class, create:() => Company()),
    'List<CustomFieldConfig>': TypeInfo(TypeOf.Class, create:() => <CustomFieldConfig>[]),
    'CustomFieldConfig': TypeInfo(TypeOf.Class, create:() => CustomFieldConfig()),
    'List<Rating>': TypeInfo(TypeOf.Class, create:() => <Rating>[]),
    'List<License>': TypeInfo(TypeOf.Class, create:() => <License>[]),
    'CultureInfo': TypeInfo(TypeOf.Class, create:() => CultureInfo()),
    'List<ExternalReference>': TypeInfo(TypeOf.Class, create:() => <ExternalReference>[]),
    'CustomFieldDataResponse': TypeInfo(TypeOf.Class, create:() => CustomFieldDataResponse()),
    'CustomerComment': TypeInfo(TypeOf.Class, create:() => CustomerComment()),
    'Customer': TypeInfo(TypeOf.Class, create:() => Customer()),
    'List<UserAccessKeys>': TypeInfo(TypeOf.Class, create:() => <UserAccessKeys>[]),
    'List<CustomFieldDataResponse>': TypeInfo(TypeOf.Class, create:() => <CustomFieldDataResponse>[]),
    'List<CustomerComment>': TypeInfo(TypeOf.Class, create:() => <CustomerComment>[]),
    'List<RebateCode>': TypeInfo(TypeOf.Class, create:() => <RebateCode>[]),
    'RebateCode': TypeInfo(TypeOf.Class, create:() => RebateCode()),
    'ItemType': TypeInfo(TypeOf.Enum, enumValues:ItemType.values),
    'Item': TypeInfo(TypeOf.Class, create:() => Item()),
    'Order': TypeInfo(TypeOf.Class, create:() => Order()),
    'List<Item>': TypeInfo(TypeOf.Class, create:() => <Item>[]),
    'Merchant': TypeInfo(TypeOf.Class, create:() => Merchant()),
    'ColorScheme': TypeInfo(TypeOf.Enum, enumValues:ColorScheme.values),
    'Gui': TypeInfo(TypeOf.Class, create:() => Gui()),
    'History': TypeInfo(TypeOf.Class, create:() => History()),
    'Payson2CheckoutResponse': TypeInfo(TypeOf.Class, create:() => Payson2CheckoutResponse()),
    'IPaysonPaymentCheckout1': TypeInfo(TypeOf.Interface),
    'PaymentLog': TypeInfo(TypeOf.Class, create:() => PaymentLog()),
    'PayableEntity': TypeInfo(TypeOf.AbstractClass),
    'IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>': TypeInfo(TypeOf.Class, create:() => IBokameraPaymentManager<InitCheckoutRequestBody,QvicklyCheckoutResponse,QvicklyPaymentResponse>()),
    'IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>': TypeInfo(TypeOf.Class, create:() => IBokameraPaymentManager<Payson2CheckoutResponse,Payson2CheckoutResponse,Payson2CheckoutResponse>()),
    'ILogger<PayableEntity>': TypeInfo(TypeOf.Class, create:() => ILogger<PayableEntity>()),
    'List<PaymentLog>': TypeInfo(TypeOf.Class, create:() => <PaymentLog>[]),
    'List<Customer>': TypeInfo(TypeOf.Class, create:() => <Customer>[]),
    'RebateCodeStatus': TypeInfo(TypeOf.Class, create:() => RebateCodeStatus()),
    'ArticleServiceRelation': TypeInfo(TypeOf.Class, create:() => ArticleServiceRelation()),
    'ArticleTypeEnum': TypeInfo(TypeOf.Enum, enumValues:ArticleTypeEnum.values),
    'Article': TypeInfo(TypeOf.Class, create:() => Article()),
    'List<ArticleServiceRelation>': TypeInfo(TypeOf.Class, create:() => <ArticleServiceRelation>[]),
    'RebateCodeDayOfWeekRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeDayOfWeekRelation()),
    'RebateCodeServiceRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeServiceRelation()),
    'RebateCodeBookingPriceRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeBookingPriceRelation()),
    'RebateCodeCustomerRelation': TypeInfo(TypeOf.Class, create:() => RebateCodeCustomerRelation()),
    'DaysOfWeek': TypeInfo(TypeOf.Class, create:() => DaysOfWeek()),
    'CalendarExport': TypeInfo(TypeOf.Class, create:() => CalendarExport()),
    'BookingLogEventType': TypeInfo(TypeOf.Class, create:() => BookingLogEventType()),
    'BookingLog': TypeInfo(TypeOf.Class, create:() => BookingLog()),
    'PaymentDetails': TypeInfo(TypeOf.Class, create:() => PaymentDetails()),
    'BookingPrice': TypeInfo(TypeOf.Class, create:() => BookingPrice()),
    'BookingStatus': TypeInfo(TypeOf.Class, create:() => BookingStatus()),
    'BookedResource': TypeInfo(TypeOf.Class, create:() => BookedResource()),
    'BookedResourceType': TypeInfo(TypeOf.Class, create:() => BookedResourceType()),
    'List<BookedResource>': TypeInfo(TypeOf.Class, create:() => <BookedResource>[]),
    'Booking': TypeInfo(TypeOf.Class, create:() => Booking()),
    'Service': TypeInfo(TypeOf.Class, create:() => Service()),
    'List<BookingLog>': TypeInfo(TypeOf.Class, create:() => <BookingLog>[]),
    'List<PaymentDetails>': TypeInfo(TypeOf.Class, create:() => <PaymentDetails>[]),
    'List<BookingPrice>': TypeInfo(TypeOf.Class, create:() => <BookingPrice>[]),
    'List<BookedResourceType>': TypeInfo(TypeOf.Class, create:() => <BookedResourceType>[]),
    'List<PriceMapping>': TypeInfo(TypeOf.Class, create:() => <PriceMapping>[]),
    'RebateCodeTransaction': TypeInfo(TypeOf.Class, create:() => RebateCodeTransaction()),
    'List<Service>': TypeInfo(TypeOf.Class, create:() => <Service>[]),
    'List<RebateCodeDayOfWeekRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeDayOfWeekRelation>[]),
    'List<RebateCodeServiceRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeServiceRelation>[]),
    'List<RebateCodeBookingPriceRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeBookingPriceRelation>[]),
    'List<RebateCodeCustomerRelation>': TypeInfo(TypeOf.Class, create:() => <RebateCodeCustomerRelation>[]),
    'List<DaysOfWeek>': TypeInfo(TypeOf.Class, create:() => <DaysOfWeek>[]),
    'List<RebateCodeTransaction>': TypeInfo(TypeOf.Class, create:() => <RebateCodeTransaction>[]),
    'ServicePrice': TypeInfo(TypeOf.Class, create:() => ServicePrice()),
    'List<ServicePriceDayOfWeekRelation>': TypeInfo(TypeOf.Class, create:() => <ServicePriceDayOfWeekRelation>[]),
    'List<ServicePrice>': TypeInfo(TypeOf.Class, create:() => <ServicePrice>[]),
    'List<ResourceType>': TypeInfo(TypeOf.Class, create:() => <ResourceType>[]),
    'List<ISchedule>': TypeInfo(TypeOf.Class, create:() => <ISchedule>[]),
    'List<Booking>': TypeInfo(TypeOf.Class, create:() => <Booking>[]),
    'CustomFieldServiceRelation': TypeInfo(TypeOf.Class, create:() => CustomFieldServiceRelation()),
    'List<CustomFieldValue>': TypeInfo(TypeOf.Class, create:() => <CustomFieldValue>[]),
    'List<CustomFieldServiceRelation>': TypeInfo(TypeOf.Class, create:() => <CustomFieldServiceRelation>[]),
    'List<ITimeException>': TypeInfo(TypeOf.Class, create:() => <ITimeException>[]),
    'List<IBookedTime>': TypeInfo(TypeOf.Class, create:() => <IBookedTime>[]),
    'ResourceTimeExceptionResourceRelation': TypeInfo(TypeOf.Class, create:() => ResourceTimeExceptionResourceRelation()),
    'ResourceTimeException': TypeInfo(TypeOf.Class, create:() => ResourceTimeException()),
    'List<ResourceTimeExceptionDayOfWeekRelation>': TypeInfo(TypeOf.Class, create:() => <ResourceTimeExceptionDayOfWeekRelation>[]),
    'List<ResourceTimeExceptionResourceRelation>': TypeInfo(TypeOf.Class, create:() => <ResourceTimeExceptionResourceRelation>[]),
    'ResourceTimeExceptionQuery': TypeInfo(TypeOf.Class, create:() => ResourceTimeExceptionQuery()),
    'List<ResourceTimeExceptionQueryResponse>': TypeInfo(TypeOf.Class, create:() => <ResourceTimeExceptionQueryResponse>[]),
    'IBokameraPaymentManager<TCreatedCheckoutResponse,TCheckoutResponse,TPaymentResponse>': TypeInfo(TypeOf.Interface),
    'ILogger<TCategoryName>': TypeInfo(TypeOf.Interface),
    'AccessKeyTypeResponse': TypeInfo(TypeOf.Class, create:() => AccessKeyTypeResponse()),
    'QueryResponse<AccessKeyTypeResponse>': TypeInfo(TypeOf.Class, create:() => QueryResponse<AccessKeyTypeResponse>()),
});

Dart ResourceTimeExceptionQuery DTOs

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

HTTP + OTHER

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

GET /timeexceptions HTTP/1.1 
Host: api.bokamera.se 
Accept: text/jsonl
HTTP/1.1 200 OK
Content-Type: text/jsonl
Content-Length: length

{"Offset":0,"Total":0,"Results":[{"Id":0,"Locked":false,"ResourceIds":[0],"Resources":[{"Id":0,"Name":"String","Description":"String","Color":"String","ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}],"IsRecurring":false,"FromTime":"00:00:00","ToTime":"00:00:00","ReasonText":"String","ReasonTextPublic":"String","Color":"String","BlockTime":false,"Private":false,"CalendarExportStatus":{"CalendarId":"String","ExceptionId":0,"Synced":false},"DaysOfWeek":[{"DayOfWeekId":0,"DotNetDayOfWeekId":0,"DayOfWeek":"String"}],"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}],"Meta":{"String":"String"},"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}