BokaMera.API.Host

<back to all web services

UpdateBooking

Requires Authentication
The following routes are available for this service:
PUT/bookings/{Id}Update existing bookingUpdates an existing booking if you are authorized to do so. Note. Price is not updated automatically when changing number of spots or resources.

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

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

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

export class CustomFieldValueResponse
{
    public Value: string;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

export class ServiceInfoResponse
{
    public Id: number;
    public Name: string;
    public Description: string;
    public ImageUrl: string;
    public LengthInMinutes?: number;
    public MaxNumberOfSpotsPerBooking: number;
    public 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 BookingLogEventTypeResponse
{
    /** @description The event type id */
    // @ApiMember(Description="The event type id")
    public Id: number;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

export class AddCustomField
{
    public Id: number;
    public Value: string;

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

export class ResourceToBook
{
    public ResourceTypeId: number;
    public ResourceId: number;

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

export class ResourceToUpdate
{
    /** @description Set this property to true if you want to autoselected not provided resources. If false you will need to add all resources you want to have booked */
    // @ApiMember(Description="Set this property to true if you want to autoselected not provided resources. If false you will need to add all resources you want to have booked")
    public AutoSelectNotDefinedResources: boolean;

    /** @description All resources to be booked, if AutoSelectNotDefinedResources is true you will only need to provide the one you want to select, rest will be auto selected if avaiable.  */
    // @ApiMember(Description="All resources to be booked, if AutoSelectNotDefinedResources is true you will only need to provide the one you want to select, rest will be auto selected if avaiable. ")
    public Resources: ResourceToBook[];

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

// @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
// @ValidateRequest(Validator="IsAuthenticated")
export class UpdateBooking implements INullableInterval
{
    /** @description The company id, if empty will use the company id for the user you are logged in with. */
    // @ApiMember(Description="The company id, if empty will use the company id for the user you are logged in with.")
    public CompanyId?: string;

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

    public From?: string;
    public To?: string;
    public Status?: BookingStatusEnum;
    public PaymentExpiration?: string;
    public LastTimeToUnBook?: string;
    /** @description If you want to add comments when canceling a booking you can add them here, this comments are send in the confirmation to the customer */
    // @ApiMember(Description="If you want to add comments when canceling a booking you can add them here, this comments are send in the confirmation to the customer")
    public UnbookedComments: string;

    /** @description If you want to add comments to a booking you can add them here, this comments are never shared with the customer */
    // @ApiMember(Description="If you want to add comments to a booking you can add them here, this comments are never shared with the customer")
    public BookedComments: string;

    /** @description If you want to add comments to the booking that is sent to the customer, you can add them here. Comments will be sent in the booking confirmation */
    // @ApiMember(Description="If you want to add comments to the booking that is sent to the customer, you can add them here. Comments will be sent in the booking confirmation")
    public CommentsToCustomer: string;

    /** @description If Custom Fields are added to the booking, here you will send the id and the value for each custom field to be updated */
    // @ApiMember(Description="If Custom Fields are added to the booking, here you will send the id and the value for each custom field to be updated")
    public CustomFields: AddCustomField[];

    /** @description Resources you want to change, leave it empty if no changes to the booked resources */
    // @ApiMember(Description="Resources you want to change, leave it empty if no changes to the booked resources")
    public Resources: ResourceToUpdate;

    /** @description If want to allow to book outside the service schedules. This means you can book a time after the schedule opening hours as long as the resource are available. This is only allowed by administrators */
    // @ApiMember(Description="If want to allow to book outside the service schedules. This means you can book a time after the schedule opening hours as long as the resource are available. This is only allowed by administrators")
    public AllowBookingOutsideSchedules: boolean;

    /** @description Any comment to save to the log when changing the booking. */
    // @ApiMember(Description="Any comment to save to the log when changing the booking.")
    public Comment: string;

    /** @description Any comment sent to user if SendSmsConfirmation or SendEmailConfirmation */
    // @ApiMember(Description="Any comment sent to user if SendSmsConfirmation or SendEmailConfirmation")
    public Message: string;

    /** @description If you want to send SMS confirmation. If null, it will take the default value of the bookings SendSMSConfirmation. */
    // @ApiMember(Description="If you want to send SMS confirmation. If null, it will take the default value of the bookings SendSMSConfirmation.")
    public SendSmsConfirmation?: boolean;

    /** @description If you want to send Email confirmation. If null, it will take the default value of the bookings SendEmailConfirmation. */
    // @ApiMember(Description="If you want to send Email confirmation. If null, it will take the default value of the bookings SendEmailConfirmation.")
    public SendEmailConfirmation?: boolean;

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

TypeScript UpdateBooking DTOs

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

HTTP + JSV

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

PUT /bookings/{Id} HTTP/1.1 
Host: api.bokamera.se 
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length

{
	CompanyId: 00000000-0000-0000-0000-000000000000,
	Id: 0,
	From: "0001-01-01T00:00:00",
	To: "0001-01-01T00:00:00",
	Status: 0,
	PaymentExpiration: "0001-01-01T00:00:00",
	LastTimeToUnBook: "0001-01-01T00:00:00",
	UnbookedComments: String,
	BookedComments: String,
	CommentsToCustomer: String,
	CustomFields: 
	[
		{
			Id: 0,
			Value: String
		}
	],
	Resources: 
	{
		AutoSelectNotDefinedResources: False,
		Resources: 
		[
			{
				ResourceTypeId: 0,
				ResourceId: 0
			}
		]
	},
	AllowBookingOutsideSchedules: False,
	Comment: String,
	Message: String,
	SendSmsConfirmation: False,
	SendEmailConfirmation: False
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

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