BokaMera.API.Host

<back to all web services

AddResourceTypeToService

Requires Authentication
Requires any of the roles:bookingsupplier-administrator-write, superadmin
The following routes are available for this service:
POST/services/{Id}/addresourcetypeAdd ResourceType(s) to serviceAdd ResourceType(s) to service for the currently logged in user. Note: you will need to add all ResourceType(s) you want to have connected, only administrators are allowed to add ResourceType(s) to services.

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

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 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 BookingStatusOptionsResponse
{
    public Id: number;
    public Name: string;
    public Description: string;

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

export class DayOfWeekDto
{
    public DayOfWeekId: number;
    public DotNetDayOfWeekId: number;
    public DayOfWeek: string;

    public constructor(init?: Partial<DayOfWeekDto>) { (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 MinNumberOfSpotsPerBooking: 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 ServicePriceResponse
{
    /** @description The company id */
    // @ApiMember(Description="The company id")
    public CompanyId: string;

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

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

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

    /** @description The price calculation type id, 1 = Normal, price is for the service total duration, 2 = Price is per minute, 3 = Price is per hour, 4= Price is per day */
    // @ApiMember(Description="The price calculation type id, 1 = Normal, price is for the service total duration, 2 = Price is per minute, 3 = Price is per hour, 4= Price is per day")
    public CalculationTypeId: 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 VAT in percent */
    // @ApiMember(Description="The price VAT in percent")
    public VAT: number;

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

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

    /** @description The valid from date for the price. */
    // @ApiMember(Description="The valid from date for the price.")
    public From: string;

    /** @description The valid to date for the price. */
    // @ApiMember(Description="The valid to date for the price.")
    public To: string;

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

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

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

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

    /** @description If the price is only valid for specific days of week */
    // @ApiMember(Description="If the price is only valid for specific days of week")
    public IsDaysOfWeekSpecific: boolean;

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

export class BaseModel
{

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

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

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 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 interface IBookedTime extends IInterval
{
    Id: number;
    ServiceId: number;
    BookedSpots: number;
    TotalSpots: number;
    PauseAfterInMinutes: number;
    Status: BookingStatusEnum;
    StatusId: number;
    Customer: BookedCustomer;
}

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 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 interface IDbConnectionFactory
{
}

export class ServerData
{
    public HTTP_HOST: string;
    public HTTP_CONNECTION: string;
    public HTTP_CACHE_CONTROL: string;
    public HTTP_ACCEPT: string;
    public HTTP_USER_AGENT: string;
    public HTTP_ACCEPT_ENCODING: string;
    public HTTP_ACCEPT_LANGUAGE: string;
    public PATH: string;
    public SERVER_SOFTWARE: string;
    public SERVER_NAME: string;
    public SERVER_ADDR: string;
    public SERVER_PORT: string;
    public REMOTE_ADDR: string;
    public REMOTE_PORT: string;
    public GATEWAY_INTERFACE: string;
    public SERVER_PROTOCOL: string;
    public REQUEST_METHOD: string;
    public QUERY_STRING: string;
    public REQUEST_TIME: string;

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

export class Credentials
{
    public hash: string;
    public id: string;
    public version: string;
    public client: string;
    public serverdata: ServerData;
    public time: string;
    public test: string;
    public language: string;

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

export class CheckoutData
{
    public terms: string;
    public privacyPolicy: string;
    public redirectOnSuccess: string;

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

export class CheckoutPaymentData
{
    public currency: string;
    public language: string;
    public country: string;
    public autoactivate: string;
    public orderid: string;
    public returnmethod: string;
    public accepturl: string;
    public cancelurl: string;
    public callbackurl: string;

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

export class PaymentInfo
{
    public paymentdate: string;
    public paymentterms: string;
    public yourreference: string;
    public ourreference: string;
    public projectname: string;
    public deliverymethod: string;
    public deliveryterms: string;

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

export class CartHandling
{
    public withouttax: string;
    public taxrate: string;

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

export class CartTotal
{
    public rounding: string;
    public withouttax: string;
    public tax: string;
    public withtax: string;

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

export class Shipping
{
    public firstname: string;
    public lastname: string;
    public company: string;
    public street: string;
    public street2: string;
    public zip: string;
    public city: string;
    public country: string;
    public phone: string;
    public withouttax: string;
    public taxrate: string;

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

export class Cart
{
    public Handling: CartHandling;
    public Total: CartTotal;
    public Shipping: Shipping;

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

export class CustomerBilling
{
    public firstname: string;
    public lastname: string;
    public company: string;
    public street: string;
    public street2: string;
    public zip: string;
    public city: string;
    public country: string;
    public phone: string;
    public email: string;

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

export class QvicklyCustomer
{
    public nr: string;
    public pno: string;
    public Billing: CustomerBilling;

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

export class InitCheckoutData
{
    public CheckoutData: CheckoutData;
    public PaymentData: CheckoutPaymentData;
    public PaymentInfo: PaymentInfo;
    public Articles: QvicklyArticle[];
    public Cart: Cart;
    public QvicklyCustomer: QvicklyCustomer;

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

export class InitCheckoutRequestBody
{
    public credentials: Credentials;
    public data: InitCheckoutData;
    public function: string;

    public constructor(init?: Partial<InitCheckoutRequestBody>) { (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 class QvikclyPaymentData
{
    public method: string;
    public paymentplanid: string;
    public currency: string;
    public country: string;
    public language: string;
    public autoactivate: string;
    public orderid: string;
    public status: string;
    public paymentid_related: string;
    public url: string;

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

export class Card
{
    public promptname: string;
    public recurring: string;
    public recurringnr: string;
    public accepturl: string;
    public cancelurl: string;
    public callbackurl: string;
    public returnmethod: string;

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

export class Settlement
{
    public number: string;
    public date: string;

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

export class QvicklyPaymentResponse
{
    public PaymentData: QvikclyPaymentData;
    public PaymentInfo: PaymentInfo;
    public Card: Card;
    public Settlement: Settlement;
    public QvicklyCustomer: QvicklyCustomer;
    public Articles: QvicklyArticle[];
    public Cart: Cart;

    public constructor(init?: Partial<QvicklyPaymentResponse>) { (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 CustomerType
{
    Person = 'Person',
    Business = 'Business',
}

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 enum CompanyStatus
{
    Registered = 1,
    AwaitingApproval = 2,
    Approved = 3,
    Inactive = 4,
    ClosedDown = 5,
    NotApproved = 6,
}

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 BookingStatusOptions
{
    public Id: number;
    public Name: string;
    public Description: string;

    public constructor(init?: Partial<BookingStatusOptions>) { (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 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 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 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;
    public SendCustomerInformationToExternalProviders: boolean;
    // @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 ShowSubscribeToNewsletter: 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 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 LicenseTypeItem extends BaseModel
{
    // @Ignore()
    public Name: string;

    // @Ignore()
    public LicenseType: LicenseType;

    // @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 Active: boolean;
    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 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 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 Company: Company;

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

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

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

    // @Ignore()
    public RebateCodes: IList<RebateCode>;

    public Firstname: string;
    // @Ignore()
    public FullName: 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 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 BaseOptions implements INestedOptions
{
    public Expand: string[];
    public ExtraParams: { [index: string]: Object; };

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

export class SessionAfterExpirationRecoveryOptions implements INestedOptions
{
    public AllowPromotionCodes?: boolean;
    public Enabled?: boolean;

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

export class SessionAfterExpirationOptions implements INestedOptions
{
    public Recovery: SessionAfterExpirationRecoveryOptions;

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

export class SessionAutomaticTaxLiabilityOptions implements INestedOptions
{
    public Account: string;
    public Type: string;

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

export class SessionAutomaticTaxOptions implements INestedOptions
{
    public Enabled?: boolean;
    public Liability: SessionAutomaticTaxLiabilityOptions;

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

export class SessionConsentCollectionPaymentMethodReuseAgreementOptions implements INestedOptions
{
    public Position: string;

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

export class SessionConsentCollectionOptions implements INestedOptions
{
    public PaymentMethodReuseAgreement: SessionConsentCollectionPaymentMethodReuseAgreementOptions;
    public Promotions: string;
    public TermsOfService: string;

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

export class SessionCustomFieldDropdownOptionOptions implements INestedOptions
{
    public Label: string;
    public Value: string;

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

export class SessionCustomFieldDropdownOptions implements INestedOptions
{
    public DefaultValue: string;
    public Options: SessionCustomFieldDropdownOptionOptions[];

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

export class SessionCustomFieldLabelOptions implements INestedOptions
{
    public Custom: string;
    public Type: string;

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

export class SessionCustomFieldNumericOptions implements INestedOptions
{
    public DefaultValue: string;
    public MaximumLength?: number;
    public MinimumLength?: number;

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

export class SessionCustomFieldTextOptions implements INestedOptions
{
    public DefaultValue: string;
    public MaximumLength?: number;
    public MinimumLength?: number;

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

export class SessionCustomFieldOptions implements INestedOptions
{
    public Dropdown: SessionCustomFieldDropdownOptions;
    public Key: string;
    public Label: SessionCustomFieldLabelOptions;
    public Numeric: SessionCustomFieldNumericOptions;
    public Optional?: boolean;
    public Text: SessionCustomFieldTextOptions;
    public Type: string;

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

export class SessionCustomTextAfterSubmitOptions implements INestedOptions
{
    public Message: string;

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

export class SessionCustomTextShippingAddressOptions implements INestedOptions
{
    public Message: string;

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

export class SessionCustomTextSubmitOptions implements INestedOptions
{
    public Message: string;

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

export class SessionCustomTextTermsOfServiceAcceptanceOptions implements INestedOptions
{
    public Message: string;

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

export class SessionCustomTextOptions implements INestedOptions
{
    public AfterSubmit: SessionCustomTextAfterSubmitOptions;
    public ShippingAddress: SessionCustomTextShippingAddressOptions;
    public Submit: SessionCustomTextSubmitOptions;
    public TermsOfServiceAcceptance: SessionCustomTextTermsOfServiceAcceptanceOptions;

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

export class SessionCustomerUpdateOptions implements INestedOptions
{
    public Address: string;
    public Name: string;
    public Shipping: string;

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

export class SessionDiscountOptions implements INestedOptions
{
    public Coupon: string;
    public PromotionCode: string;

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

export class SessionInvoiceCreationInvoiceDataCustomFieldOptions implements INestedOptions
{
    public Name: string;
    public Value: string;

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

export class SessionInvoiceCreationInvoiceDataIssuerOptions implements INestedOptions
{
    public Account: string;
    public Type: string;

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

export class SessionInvoiceCreationInvoiceDataRenderingOptionsOptions implements INestedOptions
{
    public AmountTaxDisplay: string;

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

export class SessionInvoiceCreationInvoiceDataOptions implements INestedOptions, IHasMetadata
{
    public AccountTaxIds: string[];
    public CustomFields: SessionInvoiceCreationInvoiceDataCustomFieldOptions[];
    public Description: string;
    public Footer: string;
    public Issuer: SessionInvoiceCreationInvoiceDataIssuerOptions;
    public Metadata: { [index: string]: string; };
    public RenderingOptions: SessionInvoiceCreationInvoiceDataRenderingOptionsOptions;

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

export class SessionInvoiceCreationOptions implements INestedOptions
{
    public Enabled?: boolean;
    public InvoiceData: SessionInvoiceCreationInvoiceDataOptions;

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

export class SessionLineItemAdjustableQuantityOptions implements INestedOptions
{
    public Enabled?: boolean;
    public Maximum?: number;
    public Minimum?: number;

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

export class SessionLineItemPriceDataProductDataOptions implements INestedOptions, IHasMetadata
{
    public Description: string;
    public Images: string[];
    public Metadata: { [index: string]: string; };
    public Name: string;
    public TaxCode: string;

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

export class SessionLineItemPriceDataRecurringOptions implements INestedOptions
{
    public Interval: string;
    public IntervalCount?: number;

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

export class SessionLineItemPriceDataOptions implements INestedOptions
{
    public Currency: string;
    public Product: string;
    public ProductData: SessionLineItemPriceDataProductDataOptions;
    public Recurring: SessionLineItemPriceDataRecurringOptions;
    public TaxBehavior: string;
    public UnitAmount?: number;
    public UnitAmountDecimal?: number;

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

export class SessionLineItemOptions implements INestedOptions
{
    public AdjustableQuantity: SessionLineItemAdjustableQuantityOptions;
    public DynamicTaxRates: string[];
    public Price: string;
    public PriceData: SessionLineItemPriceDataOptions;
    public Quantity?: number;
    public TaxRates: string[];

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

export class AddressOptions implements INestedOptions
{
    public City: string;
    public Country: string;
    public Line1: string;
    public Line2: string;
    public PostalCode: string;
    public State: string;

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

export class ChargeShippingOptions implements INestedOptions
{
    public Address: AddressOptions;
    public Carrier: string;
    public Name: string;
    public Phone: string;
    public TrackingNumber: string;

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

export class SessionPaymentIntentDataTransferDataOptions implements INestedOptions
{
    public Amount?: number;
    public Destination: string;

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

export class SessionPaymentIntentDataOptions implements INestedOptions, IHasMetadata
{
    public ApplicationFeeAmount?: number;
    public CaptureMethod: string;
    public Description: string;
    public Metadata: { [index: string]: string; };
    public OnBehalfOf: string;
    public ReceiptEmail: string;
    public SetupFutureUsage: string;
    public Shipping: ChargeShippingOptions;
    public StatementDescriptor: string;
    public StatementDescriptorSuffix: string;
    public TransferData: SessionPaymentIntentDataTransferDataOptions;
    public TransferGroup: string;

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

export class SessionPaymentMethodDataOptions implements INestedOptions
{
    public AllowRedisplay: string;

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

export class SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions implements INestedOptions
{
    public CustomMandateUrl: string;
    public DefaultFor: string[];
    public IntervalDescription: string;
    public PaymentSchedule: string;
    public TransactionType: string;

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

export class SessionPaymentMethodOptionsAcssDebitOptions implements INestedOptions
{
    public Currency: string;
    public MandateOptions: SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions;
    public SetupFutureUsage: string;
    public VerificationMethod: string;

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

export class SessionPaymentMethodOptionsAffirmOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsAfterpayClearpayOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsAlipayOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsAmazonPayOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsAuBecsDebitOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsBacsDebitOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsBancontactOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsBoletoOptions implements INestedOptions
{
    public ExpiresAfterDays?: number;
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsCardInstallmentsOptions implements INestedOptions
{
    public Enabled?: boolean;

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

export class SessionPaymentMethodOptionsCardOptions implements INestedOptions
{
    public Installments: SessionPaymentMethodOptionsCardInstallmentsOptions;
    public RequestThreeDSecure: string;
    public SetupFutureUsage: string;
    public StatementDescriptorSuffixKana: string;
    public StatementDescriptorSuffixKanji: string;

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

export class SessionPaymentMethodOptionsCashappOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions implements INestedOptions
{
    public Country: string;

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

export class SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions implements INestedOptions
{
    public EuBankTransfer: SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions;
    public RequestedAddressTypes: string[];
    public Type: string;

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

export class SessionPaymentMethodOptionsCustomerBalanceOptions implements INestedOptions
{
    public BankTransfer: SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions;
    public FundingType: string;
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsEpsOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsFpxOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsGiropayOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsGrabpayOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsIdealOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsKlarnaOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsKonbiniOptions implements INestedOptions
{
    public ExpiresAfterDays?: number;
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsLinkOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsMobilepayOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsMultibancoOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsOxxoOptions implements INestedOptions
{
    public ExpiresAfterDays?: number;
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsP24Options implements INestedOptions
{
    public SetupFutureUsage: string;
    public TosShownAndAccepted?: boolean;

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

export class SessionPaymentMethodOptionsPaynowOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsPaypalOptions implements INestedOptions
{
    public CaptureMethod: string;
    public PreferredLocale: string;
    public Reference: string;
    public RiskCorrelationId: string;
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsPixOptions implements INestedOptions
{
    public ExpiresAfterSeconds?: number;

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

export class SessionPaymentMethodOptionsRevolutPayOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsSepaDebitOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsSofortOptions implements INestedOptions
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsSwishOptions implements INestedOptions
{
    public Reference: string;

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

export class SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions implements INestedOptions
{
    public Permissions: string[];
    public Prefetch: string[];

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

export class SessionPaymentMethodOptionsUsBankAccountOptions implements INestedOptions
{
    public FinancialConnections: SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions;
    public SetupFutureUsage: string;
    public VerificationMethod: string;

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

export class SessionPaymentMethodOptionsWechatPayOptions implements INestedOptions
{
    public AppId: string;
    public Client: string;
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsOptions implements INestedOptions
{
    public AcssDebit: SessionPaymentMethodOptionsAcssDebitOptions;
    public Affirm: SessionPaymentMethodOptionsAffirmOptions;
    public AfterpayClearpay: SessionPaymentMethodOptionsAfterpayClearpayOptions;
    public Alipay: SessionPaymentMethodOptionsAlipayOptions;
    public AmazonPay: SessionPaymentMethodOptionsAmazonPayOptions;
    public AuBecsDebit: SessionPaymentMethodOptionsAuBecsDebitOptions;
    public BacsDebit: SessionPaymentMethodOptionsBacsDebitOptions;
    public Bancontact: SessionPaymentMethodOptionsBancontactOptions;
    public Boleto: SessionPaymentMethodOptionsBoletoOptions;
    public Card: SessionPaymentMethodOptionsCardOptions;
    public Cashapp: SessionPaymentMethodOptionsCashappOptions;
    public CustomerBalance: SessionPaymentMethodOptionsCustomerBalanceOptions;
    public Eps: SessionPaymentMethodOptionsEpsOptions;
    public Fpx: SessionPaymentMethodOptionsFpxOptions;
    public Giropay: SessionPaymentMethodOptionsGiropayOptions;
    public Grabpay: SessionPaymentMethodOptionsGrabpayOptions;
    public Ideal: SessionPaymentMethodOptionsIdealOptions;
    public Klarna: SessionPaymentMethodOptionsKlarnaOptions;
    public Konbini: SessionPaymentMethodOptionsKonbiniOptions;
    public Link: SessionPaymentMethodOptionsLinkOptions;
    public Mobilepay: SessionPaymentMethodOptionsMobilepayOptions;
    public Multibanco: SessionPaymentMethodOptionsMultibancoOptions;
    public Oxxo: SessionPaymentMethodOptionsOxxoOptions;
    public P24: SessionPaymentMethodOptionsP24Options;
    public Paynow: SessionPaymentMethodOptionsPaynowOptions;
    public Paypal: SessionPaymentMethodOptionsPaypalOptions;
    public Pix: SessionPaymentMethodOptionsPixOptions;
    public RevolutPay: SessionPaymentMethodOptionsRevolutPayOptions;
    public SepaDebit: SessionPaymentMethodOptionsSepaDebitOptions;
    public Sofort: SessionPaymentMethodOptionsSofortOptions;
    public Swish: SessionPaymentMethodOptionsSwishOptions;
    public UsBankAccount: SessionPaymentMethodOptionsUsBankAccountOptions;
    public WechatPay: SessionPaymentMethodOptionsWechatPayOptions;

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

export class SessionPhoneNumberCollectionOptions implements INestedOptions
{
    public Enabled?: boolean;

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

export class SessionSavedPaymentMethodOptionsOptions implements INestedOptions
{
    public AllowRedisplayFilters: string[];
    public PaymentMethodSave: string;

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

export class SessionSetupIntentDataOptions implements INestedOptions, IHasMetadata
{
    public Description: string;
    public Metadata: { [index: string]: string; };
    public OnBehalfOf: string;

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

export class SessionShippingAddressCollectionOptions implements INestedOptions
{
    public AllowedCountries: string[];

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

export class SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions implements INestedOptions
{
    public Unit: string;
    public Value?: number;

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

export class SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions implements INestedOptions
{
    public Unit: string;
    public Value?: number;

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

export class SessionShippingOptionShippingRateDataDeliveryEstimateOptions implements INestedOptions
{
    public Maximum: SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions;
    public Minimum: SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions;

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

export class SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions implements INestedOptions
{
    public Amount?: number;
    public TaxBehavior: string;

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

export class SessionShippingOptionShippingRateDataFixedAmountOptions implements INestedOptions
{
    public Amount?: number;
    public Currency: string;
    public CurrencyOptions: { [index: string]: SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions; };

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

export class SessionShippingOptionShippingRateDataOptions implements INestedOptions, IHasMetadata
{
    public DeliveryEstimate: SessionShippingOptionShippingRateDataDeliveryEstimateOptions;
    public DisplayName: string;
    public FixedAmount: SessionShippingOptionShippingRateDataFixedAmountOptions;
    public Metadata: { [index: string]: string; };
    public TaxBehavior: string;
    public TaxCode: string;
    public Type: string;

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

export class SessionShippingOptionOptions implements INestedOptions
{
    public ShippingRate: string;
    public ShippingRateData: SessionShippingOptionShippingRateDataOptions;

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

export class SessionSubscriptionDataInvoiceSettingsIssuerOptions implements INestedOptions
{
    public Account: string;
    public Type: string;

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

export class SessionSubscriptionDataInvoiceSettingsOptions implements INestedOptions
{
    public Issuer: SessionSubscriptionDataInvoiceSettingsIssuerOptions;

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

export class SessionSubscriptionDataTransferDataOptions implements INestedOptions
{
    public AmountPercent?: number;
    public Destination: string;

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

export class SessionSubscriptionDataTrialSettingsEndBehaviorOptions implements INestedOptions
{
    public MissingPaymentMethod: string;

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

export class SessionSubscriptionDataTrialSettingsOptions implements INestedOptions
{
    public EndBehavior: SessionSubscriptionDataTrialSettingsEndBehaviorOptions;

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

export class SessionSubscriptionDataOptions implements INestedOptions, IHasMetadata
{
    public ApplicationFeePercent?: number;
    public BillingCycleAnchor?: string;
    public DefaultTaxRates: string[];
    public Description: string;
    public InvoiceSettings: SessionSubscriptionDataInvoiceSettingsOptions;
    public Metadata: { [index: string]: string; };
    public OnBehalfOf: string;
    public ProrationBehavior: string;
    public TransferData: SessionSubscriptionDataTransferDataOptions;
    public TrialEnd?: string;
    public TrialPeriodDays?: number;
    public TrialSettings: SessionSubscriptionDataTrialSettingsOptions;

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

export class SessionTaxIdCollectionOptions implements INestedOptions
{
    public Enabled?: boolean;
    public Required: string;

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

export class SessionCreateOptions extends BaseOptions implements IHasMetadata
{
    public AfterExpiration: SessionAfterExpirationOptions;
    public AllowPromotionCodes?: boolean;
    public AutomaticTax: SessionAutomaticTaxOptions;
    public BillingAddressCollection: string;
    public CancelUrl: string;
    public ClientReferenceId: string;
    public ConsentCollection: SessionConsentCollectionOptions;
    public Currency: string;
    public CustomFields: SessionCustomFieldOptions[];
    public CustomText: SessionCustomTextOptions;
    public Customer: string;
    public CustomerCreation: string;
    public CustomerEmail: string;
    public CustomerUpdate: SessionCustomerUpdateOptions;
    public Discounts: SessionDiscountOptions[];
    public ExpiresAt?: string;
    public InvoiceCreation: SessionInvoiceCreationOptions;
    public LineItems: SessionLineItemOptions[];
    public Locale: string;
    public Metadata: { [index: string]: string; };
    public Mode: string;
    public PaymentIntentData: SessionPaymentIntentDataOptions;
    public PaymentMethodCollection: string;
    public PaymentMethodConfiguration: string;
    public PaymentMethodData: SessionPaymentMethodDataOptions;
    public PaymentMethodOptions: SessionPaymentMethodOptionsOptions;
    public PaymentMethodTypes: string[];
    public PhoneNumberCollection: SessionPhoneNumberCollectionOptions;
    public RedirectOnCompletion: string;
    public ReturnUrl: string;
    public SavedPaymentMethodOptions: SessionSavedPaymentMethodOptionsOptions;
    public SetupIntentData: SessionSetupIntentDataOptions;
    public ShippingAddressCollection: SessionShippingAddressCollectionOptions;
    public ShippingOptions: SessionShippingOptionOptions[];
    public SubmitType: string;
    public SubscriptionData: SessionSubscriptionDataOptions;
    public SuccessUrl: string;
    public TaxIdCollection: SessionTaxIdCollectionOptions;
    public UiMode: string;

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

export class SessionAfterExpirationRecovery extends StripeEntity_1<SessionAfterExpirationRecovery>
{
    public AllowPromotionCodes: boolean;
    public Enabled: boolean;
    public ExpiresAt?: string;
    public Url: string;

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

export class SessionAfterExpiration extends StripeEntity_1<SessionAfterExpiration>
{
    public Recovery: SessionAfterExpirationRecovery;

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

export class SessionAutomaticTaxLiability extends StripeEntity_1<SessionAutomaticTaxLiability>
{
    public Type: string;

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

export class SessionAutomaticTax extends StripeEntity_1<SessionAutomaticTax>
{
    public Enabled: boolean;
    public Liability: SessionAutomaticTaxLiability;
    public Status: string;

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

export class SessionConsent extends StripeEntity_1<SessionConsent>
{
    public Promotions: string;
    public TermsOfService: string;

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

export class SessionConsentCollectionPaymentMethodReuseAgreement extends StripeEntity_1<SessionConsentCollectionPaymentMethodReuseAgreement>
{
    public Position: string;

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

export class SessionConsentCollection extends StripeEntity_1<SessionConsentCollection>
{
    public PaymentMethodReuseAgreement: SessionConsentCollectionPaymentMethodReuseAgreement;
    public Promotions: string;
    public TermsOfService: string;

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

export class SessionCurrencyConversion extends StripeEntity_1<SessionCurrencyConversion>
{
    public AmountSubtotal: number;
    public AmountTotal: number;
    public FxRate: number;
    public SourceCurrency: string;

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

export class SessionCustomFieldDropdownOption extends StripeEntity_1<SessionCustomFieldDropdownOption>
{
    public Label: string;
    public Value: string;

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

export class SessionCustomFieldDropdown extends StripeEntity_1<SessionCustomFieldDropdown>
{
    public DefaultValue: string;
    public Options: SessionCustomFieldDropdownOption[];
    public Value: string;

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

export class SessionCustomFieldLabel extends StripeEntity_1<SessionCustomFieldLabel>
{
    public Custom: string;
    public Type: string;

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

export class SessionCustomFieldNumeric extends StripeEntity_1<SessionCustomFieldNumeric>
{
    public DefaultValue: string;
    public MaximumLength?: number;
    public MinimumLength?: number;
    public Value: string;

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

export class SessionCustomFieldText extends StripeEntity_1<SessionCustomFieldText>
{
    public DefaultValue: string;
    public MaximumLength?: number;
    public MinimumLength?: number;
    public Value: string;

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

export class SessionCustomField extends StripeEntity_1<SessionCustomField>
{
    public Dropdown: SessionCustomFieldDropdown;
    public Key: string;
    public Label: SessionCustomFieldLabel;
    public Numeric: SessionCustomFieldNumeric;
    public Optional: boolean;
    public Text: SessionCustomFieldText;
    public Type: string;

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

export class SessionCustomTextAfterSubmit extends StripeEntity_1<SessionCustomTextAfterSubmit>
{
    public Message: string;

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

export class SessionCustomTextShippingAddress extends StripeEntity_1<SessionCustomTextShippingAddress>
{
    public Message: string;

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

export class SessionCustomTextSubmit extends StripeEntity_1<SessionCustomTextSubmit>
{
    public Message: string;

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

export class SessionCustomTextTermsOfServiceAcceptance extends StripeEntity_1<SessionCustomTextTermsOfServiceAcceptance>
{
    public Message: string;

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

export class SessionCustomText extends StripeEntity_1<SessionCustomText>
{
    public AfterSubmit: SessionCustomTextAfterSubmit;
    public ShippingAddress: SessionCustomTextShippingAddress;
    public Submit: SessionCustomTextSubmit;
    public TermsOfServiceAcceptance: SessionCustomTextTermsOfServiceAcceptance;

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

export class Address extends StripeEntity_1<Address>
{
    public City: string;
    public Country: string;
    public Line1: string;
    public Line2: string;
    public PostalCode: string;
    public State: string;

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

export class SessionCustomerDetailsTaxId extends StripeEntity_1<SessionCustomerDetailsTaxId>
{
    public Type: string;
    public Value: string;

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

export class SessionCustomerDetails extends StripeEntity_1<SessionCustomerDetails>
{
    public Address: Address;
    public Email: string;
    public Name: string;
    public Phone: string;
    public TaxExempt: string;
    public TaxIds: SessionCustomerDetailsTaxId[];

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

export class SessionInvoiceCreationInvoiceDataCustomField extends StripeEntity_1<SessionInvoiceCreationInvoiceDataCustomField>
{
    public Name: string;
    public Value: string;

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

export class SessionInvoiceCreationInvoiceDataIssuer extends StripeEntity_1<SessionInvoiceCreationInvoiceDataIssuer>
{
    public Type: string;

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

export class SessionInvoiceCreationInvoiceDataRenderingOptions extends StripeEntity_1<SessionInvoiceCreationInvoiceDataRenderingOptions>
{
    public AmountTaxDisplay: string;

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

export class SessionInvoiceCreationInvoiceData extends StripeEntity_1<SessionInvoiceCreationInvoiceData> implements IHasMetadata
{
    public CustomFields: SessionInvoiceCreationInvoiceDataCustomField[];
    public Description: string;
    public Footer: string;
    public Issuer: SessionInvoiceCreationInvoiceDataIssuer;
    public Metadata: { [index: string]: string; };
    public RenderingOptions: SessionInvoiceCreationInvoiceDataRenderingOptions;

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

export class SessionInvoiceCreation extends StripeEntity_1<SessionInvoiceCreation>
{
    public Enabled: boolean;
    public InvoiceData: SessionInvoiceCreationInvoiceData;

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

export class CouponAppliesTo extends StripeEntity_1<CouponAppliesTo>
{
    public Products: string[];

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

export class CouponCurrencyOptions extends StripeEntity_1<CouponCurrencyOptions>
{
    public AmountOff: number;

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

export class Coupon extends StripeEntity_1<Coupon> implements IHasId, IHasMetadata, IHasObject
{
    public Id: string;
    public Object: string;
    public AmountOff?: number;
    public AppliesTo: CouponAppliesTo;
    public Created: string;
    public Currency: string;
    public CurrencyOptions: { [index: string]: CouponCurrencyOptions; };
    public Deleted?: boolean;
    public Duration: string;
    public DurationInMonths?: number;
    public Livemode: boolean;
    public MaxRedemptions?: number;
    public Metadata: { [index: string]: string; };
    public Name: string;
    public PercentOff?: number;
    public RedeemBy?: string;
    public TimesRedeemed: number;
    public Valid: boolean;

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

export class Discount extends StripeEntity_1<Discount> implements IHasId, IHasObject
{
    public Id: string;
    public Object: string;
    public CheckoutSession: string;
    public Coupon: Coupon;
    public Deleted?: boolean;
    public End?: string;
    public Invoice: string;
    public InvoiceItem: string;
    public Start: string;
    public Subscription: string;
    public SubscriptionItem: string;

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

export class LineItemDiscount extends StripeEntity_1<LineItemDiscount>
{
    public Amount: number;
    public Discount: Discount;

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

export class PriceCurrencyOptionsCustomUnitAmount extends StripeEntity_1<PriceCurrencyOptionsCustomUnitAmount>
{
    public Maximum?: number;
    public Minimum?: number;
    public Preset?: number;

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

export class PriceCurrencyOptionsTier extends StripeEntity_1<PriceCurrencyOptionsTier>
{
    public FlatAmount?: number;
    public FlatAmountDecimal?: number;
    public UnitAmount?: number;
    public UnitAmountDecimal?: number;
    public UpTo?: number;

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

export class PriceCurrencyOptions extends StripeEntity_1<PriceCurrencyOptions>
{
    public CustomUnitAmount: PriceCurrencyOptionsCustomUnitAmount;
    public TaxBehavior: string;
    public Tiers: PriceCurrencyOptionsTier[];
    public UnitAmount?: number;
    public UnitAmountDecimal?: number;

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

export class PriceCustomUnitAmount extends StripeEntity_1<PriceCustomUnitAmount>
{
    public Maximum?: number;
    public Minimum?: number;
    public Preset?: number;

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

export class PriceRecurring extends StripeEntity_1<PriceRecurring>
{
    public AggregateUsage: string;
    public Interval: string;
    public IntervalCount: number;
    public Meter: string;
    public TrialPeriodDays?: number;
    public UsageType: string;

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

export class PriceTier extends StripeEntity_1<PriceTier>
{
    public FlatAmount?: number;
    public FlatAmountDecimal?: number;
    public UnitAmount?: number;
    public UnitAmountDecimal?: number;
    public UpTo?: number;

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

export class PriceTransformQuantity extends StripeEntity_1<PriceTransformQuantity>
{
    public DivideBy: number;
    public Round: string;

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

export class Price extends StripeEntity_1<Price> implements IHasId, IHasMetadata, IHasObject
{
    public Id: string;
    public Object: string;
    public Active: boolean;
    public BillingScheme: string;
    public Created: string;
    public Currency: string;
    public CurrencyOptions: { [index: string]: PriceCurrencyOptions; };
    public CustomUnitAmount: PriceCustomUnitAmount;
    public Deleted?: boolean;
    public Livemode: boolean;
    public LookupKey: string;
    public Metadata: { [index: string]: string; };
    public Nickname: string;
    public Recurring: PriceRecurring;
    public TaxBehavior: string;
    public Tiers: PriceTier[];
    public TiersMode: string;
    public TransformQuantity: PriceTransformQuantity;
    public Type: string;
    public UnitAmount?: number;
    public UnitAmountDecimal?: number;

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

export class TaxRate extends StripeEntity_1<TaxRate> implements IHasId, IHasMetadata, IHasObject
{
    public Id: string;
    public Object: string;
    public Active: boolean;
    public Country: string;
    public Created: string;
    public Description: string;
    public DisplayName: string;
    public EffectivePercentage?: number;
    public Inclusive: boolean;
    public Jurisdiction: string;
    public JurisdictionLevel: string;
    public Livemode: boolean;
    public Metadata: { [index: string]: string; };
    public Percentage: number;
    public State: string;
    public TaxType: string;

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

export class LineItemTax extends StripeEntity_1<LineItemTax>
{
    public Amount: number;
    public Rate: TaxRate;
    public TaxabilityReason: string;
    public TaxableAmount?: number;

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

export class LineItem extends StripeEntity_1<LineItem> implements IHasId, IHasObject
{
    public Id: string;
    public Object: string;
    public AmountDiscount: number;
    public AmountSubtotal: number;
    public AmountTax: number;
    public AmountTotal: number;
    public Currency: string;
    public Deleted?: boolean;
    public Description: string;
    public Discounts: LineItemDiscount[];
    public Price: Price;
    public Quantity?: number;
    public Taxes: LineItemTax[];

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

export class SessionPaymentMethodConfigurationDetails extends StripeEntity_1<SessionPaymentMethodConfigurationDetails> implements IHasId
{
    public Id: string;
    public Parent: string;

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

export class SessionPaymentMethodOptionsAcssDebitMandateOptions extends StripeEntity_1<SessionPaymentMethodOptionsAcssDebitMandateOptions>
{
    public CustomMandateUrl: string;
    public DefaultFor: string[];
    public IntervalDescription: string;
    public PaymentSchedule: string;
    public TransactionType: string;

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

export class SessionPaymentMethodOptionsAcssDebit extends StripeEntity_1<SessionPaymentMethodOptionsAcssDebit>
{
    public Currency: string;
    public MandateOptions: SessionPaymentMethodOptionsAcssDebitMandateOptions;
    public SetupFutureUsage: string;
    public VerificationMethod: string;

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

export class SessionPaymentMethodOptionsAffirm extends StripeEntity_1<SessionPaymentMethodOptionsAffirm>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsAfterpayClearpay extends StripeEntity_1<SessionPaymentMethodOptionsAfterpayClearpay>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsAlipay extends StripeEntity_1<SessionPaymentMethodOptionsAlipay>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsAmazonPay extends StripeEntity_1<SessionPaymentMethodOptionsAmazonPay>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsAuBecsDebit extends StripeEntity_1<SessionPaymentMethodOptionsAuBecsDebit>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsBacsDebit extends StripeEntity_1<SessionPaymentMethodOptionsBacsDebit>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsBancontact extends StripeEntity_1<SessionPaymentMethodOptionsBancontact>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsBoleto extends StripeEntity_1<SessionPaymentMethodOptionsBoleto>
{
    public ExpiresAfterDays: number;
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsCardInstallments extends StripeEntity_1<SessionPaymentMethodOptionsCardInstallments>
{
    public Enabled: boolean;

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

export class SessionPaymentMethodOptionsCard extends StripeEntity_1<SessionPaymentMethodOptionsCard>
{
    public Installments: SessionPaymentMethodOptionsCardInstallments;
    public RequestThreeDSecure: string;
    public SetupFutureUsage: string;
    public StatementDescriptorSuffixKana: string;
    public StatementDescriptorSuffixKanji: string;

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

export class SessionPaymentMethodOptionsCashapp extends StripeEntity_1<SessionPaymentMethodOptionsCashapp>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer extends StripeEntity_1<SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer>
{
    public Country: string;

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

export class SessionPaymentMethodOptionsCustomerBalanceBankTransfer extends StripeEntity_1<SessionPaymentMethodOptionsCustomerBalanceBankTransfer>
{
    public EuBankTransfer: SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer;
    public RequestedAddressTypes: string[];
    public Type: string;

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

export class SessionPaymentMethodOptionsCustomerBalance extends StripeEntity_1<SessionPaymentMethodOptionsCustomerBalance>
{
    public BankTransfer: SessionPaymentMethodOptionsCustomerBalanceBankTransfer;
    public FundingType: string;
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsEps extends StripeEntity_1<SessionPaymentMethodOptionsEps>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsFpx extends StripeEntity_1<SessionPaymentMethodOptionsFpx>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsGiropay extends StripeEntity_1<SessionPaymentMethodOptionsGiropay>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsGrabpay extends StripeEntity_1<SessionPaymentMethodOptionsGrabpay>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsIdeal extends StripeEntity_1<SessionPaymentMethodOptionsIdeal>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsKlarna extends StripeEntity_1<SessionPaymentMethodOptionsKlarna>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsKonbini extends StripeEntity_1<SessionPaymentMethodOptionsKonbini>
{
    public ExpiresAfterDays?: number;
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsLink extends StripeEntity_1<SessionPaymentMethodOptionsLink>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsMobilepay extends StripeEntity_1<SessionPaymentMethodOptionsMobilepay>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsMultibanco extends StripeEntity_1<SessionPaymentMethodOptionsMultibanco>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsOxxo extends StripeEntity_1<SessionPaymentMethodOptionsOxxo>
{
    public ExpiresAfterDays: number;
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsP24 extends StripeEntity_1<SessionPaymentMethodOptionsP24>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsPaynow extends StripeEntity_1<SessionPaymentMethodOptionsPaynow>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsPaypal extends StripeEntity_1<SessionPaymentMethodOptionsPaypal>
{
    public CaptureMethod: string;
    public PreferredLocale: string;
    public Reference: string;
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsPix extends StripeEntity_1<SessionPaymentMethodOptionsPix>
{
    public ExpiresAfterSeconds?: number;

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

export class SessionPaymentMethodOptionsRevolutPay extends StripeEntity_1<SessionPaymentMethodOptionsRevolutPay>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsSepaDebit extends StripeEntity_1<SessionPaymentMethodOptionsSepaDebit>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsSofort extends StripeEntity_1<SessionPaymentMethodOptionsSofort>
{
    public SetupFutureUsage: string;

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

export class SessionPaymentMethodOptionsSwish extends StripeEntity_1<SessionPaymentMethodOptionsSwish>
{
    public Reference: string;

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

export class SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters extends StripeEntity_1<SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters>
{
    public AccountSubcategories: string[];

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

export class SessionPaymentMethodOptionsUsBankAccountFinancialConnections extends StripeEntity_1<SessionPaymentMethodOptionsUsBankAccountFinancialConnections>
{
    public Filters: SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters;
    public Permissions: string[];
    public Prefetch: string[];
    public ReturnUrl: string;

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

export class SessionPaymentMethodOptionsUsBankAccount extends StripeEntity_1<SessionPaymentMethodOptionsUsBankAccount>
{
    public FinancialConnections: SessionPaymentMethodOptionsUsBankAccountFinancialConnections;
    public SetupFutureUsage: string;
    public VerificationMethod: string;

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

export class SessionPaymentMethodOptions extends StripeEntity_1<SessionPaymentMethodOptions>
{
    public AcssDebit: SessionPaymentMethodOptionsAcssDebit;
    public Affirm: SessionPaymentMethodOptionsAffirm;
    public AfterpayClearpay: SessionPaymentMethodOptionsAfterpayClearpay;
    public Alipay: SessionPaymentMethodOptionsAlipay;
    public AmazonPay: SessionPaymentMethodOptionsAmazonPay;
    public AuBecsDebit: SessionPaymentMethodOptionsAuBecsDebit;
    public BacsDebit: SessionPaymentMethodOptionsBacsDebit;
    public Bancontact: SessionPaymentMethodOptionsBancontact;
    public Boleto: SessionPaymentMethodOptionsBoleto;
    public Card: SessionPaymentMethodOptionsCard;
    public Cashapp: SessionPaymentMethodOptionsCashapp;
    public CustomerBalance: SessionPaymentMethodOptionsCustomerBalance;
    public Eps: SessionPaymentMethodOptionsEps;
    public Fpx: SessionPaymentMethodOptionsFpx;
    public Giropay: SessionPaymentMethodOptionsGiropay;
    public Grabpay: SessionPaymentMethodOptionsGrabpay;
    public Ideal: SessionPaymentMethodOptionsIdeal;
    public Klarna: SessionPaymentMethodOptionsKlarna;
    public Konbini: SessionPaymentMethodOptionsKonbini;
    public Link: SessionPaymentMethodOptionsLink;
    public Mobilepay: SessionPaymentMethodOptionsMobilepay;
    public Multibanco: SessionPaymentMethodOptionsMultibanco;
    public Oxxo: SessionPaymentMethodOptionsOxxo;
    public P24: SessionPaymentMethodOptionsP24;
    public Paynow: SessionPaymentMethodOptionsPaynow;
    public Paypal: SessionPaymentMethodOptionsPaypal;
    public Pix: SessionPaymentMethodOptionsPix;
    public RevolutPay: SessionPaymentMethodOptionsRevolutPay;
    public SepaDebit: SessionPaymentMethodOptionsSepaDebit;
    public Sofort: SessionPaymentMethodOptionsSofort;
    public Swish: SessionPaymentMethodOptionsSwish;
    public UsBankAccount: SessionPaymentMethodOptionsUsBankAccount;

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

export class SessionPhoneNumberCollection extends StripeEntity_1<SessionPhoneNumberCollection>
{
    public Enabled: boolean;

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

export class SessionSavedPaymentMethodOptions extends StripeEntity_1<SessionSavedPaymentMethodOptions>
{
    public AllowRedisplayFilters: string[];
    public PaymentMethodRemove: string;
    public PaymentMethodSave: string;

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

export class SessionShippingAddressCollection extends StripeEntity_1<SessionShippingAddressCollection>
{
    public AllowedCountries: string[];

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

export class SessionShippingCostTax extends StripeEntity_1<SessionShippingCostTax>
{
    public Amount: number;
    public Rate: TaxRate;
    public TaxabilityReason: string;
    public TaxableAmount?: number;

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

export class SessionShippingCost extends StripeEntity_1<SessionShippingCost>
{
    public AmountSubtotal: number;
    public AmountTax: number;
    public AmountTotal: number;
    public Taxes: SessionShippingCostTax[];

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

export class SessionShippingDetails extends StripeEntity_1<SessionShippingDetails>
{
    public Address: Address;
    public Carrier: string;
    public Name: string;
    public Phone: string;
    public TrackingNumber: string;

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

export class SessionShippingOption extends StripeEntity_1<SessionShippingOption>
{
    public ShippingAmount: number;

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

export class SessionTaxIdCollection extends StripeEntity_1<SessionTaxIdCollection>
{
    public Enabled: boolean;
    public Required: string;

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

export class SessionTotalDetailsBreakdownDiscount extends StripeEntity_1<SessionTotalDetailsBreakdownDiscount>
{
    public Amount: number;
    public Discount: Discount;

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

export class SessionTotalDetailsBreakdownTax extends StripeEntity_1<SessionTotalDetailsBreakdownTax>
{
    public Amount: number;
    public Rate: TaxRate;
    public TaxabilityReason: string;
    public TaxableAmount?: number;

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

export class SessionTotalDetailsBreakdown extends StripeEntity_1<SessionTotalDetailsBreakdown>
{
    public Discounts: SessionTotalDetailsBreakdownDiscount[];
    public Taxes: SessionTotalDetailsBreakdownTax[];

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

export class SessionTotalDetails extends StripeEntity_1<SessionTotalDetails>
{
    public AmountDiscount: number;
    public AmountShipping?: number;
    public AmountTax: number;
    public Breakdown: SessionTotalDetailsBreakdown;

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

export class Session extends StripeEntity_1<Session> implements IHasId, IHasMetadata, IHasObject
{
    public Id: string;
    public Object: string;
    public AfterExpiration: SessionAfterExpiration;
    public AllowPromotionCodes?: boolean;
    public AmountSubtotal?: number;
    public AmountTotal?: number;
    public AutomaticTax: SessionAutomaticTax;
    public BillingAddressCollection: string;
    public CancelUrl: string;
    public ClientReferenceId: string;
    public ClientSecret: string;
    public Consent: SessionConsent;
    public ConsentCollection: SessionConsentCollection;
    public Created: string;
    public Currency: string;
    public CurrencyConversion: SessionCurrencyConversion;
    public CustomFields: SessionCustomField[];
    public CustomText: SessionCustomText;
    public CustomerCreation: string;
    public CustomerDetails: SessionCustomerDetails;
    public CustomerEmail: string;
    public ExpiresAt: string;
    public InvoiceCreation: SessionInvoiceCreation;
    public LineItems: StripeList<LineItem>;
    public Livemode: boolean;
    public Locale: string;
    public Metadata: { [index: string]: string; };
    public Mode: string;
    public PaymentMethodCollection: string;
    public PaymentMethodConfigurationDetails: SessionPaymentMethodConfigurationDetails;
    public PaymentMethodOptions: SessionPaymentMethodOptions;
    public PaymentMethodTypes: string[];
    public PaymentStatus: string;
    public PhoneNumberCollection: SessionPhoneNumberCollection;
    public RecoveredFrom: string;
    public RedirectOnCompletion: string;
    public ReturnUrl: string;
    public SavedPaymentMethodOptions: SessionSavedPaymentMethodOptions;
    public ShippingAddressCollection: SessionShippingAddressCollection;
    public ShippingCost: SessionShippingCost;
    public ShippingDetails: SessionShippingDetails;
    public ShippingOptions: SessionShippingOption[];
    public Status: string;
    public SubmitType: string;
    public SuccessUrl: string;
    public TaxIdCollection: SessionTaxIdCollection;
    public TotalDetails: SessionTotalDetails;
    public UiMode: string;
    public Url: string;

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

export class CustomSessionData
{
    public Session: Session;
    public LineItems: LineItem[];

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

export interface IPaysonPaymentCheckout1
{
}

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 InternalReferenceId: string;

    // @Required()
    public ArticleTypeId: 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 PayableEntity extends BaseModel
{
    // @Ignore()
    public DbFactory: IDbConnectionFactory;

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

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

    // @Ignore()
    public StripePaymentManager: IBokameraPaymentManager<SessionCreateOptions, CustomSessionData, CustomSessionData>;

    // @Ignore()
    public PaysonPaymentCheckout1: IPaysonPaymentCheckout1;

    // @Ignore()
    public Logger: ILogger<PayableEntity>;

    // @Ignore()
    public InternalReferenceId: string;

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

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

    // @Ignore()
    public Customer: Customer;

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

    // @Ignore()
    public Company: Company;

    public constructor(init?: Partial<PayableEntity>) { 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 ArticleServiceRelation extends BaseModel
{
    // @Required()
    public CompanyId: string;

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

    // @Required()
    public ArticleId: number;

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

export enum ArticleTypeEnum
{
    ServiceArticle = 1,
    StandAloneArticle = 2,
    RebateCodePunchTicketArticle = 3,
    RebateCodeGiftCardArticle = 4,
    RebateCodeValueCardArticle = 5,
}

export class Article extends BaseModel implements IBaseModelCreated, IBaseModelUpdated
{
    public Company: Company;
    public CurrencyInfo: Currency;
    public ArticleServiceRelations: ArticleServiceRelation[];
    // @Ignore()
    public ServiceIds: number[];

    // @Ignore()
    public ArticleType: ArticleTypeEnum;

    // @Ignore()
    public ArticleTypeName: string;

    // @Required()
    public CompanyId: string;

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

    // @Required()
    public ArticleTypeId: number;

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

    // @Required()
    public Amount: number;

    // @Required()
    public Price: number;

    // @Required()
    // @StringLength(50)
    public CurrencyId: string;

    // @Required()
    public UpdatedDate: string;

    // @Required()
    public CreatedDate: string;

    public ModifiedDate?: string;

    public constructor(init?: Partial<Article>) { 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 RebateCodeEmailSentToCustomer: boolean;
    public MessageToReceiver: string;
    public Buyer: boolean;

    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 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 PaymentDetails extends BaseModel implements IBaseModelCreated, IBaseModelUpdated
{
    // @Ignore()
    public QvicklyCheckoutSerialized: QvicklyCheckoutResponse;

    // @Ignore()
    public Payson2CheckoutSerialized: Payson2CheckoutResponse;

    // @Required()
    public CompanyId: string;

    // @Required()
    public InternalReferenceId: string;

    // @Required()
    public ArticleTypeId: number;

    // @Required()
    public ExternalResponseData: string;

    // @Required()
    public ExternalResponseReference: string;

    // @Required()
    public PaymentProviderId: number;

    // @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 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 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 Booking extends PayableEntity implements IInterval, ICustomFieldTable, IBaseModelUpdated, IBaseModelCreated
{
    // @Ignore()
    public Service: Service;

    // @Ignore()
    public CalendarExport: CalendarExport;

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

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

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

    // @Ignore()
    public Status: BookingStatusEnum;

    // @Ignore()
    public IsReserved: boolean;

    // @Ignore()
    public StatusName: 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 DeterministicId: string;

    // @Ignore()
    public Active: boolean;

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

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

    // @Ignore()
    public InternalReferenceId: string;

    // @Required()
    public UpdatedDate: string;

    // @Required()
    public CreatedDate: 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;
    // @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); }
}

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

    // @Ignore()
    public RebateCode: RebateCode;

    // @Ignore()
    public Customer: Customer;

    public Id: number;
    public CompanyId: string;
    public Note: string;
    // @Required()
    public RebateCodeId: number;

    // @Required()
    public Amount: number;

    // @Required()
    public Usage: number;

    public BookingId?: number;
    // @Required()
    public UpdatedDate: string;

    // @Required()
    public CreatedDate: string;

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

export class RebateCode extends PayableEntity
{
    // @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: RebateCodeStatus;
    // @Ignore()
    public Article: Article;

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

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

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

    // @Ignore()
    public RebateCodeStatus: RebateCodeStatus;

    // @Ignore()
    public RebateCodeType: RebateCodeType;

    // @Ignore()
    public Transactions: RebateCodeTransaction[];

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

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

    // @Ignore()
    public CurrentNumberOfUsesPerCustomer: number;

    // @Ignore()
    public IsSpecificByDayOfWeek: boolean;

    // @Ignore()
    public Active: boolean;

    // @Ignore()
    public ActiveByStatus: boolean;

    // @Ignore()
    public RebateCodeCurrencySign: string;

    public CurrencyInfo: Currency;
    // @Ignore()
    public PaymentReceived: boolean;

    // @Ignore()
    public InternalReferenceId: 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 UpdatedDate: string;

    // @Required()
    public FromTime: string;

    // @Required()
    public ToTime: string;

    public ModifiedDate?: string;
    public Id: number;
    public ArticleId?: 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 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 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 MinNumberOfSpotsPerBooking: number;

    // @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 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 interface ISchedule
{
    Resources: IList<Resource>;
    Type: ScheduleType;
    Active: boolean;
    IsResourceSpecific: boolean;
}

export class ServiceSchedules
{
    public ScheduleType: ScheduleType;
    public RecurringSchedules: ISchedule[];
    public DateSchedules: ISchedule[];

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

export class CompanyRatingSummary
{
    /** @description The average rating score */
    // @ApiMember(Description="The average rating score")
    public AverageScore: number;

    /** @description The number of ratings of score 1 */
    // @ApiMember(Description="The number of ratings of score 1")
    public RatingScore1Count: number;

    /** @description The number of ratings of score 2 */
    // @ApiMember(Description="The number of ratings of score 2")
    public RatingScore2Count: number;

    /** @description The number of ratings of score 3 */
    // @ApiMember(Description="The number of ratings of score 3")
    public RatingScore3Count: number;

    /** @description The number of ratings of score 4 */
    // @ApiMember(Description="The number of ratings of score 4")
    public RaingScore4Count: number;

    /** @description The number of ratings of score 5 */
    // @ApiMember(Description="The number of ratings of score 5")
    public RatingScore5Count: number;

    /** @description The number of ratings */
    // @ApiMember(Description="The number of ratings")
    public Count: number;

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

export class RatingReviewResponse
{
    /** @description The title for the review */
    // @ApiMember(Description="The title for the review")
    public Title: string;

    /** @description The description for the review */
    // @ApiMember(Description="The description for the review")
    public Description: string;

    /** @description The rating score */
    // @ApiMember(Description="The rating score")
    public RatingScore: number;

    /** @description The review author */
    // @ApiMember(Description="The review author")
    public Author: string;

    /** @description The created date */
    // @ApiMember(Description="The created date")
    public Created: string;

    /** @description The review answer from the company */
    // @ApiMember(Description="The review answer from the company")
    public ReviewAnswer: string;

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

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

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

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

    /** @description The resource email */
    // @ApiMember(Description="The resource email")
    public Email: string;

    /** @description The resource phone */
    // @ApiMember(Description="The resource phone")
    public Phone: string;

    /** @description The resource color */
    // @ApiMember(Description="The resource color")
    public Color: string;

    /** @description The resource image */
    // @ApiMember(Description="The resource image")
    public ImageUrl: string;

    /** @description The priority of the resource */
    // @ApiMember(Description="The priority of the resource")
    public Priority: number;

    /** @description If the resource want to receive email notifications */
    // @ApiMember(Description="If the resource want to receive email notifications")
    public EmailNotification: boolean;

    /** @description If the resource want to receive sms notifications */
    // @ApiMember(Description="If the resource want to receive sms notifications")
    public SMSNotification: boolean;

    /** @description If the resource want to receive email reminders */
    // @ApiMember(Description="If the resource want to receive email reminders")
    public EmailReminder: boolean;

    /** @description If the resource want to receive sms reminders */
    // @ApiMember(Description="If the resource want to receive sms reminders")
    public SMSReminder: boolean;

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

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

    /** @description The resourcetype is selectable by customer */
    // @ApiMember(Description="The resourcetype is selectable by customer")
    public SelectableByUser: boolean;

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

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

    /** @description The resources in the resourcetype. Only shows active resources if not admin. */
    // @ApiMember(Description="The resources in the resourcetype. Only shows active resources if not admin.")
    public Resources: ServiceResourceTypeResource[];

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

export class ServiceQueryResponse
{
    public Id: number;
    public Name: string;
    public Description: string;
    public ImageUrl: string;
    public TotalSpots: number;
    /** @description If this setting is turned on the remaining spots (if Totalspots > 1) is locked from be booked by another customer. */
    // @ApiMember(Description="If this setting is turned on the remaining spots (if Totalspots > 1) is locked from be booked by another customer.")
    public LockSpotsToBooking?: boolean;

    public MinNumberOfSpotsPerBooking: number;
    public MaxNumberOfSpotsPerBooking: number;
    public MinNumberOfResourcesToBook: number;
    public MaxNumberOfResourcesToBook: number;
    public UnbookBeforeDays: number;
    public UnbookBeforeHours: number;
    public UnbookBeforeMinutes: number;
    /** @description What type of schedule is connected to the service.  RecurringSchedule = 1, DateSchedule = 2 */
    // @ApiMember(Description="What type of schedule is connected to the service.  RecurringSchedule = 1, DateSchedule = 2")
    public ScheduleType: ScheduleType;

    /** @description What type of schedule is connected to the service.  RecurringSchedule = 1, DateSchedule = 2 */
    // @ApiMember(Description="What type of schedule is connected to the service.  RecurringSchedule = 1, DateSchedule = 2")
    public ScheduleTypeId: number;

    public BookBeforeDays: number;
    public BookBeforeHours: number;
    public BookBeforeMinutes: number;
    public Group: string;
    public EnableBookingQueue: boolean;
    public EnableCodeLockSync: boolean;
    public EnableCustomerManualPayment: boolean;
    public SortOrder: number;
    public Active: boolean;
    public IsGroupBooking: boolean;
    public GroupBooking: GroupBookingSettings;
    public MultipleResource: MultipleResourceSettings;
    public IsPaymentEnabled: boolean;
    /** @description Maximum numbers of minutes the booking payment must be completed before automatically unbooked */
    // @ApiMember(Description="Maximum numbers of minutes the booking payment must be completed before automatically unbooked")
    public MaxPaymentTime: number;

    /** @description If the booking should be either 1 = Booked) or 3 = Reserved. Default is 1 = Booked. */
    // @ApiMember(Description="If the booking should be either 1 = Booked) or 3 = Reserved. Default is 1 = Booked.")
    public BookingStatusId: number;

    public OnlyVisibleByAdmin: boolean;
    public LengthInMinutes?: number;
    public DurationTypeId: number;
    public Duration?: number;
    public MinDuration?: number;
    public MaxDuration?: number;
    public DurationInterval?: number;
    public PauseAfterBooking: number;
    public CustomFields: CustomFieldConfigData[];
    public CustomFieldValues: CustomFieldDataResponse[];
    public BookingCustomFields: CustomFieldConfigData[];
    public CustomerCustomFields: CustomFieldConfigData[];
    /** @description The booking status options to choose from */
    // @ApiMember(Description="The booking status options to choose from")
    public BookingStatusOptions: BookingStatusOptionsResponse[];

    public Prices: ServicePriceResponse[];
    public Schedules: ServiceSchedules;
    public RatingSummary: CompanyRatingSummary;
    public Reviews: RatingReviewResponse[];
    public ResourceTypes: ServiceResourceTypeResponse[];
    public ResponseStatus: ResponseStatus;
    public PriceViewTypeId?: number;

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

export class AddResourceTypeService implements ICompany
{
    /** @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 The resourcetype id */
    // @ApiMember(Description="The resourcetype id")
    public Id: number;

    /** @description If the resources within the resourcetype should be selectable by customer when creating a booking */
    // @ApiMember(Description="If the resources within the resourcetype should be selectable by customer when creating a booking")
    public SelectableByUser: boolean;

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

// @ValidateRequest(Validator="IsAuthenticated")
export class AddResourceTypeToService
{
    /** @description The company id */
    // @ApiMember(Description="The company id", IsRequired=true)
    public CompanyId: string;

    /** @description The service id */
    // @ApiMember(Description="The service id", IsRequired=true, ParameterType="path")
    public Id: number;

    /** @description The ResourceType(s) to be added */
    // @ApiMember(Description="The ResourceType(s) to be added")
    public ResourceTypes: AddResourceTypeService[];

    public constructor(init?: Partial<AddResourceTypeToService>) { (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 interface IBokameraPaymentManager<TCreatedCheckoutResponse, TCheckoutResponse, TPaymentResponse>
{
}

export class QvicklyArticle
{
    public artnr: string;
    public title: string;
    public quantity: number;
    public aprice: number;
    public tax: number;
    public discount: number;
    public withouttax: number;
    public taxrate: number;

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

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 StripeEntity implements IStripeEntity
{

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

export class StripeEntity_1<T> extends StripeEntity
{

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

export class StripeList<T> extends StripeEntity_1<StripeList<T>> implements IHasObject
{

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

export interface ILogger<TCategoryName> extends ILogger
{
}

TypeScript AddResourceTypeToService 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.

POST /services/{Id}/addresourcetype HTTP/1.1 
Host: testapi.bokamera.se 
Accept: text/csv
Content-Type: text/csv
Content-Length: length

{"Id":0,"ResourceTypes":[{"CompanyId":"00000000-0000-0000-0000-000000000000","Id":0,"SelectableByUser":false}]}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{"Id":0,"Name":"String","Description":"String","TotalSpots":0,"LockSpotsToBooking":false,"MinNumberOfSpotsPerBooking":0,"MaxNumberOfSpotsPerBooking":0,"MinNumberOfResourcesToBook":0,"MaxNumberOfResourcesToBook":0,"UnbookBeforeDays":0,"UnbookBeforeHours":0,"UnbookBeforeMinutes":0,"ScheduleType":"NotDefined","ScheduleTypeId":0,"BookBeforeDays":0,"BookBeforeHours":0,"BookBeforeMinutes":0,"Group":"String","EnableBookingQueue":false,"EnableCodeLockSync":false,"EnableCustomerManualPayment":false,"SortOrder":0,"Active":false,"IsGroupBooking":false,"GroupBooking":{"Active":false,"Min":0,"Max":0},"MultipleResource":{"Active":false,"Min":0,"Max":0},"IsPaymentEnabled":false,"MaxPaymentTime":0,"BookingStatusId":0,"OnlyVisibleByAdmin":false,"LengthInMinutes":0,"DurationTypeId":0,"Duration":0,"MinDuration":0,"MaxDuration":0,"DurationInterval":0,"PauseAfterBooking":0,"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"}],"BookingCustomFields":[{"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"}]}],"CustomerCustomFields":[{"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"}]}],"BookingStatusOptions":[{"Id":0,"Name":"String","Description":"String"}],"Prices":[{"Id":0,"ServiceId":0,"Price":0,"CalculationTypeId":0,"CurrencyId":"String","PriceSign":"String","VAT":0,"Category":"String","PriceText":"String","DaysOfWeek":[{"DayOfWeekId":0,"DotNetDayOfWeekId":0,"DayOfWeek":"String"}],"FromTime":"00:00:00","ToTime":"00:00:00","Service":{"Id":0,"Name":"String","Description":"String","LengthInMinutes":0,"MaxNumberOfSpotsPerBooking":0,"MinNumberOfSpotsPerBooking":0,"GroupBooking":{"Active":false,"Min":0,"Max":0},"MultipleResource":{"Active":false,"Min":0,"Max":0},"IsGroupBooking":false,"IsPaymentEnabled":false},"IsTimeSpecific":false,"IsDaysOfWeekSpecific":false}],"Schedules":{"ScheduleType":"NotDefined","RecurringSchedules":[{}],"DateSchedules":[{}]},"RatingSummary":{"AverageScore":0,"RatingScore1Count":0,"RatingScore2Count":0,"RatingScore3Count":0,"RaingScore4Count":0,"RatingScore5Count":0,"Count":0},"Reviews":[{"Title":"String","Description":"String","RatingScore":0,"Author":"String","ReviewAnswer":"String"}],"ResourceTypes":[{"Id":0,"SelectableByUser":false,"Name":"String","Description":"String","Resources":[{"Id":0,"Name":"String","Description":"String","Email":"String","Phone":"String","Color":"String","Priority":0,"EmailNotification":false,"SMSNotification":false,"EmailReminder":false,"SMSReminder":false}]}],"ResponseStatus":{"ErrorCode":"String","Message":"String","StackTrace":"String","Errors":[{"ErrorCode":"String","FieldName":"String","Message":"String","Meta":{"String":"String"}}],"Meta":{"String":"String"}},"PriceViewTypeId":0}