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


package org.openapitools.client.model;

import java.util.Objects;
import java.util.Arrays;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;
import java.math.BigDecimal;
import org.openapitools.client.model.BillingCycleDto;
import org.openapitools.client.model.CustomFieldsDto;
import org.threeten.bp.OffsetDateTime;

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

  /**
   * Gets or Sets status
   */
  @JsonAdapter(StatusEnum.Adapter.class)
  public enum StatusEnum {
    NEW("NEW"),
    
    PREINVOICED("PREINVOICED"),
    
    PREVALIDATED("PREVALIDATED"),
    
    CANCELED("CANCELED"),
    
    POSTINVOICED("POSTINVOICED"),
    
    POSTVALIDATED("POSTVALIDATED"),
    
    VALIDATED("VALIDATED"),
    
    CANCELLING("CANCELLING");

    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_BILLING_CYCLE = "billingCycle";
  @SerializedName(SERIALIZED_NAME_BILLING_CYCLE)
  private BillingCycleDto billingCycle;

  public static final String SERIALIZED_NAME_BILLING_ACCOUNT_NUMBER = "billingAccountNumber";
  @SerializedName(SERIALIZED_NAME_BILLING_ACCOUNT_NUMBER)
  private Integer billingAccountNumber;

  public static final String SERIALIZED_NAME_BILLABLE_BILLING_ACOUNT_NUMBER = "billableBillingAcountNumber";
  @SerializedName(SERIALIZED_NAME_BILLABLE_BILLING_ACOUNT_NUMBER)
  private Integer billableBillingAcountNumber;

  public static final String SERIALIZED_NAME_PRODUCIBLE_INVOICE_NUMBER = "producibleInvoiceNumber";
  @SerializedName(SERIALIZED_NAME_PRODUCIBLE_INVOICE_NUMBER)
  private Integer producibleInvoiceNumber;

  public static final String SERIALIZED_NAME_PRODUCIBLE_AMOUNT_WITHOUT_TAX = "producibleAmountWithoutTax";
  @SerializedName(SERIALIZED_NAME_PRODUCIBLE_AMOUNT_WITHOUT_TAX)
  private BigDecimal producibleAmountWithoutTax;

  public static final String SERIALIZED_NAME_PRODUCIBLE_AMOUNT_TAX = "producibleAmountTax";
  @SerializedName(SERIALIZED_NAME_PRODUCIBLE_AMOUNT_TAX)
  private BigDecimal producibleAmountTax;

  public static final String SERIALIZED_NAME_PRODUCIBLE_AMOUNT_WITH_TAX = "producibleAmountWithTax";
  @SerializedName(SERIALIZED_NAME_PRODUCIBLE_AMOUNT_WITH_TAX)
  private BigDecimal producibleAmountWithTax;

  public static final String SERIALIZED_NAME_PR_AMOUNT_WITHOUT_TAX = "prAmountWithoutTax";
  @SerializedName(SERIALIZED_NAME_PR_AMOUNT_WITHOUT_TAX)
  private BigDecimal prAmountWithoutTax;

  public static final String SERIALIZED_NAME_PR_AMOUNT_WITH_TAX = "prAmountWithTax";
  @SerializedName(SERIALIZED_NAME_PR_AMOUNT_WITH_TAX)
  private BigDecimal prAmountWithTax;

  public static final String SERIALIZED_NAME_PR_AMOUNT_TAX = "prAmountTax";
  @SerializedName(SERIALIZED_NAME_PR_AMOUNT_TAX)
  private BigDecimal prAmountTax;

  /**
   * Gets or Sets processType
   */
  @JsonAdapter(ProcessTypeEnum.Adapter.class)
  public enum ProcessTypeEnum {
    AUTOMATIC("AUTOMATIC"),
    
    MANUAL("MANUAL"),
    
    FULL_AUTOMATIC("FULL_AUTOMATIC");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_PROCESS_TYPE = "processType";
  @SerializedName(SERIALIZED_NAME_PROCESS_TYPE)
  private ProcessTypeEnum processType;

  public static final String SERIALIZED_NAME_START_DATE = "startDate";
  @SerializedName(SERIALIZED_NAME_START_DATE)
  private OffsetDateTime startDate;

  public static final String SERIALIZED_NAME_END_DATE = "endDate";
  @SerializedName(SERIALIZED_NAME_END_DATE)
  private OffsetDateTime endDate;

  public static final String SERIALIZED_NAME_INVOICE_DATE = "invoiceDate";
  @SerializedName(SERIALIZED_NAME_INVOICE_DATE)
  private OffsetDateTime invoiceDate;

  public static final String SERIALIZED_NAME_LAST_TRANSACTION_DATE = "lastTransactionDate";
  @SerializedName(SERIALIZED_NAME_LAST_TRANSACTION_DATE)
  private OffsetDateTime lastTransactionDate;

  /**
   * Gets or Sets referenceDate
   */
  @JsonAdapter(ReferenceDateEnum.Adapter.class)
  public enum ReferenceDateEnum {
    TODAY("TODAY"),
    
    NEXT_INVOICE_DATE("NEXT_INVOICE_DATE"),
    
    LAST_TRANSACTION_DATE("LAST_TRANSACTION_DATE"),
    
    END_DATE("END_DATE");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_REFERENCE_DATE = "referenceDate";
  @SerializedName(SERIALIZED_NAME_REFERENCE_DATE)
  private ReferenceDateEnum referenceDate;

  public static final String SERIALIZED_NAME_REJECTION_REASON = "rejectionReason";
  @SerializedName(SERIALIZED_NAME_REJECTION_REASON)
  private String rejectionReason;

  public static final String SERIALIZED_NAME_CURRENCY_CODE = "currencyCode";
  @SerializedName(SERIALIZED_NAME_CURRENCY_CODE)
  private String currencyCode;

  public static final String SERIALIZED_NAME_COUNTRY_CODE = "countryCode";
  @SerializedName(SERIALIZED_NAME_COUNTRY_CODE)
  private String countryCode;

  public static final String SERIALIZED_NAME_LANGUAGE_CODE = "languageCode";
  @SerializedName(SERIALIZED_NAME_LANGUAGE_CODE)
  private String languageCode;

  public static final String SERIALIZED_NAME_SELECTED_BILLING_ACCOUNTS = "selectedBillingAccounts";
  @SerializedName(SERIALIZED_NAME_SELECTED_BILLING_ACCOUNTS)
  private String selectedBillingAccounts;

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

  public static final String SERIALIZED_NAME_INVOICE_NUMBER = "invoiceNumber";
  @SerializedName(SERIALIZED_NAME_INVOICE_NUMBER)
  private Integer invoiceNumber;


  public BillingRunDto processDate(OffsetDateTime processDate) {
    
    this.processDate = processDate;
    return this;
  }

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

  public OffsetDateTime getProcessDate() {
    return processDate;
  }



  public void setProcessDate(OffsetDateTime processDate) {
    this.processDate = processDate;
  }


  public BillingRunDto 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 BillingRunDto 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 BillingRunDto billingCycle(BillingCycleDto billingCycle) {
    
    this.billingCycle = billingCycle;
    return this;
  }

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

  public BillingCycleDto getBillingCycle() {
    return billingCycle;
  }



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


  public BillingRunDto billingAccountNumber(Integer billingAccountNumber) {
    
    this.billingAccountNumber = billingAccountNumber;
    return this;
  }

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

  public Integer getBillingAccountNumber() {
    return billingAccountNumber;
  }



  public void setBillingAccountNumber(Integer billingAccountNumber) {
    this.billingAccountNumber = billingAccountNumber;
  }


  public BillingRunDto billableBillingAcountNumber(Integer billableBillingAcountNumber) {
    
    this.billableBillingAcountNumber = billableBillingAcountNumber;
    return this;
  }

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

  public Integer getBillableBillingAcountNumber() {
    return billableBillingAcountNumber;
  }



  public void setBillableBillingAcountNumber(Integer billableBillingAcountNumber) {
    this.billableBillingAcountNumber = billableBillingAcountNumber;
  }


  public BillingRunDto producibleInvoiceNumber(Integer producibleInvoiceNumber) {
    
    this.producibleInvoiceNumber = producibleInvoiceNumber;
    return this;
  }

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

  public Integer getProducibleInvoiceNumber() {
    return producibleInvoiceNumber;
  }



  public void setProducibleInvoiceNumber(Integer producibleInvoiceNumber) {
    this.producibleInvoiceNumber = producibleInvoiceNumber;
  }


  public BillingRunDto producibleAmountWithoutTax(BigDecimal producibleAmountWithoutTax) {
    
    this.producibleAmountWithoutTax = producibleAmountWithoutTax;
    return this;
  }

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

  public BigDecimal getProducibleAmountWithoutTax() {
    return producibleAmountWithoutTax;
  }



  public void setProducibleAmountWithoutTax(BigDecimal producibleAmountWithoutTax) {
    this.producibleAmountWithoutTax = producibleAmountWithoutTax;
  }


  public BillingRunDto producibleAmountTax(BigDecimal producibleAmountTax) {
    
    this.producibleAmountTax = producibleAmountTax;
    return this;
  }

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

  public BigDecimal getProducibleAmountTax() {
    return producibleAmountTax;
  }



  public void setProducibleAmountTax(BigDecimal producibleAmountTax) {
    this.producibleAmountTax = producibleAmountTax;
  }


  public BillingRunDto producibleAmountWithTax(BigDecimal producibleAmountWithTax) {
    
    this.producibleAmountWithTax = producibleAmountWithTax;
    return this;
  }

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

  public BigDecimal getProducibleAmountWithTax() {
    return producibleAmountWithTax;
  }



  public void setProducibleAmountWithTax(BigDecimal producibleAmountWithTax) {
    this.producibleAmountWithTax = producibleAmountWithTax;
  }


  public BillingRunDto prAmountWithoutTax(BigDecimal prAmountWithoutTax) {
    
    this.prAmountWithoutTax = prAmountWithoutTax;
    return this;
  }

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

  public BigDecimal getPrAmountWithoutTax() {
    return prAmountWithoutTax;
  }



  public void setPrAmountWithoutTax(BigDecimal prAmountWithoutTax) {
    this.prAmountWithoutTax = prAmountWithoutTax;
  }


  public BillingRunDto prAmountWithTax(BigDecimal prAmountWithTax) {
    
    this.prAmountWithTax = prAmountWithTax;
    return this;
  }

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

  public BigDecimal getPrAmountWithTax() {
    return prAmountWithTax;
  }



  public void setPrAmountWithTax(BigDecimal prAmountWithTax) {
    this.prAmountWithTax = prAmountWithTax;
  }


  public BillingRunDto prAmountTax(BigDecimal prAmountTax) {
    
    this.prAmountTax = prAmountTax;
    return this;
  }

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

  public BigDecimal getPrAmountTax() {
    return prAmountTax;
  }



  public void setPrAmountTax(BigDecimal prAmountTax) {
    this.prAmountTax = prAmountTax;
  }


  public BillingRunDto processType(ProcessTypeEnum processType) {
    
    this.processType = processType;
    return this;
  }

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

  public ProcessTypeEnum getProcessType() {
    return processType;
  }



  public void setProcessType(ProcessTypeEnum processType) {
    this.processType = processType;
  }


  public BillingRunDto startDate(OffsetDateTime startDate) {
    
    this.startDate = startDate;
    return this;
  }

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

  public OffsetDateTime getStartDate() {
    return startDate;
  }



  public void setStartDate(OffsetDateTime startDate) {
    this.startDate = startDate;
  }


  public BillingRunDto endDate(OffsetDateTime endDate) {
    
    this.endDate = endDate;
    return this;
  }

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

  public OffsetDateTime getEndDate() {
    return endDate;
  }



  public void setEndDate(OffsetDateTime endDate) {
    this.endDate = endDate;
  }


  public BillingRunDto invoiceDate(OffsetDateTime invoiceDate) {
    
    this.invoiceDate = invoiceDate;
    return this;
  }

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

  public OffsetDateTime getInvoiceDate() {
    return invoiceDate;
  }



  public void setInvoiceDate(OffsetDateTime invoiceDate) {
    this.invoiceDate = invoiceDate;
  }


  public BillingRunDto lastTransactionDate(OffsetDateTime lastTransactionDate) {
    
    this.lastTransactionDate = lastTransactionDate;
    return this;
  }

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

  public OffsetDateTime getLastTransactionDate() {
    return lastTransactionDate;
  }



  public void setLastTransactionDate(OffsetDateTime lastTransactionDate) {
    this.lastTransactionDate = lastTransactionDate;
  }


  public BillingRunDto referenceDate(ReferenceDateEnum referenceDate) {
    
    this.referenceDate = referenceDate;
    return this;
  }

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

  public ReferenceDateEnum getReferenceDate() {
    return referenceDate;
  }



  public void setReferenceDate(ReferenceDateEnum referenceDate) {
    this.referenceDate = referenceDate;
  }


  public BillingRunDto rejectionReason(String rejectionReason) {
    
    this.rejectionReason = rejectionReason;
    return this;
  }

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

  public String getRejectionReason() {
    return rejectionReason;
  }



  public void setRejectionReason(String rejectionReason) {
    this.rejectionReason = rejectionReason;
  }


  public BillingRunDto currencyCode(String currencyCode) {
    
    this.currencyCode = currencyCode;
    return this;
  }

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

  public String getCurrencyCode() {
    return currencyCode;
  }



  public void setCurrencyCode(String currencyCode) {
    this.currencyCode = currencyCode;
  }


  public BillingRunDto countryCode(String countryCode) {
    
    this.countryCode = countryCode;
    return this;
  }

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

  public String getCountryCode() {
    return countryCode;
  }



  public void setCountryCode(String countryCode) {
    this.countryCode = countryCode;
  }


  public BillingRunDto languageCode(String languageCode) {
    
    this.languageCode = languageCode;
    return this;
  }

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

  public String getLanguageCode() {
    return languageCode;
  }



  public void setLanguageCode(String languageCode) {
    this.languageCode = languageCode;
  }


  public BillingRunDto selectedBillingAccounts(String selectedBillingAccounts) {
    
    this.selectedBillingAccounts = selectedBillingAccounts;
    return this;
  }

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

  public String getSelectedBillingAccounts() {
    return selectedBillingAccounts;
  }



  public void setSelectedBillingAccounts(String selectedBillingAccounts) {
    this.selectedBillingAccounts = selectedBillingAccounts;
  }


  public BillingRunDto 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 BillingRunDto invoiceNumber(Integer invoiceNumber) {
    
    this.invoiceNumber = invoiceNumber;
    return this;
  }

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

  public Integer getInvoiceNumber() {
    return invoiceNumber;
  }



  public void setInvoiceNumber(Integer invoiceNumber) {
    this.invoiceNumber = invoiceNumber;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    BillingRunDto billingRunDto = (BillingRunDto) o;
    return Objects.equals(this.processDate, billingRunDto.processDate) &&
        Objects.equals(this.status, billingRunDto.status) &&
        Objects.equals(this.statusDate, billingRunDto.statusDate) &&
        Objects.equals(this.billingCycle, billingRunDto.billingCycle) &&
        Objects.equals(this.billingAccountNumber, billingRunDto.billingAccountNumber) &&
        Objects.equals(this.billableBillingAcountNumber, billingRunDto.billableBillingAcountNumber) &&
        Objects.equals(this.producibleInvoiceNumber, billingRunDto.producibleInvoiceNumber) &&
        Objects.equals(this.producibleAmountWithoutTax, billingRunDto.producibleAmountWithoutTax) &&
        Objects.equals(this.producibleAmountTax, billingRunDto.producibleAmountTax) &&
        Objects.equals(this.producibleAmountWithTax, billingRunDto.producibleAmountWithTax) &&
        Objects.equals(this.prAmountWithoutTax, billingRunDto.prAmountWithoutTax) &&
        Objects.equals(this.prAmountWithTax, billingRunDto.prAmountWithTax) &&
        Objects.equals(this.prAmountTax, billingRunDto.prAmountTax) &&
        Objects.equals(this.processType, billingRunDto.processType) &&
        Objects.equals(this.startDate, billingRunDto.startDate) &&
        Objects.equals(this.endDate, billingRunDto.endDate) &&
        Objects.equals(this.invoiceDate, billingRunDto.invoiceDate) &&
        Objects.equals(this.lastTransactionDate, billingRunDto.lastTransactionDate) &&
        Objects.equals(this.referenceDate, billingRunDto.referenceDate) &&
        Objects.equals(this.rejectionReason, billingRunDto.rejectionReason) &&
        Objects.equals(this.currencyCode, billingRunDto.currencyCode) &&
        Objects.equals(this.countryCode, billingRunDto.countryCode) &&
        Objects.equals(this.languageCode, billingRunDto.languageCode) &&
        Objects.equals(this.selectedBillingAccounts, billingRunDto.selectedBillingAccounts) &&
        Objects.equals(this.customFields, billingRunDto.customFields) &&
        Objects.equals(this.invoiceNumber, billingRunDto.invoiceNumber);
  }

  @Override
  public int hashCode() {
    return Objects.hash(processDate, status, statusDate, billingCycle, billingAccountNumber, billableBillingAcountNumber, producibleInvoiceNumber, producibleAmountWithoutTax, producibleAmountTax, producibleAmountWithTax, prAmountWithoutTax, prAmountWithTax, prAmountTax, processType, startDate, endDate, invoiceDate, lastTransactionDate, referenceDate, rejectionReason, currencyCode, countryCode, languageCode, selectedBillingAccounts, customFields, invoiceNumber);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class BillingRunDto {\n");
    sb.append("    processDate: ").append(toIndentedString(processDate)).append("\n");
    sb.append("    status: ").append(toIndentedString(status)).append("\n");
    sb.append("    statusDate: ").append(toIndentedString(statusDate)).append("\n");
    sb.append("    billingCycle: ").append(toIndentedString(billingCycle)).append("\n");
    sb.append("    billingAccountNumber: ").append(toIndentedString(billingAccountNumber)).append("\n");
    sb.append("    billableBillingAcountNumber: ").append(toIndentedString(billableBillingAcountNumber)).append("\n");
    sb.append("    producibleInvoiceNumber: ").append(toIndentedString(producibleInvoiceNumber)).append("\n");
    sb.append("    producibleAmountWithoutTax: ").append(toIndentedString(producibleAmountWithoutTax)).append("\n");
    sb.append("    producibleAmountTax: ").append(toIndentedString(producibleAmountTax)).append("\n");
    sb.append("    producibleAmountWithTax: ").append(toIndentedString(producibleAmountWithTax)).append("\n");
    sb.append("    prAmountWithoutTax: ").append(toIndentedString(prAmountWithoutTax)).append("\n");
    sb.append("    prAmountWithTax: ").append(toIndentedString(prAmountWithTax)).append("\n");
    sb.append("    prAmountTax: ").append(toIndentedString(prAmountTax)).append("\n");
    sb.append("    processType: ").append(toIndentedString(processType)).append("\n");
    sb.append("    startDate: ").append(toIndentedString(startDate)).append("\n");
    sb.append("    endDate: ").append(toIndentedString(endDate)).append("\n");
    sb.append("    invoiceDate: ").append(toIndentedString(invoiceDate)).append("\n");
    sb.append("    lastTransactionDate: ").append(toIndentedString(lastTransactionDate)).append("\n");
    sb.append("    referenceDate: ").append(toIndentedString(referenceDate)).append("\n");
    sb.append("    rejectionReason: ").append(toIndentedString(rejectionReason)).append("\n");
    sb.append("    currencyCode: ").append(toIndentedString(currencyCode)).append("\n");
    sb.append("    countryCode: ").append(toIndentedString(countryCode)).append("\n");
    sb.append("    languageCode: ").append(toIndentedString(languageCode)).append("\n");
    sb.append("    selectedBillingAccounts: ").append(toIndentedString(selectedBillingAccounts)).append("\n");
    sb.append("    customFields: ").append(toIndentedString(customFields)).append("\n");
    sb.append("    invoiceNumber: ").append(toIndentedString(invoiceNumber)).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    ");
  }

}

