/* Options:
Date: 2025-04-12 16:55:38
Version: 8.23
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://api.bokamera.se

//Package: 
//GlobalNamespace: dtos
//AddPropertyAccessors: True
//SettersReturnThis: True
//AddServiceStackTypes: True
//AddResponseStatus: False
//AddDescriptionAsComments: True
//AddImplicitVersion: 
IncludeTypes: TestRecurringSchedule.*
//ExcludeTypes: 
//TreatTypesAsStrings: 
//DefaultImports: java.math.*,java.util.*,net.servicestack.client.*
*/

import java.math.*;
import java.util.*;
import net.servicestack.client.*;

public class dtos
{

    @Route(Path="/schedules/recurring/test", Verbs="POST")
    @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
    @ValidateRequest(Validator="IsAuthenticated")
    public static class TestRecurringSchedule implements IReturn<AvailableTimesResponse>, ICompany, IInterval
    {
        /**
        * 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 UUID CompanyId = null;

        /**
        * From what datetime to show available times
        */
        @ApiMember(DataType="dateTime", Description="From what datetime to show available times", IsRequired=true, ParameterType="query")
        public Date From = null;

        /**
        * To what datetime to show available times
        */
        @ApiMember(DataType="dateTime", Description="To what datetime to show available times", IsRequired=true, ParameterType="query")
        public Date To = null;

        /**
        * The Service Duration to be faked if there is no Service selected
        */
        @ApiMember(Description="The Service Duration to be faked if there is no Service selected")
        public Integer Duration = null;

        /**
        * Time interval for available times. Here you set the interval at which times should appear. For example, if you select the range 15minutes, and your service has an duration of 1 hour and opening hours are 9AM to 6PM you will see the following suggested times: 09AM-10PM 09:15AM-10:15PM, 09:30AM-10:30PM ,  ..... 04:45PM-05:45, 05:00PM-06:00PM
        */
        @ApiMember(Description="Time interval for available times. Here you set the interval at which times should appear. For example, if you select the range 15minutes, and your service has an duration of 1 hour and opening hours are 9AM to 6PM you will see the following suggested times: 09AM-10PM 09:15AM-10:15PM, 09:30AM-10:30PM ,  ..... 04:45PM-05:45, 05:00PM-06:00PM", IsRequired=true)
        public Integer TimeInterval = null;

        /**
        * Allow bookings end time exceeds the opening hours Here you can choose whether it should be possible to make a reservation exceeding the opening hours. This should be ticked when a service duration is longer than 24 hours (possible to book over midnight).
        */
        @ApiMember(Description="Allow bookings end time exceeds the opening hours Here you can choose whether it should be possible to make a reservation exceeding the opening hours. This should be ticked when a service duration is longer than 24 hours (possible to book over midnight).", IsRequired=true)
        public Boolean EnableBookingUntilClosingTime = null;

        /**
        * The timestamp to which the schedule is valid from
        */
        @ApiMember(Description="The timestamp to which the schedule is valid from", IsRequired=true)
        public Date ValidFrom = null;

        /**
        * The timestamp to which the schedule is valid to
        */
        @ApiMember(Description="The timestamp to which the schedule is valid to", IsRequired=true)
        public Date ValidTo = null;

        /**
        * The time for the schedule opening hours (starttime)
        */
        @ApiMember(Description="The time for the schedule opening hours (starttime)", IsRequired=true)
        public TimeSpan StartTime = null;

        /**
        * The time for the schedule opening hours (endtime)
        */
        @ApiMember(Description="The time for the schedule opening hours (endtime)", IsRequired=true)
        public TimeSpan EndTime = null;

        /**
        * The number of days the schedule is valid from todays date
        */
        @ApiMember(Description="The number of days the schedule is valid from todays date", IsRequired=true)
        public Integer NumberOfScheduleDays = null;

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

        /**
        * If not recuring, an array indicating which dates that are open for the schedule.
        */
        @ApiMember(Description="If not recuring, an array indicating which dates that are open for the schedule.")
        public ArrayList<AddRecurringScheduleDate> ScheduleDates = null;

        /**
        * Schedule exceptions. For example closed on lunch time between 12AM and 1PM. These times will be removed from the recurring schedule.
        */
        @ApiMember(Description="Schedule exceptions. For example closed on lunch time between 12AM and 1PM. These times will be removed from the recurring schedule.")
        public ArrayList<ScheduleException> Exceptions = null;

        @ApiMember()
        public ArrayList<AddScheduleService> Services = null;

        @ApiMember()
        public ArrayList<Resource> Resources = null;
        
        public UUID getCompanyId() { return CompanyId; }
        public TestRecurringSchedule setCompanyId(UUID value) { this.CompanyId = value; return this; }
        public Date getFrom() { return From; }
        public TestRecurringSchedule setFrom(Date value) { this.From = value; return this; }
        public Date getTo() { return To; }
        public TestRecurringSchedule setTo(Date value) { this.To = value; return this; }
        public Integer getDuration() { return Duration; }
        public TestRecurringSchedule setDuration(Integer value) { this.Duration = value; return this; }
        public Integer getTimeInterval() { return TimeInterval; }
        public TestRecurringSchedule setTimeInterval(Integer value) { this.TimeInterval = value; return this; }
        public Boolean isEnableBookingUntilClosingTime() { return EnableBookingUntilClosingTime; }
        public TestRecurringSchedule setEnableBookingUntilClosingTime(Boolean value) { this.EnableBookingUntilClosingTime = value; return this; }
        public Date getValidFrom() { return ValidFrom; }
        public TestRecurringSchedule setValidFrom(Date value) { this.ValidFrom = value; return this; }
        public Date getValidTo() { return ValidTo; }
        public TestRecurringSchedule setValidTo(Date value) { this.ValidTo = value; return this; }
        public TimeSpan getStartTime() { return StartTime; }
        public TestRecurringSchedule setStartTime(TimeSpan value) { this.StartTime = value; return this; }
        public TimeSpan getEndTime() { return EndTime; }
        public TestRecurringSchedule setEndTime(TimeSpan value) { this.EndTime = value; return this; }
        public Integer getNumberOfScheduleDays() { return NumberOfScheduleDays; }
        public TestRecurringSchedule setNumberOfScheduleDays(Integer value) { this.NumberOfScheduleDays = value; return this; }
        public ArrayList<Integer> getDaysOfWeek() { return DaysOfWeek; }
        public TestRecurringSchedule setDaysOfWeek(ArrayList<Integer> value) { this.DaysOfWeek = value; return this; }
        public ArrayList<AddRecurringScheduleDate> getScheduleDates() { return ScheduleDates; }
        public TestRecurringSchedule setScheduleDates(ArrayList<AddRecurringScheduleDate> value) { this.ScheduleDates = value; return this; }
        public ArrayList<ScheduleException> getExceptions() { return Exceptions; }
        public TestRecurringSchedule setExceptions(ArrayList<ScheduleException> value) { this.Exceptions = value; return this; }
        public ArrayList<AddScheduleService> getServices() { return Services; }
        public TestRecurringSchedule setServices(ArrayList<AddScheduleService> value) { this.Services = value; return this; }
        public ArrayList<Resource> getResources() { return Resources; }
        public TestRecurringSchedule setResources(ArrayList<Resource> value) { this.Resources = value; return this; }
        private static Object responseType = AvailableTimesResponse.class;
        public Object getResponseType() { return responseType; }
    }

    public static class AvailableTimesResponse
    {
        public UUID CompanyId = null;
        public Integer ServiceId = null;
        public String TimesFreeTextSingle = null;
        public String TimesFreeTextMultiple = null;
        public ArrayList<AvailableTimesSum> Times = null;
        
        public UUID getCompanyId() { return CompanyId; }
        public AvailableTimesResponse setCompanyId(UUID value) { this.CompanyId = value; return this; }
        public Integer getServiceId() { return ServiceId; }
        public AvailableTimesResponse setServiceId(Integer value) { this.ServiceId = value; return this; }
        public String getTimesFreeTextSingle() { return TimesFreeTextSingle; }
        public AvailableTimesResponse setTimesFreeTextSingle(String value) { this.TimesFreeTextSingle = value; return this; }
        public String getTimesFreeTextMultiple() { return TimesFreeTextMultiple; }
        public AvailableTimesResponse setTimesFreeTextMultiple(String value) { this.TimesFreeTextMultiple = value; return this; }
        public ArrayList<AvailableTimesSum> getTimes() { return Times; }
        public AvailableTimesResponse setTimes(ArrayList<AvailableTimesSum> value) { this.Times = value; return this; }
    }

    public static interface ICompany
    {
        public UUID CompanyId = null;
    }

    public static enum BookingStatusEnum
    {
        Booked(1),
        Unbooked(2),
        Reserved(3),
        Canceled(4),
        AwaitingPayment(5),
        AwaitingPaymentNoTimeLimit(6),
        Payed(7),
        AwaitingPaymentRequestFromAdmin(8),
        AwaitingPaymentFromProvider(9),
        Invoiced(10);

        private final int value;
        BookingStatusEnum(final int intValue) { value = intValue; }
        public int getValue() { return value; }
    }

    public static interface IInterval
    {
        public Date From = null;
        public Date To = null;
    }

    public static class CustomFieldConfig extends BaseModel
    {
        @Ignore()
        public ArrayList<CustomFieldValue> Values = null;

        public CustomField CustomField = null;
        @Ignore()
        public RegEx RegEx = null;

        @Ignore()
        public ArrayList<Service> Services = null;

        public ArrayList<CustomFieldServiceRelation> CustomFieldServiceRelation = null;
        @Required()
        public UUID CompanyId = null;

        public Integer Id = null;
        public Integer GroupId = null;
        @Required()
        public Integer FieldId = null;

        @Required()
        public Integer IconId = null;

        public Integer RegExId = null;
        @Required()
        public String Name = null;

        @Required()
        public String Description = null;

        @Required()
        public String Datatype = null;

        @Required()
        public Integer MaxLength = null;

        @Required()
        public Boolean IsPublic = null;

        @Required()
        public Boolean IsHidden = null;

        @Required()
        public Boolean IsMandatory = null;

        public String DefaultValue = null;
        public String RegExErrorMessage = null;
        public String MandatoryErrorMessage = null;
        public Integer Width = null;
        @Required()
        public Boolean MultipleLineText = null;

        public Date ModifiedDate = null;
        
        public ArrayList<CustomFieldValue> getValues() { return Values; }
        public CustomFieldConfig setValues(ArrayList<CustomFieldValue> value) { this.Values = value; return this; }
        public CustomField getCustomField() { return CustomField; }
        public CustomFieldConfig setCustomField(CustomField value) { this.CustomField = value; return this; }
        public RegEx getRegEx() { return RegEx; }
        public CustomFieldConfig setRegEx(RegEx value) { this.RegEx = value; return this; }
        public ArrayList<Service> getServices() { return Services; }
        public CustomFieldConfig setServices(ArrayList<Service> value) { this.Services = value; return this; }
        public ArrayList<CustomFieldServiceRelation> getCustomFieldServiceRelation() { return CustomFieldServiceRelation; }
        public CustomFieldConfig setCustomFieldServiceRelation(ArrayList<CustomFieldServiceRelation> value) { this.CustomFieldServiceRelation = value; return this; }
        public UUID getCompanyId() { return CompanyId; }
        public CustomFieldConfig setCompanyId(UUID value) { this.CompanyId = value; return this; }
        public Integer getId() { return Id; }
        public CustomFieldConfig setId(Integer value) { this.Id = value; return this; }
        public Integer getGroupId() { return GroupId; }
        public CustomFieldConfig setGroupId(Integer value) { this.GroupId = value; return this; }
        public Integer getFieldId() { return FieldId; }
        public CustomFieldConfig setFieldId(Integer value) { this.FieldId = value; return this; }
        public Integer getIconId() { return IconId; }
        public CustomFieldConfig setIconId(Integer value) { this.IconId = value; return this; }
        public Integer getRegExId() { return RegExId; }
        public CustomFieldConfig setRegExId(Integer value) { this.RegExId = value; return this; }
        public String getName() { return Name; }
        public CustomFieldConfig setName(String value) { this.Name = value; return this; }
        public String getDescription() { return Description; }
        public CustomFieldConfig setDescription(String value) { this.Description = value; return this; }
        public String getDatatype() { return Datatype; }
        public CustomFieldConfig setDatatype(String value) { this.Datatype = value; return this; }
        public Integer getMaxLength() { return MaxLength; }
        public CustomFieldConfig setMaxLength(Integer value) { this.MaxLength = value; return this; }
        public Boolean getIsPublic() { return IsPublic; }
        public CustomFieldConfig setIsPublic(Boolean value) { this.IsPublic = value; return this; }
        public Boolean getIsHidden() { return IsHidden; }
        public CustomFieldConfig setIsHidden(Boolean value) { this.IsHidden = value; return this; }
        public Boolean getIsMandatory() { return IsMandatory; }
        public CustomFieldConfig setIsMandatory(Boolean value) { this.IsMandatory = value; return this; }
        public String getDefaultValue() { return DefaultValue; }
        public CustomFieldConfig setDefaultValue(String value) { this.DefaultValue = value; return this; }
        public String getRegExErrorMessage() { return RegExErrorMessage; }
        public CustomFieldConfig setRegExErrorMessage(String value) { this.RegExErrorMessage = value; return this; }
        public String getMandatoryErrorMessage() { return MandatoryErrorMessage; }
        public CustomFieldConfig setMandatoryErrorMessage(String value) { this.MandatoryErrorMessage = value; return this; }
        public Integer getWidth() { return Width; }
        public CustomFieldConfig setWidth(Integer value) { this.Width = value; return this; }
        public Boolean isMultipleLineText() { return MultipleLineText; }
        public CustomFieldConfig setMultipleLineText(Boolean value) { this.MultipleLineText = value; return this; }
        public Date getModifiedDate() { return ModifiedDate; }
        public CustomFieldConfig setModifiedDate(Date value) { this.ModifiedDate = value; return this; }
    }

    public static class Resource extends BaseModel implements ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated
    {
        @Ignore()
        public Integer Priority = null;

        @Ignore()
        public IList<ISchedule> Schedules = null;

        @Ignore()
        public IList<ITimeException> Exceptions = null;

        @Ignore()
        public IList<IBookedTime> Bookings = null;

        @Ignore()
        public IList<CustomFieldConfig> CustomFieldsConfig = null;

        @Ignore()
        public IList<CustomFieldDataResponse> CustomFieldsData = null;

        @Required()
        public UUID CompanyId = null;

        public Integer Id = null;
        @Required()
        public String Name = null;

        @Required()
        public Boolean Active = null;

        public String Description = null;
        public String ImageUrl = null;
        @Required()
        public Date UpdatedDate = null;

        @Required()
        public Date CreatedDate = null;

        @Required()
        public String Color = null;

        public String Email = null;
        public String MobilePhone = null;
        public Boolean EmailNotification = null;
        public Boolean SMSNotification = null;
        @Required()
        public Boolean SendSMSReminder = null;

        @Required()
        public Boolean SendEmailReminder = null;

        public Date ModifiedDate = null;
        public String AccessGroup = null;
        public String TextField1 = null;
        public String TextField2 = null;
        public String TextField3 = null;
        public String TextField4 = null;
        public String TextField5 = null;
        public String TextField6 = null;
        public String TextField7 = null;
        public String TextField8 = null;
        public String TextField9 = null;
        public String TextField10 = null;
        public String TextField11 = null;
        public String TextField12 = null;
        public String TextField13 = null;
        public String TextField14 = null;
        public String TextField15 = null;
        public String TextField16 = null;
        public String TextField17 = null;
        public String TextField18 = null;
        public String TextField19 = null;
        public String TextField20 = null;
        
        public Integer getPriority() { return Priority; }
        public Resource setPriority(Integer value) { this.Priority = value; return this; }
        public IList<ISchedule> getSchedules() { return Schedules; }
        public Resource setSchedules(IList<ISchedule> value) { this.Schedules = value; return this; }
        public IList<ITimeException> getExceptions() { return Exceptions; }
        public Resource setExceptions(IList<ITimeException> value) { this.Exceptions = value; return this; }
        public IList<IBookedTime> getBookings() { return Bookings; }
        public Resource setBookings(IList<IBookedTime> value) { this.Bookings = value; return this; }
        public IList<CustomFieldConfig> getCustomFieldsConfig() { return CustomFieldsConfig; }
        public Resource setCustomFieldsConfig(IList<CustomFieldConfig> value) { this.CustomFieldsConfig = value; return this; }
        public IList<CustomFieldDataResponse> getCustomFieldsData() { return CustomFieldsData; }
        public Resource setCustomFieldsData(IList<CustomFieldDataResponse> value) { this.CustomFieldsData = value; return this; }
        public UUID getCompanyId() { return CompanyId; }
        public Resource setCompanyId(UUID value) { this.CompanyId = value; return this; }
        public Integer getId() { return Id; }
        public Resource setId(Integer value) { this.Id = value; return this; }
        public String getName() { return Name; }
        public Resource setName(String value) { this.Name = value; return this; }
        public Boolean isActive() { return Active; }
        public Resource setActive(Boolean value) { this.Active = value; return this; }
        public String getDescription() { return Description; }
        public Resource setDescription(String value) { this.Description = value; return this; }
        public String getImageUrl() { return ImageUrl; }
        public Resource setImageUrl(String value) { this.ImageUrl = value; return this; }
        public Date getUpdatedDate() { return UpdatedDate; }
        public Resource setUpdatedDate(Date value) { this.UpdatedDate = value; return this; }
        public Date getCreatedDate() { return CreatedDate; }
        public Resource setCreatedDate(Date value) { this.CreatedDate = value; return this; }
        public String getColor() { return Color; }
        public Resource setColor(String value) { this.Color = value; return this; }
        public String getEmail() { return Email; }
        public Resource setEmail(String value) { this.Email = value; return this; }
        public String getMobilePhone() { return MobilePhone; }
        public Resource setMobilePhone(String value) { this.MobilePhone = value; return this; }
        public Boolean isEmailNotification() { return EmailNotification; }
        public Resource setEmailNotification(Boolean value) { this.EmailNotification = value; return this; }
        public Boolean isSmsNotification() { return SMSNotification; }
        public Resource setSmsNotification(Boolean value) { this.SMSNotification = value; return this; }
        public Boolean isSendSMSReminder() { return SendSMSReminder; }
        public Resource setSendSMSReminder(Boolean value) { this.SendSMSReminder = value; return this; }
        public Boolean isSendEmailReminder() { return SendEmailReminder; }
        public Resource setSendEmailReminder(Boolean value) { this.SendEmailReminder = value; return this; }
        public Date getModifiedDate() { return ModifiedDate; }
        public Resource setModifiedDate(Date value) { this.ModifiedDate = value; return this; }
        public String getAccessGroup() { return AccessGroup; }
        public Resource setAccessGroup(String value) { this.AccessGroup = value; return this; }
        public String getTextField1() { return TextField1; }
        public Resource setTextField1(String value) { this.TextField1 = value; return this; }
        public String getTextField2() { return TextField2; }
        public Resource setTextField2(String value) { this.TextField2 = value; return this; }
        public String getTextField3() { return TextField3; }
        public Resource setTextField3(String value) { this.TextField3 = value; return this; }
        public String getTextField4() { return TextField4; }
        public Resource setTextField4(String value) { this.TextField4 = value; return this; }
        public String getTextField5() { return TextField5; }
        public Resource setTextField5(String value) { this.TextField5 = value; return this; }
        public String getTextField6() { return TextField6; }
        public Resource setTextField6(String value) { this.TextField6 = value; return this; }
        public String getTextField7() { return TextField7; }
        public Resource setTextField7(String value) { this.TextField7 = value; return this; }
        public String getTextField8() { return TextField8; }
        public Resource setTextField8(String value) { this.TextField8 = value; return this; }
        public String getTextField9() { return TextField9; }
        public Resource setTextField9(String value) { this.TextField9 = value; return this; }
        public String getTextField10() { return TextField10; }
        public Resource setTextField10(String value) { this.TextField10 = value; return this; }
        public String getTextField11() { return TextField11; }
        public Resource setTextField11(String value) { this.TextField11 = value; return this; }
        public String getTextField12() { return TextField12; }
        public Resource setTextField12(String value) { this.TextField12 = value; return this; }
        public String getTextField13() { return TextField13; }
        public Resource setTextField13(String value) { this.TextField13 = value; return this; }
        public String getTextField14() { return TextField14; }
        public Resource setTextField14(String value) { this.TextField14 = value; return this; }
        public String getTextField15() { return TextField15; }
        public Resource setTextField15(String value) { this.TextField15 = value; return this; }
        public String getTextField16() { return TextField16; }
        public Resource setTextField16(String value) { this.TextField16 = value; return this; }
        public String getTextField17() { return TextField17; }
        public Resource setTextField17(String value) { this.TextField17 = value; return this; }
        public String getTextField18() { return TextField18; }
        public Resource setTextField18(String value) { this.TextField18 = value; return this; }
        public String getTextField19() { return TextField19; }
        public Resource setTextField19(String value) { this.TextField19 = value; return this; }
        public String getTextField20() { return TextField20; }
        public Resource setTextField20(String value) { this.TextField20 = value; return this; }
    }

    public static class AddRecurringScheduleDate
    {
        /**
        * The date for the schedule opening (only date part is used here
        */
        @ApiMember(Description="The date for the schedule opening (only date part is used here", IsRequired=true)
        public Date Date = null;

        /**
        * The time for the schedule opening hours (starttime)
        */
        @ApiMember(Description="The time for the schedule opening hours (starttime)", IsRequired=true)
        public TimeSpan StartTime = null;

        /**
        * The time for the schedule opening hours (endtime)
        */
        @ApiMember(Description="The time for the schedule opening hours (endtime)", IsRequired=true)
        public TimeSpan EndTime = null;
        
        public Date getDate() { return Date; }
        public AddRecurringScheduleDate setDate(Date value) { this.Date = value; return this; }
        public TimeSpan getStartTime() { return StartTime; }
        public AddRecurringScheduleDate setStartTime(TimeSpan value) { this.StartTime = value; return this; }
        public TimeSpan getEndTime() { return EndTime; }
        public AddRecurringScheduleDate setEndTime(TimeSpan value) { this.EndTime = value; return this; }
    }

    public static class ScheduleException
    {
        public TimeSpan StartTime = null;
        public TimeSpan EndTime = null;
        
        public TimeSpan getStartTime() { return StartTime; }
        public ScheduleException setStartTime(TimeSpan value) { this.StartTime = value; return this; }
        public TimeSpan getEndTime() { return EndTime; }
        public ScheduleException setEndTime(TimeSpan value) { this.EndTime = value; return this; }
    }

    public static class AddScheduleService
    {
        /**
        * The service id
        */
        @ApiMember(Description="The service id", IsRequired=true)
        public Integer Id = null;
        
        public Integer getId() { return Id; }
        public AddScheduleService setId(Integer value) { this.Id = value; return this; }
    }

    public static class CustomFieldDataResponse
    {
        public Integer Id = null;
        public String Column = null;
        public String Name = null;
        public String Description = null;
        public String Value = 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'")
        public String DataType = null;
        
        public Integer getId() { return Id; }
        public CustomFieldDataResponse setId(Integer value) { this.Id = value; return this; }
        public String getColumn() { return Column; }
        public CustomFieldDataResponse setColumn(String value) { this.Column = value; return this; }
        public String getName() { return Name; }
        public CustomFieldDataResponse setName(String value) { this.Name = value; return this; }
        public String getDescription() { return Description; }
        public CustomFieldDataResponse setDescription(String value) { this.Description = value; return this; }
        public String getValue() { return Value; }
        public CustomFieldDataResponse setValue(String value) { this.Value = value; return this; }
        public String getDataType() { return DataType; }
        public CustomFieldDataResponse setDataType(String value) { this.DataType = value; return this; }
    }

    public static class BookedCustomer
    {
        public UUID Id = null;
        public String Firstname = null;
        public String Lastname = null;
        public String Email = null;
        public String Phone = null;
        public String FacebookUserName = null;
        public String ImageUrl = null;
        public String CorporateIdentityNumber = null;
        public String InvoiceAddress1 = null;
        public String InvoiceAddress2 = null;
        public String InvoiceCity = null;
        public String InvoicePostalCode = null;
        public String InvoiceCountryCode = null;
        
        public UUID getId() { return Id; }
        public BookedCustomer setId(UUID value) { this.Id = value; return this; }
        public String getFirstname() { return Firstname; }
        public BookedCustomer setFirstname(String value) { this.Firstname = value; return this; }
        public String getLastname() { return Lastname; }
        public BookedCustomer setLastname(String value) { this.Lastname = value; return this; }
        public String getEmail() { return Email; }
        public BookedCustomer setEmail(String value) { this.Email = value; return this; }
        public String getPhone() { return Phone; }
        public BookedCustomer setPhone(String value) { this.Phone = value; return this; }
        public String getFacebookUserName() { return FacebookUserName; }
        public BookedCustomer setFacebookUserName(String value) { this.FacebookUserName = value; return this; }
        public String getImageUrl() { return ImageUrl; }
        public BookedCustomer setImageUrl(String value) { this.ImageUrl = value; return this; }
        public String getCorporateIdentityNumber() { return CorporateIdentityNumber; }
        public BookedCustomer setCorporateIdentityNumber(String value) { this.CorporateIdentityNumber = value; return this; }
        public String getInvoiceAddress1() { return InvoiceAddress1; }
        public BookedCustomer setInvoiceAddress1(String value) { this.InvoiceAddress1 = value; return this; }
        public String getInvoiceAddress2() { return InvoiceAddress2; }
        public BookedCustomer setInvoiceAddress2(String value) { this.InvoiceAddress2 = value; return this; }
        public String getInvoiceCity() { return InvoiceCity; }
        public BookedCustomer setInvoiceCity(String value) { this.InvoiceCity = value; return this; }
        public String getInvoicePostalCode() { return InvoicePostalCode; }
        public BookedCustomer setInvoicePostalCode(String value) { this.InvoicePostalCode = value; return this; }
        public String getInvoiceCountryCode() { return InvoiceCountryCode; }
        public BookedCustomer setInvoiceCountryCode(String value) { this.InvoiceCountryCode = value; return this; }
    }

    public static class AvailableTimesSum implements IAvailableTime
    {
        public Date From = null;
        public Date To = null;
        public Integer Free = null;
        public Integer FreeSpots = null;
        public ArrayList<ExceptionText> ExceptionTexts = null;
        
        public Date getFrom() { return From; }
        public AvailableTimesSum setFrom(Date value) { this.From = value; return this; }
        public Date getTo() { return To; }
        public AvailableTimesSum setTo(Date value) { this.To = value; return this; }
        public Integer getFree() { return Free; }
        public AvailableTimesSum setFree(Integer value) { this.Free = value; return this; }
        public Integer getFreeSpots() { return FreeSpots; }
        public AvailableTimesSum setFreeSpots(Integer value) { this.FreeSpots = value; return this; }
        public ArrayList<ExceptionText> getExceptionTexts() { return ExceptionTexts; }
        public AvailableTimesSum setExceptionTexts(ArrayList<ExceptionText> value) { this.ExceptionTexts = value; return this; }
    }

    public static enum ScheduleType
    {
        NotDefined,
        RecurringSchedule,
        DateSchedule;
    }

    public static class BaseModel
    {
        
    }

    public static interface IBaseModelCreated
    {
        public Date CreatedDate = null;
    }

    public static interface IBaseModelUpdated
    {
        public Date UpdatedDate = null;
    }

    public static interface ICustomFieldTable
    {
        public IList<CustomFieldConfig> CustomFieldsConfig = null;
        public IList<CustomFieldDataResponse> CustomFieldsData = null;
        public String TextField1 = null;
        public String TextField2 = null;
        public String TextField3 = null;
        public String TextField4 = null;
        public String TextField5 = null;
        public String TextField6 = null;
        public String TextField7 = null;
        public String TextField8 = null;
        public String TextField9 = null;
        public String TextField10 = null;
        public String TextField11 = null;
        public String TextField12 = null;
        public String TextField13 = null;
        public String TextField14 = null;
        public String TextField15 = null;
        public String TextField16 = null;
        public String TextField17 = null;
        public String TextField18 = null;
        public String TextField19 = null;
        public String TextField20 = null;
    }

    public static class CustomFieldValue extends BaseModel
    {
        @Required()
        public UUID CompanyId = null;

        public Integer Id = null;
        @Required()
        public String Value = null;

        @Required()
        public Boolean Active = null;

        public Short SortOrder = null;
        public Date ModifiedDate = null;
        
        public UUID getCompanyId() { return CompanyId; }
        public CustomFieldValue setCompanyId(UUID value) { this.CompanyId = value; return this; }
        public Integer getId() { return Id; }
        public CustomFieldValue setId(Integer value) { this.Id = value; return this; }
        public String getValue() { return Value; }
        public CustomFieldValue setValue(String value) { this.Value = value; return this; }
        public Boolean isActive() { return Active; }
        public CustomFieldValue setActive(Boolean value) { this.Active = value; return this; }
        public Short getSortOrder() { return SortOrder; }
        public CustomFieldValue setSortOrder(Short value) { this.SortOrder = value; return this; }
        public Date getModifiedDate() { return ModifiedDate; }
        public CustomFieldValue setModifiedDate(Date value) { this.ModifiedDate = value; return this; }
    }

    public static class CustomField extends BaseModel
    {
        @Required()
        public String Table = null;

        @Required()
        public String Column = null;

        @Required()
        public String DataType = null;

        @Required()
        public String Description = null;

        @Required()
        public Boolean Active = null;

        public Date ModifiedDate = null;
        public Integer Id = null;
        
        public String getTable() { return Table; }
        public CustomField setTable(String value) { this.Table = value; return this; }
        public String getColumn() { return Column; }
        public CustomField setColumn(String value) { this.Column = value; return this; }
        public String getDataType() { return DataType; }
        public CustomField setDataType(String value) { this.DataType = value; return this; }
        public String getDescription() { return Description; }
        public CustomField setDescription(String value) { this.Description = value; return this; }
        public Boolean isActive() { return Active; }
        public CustomField setActive(Boolean value) { this.Active = value; return this; }
        public Date getModifiedDate() { return ModifiedDate; }
        public CustomField setModifiedDate(Date value) { this.ModifiedDate = value; return this; }
        public Integer getId() { return Id; }
        public CustomField setId(Integer value) { this.Id = value; return this; }
    }

    public static class RegEx extends BaseModel
    {
        @Required()
        public String Name = null;

        @Required()
        public String Description = null;

        @Required()
        public String RegExCode = null;

        public String ErrorMessage = null;
        public Date ModifiedDate = null;
        public Integer Id = null;
        
        public String getName() { return Name; }
        public RegEx setName(String value) { this.Name = value; return this; }
        public String getDescription() { return Description; }
        public RegEx setDescription(String value) { this.Description = value; return this; }
        public String getRegExCode() { return RegExCode; }
        public RegEx setRegExCode(String value) { this.RegExCode = value; return this; }
        public String getErrorMessage() { return ErrorMessage; }
        public RegEx setErrorMessage(String value) { this.ErrorMessage = value; return this; }
        public Date getModifiedDate() { return ModifiedDate; }
        public RegEx setModifiedDate(Date value) { this.ModifiedDate = value; return this; }
        public Integer getId() { return Id; }
        public RegEx setId(Integer value) { this.Id = value; return this; }
    }

    public static class CustomFieldServiceRelation extends BaseModel
    {
        @Required()
        public UUID CompanyId = null;

        public Integer Id = null;
        @Required()
        public Integer CustomFieldConfigId = null;

        @Required()
        public Integer ServiceId = null;

        public Date ModifiedDate = null;
        
        public UUID getCompanyId() { return CompanyId; }
        public CustomFieldServiceRelation setCompanyId(UUID value) { this.CompanyId = value; return this; }
        public Integer getId() { return Id; }
        public CustomFieldServiceRelation setId(Integer value) { this.Id = value; return this; }
        public Integer getCustomFieldConfigId() { return CustomFieldConfigId; }
        public CustomFieldServiceRelation setCustomFieldConfigId(Integer value) { this.CustomFieldConfigId = value; return this; }
        public Integer getServiceId() { return ServiceId; }
        public CustomFieldServiceRelation setServiceId(Integer value) { this.ServiceId = value; return this; }
        public Date getModifiedDate() { return ModifiedDate; }
        public CustomFieldServiceRelation setModifiedDate(Date value) { this.ModifiedDate = value; return this; }
    }

    public static interface ISchedule
    {
        public UUID CompanyId = null;
        public IList<Resource> Resources = null;
        public ScheduleType Type = null;
        public Boolean Active = null;
        public Boolean IsResourceSpecific = null;
    }

    public static interface ITimeException implements IInterval
    {
        public Integer Id = null;
        public String ReasonText = null;
        public Boolean IsBlock = null;
        public String ReasonTextPublic = null;
        public Boolean IsRecurring = null;
        public ArrayList<Integer> ResourceIds = null;
    }

    public static interface IBookedTime implements IInterval
    {
        public Integer Id = null;
        public Integer ServiceId = null;
        public Integer BookedSpots = null;
        public Integer TotalSpots = null;
        public Integer PauseAfterInMinutes = null;
        public BookingStatusEnum Status = null;
        public Integer StatusId = null;
        public BookedCustomer Customer = null;
    }

    public static class ExceptionText
    {
        public String Reason = null;
        public String ReasonPublic = null;
        
        public String getReason() { return Reason; }
        public ExceptionText setReason(String value) { this.Reason = value; return this; }
        public String getReasonPublic() { return ReasonPublic; }
        public ExceptionText setReasonPublic(String value) { this.ReasonPublic = value; return this; }
    }

    public static interface IAvailableTime implements IInterval
    {
        public Integer Free = null;
    }

}