/* Options:
Date: 2025-04-11 06:03:10
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: UpdateCustomer.*
//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="/customers/{Id}", Verbs="PUT")
    @ApiResponse(Description="Returned if there is a validation error on the input parameters", StatusCode=400)
    // @ApiResponse(Description="Returned if the current user is not allowed to perform the action", StatusCode=401)
    @ValidateRequest(Validator="IsAuthenticated")
    public static class UpdateCustomer implements IReturn<CustomerQueryResponse>
    {
        /**
        * Enter the company and id for the customer, if blank company id and you are an admin, your company id will be used.
        */
        @ApiMember(Description="Enter the company and id for the customer, if blank company id and you are an admin, your company id will be used.", ParameterType="query")
        public UUID CompanyId = null;

        /**
        * customer id
        */
        @ApiMember(Description="customer id", IsRequired=true, ParameterType="path")
        public UUID Id = null;

        public String Firstname = null;
        public String Lastname = null;
        public String Phone = null;
        public String Email = null;
        /**
        * If Custom Fields are added to the customer, 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 customer, here you will send the id and the value for each custom field to be updated")
        public ArrayList<AddCustomField> CustomFields = null;

        /**
        * List of Access Keys
        */
        @ApiMember(Description="List of Access Keys")
        public ArrayList<AddUserAccessKey> AccessKeys = null;

        public ArrayList<DeleteUserAccessKey> AccessKeysToDelete = null;
        public Boolean SubscribedToNewsletter = null;
        public InvoiceAddress InvoiceAddress = null;
        
        public UUID getCompanyId() { return CompanyId; }
        public UpdateCustomer setCompanyId(UUID value) { this.CompanyId = value; return this; }
        public UUID getId() { return Id; }
        public UpdateCustomer setId(UUID value) { this.Id = value; return this; }
        public String getFirstname() { return Firstname; }
        public UpdateCustomer setFirstname(String value) { this.Firstname = value; return this; }
        public String getLastname() { return Lastname; }
        public UpdateCustomer setLastname(String value) { this.Lastname = value; return this; }
        public String getPhone() { return Phone; }
        public UpdateCustomer setPhone(String value) { this.Phone = value; return this; }
        public String getEmail() { return Email; }
        public UpdateCustomer setEmail(String value) { this.Email = value; return this; }
        public ArrayList<AddCustomField> getCustomFields() { return CustomFields; }
        public UpdateCustomer setCustomFields(ArrayList<AddCustomField> value) { this.CustomFields = value; return this; }
        public ArrayList<AddUserAccessKey> getAccessKeys() { return AccessKeys; }
        public UpdateCustomer setAccessKeys(ArrayList<AddUserAccessKey> value) { this.AccessKeys = value; return this; }
        public ArrayList<DeleteUserAccessKey> getAccessKeysToDelete() { return AccessKeysToDelete; }
        public UpdateCustomer setAccessKeysToDelete(ArrayList<DeleteUserAccessKey> value) { this.AccessKeysToDelete = value; return this; }
        public Boolean isSubscribedToNewsletter() { return SubscribedToNewsletter; }
        public UpdateCustomer setSubscribedToNewsletter(Boolean value) { this.SubscribedToNewsletter = value; return this; }
        public InvoiceAddress getInvoiceAddress() { return InvoiceAddress; }
        public UpdateCustomer setInvoiceAddress(InvoiceAddress value) { this.InvoiceAddress = value; return this; }
        private static Object responseType = CustomerQueryResponse.class;
        public Object getResponseType() { return responseType; }
    }

    public static class CustomerQueryResponse
    {
        public UUID Id = null;
        public String Firstname = null;
        public String Lastname = null;
        public String Email = null;
        public String Phone = null;
        public String ImageUrl = null;
        public ArrayList<CustomFieldConfigData> CustomFields = null;
        public ArrayList<CustomFieldDataResponse> CustomFieldValues = null;
        public ArrayList<CustomerCommentsResponse> Comments = null;
        public ArrayList<UserAccessKeys> AccessKeys = null;
        public Date Updated = null;
        public Date Created = null;
        public Object ResponseStatus = null;
        public Boolean SubscribedToNewsletter = null;
        public InvoiceAddress InvoiceAddress = null;
        
        public UUID getId() { return Id; }
        public CustomerQueryResponse setId(UUID value) { this.Id = value; return this; }
        public String getFirstname() { return Firstname; }
        public CustomerQueryResponse setFirstname(String value) { this.Firstname = value; return this; }
        public String getLastname() { return Lastname; }
        public CustomerQueryResponse setLastname(String value) { this.Lastname = value; return this; }
        public String getEmail() { return Email; }
        public CustomerQueryResponse setEmail(String value) { this.Email = value; return this; }
        public String getPhone() { return Phone; }
        public CustomerQueryResponse setPhone(String value) { this.Phone = value; return this; }
        public String getImageUrl() { return ImageUrl; }
        public CustomerQueryResponse setImageUrl(String value) { this.ImageUrl = value; return this; }
        public ArrayList<CustomFieldConfigData> getCustomFields() { return CustomFields; }
        public CustomerQueryResponse setCustomFields(ArrayList<CustomFieldConfigData> value) { this.CustomFields = value; return this; }
        public ArrayList<CustomFieldDataResponse> getCustomFieldValues() { return CustomFieldValues; }
        public CustomerQueryResponse setCustomFieldValues(ArrayList<CustomFieldDataResponse> value) { this.CustomFieldValues = value; return this; }
        public ArrayList<CustomerCommentsResponse> getComments() { return Comments; }
        public CustomerQueryResponse setComments(ArrayList<CustomerCommentsResponse> value) { this.Comments = value; return this; }
        public ArrayList<UserAccessKeys> getAccessKeys() { return AccessKeys; }
        public CustomerQueryResponse setAccessKeys(ArrayList<UserAccessKeys> value) { this.AccessKeys = value; return this; }
        public Date getUpdated() { return Updated; }
        public CustomerQueryResponse setUpdated(Date value) { this.Updated = value; return this; }
        public Date getCreated() { return Created; }
        public CustomerQueryResponse setCreated(Date value) { this.Created = value; return this; }
        public Object getResponseStatus() { return ResponseStatus; }
        public CustomerQueryResponse setResponseStatus(Object value) { this.ResponseStatus = value; return this; }
        public Boolean isSubscribedToNewsletter() { return SubscribedToNewsletter; }
        public CustomerQueryResponse setSubscribedToNewsletter(Boolean value) { this.SubscribedToNewsletter = value; return this; }
        public InvoiceAddress getInvoiceAddress() { return InvoiceAddress; }
        public CustomerQueryResponse setInvoiceAddress(InvoiceAddress value) { this.InvoiceAddress = value; return this; }
    }

    public static class AddCustomField
    {
        public Integer Id = null;
        public String Value = null;
        
        public Integer getId() { return Id; }
        public AddCustomField setId(Integer value) { this.Id = value; return this; }
        public String getValue() { return Value; }
        public AddCustomField setValue(String value) { this.Value = value; return this; }
    }

    public static class AddUserAccessKey
    {
        public UUID Id = null;
        public UUID CompanyId = null;
        public Integer AccessKeyTypeId = null;
        public String Value = null;
        public UUID CustomerId = null;
        public String Description = null;
        
        public UUID getId() { return Id; }
        public AddUserAccessKey setId(UUID value) { this.Id = value; return this; }
        public UUID getCompanyId() { return CompanyId; }
        public AddUserAccessKey setCompanyId(UUID value) { this.CompanyId = value; return this; }
        public Integer getAccessKeyTypeId() { return AccessKeyTypeId; }
        public AddUserAccessKey setAccessKeyTypeId(Integer value) { this.AccessKeyTypeId = value; return this; }
        public String getValue() { return Value; }
        public AddUserAccessKey setValue(String value) { this.Value = value; return this; }
        public UUID getCustomerId() { return CustomerId; }
        public AddUserAccessKey setCustomerId(UUID value) { this.CustomerId = value; return this; }
        public String getDescription() { return Description; }
        public AddUserAccessKey setDescription(String value) { this.Description = value; return this; }
    }

    public static class DeleteUserAccessKey
    {
        public UUID Id = null;
        
        public UUID getId() { return Id; }
        public DeleteUserAccessKey setId(UUID value) { this.Id = value; return this; }
    }

    public static class InvoiceAddress
    {
        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 String getCorporateIdentityNumber() { return CorporateIdentityNumber; }
        public InvoiceAddress setCorporateIdentityNumber(String value) { this.CorporateIdentityNumber = value; return this; }
        public String getInvoiceAddress1() { return InvoiceAddress1; }
        public InvoiceAddress setInvoiceAddress1(String value) { this.InvoiceAddress1 = value; return this; }
        public String getInvoiceAddress2() { return InvoiceAddress2; }
        public InvoiceAddress setInvoiceAddress2(String value) { this.InvoiceAddress2 = value; return this; }
        public String getInvoiceCity() { return InvoiceCity; }
        public InvoiceAddress setInvoiceCity(String value) { this.InvoiceCity = value; return this; }
        public String getInvoicePostalCode() { return InvoicePostalCode; }
        public InvoiceAddress setInvoicePostalCode(String value) { this.InvoicePostalCode = value; return this; }
        public String getInvoiceCountryCode() { return InvoiceCountryCode; }
        public InvoiceAddress setInvoiceCountryCode(String value) { this.InvoiceCountryCode = value; return this; }
    }

    public static class CustomFieldConfigData
    {
        /**
        * Custom field id
        */
        @ApiMember(Description="Custom field id")
        public Integer Id = null;

        /**
        * Configuration name. Example: 'Number of persons'.
        */
        @ApiMember(Description="Configuration name. Example: 'Number of persons'.")
        public String Name = 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?'")
        public String Description = null;

        /**
        * Field width. Example: 20 for 20px
        */
        @ApiMember(Description="Field width. Example: 20 for 20px")
        public Integer Width = 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;

        /**
        * Default value of the field. Example: '3'
        */
        @ApiMember(Description="Default value of the field. Example: '3'")
        public String DefaultValue = 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")
        public Boolean IsMandatory = 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")
        public String MandatoryErrorMessage = null;

        /**
        * Max lenght of the field
        */
        @ApiMember(Description="Max lenght of the field")
        public Integer MaxLength = null;

        /**
        * If the field should have multiple lines
        */
        @ApiMember(Description="If the field should have multiple lines")
        public Boolean MultipleLineText = null;

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

        /**
        * Error message shown if the regular expression validation failed
        */
        @ApiMember(Description="Error message shown if the regular expression validation failed")
        public String RegExErrorMessage = 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")
        public ArrayList<CustomFieldValueResponse> Values = null;
        
        public Integer getId() { return Id; }
        public CustomFieldConfigData setId(Integer value) { this.Id = value; return this; }
        public String getName() { return Name; }
        public CustomFieldConfigData setName(String value) { this.Name = value; return this; }
        public String getDescription() { return Description; }
        public CustomFieldConfigData setDescription(String value) { this.Description = value; return this; }
        public Integer getWidth() { return Width; }
        public CustomFieldConfigData setWidth(Integer value) { this.Width = value; return this; }
        public String getDataType() { return DataType; }
        public CustomFieldConfigData setDataType(String value) { this.DataType = value; return this; }
        public String getDefaultValue() { return DefaultValue; }
        public CustomFieldConfigData setDefaultValue(String value) { this.DefaultValue = value; return this; }
        public Boolean getIsMandatory() { return IsMandatory; }
        public CustomFieldConfigData setIsMandatory(Boolean value) { this.IsMandatory = value; return this; }
        public String getMandatoryErrorMessage() { return MandatoryErrorMessage; }
        public CustomFieldConfigData setMandatoryErrorMessage(String value) { this.MandatoryErrorMessage = value; return this; }
        public Integer getMaxLength() { return MaxLength; }
        public CustomFieldConfigData setMaxLength(Integer value) { this.MaxLength = value; return this; }
        public Boolean isMultipleLineText() { return MultipleLineText; }
        public CustomFieldConfigData setMultipleLineText(Boolean value) { this.MultipleLineText = value; return this; }
        public String getRegEx() { return RegEx; }
        public CustomFieldConfigData setRegEx(String value) { this.RegEx = value; return this; }
        public String getRegExErrorMessage() { return RegExErrorMessage; }
        public CustomFieldConfigData setRegExErrorMessage(String value) { this.RegExErrorMessage = value; return this; }
        public ArrayList<CustomFieldValueResponse> getValues() { return Values; }
        public CustomFieldConfigData setValues(ArrayList<CustomFieldValueResponse> value) { this.Values = 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 UserAccessKeys extends BaseModel
    {
        @Required()
        public UUID CompanyId = null;

        @Required()
        public Integer AccessKeyTypeId = null;

        @Required()
        public String Value = null;

        @Required()
        public UUID CustomerId = null;

        public String Description = null;
        @Required()
        public UUID Id = null;
        
        public UUID getCompanyId() { return CompanyId; }
        public UserAccessKeys setCompanyId(UUID value) { this.CompanyId = value; return this; }
        public Integer getAccessKeyTypeId() { return AccessKeyTypeId; }
        public UserAccessKeys setAccessKeyTypeId(Integer value) { this.AccessKeyTypeId = value; return this; }
        public String getValue() { return Value; }
        public UserAccessKeys setValue(String value) { this.Value = value; return this; }
        public UUID getCustomerId() { return CustomerId; }
        public UserAccessKeys setCustomerId(UUID value) { this.CustomerId = value; return this; }
        public String getDescription() { return Description; }
        public UserAccessKeys setDescription(String value) { this.Description = value; return this; }
        public UUID getId() { return Id; }
        public UserAccessKeys setId(UUID value) { this.Id = value; return this; }
    }

    public static class BaseModel
    {
        
    }

    public static class CustomFieldValueResponse
    {
        public String Value = null;
        
        public String getValue() { return Value; }
        public CustomFieldValueResponse setValue(String value) { this.Value = value; return this; }
    }

    public static class CustomerCommentsResponse
    {
        public Integer Id = null;
        public UUID CustomerId = null;
        public String Comments = null;
        public Date Updated = null;
        public Date Created = null;
        public Uri ImageUrl = null;
        
        public Integer getId() { return Id; }
        public CustomerCommentsResponse setId(Integer value) { this.Id = value; return this; }
        public UUID getCustomerId() { return CustomerId; }
        public CustomerCommentsResponse setCustomerId(UUID value) { this.CustomerId = value; return this; }
        public String getComments() { return Comments; }
        public CustomerCommentsResponse setComments(String value) { this.Comments = value; return this; }
        public Date getUpdated() { return Updated; }
        public CustomerCommentsResponse setUpdated(Date value) { this.Updated = value; return this; }
        public Date getCreated() { return Created; }
        public CustomerCommentsResponse setCreated(Date value) { this.Created = value; return this; }
        public Uri getImageUrl() { return ImageUrl; }
        public CustomerCommentsResponse setImageUrl(Uri value) { this.ImageUrl = value; return this; }
    }

}