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


package org.openapitools.client.model;

import java.util.Objects;
import java.util.Arrays;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.openapitools.client.model.AccessesDto;
import org.openapitools.client.model.CustomFieldsDto;
import org.openapitools.client.model.DiscountPlanDto;
import org.openapitools.client.model.DiscountPlanInstanceDto;
import org.openapitools.client.model.ProductInstanceDto;
import org.openapitools.client.model.ProductsDto;
import org.openapitools.client.model.ServiceInstancesDto;
import org.openapitools.client.model.SubscriptionRenewalDto;
import org.threeten.bp.OffsetDateTime;

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

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

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

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

  public static final String SERIALIZED_NAME_USER_ACCOUNT = "userAccount";
  @SerializedName(SERIALIZED_NAME_USER_ACCOUNT)
  private String userAccount;

  public static final String SERIALIZED_NAME_OFFER_TEMPLATE = "offerTemplate";
  @SerializedName(SERIALIZED_NAME_OFFER_TEMPLATE)
  private String offerTemplate;

  public static final String SERIALIZED_NAME_SUBSCRIPTION_DATE = "subscriptionDate";
  @SerializedName(SERIALIZED_NAME_SUBSCRIPTION_DATE)
  private OffsetDateTime subscriptionDate;

  public static final String SERIALIZED_NAME_TERMINATION_DATE = "terminationDate";
  @SerializedName(SERIALIZED_NAME_TERMINATION_DATE)
  private OffsetDateTime terminationDate;

  public static final String SERIALIZED_NAME_END_AGREEMENT_DATE = "endAgreementDate";
  @SerializedName(SERIALIZED_NAME_END_AGREEMENT_DATE)
  private OffsetDateTime endAgreementDate;

  /**
   * Gets or Sets status
   */
  @JsonAdapter(StatusEnum.Adapter.class)
  public enum StatusEnum {
    CREATED("CREATED"),
    
    ACTIVE("ACTIVE"),
    
    CANCELED("CANCELED"),
    
    RESILIATED("RESILIATED"),
    
    CLOSED("CLOSED"),
    
    SUSPENDED("SUSPENDED");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_STATUS = "status";
  @SerializedName(SERIALIZED_NAME_STATUS)
  private StatusEnum status;

  public static final String SERIALIZED_NAME_STATUS_DATE = "statusDate";
  @SerializedName(SERIALIZED_NAME_STATUS_DATE)
  private OffsetDateTime statusDate;

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

  public static final String SERIALIZED_NAME_ACCESSES = "accesses";
  @SerializedName(SERIALIZED_NAME_ACCESSES)
  private AccessesDto accesses;

  public static final String SERIALIZED_NAME_SERVICES = "services";
  @SerializedName(SERIALIZED_NAME_SERVICES)
  private ServiceInstancesDto services;

  public static final String SERIALIZED_NAME_PRODUCTS = "products";
  @SerializedName(SERIALIZED_NAME_PRODUCTS)
  private ProductsDto products;

  public static final String SERIALIZED_NAME_PRODUCT_INSTANCES = "productInstances";
  @SerializedName(SERIALIZED_NAME_PRODUCT_INSTANCES)
  private List<ProductInstanceDto> productInstances = null;

  public static final String SERIALIZED_NAME_TERMINATION_REASON = "terminationReason";
  @SerializedName(SERIALIZED_NAME_TERMINATION_REASON)
  private String terminationReason;

  public static final String SERIALIZED_NAME_ORDER_NUMBER = "orderNumber";
  @SerializedName(SERIALIZED_NAME_ORDER_NUMBER)
  private String orderNumber;

  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_SUBSCRIBED_TILL_DATE = "subscribedTillDate";
  @SerializedName(SERIALIZED_NAME_SUBSCRIBED_TILL_DATE)
  private OffsetDateTime subscribedTillDate;

  public static final String SERIALIZED_NAME_RENEWED = "renewed";
  @SerializedName(SERIALIZED_NAME_RENEWED)
  private Boolean renewed;

  public static final String SERIALIZED_NAME_RENEWAL_NOTIFIED_DATE = "renewalNotifiedDate";
  @SerializedName(SERIALIZED_NAME_RENEWAL_NOTIFIED_DATE)
  private OffsetDateTime renewalNotifiedDate;

  public static final String SERIALIZED_NAME_RENEWAL_RULE = "renewalRule";
  @SerializedName(SERIALIZED_NAME_RENEWAL_RULE)
  private SubscriptionRenewalDto renewalRule;

  public static final String SERIALIZED_NAME_BILLING_CYCLE = "billingCycle";
  @SerializedName(SERIALIZED_NAME_BILLING_CYCLE)
  private String billingCycle;

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

  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_RATING_GROUP = "ratingGroup";
  @SerializedName(SERIALIZED_NAME_RATING_GROUP)
  private String ratingGroup;

  public static final String SERIALIZED_NAME_ELECTRONIC_BILLING = "electronicBilling";
  @SerializedName(SERIALIZED_NAME_ELECTRONIC_BILLING)
  private Boolean electronicBilling;

  public static final String SERIALIZED_NAME_EMAIL = "email";
  @SerializedName(SERIALIZED_NAME_EMAIL)
  private String email;

  public static final String SERIALIZED_NAME_MAILING_TYPE = "mailingType";
  @SerializedName(SERIALIZED_NAME_MAILING_TYPE)
  private String mailingType;

  public static final String SERIALIZED_NAME_EMAIL_TEMPLATE = "emailTemplate";
  @SerializedName(SERIALIZED_NAME_EMAIL_TEMPLATE)
  private String emailTemplate;

  public static final String SERIALIZED_NAME_CCED_EMAILS = "ccedEmails";
  @SerializedName(SERIALIZED_NAME_CCED_EMAILS)
  private String ccedEmails;

  public static final String SERIALIZED_NAME_DISCOUNT_PLANS_FOR_INSTANTIATION = "discountPlansForInstantiation";
  @SerializedName(SERIALIZED_NAME_DISCOUNT_PLANS_FOR_INSTANTIATION)
  private List<DiscountPlanDto> discountPlansForInstantiation = null;

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

  public static final String SERIALIZED_NAME_DISCOUNT_PLAN_INSTANCES = "discountPlanInstances";
  @SerializedName(SERIALIZED_NAME_DISCOUNT_PLAN_INSTANCES)
  private List<DiscountPlanInstanceDto> discountPlanInstances = null;


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

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

  public String getCode() {
    return code;
  }



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


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

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

  public String getUpdatedCode() {
    return updatedCode;
  }



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


  public SubscriptionDto userAccount(String userAccount) {
    
    this.userAccount = userAccount;
    return this;
  }

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

  public String getUserAccount() {
    return userAccount;
  }



  public void setUserAccount(String userAccount) {
    this.userAccount = userAccount;
  }


  public SubscriptionDto offerTemplate(String offerTemplate) {
    
    this.offerTemplate = offerTemplate;
    return this;
  }

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

  public String getOfferTemplate() {
    return offerTemplate;
  }



  public void setOfferTemplate(String offerTemplate) {
    this.offerTemplate = offerTemplate;
  }


  public SubscriptionDto subscriptionDate(OffsetDateTime subscriptionDate) {
    
    this.subscriptionDate = subscriptionDate;
    return this;
  }

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

  public OffsetDateTime getSubscriptionDate() {
    return subscriptionDate;
  }



  public void setSubscriptionDate(OffsetDateTime subscriptionDate) {
    this.subscriptionDate = subscriptionDate;
  }


  public SubscriptionDto terminationDate(OffsetDateTime terminationDate) {
    
    this.terminationDate = terminationDate;
    return this;
  }

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

  public OffsetDateTime getTerminationDate() {
    return terminationDate;
  }



  public void setTerminationDate(OffsetDateTime terminationDate) {
    this.terminationDate = terminationDate;
  }


  public SubscriptionDto endAgreementDate(OffsetDateTime endAgreementDate) {
    
    this.endAgreementDate = endAgreementDate;
    return this;
  }

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

  public OffsetDateTime getEndAgreementDate() {
    return endAgreementDate;
  }



  public void setEndAgreementDate(OffsetDateTime endAgreementDate) {
    this.endAgreementDate = endAgreementDate;
  }


  public SubscriptionDto status(StatusEnum status) {
    
    this.status = status;
    return this;
  }

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

  public StatusEnum getStatus() {
    return status;
  }



  public void setStatus(StatusEnum status) {
    this.status = status;
  }


  public SubscriptionDto statusDate(OffsetDateTime statusDate) {
    
    this.statusDate = statusDate;
    return this;
  }

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

  public OffsetDateTime getStatusDate() {
    return statusDate;
  }



  public void setStatusDate(OffsetDateTime statusDate) {
    this.statusDate = statusDate;
  }


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

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

  public CustomFieldsDto getCustomFields() {
    return customFields;
  }



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


  public SubscriptionDto accesses(AccessesDto accesses) {
    
    this.accesses = accesses;
    return this;
  }

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

  public AccessesDto getAccesses() {
    return accesses;
  }



  public void setAccesses(AccessesDto accesses) {
    this.accesses = accesses;
  }


  public SubscriptionDto services(ServiceInstancesDto services) {
    
    this.services = services;
    return this;
  }

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

  public ServiceInstancesDto getServices() {
    return services;
  }



  public void setServices(ServiceInstancesDto services) {
    this.services = services;
  }


  public SubscriptionDto products(ProductsDto products) {
    
    this.products = products;
    return this;
  }

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

  public ProductsDto getProducts() {
    return products;
  }



  public void setProducts(ProductsDto products) {
    this.products = products;
  }


  public SubscriptionDto productInstances(List<ProductInstanceDto> productInstances) {
    
    this.productInstances = productInstances;
    return this;
  }

  public SubscriptionDto addProductInstancesItem(ProductInstanceDto productInstancesItem) {
    if (this.productInstances == null) {
      this.productInstances = new ArrayList<ProductInstanceDto>();
    }
    this.productInstances.add(productInstancesItem);
    return this;
  }

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

  public List<ProductInstanceDto> getProductInstances() {
    return productInstances;
  }



  public void setProductInstances(List<ProductInstanceDto> productInstances) {
    this.productInstances = productInstances;
  }


  public SubscriptionDto terminationReason(String terminationReason) {
    
    this.terminationReason = terminationReason;
    return this;
  }

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

  public String getTerminationReason() {
    return terminationReason;
  }



  public void setTerminationReason(String terminationReason) {
    this.terminationReason = terminationReason;
  }


  public SubscriptionDto orderNumber(String orderNumber) {
    
    this.orderNumber = orderNumber;
    return this;
  }

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

  public String getOrderNumber() {
    return orderNumber;
  }



  public void setOrderNumber(String orderNumber) {
    this.orderNumber = orderNumber;
  }


  public SubscriptionDto 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 SubscriptionDto 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 SubscriptionDto 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 SubscriptionDto 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 SubscriptionDto subscribedTillDate(OffsetDateTime subscribedTillDate) {
    
    this.subscribedTillDate = subscribedTillDate;
    return this;
  }

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

  public OffsetDateTime getSubscribedTillDate() {
    return subscribedTillDate;
  }



  public void setSubscribedTillDate(OffsetDateTime subscribedTillDate) {
    this.subscribedTillDate = subscribedTillDate;
  }


  public SubscriptionDto renewed(Boolean renewed) {
    
    this.renewed = renewed;
    return this;
  }

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

  public Boolean getRenewed() {
    return renewed;
  }



  public void setRenewed(Boolean renewed) {
    this.renewed = renewed;
  }


  public SubscriptionDto renewalNotifiedDate(OffsetDateTime renewalNotifiedDate) {
    
    this.renewalNotifiedDate = renewalNotifiedDate;
    return this;
  }

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

  public OffsetDateTime getRenewalNotifiedDate() {
    return renewalNotifiedDate;
  }



  public void setRenewalNotifiedDate(OffsetDateTime renewalNotifiedDate) {
    this.renewalNotifiedDate = renewalNotifiedDate;
  }


  public SubscriptionDto renewalRule(SubscriptionRenewalDto renewalRule) {
    
    this.renewalRule = renewalRule;
    return this;
  }

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

  public SubscriptionRenewalDto getRenewalRule() {
    return renewalRule;
  }



  public void setRenewalRule(SubscriptionRenewalDto renewalRule) {
    this.renewalRule = renewalRule;
  }


  public SubscriptionDto billingCycle(String billingCycle) {
    
    this.billingCycle = billingCycle;
    return this;
  }

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

  public String getBillingCycle() {
    return billingCycle;
  }



  public void setBillingCycle(String billingCycle) {
    this.billingCycle = billingCycle;
  }


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

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

  public String getSeller() {
    return seller;
  }



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


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

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

  public String getRatingGroup() {
    return ratingGroup;
  }



  public void setRatingGroup(String ratingGroup) {
    this.ratingGroup = ratingGroup;
  }


  public SubscriptionDto electronicBilling(Boolean electronicBilling) {
    
    this.electronicBilling = electronicBilling;
    return this;
  }

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

  public Boolean getElectronicBilling() {
    return electronicBilling;
  }



  public void setElectronicBilling(Boolean electronicBilling) {
    this.electronicBilling = electronicBilling;
  }


  public SubscriptionDto email(String email) {
    
    this.email = email;
    return this;
  }

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

  public String getEmail() {
    return email;
  }



  public void setEmail(String email) {
    this.email = email;
  }


  public SubscriptionDto mailingType(String mailingType) {
    
    this.mailingType = mailingType;
    return this;
  }

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

  public String getMailingType() {
    return mailingType;
  }



  public void setMailingType(String mailingType) {
    this.mailingType = mailingType;
  }


  public SubscriptionDto emailTemplate(String emailTemplate) {
    
    this.emailTemplate = emailTemplate;
    return this;
  }

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

  public String getEmailTemplate() {
    return emailTemplate;
  }



  public void setEmailTemplate(String emailTemplate) {
    this.emailTemplate = emailTemplate;
  }


  public SubscriptionDto ccedEmails(String ccedEmails) {
    
    this.ccedEmails = ccedEmails;
    return this;
  }

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

  public String getCcedEmails() {
    return ccedEmails;
  }



  public void setCcedEmails(String ccedEmails) {
    this.ccedEmails = ccedEmails;
  }


  public SubscriptionDto discountPlansForInstantiation(List<DiscountPlanDto> discountPlansForInstantiation) {
    
    this.discountPlansForInstantiation = discountPlansForInstantiation;
    return this;
  }

  public SubscriptionDto addDiscountPlansForInstantiationItem(DiscountPlanDto discountPlansForInstantiationItem) {
    if (this.discountPlansForInstantiation == null) {
      this.discountPlansForInstantiation = new ArrayList<DiscountPlanDto>();
    }
    this.discountPlansForInstantiation.add(discountPlansForInstantiationItem);
    return this;
  }

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

  public List<DiscountPlanDto> getDiscountPlansForInstantiation() {
    return discountPlansForInstantiation;
  }



  public void setDiscountPlansForInstantiation(List<DiscountPlanDto> discountPlansForInstantiation) {
    this.discountPlansForInstantiation = discountPlansForInstantiation;
  }


  public SubscriptionDto discountPlansForTermination(List<String> discountPlansForTermination) {
    
    this.discountPlansForTermination = discountPlansForTermination;
    return this;
  }

  public SubscriptionDto addDiscountPlansForTerminationItem(String discountPlansForTerminationItem) {
    if (this.discountPlansForTermination == null) {
      this.discountPlansForTermination = new ArrayList<String>();
    }
    this.discountPlansForTermination.add(discountPlansForTerminationItem);
    return this;
  }

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

  public List<String> getDiscountPlansForTermination() {
    return discountPlansForTermination;
  }



  public void setDiscountPlansForTermination(List<String> discountPlansForTermination) {
    this.discountPlansForTermination = discountPlansForTermination;
  }


  public SubscriptionDto discountPlanInstances(List<DiscountPlanInstanceDto> discountPlanInstances) {
    
    this.discountPlanInstances = discountPlanInstances;
    return this;
  }

  public SubscriptionDto addDiscountPlanInstancesItem(DiscountPlanInstanceDto discountPlanInstancesItem) {
    if (this.discountPlanInstances == null) {
      this.discountPlanInstances = new ArrayList<DiscountPlanInstanceDto>();
    }
    this.discountPlanInstances.add(discountPlanInstancesItem);
    return this;
  }

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

  public List<DiscountPlanInstanceDto> getDiscountPlanInstances() {
    return discountPlanInstances;
  }



  public void setDiscountPlanInstances(List<DiscountPlanInstanceDto> discountPlanInstances) {
    this.discountPlanInstances = discountPlanInstances;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    SubscriptionDto subscriptionDto = (SubscriptionDto) o;
    return Objects.equals(this.id, subscriptionDto.id) &&
        Objects.equals(this.code, subscriptionDto.code) &&
        Objects.equals(this.description, subscriptionDto.description) &&
        Objects.equals(this.updatedCode, subscriptionDto.updatedCode) &&
        Objects.equals(this.userAccount, subscriptionDto.userAccount) &&
        Objects.equals(this.offerTemplate, subscriptionDto.offerTemplate) &&
        Objects.equals(this.subscriptionDate, subscriptionDto.subscriptionDate) &&
        Objects.equals(this.terminationDate, subscriptionDto.terminationDate) &&
        Objects.equals(this.endAgreementDate, subscriptionDto.endAgreementDate) &&
        Objects.equals(this.status, subscriptionDto.status) &&
        Objects.equals(this.statusDate, subscriptionDto.statusDate) &&
        Objects.equals(this.customFields, subscriptionDto.customFields) &&
        Objects.equals(this.accesses, subscriptionDto.accesses) &&
        Objects.equals(this.services, subscriptionDto.services) &&
        Objects.equals(this.products, subscriptionDto.products) &&
        Objects.equals(this.productInstances, subscriptionDto.productInstances) &&
        Objects.equals(this.terminationReason, subscriptionDto.terminationReason) &&
        Objects.equals(this.orderNumber, subscriptionDto.orderNumber) &&
        Objects.equals(this.minimumAmountEl, subscriptionDto.minimumAmountEl) &&
        Objects.equals(this.minimumAmountElSpark, subscriptionDto.minimumAmountElSpark) &&
        Objects.equals(this.minimumLabelEl, subscriptionDto.minimumLabelEl) &&
        Objects.equals(this.minimumLabelElSpark, subscriptionDto.minimumLabelElSpark) &&
        Objects.equals(this.subscribedTillDate, subscriptionDto.subscribedTillDate) &&
        Objects.equals(this.renewed, subscriptionDto.renewed) &&
        Objects.equals(this.renewalNotifiedDate, subscriptionDto.renewalNotifiedDate) &&
        Objects.equals(this.renewalRule, subscriptionDto.renewalRule) &&
        Objects.equals(this.billingCycle, subscriptionDto.billingCycle) &&
        Objects.equals(this.seller, subscriptionDto.seller) &&
        Objects.equals(this.autoEndOfEngagement, subscriptionDto.autoEndOfEngagement) &&
        Objects.equals(this.ratingGroup, subscriptionDto.ratingGroup) &&
        Objects.equals(this.electronicBilling, subscriptionDto.electronicBilling) &&
        Objects.equals(this.email, subscriptionDto.email) &&
        Objects.equals(this.mailingType, subscriptionDto.mailingType) &&
        Objects.equals(this.emailTemplate, subscriptionDto.emailTemplate) &&
        Objects.equals(this.ccedEmails, subscriptionDto.ccedEmails) &&
        Objects.equals(this.discountPlansForInstantiation, subscriptionDto.discountPlansForInstantiation) &&
        Objects.equals(this.discountPlansForTermination, subscriptionDto.discountPlansForTermination) &&
        Objects.equals(this.discountPlanInstances, subscriptionDto.discountPlanInstances);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, code, description, updatedCode, userAccount, offerTemplate, subscriptionDate, terminationDate, endAgreementDate, status, statusDate, customFields, accesses, services, products, productInstances, terminationReason, orderNumber, minimumAmountEl, minimumAmountElSpark, minimumLabelEl, minimumLabelElSpark, subscribedTillDate, renewed, renewalNotifiedDate, renewalRule, billingCycle, seller, autoEndOfEngagement, ratingGroup, electronicBilling, email, mailingType, emailTemplate, ccedEmails, discountPlansForInstantiation, discountPlansForTermination, discountPlanInstances);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class SubscriptionDto {\n");
    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    code: ").append(toIndentedString(code)).append("\n");
    sb.append("    description: ").append(toIndentedString(description)).append("\n");
    sb.append("    updatedCode: ").append(toIndentedString(updatedCode)).append("\n");
    sb.append("    userAccount: ").append(toIndentedString(userAccount)).append("\n");
    sb.append("    offerTemplate: ").append(toIndentedString(offerTemplate)).append("\n");
    sb.append("    subscriptionDate: ").append(toIndentedString(subscriptionDate)).append("\n");
    sb.append("    terminationDate: ").append(toIndentedString(terminationDate)).append("\n");
    sb.append("    endAgreementDate: ").append(toIndentedString(endAgreementDate)).append("\n");
    sb.append("    status: ").append(toIndentedString(status)).append("\n");
    sb.append("    statusDate: ").append(toIndentedString(statusDate)).append("\n");
    sb.append("    customFields: ").append(toIndentedString(customFields)).append("\n");
    sb.append("    accesses: ").append(toIndentedString(accesses)).append("\n");
    sb.append("    services: ").append(toIndentedString(services)).append("\n");
    sb.append("    products: ").append(toIndentedString(products)).append("\n");
    sb.append("    productInstances: ").append(toIndentedString(productInstances)).append("\n");
    sb.append("    terminationReason: ").append(toIndentedString(terminationReason)).append("\n");
    sb.append("    orderNumber: ").append(toIndentedString(orderNumber)).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("    subscribedTillDate: ").append(toIndentedString(subscribedTillDate)).append("\n");
    sb.append("    renewed: ").append(toIndentedString(renewed)).append("\n");
    sb.append("    renewalNotifiedDate: ").append(toIndentedString(renewalNotifiedDate)).append("\n");
    sb.append("    renewalRule: ").append(toIndentedString(renewalRule)).append("\n");
    sb.append("    billingCycle: ").append(toIndentedString(billingCycle)).append("\n");
    sb.append("    seller: ").append(toIndentedString(seller)).append("\n");
    sb.append("    autoEndOfEngagement: ").append(toIndentedString(autoEndOfEngagement)).append("\n");
    sb.append("    ratingGroup: ").append(toIndentedString(ratingGroup)).append("\n");
    sb.append("    electronicBilling: ").append(toIndentedString(electronicBilling)).append("\n");
    sb.append("    email: ").append(toIndentedString(email)).append("\n");
    sb.append("    mailingType: ").append(toIndentedString(mailingType)).append("\n");
    sb.append("    emailTemplate: ").append(toIndentedString(emailTemplate)).append("\n");
    sb.append("    ccedEmails: ").append(toIndentedString(ccedEmails)).append("\n");
    sb.append("    discountPlansForInstantiation: ").append(toIndentedString(discountPlansForInstantiation)).append("\n");
    sb.append("    discountPlansForTermination: ").append(toIndentedString(discountPlansForTermination)).append("\n");
    sb.append("    discountPlanInstances: ").append(toIndentedString(discountPlanInstances)).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    ");
  }

}

