/*
 * 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.BusinessEntityDto;
import org.openapitools.client.model.ContactInformationDto;
import org.openapitools.client.model.CustomFieldsDto;
import org.openapitools.client.model.DiscountPlanDto;
import org.openapitools.client.model.DiscountPlanInstanceDto;
import org.openapitools.client.model.InvoiceDto;
import org.openapitools.client.model.NameDto;
import org.openapitools.client.model.UserAccountsDto;
import org.threeten.bp.OffsetDateTime;

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

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

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

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

  public static final String SERIALIZED_NAME_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_JOB_TITLE = "jobTitle";
  @SerializedName(SERIALIZED_NAME_JOB_TITLE)
  private String jobTitle;

  public static final String SERIALIZED_NAME_BUSINESS_ACCOUNT_MODEL = "businessAccountModel";
  @SerializedName(SERIALIZED_NAME_BUSINESS_ACCOUNT_MODEL)
  private BusinessEntityDto businessAccountModel;

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

  public static final String SERIALIZED_NAME_LOADED = "loaded";
  @SerializedName(SERIALIZED_NAME_LOADED)
  private Boolean loaded;

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

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

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

  public static final String SERIALIZED_NAME_CUSTOMER_ACCOUNT = "customerAccount";
  @SerializedName(SERIALIZED_NAME_CUSTOMER_ACCOUNT)
  private String customerAccount;

  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_LANGUAGE = "language";
  @SerializedName(SERIALIZED_NAME_LANGUAGE)
  private String language;

  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_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_ELECTRONIC_BILLING = "electronicBilling";
  @SerializedName(SERIALIZED_NAME_ELECTRONIC_BILLING)
  private Boolean electronicBilling;

  /**
   * Gets or Sets status
   */
  @JsonAdapter(StatusEnum.Adapter.class)
  public enum StatusEnum {
    ACTIVE("ACTIVE"),
    
    CANCELED("CANCELED"),
    
    TERMINATED("TERMINATED"),
    
    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_TERMINATION_REASON = "terminationReason";
  @SerializedName(SERIALIZED_NAME_TERMINATION_REASON)
  private String terminationReason;

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

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

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

  public static final String SERIALIZED_NAME_PHONE = "phone";
  @SerializedName(SERIALIZED_NAME_PHONE)
  private String phone;

  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;

  /**
   * 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_USER_ACCOUNTS = "userAccounts";
  @SerializedName(SERIALIZED_NAME_USER_ACCOUNTS)
  private UserAccountsDto userAccounts;

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

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

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

  public 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto businessAccountModel(BusinessEntityDto businessAccountModel) {
    
    this.businessAccountModel = businessAccountModel;
    return this;
  }

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

  public BusinessEntityDto getBusinessAccountModel() {
    return businessAccountModel;
  }



  public void setBusinessAccountModel(BusinessEntityDto businessAccountModel) {
    this.businessAccountModel = businessAccountModel;
  }


  public BillingAccountDto 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 BillingAccountDto loaded(Boolean loaded) {
    
    this.loaded = loaded;
    return this;
  }

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

  public Boolean getLoaded() {
    return loaded;
  }



  public void setLoaded(Boolean loaded) {
    this.loaded = loaded;
  }


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

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

  public String getCustomerAccount() {
    return customerAccount;
  }



  public void setCustomerAccount(String customerAccount) {
    this.customerAccount = customerAccount;
  }


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

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

  public String getBillingCycle() {
    return billingCycle;
  }



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


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

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

  public String getCountry() {
    return country;
  }



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


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

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

  public String getLanguage() {
    return language;
  }



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


  public BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto invoices(List<InvoiceDto> invoices) {
    
    this.invoices = invoices;
    return this;
  }

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

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

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



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


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

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

  public String getPhone() {
    return phone;
  }



  public void setPhone(String phone) {
    this.phone = phone;
  }


  public BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto userAccounts(UserAccountsDto userAccounts) {
    
    this.userAccounts = userAccounts;
    return this;
  }

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

  public UserAccountsDto getUserAccounts() {
    return userAccounts;
  }



  public void setUserAccounts(UserAccountsDto userAccounts) {
    this.userAccounts = userAccounts;
  }


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

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

  public BillingAccountDto 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 BillingAccountDto discountPlanInstances(List<DiscountPlanInstanceDto> discountPlanInstances) {
    
    this.discountPlanInstances = discountPlanInstances;
    return this;
  }

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

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

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



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


  public BillingAccountDto 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 BillingAccountDto 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 BillingAccountDto 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;
    }
    BillingAccountDto billingAccountDto = (BillingAccountDto) o;
    return Objects.equals(this.id, billingAccountDto.id) &&
        Objects.equals(this.code, billingAccountDto.code) &&
        Objects.equals(this.description, billingAccountDto.description) &&
        Objects.equals(this.updatedCode, billingAccountDto.updatedCode) &&
        Objects.equals(this.externalRef1, billingAccountDto.externalRef1) &&
        Objects.equals(this.externalRef2, billingAccountDto.externalRef2) &&
        Objects.equals(this.name, billingAccountDto.name) &&
        Objects.equals(this.address, billingAccountDto.address) &&
        Objects.equals(this.jobTitle, billingAccountDto.jobTitle) &&
        Objects.equals(this.businessAccountModel, billingAccountDto.businessAccountModel) &&
        Objects.equals(this.customFields, billingAccountDto.customFields) &&
        Objects.equals(this.loaded, billingAccountDto.loaded) &&
        Objects.equals(this.vatNo, billingAccountDto.vatNo) &&
        Objects.equals(this.registrationNo, billingAccountDto.registrationNo) &&
        Objects.equals(this.contactInformation, billingAccountDto.contactInformation) &&
        Objects.equals(this.customerAccount, billingAccountDto.customerAccount) &&
        Objects.equals(this.billingCycle, billingAccountDto.billingCycle) &&
        Objects.equals(this.country, billingAccountDto.country) &&
        Objects.equals(this.language, billingAccountDto.language) &&
        Objects.equals(this.nextInvoiceDate, billingAccountDto.nextInvoiceDate) &&
        Objects.equals(this.subscriptionDate, billingAccountDto.subscriptionDate) &&
        Objects.equals(this.terminationDate, billingAccountDto.terminationDate) &&
        Objects.equals(this.electronicBilling, billingAccountDto.electronicBilling) &&
        Objects.equals(this.status, billingAccountDto.status) &&
        Objects.equals(this.statusDate, billingAccountDto.statusDate) &&
        Objects.equals(this.terminationReason, billingAccountDto.terminationReason) &&
        Objects.equals(this.email, billingAccountDto.email) &&
        Objects.equals(this.invoices, billingAccountDto.invoices) &&
        Objects.equals(this.invoicingThreshold, billingAccountDto.invoicingThreshold) &&
        Objects.equals(this.phone, billingAccountDto.phone) &&
        Objects.equals(this.minimumAmountEl, billingAccountDto.minimumAmountEl) &&
        Objects.equals(this.minimumAmountElSpark, billingAccountDto.minimumAmountElSpark) &&
        Objects.equals(this.minimumLabelEl, billingAccountDto.minimumLabelEl) &&
        Objects.equals(this.minimumLabelElSpark, billingAccountDto.minimumLabelElSpark) &&
        Objects.equals(this.paymentMethod, billingAccountDto.paymentMethod) &&
        Objects.equals(this.bankCoordinates, billingAccountDto.bankCoordinates) &&
        Objects.equals(this.paymentTerms, billingAccountDto.paymentTerms) &&
        Objects.equals(this.userAccounts, billingAccountDto.userAccounts) &&
        Objects.equals(this.discountPlansForInstantiation, billingAccountDto.discountPlansForInstantiation) &&
        Objects.equals(this.discountPlansForTermination, billingAccountDto.discountPlansForTermination) &&
        Objects.equals(this.discountPlanInstances, billingAccountDto.discountPlanInstances) &&
        Objects.equals(this.mailingType, billingAccountDto.mailingType) &&
        Objects.equals(this.emailTemplate, billingAccountDto.emailTemplate) &&
        Objects.equals(this.ccedEmails, billingAccountDto.ccedEmails);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, code, description, updatedCode, externalRef1, externalRef2, name, address, jobTitle, businessAccountModel, customFields, loaded, vatNo, registrationNo, contactInformation, customerAccount, billingCycle, country, language, nextInvoiceDate, subscriptionDate, terminationDate, electronicBilling, status, statusDate, terminationReason, email, invoices, invoicingThreshold, phone, minimumAmountEl, minimumAmountElSpark, minimumLabelEl, minimumLabelElSpark, paymentMethod, bankCoordinates, paymentTerms, userAccounts, discountPlansForInstantiation, discountPlansForTermination, discountPlanInstances, mailingType, emailTemplate, ccedEmails);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class BillingAccountDto {\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("    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("    jobTitle: ").append(toIndentedString(jobTitle)).append("\n");
    sb.append("    businessAccountModel: ").append(toIndentedString(businessAccountModel)).append("\n");
    sb.append("    customFields: ").append(toIndentedString(customFields)).append("\n");
    sb.append("    loaded: ").append(toIndentedString(loaded)).append("\n");
    sb.append("    vatNo: ").append(toIndentedString(vatNo)).append("\n");
    sb.append("    registrationNo: ").append(toIndentedString(registrationNo)).append("\n");
    sb.append("    contactInformation: ").append(toIndentedString(contactInformation)).append("\n");
    sb.append("    customerAccount: ").append(toIndentedString(customerAccount)).append("\n");
    sb.append("    billingCycle: ").append(toIndentedString(billingCycle)).append("\n");
    sb.append("    country: ").append(toIndentedString(country)).append("\n");
    sb.append("    language: ").append(toIndentedString(language)).append("\n");
    sb.append("    nextInvoiceDate: ").append(toIndentedString(nextInvoiceDate)).append("\n");
    sb.append("    subscriptionDate: ").append(toIndentedString(subscriptionDate)).append("\n");
    sb.append("    terminationDate: ").append(toIndentedString(terminationDate)).append("\n");
    sb.append("    electronicBilling: ").append(toIndentedString(electronicBilling)).append("\n");
    sb.append("    status: ").append(toIndentedString(status)).append("\n");
    sb.append("    statusDate: ").append(toIndentedString(statusDate)).append("\n");
    sb.append("    terminationReason: ").append(toIndentedString(terminationReason)).append("\n");
    sb.append("    email: ").append(toIndentedString(email)).append("\n");
    sb.append("    invoices: ").append(toIndentedString(invoices)).append("\n");
    sb.append("    invoicingThreshold: ").append(toIndentedString(invoicingThreshold)).append("\n");
    sb.append("    phone: ").append(toIndentedString(phone)).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("    paymentMethod: ").append(toIndentedString(paymentMethod)).append("\n");
    sb.append("    bankCoordinates: ").append(toIndentedString(bankCoordinates)).append("\n");
    sb.append("    paymentTerms: ").append(toIndentedString(paymentTerms)).append("\n");
    sb.append("    userAccounts: ").append(toIndentedString(userAccounts)).append("\n");
    sb.append("    discountPlansForInstantiation: ").append(toIndentedString(discountPlansForInstantiation)).append("\n");
    sb.append("    discountPlansForTermination: ").append(toIndentedString(discountPlansForTermination)).append("\n");
    sb.append("    discountPlanInstances: ").append(toIndentedString(discountPlanInstances)).append("\n");
    sb.append("    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    ");
  }

}

