/*
 * 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 org.openapitools.client.model.CustomFieldsDto;
import org.openapitools.client.model.SubscriptionRenewalDto;
import org.threeten.bp.OffsetDateTime;

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

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

    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_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_QUANTITY = "quantity";
  @SerializedName(SERIALIZED_NAME_QUANTITY)
  private BigDecimal quantity;

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

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

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

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

  public static final String SERIALIZED_NAME_RATE_UNTIL_DATE = "rateUntilDate";
  @SerializedName(SERIALIZED_NAME_RATE_UNTIL_DATE)
  private OffsetDateTime rateUntilDate;

  public static final String SERIALIZED_NAME_AMOUNT_P_S = "amountPS";
  @SerializedName(SERIALIZED_NAME_AMOUNT_P_S)
  private BigDecimal amountPS;

  public static final String SERIALIZED_NAME_CALENDAR_P_S_CODE = "calendarPSCode";
  @SerializedName(SERIALIZED_NAME_CALENDAR_P_S_CODE)
  private String calendarPSCode;

  public static final String SERIALIZED_NAME_PAYMENT_DAY_IN_MONTH_P_S = "paymentDayInMonthPS";
  @SerializedName(SERIALIZED_NAME_PAYMENT_DAY_IN_MONTH_P_S)
  private Integer paymentDayInMonthPS;

  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_AUTO_END_OF_ENGAGEMENT = "autoEndOfEngagement";
  @SerializedName(SERIALIZED_NAME_AUTO_END_OF_ENGAGEMENT)
  private Boolean autoEndOfEngagement;

  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_SERVICE_RENEWAL = "serviceRenewal";
  @SerializedName(SERIALIZED_NAME_SERVICE_RENEWAL)
  private SubscriptionRenewalDto serviceRenewal;


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

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

  public OffsetDateTime getSubscriptionDate() {
    return subscriptionDate;
  }



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


  public ServiceInstanceDto 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 ServiceInstanceDto quantity(BigDecimal quantity) {
    
    this.quantity = quantity;
    return this;
  }

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

  public BigDecimal getQuantity() {
    return quantity;
  }



  public void setQuantity(BigDecimal quantity) {
    this.quantity = quantity;
  }


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

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

  public OffsetDateTime getRateUntilDate() {
    return rateUntilDate;
  }



  public void setRateUntilDate(OffsetDateTime rateUntilDate) {
    this.rateUntilDate = rateUntilDate;
  }


  public ServiceInstanceDto amountPS(BigDecimal amountPS) {
    
    this.amountPS = amountPS;
    return this;
  }

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

  public BigDecimal getAmountPS() {
    return amountPS;
  }



  public void setAmountPS(BigDecimal amountPS) {
    this.amountPS = amountPS;
  }


  public ServiceInstanceDto calendarPSCode(String calendarPSCode) {
    
    this.calendarPSCode = calendarPSCode;
    return this;
  }

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

  public String getCalendarPSCode() {
    return calendarPSCode;
  }



  public void setCalendarPSCode(String calendarPSCode) {
    this.calendarPSCode = calendarPSCode;
  }


  public ServiceInstanceDto paymentDayInMonthPS(Integer paymentDayInMonthPS) {
    
    this.paymentDayInMonthPS = paymentDayInMonthPS;
    return this;
  }

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

  public Integer getPaymentDayInMonthPS() {
    return paymentDayInMonthPS;
  }



  public void setPaymentDayInMonthPS(Integer paymentDayInMonthPS) {
    this.paymentDayInMonthPS = paymentDayInMonthPS;
  }


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

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

  public SubscriptionRenewalDto getServiceRenewal() {
    return serviceRenewal;
  }



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


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    ServiceInstanceDto serviceInstanceDto = (ServiceInstanceDto) o;
    return Objects.equals(this.id, serviceInstanceDto.id) &&
        Objects.equals(this.code, serviceInstanceDto.code) &&
        Objects.equals(this.description, serviceInstanceDto.description) &&
        Objects.equals(this.updatedCode, serviceInstanceDto.updatedCode) &&
        Objects.equals(this.status, serviceInstanceDto.status) &&
        Objects.equals(this.statusDate, serviceInstanceDto.statusDate) &&
        Objects.equals(this.subscriptionDate, serviceInstanceDto.subscriptionDate) &&
        Objects.equals(this.terminationDate, serviceInstanceDto.terminationDate) &&
        Objects.equals(this.quantity, serviceInstanceDto.quantity) &&
        Objects.equals(this.terminationReason, serviceInstanceDto.terminationReason) &&
        Objects.equals(this.endAgreementDate, serviceInstanceDto.endAgreementDate) &&
        Objects.equals(this.customFields, serviceInstanceDto.customFields) &&
        Objects.equals(this.orderNumber, serviceInstanceDto.orderNumber) &&
        Objects.equals(this.rateUntilDate, serviceInstanceDto.rateUntilDate) &&
        Objects.equals(this.amountPS, serviceInstanceDto.amountPS) &&
        Objects.equals(this.calendarPSCode, serviceInstanceDto.calendarPSCode) &&
        Objects.equals(this.paymentDayInMonthPS, serviceInstanceDto.paymentDayInMonthPS) &&
        Objects.equals(this.minimumAmountEl, serviceInstanceDto.minimumAmountEl) &&
        Objects.equals(this.minimumAmountElSpark, serviceInstanceDto.minimumAmountElSpark) &&
        Objects.equals(this.minimumLabelEl, serviceInstanceDto.minimumLabelEl) &&
        Objects.equals(this.minimumLabelElSpark, serviceInstanceDto.minimumLabelElSpark) &&
        Objects.equals(this.autoEndOfEngagement, serviceInstanceDto.autoEndOfEngagement) &&
        Objects.equals(this.subscribedTillDate, serviceInstanceDto.subscribedTillDate) &&
        Objects.equals(this.serviceRenewal, serviceInstanceDto.serviceRenewal);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, code, description, updatedCode, status, statusDate, subscriptionDate, terminationDate, quantity, terminationReason, endAgreementDate, customFields, orderNumber, rateUntilDate, amountPS, calendarPSCode, paymentDayInMonthPS, minimumAmountEl, minimumAmountElSpark, minimumLabelEl, minimumLabelElSpark, autoEndOfEngagement, subscribedTillDate, serviceRenewal);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class ServiceInstanceDto {\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("    status: ").append(toIndentedString(status)).append("\n");
    sb.append("    statusDate: ").append(toIndentedString(statusDate)).append("\n");
    sb.append("    subscriptionDate: ").append(toIndentedString(subscriptionDate)).append("\n");
    sb.append("    terminationDate: ").append(toIndentedString(terminationDate)).append("\n");
    sb.append("    quantity: ").append(toIndentedString(quantity)).append("\n");
    sb.append("    terminationReason: ").append(toIndentedString(terminationReason)).append("\n");
    sb.append("    endAgreementDate: ").append(toIndentedString(endAgreementDate)).append("\n");
    sb.append("    customFields: ").append(toIndentedString(customFields)).append("\n");
    sb.append("    orderNumber: ").append(toIndentedString(orderNumber)).append("\n");
    sb.append("    rateUntilDate: ").append(toIndentedString(rateUntilDate)).append("\n");
    sb.append("    amountPS: ").append(toIndentedString(amountPS)).append("\n");
    sb.append("    calendarPSCode: ").append(toIndentedString(calendarPSCode)).append("\n");
    sb.append("    paymentDayInMonthPS: ").append(toIndentedString(paymentDayInMonthPS)).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("    autoEndOfEngagement: ").append(toIndentedString(autoEndOfEngagement)).append("\n");
    sb.append("    subscribedTillDate: ").append(toIndentedString(subscribedTillDate)).append("\n");
    sb.append("    serviceRenewal: ").append(toIndentedString(serviceRenewal)).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    ");
  }

}

