BokaMera.API.Host

<back to all web services

GroupedBookingQuery

Requires Authentication
The following routes are available for this service:
GET/bookings/groupedFind booked events for currently logged in user grouped by booking from dateThis service is used to get bookings for the current user, the result will grouped by the bookings fromm date and paged if the query returns a to large set of values.

// @DataContract
export class QueryBase
{
    /** @description 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)
    public Skip?: number;

    /** @description 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)
    public Take?: number;

    /** @description 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)
    public OrderBy: string;

    /** @description 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)
    public OrderByDesc: string;

    /** @description 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)
    public Include: string;

    // @DataMember(Order=6)
    public Fields: string;

    // @DataMember(Order=7)
    public Meta: { [index: string]: string; };

    public constructor(init?: Partial<QueryBase>) { (Object as any).assign(this, init); }
}

export class QueryDb<From, Into> extends QueryBase
{

    public constructor(init?: Partial<QueryDb<From, Into>>) { super(init); (Object as any).assign(this, init); }
}

export enum BookingStatusEnum
{
    Booked = 1,
    Unbooked = 2,
    Reserved = 3,
    Canceled = 4,
    AwaitingPayment = 5,
    AwaitingPaymentNoTimeLimit = 6,
    Payed = 7,
    AwaitingPaymentRequestFromAdmin = 8,
    AwaitingPaymentFromProvider = 9,
    Invoiced = 10,
}

export class BookingStatusQueryResponse
{
    public Id: number;
    public Name: string;
    public Description: string;
    public Icon: string;
    public Color: string;

    public constructor(init?: Partial<BookingStatusQueryResponse>) { (Object as any).assign(this, init); }
}

export class CustomFieldValueResponse
{
    public Value: string;

    public constructor(init?: Partial<CustomFieldValueResponse>) { (Object as any).assign(this, init); }
}

export class CustomFieldConfigData
{
    /** @description Custom field id */
    // @ApiMember(Description="Custom field id")
    public Id: number;

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

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

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

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

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

    /** @description Determines if the field is required to have a value or not */
    // @ApiMember(Description="Determines if the field is required to have a value or not")
    public IsMandatory: boolean;

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

    /** @description Max lenght of the field */
    // @ApiMember(Description="Max lenght of the field")
    public MaxLength: number;

    /** @description If the field should have multiple lines */
    // @ApiMember(Description="If the field should have multiple lines")
    public MultipleLineText: boolean;

    /** @description Regular expression used for validation of the field */
    // @ApiMember(Description="Regular expression used for validation of the field")
    public RegEx: string;

    /** @description Error message shown if the regular expression validation failed */
    // @ApiMember(Description="Error message shown if the regular expression validation failed")
    public RegExErrorMessage: string;

    /** @description The values to select from if Datatype is DropDown for this custom field */
    // @ApiMember(Description="The values to select from if Datatype is DropDown for this custom field")
    public Values: CustomFieldValueResponse[];

    public constructor(init?: Partial<CustomFieldConfigData>) { (Object as any).assign(this, init); }
}

export class CustomFieldDataResponse
{
    public Id: number;
    public Column: string;
    public Name: string;
    public Description: string;
    public Value: string;
    /** @description Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox' */
    // @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
    public DataType: string;

    public constructor(init?: Partial<CustomFieldDataResponse>) { (Object as any).assign(this, init); }
}

export class BookedResource
{
    public Id: number;
    public Name: string;
    public Color: string;
    public ImageUrl: string;
    public Email: string;
    public MobilePhone: string;
    public AccessGroup: string;
    public EmailNotification: boolean;
    public SMSNotification: boolean;
    public EmailReminder: boolean;
    public SMSReminder: boolean;

    public constructor(init?: Partial<BookedResource>) { (Object as any).assign(this, init); }
}

export class BookedResourceType
{
    /** @description The resource type id */
    // @ApiMember(Description="The resource type id")
    public Id: number;

    /** @description The resource type name */
    // @ApiMember(Description="The resource type name")
    public Name: string;

    /** @description The resources inside resource type */
    // @ApiMember(Description="The resources inside resource type")
    public Resources: BookedResource[];

    public constructor(init?: Partial<BookedResourceType>) { (Object as any).assign(this, init); }
}

export class BookedCompany
{
    public Id: string;
    public Name: string;
    public LogoType: string;
    public Category: string;
    public Street1: string;
    public Street2: string;
    public ZipCode: string;
    public City: string;
    public CountryId: string;
    public Longitude: string;
    public Latitude: string;
    public Phone: string;
    public Email: string;
    public HomePage: string;
    public SitePath: string;
    public IsFavorite: boolean;
    public PaymentProviderId?: number;

    public constructor(init?: Partial<BookedCompany>) { (Object as any).assign(this, init); }
}

export class BookedCustomer
{
    public Id: string;
    public Firstname: string;
    public Lastname: string;
    public Email: string;
    public Phone: string;
    public FacebookUserName: string;
    public ImageUrl: string;
    public CorporateIdentityNumber: string;
    public InvoiceAddress1: string;
    public InvoiceAddress2: string;
    public InvoiceCity: string;
    public InvoicePostalCode: string;
    public InvoiceCountryCode: string;

    public constructor(init?: Partial<BookedCustomer>) { (Object as any).assign(this, init); }
}

export class BookedQuantity
{
    /** @description The quantity Id */
    // @ApiMember(Description="The quantity Id")
    public Id: number;

    /** @description The quantity for booked on this price category */
    // @ApiMember(Description="The quantity for booked on this price category")
    public Quantity: number;

    /** @description The price */
    // @ApiMember(Description="The price")
    public Price?: number;

    /** @description The price bofore rebate codes */
    // @ApiMember(Description="The price bofore rebate codes")
    public PriceBeforeRebate?: number;

    /** @description The price currency */
    // @ApiMember(Description="The price currency")
    public CurrencyId: string;

    /** @description The price sign */
    // @ApiMember(Description="The price sign")
    public PriceSign: string;

    /** @description The price category */
    // @ApiMember(Description="The price category")
    public Category: string;

    /** @description The price VAT in percent */
    // @ApiMember(Description="The price VAT in percent")
    public VAT?: number;

    /** @description The price text to display */
    // @ApiMember(Description="The price text to display")
    public PriceText: string;

    /** @description If the quantity you add should occupy a spot. Default is true. If no it will only be a row that includes price information. */
    // @ApiMember(Description="If the quantity you add should occupy a spot. Default is true. If no it will only be a row that includes price information.")
    public OccupiesSpot: boolean;

    public constructor(init?: Partial<BookedQuantity>) { (Object as any).assign(this, init); }
}

export class GroupBookingSettings
{
    public Active: boolean;
    public Min: number;
    public Max: number;

    public constructor(init?: Partial<GroupBookingSettings>) { (Object as any).assign(this, init); }
}

export class MultipleResourceSettings
{
    public Active: boolean;
    public Min: number;
    public Max: number;

    public constructor(init?: Partial<MultipleResourceSettings>) { (Object as any).assign(this, init); }
}

export class ServiceInfoResponse
{
    public Id: number;
    public Name: string;
    public Description: string;
    public ImageUrl: string;
    public LengthInMinutes?: number;
    public MaxNumberOfSpotsPerBooking: number;
    public GroupBooking: GroupBookingSettings;
    public MultipleResource: MultipleResourceSettings;
    public IsGroupBooking: boolean;
    public IsPaymentEnabled: boolean;

    public constructor(init?: Partial<ServiceInfoResponse>) { (Object as any).assign(this, init); }
}

export class BookingLogEventTypeResponse
{
    /** @description The event type id */
    // @ApiMember(Description="The event type id")
    public Id: number;

    /** @description The event type name */
    // @ApiMember(Description="The event type name")
    public Name: string;

    /** @description The event type description */
    // @ApiMember(Description="The event type description")
    public Description: string;

    public constructor(init?: Partial<BookingLogEventTypeResponse>) { (Object as any).assign(this, init); }
}

export class BookingLogQueryResponse
{
    /** @description The booking log id */
    // @ApiMember(Description="The booking log id")
    public Id: number;

    /** @description The booking id */
    // @ApiMember(Description="The booking id")
    public BookingId: number;

    /** @description The type of event */
    // @ApiMember(Description="The type of event")
    public EventTypeId: number;

    /** @description The type of event */
    // @ApiMember(Description="The type of event")
    public EventType: BookingLogEventTypeResponse;

    /** @description Comments that could be added to the event log item */
    // @ApiMember(Description="Comments that could be added to the event log item")
    public Comments: string;

    /** @description The user created the event */
    // @ApiMember(Description="The user created the event")
    public UserName: string;

    /** @description Then date when the event occured */
    // @ApiMember(Description="Then date when the event occured")
    public Created: string;

    public constructor(init?: Partial<BookingLogQueryResponse>) { (Object as any).assign(this, init); }
}

export class CurrencyInfoResponse
{
    /** @description The currency id */
    // @ApiMember(Description="The currency id")
    public Id: string;

    /** @description The currency id */
    // @ApiMember(Description="The currency id")
    public Name: string;

    /** @description The currency id */
    // @ApiMember(Description="The currency id")
    public CurrencySign: string;

    public constructor(init?: Partial<CurrencyInfoResponse>) { (Object as any).assign(this, init); }
}

export class BookingPaymentLogQueryResponse
{
    /** @description The booking payment log id */
    // @ApiMember(Description="The booking payment log id")
    public Id: number;

    /** @description The booking id */
    // @ApiMember(Description="The booking id")
    public BookingId: number;

    /** @description The payment reference id */
    // @ApiMember(Description="The payment reference id")
    public PaymentReferenceId: string;

    /** @description The payment order item reference id */
    // @ApiMember(Description="The payment order item reference id")
    public OrderItemReferenceId: string;

    /** @description The payment reference id */
    // @ApiMember(Description="The payment reference id")
    public PaymentProviderId?: number;

    /** @description The payment amount */
    // @ApiMember(Description="The payment amount")
    public Amount: number;

    /** @description The payment VAT in percent */
    // @ApiMember(Description="The payment VAT in percent")
    public VAT: number;

    /** @description The payment amount that is credited */
    // @ApiMember(Description="The payment amount that is credited")
    public AmountCredited: number;

    /** @description The payment currency id */
    // @ApiMember(Description="The payment currency id")
    public CurrencyId: string;

    /** @description The payment currency info */
    // @ApiMember(Description="The payment currency info")
    public CurrencyInfo: CurrencyInfoResponse;

    /** @description Comments that could be added to the event log item */
    // @ApiMember(Description="Comments that could be added to the event log item")
    public Comments: string;

    /** @description The date when the payment items was created */
    // @ApiMember(Description="The date when the payment items was created")
    public Created: string;

    /** @description The date when the payment items was update */
    // @ApiMember(Description="The date when the payment items was update")
    public Updated: string;

    public constructor(init?: Partial<BookingPaymentLogQueryResponse>) { (Object as any).assign(this, init); }
}

export class BookingCheckoutQueryResponse
{
    /** @description The checkout id */
    // @ApiMember(Description="The checkout id")
    public Id: string;

    /** @description The booking id */
    // @ApiMember(Description="The booking id")
    public BookingId: number;

    /** @description The purchase id */
    // @ApiMember(Description="The purchase id")
    public PurchaseId?: number;

    /** @description The payment checkout expiration datetime */
    // @ApiMember(Description="The payment checkout expiration datetime")
    public ExpirationTime?: string;

    /** @description The payment snippet code */
    // @ApiMember(Description="The payment snippet code")
    public Snippet: string;

    /** @description The payment status */
    // @ApiMember(Description="The payment status")
    public Status: string;

    /** @description Log message */
    // @ApiMember(Description="Log message")
    public Message: string;

    /** @description When the checkout log item was created */
    // @ApiMember(Description="When the checkout log item was created")
    public Created: string;

    /** @description When the checkout log item was updated */
    // @ApiMember(Description="When the checkout log item was updated")
    public Updated: string;

    public constructor(init?: Partial<BookingCheckoutQueryResponse>) { (Object as any).assign(this, init); }
}

export class ExternalReferenceResponse
{
    public CompanyId: string;
    public Id: string;
    public OwnerId: string;
    public ReferenceType: string;
    public ExternalData: string;
    public CreatedBy: string;
    public Updated: string;
    public Created: string;

    public constructor(init?: Partial<ExternalReferenceResponse>) { (Object as any).assign(this, init); }
}

export class BookingCalendarExportStatus
{
    public CalendarId: string;
    public BookingId: number;
    public Synced?: boolean;

    public constructor(init?: Partial<BookingCalendarExportStatus>) { (Object as any).assign(this, init); }
}

export class BookingQueryResponse
{
    public Id: number;
    public CompanyId: string;
    public From: string;
    public To: string;
    public Status: BookingStatusEnum;
    public StatusId: number;
    public StatusName: string;
    public StatusInfo: BookingStatusQueryResponse;
    public SendEmailReminder: boolean;
    public SendSmsReminder: boolean;
    public SendSmsConfirmation: boolean;
    public SendEmailConfirmation: boolean;
    public LastTimeToUnBook?: string;
    public CustomFields: CustomFieldConfigData[];
    public CustomFieldValues: CustomFieldDataResponse[];
    public BookedResourceTypes: BookedResourceType[];
    public Company: BookedCompany;
    public Customer: BookedCustomer;
    public Quantities: BookedQuantity[];
    public Service: ServiceInfoResponse;
    public PaymentExpiration?: string;
    public Log: BookingLogQueryResponse[];
    public PaymentLog: BookingPaymentLogQueryResponse[];
    public CheckoutLog: BookingCheckoutQueryResponse[];
    public ExternalReference: ExternalReferenceResponse[];
    public ResponseStatus: ResponseStatus;
    public CalendarExportStatus: BookingCalendarExportStatus;
    public LengthInMinutes?: number;
    public BookedBy: string;
    public BookedComments: string;
    public UnbookedComments: string;
    public CommentsToCustomer: string;
    public CreatedDate: string;
    public UpdatedDate: string;
    public UnbookedOn?: string;
    public CancellationCode: string;
    public RatingCode: string;

    public constructor(init?: Partial<BookingQueryResponse>) { (Object as any).assign(this, init); }
}

export class GroupedBookingQueryResponse
{
    public CompanyId: string;
    public Date: string;
    public Bookings: BookingQueryResponse[];

    public constructor(init?: Partial<GroupedBookingQueryResponse>) { (Object as any).assign(this, init); }
}

export class BaseModel
{

    public constructor(init?: Partial<BaseModel>) { (Object as any).assign(this, init); }
}

export class UserAccessKeys extends BaseModel
{
    // @Required()
    public CompanyId: string;

    // @Required()
    public AccessKeyTypeId: number;

    // @Required()
    public Value: string;

    // @Required()
    public CustomerId: string;

    public Description: string;
    // @Required()
    public Id: string;

    public constructor(init?: Partial<UserAccessKeys>) { super(init); (Object as any).assign(this, init); }
}

export class ExternalReference extends BaseModel
{
    // @Required()
    public CompanyId: string;

    // @Required()
    public Id: string;

    // @Required()
    public OwnerId: string;

    // @Required()
    public ReferenceType: string;

    public ExternalData: string;
    public CreatedBy: string;
    // @Required()
    public Updated: string;

    // @Required()
    public Created: string;

    public ModifiedDate?: string;

    public constructor(init?: Partial<ExternalReference>) { super(init); (Object as any).assign(this, init); }
}

export class CustomFieldValue extends BaseModel
{
    // @Required()
    public CompanyId: string;

    public Id: number;
    // @Required()
    public Value: string;

    // @Required()
    public Active: boolean;

    public SortOrder?: number;
    public ModifiedDate?: string;

    public constructor(init?: Partial<CustomFieldValue>) { super(init); (Object as any).assign(this, init); }
}

export class CustomField extends BaseModel
{
    // @Required()
    public Table: string;

    // @Required()
    public Column: string;

    // @Required()
    public DataType: string;

    // @Required()
    public Description: string;

    // @Required()
    public Active: boolean;

    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<CustomField>) { super(init); (Object as any).assign(this, init); }
}

export class RegEx extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    // @Required()
    public RegExCode: string;

    public ErrorMessage: string;
    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<RegEx>) { super(init); (Object as any).assign(this, init); }
}

export enum ScheduleType
{
    NotDefined = 'NotDefined',
    RecurringSchedule = 'RecurringSchedule',
    DateSchedule = 'DateSchedule',
}

export interface ISchedule
{
    Resources: IList<Resource>;
    Type: ScheduleType;
    Active: boolean;
    IsResourceSpecific: boolean;
}

export interface ITimeException extends IInterval
{
    Id: number;
    ReasonText: string;
    IsBlock: boolean;
    ReasonTextPublic: string;
    IsRecurring: boolean;
    ResourceIds: number[];
}

export interface IBookedTime extends IInterval
{
    Id: number;
    ServiceId: number;
    BookedSpots: number;
    TotalSpots: number;
    PauseAfterInMinutes: number;
    Status: BookingStatusEnum;
    StatusId: number;
    Customer: BookedCustomer;
}

export class Resource extends BaseModel implements ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated
{
    // @Ignore()
    public Priority: number;

    // @Ignore()
    public Schedules: IList<ISchedule>;

    // @Ignore()
    public Exceptions: IList<ITimeException>;

    // @Ignore()
    public Bookings: IList<IBookedTime>;

    // @Ignore()
    public CustomFieldsConfig: IList<CustomFieldConfig>;

    // @Ignore()
    public CustomFieldsData: IList<CustomFieldDataResponse>;

    // @Required()
    public CompanyId: string;

    public Id: number;
    // @Required()
    public Name: string;

    // @Required()
    public Active: boolean;

    public Description: string;
    public ImageUrl: string;
    // @Required()
    public UpdatedDate: string;

    // @Required()
    public CreatedDate: string;

    // @Required()
    public Color: string;

    public Email: string;
    public MobilePhone: string;
    public EmailNotification?: boolean;
    public SMSNotification?: boolean;
    // @Required()
    public SendSMSReminder: boolean;

    // @Required()
    public SendEmailReminder: boolean;

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

    public constructor(init?: Partial<Resource>) { super(init); (Object as any).assign(this, init); }
}

export class ResourceType extends BaseModel implements IBaseModelCreated, IBaseModelUpdated
{
    // @Ignore()
    public SelectableByUser: boolean;

    // @Ignore()
    public Resources: Resource[];

    // @Required()
    public CompanyId: string;

    public Id: number;
    // @Required()
    public Name: string;

    public Description: string;
    // @Required()
    public Active: boolean;

    // @Required()
    public UpdatedDate: string;

    // @Required()
    public CreatedDate: string;

    public ModifiedDate?: string;

    public constructor(init?: Partial<ResourceType>) { super(init); (Object as any).assign(this, init); }
}

export class RebateCodeType extends BaseModel
{
    // @Required()
    public Name: string;

    public Description: string;
    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<RebateCodeType>) { super(init); (Object as any).assign(this, init); }
}

export class AppliedRebateCodes
{
    public RebateCodeId: number;
    public RebateCodeSign: string;
    public RebateCodeValue: number;
    public RebateAmount: number;
    public RebateCodeType: RebateCodeType;

    public constructor(init?: Partial<AppliedRebateCodes>) { (Object as any).assign(this, init); }
}

export class TotalPriceInformation
{
    public TotalPrice: number;
    public TotalVATAmount: number;
    public TotalRebate: number;
    public TotalPriceBeforeRebate: number;
    public AppliedCodes: AppliedRebateCodes[];
    public PriceSign: string;
    public CurrencyId: string;
    public VAT: number;

    public constructor(init?: Partial<TotalPriceInformation>) { (Object as any).assign(this, init); }
}

export enum Currency
{
    SEK = 1,
    EUR = 2,
}

export class PriceMapping extends BaseModel
{
    // @Required()
    public CompanyId: string;

    // @Required()
    public Id: string;

    // @Required()
    public PriceId: number;

    public ReferenceType: string;
    public ExternalReference: string;
    // @Required()
    public UpdatedDate: string;

    // @Required()
    public CreatedDate: string;

    public ModifiedDate?: string;

    public constructor(init?: Partial<PriceMapping>) { super(init); (Object as any).assign(this, init); }
}

export enum BokaMeraDayOfWeek
{
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
    Sunday = 7,
}

export class ServicePriceDayOfWeekRelation extends BaseModel
{
    // @Ignore()
    public DayOfWeek: BokaMeraDayOfWeek;

    // @Required()
    public CompanyId: string;

    // @Required()
    public ServicePriceId: number;

    // @Required()
    public DayOfWeekId: number;

    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<ServicePriceDayOfWeekRelation>) { super(init); (Object as any).assign(this, init); }
}

export class RebateCodeDayOfWeekRelation extends BaseModel
{
    // @Ignore()
    public DayOfWeek: BokaMeraDayOfWeek;

    // @Required()
    public DayOfWeekId: number;

    // @Required()
    public RebateCodeId: number;

    // @Required()
    public CompanyId: string;

    public Id: number;
    public ModifiedDate?: string;

    public constructor(init?: Partial<RebateCodeDayOfWeekRelation>) { super(init); (Object as any).assign(this, init); }
}

export class RebateCodeServiceRelation extends BaseModel
{
    // @Required()
    public CompanyId: string;

    // @Required()
    public ServiceId: number;

    // @Required()
    public RebateCodeId: number;

    public Id: number;
    public ModifiedDate?: string;

    public constructor(init?: Partial<RebateCodeServiceRelation>) { super(init); (Object as any).assign(this, init); }
}

export class RebateCodeBookingPriceRelation extends BaseModel
{
    // @Required()
    public CompanyId: string;

    // @Required()
    public PriceId: number;

    // @Required()
    public RebateCodeId: number;

    public Id: number;
    public ModifiedDate?: string;

    public constructor(init?: Partial<RebateCodeBookingPriceRelation>) { super(init); (Object as any).assign(this, init); }
}

export class RebateCodeCustomerRelation extends BaseModel
{
    // @Required()
    public CompanyId: string;

    // @Required()
    public CustomerId: string;

    // @Required()
    public RebateCodeId: number;

    public Id: number;
    public ModifiedDate?: string;

    public constructor(init?: Partial<RebateCodeCustomerRelation>) { super(init); (Object as any).assign(this, init); }
}

export class DaysOfWeek extends BaseModel
{
    // @Required()
    public DayOfWeek: string;

    // @Required()
    public DayOfWeekTranslation: string;

    public DayOfWeekActive?: boolean;
    public DayOfWeekSortOrder?: number;
    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<DaysOfWeek>) { super(init); (Object as any).assign(this, init); }
}

export class RebateCodeStatus extends BaseModel
{
    // @Required()
    public Name: string;

    public Description: string;
    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<RebateCodeStatus>) { super(init); (Object as any).assign(this, init); }
}

export class RebateCode extends BaseModel
{
    // @References("typeof(BokaMera.API.ServiceModel.Db.RebateCodeType)")
    public RebateCodeTypeId: number;

    public RebateCodeTypeInfo: RebateCodeType;
    // @References("typeof(BokaMera.API.ServiceModel.Db.RebateCodeStatus)")
    public RebateCodeStatusId: number;

    public RebateCodeStatusInfo: RebateCodeType;
    // @Ignore()
    public Services: Service[];

    public RebateCodeDayOfWeekRelation: RebateCodeDayOfWeekRelation[];
    public RebateCodeServiceRelation: RebateCodeServiceRelation[];
    public RebateCodeBookingPriceRelation: RebateCodeBookingPriceRelation[];
    public RebateCodeCustomerRelation: RebateCodeCustomerRelation[];
    // @Ignore()
    public DaysOfWeek: DaysOfWeek[];

    // @Ignore()
    public Customers: Customer[];

    // @Ignore()
    public RebateCodeStatus: RebateCodeStatus;

    // @Ignore()
    public RebateCodeType: RebateCodeType;

    // @Ignore()
    public CurrentNumberOfUsesPerCustomer: number;

    // @Ignore()
    public IsSpecificByDayOfWeek: boolean;

    // @Ignore()
    public Active: boolean;

    public CompanyId: string;
    // @Required()
    public ValidFrom: string;

    // @Required()
    public ValidTo: string;

    // @Required()
    public RebateCodeSign: string;

    // @Required()
    public RebateCodeValue: number;

    // @Required()
    public MaxNumberOfUses: number;

    // @Required()
    public MaxNumberOfUsesPerCustomer: number;

    // @Required()
    public NumberOfUsesUsed: number;

    public PersonalNote: string;
    // @Required()
    public CreatedBy: string;

    // @Required()
    public Created: string;

    // @Required()
    public UpdatedBy: string;

    // @Required()
    public Updated: string;

    // @Required()
    public FromTime: string;

    // @Required()
    public ToTime: string;

    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<RebateCode>) { super(init); (Object as any).assign(this, init); }
}

export class ServicePrice extends BaseModel implements IInterval
{
    // @References("typeof(BokaMera.API.ServiceModel.Db.Currency)")
    public CurrencyId: string;

    public CurrencyInfo: Currency;
    // @Ignore()
    public Service: Service;

    // @Ignore()
    public PriceMappings: PriceMapping[];

    // @Ignore()
    public isTimeSpecific: boolean;

    // @Ignore()
    public isDaysOfWeekSpecific: boolean;

    public DayOfWeeks: ServicePriceDayOfWeekRelation[];
    // @Ignore()
    public PriceBeforeRebate?: number;

    // @Ignore()
    public RebateCodesApplied: RebateCode[];

    // @Ignore()
    public PriceText: string;

    // @Ignore()
    public IsWeighted: boolean;

    // @Ignore()
    public OverlappingPrices: ServicePrice[];

    // @Required()
    public CompanyId: string;

    public Id: number;
    // @Required()
    public ServiceId: number;

    public Price?: number;
    // @Required()
    public Updated: string;

    // @Required()
    public Created: string;

    // @Required()
    public FromTime: string;

    // @Required()
    public ToTime: string;

    // @Required()
    public VAT: number;

    public Category: string;
    public ModifiedDate?: string;
    // @Required()
    public From: string;

    // @Required()
    public To: string;

    // @Required()
    public CalculationTypeId: number;

    public constructor(init?: Partial<ServicePrice>) { super(init); (Object as any).assign(this, init); }
}

export class BookingStatusOptions
{
    public Id: number;
    public Name: string;
    public Description: string;

    public constructor(init?: Partial<BookingStatusOptions>) { (Object as any).assign(this, init); }
}

export class ScheduleView extends BaseModel
{
    // @Required()
    public Name: string;

    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<ScheduleView>) { super(init); (Object as any).assign(this, init); }
}

export class WeekNumberSetting extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    public ModifiedDate?: string;
    // @Required()
    public Id: number;

    public constructor(init?: Partial<WeekNumberSetting>) { super(init); (Object as any).assign(this, init); }
}

export class BookingTemplate extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    // @Required()
    public UsedByApplication: string;

    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<BookingTemplate>) { super(init); (Object as any).assign(this, init); }
}

export class CalendarType extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    // @Required()
    public Active: boolean;

    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<CalendarType>) { super(init); (Object as any).assign(this, init); }
}

export class FreeSpotTexts extends BaseModel
{
    // @Required()
    public TextSingular: string;

    // @Required()
    public TextPlural: string;

    public ModifiedDate?: string;
    // @Required()
    public Id: number;

    public constructor(init?: Partial<FreeSpotTexts>) { super(init); (Object as any).assign(this, init); }
}

export class BookingSettings extends BaseModel
{
    // @References("typeof(BokaMera.API.ServiceModel.Db.FreeSpotTexts)")
    public FreeSpotTextsId: number;

    // @Ignore()
    public SendEmailConfirmation: boolean;

    // @Ignore()
    public ScheduleViewOptions: ScheduleView[];

    // @Ignore()
    public WeekNumberSettingOptions: WeekNumberSetting[];

    // @Ignore()
    public BookingTemplateOptions: BookingTemplate[];

    // @Ignore()
    public CalendarTypeOptions: CalendarType[];

    // @Ignore()
    public FreeSpotTextOptions: FreeSpotTexts[];

    // @Ignore()
    public BookingStatusOptions: BookingStatusOptions[];

    public FreeSpotTextsInfo: FreeSpotTexts;
    // @Ignore()
    public FreeSpotsTextSingular: string;

    // @Ignore()
    public FreeSpotsTextPlural: string;

    // @Required()
    public BookingStatusId: number;

    // @Required()
    public ScheduleViewId: number;

    // @Required()
    public BookingTemplateId: number;

    // @Required()
    public CalendarTypeId: number;

    // @Required()
    public AllowBookingOnUnbookedTimes: boolean;

    // @Required()
    public SendEmailReminder: boolean;

    // @Required()
    public SendSmsReminder: boolean;

    // @Required()
    public SendSmsConfirmation: boolean;

    // @Required()
    public EmailReminderTime: number;

    // @Required()
    public SmsReminderTime: number;

    // @Required()
    public MaxActiveBookings: number;

    // @Required()
    public SendNotifications: boolean;

    public SendNotificationsEmail: string;
    // @Required()
    public EnableMobileApp: boolean;

    public ScheduleStartTime?: string;
    public ScheduleEndTime?: string;
    public ReceiptTemplate: string;
    // @Required()
    public ScheduleTimeSlotMinutes: number;

    // @Required()
    public ShowFreeTimesLeft: boolean;

    // @Required()
    public EnableICalGroupBookings: boolean;

    public AgreementTemplate: string;
    // @Required()
    public ScheduleShowTimeExeptions: boolean;

    // @Required()
    public EnableBookingsOnSameTime: boolean;

    // @Required()
    public ShowWeekNumberSettingId: number;

    // @Required()
    public EnableShowBookedTimes: boolean;

    // @Required()
    public EnableSendFollowUpMessage: boolean;

    // @Required()
    public FollowUpMessageTime: number;

    public MessageText: string;
    // @Required()
    public ScheduleGroupResources: boolean;

    // @Required()
    public BookSpotUserResponseMinutes: number;

    // @Required()
    public IsBookSpotDirectly: boolean;

    // @Required()
    public BookSpotDirectlyTimeLeftMinutes: number;

    // @Required()
    public SendEmailNotificationQueue: boolean;

    // @Required()
    public SendSMSNotificationQueue: boolean;

    // @Required()
    public SchedulerDisableHorizontalScrolling: boolean;

    // @Required()
    public BookOnlyOnExistingCustomers: boolean;

    // @Required()
    public AutoGenerateUniquePinCode: boolean;

    // @Required()
    public WeightedPrices: boolean;

    public ModifiedDate?: string;
    // @Required()
    public AutoCreateUserProfile: boolean;

    public ShowMultipleResourcesAsOne: boolean;
    public ShowMultiDayAsTime: boolean;
    // @Required()
    public Id: string;

    public constructor(init?: Partial<BookingSettings>) { super(init); (Object as any).assign(this, init); }
}

export class AdminPaymentOptions extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    public ModifiedDate?: string;
    // @Required()
    public Id: number;

    public constructor(init?: Partial<AdminPaymentOptions>) { super(init); (Object as any).assign(this, init); }
}

export class PaymentProviders extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    // @Required()
    public Category: string;

    public Url: string;
    // @Required()
    public Active: boolean;

    public ModifiedDate?: string;
    // @Required()
    public Id: number;

    public constructor(init?: Partial<PaymentProviders>) { super(init); (Object as any).assign(this, init); }
}

export class PaymentSetting extends BaseModel
{
    public AdminPaymentOption: AdminPaymentOptions;
    // @Ignore()
    public AdminPaymentOptions: AdminPaymentOptions[];

    // @Ignore()
    public PaymentProviderOptions: PaymentProviders[];

    // @Required()
    public Enabled: boolean;

    // @Required()
    public InvoiceFee: number;

    // @Required()
    public AllowCreditCardPayment: boolean;

    // @Required()
    public AllowInvoicePayment: boolean;

    // @Required()
    public AllowBankPayment: boolean;

    // @Required()
    public GuaranteeOffered: boolean;

    // @Required()
    public RefundOnCancelBooking: boolean;

    public DefaultPaymentOptionId?: number;
    // @Required()
    public PaymentProviderId: number;

    // @Required()
    public SendPaymentRequestDirectly: boolean;

    public ModifiedDate?: string;
    // @Required()
    public Id: string;

    public constructor(init?: Partial<PaymentSetting>) { super(init); (Object as any).assign(this, init); }
}

export class AverageRatingScore
{
    public AverageScore: number;
    public Score1Count: number;
    public Score2Count: number;
    public Score3Count: number;
    public Score4Count: number;
    public Score5Count: number;
    public Count: number;

    public constructor(init?: Partial<AverageRatingScore>) { (Object as any).assign(this, init); }
}

export class Review extends BaseModel
{
    public ReviewId: string;
    // @Required()
    public CompanyId: string;

    // @Required()
    public Title: string;

    // @Required()
    public Description: string;

    // @Required()
    public Author: string;

    // @Required()
    public Status: number;

    // @Required()
    public Created: string;

    // @Required()
    public Updated: string;

    public ModifiedDate?: string;
    public ReviewAnswer: string;

    public constructor(init?: Partial<Review>) { super(init); (Object as any).assign(this, init); }
}

export class Rating extends BaseModel
{
    public ReviewId?: string;
    public Review: Review;
    // @Required()
    public CompanyId: string;

    // @Required()
    public BookingId: number;

    // @Required()
    public RatingScore: number;

    // @Required()
    public Status: number;

    // @Required()
    public Created: string;

    // @Required()
    public Updated: string;

    public ModifiedDate?: string;

    public constructor(init?: Partial<Rating>) { super(init); (Object as any).assign(this, init); }
}

export class Service extends BaseModel implements ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated
{
    // @Ignore()
    public ResourceTypes: ResourceType[];

    // @Ignore()
    public Resources: Resource[];

    // @Ignore()
    public TotalPrice: TotalPriceInformation;

    // @Ignore()
    public Prices: ServicePrice[];

    // @Ignore()
    public BookingStatusOptions: BookingStatusOptions[];

    // @Ignore()
    public IsGroupBooking: boolean;

    // @Ignore()
    public IsMultipleResource: boolean;

    // @Ignore()
    public Settings: BookingSettings;

    // @Ignore()
    public PaymentSetting: PaymentSetting;

    // @Ignore()
    public BookingCustomFieldsConfig: IList<CustomFieldConfig>;

    // @Ignore()
    public CustomerCustomFieldsConfig: IList<CustomFieldConfig>;

    // @Ignore()
    public CustomFieldsConfig: IList<CustomFieldConfig>;

    // @Ignore()
    public CustomFieldsData: IList<CustomFieldDataResponse>;

    // @Ignore()
    public Schedules: IList<ISchedule>;

    // @Ignore()
    public CustomerActiveBookings: IList<Booking>;

    // @Ignore()
    public ScheduleType: ScheduleType;

    // @Ignore()
    public LastTimeToUnbookThreshold: string;

    // @Ignore()
    public LastTimeToBookThreshold: string;

    // @Ignore()
    public RatingScore: AverageRatingScore;

    // @Ignore()
    public Ratings: Rating[];

    // @Required()
    public CompanyId: string;

    public Id: number;
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    public Group: string;
    // @Required()
    public Active: boolean;

    // @Required()
    public SortOrder: number;

    // @Required()
    public PauseAfterBooking: number;

    // @Required()
    public UnbookBeforeDays: number;

    // @Required()
    public UnbookBeforeHours: number;

    // @Required()
    public UnbookBeforeMinutes: number;

    // @Required()
    public BookBeforeDays: number;

    // @Required()
    public BookBeforeHours: number;

    // @Required()
    public BookBeforeMinutes: number;

    public Duration?: number;
    public DurationTypeId: number;
    public MinDuration?: number;
    public MaxDuration?: number;
    public DurationInterval?: number;
    public TotalSpots?: number;
    public ImageUrl: string;
    // @Required()
    public ScheduleTypeId: number;

    // @Required()
    public UpdatedDate: string;

    // @Required()
    public CreatedDate: string;

    // @Required()
    public OnlyVisibleByAdmin: boolean;

    // @Required()
    public MaxNumberOfSpotsPerBooking: number;

    // @Required()
    public MinNumberOfResourcesToBook: number;

    // @Required()
    public MaxNumberOfResourcesToBook: number;

    // @Required()
    public IsPaymentEnabled: boolean;

    // @Required()
    public MaxPaymentTime: number;

    // @Required()
    public LockSpotsToBooking: boolean;

    // @Required()
    public EnableBookingQueue: boolean;

    public ModifiedDate?: string;
    // @Required()
    public BookingStatusId: number;

    // @Required()
    public EnableCodeLockSync: boolean;

    // @Required()
    public EnableCustomerManualPayment: boolean;

    public PriceViewTypeId?: number;
    public TextField1: string;
    public TextField2: string;
    public TextField3: string;
    public TextField4: string;
    public TextField5: string;
    public TextField6: string;
    public TextField7: string;
    public TextField8: string;
    public TextField9: string;
    public TextField10: string;
    public TextField11: string;
    public TextField12: string;
    public TextField13: string;
    public TextField14: string;
    public TextField15: string;
    public TextField16: string;
    public TextField17: string;
    public TextField18: string;
    public TextField19: string;
    public TextField20: string;

    public constructor(init?: Partial<Service>) { super(init); (Object as any).assign(this, init); }
}

export class CustomFieldServiceRelation extends BaseModel
{
    // @Required()
    public CompanyId: string;

    public Id: number;
    // @Required()
    public CustomFieldConfigId: number;

    // @Required()
    public ServiceId: number;

    public ModifiedDate?: string;

    public constructor(init?: Partial<CustomFieldServiceRelation>) { super(init); (Object as any).assign(this, init); }
}

export class CustomFieldConfig extends BaseModel
{
    // @Ignore()
    public Values: CustomFieldValue[];

    public CustomField: CustomField;
    // @Ignore()
    public RegEx: RegEx;

    // @Ignore()
    public Services: Service[];

    public CustomFieldServiceRelation: CustomFieldServiceRelation[];
    // @Required()
    public CompanyId: string;

    public Id: number;
    public GroupId?: number;
    // @Required()
    public FieldId: number;

    // @Required()
    public IconId: number;

    public RegExId?: number;
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    // @Required()
    public Datatype: string;

    // @Required()
    public MaxLength: number;

    // @Required()
    public IsPublic: boolean;

    // @Required()
    public IsHidden: boolean;

    // @Required()
    public IsMandatory: boolean;

    public DefaultValue: string;
    public RegExErrorMessage: string;
    public MandatoryErrorMessage: string;
    public Width?: number;
    // @Required()
    public MultipleLineText: boolean;

    public ModifiedDate?: string;

    public constructor(init?: Partial<CustomFieldConfig>) { super(init); (Object as any).assign(this, init); }
}

export class CustomerComment extends BaseModel
{
    // @Required()
    public CompanyId: string;

    public Id: number;
    // @Required()
    public CustomerId: string;

    // @Required()
    public Comments: string;

    // @Required()
    public Updated: string;

    // @Required()
    public Created: string;

    public ImageUrl: string;
    public ModifiedDate?: string;

    public constructor(init?: Partial<CustomerComment>) { super(init); (Object as any).assign(this, init); }
}

export enum CustomerType
{
    Person = 'Person',
    Business = 'Business',
}

export class Customer
{
    public City: string;
    public CountryCode: string;
    public IdentityNumber: string;
    public Email: string;
    public FirstName: string;
    public LastName: string;
    public Phone: string;
    public PostalCode: string;
    public Street: string;
    public Reference: string;
    public Type: CustomerType;

    public constructor(init?: Partial<Customer>) { (Object as any).assign(this, init); }
}

export class CalendarExport extends BaseModel
{
    // @Required()
    public CompanyId: string;

    // @Required()
    public BookingId: number;

    // @Required()
    public ExceptionId: number;

    public CalendarSync?: boolean;
    public CalendarId: string;
    public IsExceptionDeleted?: boolean;
    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<CalendarExport>) { super(init); (Object as any).assign(this, init); }
}

export class BookingLogEventType extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    public ModifiedDate?: string;
    // @Required()
    public Id: number;

    public constructor(init?: Partial<BookingLogEventType>) { super(init); (Object as any).assign(this, init); }
}

export class BookingLog extends BaseModel
{
    // @References("typeof(BokaMera.API.ServiceModel.Db.BookingLogEventType)")
    public EventTypeId: number;

    public EventType: BookingLogEventType;
    // @Required()
    public CompanyId: string;

    // @Required()
    public BookingId: number;

    public Id: number;
    public Comments: string;
    public UserId: string;
    // @Required()
    public Created: string;

    public ModifiedDate?: string;

    public constructor(init?: Partial<BookingLog>) { super(init); (Object as any).assign(this, init); }
}

export class PaymentLog extends BaseModel
{
    // @References("typeof(BokaMera.API.ServiceModel.Db.Currency)")
    public CurrencyId: string;

    public CurrencyInfo: Currency;
    // @Required()
    public CompanyId: string;

    public Id: number;
    // @Required()
    public BookingId: number;

    public PaymentReferenceId: string;
    public PaymentProviderId?: number;
    public OrderItemReferenceId: string;
    public Amount?: number;
    public VAT?: number;
    public AmountCredited?: number;
    public Comments: string;
    // @Required()
    public Created: string;

    // @Required()
    public Updated: string;

    public ModifiedDate?: string;

    public constructor(init?: Partial<PaymentLog>) { super(init); (Object as any).assign(this, init); }
}

export class QvicklyCheckoutResponse
{
    public Number: number;
    public Status: string;
    public OrderId: string;
    public Url: string;

    public constructor(init?: Partial<QvicklyCheckoutResponse>) { (Object as any).assign(this, init); }
}

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

export enum ItemType
{
    Physical = 'Physical',
    Service = 'Service',
    Fee = 'Fee',
    Discount = 'Discount',
}

export class Item
{
    public ItemId: string;
    public DiscountRate: number;
    public Ean: string;
    public ImageUri: string;
    public Name: string;
    public Quantity: number;
    public Reference: string;
    public TaxRate: number;
    public TotalPriceExcludingTax: number;
    public TotalPriceIncludingTax: number;
    public TotalTaxAmount: number;
    public CreditedAmount: number;
    public Type: ItemType;
    public UnitPrice: number;
    public Uri: string;

    public constructor(init?: Partial<Item>) { (Object as any).assign(this, init); }
}

export class Order
{
    public Currency: Currency;
    public TotalFeeExcludingTax: number;
    public TotalFeeIncludingTax: number;
    public TotalPriceExcludingTax: number;
    public TotalPriceIncludingTax: number;
    public TotalTaxAmount: number;
    public TotalCreditedAmount: number;
    public Items: IList<Item>;

    public constructor(init?: Partial<Order>) { (Object as any).assign(this, init); }
}

export class Merchant
{
    public CheckoutUri: string;
    public ConfirmationUri: string;
    public NotificationUri: string;
    public ValidationUri: string;
    public TermsUri: string;
    public Reference: string;
    public PartnerId: string;

    public constructor(init?: Partial<Merchant>) { (Object as any).assign(this, init); }
}

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

export class Gui
{
    public ColorScheme: ColorScheme;
    public Locale: string;
    public RequestPhone: boolean;
    public PhoneOptional: boolean;

    public constructor(init?: Partial<Gui>) { (Object as any).assign(this, init); }
}

export class History
{
    public Created?: string;
    public ReadyToPay?: string;
    public ReadyToShip?: string;
    public Shipped?: string;
    public PaidToAccount?: string;
    public Canceled?: string;
    public Expired?: string;
    public Denied?: string;

    public constructor(init?: Partial<History>) { (Object as any).assign(this, init); }
}

export class Payson2CheckoutResponse
{
    public Id: string;
    public ExpirationTime?: string;
    public Snippet: string;
    public Status: Payson2CheckoutStatus;
    public Customer: Customer;
    public Order: Order;
    public Merchant: Merchant;
    public Gui: Gui;
    public History: History;
    public PurchaseId?: number;

    public constructor(init?: Partial<Payson2CheckoutResponse>) { (Object as any).assign(this, init); }
}

export class PaymentDetails extends BaseModel implements IBaseModelCreated, IBaseModelUpdated
{
    // @Ignore()
    public QvicklyCheckoutSerialized: QvicklyCheckoutResponse;

    // @Ignore()
    public Payson2CheckoutSerialized: Payson2CheckoutResponse;

    // @Required()
    public CompanyId: string;

    // @Required()
    public BookingId: number;

    // @Required()
    public ExternalResponseData: string;

    // @Required()
    public ExternalResponseReference: string;

    // @Required()
    public PaymentProviderId: number;

    // @Required()
    public IsPayment: boolean;

    // @Required()
    public CreatedDate: string;

    // @Required()
    public UpdatedDate: string;

    public ModifiedDate?: string;

    public constructor(init?: Partial<PaymentDetails>) { super(init); (Object as any).assign(this, init); }
}

export class BookingPrice extends BaseModel
{
    // @References("typeof(BokaMera.API.ServiceModel.Db.Currency)")
    public CurrencyId: string;

    public PriceId?: number;
    public CurrencyInfo: Currency;
    // @Ignore()
    public PriceText: string;

    // @Ignore()
    public AppliedCodes: AppliedRebateCodes[];

    // @Ignore()
    public IsRebate: boolean;

    // @Required()
    public CompanyId: string;

    // @Required()
    public BookingId: number;

    // @Required()
    public Quantity: number;

    public Price?: number;
    public VAT?: number;
    public Category: string;
    // @Required()
    public Updated: string;

    // @Required()
    public Created: string;

    // @Required()
    public Invoiced: boolean;

    // @Required()
    public OccupiesSpot: boolean;

    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<BookingPrice>) { super(init); (Object as any).assign(this, init); }
}

export enum CompanyStatus
{
    Registered = 1,
    AwaitingApproval = 2,
    Approved = 3,
    Inactive = 4,
    ClosedDown = 5,
    NotApproved = 6,
}

export class CompanyType extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    public ModifiedDate?: string;
    // @Required()
    public Id: number;

    public constructor(init?: Partial<CompanyType>) { super(init); (Object as any).assign(this, init); }
}

export class CodeLockSystem extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Supplier: string;

    public LogoType: string;
    // @Required()
    public Description: string;

    public ModifiedDate?: string;
    // @Required()
    public Id: number;

    public constructor(init?: Partial<CodeLockSystem>) { super(init); (Object as any).assign(this, init); }
}

export class CodeLockSetting extends BaseModel
{
    // @Ignore()
    public CodeLockSystemOptions: CodeLockSystem[];

    // @Required()
    public Active: boolean;

    // @Required()
    public CodeLockSystemsId: number;

    // @Required()
    public ValidBeforeMinutes: number;

    // @Required()
    public ValidAfterMinutes: number;

    // @Required()
    public DeleteOldBySchedule: boolean;

    // @Required()
    public Created: string;

    // @Required()
    public Updated: string;

    public ModifiedDate?: string;
    // @Required()
    public SendEmailNotification: boolean;

    // @Required()
    public SendSMSNotification: boolean;

    // @Required()
    public EmailNotificationTime: number;

    // @Required()
    public SMSNotificationTime: number;

    // @Required()
    public Id: string;

    public constructor(init?: Partial<CodeLockSetting>) { super(init); (Object as any).assign(this, init); }
}

export class LanguageResponse
{
    public Id: string;
    public Name: string;

    public constructor(init?: Partial<LanguageResponse>) { (Object as any).assign(this, init); }
}

export class CompanySetting extends BaseModel
{
    // @Ignore()
    public Languages: LanguageResponse[];

    // @Required()
    public Active: boolean;

    public InactiveMessage: string;
    // @Required()
    public Searchable: boolean;

    public GATrackingId: string;
    public FacebookPixelId: string;
    // @Required()
    public MultiLanguage: boolean;

    // @Required()
    public EnableAPITranslation: boolean;

    // @Required()
    public DefaultLanguage: string;

    public ModifiedDate?: string;
    public GTMTrackingId: string;
    // @Required()
    public ShowOnMarketPlace: boolean;

    public GoogleAdsConversionId: string;
    public LinkedinTagId: string;
    public GoogleAdsConversionLabel: string;
    // @Required()
    public Id: string;

    public constructor(init?: Partial<CompanySetting>) { super(init); (Object as any).assign(this, init); }
}

export class WidgetServiceLayouts extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    // @Required()
    public Code: string;

    public ModifiedDate?: string;
    // @Required()
    public Id: number;

    public constructor(init?: Partial<WidgetServiceLayouts>) { super(init); (Object as any).assign(this, init); }
}

export class WidgetTimeLayouts extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    // @Required()
    public Code: string;

    public ModifiedDate?: string;
    // @Required()
    public Id: number;

    public constructor(init?: Partial<WidgetTimeLayouts>) { super(init); (Object as any).assign(this, init); }
}

export class WidgetBookingLayouts extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    // @Required()
    public Code: string;

    public ModifiedDate?: string;
    // @Required()
    public Id: number;

    public constructor(init?: Partial<WidgetBookingLayouts>) { super(init); (Object as any).assign(this, init); }
}

export class WidgetBookingMethods extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    // @Required()
    public Code: string;

    public ModifiedDate?: string;
    // @Required()
    public Id: number;

    public constructor(init?: Partial<WidgetBookingMethods>) { super(init); (Object as any).assign(this, init); }
}

export class HomepageWidgetSetting extends BaseModel
{
    // @Ignore()
    public WidgetServiceLayoutOptions: WidgetServiceLayouts[];

    // @Ignore()
    public WidgetTimeLayoutOptions: WidgetTimeLayouts[];

    // @Ignore()
    public WidgetBookingLayoutOptions: WidgetBookingLayouts[];

    // @Ignore()
    public WidgetBookingMethodOptions: WidgetBookingMethods[];

    // @Required()
    public ServiceLayoutId: number;

    // @Required()
    public TimeLayoutId: number;

    // @Required()
    public BookingLayoutId: number;

    // @Required()
    public PrimaryColor: string;

    // @Required()
    public ShowServiceImage: boolean;

    // @Required()
    public ShowNextAvailableTime: boolean;

    // @Required()
    public ShowEndTime: boolean;

    public BookedTimeSlotText: string;
    // @Required()
    public DarkTheme: boolean;

    // @Required()
    public ShowRebateCodeField: boolean;

    public ModifiedDate?: string;
    // @Required()
    public EnableCreateAccount: boolean;

    // @Required()
    public EnableLogin: boolean;

    // @Required()
    public EnableDirectBooking: boolean;

    // @Required()
    public EnableFacebookLogin: boolean;

    // @Required()
    public Id: string;

    public constructor(init?: Partial<HomepageWidgetSetting>) { super(init); (Object as any).assign(this, init); }
}

export class HomepageTemplate extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    public ImageUrl: string;
    // @Required()
    public Premium: boolean;

    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<HomepageTemplate>) { super(init); (Object as any).assign(this, init); }
}

export class HeroSectionStyle extends BaseModel
{
    // @Required()
    public Name: string;

    public Description: string;
    public ModifiedDate?: string;
    // @Required()
    public Id: number;

    public constructor(init?: Partial<HeroSectionStyle>) { super(init); (Object as any).assign(this, init); }
}

export class HomepageSetting extends BaseModel implements ICompany
{
    // @Ignore()
    public HomepageTemplateOptions: HomepageTemplate[];

    // @Ignore()
    public HomepageHeroSectionStyleOptions: HeroSectionStyle[];

    // @Ignore()
    public CompanyId?: string;

    public WelcomePageHeading: string;
    public WelcomePageBody: string;
    public AboutUsPageHeading: string;
    public AboutUsPageBody: string;
    // @Required()
    public HomePageTemplateId: number;

    public ImageUrl: string;
    // @Required()
    public Updated: string;

    // @Required()
    public Created: string;

    public HomepageHeading: string;
    // @Required()
    public HeroSectionStyleId: number;

    public ModifiedDate?: string;
    // @Required()
    public ShowRating: boolean;

    // @Required()
    public EnableHomepage: boolean;

    // @Required()
    public Id: string;

    public constructor(init?: Partial<HomepageSetting>) { super(init); (Object as any).assign(this, init); }
}

export class LicenseTypeItem extends BaseModel
{
    // @Ignore()
    public Name: string;

    // @Required()
    public LicenseTypesId: number;

    // @Required()
    public LicenseItemsId: number;

    // @Required()
    public NumberOfItems: number;

    public Id: number;
    public ModifiedDate?: string;

    public constructor(init?: Partial<LicenseTypeItem>) { super(init); (Object as any).assign(this, init); }
}

export class Country extends BaseModel
{
    // @References("typeof(BokaMera.API.ServiceModel.Db.Currency)")
    public CurrencyId: string;

    public CurrencyInfo: Currency;
    // @Required()
    public Name: string;

    public Culture: string;
    public TimeZone: string;
    public ModifiedDate?: string;
    // @Required()
    public Id: string;

    public constructor(init?: Partial<Country>) { super(init); (Object as any).assign(this, init); }
}

export class LicensePrice extends BaseModel
{
    // @Ignore()
    public Country: Country;

    // @Ignore()
    public MonthlyPayment: boolean;

    // @Required()
    public LicenseTypeId: number;

    // @Required()
    public CountryId: string;

    // @Required()
    public Price: number;

    public ModifiedDate?: string;

    public constructor(init?: Partial<LicensePrice>) { super(init); (Object as any).assign(this, init); }
}

export class LicenseType extends BaseModel
{
    // @Ignore()
    public LicenseItems: IList<LicenseTypeItem>;

    // @Ignore()
    public Prices: IList<LicensePrice>;

    // @Ignore()
    public PeriodOfNoticeDays: number;

    // @Ignore()
    public NextLicenseOption: LicenseType;

    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    // @Required()
    public ExtraLicenseOption: boolean;

    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<LicenseType>) { super(init); (Object as any).assign(this, init); }
}

export class License extends BaseModel
{
    public Type: LicenseType;
    // @Required()
    public CompanyId: string;

    public Id: number;
    // @Required()
    public TypeId: number;

    // @Required()
    public ValidFrom: string;

    // @Required()
    public ValidTo: string;

    // @Required()
    public Active: boolean;

    // @Required()
    public Updated: string;

    // @Required()
    public Created: string;

    public ModifiedDate?: string;
    public MetaData: string;

    public constructor(init?: Partial<License>) { super(init); (Object as any).assign(this, init); }
}

export class CompanyCategory extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Header: string;

    // @Required()
    public Description: string;

    public ImageUrl: string;
    // @Required()
    public Active: boolean;

    public SortOrder?: number;
    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<CompanyCategory>) { super(init); (Object as any).assign(this, init); }
}

export class Company extends BaseModel
{
    // @Ignore()
    public Status: CompanyStatus;

    // @Ignore()
    public Active: boolean;

    // @Ignore()
    public CustomerCustomFieldsConfig: IList<CustomFieldConfig>;

    // @Ignore()
    public BookingAgreements: string;

    // @Ignore()
    public BookingSettings: BookingSettings;

    // @Ignore()
    public CompanyType: CompanyType;

    // @Ignore()
    public CodeLockSettings: CodeLockSetting;

    // @Ignore()
    public PaymentSettings: PaymentSetting;

    // @Ignore()
    public Settings: CompanySetting;

    // @Ignore()
    public WidgetSettings: HomepageWidgetSetting;

    // @Ignore()
    public HomepageSettings: HomepageSetting;

    // @Ignore()
    public RatingScore: AverageRatingScore;

    // @Ignore()
    public Ratings: Rating[];

    // @Ignore()
    public Distance?: number;

    // @Ignore()
    public Licenses: License[];

    // @Ignore()
    public ActiveLicenses: License[];

    // @Ignore()
    public CurrentLicense: License;

    // @Ignore()
    public IsFreeAccount: boolean;

    // @Ignore()
    public DefaultLanguage: CultureInfo;

    public Category: CompanyCategory;
    // @Ignore()
    public Lat: number;

    // @Ignore()
    public Lon: number;

    // @Ignore()
    public IsFavorite: boolean;

    // @Ignore()
    public ExternalReferences: IList<ExternalReference>;

    // @Required()
    public OrganisationNumber: string;

    // @Required()
    public StatusId: number;

    // @Required()
    public CategoryId: number;

    // @Required()
    public SitePath: string;

    // @Required()
    public Name: string;

    public Street1: string;
    public Street2: string;
    public ZipCode: string;
    public City: string;
    public OpeningHours: string;
    public FaxNumber: string;
    // @Required()
    public Email: string;

    public Phone: string;
    public Details: string;
    public LogoType: string;
    // @Required()
    public ApprovedByAdmin: boolean;

    // @Required()
    public Updated: string;

    // @Required()
    public Created: string;

    public IpAddress: string;
    public Homepage: string;
    public DomainName: string;
    // @Required()
    public CountryId: string;

    // @Required()
    public CompanyOwnerId: number;

    public TypeId?: number;
    public ModifiedDate?: string;
    // @Required()
    public Id: string;

    public constructor(init?: Partial<Company>) { super(init); (Object as any).assign(this, init); }
}

export class BookingStatus extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public Description: string;

    // @Required()
    public Color: string;

    // @Required()
    public Icon: string;

    public ModifiedDate?: string;
    public Id: number;

    public constructor(init?: Partial<BookingStatus>) { super(init); (Object as any).assign(this, init); }
}

export class Booking extends BaseModel implements IInterval, ICustomFieldTable, IBaseModelUpdated, IBaseModelCreated
{
    // @Ignore()
    public Customer: Customer;

    // @Ignore()
    public Service: Service;

    // @Ignore()
    public CalendarExport: CalendarExport;

    // @Ignore()
    public Log: BookingLog[];

    // @Ignore()
    public PaymentLog: PaymentLog[];

    // @Ignore()
    public CheckoutLogs: PaymentDetails[];

    // @Ignore()
    public Prices: BookingPrice[];

    // @Ignore()
    public Status: BookingStatusEnum;

    // @Ignore()
    public isReserved: boolean;

    // @Ignore()
    public StatusName: string;

    // @Ignore()
    public Company: Company;

    // @References("typeof(BokaMera.API.ServiceModel.Db.Currency)")
    public CurrencyId: string;

    public CurrencyInfo: Currency;
    public BookingStatus: BookingStatus;
    // @Ignore()
    public TotalPrice?: number;

    // @Ignore()
    public TotalSpots?: number;

    // @Ignore()
    public Resources: IList<Resource>;

    // @Ignore()
    public ExternalReferences: IList<ExternalReference>;

    // @Ignore()
    public BookedResources: IList<BookedResourceType>;

    // @Ignore()
    public CustomFieldsConfig: IList<CustomFieldConfig>;

    // @Ignore()
    public CustomFieldsData: IList<CustomFieldDataResponse>;

    // @Ignore()
    public Active: boolean;

    // @Ignore()
    public LastTimeToUnBook?: string;

    // @Ignore()
    public PriceMappings: PriceMapping[];

    // @Required()
    public UpdatedDate: string;

    // @Required()
    public CreatedDate: string;

    // @Required()
    public CompanyId: string;

    public Id: number;
    // @Required()
    public CustomerId: string;

    // @Required()
    public ServiceId: number;

    // @Required()
    public StatusId: number;

    public UnbookedOn?: string;
    public UnbookedComments: string;
    public BookedComments: string;
    // @Required()
    public BookedBy: string;

    public UnBookedBy: string;
    // @Required()
    public SendSmsReminder: boolean;

    // @Required()
    public SendEmailReminder: boolean;

    // @Required()
    public SendSmsConfirmation: boolean;

    public RebateCode: string;
    public Comments: string;
    public IpAddress: string;
    // @Required()
    public NumberOfBookedSpots: number;

    public CommentsToCustomer: string;
    public PaymentExpiration?: string;
    public PriceVat?: number;
    // @Required()
    public SendEmailConfirmation: boolean;

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

    // @Required()
    public To: string;

    public constructor(init?: Partial<Booking>) { super(init); (Object as any).assign(this, init); }
}

// @ValidateRequest(Validator="IsAuthenticated")
export class GroupedBookingQuery extends QueryDb<Booking, GroupedBookingQueryResponse>
{
    /** @description Query for specific Booked Resources, default is all resources */
    // @DataMember(Name="BookedResourceIds")
    // @ApiMember(Description="Query for specific Booked Resources, default is all resources", ParameterType="query")
    public BookedResourceIds: number[];

    /** @description Query for specific Booked Resource types, default is all resource types */
    // @DataMember(Name="BookedResourceTypeIds")
    // @ApiMember(Description="Query for specific Booked Resource types, default is all resource types", ParameterType="query")
    public BookedResourceTypeIds: number[];

    /** @description 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.")
    public CompanyId?: string;

    /** @description Id of the booking */
    // @ApiMember(Description="Id of the booking", ParameterType="path")
    public Id?: number;

    /** @description Start of interval to query for bookings. UTC+0 and parameter as defined by date-time - RFC3339 */
    // @ApiMember(DataType="dateTime", Description="Start of interval to query for bookings. UTC+0 and parameter as defined by date-time - RFC3339", ParameterType="query")
    public BookingStart?: string;

    /** @description End of interval to query for bookings. UTC+0 and parameter as defined by date-time - RFC3339 */
    // @ApiMember(DataType="dateTime", Description="End of interval to query for bookings. UTC+0 and parameter as defined by date-time - RFC3339", ParameterType="query")
    public BookingEnd?: string;

    /** @description Set to true if you want to include all bookings for the company. Only administrators are allowed to do this. */
    // @ApiMember(DataType="boolean", Description="Set to true if you want to include all bookings for the company. Only administrators are allowed to do this.", ParameterType="query")
    public CompanyBookings: boolean;

    /** @description Query for specific booking statuses. Valid statuses are TimeBooked = 1, TimeUnbooked = 2, TimeReserved = 3, TimeCanceled = 4. Default is 1,3 for active statuses. */
    // @ApiMember(Description="Query for specific booking statuses. Valid statuses are TimeBooked = 1, TimeUnbooked = 2, TimeReserved = 3, TimeCanceled = 4. Default is 1,3 for active statuses.", ParameterType="query")
    public IncludeStatuses: number[];

    /** @description If you want to include the connected resourcetypes and resources */
    // @ApiMember(DataType="boolean", Description="If you want to include the connected resourcetypes and resources", ParameterType="query")
    public IncludeCustomFields: boolean;

    /** @description If you want to include the connected custom fields */
    // @ApiMember(DataType="boolean", Description="If you want to include the connected custom fields", ParameterType="query")
    public IncludeCustomFieldValues: boolean;

    /** @description If you want to include the price information on the booking */
    // @ApiMember(DataType="boolean", Description="If you want to include the price information on the booking", ParameterType="query")
    public IncludePriceInformation: boolean;

    /** @description If you want to include booking status information */
    // @ApiMember(DataType="boolean", Description="If you want to include booking status information", ParameterType="query")
    public IncludeStatusInformation: boolean;

    /** @description If you want to include the payment log on the booking */
    // @ApiMember(DataType="boolean", Description="If you want to include the payment log on the booking", ParameterType="query")
    public IncludePaymentLog: boolean;

    /** @description If you want to include the checkouts for payson */
    // @ApiMember(DataType="boolean", Description="If you want to include the checkouts for payson", ParameterType="query")
    public IncludeCheckouts: boolean;

    /** @description If you want to include the booked resourcetypes and it's booked resources */
    // @ApiMember(DataType="boolean", Description="If you want to include the booked resourcetypes and it's booked resources", ParameterType="query")
    public IncludeBookedResourceTypes: boolean;

    /** @description If you want to include the company information for the booking */
    // @ApiMember(DataType="boolean", Description="If you want to include the company information for the booking", ParameterType="query")
    public IncludeCompanyInformation: boolean;

    /** @description If you want to include the customer information for the booking */
    // @ApiMember(DataType="boolean", Description="If you want to include the customer information for the booking", ParameterType="query")
    public IncludeCustomerInformation: boolean;

    /** @description Start of interval to query for bookings when they where created. UTC+0 and parameter as defined by date-time - RFC3339 */
    // @ApiMember(DataType="dateTime", Description="Start of interval to query for bookings when they where created. UTC+0 and parameter as defined by date-time - RFC3339", ParameterType="query")
    public CreatedFrom?: string;

    /** @description End of interval to query for bookings when they where created. UTC+0 and parameter as defined by date-time - RFC3339 */
    // @ApiMember(DataType="dateTime", Description="End of interval to query for bookings when they where created. UTC+0 and parameter as defined by date-time - RFC3339", ParameterType="query")
    public CreatedTo?: string;

    /** @description Query for specific booking statuses. Valid statuses are TimeBooked = 1, TimeUnbooked = 2, TimeReserved = 3, TimeCanceled = 4, AwaitingPayment = 5, AwaitingPaymentNoTimeLimit = 6, BookedAndPayed = 7, 8 = AwaitingPaymentRequestFromAdmin, 9 = AwaitingPaymentFromProvider. Default is all. */
    // @ApiMember(Description="Query for specific booking statuses. Valid statuses are TimeBooked = 1, TimeUnbooked = 2, TimeReserved = 3, TimeCanceled = 4, AwaitingPayment = 5, AwaitingPaymentNoTimeLimit = 6, BookedAndPayed = 7, 8 = AwaitingPaymentRequestFromAdmin, 9 = AwaitingPaymentFromProvider. Default is all.", ParameterType="query")
    public StatusIds: number[];

    /** @description Query for specific customer */
    // @ApiMember(Description="Query for specific customer", ParameterType="query")
    public CustomerId?: string;

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

    public ResponseStatus: ResponseStatus;

    public constructor(init?: Partial<GroupedBookingQuery>) { super(init); (Object as any).assign(this, init); }
}

export class Customer extends BaseModel implements IUser, ICustomFieldTable
{
    public IdentityId: number;
    public Id: string;
    // @Ignore()
    public CustomerId: string;

    // @Ignore()
    public AccessKeys: IList<UserAccessKeys>;

    public Email: string;
    // @Ignore()
    public ExternalReferences: IList<ExternalReference>;

    // @Ignore()
    public CustomFieldsConfig: IList<CustomFieldConfig>;

    // @Ignore()
    public CustomFieldsData: IList<CustomFieldDataResponse>;

    // @Ignore()
    public Comments: IList<CustomerComment>;

    public Firstname: string;
    // @Ignore()
    public ImageUrl: string;

    // @Required()
    public Active: boolean;

    public FacebookUsername: string;
    // @Required()
    public Updated: string;

    // @Required()
    public Created: string;

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

    public SubscribedToNewsletter: boolean;

    public constructor(init?: Partial<Customer>) { super(init); (Object as any).assign(this, init); }
}

export class Currency extends BaseModel
{
    // @Required()
    public Name: string;

    // @Required()
    public CurrencySign: string;

    // @Required()
    public Active: boolean;

    public ModifiedDate?: string;
    // @Required()
    public Id: string;

    public constructor(init?: Partial<Currency>) { super(init); (Object as any).assign(this, init); }
}

export class AccessKeyTypeResponse
{
    public Id: number;
    public KeyType: string;
    public Description: string;

    public constructor(init?: Partial<AccessKeyTypeResponse>) { (Object as any).assign(this, init); }
}

// @DataContract
export class QueryResponse<AccessKeyTypeResponse>
{
    // @DataMember(Order=1)
    public Offset: number;

    // @DataMember(Order=2)
    public Total: number;

    // @DataMember(Order=3)
    public Results: AccessKeyTypeResponse[];

    // @DataMember(Order=4)
    public Meta: { [index: string]: string; };

    // @DataMember(Order=5)
    public ResponseStatus: ResponseStatus;

    public constructor(init?: Partial<QueryResponse<AccessKeyTypeResponse>>) { (Object as any).assign(this, init); }
}

TypeScript GroupedBookingQuery DTOs

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

HTTP + CSV

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

GET /bookings/grouped HTTP/1.1 
Host: testapi.bokamera.se 
Accept: text/csv
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{"Offset":0,"Total":0,"Results":[{"Bookings":[{"Id":0,"Status":"Booked","StatusId":0,"StatusName":"String","StatusInfo":{"Id":0,"Name":"String","Description":"String","Icon":"String","Color":"String"},"SendEmailReminder":false,"SendSmsReminder":false,"SendSmsConfirmation":false,"SendEmailConfirmation":false,"LastTimeToUnBook":"0001-01-01T00:00:00","CustomFields":[{"Id":0,"Name":"String","Description":"String","Width":0,"DataType":"String","DefaultValue":"String","IsMandatory":false,"MandatoryErrorMessage":"String","MaxLength":0,"MultipleLineText":false,"RegEx":"String","RegExErrorMessage":"String","Values":[{"Value":"String"}]}],"CustomFieldValues":[{"Id":0,"Column":"String","Name":"String","Description":"String","Value":"String","DataType":"String"}],"BookedResourceTypes":[{"Id":0,"Name":"String","Resources":[{"Id":0,"Name":"String","Color":"String","Email":"String","MobilePhone":"String","AccessGroup":"String","EmailNotification":false,"SMSNotification":false,"EmailReminder":false,"SMSReminder":false}]}],"Company":{"Name":"String","Category":"String","Street1":"String","Street2":"String","ZipCode":"String","City":"String","CountryId":"String","Longitude":"String","Latitude":"String","Phone":"String","Email":"String","HomePage":"String","SitePath":"String","IsFavorite":false,"PaymentProviderId":0},"Customer":{"Firstname":"String","Lastname":"String","Email":"String","Phone":"String","FacebookUserName":"String","ImageUrl":"String","CorporateIdentityNumber":"String","InvoiceAddress1":"String","InvoiceAddress2":"String","InvoiceCity":"String","InvoicePostalCode":"String","InvoiceCountryCode":"String"},"Quantities":[{"Id":0,"Quantity":0,"Price":0,"PriceBeforeRebate":0,"CurrencyId":"String","PriceSign":"String","Category":"String","VAT":0,"PriceText":"String","OccupiesSpot":false}],"Service":{"Id":0,"Name":"String","Description":"String","LengthInMinutes":0,"MaxNumberOfSpotsPerBooking":0,"GroupBooking":{"Active":false,"Min":0,"Max":0},"MultipleResource":{"Active":false,"Min":0,"Max":0},"IsGroupBooking":false,"IsPaymentEnabled":false},"PaymentExpiration":"0001-01-01T00:00:00","Log":[{"Id":0,"BookingId":0,"EventTypeId":0,"EventType":{"Id":0,"Name":"String","Description":"String"},"Comments":"String","UserName":"String"}],"PaymentLog":[{"Id":0,"BookingId":0,"PaymentReferenceId":"String","OrderItemReferenceId":"String","PaymentProviderId":0,"Amount":0,"VAT":0,"AmountCredited":0,"CurrencyId":"String","CurrencyInfo":{"Id":"String","Name":"String","CurrencySign":"String"},"Comments":"String"}],"CheckoutLog":[{"BookingId":0,"PurchaseId":0,"ExpirationTime":"0001-01-01T00:00:00","Snippet":"String","Status":"String","Message":"String"}],"ExternalReference":[{"ReferenceType":"String","ExternalData":"String","CreatedBy":"String"}],"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}},"CalendarExportStatus":{"CalendarId":"String","BookingId":0,"Synced":false},"LengthInMinutes":0,"BookedBy":"String","BookedComments":"String","UnbookedComments":"String","CommentsToCustomer":"String","UnbookedOn":"0001-01-01T00:00:00","CancellationCode":"String","RatingCode":"String"}]}],"Meta":{"String":"String"},"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}}}