/*
 * 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.BusinessEntity;
import org.openapitools.client.model.BusinessServiceModel;
import org.openapitools.client.model.Calendar;
import org.openapitools.client.model.CustomFieldValues;
import org.openapitools.client.model.ICustomFieldEntity;
import org.openapitools.client.model.ServiceChargeTemplateRecurring;
import org.openapitools.client.model.ServiceChargeTemplateSubscription;
import org.openapitools.client.model.ServiceChargeTemplateTermination;
import org.openapitools.client.model.ServiceChargeTemplateUsage;
import org.openapitools.client.model.SubscriptionRenewal;

/**
 * ServiceTemplate
 */
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", date = "2019-09-13T10:03:17.753Z[GMT]")
public class ServiceTemplate {
  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_SERVICE_RECURRING_CHARGES = "serviceRecurringCharges";
  @SerializedName(SERIALIZED_NAME_SERVICE_RECURRING_CHARGES)
  private List<ServiceChargeTemplateRecurring> serviceRecurringCharges = null;

  public static final String SERIALIZED_NAME_SERVICE_SUBSCRIPTION_CHARGES = "serviceSubscriptionCharges";
  @SerializedName(SERIALIZED_NAME_SERVICE_SUBSCRIPTION_CHARGES)
  private List<ServiceChargeTemplateSubscription> serviceSubscriptionCharges = null;

  public static final String SERIALIZED_NAME_SERVICE_TERMINATION_CHARGES = "serviceTerminationCharges";
  @SerializedName(SERIALIZED_NAME_SERVICE_TERMINATION_CHARGES)
  private List<ServiceChargeTemplateTermination> serviceTerminationCharges = null;

  public static final String SERIALIZED_NAME_SERVICE_USAGE_CHARGES = "serviceUsageCharges";
  @SerializedName(SERIALIZED_NAME_SERVICE_USAGE_CHARGES)
  private List<ServiceChargeTemplateUsage> serviceUsageCharges = null;

  public static final String SERIALIZED_NAME_INVOICING_CALENDAR = "invoicingCalendar";
  @SerializedName(SERIALIZED_NAME_INVOICING_CALENDAR)
  private Calendar invoicingCalendar;

  public static final String SERIALIZED_NAME_BUSINESS_SERVICE_MODEL = "businessServiceModel";
  @SerializedName(SERIALIZED_NAME_BUSINESS_SERVICE_MODEL)
  private BusinessServiceModel businessServiceModel;

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

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

  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_AMOUNT_EL_SPARK = "minimumAmountElSpark";
  @SerializedName(SERIALIZED_NAME_MINIMUM_AMOUNT_EL_SPARK)
  private String minimumAmountElSpark;

  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_LABEL_EL_SPARK = "minimumLabelElSpark";
  @SerializedName(SERIALIZED_NAME_MINIMUM_LABEL_EL_SPARK)
  private String minimumLabelElSpark;

  public static final String SERIALIZED_NAME_SERVICE_RENEWAL = "serviceRenewal";
  @SerializedName(SERIALIZED_NAME_SERVICE_RENEWAL)
  private SubscriptionRenewal serviceRenewal;

  public static final String SERIALIZED_NAME_SELECTED = "selected";
  @SerializedName(SERIALIZED_NAME_SELECTED)
  private Boolean selected;

  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_INSTANTIATED_FROM_B_S_M = "instantiatedFromBSM";
  @SerializedName(SERIALIZED_NAME_INSTANTIATED_FROM_B_S_M)
  private Boolean instantiatedFromBSM;

  public static final String SERIALIZED_NAME_DESCRIPTION_OVERRIDE = "descriptionOverride";
  @SerializedName(SERIALIZED_NAME_DESCRIPTION_OVERRIDE)
  private String descriptionOverride;

  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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate auditableFields(List<AuditableFieldHistory> auditableFields) {
    
    this.auditableFields = auditableFields;
    return this;
  }

  public ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate serviceRecurringCharges(List<ServiceChargeTemplateRecurring> serviceRecurringCharges) {
    
    this.serviceRecurringCharges = serviceRecurringCharges;
    return this;
  }

  public ServiceTemplate addServiceRecurringChargesItem(ServiceChargeTemplateRecurring serviceRecurringChargesItem) {
    if (this.serviceRecurringCharges == null) {
      this.serviceRecurringCharges = new ArrayList<ServiceChargeTemplateRecurring>();
    }
    this.serviceRecurringCharges.add(serviceRecurringChargesItem);
    return this;
  }

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

  public List<ServiceChargeTemplateRecurring> getServiceRecurringCharges() {
    return serviceRecurringCharges;
  }



  public void setServiceRecurringCharges(List<ServiceChargeTemplateRecurring> serviceRecurringCharges) {
    this.serviceRecurringCharges = serviceRecurringCharges;
  }


  public ServiceTemplate serviceSubscriptionCharges(List<ServiceChargeTemplateSubscription> serviceSubscriptionCharges) {
    
    this.serviceSubscriptionCharges = serviceSubscriptionCharges;
    return this;
  }

  public ServiceTemplate addServiceSubscriptionChargesItem(ServiceChargeTemplateSubscription serviceSubscriptionChargesItem) {
    if (this.serviceSubscriptionCharges == null) {
      this.serviceSubscriptionCharges = new ArrayList<ServiceChargeTemplateSubscription>();
    }
    this.serviceSubscriptionCharges.add(serviceSubscriptionChargesItem);
    return this;
  }

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

  public List<ServiceChargeTemplateSubscription> getServiceSubscriptionCharges() {
    return serviceSubscriptionCharges;
  }



  public void setServiceSubscriptionCharges(List<ServiceChargeTemplateSubscription> serviceSubscriptionCharges) {
    this.serviceSubscriptionCharges = serviceSubscriptionCharges;
  }


  public ServiceTemplate serviceTerminationCharges(List<ServiceChargeTemplateTermination> serviceTerminationCharges) {
    
    this.serviceTerminationCharges = serviceTerminationCharges;
    return this;
  }

  public ServiceTemplate addServiceTerminationChargesItem(ServiceChargeTemplateTermination serviceTerminationChargesItem) {
    if (this.serviceTerminationCharges == null) {
      this.serviceTerminationCharges = new ArrayList<ServiceChargeTemplateTermination>();
    }
    this.serviceTerminationCharges.add(serviceTerminationChargesItem);
    return this;
  }

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

  public List<ServiceChargeTemplateTermination> getServiceTerminationCharges() {
    return serviceTerminationCharges;
  }



  public void setServiceTerminationCharges(List<ServiceChargeTemplateTermination> serviceTerminationCharges) {
    this.serviceTerminationCharges = serviceTerminationCharges;
  }


  public ServiceTemplate serviceUsageCharges(List<ServiceChargeTemplateUsage> serviceUsageCharges) {
    
    this.serviceUsageCharges = serviceUsageCharges;
    return this;
  }

  public ServiceTemplate addServiceUsageChargesItem(ServiceChargeTemplateUsage serviceUsageChargesItem) {
    if (this.serviceUsageCharges == null) {
      this.serviceUsageCharges = new ArrayList<ServiceChargeTemplateUsage>();
    }
    this.serviceUsageCharges.add(serviceUsageChargesItem);
    return this;
  }

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

  public List<ServiceChargeTemplateUsage> getServiceUsageCharges() {
    return serviceUsageCharges;
  }



  public void setServiceUsageCharges(List<ServiceChargeTemplateUsage> serviceUsageCharges) {
    this.serviceUsageCharges = serviceUsageCharges;
  }


  public ServiceTemplate invoicingCalendar(Calendar invoicingCalendar) {
    
    this.invoicingCalendar = invoicingCalendar;
    return this;
  }

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

  public Calendar getInvoicingCalendar() {
    return invoicingCalendar;
  }



  public void setInvoicingCalendar(Calendar invoicingCalendar) {
    this.invoicingCalendar = invoicingCalendar;
  }


  public ServiceTemplate businessServiceModel(BusinessServiceModel businessServiceModel) {
    
    this.businessServiceModel = businessServiceModel;
    return this;
  }

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

  public BusinessServiceModel getBusinessServiceModel() {
    return businessServiceModel;
  }



  public void setBusinessServiceModel(BusinessServiceModel businessServiceModel) {
    this.businessServiceModel = businessServiceModel;
  }


  public ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate serviceRenewal(SubscriptionRenewal serviceRenewal) {
    
    this.serviceRenewal = serviceRenewal;
    return this;
  }

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

  public SubscriptionRenewal getServiceRenewal() {
    return serviceRenewal;
  }



  public void setServiceRenewal(SubscriptionRenewal serviceRenewal) {
    this.serviceRenewal = serviceRenewal;
  }


  public ServiceTemplate selected(Boolean selected) {
    
    this.selected = selected;
    return this;
  }

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

  public Boolean getSelected() {
    return selected;
  }



  public void setSelected(Boolean selected) {
    this.selected = selected;
  }


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

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

  public Boolean getInstantiatedFromBSM() {
    return instantiatedFromBSM;
  }



  public void setInstantiatedFromBSM(Boolean instantiatedFromBSM) {
    this.instantiatedFromBSM = instantiatedFromBSM;
  }


  public ServiceTemplate descriptionOverride(String descriptionOverride) {
    
    this.descriptionOverride = descriptionOverride;
    return this;
  }

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

  public String getDescriptionOverride() {
    return descriptionOverride;
  }



  public void setDescriptionOverride(String descriptionOverride) {
    this.descriptionOverride = descriptionOverride;
  }


  public ServiceTemplate 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 ServiceTemplate parentCFEntities(List<ICustomFieldEntity> parentCFEntities) {
    
    this.parentCFEntities = parentCFEntities;
    return this;
  }

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

  public ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate 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 ServiceTemplate _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;
    }
    ServiceTemplate serviceTemplate = (ServiceTemplate) o;
    return Objects.equals(this.id, serviceTemplate.id) &&
        Objects.equals(this.version, serviceTemplate.version) &&
        Objects.equals(this.auditable, serviceTemplate.auditable) &&
        Objects.equals(this.historized, serviceTemplate.historized) &&
        Objects.equals(this.notified, serviceTemplate.notified) &&
        Objects.equals(this.auditableFields, serviceTemplate.auditableFields) &&
        Objects.equals(this.code, serviceTemplate.code) &&
        Objects.equals(this.description, serviceTemplate.description) &&
        Objects.equals(this.appendGeneratedCode, serviceTemplate.appendGeneratedCode) &&
        Objects.equals(this.uuid, serviceTemplate.uuid) &&
        Objects.equals(this.cfValues, serviceTemplate.cfValues) &&
        Objects.equals(this.cfAccumulatedValues, serviceTemplate.cfAccumulatedValues) &&
        Objects.equals(this.disabled, serviceTemplate.disabled) &&
        Objects.equals(this.serviceRecurringCharges, serviceTemplate.serviceRecurringCharges) &&
        Objects.equals(this.serviceSubscriptionCharges, serviceTemplate.serviceSubscriptionCharges) &&
        Objects.equals(this.serviceTerminationCharges, serviceTemplate.serviceTerminationCharges) &&
        Objects.equals(this.serviceUsageCharges, serviceTemplate.serviceUsageCharges) &&
        Objects.equals(this.invoicingCalendar, serviceTemplate.invoicingCalendar) &&
        Objects.equals(this.businessServiceModel, serviceTemplate.businessServiceModel) &&
        Objects.equals(this.longDescription, serviceTemplate.longDescription) &&
        Objects.equals(this.imagePath, serviceTemplate.imagePath) &&
        Objects.equals(this.minimumAmountEl, serviceTemplate.minimumAmountEl) &&
        Objects.equals(this.minimumAmountElSpark, serviceTemplate.minimumAmountElSpark) &&
        Objects.equals(this.minimumLabelEl, serviceTemplate.minimumLabelEl) &&
        Objects.equals(this.minimumLabelElSpark, serviceTemplate.minimumLabelElSpark) &&
        Objects.equals(this.serviceRenewal, serviceTemplate.serviceRenewal) &&
        Objects.equals(this.selected, serviceTemplate.selected) &&
        Objects.equals(this.autoEndOfEngagement, serviceTemplate.autoEndOfEngagement) &&
        Objects.equals(this.instantiatedFromBSM, serviceTemplate.instantiatedFromBSM) &&
        Objects.equals(this.descriptionOverride, serviceTemplate.descriptionOverride) &&
        Objects.equals(this.active, serviceTemplate.active) &&
        Objects.equals(this.parentCFEntities, serviceTemplate.parentCFEntities) &&
        Objects.equals(this.cfValuesNullSafe, serviceTemplate.cfValuesNullSafe) &&
        Objects.equals(this.cfValuesAsValues, serviceTemplate.cfValuesAsValues) &&
        Objects.equals(this.cfAccumulatedValuesNullSafe, serviceTemplate.cfAccumulatedValuesNullSafe) &&
        Objects.equals(this.descriptionOrCode, serviceTemplate.descriptionOrCode) &&
        Objects.equals(this.descriptionAndCode, serviceTemplate.descriptionAndCode) &&
        Objects.equals(this.referenceCode, serviceTemplate.referenceCode) &&
        Objects.equals(this.referenceDescription, serviceTemplate.referenceDescription) &&
        Objects.equals(this.codeChanged, serviceTemplate.codeChanged) &&
        Objects.equals(this.parentEntity, serviceTemplate.parentEntity) &&
        Objects.equals(this._transient, serviceTemplate._transient);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, version, auditable, historized, notified, auditableFields, code, description, appendGeneratedCode, uuid, cfValues, cfAccumulatedValues, disabled, serviceRecurringCharges, serviceSubscriptionCharges, serviceTerminationCharges, serviceUsageCharges, invoicingCalendar, businessServiceModel, longDescription, imagePath, minimumAmountEl, minimumAmountElSpark, minimumLabelEl, minimumLabelElSpark, serviceRenewal, selected, autoEndOfEngagement, instantiatedFromBSM, descriptionOverride, active, parentCFEntities, cfValuesNullSafe, cfValuesAsValues, cfAccumulatedValuesNullSafe, descriptionOrCode, descriptionAndCode, referenceCode, referenceDescription, codeChanged, parentEntity, _transient);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class ServiceTemplate {\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("    serviceRecurringCharges: ").append(toIndentedString(serviceRecurringCharges)).append("\n");
    sb.append("    serviceSubscriptionCharges: ").append(toIndentedString(serviceSubscriptionCharges)).append("\n");
    sb.append("    serviceTerminationCharges: ").append(toIndentedString(serviceTerminationCharges)).append("\n");
    sb.append("    serviceUsageCharges: ").append(toIndentedString(serviceUsageCharges)).append("\n");
    sb.append("    invoicingCalendar: ").append(toIndentedString(invoicingCalendar)).append("\n");
    sb.append("    businessServiceModel: ").append(toIndentedString(businessServiceModel)).append("\n");
    sb.append("    longDescription: ").append(toIndentedString(longDescription)).append("\n");
    sb.append("    imagePath: ").append(toIndentedString(imagePath)).append("\n");
    sb.append("    minimumAmountEl: ").append(toIndentedString(minimumAmountEl)).append("\n");
    sb.append("    minimumAmountElSpark: ").append(toIndentedString(minimumAmountElSpark)).append("\n");
    sb.append("    minimumLabelEl: ").append(toIndentedString(minimumLabelEl)).append("\n");
    sb.append("    minimumLabelElSpark: ").append(toIndentedString(minimumLabelElSpark)).append("\n");
    sb.append("    serviceRenewal: ").append(toIndentedString(serviceRenewal)).append("\n");
    sb.append("    selected: ").append(toIndentedString(selected)).append("\n");
    sb.append("    autoEndOfEngagement: ").append(toIndentedString(autoEndOfEngagement)).append("\n");
    sb.append("    instantiatedFromBSM: ").append(toIndentedString(instantiatedFromBSM)).append("\n");
    sb.append("    descriptionOverride: ").append(toIndentedString(descriptionOverride)).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    ");
  }

}

