PUT | /bookings/{Id} | Update existing booking | Updates an existing booking if you are authorized to do so. Note. Price is not updated automatically when changing number of spots or resources. |
---|
import java.math.*
import java.util.*
import net.servicestack.client.*
@ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
@ValidateRequest(Validator="IsAuthenticated")
open class UpdateBooking : INullableInterval
{
/**
* 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.")
var CompanyId:UUID? = null
/**
* Id of the booking
*/
@ApiMember(Description="Id of the booking", ParameterType="path")
var Id:Int? = null
var From:Date? = null
var To:Date? = null
var Status:BookingStatusEnum? = null
var PaymentExpiration:Date? = null
var LastTimeToUnBook:Date? = null
/**
* 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")
var UnbookedComments:String? = null
/**
* 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")
var BookedComments:String? = null
/**
* 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")
var CommentsToCustomer:String? = null
/**
* 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")
var CustomFields:ArrayList<AddCustomField> = ArrayList<AddCustomField>()
/**
* 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")
var Resources:ResourceToUpdate? = null
/**
* 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")
var AllowBookingOutsideSchedules:Boolean? = null
/**
* Any comment to save to the log when changing the booking.
*/
@ApiMember(Description="Any comment to save to the log when changing the booking.")
var Comment:String? = null
/**
* Any comment sent to user if SendSmsConfirmation or SendEmailConfirmation
*/
@ApiMember(Description="Any comment sent to user if SendSmsConfirmation or SendEmailConfirmation")
var Message:String? = null
/**
* 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.")
var SendSmsConfirmation:Boolean? = null
/**
* 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.")
var SendEmailConfirmation:Boolean? = null
}
enum class BookingStatusEnum(val value:Int)
{
Booked(1),
Unbooked(2),
Reserved(3),
Canceled(4),
AwaitingPayment(5),
AwaitingPaymentNoTimeLimit(6),
Payed(7),
AwaitingPaymentRequestFromAdmin(8),
AwaitingPaymentFromProvider(9),
Invoiced(10),
}
open class AddCustomField
{
var Id:Int? = null
var Value:String? = null
}
open class ResourceToUpdate
{
/**
* 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")
var AutoSelectNotDefinedResources:Boolean? = null
/**
* 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. ")
var Resources:ArrayList<ResourceToBook> = ArrayList<ResourceToBook>()
}
open class ResourceToBook
{
var ResourceTypeId:Int? = null
var ResourceId:Int? = null
}
open class BookingQueryResponse
{
var Id:Int? = null
var CompanyId:UUID? = null
var From:Date? = null
var To:Date? = null
var Status:BookingStatusEnum? = null
var StatusId:Int? = null
var StatusName:String? = null
var StatusInfo:BookingStatusQueryResponse? = null
var SendEmailReminder:Boolean? = null
var SendSmsReminder:Boolean? = null
var SendSmsConfirmation:Boolean? = null
var SendEmailConfirmation:Boolean? = null
var LastTimeToUnBook:Date? = null
var CustomFields:ArrayList<CustomFieldConfigData> = ArrayList<CustomFieldConfigData>()
var CustomFieldValues:ArrayList<CustomFieldDataResponse> = ArrayList<CustomFieldDataResponse>()
var BookedResourceTypes:ArrayList<BookedResourceType> = ArrayList<BookedResourceType>()
var Company:BookedCompany? = null
var Customer:BookedCustomer? = null
var Quantities:ArrayList<BookedQuantity> = ArrayList<BookedQuantity>()
var Service:ServiceInfoResponse? = null
var PaymentExpiration:Date? = null
var Log:ArrayList<BookingLogQueryResponse> = ArrayList<BookingLogQueryResponse>()
var PaymentLog:ArrayList<BookingPaymentLogQueryResponse> = ArrayList<BookingPaymentLogQueryResponse>()
var CheckoutLog:ArrayList<BookingCheckoutQueryResponse> = ArrayList<BookingCheckoutQueryResponse>()
var ExternalReference:ArrayList<ExternalReferenceResponse> = ArrayList<ExternalReferenceResponse>()
var ResponseStatus:ResponseStatus? = null
var CalendarExportStatus:BookingCalendarExportStatus? = null
var LengthInMinutes:Int? = null
var BookedBy:String? = null
var BookedComments:String? = null
var UnbookedComments:String? = null
var CommentsToCustomer:String? = null
var CreatedDate:Date? = null
var UpdatedDate:Date? = null
var UnbookedOn:Date? = null
var CancellationCode:String? = null
var RatingCode:String? = null
}
open class BookingStatusQueryResponse
{
var Id:Int? = null
var Name:String? = null
var Description:String? = null
var Icon:String? = null
var Color:String? = null
}
open class CustomFieldConfigData
{
/**
* Custom field id
*/
@ApiMember(Description="Custom field id")
var Id:Int? = null
/**
* Configuration name. Example: 'Number of persons'.
*/
@ApiMember(Description="Configuration name. Example: 'Number of persons'.")
var Name:String? = null
/**
* Custom field description. Example: 'For how many persons is this booking?'
*/
@ApiMember(Description="Custom field description. Example: 'For how many persons is this booking?'")
var Description:String? = null
/**
* Field width. Example: 20 for 20px
*/
@ApiMember(Description="Field width. Example: 20 for 20px")
var Width:Int? = null
/**
* Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
*/
@ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
var DataType:String? = null
/**
* Default value of the field. Example: '3'
*/
@ApiMember(Description="Default value of the field. Example: '3'")
var DefaultValue:String? = null
/**
* 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")
var IsMandatory:Boolean? = null
/**
* 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")
var MandatoryErrorMessage:String? = null
/**
* Max lenght of the field
*/
@ApiMember(Description="Max lenght of the field")
var MaxLength:Int? = null
/**
* If the field should have multiple lines
*/
@ApiMember(Description="If the field should have multiple lines")
var MultipleLineText:Boolean? = null
/**
* Regular expression used for validation of the field
*/
@ApiMember(Description="Regular expression used for validation of the field")
var RegEx:String? = null
/**
* Error message shown if the regular expression validation failed
*/
@ApiMember(Description="Error message shown if the regular expression validation failed")
var RegExErrorMessage:String? = null
/**
* 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")
var Values:ArrayList<CustomFieldValueResponse> = ArrayList<CustomFieldValueResponse>()
}
open class CustomFieldValueResponse
{
var Value:String? = null
}
open class CustomFieldDataResponse
{
var Id:Int? = null
var Column:String? = null
var Name:String? = null
var Description:String? = null
var Value:String? = null
/**
* Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
*/
@ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
var DataType:String? = null
}
open class BookedResourceType
{
/**
* The resource type id
*/
@ApiMember(Description="The resource type id")
var Id:Int? = null
/**
* The resource type name
*/
@ApiMember(Description="The resource type name")
var Name:String? = null
/**
* The resources inside resource type
*/
@ApiMember(Description="The resources inside resource type")
var Resources:ArrayList<BookedResource> = ArrayList<BookedResource>()
}
open class BookedResource
{
var Id:Int? = null
var Name:String? = null
var Color:String? = null
var ImageUrl:Uri? = null
var Email:String? = null
var MobilePhone:String? = null
var AccessGroup:String? = null
var EmailNotification:Boolean? = null
var SMSNotification:Boolean? = null
var EmailReminder:Boolean? = null
var SMSReminder:Boolean? = null
}
open class BookedCompany
{
var Id:UUID? = null
var Name:String? = null
var LogoType:Uri? = null
var Category:String? = null
var Street1:String? = null
var Street2:String? = null
var ZipCode:String? = null
var City:String? = null
var CountryId:String? = null
var Longitude:String? = null
var Latitude:String? = null
var Phone:String? = null
var Email:String? = null
var HomePage:String? = null
var SitePath:String? = null
var IsFavorite:Boolean? = null
var PaymentProviderId:Int? = null
}
open class BookedCustomer
{
var Id:UUID? = null
var Firstname:String? = null
var Lastname:String? = null
var Email:String? = null
var Phone:String? = null
var FacebookUserName:String? = null
var ImageUrl:String? = null
var CorporateIdentityNumber:String? = null
var InvoiceAddress1:String? = null
var InvoiceAddress2:String? = null
var InvoiceCity:String? = null
var InvoicePostalCode:String? = null
var InvoiceCountryCode:String? = null
}
open class BookedQuantity
{
/**
* The quantity Id
*/
@ApiMember(Description="The quantity Id")
var Id:Int? = null
/**
* The quantity for booked on this price category
*/
@ApiMember(Description="The quantity for booked on this price category")
var Quantity:Int? = null
/**
* The price
*/
@ApiMember(Description="The price")
var Price:Double? = null
/**
* The price bofore rebate codes
*/
@ApiMember(Description="The price bofore rebate codes")
var PriceBeforeRebate:Double? = null
/**
* The price currency
*/
@ApiMember(Description="The price currency")
var CurrencyId:String? = null
/**
* The price sign
*/
@ApiMember(Description="The price sign")
var PriceSign:String? = null
/**
* The price category
*/
@ApiMember(Description="The price category")
var Category:String? = null
/**
* The price VAT in percent
*/
@ApiMember(Description="The price VAT in percent")
var VAT:BigDecimal? = null
/**
* The price text to display
*/
@ApiMember(Description="The price text to display")
var PriceText:String? = null
/**
* 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.")
var OccupiesSpot:Boolean? = null
}
open class ServiceInfoResponse
{
var Id:Int? = null
var Name:String? = null
var Description:String? = null
var ImageUrl:Uri? = null
var LengthInMinutes:Int? = null
var MaxNumberOfSpotsPerBooking:Int? = null
var MinNumberOfSpotsPerBooking:Int? = null
var GroupBooking:GroupBookingSettings? = null
var MultipleResource:MultipleResourceSettings? = null
var IsGroupBooking:Boolean? = null
var IsPaymentEnabled:Boolean? = null
}
open class GroupBookingSettings
{
var Active:Boolean? = null
var Min:Int? = null
var Max:Int? = null
}
open class MultipleResourceSettings
{
var Active:Boolean? = null
var Min:Int? = null
var Max:Int? = null
}
open class BookingLogQueryResponse
{
/**
* The booking log id
*/
@ApiMember(Description="The booking log id")
var Id:Int? = null
/**
* The booking id
*/
@ApiMember(Description="The booking id")
var BookingId:Int? = null
/**
* The type of event
*/
@ApiMember(Description="The type of event")
var EventTypeId:Int? = null
/**
* The type of event
*/
@ApiMember(Description="The type of event")
var EventType:BookingLogEventTypeResponse? = null
/**
* Comments that could be added to the event log item
*/
@ApiMember(Description="Comments that could be added to the event log item")
var Comments:String? = null
/**
* The user created the event
*/
@ApiMember(Description="The user created the event")
var UserName:String? = null
/**
* Then date when the event occured
*/
@ApiMember(Description="Then date when the event occured")
var Created:Date? = null
}
open class BookingLogEventTypeResponse
{
/**
* The event type id
*/
@ApiMember(Description="The event type id")
var Id:Int? = null
/**
* The event type name
*/
@ApiMember(Description="The event type name")
var Name:String? = null
/**
* The event type description
*/
@ApiMember(Description="The event type description")
var Description:String? = null
}
open class BookingPaymentLogQueryResponse
{
/**
* The booking payment log id
*/
@ApiMember(Description="The booking payment log id")
var Id:Int? = null
/**
* The booking id
*/
@ApiMember(Description="The booking id")
var BookingId:Int? = null
/**
* The payment reference id
*/
@ApiMember(Description="The payment reference id")
var PaymentReferenceId:String? = null
/**
* The payment order item reference id
*/
@ApiMember(Description="The payment order item reference id")
var OrderItemReferenceId:String? = null
/**
* The payment reference id
*/
@ApiMember(Description="The payment reference id")
var PaymentProviderId:Int? = null
/**
* The payment amount
*/
@ApiMember(Description="The payment amount")
var Amount:Double? = null
/**
* The payment VAT in percent
*/
@ApiMember(Description="The payment VAT in percent")
var VAT:BigDecimal? = null
/**
* The payment amount that is credited
*/
@ApiMember(Description="The payment amount that is credited")
var AmountCredited:Double? = null
/**
* The payment currency id
*/
@ApiMember(Description="The payment currency id")
var CurrencyId:String? = null
/**
* The payment currency info
*/
@ApiMember(Description="The payment currency info")
var CurrencyInfo:CurrencyInfoResponse? = null
/**
* Comments that could be added to the event log item
*/
@ApiMember(Description="Comments that could be added to the event log item")
var Comments:String? = null
/**
* The date when the payment items was created
*/
@ApiMember(Description="The date when the payment items was created")
var Created:Date? = null
/**
* The date when the payment items was update
*/
@ApiMember(Description="The date when the payment items was update")
var Updated:Date? = null
}
open class CurrencyInfoResponse
{
/**
* The currency id
*/
@ApiMember(Description="The currency id")
var Id:String? = null
/**
* The currency id
*/
@ApiMember(Description="The currency id")
var Name:String? = null
/**
* The currency id
*/
@ApiMember(Description="The currency id")
var CurrencySign:String? = null
}
open class BookingCheckoutQueryResponse
{
/**
* The checkout id
*/
@ApiMember(Description="The checkout id")
var Id:UUID? = null
/**
* The booking id
*/
@ApiMember(Description="The booking id")
var BookingId:Int? = null
/**
* The purchase id
*/
@ApiMember(Description="The purchase id")
var PurchaseId:Int? = null
/**
* The payment checkout expiration datetime
*/
@ApiMember(Description="The payment checkout expiration datetime")
var ExpirationTime:Date? = null
/**
* The payment snippet code
*/
@ApiMember(Description="The payment snippet code")
var Snippet:String? = null
/**
* The payment status
*/
@ApiMember(Description="The payment status")
var Status:String? = null
/**
* Log message
*/
@ApiMember(Description="Log message")
var Message:String? = null
/**
* When the checkout log item was created
*/
@ApiMember(Description="When the checkout log item was created")
var Created:Date? = null
/**
* When the checkout log item was updated
*/
@ApiMember(Description="When the checkout log item was updated")
var Updated:Date? = null
}
open class ExternalReferenceResponse
{
var CompanyId:UUID? = null
var Id:UUID? = null
var OwnerId:UUID? = null
var ReferenceType:String? = null
var ExternalData:String? = null
var CreatedBy:String? = null
var Updated:Date? = null
var Created:Date? = null
}
open class BookingCalendarExportStatus
{
var CalendarId:String? = null
var BookingId:Int? = null
var Synced:Boolean? = null
}
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=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 }