/*
 * 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.math.BigDecimal;
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.Calendar;
import org.openapitools.client.model.CustomFieldValues;
import org.openapitools.client.model.ICustomFieldEntity;
import org.openapitools.client.model.InvoiceSubCategory;
import org.openapitools.client.model.RevenueRecognitionRule;
import org.openapitools.client.model.TriggeredEDRTemplate;

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

  /**
   * Gets or Sets type
   */
  @JsonAdapter(TypeEnum.Adapter.class)
  public enum TypeEnum {
    CREDIT("CREDIT"),
    
    DEBIT("DEBIT");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_TYPE = "type";
  @SerializedName(SERIALIZED_NAME_TYPE)
  private TypeEnum type;

  public static final String SERIALIZED_NAME_AMOUNT_EDITABLE = "amountEditable";
  @SerializedName(SERIALIZED_NAME_AMOUNT_EDITABLE)
  private Boolean amountEditable;

  public static final String SERIALIZED_NAME_INVOICE_SUB_CATEGORY = "invoiceSubCategory";
  @SerializedName(SERIALIZED_NAME_INVOICE_SUB_CATEGORY)
  private InvoiceSubCategory invoiceSubCategory;

  public static final String SERIALIZED_NAME_EDR_TEMPLATES = "edrTemplates";
  @SerializedName(SERIALIZED_NAME_EDR_TEMPLATES)
  private List<TriggeredEDRTemplate> edrTemplates = null;

  public static final String SERIALIZED_NAME_INPUT_UNIT_DESCRIPTION = "inputUnitDescription";
  @SerializedName(SERIALIZED_NAME_INPUT_UNIT_DESCRIPTION)
  private String inputUnitDescription;

  public static final String SERIALIZED_NAME_RATING_UNIT_DESCRIPTION = "ratingUnitDescription";
  @SerializedName(SERIALIZED_NAME_RATING_UNIT_DESCRIPTION)
  private String ratingUnitDescription;

  public static final String SERIALIZED_NAME_UNIT_MULTIPLICATOR = "unitMultiplicator";
  @SerializedName(SERIALIZED_NAME_UNIT_MULTIPLICATOR)
  private BigDecimal unitMultiplicator;

  public static final String SERIALIZED_NAME_UNIT_NB_DECIMAL = "unitNbDecimal";
  @SerializedName(SERIALIZED_NAME_UNIT_NB_DECIMAL)
  private Integer unitNbDecimal;

  /**
   * Gets or Sets roundingMode
   */
  @JsonAdapter(RoundingModeEnum.Adapter.class)
  public enum RoundingModeEnum {
    NEAREST("NEAREST"),
    
    DOWN("DOWN"),
    
    UP("UP");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_ROUNDING_MODE = "roundingMode";
  @SerializedName(SERIALIZED_NAME_ROUNDING_MODE)
  private RoundingModeEnum roundingMode;

  public static final String SERIALIZED_NAME_REVENUE_RECOGNITION_RULE = "revenueRecognitionRule";
  @SerializedName(SERIALIZED_NAME_REVENUE_RECOGNITION_RULE)
  private RevenueRecognitionRule revenueRecognitionRule;

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

  /**
   * Gets or Sets recurrenceType
   */
  @JsonAdapter(RecurrenceTypeEnum.Adapter.class)
  public enum RecurrenceTypeEnum {
    CALENDAR("CALENDAR"),
    
    PERIOD("PERIOD");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_RECURRENCE_TYPE = "recurrenceType";
  @SerializedName(SERIALIZED_NAME_RECURRENCE_TYPE)
  private RecurrenceTypeEnum recurrenceType;

  public static final String SERIALIZED_NAME_CALENDAR = "calendar";
  @SerializedName(SERIALIZED_NAME_CALENDAR)
  private Calendar calendar;

  public static final String SERIALIZED_NAME_DURATION_TERM_IN_MONTH = "durationTermInMonth";
  @SerializedName(SERIALIZED_NAME_DURATION_TERM_IN_MONTH)
  private Integer durationTermInMonth;

  public static final String SERIALIZED_NAME_SUBSCRIPTION_PRORATA = "subscriptionProrata";
  @SerializedName(SERIALIZED_NAME_SUBSCRIPTION_PRORATA)
  private Boolean subscriptionProrata;

  public static final String SERIALIZED_NAME_TERMINATION_PRORATA = "terminationProrata";
  @SerializedName(SERIALIZED_NAME_TERMINATION_PRORATA)
  private Boolean terminationProrata;

  public static final String SERIALIZED_NAME_APPLY_IN_ADVANCE = "applyInAdvance";
  @SerializedName(SERIALIZED_NAME_APPLY_IN_ADVANCE)
  private Boolean applyInAdvance;

  /**
   * Gets or Sets shareLevel
   */
  @JsonAdapter(ShareLevelEnum.Adapter.class)
  public enum ShareLevelEnum {
    PROVIDER("PROVIDER"),
    
    SELLER("SELLER"),
    
    CUSTOMER("CUSTOMER"),
    
    CUSTOMER_ACCOUNT("CUSTOMER_ACCOUNT"),
    
    BILLING_ACCOUNT("BILLING_ACCOUNT"),
    
    USER_ACCOUNT("USER_ACCOUNT");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_SHARE_LEVEL = "shareLevel";
  @SerializedName(SERIALIZED_NAME_SHARE_LEVEL)
  private ShareLevelEnum shareLevel;

  public static final String SERIALIZED_NAME_FILTER_EXPRESSION = "filterExpression";
  @SerializedName(SERIALIZED_NAME_FILTER_EXPRESSION)
  private String filterExpression;

  public static final String SERIALIZED_NAME_SUBSCRIPTION_PRORATA_EL = "subscriptionProrataEl";
  @SerializedName(SERIALIZED_NAME_SUBSCRIPTION_PRORATA_EL)
  private String subscriptionProrataEl;

  public static final String SERIALIZED_NAME_TERMINATION_PRORATA_EL = "terminationProrataEl";
  @SerializedName(SERIALIZED_NAME_TERMINATION_PRORATA_EL)
  private String terminationProrataEl;

  public static final String SERIALIZED_NAME_APPLY_IN_ADVANCE_EL = "applyInAdvanceEl";
  @SerializedName(SERIALIZED_NAME_APPLY_IN_ADVANCE_EL)
  private String applyInAdvanceEl;

  public static final String SERIALIZED_NAME_DURATION_TERM_IN_MONTH_EL = "durationTermInMonthEl";
  @SerializedName(SERIALIZED_NAME_DURATION_TERM_IN_MONTH_EL)
  private String durationTermInMonthEl;

  public static final String SERIALIZED_NAME_CALENDAR_CODE_EL = "calendarCodeEl";
  @SerializedName(SERIALIZED_NAME_CALENDAR_CODE_EL)
  private String calendarCodeEl;

  public static final String SERIALIZED_NAME_CHARGE_TYPE = "chargeType";
  @SerializedName(SERIALIZED_NAME_CHARGE_TYPE)
  private String chargeType;

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

  public RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate type(TypeEnum type) {
    
    this.type = type;
    return this;
  }

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

  public TypeEnum getType() {
    return type;
  }



  public void setType(TypeEnum type) {
    this.type = type;
  }


  public RecurringChargeTemplate amountEditable(Boolean amountEditable) {
    
    this.amountEditable = amountEditable;
    return this;
  }

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

  public Boolean getAmountEditable() {
    return amountEditable;
  }



  public void setAmountEditable(Boolean amountEditable) {
    this.amountEditable = amountEditable;
  }


  public RecurringChargeTemplate invoiceSubCategory(InvoiceSubCategory invoiceSubCategory) {
    
    this.invoiceSubCategory = invoiceSubCategory;
    return this;
  }

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

  public InvoiceSubCategory getInvoiceSubCategory() {
    return invoiceSubCategory;
  }



  public void setInvoiceSubCategory(InvoiceSubCategory invoiceSubCategory) {
    this.invoiceSubCategory = invoiceSubCategory;
  }


  public RecurringChargeTemplate edrTemplates(List<TriggeredEDRTemplate> edrTemplates) {
    
    this.edrTemplates = edrTemplates;
    return this;
  }

  public RecurringChargeTemplate addEdrTemplatesItem(TriggeredEDRTemplate edrTemplatesItem) {
    if (this.edrTemplates == null) {
      this.edrTemplates = new ArrayList<TriggeredEDRTemplate>();
    }
    this.edrTemplates.add(edrTemplatesItem);
    return this;
  }

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

  public List<TriggeredEDRTemplate> getEdrTemplates() {
    return edrTemplates;
  }



  public void setEdrTemplates(List<TriggeredEDRTemplate> edrTemplates) {
    this.edrTemplates = edrTemplates;
  }


  public RecurringChargeTemplate inputUnitDescription(String inputUnitDescription) {
    
    this.inputUnitDescription = inputUnitDescription;
    return this;
  }

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

  public String getInputUnitDescription() {
    return inputUnitDescription;
  }



  public void setInputUnitDescription(String inputUnitDescription) {
    this.inputUnitDescription = inputUnitDescription;
  }


  public RecurringChargeTemplate ratingUnitDescription(String ratingUnitDescription) {
    
    this.ratingUnitDescription = ratingUnitDescription;
    return this;
  }

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

  public String getRatingUnitDescription() {
    return ratingUnitDescription;
  }



  public void setRatingUnitDescription(String ratingUnitDescription) {
    this.ratingUnitDescription = ratingUnitDescription;
  }


  public RecurringChargeTemplate unitMultiplicator(BigDecimal unitMultiplicator) {
    
    this.unitMultiplicator = unitMultiplicator;
    return this;
  }

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

  public BigDecimal getUnitMultiplicator() {
    return unitMultiplicator;
  }



  public void setUnitMultiplicator(BigDecimal unitMultiplicator) {
    this.unitMultiplicator = unitMultiplicator;
  }


  public RecurringChargeTemplate unitNbDecimal(Integer unitNbDecimal) {
    
    this.unitNbDecimal = unitNbDecimal;
    return this;
  }

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

  public Integer getUnitNbDecimal() {
    return unitNbDecimal;
  }



  public void setUnitNbDecimal(Integer unitNbDecimal) {
    this.unitNbDecimal = unitNbDecimal;
  }


  public RecurringChargeTemplate roundingMode(RoundingModeEnum roundingMode) {
    
    this.roundingMode = roundingMode;
    return this;
  }

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

  public RoundingModeEnum getRoundingMode() {
    return roundingMode;
  }



  public void setRoundingMode(RoundingModeEnum roundingMode) {
    this.roundingMode = roundingMode;
  }


  public RecurringChargeTemplate revenueRecognitionRule(RevenueRecognitionRule revenueRecognitionRule) {
    
    this.revenueRecognitionRule = revenueRecognitionRule;
    return this;
  }

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

  public RevenueRecognitionRule getRevenueRecognitionRule() {
    return revenueRecognitionRule;
  }



  public void setRevenueRecognitionRule(RevenueRecognitionRule revenueRecognitionRule) {
    this.revenueRecognitionRule = revenueRecognitionRule;
  }


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

  public RecurringChargeTemplate 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 RecurringChargeTemplate recurrenceType(RecurrenceTypeEnum recurrenceType) {
    
    this.recurrenceType = recurrenceType;
    return this;
  }

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

  public RecurrenceTypeEnum getRecurrenceType() {
    return recurrenceType;
  }



  public void setRecurrenceType(RecurrenceTypeEnum recurrenceType) {
    this.recurrenceType = recurrenceType;
  }


  public RecurringChargeTemplate calendar(Calendar calendar) {
    
    this.calendar = calendar;
    return this;
  }

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

  public Calendar getCalendar() {
    return calendar;
  }



  public void setCalendar(Calendar calendar) {
    this.calendar = calendar;
  }


  public RecurringChargeTemplate durationTermInMonth(Integer durationTermInMonth) {
    
    this.durationTermInMonth = durationTermInMonth;
    return this;
  }

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

  public Integer getDurationTermInMonth() {
    return durationTermInMonth;
  }



  public void setDurationTermInMonth(Integer durationTermInMonth) {
    this.durationTermInMonth = durationTermInMonth;
  }


  public RecurringChargeTemplate subscriptionProrata(Boolean subscriptionProrata) {
    
    this.subscriptionProrata = subscriptionProrata;
    return this;
  }

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

  public Boolean getSubscriptionProrata() {
    return subscriptionProrata;
  }



  public void setSubscriptionProrata(Boolean subscriptionProrata) {
    this.subscriptionProrata = subscriptionProrata;
  }


  public RecurringChargeTemplate terminationProrata(Boolean terminationProrata) {
    
    this.terminationProrata = terminationProrata;
    return this;
  }

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

  public Boolean getTerminationProrata() {
    return terminationProrata;
  }



  public void setTerminationProrata(Boolean terminationProrata) {
    this.terminationProrata = terminationProrata;
  }


  public RecurringChargeTemplate applyInAdvance(Boolean applyInAdvance) {
    
    this.applyInAdvance = applyInAdvance;
    return this;
  }

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

  public Boolean getApplyInAdvance() {
    return applyInAdvance;
  }



  public void setApplyInAdvance(Boolean applyInAdvance) {
    this.applyInAdvance = applyInAdvance;
  }


  public RecurringChargeTemplate shareLevel(ShareLevelEnum shareLevel) {
    
    this.shareLevel = shareLevel;
    return this;
  }

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

  public ShareLevelEnum getShareLevel() {
    return shareLevel;
  }



  public void setShareLevel(ShareLevelEnum shareLevel) {
    this.shareLevel = shareLevel;
  }


  public RecurringChargeTemplate filterExpression(String filterExpression) {
    
    this.filterExpression = filterExpression;
    return this;
  }

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

  public String getFilterExpression() {
    return filterExpression;
  }



  public void setFilterExpression(String filterExpression) {
    this.filterExpression = filterExpression;
  }


  public RecurringChargeTemplate subscriptionProrataEl(String subscriptionProrataEl) {
    
    this.subscriptionProrataEl = subscriptionProrataEl;
    return this;
  }

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

  public String getSubscriptionProrataEl() {
    return subscriptionProrataEl;
  }



  public void setSubscriptionProrataEl(String subscriptionProrataEl) {
    this.subscriptionProrataEl = subscriptionProrataEl;
  }


  public RecurringChargeTemplate terminationProrataEl(String terminationProrataEl) {
    
    this.terminationProrataEl = terminationProrataEl;
    return this;
  }

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

  public String getTerminationProrataEl() {
    return terminationProrataEl;
  }



  public void setTerminationProrataEl(String terminationProrataEl) {
    this.terminationProrataEl = terminationProrataEl;
  }


  public RecurringChargeTemplate applyInAdvanceEl(String applyInAdvanceEl) {
    
    this.applyInAdvanceEl = applyInAdvanceEl;
    return this;
  }

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

  public String getApplyInAdvanceEl() {
    return applyInAdvanceEl;
  }



  public void setApplyInAdvanceEl(String applyInAdvanceEl) {
    this.applyInAdvanceEl = applyInAdvanceEl;
  }


  public RecurringChargeTemplate durationTermInMonthEl(String durationTermInMonthEl) {
    
    this.durationTermInMonthEl = durationTermInMonthEl;
    return this;
  }

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

  public String getDurationTermInMonthEl() {
    return durationTermInMonthEl;
  }



  public void setDurationTermInMonthEl(String durationTermInMonthEl) {
    this.durationTermInMonthEl = durationTermInMonthEl;
  }


  public RecurringChargeTemplate calendarCodeEl(String calendarCodeEl) {
    
    this.calendarCodeEl = calendarCodeEl;
    return this;
  }

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

  public String getCalendarCodeEl() {
    return calendarCodeEl;
  }



  public void setCalendarCodeEl(String calendarCodeEl) {
    this.calendarCodeEl = calendarCodeEl;
  }


  public RecurringChargeTemplate chargeType(String chargeType) {
    
    this.chargeType = chargeType;
    return this;
  }

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

  public String getChargeType() {
    return chargeType;
  }



  public void setChargeType(String chargeType) {
    this.chargeType = chargeType;
  }


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

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

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

  public RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate 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 RecurringChargeTemplate _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;
    }
    RecurringChargeTemplate recurringChargeTemplate = (RecurringChargeTemplate) o;
    return Objects.equals(this.id, recurringChargeTemplate.id) &&
        Objects.equals(this.version, recurringChargeTemplate.version) &&
        Objects.equals(this.auditable, recurringChargeTemplate.auditable) &&
        Objects.equals(this.historized, recurringChargeTemplate.historized) &&
        Objects.equals(this.notified, recurringChargeTemplate.notified) &&
        Objects.equals(this.auditableFields, recurringChargeTemplate.auditableFields) &&
        Objects.equals(this.code, recurringChargeTemplate.code) &&
        Objects.equals(this.description, recurringChargeTemplate.description) &&
        Objects.equals(this.appendGeneratedCode, recurringChargeTemplate.appendGeneratedCode) &&
        Objects.equals(this.uuid, recurringChargeTemplate.uuid) &&
        Objects.equals(this.cfValues, recurringChargeTemplate.cfValues) &&
        Objects.equals(this.cfAccumulatedValues, recurringChargeTemplate.cfAccumulatedValues) &&
        Objects.equals(this.disabled, recurringChargeTemplate.disabled) &&
        Objects.equals(this.type, recurringChargeTemplate.type) &&
        Objects.equals(this.amountEditable, recurringChargeTemplate.amountEditable) &&
        Objects.equals(this.invoiceSubCategory, recurringChargeTemplate.invoiceSubCategory) &&
        Objects.equals(this.edrTemplates, recurringChargeTemplate.edrTemplates) &&
        Objects.equals(this.inputUnitDescription, recurringChargeTemplate.inputUnitDescription) &&
        Objects.equals(this.ratingUnitDescription, recurringChargeTemplate.ratingUnitDescription) &&
        Objects.equals(this.unitMultiplicator, recurringChargeTemplate.unitMultiplicator) &&
        Objects.equals(this.unitNbDecimal, recurringChargeTemplate.unitNbDecimal) &&
        Objects.equals(this.roundingMode, recurringChargeTemplate.roundingMode) &&
        Objects.equals(this.revenueRecognitionRule, recurringChargeTemplate.revenueRecognitionRule) &&
        Objects.equals(this.descriptionI18n, recurringChargeTemplate.descriptionI18n) &&
        Objects.equals(this.recurrenceType, recurringChargeTemplate.recurrenceType) &&
        Objects.equals(this.calendar, recurringChargeTemplate.calendar) &&
        Objects.equals(this.durationTermInMonth, recurringChargeTemplate.durationTermInMonth) &&
        Objects.equals(this.subscriptionProrata, recurringChargeTemplate.subscriptionProrata) &&
        Objects.equals(this.terminationProrata, recurringChargeTemplate.terminationProrata) &&
        Objects.equals(this.applyInAdvance, recurringChargeTemplate.applyInAdvance) &&
        Objects.equals(this.shareLevel, recurringChargeTemplate.shareLevel) &&
        Objects.equals(this.filterExpression, recurringChargeTemplate.filterExpression) &&
        Objects.equals(this.subscriptionProrataEl, recurringChargeTemplate.subscriptionProrataEl) &&
        Objects.equals(this.terminationProrataEl, recurringChargeTemplate.terminationProrataEl) &&
        Objects.equals(this.applyInAdvanceEl, recurringChargeTemplate.applyInAdvanceEl) &&
        Objects.equals(this.durationTermInMonthEl, recurringChargeTemplate.durationTermInMonthEl) &&
        Objects.equals(this.calendarCodeEl, recurringChargeTemplate.calendarCodeEl) &&
        Objects.equals(this.chargeType, recurringChargeTemplate.chargeType) &&
        Objects.equals(this.descriptionI18nNullSafe, recurringChargeTemplate.descriptionI18nNullSafe) &&
        Objects.equals(this.active, recurringChargeTemplate.active) &&
        Objects.equals(this.parentCFEntities, recurringChargeTemplate.parentCFEntities) &&
        Objects.equals(this.cfValuesNullSafe, recurringChargeTemplate.cfValuesNullSafe) &&
        Objects.equals(this.cfValuesAsValues, recurringChargeTemplate.cfValuesAsValues) &&
        Objects.equals(this.cfAccumulatedValuesNullSafe, recurringChargeTemplate.cfAccumulatedValuesNullSafe) &&
        Objects.equals(this.descriptionOrCode, recurringChargeTemplate.descriptionOrCode) &&
        Objects.equals(this.descriptionAndCode, recurringChargeTemplate.descriptionAndCode) &&
        Objects.equals(this.referenceCode, recurringChargeTemplate.referenceCode) &&
        Objects.equals(this.referenceDescription, recurringChargeTemplate.referenceDescription) &&
        Objects.equals(this.codeChanged, recurringChargeTemplate.codeChanged) &&
        Objects.equals(this.parentEntity, recurringChargeTemplate.parentEntity) &&
        Objects.equals(this._transient, recurringChargeTemplate._transient);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, version, auditable, historized, notified, auditableFields, code, description, appendGeneratedCode, uuid, cfValues, cfAccumulatedValues, disabled, type, amountEditable, invoiceSubCategory, edrTemplates, inputUnitDescription, ratingUnitDescription, unitMultiplicator, unitNbDecimal, roundingMode, revenueRecognitionRule, descriptionI18n, recurrenceType, calendar, durationTermInMonth, subscriptionProrata, terminationProrata, applyInAdvance, shareLevel, filterExpression, subscriptionProrataEl, terminationProrataEl, applyInAdvanceEl, durationTermInMonthEl, calendarCodeEl, chargeType, descriptionI18nNullSafe, active, parentCFEntities, cfValuesNullSafe, cfValuesAsValues, cfAccumulatedValuesNullSafe, descriptionOrCode, descriptionAndCode, referenceCode, referenceDescription, codeChanged, parentEntity, _transient);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class RecurringChargeTemplate {\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("    type: ").append(toIndentedString(type)).append("\n");
    sb.append("    amountEditable: ").append(toIndentedString(amountEditable)).append("\n");
    sb.append("    invoiceSubCategory: ").append(toIndentedString(invoiceSubCategory)).append("\n");
    sb.append("    edrTemplates: ").append(toIndentedString(edrTemplates)).append("\n");
    sb.append("    inputUnitDescription: ").append(toIndentedString(inputUnitDescription)).append("\n");
    sb.append("    ratingUnitDescription: ").append(toIndentedString(ratingUnitDescription)).append("\n");
    sb.append("    unitMultiplicator: ").append(toIndentedString(unitMultiplicator)).append("\n");
    sb.append("    unitNbDecimal: ").append(toIndentedString(unitNbDecimal)).append("\n");
    sb.append("    roundingMode: ").append(toIndentedString(roundingMode)).append("\n");
    sb.append("    revenueRecognitionRule: ").append(toIndentedString(revenueRecognitionRule)).append("\n");
    sb.append("    descriptionI18n: ").append(toIndentedString(descriptionI18n)).append("\n");
    sb.append("    recurrenceType: ").append(toIndentedString(recurrenceType)).append("\n");
    sb.append("    calendar: ").append(toIndentedString(calendar)).append("\n");
    sb.append("    durationTermInMonth: ").append(toIndentedString(durationTermInMonth)).append("\n");
    sb.append("    subscriptionProrata: ").append(toIndentedString(subscriptionProrata)).append("\n");
    sb.append("    terminationProrata: ").append(toIndentedString(terminationProrata)).append("\n");
    sb.append("    applyInAdvance: ").append(toIndentedString(applyInAdvance)).append("\n");
    sb.append("    shareLevel: ").append(toIndentedString(shareLevel)).append("\n");
    sb.append("    filterExpression: ").append(toIndentedString(filterExpression)).append("\n");
    sb.append("    subscriptionProrataEl: ").append(toIndentedString(subscriptionProrataEl)).append("\n");
    sb.append("    terminationProrataEl: ").append(toIndentedString(terminationProrataEl)).append("\n");
    sb.append("    applyInAdvanceEl: ").append(toIndentedString(applyInAdvanceEl)).append("\n");
    sb.append("    durationTermInMonthEl: ").append(toIndentedString(durationTermInMonthEl)).append("\n");
    sb.append("    calendarCodeEl: ").append(toIndentedString(calendarCodeEl)).append("\n");
    sb.append("    chargeType: ").append(toIndentedString(chargeType)).append("\n");
    sb.append("    descriptionI18nNullSafe: ").append(toIndentedString(descriptionI18nNullSafe)).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    ");
  }

}

