/*
 * Swagger of Opencellsoft Api
 * @#Introduction
 *
 * The version of the OpenAPI document: 7.3.1-SNAPSHOT
 * Contact: contact@opencellsoft.fr
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


package org.openapitools.client.model;

import java.util.Objects;
import java.util.Arrays;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;
import org.openapitools.client.model.AdditionalDetailsDto;
import org.openapitools.client.model.AddressDto;
import org.openapitools.client.model.BusinessEntityDto;
import org.openapitools.client.model.ContactInformationDto;
import org.openapitools.client.model.CustomFieldsDto;
import org.openapitools.client.model.CustomerAccountsDto;
import org.openapitools.client.model.NameDto;
import org.threeten.bp.OffsetDateTime;

/**
 * CustomerDto
 */
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2019-09-13T10:03:17.753Z[GMT]")
public class CustomerDto {
  public static final String SERIALIZED_NAME_ID = "id";
  @SerializedName(SERIALIZED_NAME_ID)
  private Long id;

  public static final String SERIALIZED_NAME_CODE = "code";
  @SerializedName(SERIALIZED_NAME_CODE)
  private String code;

  public static final String SERIALIZED_NAME_DESCRIPTION = "description";
  @SerializedName(SERIALIZED_NAME_DESCRIPTION)
  private String description;

  public static final String SERIALIZED_NAME_UPDATED_CODE = "updatedCode";
  @SerializedName(SERIALIZED_NAME_UPDATED_CODE)
  private String updatedCode;

  public static final String SERIALIZED_NAME_EXTERNAL_REF1 = "externalRef1";
  @SerializedName(SERIALIZED_NAME_EXTERNAL_REF1)
  private String externalRef1;

  public static final String SERIALIZED_NAME_EXTERNAL_REF2 = "externalRef2";
  @SerializedName(SERIALIZED_NAME_EXTERNAL_REF2)
  private String externalRef2;

  public static final String SERIALIZED_NAME_NAME = "name";
  @SerializedName(SERIALIZED_NAME_NAME)
  private NameDto name;

  public static final String SERIALIZED_NAME_ADDRESS = "address";
  @SerializedName(SERIALIZED_NAME_ADDRESS)
  private AddressDto address;

  public static final String SERIALIZED_NAME_JOB_TITLE = "jobTitle";
  @SerializedName(SERIALIZED_NAME_JOB_TITLE)
  private String jobTitle;

  public static final String SERIALIZED_NAME_BUSINESS_ACCOUNT_MODEL = "businessAccountModel";
  @SerializedName(SERIALIZED_NAME_BUSINESS_ACCOUNT_MODEL)
  private BusinessEntityDto businessAccountModel;

  public static final String SERIALIZED_NAME_CUSTOM_FIELDS = "customFields";
  @SerializedName(SERIALIZED_NAME_CUSTOM_FIELDS)
  private CustomFieldsDto customFields;

  public static final String SERIALIZED_NAME_LOADED = "loaded";
  @SerializedName(SERIALIZED_NAME_LOADED)
  private Boolean loaded;

  public static final String SERIALIZED_NAME_VAT_NO = "vatNo";
  @SerializedName(SERIALIZED_NAME_VAT_NO)
  private String vatNo;

  public static final String SERIALIZED_NAME_REGISTRATION_NO = "registrationNo";
  @SerializedName(SERIALIZED_NAME_REGISTRATION_NO)
  private String registrationNo;

  public static final String SERIALIZED_NAME_CONTACT_INFORMATION = "contactInformation";
  @SerializedName(SERIALIZED_NAME_CONTACT_INFORMATION)
  private ContactInformationDto contactInformation;

  public static final String SERIALIZED_NAME_CUSTOMER_CATEGORY = "customerCategory";
  @SerializedName(SERIALIZED_NAME_CUSTOMER_CATEGORY)
  private String customerCategory;

  public static final String SERIALIZED_NAME_CUSTOMER_BRAND = "customerBrand";
  @SerializedName(SERIALIZED_NAME_CUSTOMER_BRAND)
  private String customerBrand;

  public static final String SERIALIZED_NAME_SELLER = "seller";
  @SerializedName(SERIALIZED_NAME_SELLER)
  private String seller;

  public static final String SERIALIZED_NAME_MANDATE_IDENTIFICATION = "mandateIdentification";
  @SerializedName(SERIALIZED_NAME_MANDATE_IDENTIFICATION)
  private String mandateIdentification;

  public static final String SERIALIZED_NAME_MANDATE_DATE = "mandateDate";
  @SerializedName(SERIALIZED_NAME_MANDATE_DATE)
  private OffsetDateTime mandateDate;

  public static final String SERIALIZED_NAME_CUSTOMER_ACCOUNTS = "customerAccounts";
  @SerializedName(SERIALIZED_NAME_CUSTOMER_ACCOUNTS)
  private CustomerAccountsDto customerAccounts;

  public static final String SERIALIZED_NAME_ADDITIONAL_DETAILS = "additionalDetails";
  @SerializedName(SERIALIZED_NAME_ADDITIONAL_DETAILS)
  private AdditionalDetailsDto additionalDetails;


  public CustomerDto id(Long id) {
    
    this.id = id;
    return this;
  }

   /**
   * Get id
   * @return id
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Long getId() {
    return id;
  }



  public void setId(Long id) {
    this.id = id;
  }


  public CustomerDto code(String code) {
    
    this.code = code;
    return this;
  }

   /**
   * Get code
   * @return code
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getCode() {
    return code;
  }



  public void setCode(String code) {
    this.code = code;
  }


  public CustomerDto description(String description) {
    
    this.description = description;
    return this;
  }

   /**
   * Get description
   * @return description
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getDescription() {
    return description;
  }



  public void setDescription(String description) {
    this.description = description;
  }


  public CustomerDto updatedCode(String updatedCode) {
    
    this.updatedCode = updatedCode;
    return this;
  }

   /**
   * Get updatedCode
   * @return updatedCode
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getUpdatedCode() {
    return updatedCode;
  }



  public void setUpdatedCode(String updatedCode) {
    this.updatedCode = updatedCode;
  }


  public CustomerDto externalRef1(String externalRef1) {
    
    this.externalRef1 = externalRef1;
    return this;
  }

   /**
   * Get externalRef1
   * @return externalRef1
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getExternalRef1() {
    return externalRef1;
  }



  public void setExternalRef1(String externalRef1) {
    this.externalRef1 = externalRef1;
  }


  public CustomerDto externalRef2(String externalRef2) {
    
    this.externalRef2 = externalRef2;
    return this;
  }

   /**
   * Get externalRef2
   * @return externalRef2
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getExternalRef2() {
    return externalRef2;
  }



  public void setExternalRef2(String externalRef2) {
    this.externalRef2 = externalRef2;
  }


  public CustomerDto name(NameDto name) {
    
    this.name = name;
    return this;
  }

   /**
   * Get name
   * @return name
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public NameDto getName() {
    return name;
  }



  public void setName(NameDto name) {
    this.name = name;
  }


  public CustomerDto address(AddressDto address) {
    
    this.address = address;
    return this;
  }

   /**
   * Get address
   * @return address
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public AddressDto getAddress() {
    return address;
  }



  public void setAddress(AddressDto address) {
    this.address = address;
  }


  public CustomerDto jobTitle(String jobTitle) {
    
    this.jobTitle = jobTitle;
    return this;
  }

   /**
   * Get jobTitle
   * @return jobTitle
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getJobTitle() {
    return jobTitle;
  }



  public void setJobTitle(String jobTitle) {
    this.jobTitle = jobTitle;
  }


  public CustomerDto businessAccountModel(BusinessEntityDto businessAccountModel) {
    
    this.businessAccountModel = businessAccountModel;
    return this;
  }

   /**
   * Get businessAccountModel
   * @return businessAccountModel
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public BusinessEntityDto getBusinessAccountModel() {
    return businessAccountModel;
  }



  public void setBusinessAccountModel(BusinessEntityDto businessAccountModel) {
    this.businessAccountModel = businessAccountModel;
  }


  public CustomerDto customFields(CustomFieldsDto customFields) {
    
    this.customFields = customFields;
    return this;
  }

   /**
   * Get customFields
   * @return customFields
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public CustomFieldsDto getCustomFields() {
    return customFields;
  }



  public void setCustomFields(CustomFieldsDto customFields) {
    this.customFields = customFields;
  }


  public CustomerDto loaded(Boolean loaded) {
    
    this.loaded = loaded;
    return this;
  }

   /**
   * Get loaded
   * @return loaded
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public Boolean getLoaded() {
    return loaded;
  }



  public void setLoaded(Boolean loaded) {
    this.loaded = loaded;
  }


  public CustomerDto vatNo(String vatNo) {
    
    this.vatNo = vatNo;
    return this;
  }

   /**
   * Get vatNo
   * @return vatNo
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getVatNo() {
    return vatNo;
  }



  public void setVatNo(String vatNo) {
    this.vatNo = vatNo;
  }


  public CustomerDto registrationNo(String registrationNo) {
    
    this.registrationNo = registrationNo;
    return this;
  }

   /**
   * Get registrationNo
   * @return registrationNo
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getRegistrationNo() {
    return registrationNo;
  }



  public void setRegistrationNo(String registrationNo) {
    this.registrationNo = registrationNo;
  }


  public CustomerDto contactInformation(ContactInformationDto contactInformation) {
    
    this.contactInformation = contactInformation;
    return this;
  }

   /**
   * Get contactInformation
   * @return contactInformation
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public ContactInformationDto getContactInformation() {
    return contactInformation;
  }



  public void setContactInformation(ContactInformationDto contactInformation) {
    this.contactInformation = contactInformation;
  }


  public CustomerDto customerCategory(String customerCategory) {
    
    this.customerCategory = customerCategory;
    return this;
  }

   /**
   * Get customerCategory
   * @return customerCategory
  **/
  @ApiModelProperty(required = true, value = "")

  public String getCustomerCategory() {
    return customerCategory;
  }



  public void setCustomerCategory(String customerCategory) {
    this.customerCategory = customerCategory;
  }


  public CustomerDto customerBrand(String customerBrand) {
    
    this.customerBrand = customerBrand;
    return this;
  }

   /**
   * Get customerBrand
   * @return customerBrand
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getCustomerBrand() {
    return customerBrand;
  }



  public void setCustomerBrand(String customerBrand) {
    this.customerBrand = customerBrand;
  }


  public CustomerDto seller(String seller) {
    
    this.seller = seller;
    return this;
  }

   /**
   * Get seller
   * @return seller
  **/
  @ApiModelProperty(required = true, value = "")

  public String getSeller() {
    return seller;
  }



  public void setSeller(String seller) {
    this.seller = seller;
  }


  public CustomerDto mandateIdentification(String mandateIdentification) {
    
    this.mandateIdentification = mandateIdentification;
    return this;
  }

   /**
   * Get mandateIdentification
   * @return mandateIdentification
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public String getMandateIdentification() {
    return mandateIdentification;
  }



  public void setMandateIdentification(String mandateIdentification) {
    this.mandateIdentification = mandateIdentification;
  }


  public CustomerDto mandateDate(OffsetDateTime mandateDate) {
    
    this.mandateDate = mandateDate;
    return this;
  }

   /**
   * Get mandateDate
   * @return mandateDate
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public OffsetDateTime getMandateDate() {
    return mandateDate;
  }



  public void setMandateDate(OffsetDateTime mandateDate) {
    this.mandateDate = mandateDate;
  }


  public CustomerDto customerAccounts(CustomerAccountsDto customerAccounts) {
    
    this.customerAccounts = customerAccounts;
    return this;
  }

   /**
   * Get customerAccounts
   * @return customerAccounts
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public CustomerAccountsDto getCustomerAccounts() {
    return customerAccounts;
  }



  public void setCustomerAccounts(CustomerAccountsDto customerAccounts) {
    this.customerAccounts = customerAccounts;
  }


  public CustomerDto additionalDetails(AdditionalDetailsDto additionalDetails) {
    
    this.additionalDetails = additionalDetails;
    return this;
  }

   /**
   * Get additionalDetails
   * @return additionalDetails
  **/
  @javax.annotation.Nullable
  @ApiModelProperty(value = "")

  public AdditionalDetailsDto getAdditionalDetails() {
    return additionalDetails;
  }



  public void setAdditionalDetails(AdditionalDetailsDto additionalDetails) {
    this.additionalDetails = additionalDetails;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    CustomerDto customerDto = (CustomerDto) o;
    return Objects.equals(this.id, customerDto.id) &&
        Objects.equals(this.code, customerDto.code) &&
        Objects.equals(this.description, customerDto.description) &&
        Objects.equals(this.updatedCode, customerDto.updatedCode) &&
        Objects.equals(this.externalRef1, customerDto.externalRef1) &&
        Objects.equals(this.externalRef2, customerDto.externalRef2) &&
        Objects.equals(this.name, customerDto.name) &&
        Objects.equals(this.address, customerDto.address) &&
        Objects.equals(this.jobTitle, customerDto.jobTitle) &&
        Objects.equals(this.businessAccountModel, customerDto.businessAccountModel) &&
        Objects.equals(this.customFields, customerDto.customFields) &&
        Objects.equals(this.loaded, customerDto.loaded) &&
        Objects.equals(this.vatNo, customerDto.vatNo) &&
        Objects.equals(this.registrationNo, customerDto.registrationNo) &&
        Objects.equals(this.contactInformation, customerDto.contactInformation) &&
        Objects.equals(this.customerCategory, customerDto.customerCategory) &&
        Objects.equals(this.customerBrand, customerDto.customerBrand) &&
        Objects.equals(this.seller, customerDto.seller) &&
        Objects.equals(this.mandateIdentification, customerDto.mandateIdentification) &&
        Objects.equals(this.mandateDate, customerDto.mandateDate) &&
        Objects.equals(this.customerAccounts, customerDto.customerAccounts) &&
        Objects.equals(this.additionalDetails, customerDto.additionalDetails);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, code, description, updatedCode, externalRef1, externalRef2, name, address, jobTitle, businessAccountModel, customFields, loaded, vatNo, registrationNo, contactInformation, customerCategory, customerBrand, seller, mandateIdentification, mandateDate, customerAccounts, additionalDetails);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class CustomerDto {\n");
    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    code: ").append(toIndentedString(code)).append("\n");
    sb.append("    description: ").append(toIndentedString(description)).append("\n");
    sb.append("    updatedCode: ").append(toIndentedString(updatedCode)).append("\n");
    sb.append("    externalRef1: ").append(toIndentedString(externalRef1)).append("\n");
    sb.append("    externalRef2: ").append(toIndentedString(externalRef2)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    address: ").append(toIndentedString(address)).append("\n");
    sb.append("    jobTitle: ").append(toIndentedString(jobTitle)).append("\n");
    sb.append("    businessAccountModel: ").append(toIndentedString(businessAccountModel)).append("\n");
    sb.append("    customFields: ").append(toIndentedString(customFields)).append("\n");
    sb.append("    loaded: ").append(toIndentedString(loaded)).append("\n");
    sb.append("    vatNo: ").append(toIndentedString(vatNo)).append("\n");
    sb.append("    registrationNo: ").append(toIndentedString(registrationNo)).append("\n");
    sb.append("    contactInformation: ").append(toIndentedString(contactInformation)).append("\n");
    sb.append("    customerCategory: ").append(toIndentedString(customerCategory)).append("\n");
    sb.append("    customerBrand: ").append(toIndentedString(customerBrand)).append("\n");
    sb.append("    seller: ").append(toIndentedString(seller)).append("\n");
    sb.append("    mandateIdentification: ").append(toIndentedString(mandateIdentification)).append("\n");
    sb.append("    mandateDate: ").append(toIndentedString(mandateDate)).append("\n");
    sb.append("    customerAccounts: ").append(toIndentedString(customerAccounts)).append("\n");
    sb.append("    additionalDetails: ").append(toIndentedString(additionalDetails)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}

