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


package org.openapitools.client.model;

import java.util.Objects;
import java.util.Arrays;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.openapitools.client.model.Auditable;
import org.openapitools.client.model.AuditableFieldHistory;
import org.openapitools.client.model.BusinessEntity;
import org.openapitools.client.model.CustomFieldValues;
import org.openapitools.client.model.DatePeriod;
import org.openapitools.client.model.ICustomFieldEntity;
import org.openapitools.client.model.Invoice;
import org.openapitools.client.model.Order;
import org.openapitools.client.model.QuoteItem;
import org.openapitools.client.model.UserAccount;
import org.openapitools.client.model.UserHierarchyLevel;
import org.threeten.bp.OffsetDateTime;

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

  public static final String SERIALIZED_NAME_QUOTE_VERSION = "quoteVersion";
  @SerializedName(SERIALIZED_NAME_QUOTE_VERSION)
  private String quoteVersion;

  public static final String SERIALIZED_NAME_NOTIFICATION_CONTACT = "notificationContact";
  @SerializedName(SERIALIZED_NAME_NOTIFICATION_CONTACT)
  private String notificationContact;

  public static final String SERIALIZED_NAME_QUOTE_DATE = "quoteDate";
  @SerializedName(SERIALIZED_NAME_QUOTE_DATE)
  private OffsetDateTime quoteDate;

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

  public static final String SERIALIZED_NAME_REQUESTED_COMPLETION_DATE = "requestedCompletionDate";
  @SerializedName(SERIALIZED_NAME_REQUESTED_COMPLETION_DATE)
  private OffsetDateTime requestedCompletionDate;

  public static final String SERIALIZED_NAME_FULFILLMENT_START_DATE = "fulfillmentStartDate";
  @SerializedName(SERIALIZED_NAME_FULFILLMENT_START_DATE)
  private OffsetDateTime fulfillmentStartDate;

  public static final String SERIALIZED_NAME_COMPLETION_DATE = "completionDate";
  @SerializedName(SERIALIZED_NAME_COMPLETION_DATE)
  private OffsetDateTime completionDate;

  public static final String SERIALIZED_NAME_CATEGORY = "category";
  @SerializedName(SERIALIZED_NAME_CATEGORY)
  private String category;

  /**
   * Gets or Sets status
   */
  @JsonAdapter(StatusEnum.Adapter.class)
  public enum StatusEnum {
    IN_PROGRESS("IN_PROGRESS"),
    
    PENDING("PENDING"),
    
    CANCELLED("CANCELLED"),
    
    APPROVED("APPROVED"),
    
    ACCEPTED("ACCEPTED"),
    
    REJECTED("REJECTED");

    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_MESSAGE = "statusMessage";
  @SerializedName(SERIALIZED_NAME_STATUS_MESSAGE)
  private String statusMessage;

  public static final String SERIALIZED_NAME_QUOTE_ITEMS = "quoteItems";
  @SerializedName(SERIALIZED_NAME_QUOTE_ITEMS)
  private List<QuoteItem> quoteItems = null;

  public static final String SERIALIZED_NAME_ROUTED_TO_USER_GROUP = "routedToUserGroup";
  @SerializedName(SERIALIZED_NAME_ROUTED_TO_USER_GROUP)
  private UserHierarchyLevel routedToUserGroup;

  public static final String SERIALIZED_NAME_RECEIVED_FROM_APP = "receivedFromApp";
  @SerializedName(SERIALIZED_NAME_RECEIVED_FROM_APP)
  private String receivedFromApp;

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

  public static final String SERIALIZED_NAME_INVOICES = "invoices";
  @SerializedName(SERIALIZED_NAME_INVOICES)
  private List<Invoice> invoices = null;

  public static final String SERIALIZED_NAME_ORDER = "order";
  @SerializedName(SERIALIZED_NAME_ORDER)
  private Order order;

  public static final String SERIALIZED_NAME_GENERATE_PDF = "generatePdf";
  @SerializedName(SERIALIZED_NAME_GENERATE_PDF)
  private Boolean generatePdf;

  public static final String SERIALIZED_NAME_USER_ACCOUNTS = "userAccounts";
  @SerializedName(SERIALIZED_NAME_USER_ACCOUNTS)
  private List<UserAccount> userAccounts = null;

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

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

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

  public String getExternalId() {
    return externalId;
  }



  public void setExternalId(String externalId) {
    this.externalId = externalId;
  }


  public Quote quoteVersion(String quoteVersion) {
    
    this.quoteVersion = quoteVersion;
    return this;
  }

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

  public String getQuoteVersion() {
    return quoteVersion;
  }



  public void setQuoteVersion(String quoteVersion) {
    this.quoteVersion = quoteVersion;
  }


  public Quote notificationContact(String notificationContact) {
    
    this.notificationContact = notificationContact;
    return this;
  }

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

  public String getNotificationContact() {
    return notificationContact;
  }



  public void setNotificationContact(String notificationContact) {
    this.notificationContact = notificationContact;
  }


  public Quote quoteDate(OffsetDateTime quoteDate) {
    
    this.quoteDate = quoteDate;
    return this;
  }

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

  public OffsetDateTime getQuoteDate() {
    return quoteDate;
  }



  public void setQuoteDate(OffsetDateTime quoteDate) {
    this.quoteDate = quoteDate;
  }


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

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

  public DatePeriod getValidity() {
    return validity;
  }



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


  public Quote requestedCompletionDate(OffsetDateTime requestedCompletionDate) {
    
    this.requestedCompletionDate = requestedCompletionDate;
    return this;
  }

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

  public OffsetDateTime getRequestedCompletionDate() {
    return requestedCompletionDate;
  }



  public void setRequestedCompletionDate(OffsetDateTime requestedCompletionDate) {
    this.requestedCompletionDate = requestedCompletionDate;
  }


  public Quote fulfillmentStartDate(OffsetDateTime fulfillmentStartDate) {
    
    this.fulfillmentStartDate = fulfillmentStartDate;
    return this;
  }

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

  public OffsetDateTime getFulfillmentStartDate() {
    return fulfillmentStartDate;
  }



  public void setFulfillmentStartDate(OffsetDateTime fulfillmentStartDate) {
    this.fulfillmentStartDate = fulfillmentStartDate;
  }


  public Quote completionDate(OffsetDateTime completionDate) {
    
    this.completionDate = completionDate;
    return this;
  }

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

  public OffsetDateTime getCompletionDate() {
    return completionDate;
  }



  public void setCompletionDate(OffsetDateTime completionDate) {
    this.completionDate = completionDate;
  }


  public Quote category(String category) {
    
    this.category = category;
    return this;
  }

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

  public String getCategory() {
    return category;
  }



  public void setCategory(String category) {
    this.category = category;
  }


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

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

  public StatusEnum getStatus() {
    return status;
  }



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


  public Quote statusMessage(String statusMessage) {
    
    this.statusMessage = statusMessage;
    return this;
  }

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

  public String getStatusMessage() {
    return statusMessage;
  }



  public void setStatusMessage(String statusMessage) {
    this.statusMessage = statusMessage;
  }


  public Quote quoteItems(List<QuoteItem> quoteItems) {
    
    this.quoteItems = quoteItems;
    return this;
  }

  public Quote addQuoteItemsItem(QuoteItem quoteItemsItem) {
    if (this.quoteItems == null) {
      this.quoteItems = new ArrayList<QuoteItem>();
    }
    this.quoteItems.add(quoteItemsItem);
    return this;
  }

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

  public List<QuoteItem> getQuoteItems() {
    return quoteItems;
  }



  public void setQuoteItems(List<QuoteItem> quoteItems) {
    this.quoteItems = quoteItems;
  }


  public Quote routedToUserGroup(UserHierarchyLevel routedToUserGroup) {
    
    this.routedToUserGroup = routedToUserGroup;
    return this;
  }

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

  public UserHierarchyLevel getRoutedToUserGroup() {
    return routedToUserGroup;
  }



  public void setRoutedToUserGroup(UserHierarchyLevel routedToUserGroup) {
    this.routedToUserGroup = routedToUserGroup;
  }


  public Quote receivedFromApp(String receivedFromApp) {
    
    this.receivedFromApp = receivedFromApp;
    return this;
  }

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

  public String getReceivedFromApp() {
    return receivedFromApp;
  }



  public void setReceivedFromApp(String receivedFromApp) {
    this.receivedFromApp = receivedFromApp;
  }


  public Quote userAccount(UserAccount userAccount) {
    
    this.userAccount = userAccount;
    return this;
  }

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

  public UserAccount getUserAccount() {
    return userAccount;
  }



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


  public Quote invoices(List<Invoice> invoices) {
    
    this.invoices = invoices;
    return this;
  }

  public Quote addInvoicesItem(Invoice invoicesItem) {
    if (this.invoices == null) {
      this.invoices = new ArrayList<Invoice>();
    }
    this.invoices.add(invoicesItem);
    return this;
  }

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

  public List<Invoice> getInvoices() {
    return invoices;
  }



  public void setInvoices(List<Invoice> invoices) {
    this.invoices = invoices;
  }


  public Quote order(Order order) {
    
    this.order = order;
    return this;
  }

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

  public Order getOrder() {
    return order;
  }



  public void setOrder(Order order) {
    this.order = order;
  }


  public Quote generatePdf(Boolean generatePdf) {
    
    this.generatePdf = generatePdf;
    return this;
  }

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

  public Boolean getGeneratePdf() {
    return generatePdf;
  }



  public void setGeneratePdf(Boolean generatePdf) {
    this.generatePdf = generatePdf;
  }


  public Quote userAccounts(List<UserAccount> userAccounts) {
    
    this.userAccounts = userAccounts;
    return this;
  }

  public Quote addUserAccountsItem(UserAccount userAccountsItem) {
    if (this.userAccounts == null) {
      this.userAccounts = new ArrayList<UserAccount>();
    }
    this.userAccounts.add(userAccountsItem);
    return this;
  }

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

  public List<UserAccount> getUserAccounts() {
    return userAccounts;
  }



  public void setUserAccounts(List<UserAccount> userAccounts) {
    this.userAccounts = userAccounts;
  }


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

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

  public Quote 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 Quote 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 Quote 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 Quote 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 Quote 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 Quote 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 Quote 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 Quote 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 Quote _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;
    }
    Quote quote = (Quote) o;
    return Objects.equals(this.id, quote.id) &&
        Objects.equals(this.version, quote.version) &&
        Objects.equals(this.auditable, quote.auditable) &&
        Objects.equals(this.historized, quote.historized) &&
        Objects.equals(this.notified, quote.notified) &&
        Objects.equals(this.auditableFields, quote.auditableFields) &&
        Objects.equals(this.code, quote.code) &&
        Objects.equals(this.description, quote.description) &&
        Objects.equals(this.appendGeneratedCode, quote.appendGeneratedCode) &&
        Objects.equals(this.uuid, quote.uuid) &&
        Objects.equals(this.cfValues, quote.cfValues) &&
        Objects.equals(this.cfAccumulatedValues, quote.cfAccumulatedValues) &&
        Objects.equals(this.externalId, quote.externalId) &&
        Objects.equals(this.quoteVersion, quote.quoteVersion) &&
        Objects.equals(this.notificationContact, quote.notificationContact) &&
        Objects.equals(this.quoteDate, quote.quoteDate) &&
        Objects.equals(this.validity, quote.validity) &&
        Objects.equals(this.requestedCompletionDate, quote.requestedCompletionDate) &&
        Objects.equals(this.fulfillmentStartDate, quote.fulfillmentStartDate) &&
        Objects.equals(this.completionDate, quote.completionDate) &&
        Objects.equals(this.category, quote.category) &&
        Objects.equals(this.status, quote.status) &&
        Objects.equals(this.statusMessage, quote.statusMessage) &&
        Objects.equals(this.quoteItems, quote.quoteItems) &&
        Objects.equals(this.routedToUserGroup, quote.routedToUserGroup) &&
        Objects.equals(this.receivedFromApp, quote.receivedFromApp) &&
        Objects.equals(this.userAccount, quote.userAccount) &&
        Objects.equals(this.invoices, quote.invoices) &&
        Objects.equals(this.order, quote.order) &&
        Objects.equals(this.generatePdf, quote.generatePdf) &&
        Objects.equals(this.userAccounts, quote.userAccounts) &&
        Objects.equals(this.parentCFEntities, quote.parentCFEntities) &&
        Objects.equals(this.cfValuesNullSafe, quote.cfValuesNullSafe) &&
        Objects.equals(this.cfValuesAsValues, quote.cfValuesAsValues) &&
        Objects.equals(this.cfAccumulatedValuesNullSafe, quote.cfAccumulatedValuesNullSafe) &&
        Objects.equals(this.descriptionOrCode, quote.descriptionOrCode) &&
        Objects.equals(this.descriptionAndCode, quote.descriptionAndCode) &&
        Objects.equals(this.referenceCode, quote.referenceCode) &&
        Objects.equals(this.referenceDescription, quote.referenceDescription) &&
        Objects.equals(this.codeChanged, quote.codeChanged) &&
        Objects.equals(this.parentEntity, quote.parentEntity) &&
        Objects.equals(this._transient, quote._transient);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, version, auditable, historized, notified, auditableFields, code, description, appendGeneratedCode, uuid, cfValues, cfAccumulatedValues, externalId, quoteVersion, notificationContact, quoteDate, validity, requestedCompletionDate, fulfillmentStartDate, completionDate, category, status, statusMessage, quoteItems, routedToUserGroup, receivedFromApp, userAccount, invoices, order, generatePdf, userAccounts, parentCFEntities, cfValuesNullSafe, cfValuesAsValues, cfAccumulatedValuesNullSafe, descriptionOrCode, descriptionAndCode, referenceCode, referenceDescription, codeChanged, parentEntity, _transient);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class Quote {\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("    externalId: ").append(toIndentedString(externalId)).append("\n");
    sb.append("    quoteVersion: ").append(toIndentedString(quoteVersion)).append("\n");
    sb.append("    notificationContact: ").append(toIndentedString(notificationContact)).append("\n");
    sb.append("    quoteDate: ").append(toIndentedString(quoteDate)).append("\n");
    sb.append("    validity: ").append(toIndentedString(validity)).append("\n");
    sb.append("    requestedCompletionDate: ").append(toIndentedString(requestedCompletionDate)).append("\n");
    sb.append("    fulfillmentStartDate: ").append(toIndentedString(fulfillmentStartDate)).append("\n");
    sb.append("    completionDate: ").append(toIndentedString(completionDate)).append("\n");
    sb.append("    category: ").append(toIndentedString(category)).append("\n");
    sb.append("    status: ").append(toIndentedString(status)).append("\n");
    sb.append("    statusMessage: ").append(toIndentedString(statusMessage)).append("\n");
    sb.append("    quoteItems: ").append(toIndentedString(quoteItems)).append("\n");
    sb.append("    routedToUserGroup: ").append(toIndentedString(routedToUserGroup)).append("\n");
    sb.append("    receivedFromApp: ").append(toIndentedString(receivedFromApp)).append("\n");
    sb.append("    userAccount: ").append(toIndentedString(userAccount)).append("\n");
    sb.append("    invoices: ").append(toIndentedString(invoices)).append("\n");
    sb.append("    order: ").append(toIndentedString(order)).append("\n");
    sb.append("    generatePdf: ").append(toIndentedString(generatePdf)).append("\n");
    sb.append("    userAccounts: ").append(toIndentedString(userAccounts)).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    ");
  }

}

