/*
 * 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.HashMap;
import java.util.List;
import java.util.Map;
import org.openapitools.client.model.Auditable;
import org.openapitools.client.model.AuditableFieldHistory;
import org.openapitools.client.model.BusinessAccountModel;
import org.openapitools.client.model.BusinessEntity;
import org.openapitools.client.model.BusinessOfferModel;
import org.openapitools.client.model.Channel;
import org.openapitools.client.model.CustomFieldValues;
import org.openapitools.client.model.CustomerCategory;
import org.openapitools.client.model.DatePeriod;
import org.openapitools.client.model.DigitalResource;
import org.openapitools.client.model.DiscountPlan;
import org.openapitools.client.model.ICustomFieldEntity;
import org.openapitools.client.model.OfferProductTemplate;
import org.openapitools.client.model.OfferServiceTemplate;
import org.openapitools.client.model.OfferTemplateCategory;
import org.openapitools.client.model.ProductTemplate;
import org.openapitools.client.model.ScriptInstance;
import org.openapitools.client.model.Seller;
import org.openapitools.client.model.ServiceTemplate;
import org.openapitools.client.model.SubscriptionRenewal;

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

  public static final String SERIALIZED_NAME_VERSION = "version";
  @SerializedName(SERIALIZED_NAME_VERSION)
  private Integer version;

  public static final String SERIALIZED_NAME_AUDITABLE = "auditable";
  @SerializedName(SERIALIZED_NAME_AUDITABLE)
  private Auditable auditable;

  public static final String SERIALIZED_NAME_HISTORIZED = "historized";
  @SerializedName(SERIALIZED_NAME_HISTORIZED)
  private Boolean historized;

  public static final String SERIALIZED_NAME_NOTIFIED = "notified";
  @SerializedName(SERIALIZED_NAME_NOTIFIED)
  private Boolean notified;

  public static final String SERIALIZED_NAME_AUDITABLE_FIELDS = "auditableFields";
  @SerializedName(SERIALIZED_NAME_AUDITABLE_FIELDS)
  private List<AuditableFieldHistory> auditableFields = null;

  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_APPEND_GENERATED_CODE = "appendGeneratedCode";
  @SerializedName(SERIALIZED_NAME_APPEND_GENERATED_CODE)
  private Boolean appendGeneratedCode;

  public static final String SERIALIZED_NAME_UUID = "uuid";
  @SerializedName(SERIALIZED_NAME_UUID)
  private String uuid;

  public static final String SERIALIZED_NAME_CF_VALUES = "cfValues";
  @SerializedName(SERIALIZED_NAME_CF_VALUES)
  private CustomFieldValues cfValues;

  public static final String SERIALIZED_NAME_CF_ACCUMULATED_VALUES = "cfAccumulatedValues";
  @SerializedName(SERIALIZED_NAME_CF_ACCUMULATED_VALUES)
  private CustomFieldValues cfAccumulatedValues;

  public static final String SERIALIZED_NAME_DISABLED = "disabled";
  @SerializedName(SERIALIZED_NAME_DISABLED)
  private Boolean disabled;

  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<OfferTemplateCategory> offerTemplateCategories = null;

  public static final String SERIALIZED_NAME_VALIDITY = "validity";
  @SerializedName(SERIALIZED_NAME_VALIDITY)
  private DatePeriod validity;

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

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

  /**
   * 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_BUSINESS_ACCOUNT_MODELS = "businessAccountModels";
  @SerializedName(SERIALIZED_NAME_BUSINESS_ACCOUNT_MODELS)
  private List<BusinessAccountModel> businessAccountModels = null;

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

  public static final String SERIALIZED_NAME_DESCRIPTION_I18N = "descriptionI18n";
  @SerializedName(SERIALIZED_NAME_DESCRIPTION_I18N)
  private Map<String, String> descriptionI18n = 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_DESCRIPTION_I18N = "longDescriptionI18n";
  @SerializedName(SERIALIZED_NAME_LONG_DESCRIPTION_I18N)
  private Map<String, String> longDescriptionI18n = null;

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

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

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

  public static final String SERIALIZED_NAME_BUSINESS_OFFER_MODEL = "businessOfferModel";
  @SerializedName(SERIALIZED_NAME_BUSINESS_OFFER_MODEL)
  private BusinessOfferModel businessOfferModel;

  public static final String SERIALIZED_NAME_OFFER_SERVICE_TEMPLATES = "offerServiceTemplates";
  @SerializedName(SERIALIZED_NAME_OFFER_SERVICE_TEMPLATES)
  private List<OfferServiceTemplate> offerServiceTemplates = null;

  public static final String SERIALIZED_NAME_OFFER_PRODUCT_TEMPLATES = "offerProductTemplates";
  @SerializedName(SERIALIZED_NAME_OFFER_PRODUCT_TEMPLATES)
  private List<OfferProductTemplate> offerProductTemplates = null;

  public static final String SERIALIZED_NAME_MINIMUM_AMOUNT_EL = "minimumAmountEl";
  @SerializedName(SERIALIZED_NAME_MINIMUM_AMOUNT_EL)
  private String minimumAmountEl;

  public static final String SERIALIZED_NAME_MINIMUM_LABEL_EL = "minimumLabelEl";
  @SerializedName(SERIALIZED_NAME_MINIMUM_LABEL_EL)
  private String minimumLabelEl;

  public static final String SERIALIZED_NAME_MINIMUM_AMOUNT_EL_SPARK = "minimumAmountElSpark";
  @SerializedName(SERIALIZED_NAME_MINIMUM_AMOUNT_EL_SPARK)
  private String minimumAmountElSpark;

  public static final String SERIALIZED_NAME_ALLOWED_DISCOUNT_PLANS = "allowedDiscountPlans";
  @SerializedName(SERIALIZED_NAME_ALLOWED_DISCOUNT_PLANS)
  private List<DiscountPlan> allowedDiscountPlans = null;

  public static final String SERIALIZED_NAME_MINIMUM_LABEL_EL_SPARK = "minimumLabelElSpark";
  @SerializedName(SERIALIZED_NAME_MINIMUM_LABEL_EL_SPARK)
  private String minimumLabelElSpark;

  public static final String SERIALIZED_NAME_SUBSCRIPTION_RENEWAL = "subscriptionRenewal";
  @SerializedName(SERIALIZED_NAME_SUBSCRIPTION_RENEWAL)
  private SubscriptionRenewal subscriptionRenewal;

  public static final String SERIALIZED_NAME_PREFIX = "prefix";
  @SerializedName(SERIALIZED_NAME_PREFIX)
  private String prefix;

  public static final String SERIALIZED_NAME_SERVICE_TEMPLATES_BY_CHARGE_TYPE = "serviceTemplatesByChargeType";
  @SerializedName(SERIALIZED_NAME_SERVICE_TEMPLATES_BY_CHARGE_TYPE)
  private Map<String, List<ServiceTemplate>> serviceTemplatesByChargeType = null;

  public static final String SERIALIZED_NAME_PRODUCT_TEMPLATES = "productTemplates";
  @SerializedName(SERIALIZED_NAME_PRODUCT_TEMPLATES)
  private List<ProductTemplate> productTemplates = null;

  public static final String SERIALIZED_NAME_TRANSIENT_CODE = "transientCode";
  @SerializedName(SERIALIZED_NAME_TRANSIENT_CODE)
  private String transientCode;

  public static final String SERIALIZED_NAME_AUTO_END_OF_ENGAGEMENT = "autoEndOfEngagement";
  @SerializedName(SERIALIZED_NAME_AUTO_END_OF_ENGAGEMENT)
  private Boolean autoEndOfEngagement;

  public static final String SERIALIZED_NAME_DESCRIPTION_I18N_NULL_SAFE = "descriptionI18nNullSafe";
  @SerializedName(SERIALIZED_NAME_DESCRIPTION_I18N_NULL_SAFE)
  private Map<String, String> descriptionI18nNullSafe = null;

  public static final String SERIALIZED_NAME_NAME_OR_CODE = "nameOrCode";
  @SerializedName(SERIALIZED_NAME_NAME_OR_CODE)
  private String nameOrCode;

  public static final String SERIALIZED_NAME_LONG_DESCRIPTION_I18N_NULL_SAFE = "longDescriptionI18nNullSafe";
  @SerializedName(SERIALIZED_NAME_LONG_DESCRIPTION_I18N_NULL_SAFE)
  private Map<String, String> longDescriptionI18nNullSafe = null;

  public static final String SERIALIZED_NAME_ACTIVE = "active";
  @SerializedName(SERIALIZED_NAME_ACTIVE)
  private Boolean active;

  public static final String SERIALIZED_NAME_PARENT_C_F_ENTITIES = "parentCFEntities";
  @SerializedName(SERIALIZED_NAME_PARENT_C_F_ENTITIES)
  private List<ICustomFieldEntity> parentCFEntities = null;

  public static final String SERIALIZED_NAME_CF_VALUES_NULL_SAFE = "cfValuesNullSafe";
  @SerializedName(SERIALIZED_NAME_CF_VALUES_NULL_SAFE)
  private CustomFieldValues cfValuesNullSafe;

  public static final String SERIALIZED_NAME_CF_VALUES_AS_VALUES = "cfValuesAsValues";
  @SerializedName(SERIALIZED_NAME_CF_VALUES_AS_VALUES)
  private Map<String, Object> cfValuesAsValues = null;

  public static final String SERIALIZED_NAME_CF_ACCUMULATED_VALUES_NULL_SAFE = "cfAccumulatedValuesNullSafe";
  @SerializedName(SERIALIZED_NAME_CF_ACCUMULATED_VALUES_NULL_SAFE)
  private CustomFieldValues cfAccumulatedValuesNullSafe;

  public static final String SERIALIZED_NAME_DESCRIPTION_OR_CODE = "descriptionOrCode";
  @SerializedName(SERIALIZED_NAME_DESCRIPTION_OR_CODE)
  private String descriptionOrCode;

  public static final String SERIALIZED_NAME_DESCRIPTION_AND_CODE = "descriptionAndCode";
  @SerializedName(SERIALIZED_NAME_DESCRIPTION_AND_CODE)
  private String descriptionAndCode;

  public static final String SERIALIZED_NAME_REFERENCE_CODE = "referenceCode";
  @SerializedName(SERIALIZED_NAME_REFERENCE_CODE)
  private String referenceCode;

  public static final String SERIALIZED_NAME_REFERENCE_DESCRIPTION = "referenceDescription";
  @SerializedName(SERIALIZED_NAME_REFERENCE_DESCRIPTION)
  private String referenceDescription;

  public static final String SERIALIZED_NAME_CODE_CHANGED = "codeChanged";
  @SerializedName(SERIALIZED_NAME_CODE_CHANGED)
  private Boolean codeChanged;

  public static final String SERIALIZED_NAME_PARENT_ENTITY = "parentEntity";
  @SerializedName(SERIALIZED_NAME_PARENT_ENTITY)
  private BusinessEntity parentEntity;

  public static final String SERIALIZED_NAME_TRANSIENT = "transient";
  @SerializedName(SERIALIZED_NAME_TRANSIENT)
  private Boolean _transient;


  public OfferTemplate 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 OfferTemplate version(Integer version) {
    
    this.version = version;
    return this;
  }

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

  public Integer getVersion() {
    return version;
  }



  public void setVersion(Integer version) {
    this.version = version;
  }


  public OfferTemplate auditable(Auditable auditable) {
    
    this.auditable = auditable;
    return this;
  }

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

  public Auditable getAuditable() {
    return auditable;
  }



  public void setAuditable(Auditable auditable) {
    this.auditable = auditable;
  }


  public OfferTemplate historized(Boolean historized) {
    
    this.historized = historized;
    return this;
  }

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

  public Boolean getHistorized() {
    return historized;
  }



  public void setHistorized(Boolean historized) {
    this.historized = historized;
  }


  public OfferTemplate notified(Boolean notified) {
    
    this.notified = notified;
    return this;
  }

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

  public Boolean getNotified() {
    return notified;
  }



  public void setNotified(Boolean notified) {
    this.notified = notified;
  }


  public OfferTemplate auditableFields(List<AuditableFieldHistory> auditableFields) {
    
    this.auditableFields = auditableFields;
    return this;
  }

  public OfferTemplate addAuditableFieldsItem(AuditableFieldHistory auditableFieldsItem) {
    if (this.auditableFields == null) {
      this.auditableFields = new ArrayList<AuditableFieldHistory>();
    }
    this.auditableFields.add(auditableFieldsItem);
    return this;
  }

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

  public List<AuditableFieldHistory> getAuditableFields() {
    return auditableFields;
  }



  public void setAuditableFields(List<AuditableFieldHistory> auditableFields) {
    this.auditableFields = auditableFields;
  }


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

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

  public String getCode() {
    return code;
  }



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


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

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

  public Boolean getAppendGeneratedCode() {
    return appendGeneratedCode;
  }



  public void setAppendGeneratedCode(Boolean appendGeneratedCode) {
    this.appendGeneratedCode = appendGeneratedCode;
  }


  public OfferTemplate uuid(String uuid) {
    
    this.uuid = uuid;
    return this;
  }

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

  public String getUuid() {
    return uuid;
  }



  public void setUuid(String uuid) {
    this.uuid = uuid;
  }


  public OfferTemplate cfValues(CustomFieldValues cfValues) {
    
    this.cfValues = cfValues;
    return this;
  }

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

  public CustomFieldValues getCfValues() {
    return cfValues;
  }



  public void setCfValues(CustomFieldValues cfValues) {
    this.cfValues = cfValues;
  }


  public OfferTemplate cfAccumulatedValues(CustomFieldValues cfAccumulatedValues) {
    
    this.cfAccumulatedValues = cfAccumulatedValues;
    return this;
  }

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

  public CustomFieldValues getCfAccumulatedValues() {
    return cfAccumulatedValues;
  }



  public void setCfAccumulatedValues(CustomFieldValues cfAccumulatedValues) {
    this.cfAccumulatedValues = cfAccumulatedValues;
  }


  public OfferTemplate disabled(Boolean disabled) {
    
    this.disabled = disabled;
    return this;
  }

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

  public Boolean getDisabled() {
    return disabled;
  }



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


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

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

  public String getName() {
    return name;
  }



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


  public OfferTemplate offerTemplateCategories(List<OfferTemplateCategory> offerTemplateCategories) {
    
    this.offerTemplateCategories = offerTemplateCategories;
    return this;
  }

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

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

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



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


  public OfferTemplate validity(DatePeriod validity) {
    
    this.validity = validity;
    return this;
  }

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

  public DatePeriod getValidity() {
    return validity;
  }



  public void setValidity(DatePeriod validity) {
    this.validity = validity;
  }


  public OfferTemplate 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 OfferTemplate attachments(List<DigitalResource> attachments) {
    
    this.attachments = attachments;
    return this;
  }

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

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

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



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


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

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

  public LifeCycleStatusEnum getLifeCycleStatus() {
    return lifeCycleStatus;
  }



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


  public OfferTemplate businessAccountModels(List<BusinessAccountModel> businessAccountModels) {
    
    this.businessAccountModels = businessAccountModels;
    return this;
  }

  public OfferTemplate addBusinessAccountModelsItem(BusinessAccountModel businessAccountModelsItem) {
    if (this.businessAccountModels == null) {
      this.businessAccountModels = new ArrayList<BusinessAccountModel>();
    }
    this.businessAccountModels.add(businessAccountModelsItem);
    return this;
  }

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

  public List<BusinessAccountModel> getBusinessAccountModels() {
    return businessAccountModels;
  }



  public void setBusinessAccountModels(List<BusinessAccountModel> businessAccountModels) {
    this.businessAccountModels = businessAccountModels;
  }


  public OfferTemplate channels(List<Channel> channels) {
    
    this.channels = channels;
    return this;
  }

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

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

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



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


  public OfferTemplate descriptionI18n(Map<String, String> descriptionI18n) {
    
    this.descriptionI18n = descriptionI18n;
    return this;
  }

  public OfferTemplate putDescriptionI18nItem(String key, String descriptionI18nItem) {
    if (this.descriptionI18n == null) {
      this.descriptionI18n = new HashMap<String, String>();
    }
    this.descriptionI18n.put(key, descriptionI18nItem);
    return this;
  }

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

  public Map<String, String> getDescriptionI18n() {
    return descriptionI18n;
  }



  public void setDescriptionI18n(Map<String, String> descriptionI18n) {
    this.descriptionI18n = descriptionI18n;
  }


  public OfferTemplate 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 OfferTemplate longDescriptionI18n(Map<String, String> longDescriptionI18n) {
    
    this.longDescriptionI18n = longDescriptionI18n;
    return this;
  }

  public OfferTemplate putLongDescriptionI18nItem(String key, String longDescriptionI18nItem) {
    if (this.longDescriptionI18n == null) {
      this.longDescriptionI18n = new HashMap<String, String>();
    }
    this.longDescriptionI18n.put(key, longDescriptionI18nItem);
    return this;
  }

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

  public Map<String, String> getLongDescriptionI18n() {
    return longDescriptionI18n;
  }



  public void setLongDescriptionI18n(Map<String, String> longDescriptionI18n) {
    this.longDescriptionI18n = longDescriptionI18n;
  }


  public OfferTemplate globalRatingScriptInstance(ScriptInstance globalRatingScriptInstance) {
    
    this.globalRatingScriptInstance = globalRatingScriptInstance;
    return this;
  }

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

  public ScriptInstance getGlobalRatingScriptInstance() {
    return globalRatingScriptInstance;
  }



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


  public OfferTemplate sellers(List<Seller> sellers) {
    
    this.sellers = sellers;
    return this;
  }

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

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

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



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


  public OfferTemplate customerCategories(List<CustomerCategory> customerCategories) {
    
    this.customerCategories = customerCategories;
    return this;
  }

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

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

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



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


  public OfferTemplate businessOfferModel(BusinessOfferModel businessOfferModel) {
    
    this.businessOfferModel = businessOfferModel;
    return this;
  }

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

  public BusinessOfferModel getBusinessOfferModel() {
    return businessOfferModel;
  }



  public void setBusinessOfferModel(BusinessOfferModel businessOfferModel) {
    this.businessOfferModel = businessOfferModel;
  }


  public OfferTemplate offerServiceTemplates(List<OfferServiceTemplate> offerServiceTemplates) {
    
    this.offerServiceTemplates = offerServiceTemplates;
    return this;
  }

  public OfferTemplate addOfferServiceTemplatesItem(OfferServiceTemplate offerServiceTemplatesItem) {
    if (this.offerServiceTemplates == null) {
      this.offerServiceTemplates = new ArrayList<OfferServiceTemplate>();
    }
    this.offerServiceTemplates.add(offerServiceTemplatesItem);
    return this;
  }

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

  public List<OfferServiceTemplate> getOfferServiceTemplates() {
    return offerServiceTemplates;
  }



  public void setOfferServiceTemplates(List<OfferServiceTemplate> offerServiceTemplates) {
    this.offerServiceTemplates = offerServiceTemplates;
  }


  public OfferTemplate offerProductTemplates(List<OfferProductTemplate> offerProductTemplates) {
    
    this.offerProductTemplates = offerProductTemplates;
    return this;
  }

  public OfferTemplate addOfferProductTemplatesItem(OfferProductTemplate offerProductTemplatesItem) {
    if (this.offerProductTemplates == null) {
      this.offerProductTemplates = new ArrayList<OfferProductTemplate>();
    }
    this.offerProductTemplates.add(offerProductTemplatesItem);
    return this;
  }

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

  public List<OfferProductTemplate> getOfferProductTemplates() {
    return offerProductTemplates;
  }



  public void setOfferProductTemplates(List<OfferProductTemplate> offerProductTemplates) {
    this.offerProductTemplates = offerProductTemplates;
  }


  public OfferTemplate minimumAmountEl(String minimumAmountEl) {
    
    this.minimumAmountEl = minimumAmountEl;
    return this;
  }

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

  public String getMinimumAmountEl() {
    return minimumAmountEl;
  }



  public void setMinimumAmountEl(String minimumAmountEl) {
    this.minimumAmountEl = minimumAmountEl;
  }


  public OfferTemplate minimumLabelEl(String minimumLabelEl) {
    
    this.minimumLabelEl = minimumLabelEl;
    return this;
  }

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

  public String getMinimumLabelEl() {
    return minimumLabelEl;
  }



  public void setMinimumLabelEl(String minimumLabelEl) {
    this.minimumLabelEl = minimumLabelEl;
  }


  public OfferTemplate minimumAmountElSpark(String minimumAmountElSpark) {
    
    this.minimumAmountElSpark = minimumAmountElSpark;
    return this;
  }

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

  public String getMinimumAmountElSpark() {
    return minimumAmountElSpark;
  }



  public void setMinimumAmountElSpark(String minimumAmountElSpark) {
    this.minimumAmountElSpark = minimumAmountElSpark;
  }


  public OfferTemplate allowedDiscountPlans(List<DiscountPlan> allowedDiscountPlans) {
    
    this.allowedDiscountPlans = allowedDiscountPlans;
    return this;
  }

  public OfferTemplate addAllowedDiscountPlansItem(DiscountPlan allowedDiscountPlansItem) {
    if (this.allowedDiscountPlans == null) {
      this.allowedDiscountPlans = new ArrayList<DiscountPlan>();
    }
    this.allowedDiscountPlans.add(allowedDiscountPlansItem);
    return this;
  }

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

  public List<DiscountPlan> getAllowedDiscountPlans() {
    return allowedDiscountPlans;
  }



  public void setAllowedDiscountPlans(List<DiscountPlan> allowedDiscountPlans) {
    this.allowedDiscountPlans = allowedDiscountPlans;
  }


  public OfferTemplate minimumLabelElSpark(String minimumLabelElSpark) {
    
    this.minimumLabelElSpark = minimumLabelElSpark;
    return this;
  }

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

  public String getMinimumLabelElSpark() {
    return minimumLabelElSpark;
  }



  public void setMinimumLabelElSpark(String minimumLabelElSpark) {
    this.minimumLabelElSpark = minimumLabelElSpark;
  }


  public OfferTemplate subscriptionRenewal(SubscriptionRenewal subscriptionRenewal) {
    
    this.subscriptionRenewal = subscriptionRenewal;
    return this;
  }

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

  public SubscriptionRenewal getSubscriptionRenewal() {
    return subscriptionRenewal;
  }



  public void setSubscriptionRenewal(SubscriptionRenewal subscriptionRenewal) {
    this.subscriptionRenewal = subscriptionRenewal;
  }


  public OfferTemplate prefix(String prefix) {
    
    this.prefix = prefix;
    return this;
  }

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

  public String getPrefix() {
    return prefix;
  }



  public void setPrefix(String prefix) {
    this.prefix = prefix;
  }


  public OfferTemplate serviceTemplatesByChargeType(Map<String, List<ServiceTemplate>> serviceTemplatesByChargeType) {
    
    this.serviceTemplatesByChargeType = serviceTemplatesByChargeType;
    return this;
  }

  public OfferTemplate putServiceTemplatesByChargeTypeItem(String key, List<ServiceTemplate> serviceTemplatesByChargeTypeItem) {
    if (this.serviceTemplatesByChargeType == null) {
      this.serviceTemplatesByChargeType = new HashMap<String, List<ServiceTemplate>>();
    }
    this.serviceTemplatesByChargeType.put(key, serviceTemplatesByChargeTypeItem);
    return this;
  }

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

  public Map<String, List<ServiceTemplate>> getServiceTemplatesByChargeType() {
    return serviceTemplatesByChargeType;
  }



  public void setServiceTemplatesByChargeType(Map<String, List<ServiceTemplate>> serviceTemplatesByChargeType) {
    this.serviceTemplatesByChargeType = serviceTemplatesByChargeType;
  }


  public OfferTemplate productTemplates(List<ProductTemplate> productTemplates) {
    
    this.productTemplates = productTemplates;
    return this;
  }

  public OfferTemplate addProductTemplatesItem(ProductTemplate productTemplatesItem) {
    if (this.productTemplates == null) {
      this.productTemplates = new ArrayList<ProductTemplate>();
    }
    this.productTemplates.add(productTemplatesItem);
    return this;
  }

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

  public List<ProductTemplate> getProductTemplates() {
    return productTemplates;
  }



  public void setProductTemplates(List<ProductTemplate> productTemplates) {
    this.productTemplates = productTemplates;
  }


  public OfferTemplate transientCode(String transientCode) {
    
    this.transientCode = transientCode;
    return this;
  }

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

  public String getTransientCode() {
    return transientCode;
  }



  public void setTransientCode(String transientCode) {
    this.transientCode = transientCode;
  }


  public OfferTemplate autoEndOfEngagement(Boolean autoEndOfEngagement) {
    
    this.autoEndOfEngagement = autoEndOfEngagement;
    return this;
  }

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

  public Boolean getAutoEndOfEngagement() {
    return autoEndOfEngagement;
  }



  public void setAutoEndOfEngagement(Boolean autoEndOfEngagement) {
    this.autoEndOfEngagement = autoEndOfEngagement;
  }


  public OfferTemplate descriptionI18nNullSafe(Map<String, String> descriptionI18nNullSafe) {
    
    this.descriptionI18nNullSafe = descriptionI18nNullSafe;
    return this;
  }

  public OfferTemplate putDescriptionI18nNullSafeItem(String key, String descriptionI18nNullSafeItem) {
    if (this.descriptionI18nNullSafe == null) {
      this.descriptionI18nNullSafe = new HashMap<String, String>();
    }
    this.descriptionI18nNullSafe.put(key, descriptionI18nNullSafeItem);
    return this;
  }

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

  public Map<String, String> getDescriptionI18nNullSafe() {
    return descriptionI18nNullSafe;
  }



  public void setDescriptionI18nNullSafe(Map<String, String> descriptionI18nNullSafe) {
    this.descriptionI18nNullSafe = descriptionI18nNullSafe;
  }


  public OfferTemplate nameOrCode(String nameOrCode) {
    
    this.nameOrCode = nameOrCode;
    return this;
  }

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

  public String getNameOrCode() {
    return nameOrCode;
  }



  public void setNameOrCode(String nameOrCode) {
    this.nameOrCode = nameOrCode;
  }


  public OfferTemplate longDescriptionI18nNullSafe(Map<String, String> longDescriptionI18nNullSafe) {
    
    this.longDescriptionI18nNullSafe = longDescriptionI18nNullSafe;
    return this;
  }

  public OfferTemplate putLongDescriptionI18nNullSafeItem(String key, String longDescriptionI18nNullSafeItem) {
    if (this.longDescriptionI18nNullSafe == null) {
      this.longDescriptionI18nNullSafe = new HashMap<String, String>();
    }
    this.longDescriptionI18nNullSafe.put(key, longDescriptionI18nNullSafeItem);
    return this;
  }

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

  public Map<String, String> getLongDescriptionI18nNullSafe() {
    return longDescriptionI18nNullSafe;
  }



  public void setLongDescriptionI18nNullSafe(Map<String, String> longDescriptionI18nNullSafe) {
    this.longDescriptionI18nNullSafe = longDescriptionI18nNullSafe;
  }


  public OfferTemplate active(Boolean active) {
    
    this.active = active;
    return this;
  }

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

  public Boolean getActive() {
    return active;
  }



  public void setActive(Boolean active) {
    this.active = active;
  }


  public OfferTemplate parentCFEntities(List<ICustomFieldEntity> parentCFEntities) {
    
    this.parentCFEntities = parentCFEntities;
    return this;
  }

  public OfferTemplate addParentCFEntitiesItem(ICustomFieldEntity parentCFEntitiesItem) {
    if (this.parentCFEntities == null) {
      this.parentCFEntities = new ArrayList<ICustomFieldEntity>();
    }
    this.parentCFEntities.add(parentCFEntitiesItem);
    return this;
  }

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

  public List<ICustomFieldEntity> getParentCFEntities() {
    return parentCFEntities;
  }



  public void setParentCFEntities(List<ICustomFieldEntity> parentCFEntities) {
    this.parentCFEntities = parentCFEntities;
  }


  public OfferTemplate cfValuesNullSafe(CustomFieldValues cfValuesNullSafe) {
    
    this.cfValuesNullSafe = cfValuesNullSafe;
    return this;
  }

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

  public CustomFieldValues getCfValuesNullSafe() {
    return cfValuesNullSafe;
  }



  public void setCfValuesNullSafe(CustomFieldValues cfValuesNullSafe) {
    this.cfValuesNullSafe = cfValuesNullSafe;
  }


  public OfferTemplate cfValuesAsValues(Map<String, Object> cfValuesAsValues) {
    
    this.cfValuesAsValues = cfValuesAsValues;
    return this;
  }

  public OfferTemplate putCfValuesAsValuesItem(String key, Object cfValuesAsValuesItem) {
    if (this.cfValuesAsValues == null) {
      this.cfValuesAsValues = new HashMap<String, Object>();
    }
    this.cfValuesAsValues.put(key, cfValuesAsValuesItem);
    return this;
  }

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

  public Map<String, Object> getCfValuesAsValues() {
    return cfValuesAsValues;
  }



  public void setCfValuesAsValues(Map<String, Object> cfValuesAsValues) {
    this.cfValuesAsValues = cfValuesAsValues;
  }


  public OfferTemplate cfAccumulatedValuesNullSafe(CustomFieldValues cfAccumulatedValuesNullSafe) {
    
    this.cfAccumulatedValuesNullSafe = cfAccumulatedValuesNullSafe;
    return this;
  }

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

  public CustomFieldValues getCfAccumulatedValuesNullSafe() {
    return cfAccumulatedValuesNullSafe;
  }



  public void setCfAccumulatedValuesNullSafe(CustomFieldValues cfAccumulatedValuesNullSafe) {
    this.cfAccumulatedValuesNullSafe = cfAccumulatedValuesNullSafe;
  }


  public OfferTemplate descriptionOrCode(String descriptionOrCode) {
    
    this.descriptionOrCode = descriptionOrCode;
    return this;
  }

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

  public String getDescriptionOrCode() {
    return descriptionOrCode;
  }



  public void setDescriptionOrCode(String descriptionOrCode) {
    this.descriptionOrCode = descriptionOrCode;
  }


  public OfferTemplate descriptionAndCode(String descriptionAndCode) {
    
    this.descriptionAndCode = descriptionAndCode;
    return this;
  }

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

  public String getDescriptionAndCode() {
    return descriptionAndCode;
  }



  public void setDescriptionAndCode(String descriptionAndCode) {
    this.descriptionAndCode = descriptionAndCode;
  }


  public OfferTemplate referenceCode(String referenceCode) {
    
    this.referenceCode = referenceCode;
    return this;
  }

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

  public String getReferenceCode() {
    return referenceCode;
  }



  public void setReferenceCode(String referenceCode) {
    this.referenceCode = referenceCode;
  }


  public OfferTemplate referenceDescription(String referenceDescription) {
    
    this.referenceDescription = referenceDescription;
    return this;
  }

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

  public String getReferenceDescription() {
    return referenceDescription;
  }



  public void setReferenceDescription(String referenceDescription) {
    this.referenceDescription = referenceDescription;
  }


  public OfferTemplate codeChanged(Boolean codeChanged) {
    
    this.codeChanged = codeChanged;
    return this;
  }

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

  public Boolean getCodeChanged() {
    return codeChanged;
  }



  public void setCodeChanged(Boolean codeChanged) {
    this.codeChanged = codeChanged;
  }


  public OfferTemplate parentEntity(BusinessEntity parentEntity) {
    
    this.parentEntity = parentEntity;
    return this;
  }

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

  public BusinessEntity getParentEntity() {
    return parentEntity;
  }



  public void setParentEntity(BusinessEntity parentEntity) {
    this.parentEntity = parentEntity;
  }


  public OfferTemplate _transient(Boolean _transient) {
    
    this._transient = _transient;
    return this;
  }

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

  public Boolean getTransient() {
    return _transient;
  }



  public void setTransient(Boolean _transient) {
    this._transient = _transient;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    OfferTemplate offerTemplate = (OfferTemplate) o;
    return Objects.equals(this.id, offerTemplate.id) &&
        Objects.equals(this.version, offerTemplate.version) &&
        Objects.equals(this.auditable, offerTemplate.auditable) &&
        Objects.equals(this.historized, offerTemplate.historized) &&
        Objects.equals(this.notified, offerTemplate.notified) &&
        Objects.equals(this.auditableFields, offerTemplate.auditableFields) &&
        Objects.equals(this.code, offerTemplate.code) &&
        Objects.equals(this.description, offerTemplate.description) &&
        Objects.equals(this.appendGeneratedCode, offerTemplate.appendGeneratedCode) &&
        Objects.equals(this.uuid, offerTemplate.uuid) &&
        Objects.equals(this.cfValues, offerTemplate.cfValues) &&
        Objects.equals(this.cfAccumulatedValues, offerTemplate.cfAccumulatedValues) &&
        Objects.equals(this.disabled, offerTemplate.disabled) &&
        Objects.equals(this.name, offerTemplate.name) &&
        Objects.equals(this.offerTemplateCategories, offerTemplate.offerTemplateCategories) &&
        Objects.equals(this.validity, offerTemplate.validity) &&
        Objects.equals(this.imagePath, offerTemplate.imagePath) &&
        Objects.equals(this.attachments, offerTemplate.attachments) &&
        Objects.equals(this.lifeCycleStatus, offerTemplate.lifeCycleStatus) &&
        Objects.equals(this.businessAccountModels, offerTemplate.businessAccountModels) &&
        Objects.equals(this.channels, offerTemplate.channels) &&
        Objects.equals(this.descriptionI18n, offerTemplate.descriptionI18n) &&
        Objects.equals(this.longDescription, offerTemplate.longDescription) &&
        Objects.equals(this.longDescriptionI18n, offerTemplate.longDescriptionI18n) &&
        Objects.equals(this.globalRatingScriptInstance, offerTemplate.globalRatingScriptInstance) &&
        Objects.equals(this.sellers, offerTemplate.sellers) &&
        Objects.equals(this.customerCategories, offerTemplate.customerCategories) &&
        Objects.equals(this.businessOfferModel, offerTemplate.businessOfferModel) &&
        Objects.equals(this.offerServiceTemplates, offerTemplate.offerServiceTemplates) &&
        Objects.equals(this.offerProductTemplates, offerTemplate.offerProductTemplates) &&
        Objects.equals(this.minimumAmountEl, offerTemplate.minimumAmountEl) &&
        Objects.equals(this.minimumLabelEl, offerTemplate.minimumLabelEl) &&
        Objects.equals(this.minimumAmountElSpark, offerTemplate.minimumAmountElSpark) &&
        Objects.equals(this.allowedDiscountPlans, offerTemplate.allowedDiscountPlans) &&
        Objects.equals(this.minimumLabelElSpark, offerTemplate.minimumLabelElSpark) &&
        Objects.equals(this.subscriptionRenewal, offerTemplate.subscriptionRenewal) &&
        Objects.equals(this.prefix, offerTemplate.prefix) &&
        Objects.equals(this.serviceTemplatesByChargeType, offerTemplate.serviceTemplatesByChargeType) &&
        Objects.equals(this.productTemplates, offerTemplate.productTemplates) &&
        Objects.equals(this.transientCode, offerTemplate.transientCode) &&
        Objects.equals(this.autoEndOfEngagement, offerTemplate.autoEndOfEngagement) &&
        Objects.equals(this.descriptionI18nNullSafe, offerTemplate.descriptionI18nNullSafe) &&
        Objects.equals(this.nameOrCode, offerTemplate.nameOrCode) &&
        Objects.equals(this.longDescriptionI18nNullSafe, offerTemplate.longDescriptionI18nNullSafe) &&
        Objects.equals(this.active, offerTemplate.active) &&
        Objects.equals(this.parentCFEntities, offerTemplate.parentCFEntities) &&
        Objects.equals(this.cfValuesNullSafe, offerTemplate.cfValuesNullSafe) &&
        Objects.equals(this.cfValuesAsValues, offerTemplate.cfValuesAsValues) &&
        Objects.equals(this.cfAccumulatedValuesNullSafe, offerTemplate.cfAccumulatedValuesNullSafe) &&
        Objects.equals(this.descriptionOrCode, offerTemplate.descriptionOrCode) &&
        Objects.equals(this.descriptionAndCode, offerTemplate.descriptionAndCode) &&
        Objects.equals(this.referenceCode, offerTemplate.referenceCode) &&
        Objects.equals(this.referenceDescription, offerTemplate.referenceDescription) &&
        Objects.equals(this.codeChanged, offerTemplate.codeChanged) &&
        Objects.equals(this.parentEntity, offerTemplate.parentEntity) &&
        Objects.equals(this._transient, offerTemplate._transient);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, version, auditable, historized, notified, auditableFields, code, description, appendGeneratedCode, uuid, cfValues, cfAccumulatedValues, disabled, name, offerTemplateCategories, validity, imagePath, attachments, lifeCycleStatus, businessAccountModels, channels, descriptionI18n, longDescription, longDescriptionI18n, globalRatingScriptInstance, sellers, customerCategories, businessOfferModel, offerServiceTemplates, offerProductTemplates, minimumAmountEl, minimumLabelEl, minimumAmountElSpark, allowedDiscountPlans, minimumLabelElSpark, subscriptionRenewal, prefix, serviceTemplatesByChargeType, productTemplates, transientCode, autoEndOfEngagement, descriptionI18nNullSafe, nameOrCode, longDescriptionI18nNullSafe, active, parentCFEntities, cfValuesNullSafe, cfValuesAsValues, cfAccumulatedValuesNullSafe, descriptionOrCode, descriptionAndCode, referenceCode, referenceDescription, codeChanged, parentEntity, _transient);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class OfferTemplate {\n");
    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    version: ").append(toIndentedString(version)).append("\n");
    sb.append("    auditable: ").append(toIndentedString(auditable)).append("\n");
    sb.append("    historized: ").append(toIndentedString(historized)).append("\n");
    sb.append("    notified: ").append(toIndentedString(notified)).append("\n");
    sb.append("    auditableFields: ").append(toIndentedString(auditableFields)).append("\n");
    sb.append("    code: ").append(toIndentedString(code)).append("\n");
    sb.append("    description: ").append(toIndentedString(description)).append("\n");
    sb.append("    appendGeneratedCode: ").append(toIndentedString(appendGeneratedCode)).append("\n");
    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
    sb.append("    cfValues: ").append(toIndentedString(cfValues)).append("\n");
    sb.append("    cfAccumulatedValues: ").append(toIndentedString(cfAccumulatedValues)).append("\n");
    sb.append("    disabled: ").append(toIndentedString(disabled)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    offerTemplateCategories: ").append(toIndentedString(offerTemplateCategories)).append("\n");
    sb.append("    validity: ").append(toIndentedString(validity)).append("\n");
    sb.append("    imagePath: ").append(toIndentedString(imagePath)).append("\n");
    sb.append("    attachments: ").append(toIndentedString(attachments)).append("\n");
    sb.append("    lifeCycleStatus: ").append(toIndentedString(lifeCycleStatus)).append("\n");
    sb.append("    businessAccountModels: ").append(toIndentedString(businessAccountModels)).append("\n");
    sb.append("    channels: ").append(toIndentedString(channels)).append("\n");
    sb.append("    descriptionI18n: ").append(toIndentedString(descriptionI18n)).append("\n");
    sb.append("    longDescription: ").append(toIndentedString(longDescription)).append("\n");
    sb.append("    longDescriptionI18n: ").append(toIndentedString(longDescriptionI18n)).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("    businessOfferModel: ").append(toIndentedString(businessOfferModel)).append("\n");
    sb.append("    offerServiceTemplates: ").append(toIndentedString(offerServiceTemplates)).append("\n");
    sb.append("    offerProductTemplates: ").append(toIndentedString(offerProductTemplates)).append("\n");
    sb.append("    minimumAmountEl: ").append(toIndentedString(minimumAmountEl)).append("\n");
    sb.append("    minimumLabelEl: ").append(toIndentedString(minimumLabelEl)).append("\n");
    sb.append("    minimumAmountElSpark: ").append(toIndentedString(minimumAmountElSpark)).append("\n");
    sb.append("    allowedDiscountPlans: ").append(toIndentedString(allowedDiscountPlans)).append("\n");
    sb.append("    minimumLabelElSpark: ").append(toIndentedString(minimumLabelElSpark)).append("\n");
    sb.append("    subscriptionRenewal: ").append(toIndentedString(subscriptionRenewal)).append("\n");
    sb.append("    prefix: ").append(toIndentedString(prefix)).append("\n");
    sb.append("    serviceTemplatesByChargeType: ").append(toIndentedString(serviceTemplatesByChargeType)).append("\n");
    sb.append("    productTemplates: ").append(toIndentedString(productTemplates)).append("\n");
    sb.append("    transientCode: ").append(toIndentedString(transientCode)).append("\n");
    sb.append("    autoEndOfEngagement: ").append(toIndentedString(autoEndOfEngagement)).append("\n");
    sb.append("    descriptionI18nNullSafe: ").append(toIndentedString(descriptionI18nNullSafe)).append("\n");
    sb.append("    nameOrCode: ").append(toIndentedString(nameOrCode)).append("\n");
    sb.append("    longDescriptionI18nNullSafe: ").append(toIndentedString(longDescriptionI18nNullSafe)).append("\n");
    sb.append("    active: ").append(toIndentedString(active)).append("\n");
    sb.append("    parentCFEntities: ").append(toIndentedString(parentCFEntities)).append("\n");
    sb.append("    cfValuesNullSafe: ").append(toIndentedString(cfValuesNullSafe)).append("\n");
    sb.append("    cfValuesAsValues: ").append(toIndentedString(cfValuesAsValues)).append("\n");
    sb.append("    cfAccumulatedValuesNullSafe: ").append(toIndentedString(cfAccumulatedValuesNullSafe)).append("\n");
    sb.append("    descriptionOrCode: ").append(toIndentedString(descriptionOrCode)).append("\n");
    sb.append("    descriptionAndCode: ").append(toIndentedString(descriptionAndCode)).append("\n");
    sb.append("    referenceCode: ").append(toIndentedString(referenceCode)).append("\n");
    sb.append("    referenceDescription: ").append(toIndentedString(referenceDescription)).append("\n");
    sb.append("    codeChanged: ").append(toIndentedString(codeChanged)).append("\n");
    sb.append("    parentEntity: ").append(toIndentedString(parentEntity)).append("\n");
    sb.append("    _transient: ").append(toIndentedString(_transient)).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    ");
  }

}

