/*
 * 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 java.util.ArrayList;
import java.util.List;
import org.openapitools.client.model.BusinessProductModelDto;
import org.openapitools.client.model.ChannelDto;
import org.openapitools.client.model.CustomFieldsDto;
import org.openapitools.client.model.CustomerCategoryDto;
import org.openapitools.client.model.DigitalResourceDto;
import org.openapitools.client.model.LanguageDescriptionDto;
import org.openapitools.client.model.OfferTemplateCategoryDto;
import org.openapitools.client.model.ProductChargeTemplateDto;
import org.openapitools.client.model.WalletTemplateDto;
import org.threeten.bp.OffsetDateTime;

/**
 * ProductTemplateDto
 */
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2019-09-13T10:03:17.753Z[GMT]")
public class ProductTemplateDto {
  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_DISABLED = "disabled";
  @SerializedName(SERIALIZED_NAME_DISABLED)
  private Boolean disabled;

  public static final String SERIALIZED_NAME_VALID_FROM = "validFrom";
  @SerializedName(SERIALIZED_NAME_VALID_FROM)
  private OffsetDateTime validFrom;

  public static final String SERIALIZED_NAME_VALID_TO = "validTo";
  @SerializedName(SERIALIZED_NAME_VALID_TO)
  private OffsetDateTime validTo;

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

  public static final String SERIALIZED_NAME_OFFER_TEMPLATE_CATEGORIES = "offerTemplateCategories";
  @SerializedName(SERIALIZED_NAME_OFFER_TEMPLATE_CATEGORIES)
  private List<OfferTemplateCategoryDto> offerTemplateCategories = null;

  public static final String SERIALIZED_NAME_CHANNELS = "channels";
  @SerializedName(SERIALIZED_NAME_CHANNELS)
  private List<ChannelDto> channels = null;

  public static final String SERIALIZED_NAME_ATTACHMENTS = "attachments";
  @SerializedName(SERIALIZED_NAME_ATTACHMENTS)
  private List<DigitalResourceDto> attachments = null;

  public static final String SERIALIZED_NAME_MODEL_CODE = "modelCode";
  @SerializedName(SERIALIZED_NAME_MODEL_CODE)
  private String modelCode;

  /**
   * Gets or Sets lifeCycleStatus
   */
  @JsonAdapter(LifeCycleStatusEnum.Adapter.class)
  public enum LifeCycleStatusEnum {
    IN_STUDY("IN_STUDY"),
    
    IN_DESIGN("IN_DESIGN"),
    
    IN_TEST("IN_TEST"),
    
    ACTIVE("ACTIVE"),
    
    LAUNCHED("LAUNCHED"),
    
    RETIRED("RETIRED"),
    
    OBSOLETE("OBSOLETE"),
    
    REJECTED("REJECTED");

    private String value;

    LifeCycleStatusEnum(String value) {
      this.value = value;
    }

    public String getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    public static LifeCycleStatusEnum fromValue(String value) {
      for (LifeCycleStatusEnum b : LifeCycleStatusEnum.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }

    public static class Adapter extends TypeAdapter<LifeCycleStatusEnum> {
      @Override
      public void write(final JsonWriter jsonWriter, final LifeCycleStatusEnum enumeration) throws IOException {
        jsonWriter.value(enumeration.getValue());
      }

      @Override
      public LifeCycleStatusEnum read(final JsonReader jsonReader) throws IOException {
        String value = jsonReader.nextString();
        return LifeCycleStatusEnum.fromValue(value);
      }
    }
  }

  public static final String SERIALIZED_NAME_LIFE_CYCLE_STATUS = "lifeCycleStatus";
  @SerializedName(SERIALIZED_NAME_LIFE_CYCLE_STATUS)
  private LifeCycleStatusEnum lifeCycleStatus;

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

  public static final String SERIALIZED_NAME_IMAGE_PATH = "imagePath";
  @SerializedName(SERIALIZED_NAME_IMAGE_PATH)
  private String imagePath;

  public static final String SERIALIZED_NAME_IMAGE_BASE64 = "imageBase64";
  @SerializedName(SERIALIZED_NAME_IMAGE_BASE64)
  private String imageBase64;

  public static final String SERIALIZED_NAME_LANGUAGE_DESCRIPTIONS = "languageDescriptions";
  @SerializedName(SERIALIZED_NAME_LANGUAGE_DESCRIPTIONS)
  private List<LanguageDescriptionDto> languageDescriptions = null;

  public static final String SERIALIZED_NAME_LONG_DESCRIPTION = "longDescription";
  @SerializedName(SERIALIZED_NAME_LONG_DESCRIPTION)
  private String longDescription;

  public static final String SERIALIZED_NAME_LONG_DESCRIPTIONS_TRANSLATED = "longDescriptionsTranslated";
  @SerializedName(SERIALIZED_NAME_LONG_DESCRIPTIONS_TRANSLATED)
  private List<LanguageDescriptionDto> longDescriptionsTranslated = null;

  public static final String SERIALIZED_NAME_GLOBAL_RATING_SCRIPT_INSTANCE = "globalRatingScriptInstance";
  @SerializedName(SERIALIZED_NAME_GLOBAL_RATING_SCRIPT_INSTANCE)
  private String globalRatingScriptInstance;

  public static final String SERIALIZED_NAME_SELLERS = "sellers";
  @SerializedName(SERIALIZED_NAME_SELLERS)
  private List<String> sellers = null;

  public static final String SERIALIZED_NAME_CUSTOMER_CATEGORIES = "customerCategories";
  @SerializedName(SERIALIZED_NAME_CUSTOMER_CATEGORIES)
  private List<CustomerCategoryDto> customerCategories = null;

  public static final String SERIALIZED_NAME_PRODUCT_CHARGE_TEMPLATES = "productChargeTemplates";
  @SerializedName(SERIALIZED_NAME_PRODUCT_CHARGE_TEMPLATES)
  private List<ProductChargeTemplateDto> productChargeTemplates = new ArrayList<ProductChargeTemplateDto>();

  public static final String SERIALIZED_NAME_BUSINESS_PRODUCT_MODEL = "businessProductModel";
  @SerializedName(SERIALIZED_NAME_BUSINESS_PRODUCT_MODEL)
  private BusinessProductModelDto businessProductModel;

  public static final String SERIALIZED_NAME_WALLET_TEMPLATES = "walletTemplates";
  @SerializedName(SERIALIZED_NAME_WALLET_TEMPLATES)
  private List<WalletTemplateDto> walletTemplates = null;

  public static final String SERIALIZED_NAME_CODE_ONLY = "codeOnly";
  @SerializedName(SERIALIZED_NAME_CODE_ONLY)
  private Boolean codeOnly;


  public ProductTemplateDto 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 ProductTemplateDto 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 ProductTemplateDto 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 ProductTemplateDto 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 ProductTemplateDto disabled(Boolean disabled) {
    
    this.disabled = disabled;
    return this;
  }

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

  public Boolean getDisabled() {
    return disabled;
  }



  public void setDisabled(Boolean disabled) {
    this.disabled = disabled;
  }


  public ProductTemplateDto validFrom(OffsetDateTime validFrom) {
    
    this.validFrom = validFrom;
    return this;
  }

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

  public OffsetDateTime getValidFrom() {
    return validFrom;
  }



  public void setValidFrom(OffsetDateTime validFrom) {
    this.validFrom = validFrom;
  }


  public ProductTemplateDto validTo(OffsetDateTime validTo) {
    
    this.validTo = validTo;
    return this;
  }

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

  public OffsetDateTime getValidTo() {
    return validTo;
  }



  public void setValidTo(OffsetDateTime validTo) {
    this.validTo = validTo;
  }


  public ProductTemplateDto name(String name) {
    
    this.name = name;
    return this;
  }

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

  public String getName() {
    return name;
  }



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


  public ProductTemplateDto offerTemplateCategories(List<OfferTemplateCategoryDto> offerTemplateCategories) {
    
    this.offerTemplateCategories = offerTemplateCategories;
    return this;
  }

  public ProductTemplateDto addOfferTemplateCategoriesItem(OfferTemplateCategoryDto offerTemplateCategoriesItem) {
    if (this.offerTemplateCategories == null) {
      this.offerTemplateCategories = new ArrayList<OfferTemplateCategoryDto>();
    }
    this.offerTemplateCategories.add(offerTemplateCategoriesItem);
    return this;
  }

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

  public List<OfferTemplateCategoryDto> getOfferTemplateCategories() {
    return offerTemplateCategories;
  }



  public void setOfferTemplateCategories(List<OfferTemplateCategoryDto> offerTemplateCategories) {
    this.offerTemplateCategories = offerTemplateCategories;
  }


  public ProductTemplateDto channels(List<ChannelDto> channels) {
    
    this.channels = channels;
    return this;
  }

  public ProductTemplateDto addChannelsItem(ChannelDto channelsItem) {
    if (this.channels == null) {
      this.channels = new ArrayList<ChannelDto>();
    }
    this.channels.add(channelsItem);
    return this;
  }

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

  public List<ChannelDto> getChannels() {
    return channels;
  }



  public void setChannels(List<ChannelDto> channels) {
    this.channels = channels;
  }


  public ProductTemplateDto attachments(List<DigitalResourceDto> attachments) {
    
    this.attachments = attachments;
    return this;
  }

  public ProductTemplateDto addAttachmentsItem(DigitalResourceDto attachmentsItem) {
    if (this.attachments == null) {
      this.attachments = new ArrayList<DigitalResourceDto>();
    }
    this.attachments.add(attachmentsItem);
    return this;
  }

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

  public List<DigitalResourceDto> getAttachments() {
    return attachments;
  }



  public void setAttachments(List<DigitalResourceDto> attachments) {
    this.attachments = attachments;
  }


  public ProductTemplateDto modelCode(String modelCode) {
    
    this.modelCode = modelCode;
    return this;
  }

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

  public String getModelCode() {
    return modelCode;
  }



  public void setModelCode(String modelCode) {
    this.modelCode = modelCode;
  }


  public ProductTemplateDto lifeCycleStatus(LifeCycleStatusEnum lifeCycleStatus) {
    
    this.lifeCycleStatus = lifeCycleStatus;
    return this;
  }

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

  public LifeCycleStatusEnum getLifeCycleStatus() {
    return lifeCycleStatus;
  }



  public void setLifeCycleStatus(LifeCycleStatusEnum lifeCycleStatus) {
    this.lifeCycleStatus = lifeCycleStatus;
  }


  public ProductTemplateDto 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 ProductTemplateDto imagePath(String imagePath) {
    
    this.imagePath = imagePath;
    return this;
  }

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

  public String getImagePath() {
    return imagePath;
  }



  public void setImagePath(String imagePath) {
    this.imagePath = imagePath;
  }


  public ProductTemplateDto imageBase64(String imageBase64) {
    
    this.imageBase64 = imageBase64;
    return this;
  }

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

  public String getImageBase64() {
    return imageBase64;
  }



  public void setImageBase64(String imageBase64) {
    this.imageBase64 = imageBase64;
  }


  public ProductTemplateDto languageDescriptions(List<LanguageDescriptionDto> languageDescriptions) {
    
    this.languageDescriptions = languageDescriptions;
    return this;
  }

  public ProductTemplateDto addLanguageDescriptionsItem(LanguageDescriptionDto languageDescriptionsItem) {
    if (this.languageDescriptions == null) {
      this.languageDescriptions = new ArrayList<LanguageDescriptionDto>();
    }
    this.languageDescriptions.add(languageDescriptionsItem);
    return this;
  }

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

  public List<LanguageDescriptionDto> getLanguageDescriptions() {
    return languageDescriptions;
  }



  public void setLanguageDescriptions(List<LanguageDescriptionDto> languageDescriptions) {
    this.languageDescriptions = languageDescriptions;
  }


  public ProductTemplateDto longDescription(String longDescription) {
    
    this.longDescription = longDescription;
    return this;
  }

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

  public String getLongDescription() {
    return longDescription;
  }



  public void setLongDescription(String longDescription) {
    this.longDescription = longDescription;
  }


  public ProductTemplateDto longDescriptionsTranslated(List<LanguageDescriptionDto> longDescriptionsTranslated) {
    
    this.longDescriptionsTranslated = longDescriptionsTranslated;
    return this;
  }

  public ProductTemplateDto addLongDescriptionsTranslatedItem(LanguageDescriptionDto longDescriptionsTranslatedItem) {
    if (this.longDescriptionsTranslated == null) {
      this.longDescriptionsTranslated = new ArrayList<LanguageDescriptionDto>();
    }
    this.longDescriptionsTranslated.add(longDescriptionsTranslatedItem);
    return this;
  }

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

  public List<LanguageDescriptionDto> getLongDescriptionsTranslated() {
    return longDescriptionsTranslated;
  }



  public void setLongDescriptionsTranslated(List<LanguageDescriptionDto> longDescriptionsTranslated) {
    this.longDescriptionsTranslated = longDescriptionsTranslated;
  }


  public ProductTemplateDto globalRatingScriptInstance(String globalRatingScriptInstance) {
    
    this.globalRatingScriptInstance = globalRatingScriptInstance;
    return this;
  }

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

  public String getGlobalRatingScriptInstance() {
    return globalRatingScriptInstance;
  }



  public void setGlobalRatingScriptInstance(String globalRatingScriptInstance) {
    this.globalRatingScriptInstance = globalRatingScriptInstance;
  }


  public ProductTemplateDto sellers(List<String> sellers) {
    
    this.sellers = sellers;
    return this;
  }

  public ProductTemplateDto addSellersItem(String sellersItem) {
    if (this.sellers == null) {
      this.sellers = new ArrayList<String>();
    }
    this.sellers.add(sellersItem);
    return this;
  }

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

  public List<String> getSellers() {
    return sellers;
  }



  public void setSellers(List<String> sellers) {
    this.sellers = sellers;
  }


  public ProductTemplateDto customerCategories(List<CustomerCategoryDto> customerCategories) {
    
    this.customerCategories = customerCategories;
    return this;
  }

  public ProductTemplateDto addCustomerCategoriesItem(CustomerCategoryDto customerCategoriesItem) {
    if (this.customerCategories == null) {
      this.customerCategories = new ArrayList<CustomerCategoryDto>();
    }
    this.customerCategories.add(customerCategoriesItem);
    return this;
  }

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

  public List<CustomerCategoryDto> getCustomerCategories() {
    return customerCategories;
  }



  public void setCustomerCategories(List<CustomerCategoryDto> customerCategories) {
    this.customerCategories = customerCategories;
  }


  public ProductTemplateDto productChargeTemplates(List<ProductChargeTemplateDto> productChargeTemplates) {
    
    this.productChargeTemplates = productChargeTemplates;
    return this;
  }

  public ProductTemplateDto addProductChargeTemplatesItem(ProductChargeTemplateDto productChargeTemplatesItem) {
    this.productChargeTemplates.add(productChargeTemplatesItem);
    return this;
  }

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

  public List<ProductChargeTemplateDto> getProductChargeTemplates() {
    return productChargeTemplates;
  }



  public void setProductChargeTemplates(List<ProductChargeTemplateDto> productChargeTemplates) {
    this.productChargeTemplates = productChargeTemplates;
  }


  public ProductTemplateDto businessProductModel(BusinessProductModelDto businessProductModel) {
    
    this.businessProductModel = businessProductModel;
    return this;
  }

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

  public BusinessProductModelDto getBusinessProductModel() {
    return businessProductModel;
  }



  public void setBusinessProductModel(BusinessProductModelDto businessProductModel) {
    this.businessProductModel = businessProductModel;
  }


  public ProductTemplateDto walletTemplates(List<WalletTemplateDto> walletTemplates) {
    
    this.walletTemplates = walletTemplates;
    return this;
  }

  public ProductTemplateDto addWalletTemplatesItem(WalletTemplateDto walletTemplatesItem) {
    if (this.walletTemplates == null) {
      this.walletTemplates = new ArrayList<WalletTemplateDto>();
    }
    this.walletTemplates.add(walletTemplatesItem);
    return this;
  }

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

  public List<WalletTemplateDto> getWalletTemplates() {
    return walletTemplates;
  }



  public void setWalletTemplates(List<WalletTemplateDto> walletTemplates) {
    this.walletTemplates = walletTemplates;
  }


  public ProductTemplateDto codeOnly(Boolean codeOnly) {
    
    this.codeOnly = codeOnly;
    return this;
  }

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

  public Boolean getCodeOnly() {
    return codeOnly;
  }



  public void setCodeOnly(Boolean codeOnly) {
    this.codeOnly = codeOnly;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    ProductTemplateDto productTemplateDto = (ProductTemplateDto) o;
    return Objects.equals(this.id, productTemplateDto.id) &&
        Objects.equals(this.code, productTemplateDto.code) &&
        Objects.equals(this.description, productTemplateDto.description) &&
        Objects.equals(this.updatedCode, productTemplateDto.updatedCode) &&
        Objects.equals(this.disabled, productTemplateDto.disabled) &&
        Objects.equals(this.validFrom, productTemplateDto.validFrom) &&
        Objects.equals(this.validTo, productTemplateDto.validTo) &&
        Objects.equals(this.name, productTemplateDto.name) &&
        Objects.equals(this.offerTemplateCategories, productTemplateDto.offerTemplateCategories) &&
        Objects.equals(this.channels, productTemplateDto.channels) &&
        Objects.equals(this.attachments, productTemplateDto.attachments) &&
        Objects.equals(this.modelCode, productTemplateDto.modelCode) &&
        Objects.equals(this.lifeCycleStatus, productTemplateDto.lifeCycleStatus) &&
        Objects.equals(this.customFields, productTemplateDto.customFields) &&
        Objects.equals(this.imagePath, productTemplateDto.imagePath) &&
        Objects.equals(this.imageBase64, productTemplateDto.imageBase64) &&
        Objects.equals(this.languageDescriptions, productTemplateDto.languageDescriptions) &&
        Objects.equals(this.longDescription, productTemplateDto.longDescription) &&
        Objects.equals(this.longDescriptionsTranslated, productTemplateDto.longDescriptionsTranslated) &&
        Objects.equals(this.globalRatingScriptInstance, productTemplateDto.globalRatingScriptInstance) &&
        Objects.equals(this.sellers, productTemplateDto.sellers) &&
        Objects.equals(this.customerCategories, productTemplateDto.customerCategories) &&
        Objects.equals(this.productChargeTemplates, productTemplateDto.productChargeTemplates) &&
        Objects.equals(this.businessProductModel, productTemplateDto.businessProductModel) &&
        Objects.equals(this.walletTemplates, productTemplateDto.walletTemplates) &&
        Objects.equals(this.codeOnly, productTemplateDto.codeOnly);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, code, description, updatedCode, disabled, validFrom, validTo, name, offerTemplateCategories, channels, attachments, modelCode, lifeCycleStatus, customFields, imagePath, imageBase64, languageDescriptions, longDescription, longDescriptionsTranslated, globalRatingScriptInstance, sellers, customerCategories, productChargeTemplates, businessProductModel, walletTemplates, codeOnly);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class ProductTemplateDto {\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("    disabled: ").append(toIndentedString(disabled)).append("\n");
    sb.append("    validFrom: ").append(toIndentedString(validFrom)).append("\n");
    sb.append("    validTo: ").append(toIndentedString(validTo)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    offerTemplateCategories: ").append(toIndentedString(offerTemplateCategories)).append("\n");
    sb.append("    channels: ").append(toIndentedString(channels)).append("\n");
    sb.append("    attachments: ").append(toIndentedString(attachments)).append("\n");
    sb.append("    modelCode: ").append(toIndentedString(modelCode)).append("\n");
    sb.append("    lifeCycleStatus: ").append(toIndentedString(lifeCycleStatus)).append("\n");
    sb.append("    customFields: ").append(toIndentedString(customFields)).append("\n");
    sb.append("    imagePath: ").append(toIndentedString(imagePath)).append("\n");
    sb.append("    imageBase64: ").append(toIndentedString(imageBase64)).append("\n");
    sb.append("    languageDescriptions: ").append(toIndentedString(languageDescriptions)).append("\n");
    sb.append("    longDescription: ").append(toIndentedString(longDescription)).append("\n");
    sb.append("    longDescriptionsTranslated: ").append(toIndentedString(longDescriptionsTranslated)).append("\n");
    sb.append("    globalRatingScriptInstance: ").append(toIndentedString(globalRatingScriptInstance)).append("\n");
    sb.append("    sellers: ").append(toIndentedString(sellers)).append("\n");
    sb.append("    customerCategories: ").append(toIndentedString(customerCategories)).append("\n");
    sb.append("    productChargeTemplates: ").append(toIndentedString(productChargeTemplates)).append("\n");
    sb.append("    businessProductModel: ").append(toIndentedString(businessProductModel)).append("\n");
    sb.append("    walletTemplates: ").append(toIndentedString(walletTemplates)).append("\n");
    sb.append("    codeOnly: ").append(toIndentedString(codeOnly)).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    ");
  }

}

