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


package org.openapitools.client.model;

import java.util.Objects;
import java.util.Arrays;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import org.openapitools.client.model.AddressDto;
import org.openapitools.client.model.BankCoordinatesDto;
import org.openapitools.client.model.ContactInformationDto;
import org.openapitools.client.model.CustomFieldDto;
import org.openapitools.client.model.CustomFieldsDto;
import org.openapitools.client.model.DiscountPlanDto;
import org.openapitools.client.model.NameDto;
import org.openapitools.client.model.PaymentMethodDto;
import org.threeten.bp.OffsetDateTime;

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

  public static final String SERIALIZED_NAME_CRM_PARENT_CODE = "crmParentCode";
  @SerializedName(SERIALIZED_NAME_CRM_PARENT_CODE)
  private String crmParentCode;

  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_EXTERNAL_REF1 = "externalRef1";
  @SerializedName(SERIALIZED_NAME_EXTERNAL_REF1)
  private String externalRef1;

  public static final String SERIALIZED_NAME_EXTERNAL_REF2 = "externalRef2";
  @SerializedName(SERIALIZED_NAME_EXTERNAL_REF2)
  private String externalRef2;

  public static final String SERIALIZED_NAME_NAME = "name";
  @SerializedName(SERIALIZED_NAME_NAME)
  private NameDto name;

  public static final String SERIALIZED_NAME_ADDRESS = "address";
  @SerializedName(SERIALIZED_NAME_ADDRESS)
  private AddressDto address;

  public static final String SERIALIZED_NAME_CONTACT_INFORMATION = "contactInformation";
  @SerializedName(SERIALIZED_NAME_CONTACT_INFORMATION)
  private ContactInformationDto contactInformation;

  public static final String SERIALIZED_NAME_JOB_TITLE = "jobTitle";
  @SerializedName(SERIALIZED_NAME_JOB_TITLE)
  private String jobTitle;

  public static final String SERIALIZED_NAME_LANGUAGE = "language";
  @SerializedName(SERIALIZED_NAME_LANGUAGE)
  private String language;

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

  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_CUSTOMER_CATEGORY = "customerCategory";
  @SerializedName(SERIALIZED_NAME_CUSTOMER_CATEGORY)
  private String customerCategory;

  public static final String SERIALIZED_NAME_CUSTOMER_BRAND = "customerBrand";
  @SerializedName(SERIALIZED_NAME_CUSTOMER_BRAND)
  private String customerBrand;

  public static final String SERIALIZED_NAME_REGISTRATION_NO = "registrationNo";
  @SerializedName(SERIALIZED_NAME_REGISTRATION_NO)
  private String registrationNo;

  public static final String SERIALIZED_NAME_VAT_NO = "vatNo";
  @SerializedName(SERIALIZED_NAME_VAT_NO)
  private String vatNo;

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

  public static final String SERIALIZED_NAME_MANDATE_IDENTIFICATION = "mandateIdentification";
  @SerializedName(SERIALIZED_NAME_MANDATE_IDENTIFICATION)
  private String mandateIdentification;

  public static final String SERIALIZED_NAME_MANDATE_DATE = "mandateDate";
  @SerializedName(SERIALIZED_NAME_MANDATE_DATE)
  private OffsetDateTime mandateDate;

  public static final String SERIALIZED_NAME_CURRENCY = "currency";
  @SerializedName(SERIALIZED_NAME_CURRENCY)
  private String currency;

  /**
   * Gets or Sets caStatus
   */
  @JsonAdapter(CaStatusEnum.Adapter.class)
  public enum CaStatusEnum {
    ACTIVE("ACTIVE"),
    
    CLOSE("CLOSE");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_CA_STATUS = "caStatus";
  @SerializedName(SERIALIZED_NAME_CA_STATUS)
  private CaStatusEnum caStatus;

  public static final String SERIALIZED_NAME_CREDIT_CATEGORY = "creditCategory";
  @SerializedName(SERIALIZED_NAME_CREDIT_CATEGORY)
  private String creditCategory;

  public static final String SERIALIZED_NAME_DATE_STATUS = "dateStatus";
  @SerializedName(SERIALIZED_NAME_DATE_STATUS)
  private OffsetDateTime dateStatus;

  public static final String SERIALIZED_NAME_DATE_DUNNING_LEVEL = "dateDunningLevel";
  @SerializedName(SERIALIZED_NAME_DATE_DUNNING_LEVEL)
  private OffsetDateTime dateDunningLevel;

  /**
   * Gets or Sets dunningLevel
   */
  @JsonAdapter(DunningLevelEnum.Adapter.class)
  public enum DunningLevelEnum {
    R0("R0"),
    
    R1("R1"),
    
    R2("R2"),
    
    R3("R3"),
    
    R4("R4");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_DUNNING_LEVEL = "dunningLevel";
  @SerializedName(SERIALIZED_NAME_DUNNING_LEVEL)
  private DunningLevelEnum dunningLevel;

  public static final String SERIALIZED_NAME_PAYMENT_METHODS = "paymentMethods";
  @SerializedName(SERIALIZED_NAME_PAYMENT_METHODS)
  private List<PaymentMethodDto> paymentMethods = null;

  /**
   * Gets or Sets paymentMethod
   */
  @JsonAdapter(PaymentMethodEnum.Adapter.class)
  public enum PaymentMethodEnum {
    CHECK("CHECK"),
    
    DIRECTDEBIT("DIRECTDEBIT"),
    
    WIRETRANSFER("WIRETRANSFER"),
    
    CARD("CARD");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_PAYMENT_METHOD = "paymentMethod";
  @SerializedName(SERIALIZED_NAME_PAYMENT_METHOD)
  private PaymentMethodEnum paymentMethod;

  public static final String SERIALIZED_NAME_BANK_COORDINATES = "bankCoordinates";
  @SerializedName(SERIALIZED_NAME_BANK_COORDINATES)
  private BankCoordinatesDto bankCoordinates;

  public static final String SERIALIZED_NAME_PAYMENT_TERMS = "paymentTerms";
  @SerializedName(SERIALIZED_NAME_PAYMENT_TERMS)
  private String paymentTerms;

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

  public static final String SERIALIZED_NAME_COUNTRY = "country";
  @SerializedName(SERIALIZED_NAME_COUNTRY)
  private String country;

  public static final String SERIALIZED_NAME_NEXT_INVOICE_DATE = "nextInvoiceDate";
  @SerializedName(SERIALIZED_NAME_NEXT_INVOICE_DATE)
  private OffsetDateTime nextInvoiceDate;

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

  /**
   * Gets or Sets baStatus
   */
  @JsonAdapter(BaStatusEnum.Adapter.class)
  public enum BaStatusEnum {
    ACTIVE("ACTIVE"),
    
    CANCELED("CANCELED"),
    
    TERMINATED("TERMINATED"),
    
    CLOSED("CLOSED");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_BA_STATUS = "baStatus";
  @SerializedName(SERIALIZED_NAME_BA_STATUS)
  private BaStatusEnum baStatus;

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

  public static final String SERIALIZED_NAME_INVOICING_THRESHOLD = "invoicingThreshold";
  @SerializedName(SERIALIZED_NAME_INVOICING_THRESHOLD)
  private BigDecimal invoicingThreshold;

  /**
   * Gets or Sets uaStatus
   */
  @JsonAdapter(UaStatusEnum.Adapter.class)
  public enum UaStatusEnum {
    ACTIVE("ACTIVE"),
    
    CANCELED("CANCELED"),
    
    TERMINATED("TERMINATED"),
    
    CLOSED("CLOSED");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_UA_STATUS = "uaStatus";
  @SerializedName(SERIALIZED_NAME_UA_STATUS)
  private UaStatusEnum uaStatus;

  public static final String SERIALIZED_NAME_CF_TO_ADD = "cfToAdd";
  @SerializedName(SERIALIZED_NAME_CF_TO_ADD)
  private CustomFieldDto cfToAdd;

  public static final String SERIALIZED_NAME_CF_MAP_TO_ADD = "cfMapToAdd";
  @SerializedName(SERIALIZED_NAME_CF_MAP_TO_ADD)
  private CustomFieldDto cfMapToAdd;

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

  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_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 CRMAccountHierarchyDto crmAccountType(String crmAccountType) {
    
    this.crmAccountType = crmAccountType;
    return this;
  }

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

  public String getCrmAccountType() {
    return crmAccountType;
  }



  public void setCrmAccountType(String crmAccountType) {
    this.crmAccountType = crmAccountType;
  }


  public CRMAccountHierarchyDto crmParentCode(String crmParentCode) {
    
    this.crmParentCode = crmParentCode;
    return this;
  }

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

  public String getCrmParentCode() {
    return crmParentCode;
  }



  public void setCrmParentCode(String crmParentCode) {
    this.crmParentCode = crmParentCode;
  }


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

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

  public String getExternalRef1() {
    return externalRef1;
  }



  public void setExternalRef1(String externalRef1) {
    this.externalRef1 = externalRef1;
  }


  public CRMAccountHierarchyDto externalRef2(String externalRef2) {
    
    this.externalRef2 = externalRef2;
    return this;
  }

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

  public String getExternalRef2() {
    return externalRef2;
  }



  public void setExternalRef2(String externalRef2) {
    this.externalRef2 = externalRef2;
  }


  public CRMAccountHierarchyDto name(NameDto name) {
    
    this.name = name;
    return this;
  }

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

  public NameDto getName() {
    return name;
  }



  public void setName(NameDto name) {
    this.name = name;
  }


  public CRMAccountHierarchyDto address(AddressDto address) {
    
    this.address = address;
    return this;
  }

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

  public AddressDto getAddress() {
    return address;
  }



  public void setAddress(AddressDto address) {
    this.address = address;
  }


  public CRMAccountHierarchyDto contactInformation(ContactInformationDto contactInformation) {
    
    this.contactInformation = contactInformation;
    return this;
  }

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

  public ContactInformationDto getContactInformation() {
    return contactInformation;
  }



  public void setContactInformation(ContactInformationDto contactInformation) {
    this.contactInformation = contactInformation;
  }


  public CRMAccountHierarchyDto jobTitle(String jobTitle) {
    
    this.jobTitle = jobTitle;
    return this;
  }

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

  public String getJobTitle() {
    return jobTitle;
  }



  public void setJobTitle(String jobTitle) {
    this.jobTitle = jobTitle;
  }


  public CRMAccountHierarchyDto language(String language) {
    
    this.language = language;
    return this;
  }

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

  public String getLanguage() {
    return language;
  }



  public void setLanguage(String language) {
    this.language = language;
  }


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

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

  public String getCustomerCategory() {
    return customerCategory;
  }



  public void setCustomerCategory(String customerCategory) {
    this.customerCategory = customerCategory;
  }


  public CRMAccountHierarchyDto customerBrand(String customerBrand) {
    
    this.customerBrand = customerBrand;
    return this;
  }

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

  public String getCustomerBrand() {
    return customerBrand;
  }



  public void setCustomerBrand(String customerBrand) {
    this.customerBrand = customerBrand;
  }


  public CRMAccountHierarchyDto registrationNo(String registrationNo) {
    
    this.registrationNo = registrationNo;
    return this;
  }

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

  public String getRegistrationNo() {
    return registrationNo;
  }



  public void setRegistrationNo(String registrationNo) {
    this.registrationNo = registrationNo;
  }


  public CRMAccountHierarchyDto vatNo(String vatNo) {
    
    this.vatNo = vatNo;
    return this;
  }

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

  public String getVatNo() {
    return vatNo;
  }



  public void setVatNo(String vatNo) {
    this.vatNo = vatNo;
  }


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

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

  public String getMandateIdentification() {
    return mandateIdentification;
  }



  public void setMandateIdentification(String mandateIdentification) {
    this.mandateIdentification = mandateIdentification;
  }


  public CRMAccountHierarchyDto mandateDate(OffsetDateTime mandateDate) {
    
    this.mandateDate = mandateDate;
    return this;
  }

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

  public OffsetDateTime getMandateDate() {
    return mandateDate;
  }



  public void setMandateDate(OffsetDateTime mandateDate) {
    this.mandateDate = mandateDate;
  }


  public CRMAccountHierarchyDto currency(String currency) {
    
    this.currency = currency;
    return this;
  }

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

  public String getCurrency() {
    return currency;
  }



  public void setCurrency(String currency) {
    this.currency = currency;
  }


  public CRMAccountHierarchyDto caStatus(CaStatusEnum caStatus) {
    
    this.caStatus = caStatus;
    return this;
  }

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

  public CaStatusEnum getCaStatus() {
    return caStatus;
  }



  public void setCaStatus(CaStatusEnum caStatus) {
    this.caStatus = caStatus;
  }


  public CRMAccountHierarchyDto creditCategory(String creditCategory) {
    
    this.creditCategory = creditCategory;
    return this;
  }

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

  public String getCreditCategory() {
    return creditCategory;
  }



  public void setCreditCategory(String creditCategory) {
    this.creditCategory = creditCategory;
  }


  public CRMAccountHierarchyDto dateStatus(OffsetDateTime dateStatus) {
    
    this.dateStatus = dateStatus;
    return this;
  }

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

  public OffsetDateTime getDateStatus() {
    return dateStatus;
  }



  public void setDateStatus(OffsetDateTime dateStatus) {
    this.dateStatus = dateStatus;
  }


  public CRMAccountHierarchyDto dateDunningLevel(OffsetDateTime dateDunningLevel) {
    
    this.dateDunningLevel = dateDunningLevel;
    return this;
  }

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

  public OffsetDateTime getDateDunningLevel() {
    return dateDunningLevel;
  }



  public void setDateDunningLevel(OffsetDateTime dateDunningLevel) {
    this.dateDunningLevel = dateDunningLevel;
  }


  public CRMAccountHierarchyDto dunningLevel(DunningLevelEnum dunningLevel) {
    
    this.dunningLevel = dunningLevel;
    return this;
  }

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

  public DunningLevelEnum getDunningLevel() {
    return dunningLevel;
  }



  public void setDunningLevel(DunningLevelEnum dunningLevel) {
    this.dunningLevel = dunningLevel;
  }


  public CRMAccountHierarchyDto paymentMethods(List<PaymentMethodDto> paymentMethods) {
    
    this.paymentMethods = paymentMethods;
    return this;
  }

  public CRMAccountHierarchyDto addPaymentMethodsItem(PaymentMethodDto paymentMethodsItem) {
    if (this.paymentMethods == null) {
      this.paymentMethods = new ArrayList<PaymentMethodDto>();
    }
    this.paymentMethods.add(paymentMethodsItem);
    return this;
  }

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

  public List<PaymentMethodDto> getPaymentMethods() {
    return paymentMethods;
  }



  public void setPaymentMethods(List<PaymentMethodDto> paymentMethods) {
    this.paymentMethods = paymentMethods;
  }


  public CRMAccountHierarchyDto paymentMethod(PaymentMethodEnum paymentMethod) {
    
    this.paymentMethod = paymentMethod;
    return this;
  }

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

  public PaymentMethodEnum getPaymentMethod() {
    return paymentMethod;
  }



  public void setPaymentMethod(PaymentMethodEnum paymentMethod) {
    this.paymentMethod = paymentMethod;
  }


  public CRMAccountHierarchyDto bankCoordinates(BankCoordinatesDto bankCoordinates) {
    
    this.bankCoordinates = bankCoordinates;
    return this;
  }

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

  public BankCoordinatesDto getBankCoordinates() {
    return bankCoordinates;
  }



  public void setBankCoordinates(BankCoordinatesDto bankCoordinates) {
    this.bankCoordinates = bankCoordinates;
  }


  public CRMAccountHierarchyDto paymentTerms(String paymentTerms) {
    
    this.paymentTerms = paymentTerms;
    return this;
  }

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

  public String getPaymentTerms() {
    return paymentTerms;
  }



  public void setPaymentTerms(String paymentTerms) {
    this.paymentTerms = paymentTerms;
  }


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

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

  public String getBillingCycle() {
    return billingCycle;
  }



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


  public CRMAccountHierarchyDto country(String country) {
    
    this.country = country;
    return this;
  }

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

  public String getCountry() {
    return country;
  }



  public void setCountry(String country) {
    this.country = country;
  }


  public CRMAccountHierarchyDto nextInvoiceDate(OffsetDateTime nextInvoiceDate) {
    
    this.nextInvoiceDate = nextInvoiceDate;
    return this;
  }

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

  public OffsetDateTime getNextInvoiceDate() {
    return nextInvoiceDate;
  }



  public void setNextInvoiceDate(OffsetDateTime nextInvoiceDate) {
    this.nextInvoiceDate = nextInvoiceDate;
  }


  public CRMAccountHierarchyDto 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 CRMAccountHierarchyDto baStatus(BaStatusEnum baStatus) {
    
    this.baStatus = baStatus;
    return this;
  }

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

  public BaStatusEnum getBaStatus() {
    return baStatus;
  }



  public void setBaStatus(BaStatusEnum baStatus) {
    this.baStatus = baStatus;
  }


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

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

  public BigDecimal getInvoicingThreshold() {
    return invoicingThreshold;
  }



  public void setInvoicingThreshold(BigDecimal invoicingThreshold) {
    this.invoicingThreshold = invoicingThreshold;
  }


  public CRMAccountHierarchyDto uaStatus(UaStatusEnum uaStatus) {
    
    this.uaStatus = uaStatus;
    return this;
  }

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

  public UaStatusEnum getUaStatus() {
    return uaStatus;
  }



  public void setUaStatus(UaStatusEnum uaStatus) {
    this.uaStatus = uaStatus;
  }


  public CRMAccountHierarchyDto cfToAdd(CustomFieldDto cfToAdd) {
    
    this.cfToAdd = cfToAdd;
    return this;
  }

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

  public CustomFieldDto getCfToAdd() {
    return cfToAdd;
  }



  public void setCfToAdd(CustomFieldDto cfToAdd) {
    this.cfToAdd = cfToAdd;
  }


  public CRMAccountHierarchyDto cfMapToAdd(CustomFieldDto cfMapToAdd) {
    
    this.cfMapToAdd = cfMapToAdd;
    return this;
  }

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

  public CustomFieldDto getCfMapToAdd() {
    return cfMapToAdd;
  }



  public void setCfMapToAdd(CustomFieldDto cfMapToAdd) {
    this.cfMapToAdd = cfMapToAdd;
  }


  public CRMAccountHierarchyDto 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 CRMAccountHierarchyDto discountPlansForInstantiation(List<DiscountPlanDto> discountPlansForInstantiation) {
    
    this.discountPlansForInstantiation = discountPlansForInstantiation;
    return this;
  }

  public CRMAccountHierarchyDto 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 CRMAccountHierarchyDto discountPlansForTermination(List<String> discountPlansForTermination) {
    
    this.discountPlansForTermination = discountPlansForTermination;
    return this;
  }

  public CRMAccountHierarchyDto 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 CRMAccountHierarchyDto 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 CRMAccountHierarchyDto 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 CRMAccountHierarchyDto 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;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    CRMAccountHierarchyDto crMAccountHierarchyDto = (CRMAccountHierarchyDto) o;
    return Objects.equals(this.crmAccountType, crMAccountHierarchyDto.crmAccountType) &&
        Objects.equals(this.crmParentCode, crMAccountHierarchyDto.crmParentCode) &&
        Objects.equals(this.code, crMAccountHierarchyDto.code) &&
        Objects.equals(this.description, crMAccountHierarchyDto.description) &&
        Objects.equals(this.externalRef1, crMAccountHierarchyDto.externalRef1) &&
        Objects.equals(this.externalRef2, crMAccountHierarchyDto.externalRef2) &&
        Objects.equals(this.name, crMAccountHierarchyDto.name) &&
        Objects.equals(this.address, crMAccountHierarchyDto.address) &&
        Objects.equals(this.contactInformation, crMAccountHierarchyDto.contactInformation) &&
        Objects.equals(this.jobTitle, crMAccountHierarchyDto.jobTitle) &&
        Objects.equals(this.language, crMAccountHierarchyDto.language) &&
        Objects.equals(this.terminationReason, crMAccountHierarchyDto.terminationReason) &&
        Objects.equals(this.subscriptionDate, crMAccountHierarchyDto.subscriptionDate) &&
        Objects.equals(this.terminationDate, crMAccountHierarchyDto.terminationDate) &&
        Objects.equals(this.customerCategory, crMAccountHierarchyDto.customerCategory) &&
        Objects.equals(this.customerBrand, crMAccountHierarchyDto.customerBrand) &&
        Objects.equals(this.registrationNo, crMAccountHierarchyDto.registrationNo) &&
        Objects.equals(this.vatNo, crMAccountHierarchyDto.vatNo) &&
        Objects.equals(this.seller, crMAccountHierarchyDto.seller) &&
        Objects.equals(this.mandateIdentification, crMAccountHierarchyDto.mandateIdentification) &&
        Objects.equals(this.mandateDate, crMAccountHierarchyDto.mandateDate) &&
        Objects.equals(this.currency, crMAccountHierarchyDto.currency) &&
        Objects.equals(this.caStatus, crMAccountHierarchyDto.caStatus) &&
        Objects.equals(this.creditCategory, crMAccountHierarchyDto.creditCategory) &&
        Objects.equals(this.dateStatus, crMAccountHierarchyDto.dateStatus) &&
        Objects.equals(this.dateDunningLevel, crMAccountHierarchyDto.dateDunningLevel) &&
        Objects.equals(this.dunningLevel, crMAccountHierarchyDto.dunningLevel) &&
        Objects.equals(this.paymentMethods, crMAccountHierarchyDto.paymentMethods) &&
        Objects.equals(this.paymentMethod, crMAccountHierarchyDto.paymentMethod) &&
        Objects.equals(this.bankCoordinates, crMAccountHierarchyDto.bankCoordinates) &&
        Objects.equals(this.paymentTerms, crMAccountHierarchyDto.paymentTerms) &&
        Objects.equals(this.billingCycle, crMAccountHierarchyDto.billingCycle) &&
        Objects.equals(this.country, crMAccountHierarchyDto.country) &&
        Objects.equals(this.nextInvoiceDate, crMAccountHierarchyDto.nextInvoiceDate) &&
        Objects.equals(this.electronicBilling, crMAccountHierarchyDto.electronicBilling) &&
        Objects.equals(this.baStatus, crMAccountHierarchyDto.baStatus) &&
        Objects.equals(this.email, crMAccountHierarchyDto.email) &&
        Objects.equals(this.invoicingThreshold, crMAccountHierarchyDto.invoicingThreshold) &&
        Objects.equals(this.uaStatus, crMAccountHierarchyDto.uaStatus) &&
        Objects.equals(this.cfToAdd, crMAccountHierarchyDto.cfToAdd) &&
        Objects.equals(this.cfMapToAdd, crMAccountHierarchyDto.cfMapToAdd) &&
        Objects.equals(this.customFields, crMAccountHierarchyDto.customFields) &&
        Objects.equals(this.discountPlansForInstantiation, crMAccountHierarchyDto.discountPlansForInstantiation) &&
        Objects.equals(this.discountPlansForTermination, crMAccountHierarchyDto.discountPlansForTermination) &&
        Objects.equals(this.mailingType, crMAccountHierarchyDto.mailingType) &&
        Objects.equals(this.emailTemplate, crMAccountHierarchyDto.emailTemplate) &&
        Objects.equals(this.ccedEmails, crMAccountHierarchyDto.ccedEmails);
  }

  @Override
  public int hashCode() {
    return Objects.hash(crmAccountType, crmParentCode, code, description, externalRef1, externalRef2, name, address, contactInformation, jobTitle, language, terminationReason, subscriptionDate, terminationDate, customerCategory, customerBrand, registrationNo, vatNo, seller, mandateIdentification, mandateDate, currency, caStatus, creditCategory, dateStatus, dateDunningLevel, dunningLevel, paymentMethods, paymentMethod, bankCoordinates, paymentTerms, billingCycle, country, nextInvoiceDate, electronicBilling, baStatus, email, invoicingThreshold, uaStatus, cfToAdd, cfMapToAdd, customFields, discountPlansForInstantiation, discountPlansForTermination, mailingType, emailTemplate, ccedEmails);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class CRMAccountHierarchyDto {\n");
    sb.append("    crmAccountType: ").append(toIndentedString(crmAccountType)).append("\n");
    sb.append("    crmParentCode: ").append(toIndentedString(crmParentCode)).append("\n");
    sb.append("    code: ").append(toIndentedString(code)).append("\n");
    sb.append("    description: ").append(toIndentedString(description)).append("\n");
    sb.append("    externalRef1: ").append(toIndentedString(externalRef1)).append("\n");
    sb.append("    externalRef2: ").append(toIndentedString(externalRef2)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    address: ").append(toIndentedString(address)).append("\n");
    sb.append("    contactInformation: ").append(toIndentedString(contactInformation)).append("\n");
    sb.append("    jobTitle: ").append(toIndentedString(jobTitle)).append("\n");
    sb.append("    language: ").append(toIndentedString(language)).append("\n");
    sb.append("    terminationReason: ").append(toIndentedString(terminationReason)).append("\n");
    sb.append("    subscriptionDate: ").append(toIndentedString(subscriptionDate)).append("\n");
    sb.append("    terminationDate: ").append(toIndentedString(terminationDate)).append("\n");
    sb.append("    customerCategory: ").append(toIndentedString(customerCategory)).append("\n");
    sb.append("    customerBrand: ").append(toIndentedString(customerBrand)).append("\n");
    sb.append("    registrationNo: ").append(toIndentedString(registrationNo)).append("\n");
    sb.append("    vatNo: ").append(toIndentedString(vatNo)).append("\n");
    sb.append("    seller: ").append(toIndentedString(seller)).append("\n");
    sb.append("    mandateIdentification: ").append(toIndentedString(mandateIdentification)).append("\n");
    sb.append("    mandateDate: ").append(toIndentedString(mandateDate)).append("\n");
    sb.append("    currency: ").append(toIndentedString(currency)).append("\n");
    sb.append("    caStatus: ").append(toIndentedString(caStatus)).append("\n");
    sb.append("    creditCategory: ").append(toIndentedString(creditCategory)).append("\n");
    sb.append("    dateStatus: ").append(toIndentedString(dateStatus)).append("\n");
    sb.append("    dateDunningLevel: ").append(toIndentedString(dateDunningLevel)).append("\n");
    sb.append("    dunningLevel: ").append(toIndentedString(dunningLevel)).append("\n");
    sb.append("    paymentMethods: ").append(toIndentedString(paymentMethods)).append("\n");
    sb.append("    paymentMethod: ").append(toIndentedString(paymentMethod)).append("\n");
    sb.append("    bankCoordinates: ").append(toIndentedString(bankCoordinates)).append("\n");
    sb.append("    paymentTerms: ").append(toIndentedString(paymentTerms)).append("\n");
    sb.append("    billingCycle: ").append(toIndentedString(billingCycle)).append("\n");
    sb.append("    country: ").append(toIndentedString(country)).append("\n");
    sb.append("    nextInvoiceDate: ").append(toIndentedString(nextInvoiceDate)).append("\n");
    sb.append("    electronicBilling: ").append(toIndentedString(electronicBilling)).append("\n");
    sb.append("    baStatus: ").append(toIndentedString(baStatus)).append("\n");
    sb.append("    email: ").append(toIndentedString(email)).append("\n");
    sb.append("    invoicingThreshold: ").append(toIndentedString(invoicingThreshold)).append("\n");
    sb.append("    uaStatus: ").append(toIndentedString(uaStatus)).append("\n");
    sb.append("    cfToAdd: ").append(toIndentedString(cfToAdd)).append("\n");
    sb.append("    cfMapToAdd: ").append(toIndentedString(cfMapToAdd)).append("\n");
    sb.append("    customFields: ").append(toIndentedString(customFields)).append("\n");
    sb.append("    discountPlansForInstantiation: ").append(toIndentedString(discountPlansForInstantiation)).append("\n");
    sb.append("    discountPlansForTermination: ").append(toIndentedString(discountPlansForTermination)).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("}");
    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    ");
  }

}

