/*
 * 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.HashMap;
import java.util.List;
import java.util.Map;
import org.openapitools.client.model.AccountingCode;
import org.openapitools.client.model.Auditable;
import org.openapitools.client.model.AuditableFieldHistory;
import org.openapitools.client.model.CustomFieldValues;
import org.openapitools.client.model.GeneralLedger;
import org.openapitools.client.model.ICustomFieldEntity;
import org.openapitools.client.model.PaymentVentilation;
import org.threeten.bp.OffsetDateTime;

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

  public static final String SERIALIZED_NAME_VERSION = "version";
  @SerializedName(SERIALIZED_NAME_VERSION)
  private Integer version;

  public static final String SERIALIZED_NAME_AUDITABLE = "auditable";
  @SerializedName(SERIALIZED_NAME_AUDITABLE)
  private Auditable auditable;

  public static final String SERIALIZED_NAME_HISTORIZED = "historized";
  @SerializedName(SERIALIZED_NAME_HISTORIZED)
  private Boolean historized;

  public static final String SERIALIZED_NAME_NOTIFIED = "notified";
  @SerializedName(SERIALIZED_NAME_NOTIFIED)
  private Boolean notified;

  public static final String SERIALIZED_NAME_AUDITABLE_FIELDS = "auditableFields";
  @SerializedName(SERIALIZED_NAME_AUDITABLE_FIELDS)
  private List<AuditableFieldHistory> auditableFields = null;

  public static final String SERIALIZED_NAME_DUE_DATE = "dueDate";
  @SerializedName(SERIALIZED_NAME_DUE_DATE)
  private OffsetDateTime dueDate;

  public static final String SERIALIZED_NAME_TRANSACTION_DATE = "transactionDate";
  @SerializedName(SERIALIZED_NAME_TRANSACTION_DATE)
  private OffsetDateTime transactionDate;

  /**
   * Gets or Sets transactionCategory
   */
  @JsonAdapter(TransactionCategoryEnum.Adapter.class)
  public enum TransactionCategoryEnum {
    DEBIT("DEBIT"),
    
    CREDIT("CREDIT");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_TRANSACTION_CATEGORY = "transactionCategory";
  @SerializedName(SERIALIZED_NAME_TRANSACTION_CATEGORY)
  private TransactionCategoryEnum transactionCategory;

  public static final String SERIALIZED_NAME_TYPE = "type";
  @SerializedName(SERIALIZED_NAME_TYPE)
  private String type;

  public static final String SERIALIZED_NAME_REFERENCE = "reference";
  @SerializedName(SERIALIZED_NAME_REFERENCE)
  private String reference;

  public static final String SERIALIZED_NAME_ACCOUNTING_CODE = "accountingCode";
  @SerializedName(SERIALIZED_NAME_ACCOUNTING_CODE)
  private AccountingCode accountingCode;

  public static final String SERIALIZED_NAME_AMOUNT = "amount";
  @SerializedName(SERIALIZED_NAME_AMOUNT)
  private BigDecimal amount;

  public static final String SERIALIZED_NAME_AMOUNT_WITHOUT_TAX = "amountWithoutTax";
  @SerializedName(SERIALIZED_NAME_AMOUNT_WITHOUT_TAX)
  private BigDecimal amountWithoutTax;

  public static final String SERIALIZED_NAME_TAX_AMOUNT = "taxAmount";
  @SerializedName(SERIALIZED_NAME_TAX_AMOUNT)
  private BigDecimal taxAmount;

  public static final String SERIALIZED_NAME_MATCHING_AMOUNT = "matchingAmount";
  @SerializedName(SERIALIZED_NAME_MATCHING_AMOUNT)
  private BigDecimal matchingAmount;

  public static final String SERIALIZED_NAME_UN_MATCHING_AMOUNT = "unMatchingAmount";
  @SerializedName(SERIALIZED_NAME_UN_MATCHING_AMOUNT)
  private BigDecimal unMatchingAmount;

  public static final String SERIALIZED_NAME_GENERAL_LEDGER = "generalLedger";
  @SerializedName(SERIALIZED_NAME_GENERAL_LEDGER)
  private GeneralLedger generalLedger;

  /**
   * Gets or Sets matchingStatus
   */
  @JsonAdapter(MatchingStatusEnum.Adapter.class)
  public enum MatchingStatusEnum {
    O("O"),
    
    L("L"),
    
    P("P"),
    
    C("C"),
    
    I("I"),
    
    R("R");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_MATCHING_STATUS = "matchingStatus";
  @SerializedName(SERIALIZED_NAME_MATCHING_STATUS)
  private MatchingStatusEnum matchingStatus;

  public static final String SERIALIZED_NAME_OCC_CODE = "occCode";
  @SerializedName(SERIALIZED_NAME_OCC_CODE)
  private String occCode;

  public static final String SERIALIZED_NAME_OCC_DESCRIPTION = "occDescription";
  @SerializedName(SERIALIZED_NAME_OCC_DESCRIPTION)
  private String occDescription;

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

  public static final String SERIALIZED_NAME_UUID = "uuid";
  @SerializedName(SERIALIZED_NAME_UUID)
  private String uuid;

  public static final String SERIALIZED_NAME_CF_VALUES = "cfValues";
  @SerializedName(SERIALIZED_NAME_CF_VALUES)
  private CustomFieldValues cfValues;

  public static final String SERIALIZED_NAME_CF_ACCUMULATED_VALUES = "cfAccumulatedValues";
  @SerializedName(SERIALIZED_NAME_CF_ACCUMULATED_VALUES)
  private CustomFieldValues cfAccumulatedValues;

  public static final String SERIALIZED_NAME_BANK_LOT = "bankLot";
  @SerializedName(SERIALIZED_NAME_BANK_LOT)
  private String bankLot;

  public static final String SERIALIZED_NAME_BANK_REFERENCE = "bankReference";
  @SerializedName(SERIALIZED_NAME_BANK_REFERENCE)
  private String bankReference;

  public static final String SERIALIZED_NAME_DEPOSIT_DATE = "depositDate";
  @SerializedName(SERIALIZED_NAME_DEPOSIT_DATE)
  private OffsetDateTime depositDate;

  public static final String SERIALIZED_NAME_BANK_COLLECTION_DATE = "bankCollectionDate";
  @SerializedName(SERIALIZED_NAME_BANK_COLLECTION_DATE)
  private OffsetDateTime bankCollectionDate;

  /**
   * 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_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_PAYMENT_INFO = "paymentInfo";
  @SerializedName(SERIALIZED_NAME_PAYMENT_INFO)
  private String paymentInfo;

  public static final String SERIALIZED_NAME_PAYMENT_INFO1 = "paymentInfo1";
  @SerializedName(SERIALIZED_NAME_PAYMENT_INFO1)
  private String paymentInfo1;

  public static final String SERIALIZED_NAME_PAYMENT_INFO2 = "paymentInfo2";
  @SerializedName(SERIALIZED_NAME_PAYMENT_INFO2)
  private String paymentInfo2;

  public static final String SERIALIZED_NAME_PAYMENT_INFO3 = "paymentInfo3";
  @SerializedName(SERIALIZED_NAME_PAYMENT_INFO3)
  private String paymentInfo3;

  public static final String SERIALIZED_NAME_PAYMENT_INFO4 = "paymentInfo4";
  @SerializedName(SERIALIZED_NAME_PAYMENT_INFO4)
  private String paymentInfo4;

  public static final String SERIALIZED_NAME_PAYMENT_INFO5 = "paymentInfo5";
  @SerializedName(SERIALIZED_NAME_PAYMENT_INFO5)
  private String paymentInfo5;

  public static final String SERIALIZED_NAME_PAYMENT_INFO6 = "paymentInfo6";
  @SerializedName(SERIALIZED_NAME_PAYMENT_INFO6)
  private String paymentInfo6;

  public static final String SERIALIZED_NAME_PAYMENT_INFO7 = "paymentInfo7";
  @SerializedName(SERIALIZED_NAME_PAYMENT_INFO7)
  private String paymentInfo7;

  public static final String SERIALIZED_NAME_BILLING_ACCOUNT_NAME = "billingAccountName";
  @SerializedName(SERIALIZED_NAME_BILLING_ACCOUNT_NAME)
  private String billingAccountName;

  public static final String SERIALIZED_NAME_PAYMENT_VENTILATION = "paymentVentilation";
  @SerializedName(SERIALIZED_NAME_PAYMENT_VENTILATION)
  private PaymentVentilation paymentVentilation;

  public static final String SERIALIZED_NAME_PAYMENT_VENTILATIONS = "paymentVentilations";
  @SerializedName(SERIALIZED_NAME_PAYMENT_VENTILATIONS)
  private List<PaymentVentilation> paymentVentilations = null;

  public static final String SERIALIZED_NAME_PARENT_C_F_ENTITIES = "parentCFEntities";
  @SerializedName(SERIALIZED_NAME_PARENT_C_F_ENTITIES)
  private List<ICustomFieldEntity> parentCFEntities = null;

  public static final String SERIALIZED_NAME_CF_VALUES_NULL_SAFE = "cfValuesNullSafe";
  @SerializedName(SERIALIZED_NAME_CF_VALUES_NULL_SAFE)
  private CustomFieldValues cfValuesNullSafe;

  public static final String SERIALIZED_NAME_CF_VALUES_AS_VALUES = "cfValuesAsValues";
  @SerializedName(SERIALIZED_NAME_CF_VALUES_AS_VALUES)
  private Map<String, Object> cfValuesAsValues = null;

  public static final String SERIALIZED_NAME_CF_ACCUMULATED_VALUES_NULL_SAFE = "cfAccumulatedValuesNullSafe";
  @SerializedName(SERIALIZED_NAME_CF_ACCUMULATED_VALUES_NULL_SAFE)
  private CustomFieldValues cfAccumulatedValuesNullSafe;

  public static final String SERIALIZED_NAME_TRANSIENT = "transient";
  @SerializedName(SERIALIZED_NAME_TRANSIENT)
  private Boolean _transient;


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

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

  public Integer getVersion() {
    return version;
  }



  public void setVersion(Integer version) {
    this.version = version;
  }


  public OtherTransaction auditable(Auditable auditable) {
    
    this.auditable = auditable;
    return this;
  }

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

  public Auditable getAuditable() {
    return auditable;
  }



  public void setAuditable(Auditable auditable) {
    this.auditable = auditable;
  }


  public OtherTransaction historized(Boolean historized) {
    
    this.historized = historized;
    return this;
  }

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

  public Boolean getHistorized() {
    return historized;
  }



  public void setHistorized(Boolean historized) {
    this.historized = historized;
  }


  public OtherTransaction notified(Boolean notified) {
    
    this.notified = notified;
    return this;
  }

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

  public Boolean getNotified() {
    return notified;
  }



  public void setNotified(Boolean notified) {
    this.notified = notified;
  }


  public OtherTransaction auditableFields(List<AuditableFieldHistory> auditableFields) {
    
    this.auditableFields = auditableFields;
    return this;
  }

  public OtherTransaction addAuditableFieldsItem(AuditableFieldHistory auditableFieldsItem) {
    if (this.auditableFields == null) {
      this.auditableFields = new ArrayList<AuditableFieldHistory>();
    }
    this.auditableFields.add(auditableFieldsItem);
    return this;
  }

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

  public List<AuditableFieldHistory> getAuditableFields() {
    return auditableFields;
  }



  public void setAuditableFields(List<AuditableFieldHistory> auditableFields) {
    this.auditableFields = auditableFields;
  }


  public OtherTransaction dueDate(OffsetDateTime dueDate) {
    
    this.dueDate = dueDate;
    return this;
  }

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

  public OffsetDateTime getDueDate() {
    return dueDate;
  }



  public void setDueDate(OffsetDateTime dueDate) {
    this.dueDate = dueDate;
  }


  public OtherTransaction transactionDate(OffsetDateTime transactionDate) {
    
    this.transactionDate = transactionDate;
    return this;
  }

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

  public OffsetDateTime getTransactionDate() {
    return transactionDate;
  }



  public void setTransactionDate(OffsetDateTime transactionDate) {
    this.transactionDate = transactionDate;
  }


  public OtherTransaction transactionCategory(TransactionCategoryEnum transactionCategory) {
    
    this.transactionCategory = transactionCategory;
    return this;
  }

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

  public TransactionCategoryEnum getTransactionCategory() {
    return transactionCategory;
  }



  public void setTransactionCategory(TransactionCategoryEnum transactionCategory) {
    this.transactionCategory = transactionCategory;
  }


  public OtherTransaction type(String type) {
    
    this.type = type;
    return this;
  }

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

  public String getType() {
    return type;
  }



  public void setType(String type) {
    this.type = type;
  }


  public OtherTransaction reference(String reference) {
    
    this.reference = reference;
    return this;
  }

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

  public String getReference() {
    return reference;
  }



  public void setReference(String reference) {
    this.reference = reference;
  }


  public OtherTransaction accountingCode(AccountingCode accountingCode) {
    
    this.accountingCode = accountingCode;
    return this;
  }

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

  public AccountingCode getAccountingCode() {
    return accountingCode;
  }



  public void setAccountingCode(AccountingCode accountingCode) {
    this.accountingCode = accountingCode;
  }


  public OtherTransaction amount(BigDecimal amount) {
    
    this.amount = amount;
    return this;
  }

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

  public BigDecimal getAmount() {
    return amount;
  }



  public void setAmount(BigDecimal amount) {
    this.amount = amount;
  }


  public OtherTransaction amountWithoutTax(BigDecimal amountWithoutTax) {
    
    this.amountWithoutTax = amountWithoutTax;
    return this;
  }

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

  public BigDecimal getAmountWithoutTax() {
    return amountWithoutTax;
  }



  public void setAmountWithoutTax(BigDecimal amountWithoutTax) {
    this.amountWithoutTax = amountWithoutTax;
  }


  public OtherTransaction taxAmount(BigDecimal taxAmount) {
    
    this.taxAmount = taxAmount;
    return this;
  }

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

  public BigDecimal getTaxAmount() {
    return taxAmount;
  }



  public void setTaxAmount(BigDecimal taxAmount) {
    this.taxAmount = taxAmount;
  }


  public OtherTransaction matchingAmount(BigDecimal matchingAmount) {
    
    this.matchingAmount = matchingAmount;
    return this;
  }

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

  public BigDecimal getMatchingAmount() {
    return matchingAmount;
  }



  public void setMatchingAmount(BigDecimal matchingAmount) {
    this.matchingAmount = matchingAmount;
  }


  public OtherTransaction unMatchingAmount(BigDecimal unMatchingAmount) {
    
    this.unMatchingAmount = unMatchingAmount;
    return this;
  }

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

  public BigDecimal getUnMatchingAmount() {
    return unMatchingAmount;
  }



  public void setUnMatchingAmount(BigDecimal unMatchingAmount) {
    this.unMatchingAmount = unMatchingAmount;
  }


  public OtherTransaction generalLedger(GeneralLedger generalLedger) {
    
    this.generalLedger = generalLedger;
    return this;
  }

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

  public GeneralLedger getGeneralLedger() {
    return generalLedger;
  }



  public void setGeneralLedger(GeneralLedger generalLedger) {
    this.generalLedger = generalLedger;
  }


  public OtherTransaction matchingStatus(MatchingStatusEnum matchingStatus) {
    
    this.matchingStatus = matchingStatus;
    return this;
  }

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

  public MatchingStatusEnum getMatchingStatus() {
    return matchingStatus;
  }



  public void setMatchingStatus(MatchingStatusEnum matchingStatus) {
    this.matchingStatus = matchingStatus;
  }


  public OtherTransaction occCode(String occCode) {
    
    this.occCode = occCode;
    return this;
  }

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

  public String getOccCode() {
    return occCode;
  }



  public void setOccCode(String occCode) {
    this.occCode = occCode;
  }


  public OtherTransaction occDescription(String occDescription) {
    
    this.occDescription = occDescription;
    return this;
  }

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

  public String getOccDescription() {
    return occDescription;
  }



  public void setOccDescription(String occDescription) {
    this.occDescription = occDescription;
  }


  public OtherTransaction orderNumber(String orderNumber) {
    
    this.orderNumber = orderNumber;
    return this;
  }

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

  public String getOrderNumber() {
    return orderNumber;
  }



  public void setOrderNumber(String orderNumber) {
    this.orderNumber = orderNumber;
  }


  public OtherTransaction uuid(String uuid) {
    
    this.uuid = uuid;
    return this;
  }

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

  public String getUuid() {
    return uuid;
  }



  public void setUuid(String uuid) {
    this.uuid = uuid;
  }


  public OtherTransaction cfValues(CustomFieldValues cfValues) {
    
    this.cfValues = cfValues;
    return this;
  }

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

  public CustomFieldValues getCfValues() {
    return cfValues;
  }



  public void setCfValues(CustomFieldValues cfValues) {
    this.cfValues = cfValues;
  }


  public OtherTransaction cfAccumulatedValues(CustomFieldValues cfAccumulatedValues) {
    
    this.cfAccumulatedValues = cfAccumulatedValues;
    return this;
  }

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

  public CustomFieldValues getCfAccumulatedValues() {
    return cfAccumulatedValues;
  }



  public void setCfAccumulatedValues(CustomFieldValues cfAccumulatedValues) {
    this.cfAccumulatedValues = cfAccumulatedValues;
  }


  public OtherTransaction bankLot(String bankLot) {
    
    this.bankLot = bankLot;
    return this;
  }

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

  public String getBankLot() {
    return bankLot;
  }



  public void setBankLot(String bankLot) {
    this.bankLot = bankLot;
  }


  public OtherTransaction bankReference(String bankReference) {
    
    this.bankReference = bankReference;
    return this;
  }

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

  public String getBankReference() {
    return bankReference;
  }



  public void setBankReference(String bankReference) {
    this.bankReference = bankReference;
  }


  public OtherTransaction depositDate(OffsetDateTime depositDate) {
    
    this.depositDate = depositDate;
    return this;
  }

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

  public OffsetDateTime getDepositDate() {
    return depositDate;
  }



  public void setDepositDate(OffsetDateTime depositDate) {
    this.depositDate = depositDate;
  }


  public OtherTransaction bankCollectionDate(OffsetDateTime bankCollectionDate) {
    
    this.bankCollectionDate = bankCollectionDate;
    return this;
  }

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

  public OffsetDateTime getBankCollectionDate() {
    return bankCollectionDate;
  }



  public void setBankCollectionDate(OffsetDateTime bankCollectionDate) {
    this.bankCollectionDate = bankCollectionDate;
  }


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

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

  public String getPaymentInfo() {
    return paymentInfo;
  }



  public void setPaymentInfo(String paymentInfo) {
    this.paymentInfo = paymentInfo;
  }


  public OtherTransaction paymentInfo1(String paymentInfo1) {
    
    this.paymentInfo1 = paymentInfo1;
    return this;
  }

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

  public String getPaymentInfo1() {
    return paymentInfo1;
  }



  public void setPaymentInfo1(String paymentInfo1) {
    this.paymentInfo1 = paymentInfo1;
  }


  public OtherTransaction paymentInfo2(String paymentInfo2) {
    
    this.paymentInfo2 = paymentInfo2;
    return this;
  }

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

  public String getPaymentInfo2() {
    return paymentInfo2;
  }



  public void setPaymentInfo2(String paymentInfo2) {
    this.paymentInfo2 = paymentInfo2;
  }


  public OtherTransaction paymentInfo3(String paymentInfo3) {
    
    this.paymentInfo3 = paymentInfo3;
    return this;
  }

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

  public String getPaymentInfo3() {
    return paymentInfo3;
  }



  public void setPaymentInfo3(String paymentInfo3) {
    this.paymentInfo3 = paymentInfo3;
  }


  public OtherTransaction paymentInfo4(String paymentInfo4) {
    
    this.paymentInfo4 = paymentInfo4;
    return this;
  }

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

  public String getPaymentInfo4() {
    return paymentInfo4;
  }



  public void setPaymentInfo4(String paymentInfo4) {
    this.paymentInfo4 = paymentInfo4;
  }


  public OtherTransaction paymentInfo5(String paymentInfo5) {
    
    this.paymentInfo5 = paymentInfo5;
    return this;
  }

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

  public String getPaymentInfo5() {
    return paymentInfo5;
  }



  public void setPaymentInfo5(String paymentInfo5) {
    this.paymentInfo5 = paymentInfo5;
  }


  public OtherTransaction paymentInfo6(String paymentInfo6) {
    
    this.paymentInfo6 = paymentInfo6;
    return this;
  }

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

  public String getPaymentInfo6() {
    return paymentInfo6;
  }



  public void setPaymentInfo6(String paymentInfo6) {
    this.paymentInfo6 = paymentInfo6;
  }


  public OtherTransaction paymentInfo7(String paymentInfo7) {
    
    this.paymentInfo7 = paymentInfo7;
    return this;
  }

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

  public String getPaymentInfo7() {
    return paymentInfo7;
  }



  public void setPaymentInfo7(String paymentInfo7) {
    this.paymentInfo7 = paymentInfo7;
  }


  public OtherTransaction billingAccountName(String billingAccountName) {
    
    this.billingAccountName = billingAccountName;
    return this;
  }

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

  public String getBillingAccountName() {
    return billingAccountName;
  }



  public void setBillingAccountName(String billingAccountName) {
    this.billingAccountName = billingAccountName;
  }


  public OtherTransaction paymentVentilation(PaymentVentilation paymentVentilation) {
    
    this.paymentVentilation = paymentVentilation;
    return this;
  }

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

  public PaymentVentilation getPaymentVentilation() {
    return paymentVentilation;
  }



  public void setPaymentVentilation(PaymentVentilation paymentVentilation) {
    this.paymentVentilation = paymentVentilation;
  }


  public OtherTransaction paymentVentilations(List<PaymentVentilation> paymentVentilations) {
    
    this.paymentVentilations = paymentVentilations;
    return this;
  }

  public OtherTransaction addPaymentVentilationsItem(PaymentVentilation paymentVentilationsItem) {
    if (this.paymentVentilations == null) {
      this.paymentVentilations = new ArrayList<PaymentVentilation>();
    }
    this.paymentVentilations.add(paymentVentilationsItem);
    return this;
  }

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

  public List<PaymentVentilation> getPaymentVentilations() {
    return paymentVentilations;
  }



  public void setPaymentVentilations(List<PaymentVentilation> paymentVentilations) {
    this.paymentVentilations = paymentVentilations;
  }


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

  public OtherTransaction addParentCFEntitiesItem(ICustomFieldEntity parentCFEntitiesItem) {
    if (this.parentCFEntities == null) {
      this.parentCFEntities = new ArrayList<ICustomFieldEntity>();
    }
    this.parentCFEntities.add(parentCFEntitiesItem);
    return this;
  }

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

  public List<ICustomFieldEntity> getParentCFEntities() {
    return parentCFEntities;
  }



  public void setParentCFEntities(List<ICustomFieldEntity> parentCFEntities) {
    this.parentCFEntities = parentCFEntities;
  }


  public OtherTransaction cfValuesNullSafe(CustomFieldValues cfValuesNullSafe) {
    
    this.cfValuesNullSafe = cfValuesNullSafe;
    return this;
  }

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

  public CustomFieldValues getCfValuesNullSafe() {
    return cfValuesNullSafe;
  }



  public void setCfValuesNullSafe(CustomFieldValues cfValuesNullSafe) {
    this.cfValuesNullSafe = cfValuesNullSafe;
  }


  public OtherTransaction cfValuesAsValues(Map<String, Object> cfValuesAsValues) {
    
    this.cfValuesAsValues = cfValuesAsValues;
    return this;
  }

  public OtherTransaction putCfValuesAsValuesItem(String key, Object cfValuesAsValuesItem) {
    if (this.cfValuesAsValues == null) {
      this.cfValuesAsValues = new HashMap<String, Object>();
    }
    this.cfValuesAsValues.put(key, cfValuesAsValuesItem);
    return this;
  }

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

  public Map<String, Object> getCfValuesAsValues() {
    return cfValuesAsValues;
  }



  public void setCfValuesAsValues(Map<String, Object> cfValuesAsValues) {
    this.cfValuesAsValues = cfValuesAsValues;
  }


  public OtherTransaction cfAccumulatedValuesNullSafe(CustomFieldValues cfAccumulatedValuesNullSafe) {
    
    this.cfAccumulatedValuesNullSafe = cfAccumulatedValuesNullSafe;
    return this;
  }

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

  public CustomFieldValues getCfAccumulatedValuesNullSafe() {
    return cfAccumulatedValuesNullSafe;
  }



  public void setCfAccumulatedValuesNullSafe(CustomFieldValues cfAccumulatedValuesNullSafe) {
    this.cfAccumulatedValuesNullSafe = cfAccumulatedValuesNullSafe;
  }


  public OtherTransaction _transient(Boolean _transient) {
    
    this._transient = _transient;
    return this;
  }

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

  public Boolean getTransient() {
    return _transient;
  }



  public void setTransient(Boolean _transient) {
    this._transient = _transient;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    OtherTransaction otherTransaction = (OtherTransaction) o;
    return Objects.equals(this.id, otherTransaction.id) &&
        Objects.equals(this.version, otherTransaction.version) &&
        Objects.equals(this.auditable, otherTransaction.auditable) &&
        Objects.equals(this.historized, otherTransaction.historized) &&
        Objects.equals(this.notified, otherTransaction.notified) &&
        Objects.equals(this.auditableFields, otherTransaction.auditableFields) &&
        Objects.equals(this.dueDate, otherTransaction.dueDate) &&
        Objects.equals(this.transactionDate, otherTransaction.transactionDate) &&
        Objects.equals(this.transactionCategory, otherTransaction.transactionCategory) &&
        Objects.equals(this.type, otherTransaction.type) &&
        Objects.equals(this.reference, otherTransaction.reference) &&
        Objects.equals(this.accountingCode, otherTransaction.accountingCode) &&
        Objects.equals(this.amount, otherTransaction.amount) &&
        Objects.equals(this.amountWithoutTax, otherTransaction.amountWithoutTax) &&
        Objects.equals(this.taxAmount, otherTransaction.taxAmount) &&
        Objects.equals(this.matchingAmount, otherTransaction.matchingAmount) &&
        Objects.equals(this.unMatchingAmount, otherTransaction.unMatchingAmount) &&
        Objects.equals(this.generalLedger, otherTransaction.generalLedger) &&
        Objects.equals(this.matchingStatus, otherTransaction.matchingStatus) &&
        Objects.equals(this.occCode, otherTransaction.occCode) &&
        Objects.equals(this.occDescription, otherTransaction.occDescription) &&
        Objects.equals(this.orderNumber, otherTransaction.orderNumber) &&
        Objects.equals(this.uuid, otherTransaction.uuid) &&
        Objects.equals(this.cfValues, otherTransaction.cfValues) &&
        Objects.equals(this.cfAccumulatedValues, otherTransaction.cfAccumulatedValues) &&
        Objects.equals(this.bankLot, otherTransaction.bankLot) &&
        Objects.equals(this.bankReference, otherTransaction.bankReference) &&
        Objects.equals(this.depositDate, otherTransaction.depositDate) &&
        Objects.equals(this.bankCollectionDate, otherTransaction.bankCollectionDate) &&
        Objects.equals(this.paymentMethod, otherTransaction.paymentMethod) &&
        Objects.equals(this.code, otherTransaction.code) &&
        Objects.equals(this.description, otherTransaction.description) &&
        Objects.equals(this.paymentInfo, otherTransaction.paymentInfo) &&
        Objects.equals(this.paymentInfo1, otherTransaction.paymentInfo1) &&
        Objects.equals(this.paymentInfo2, otherTransaction.paymentInfo2) &&
        Objects.equals(this.paymentInfo3, otherTransaction.paymentInfo3) &&
        Objects.equals(this.paymentInfo4, otherTransaction.paymentInfo4) &&
        Objects.equals(this.paymentInfo5, otherTransaction.paymentInfo5) &&
        Objects.equals(this.paymentInfo6, otherTransaction.paymentInfo6) &&
        Objects.equals(this.paymentInfo7, otherTransaction.paymentInfo7) &&
        Objects.equals(this.billingAccountName, otherTransaction.billingAccountName) &&
        Objects.equals(this.paymentVentilation, otherTransaction.paymentVentilation) &&
        Objects.equals(this.paymentVentilations, otherTransaction.paymentVentilations) &&
        Objects.equals(this.parentCFEntities, otherTransaction.parentCFEntities) &&
        Objects.equals(this.cfValuesNullSafe, otherTransaction.cfValuesNullSafe) &&
        Objects.equals(this.cfValuesAsValues, otherTransaction.cfValuesAsValues) &&
        Objects.equals(this.cfAccumulatedValuesNullSafe, otherTransaction.cfAccumulatedValuesNullSafe) &&
        Objects.equals(this._transient, otherTransaction._transient);
  }

  @Override
  public int hashCode() {
    return Objects.hash(id, version, auditable, historized, notified, auditableFields, dueDate, transactionDate, transactionCategory, type, reference, accountingCode, amount, amountWithoutTax, taxAmount, matchingAmount, unMatchingAmount, generalLedger, matchingStatus, occCode, occDescription, orderNumber, uuid, cfValues, cfAccumulatedValues, bankLot, bankReference, depositDate, bankCollectionDate, paymentMethod, code, description, paymentInfo, paymentInfo1, paymentInfo2, paymentInfo3, paymentInfo4, paymentInfo5, paymentInfo6, paymentInfo7, billingAccountName, paymentVentilation, paymentVentilations, parentCFEntities, cfValuesNullSafe, cfValuesAsValues, cfAccumulatedValuesNullSafe, _transient);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class OtherTransaction {\n");
    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    version: ").append(toIndentedString(version)).append("\n");
    sb.append("    auditable: ").append(toIndentedString(auditable)).append("\n");
    sb.append("    historized: ").append(toIndentedString(historized)).append("\n");
    sb.append("    notified: ").append(toIndentedString(notified)).append("\n");
    sb.append("    auditableFields: ").append(toIndentedString(auditableFields)).append("\n");
    sb.append("    dueDate: ").append(toIndentedString(dueDate)).append("\n");
    sb.append("    transactionDate: ").append(toIndentedString(transactionDate)).append("\n");
    sb.append("    transactionCategory: ").append(toIndentedString(transactionCategory)).append("\n");
    sb.append("    type: ").append(toIndentedString(type)).append("\n");
    sb.append("    reference: ").append(toIndentedString(reference)).append("\n");
    sb.append("    accountingCode: ").append(toIndentedString(accountingCode)).append("\n");
    sb.append("    amount: ").append(toIndentedString(amount)).append("\n");
    sb.append("    amountWithoutTax: ").append(toIndentedString(amountWithoutTax)).append("\n");
    sb.append("    taxAmount: ").append(toIndentedString(taxAmount)).append("\n");
    sb.append("    matchingAmount: ").append(toIndentedString(matchingAmount)).append("\n");
    sb.append("    unMatchingAmount: ").append(toIndentedString(unMatchingAmount)).append("\n");
    sb.append("    generalLedger: ").append(toIndentedString(generalLedger)).append("\n");
    sb.append("    matchingStatus: ").append(toIndentedString(matchingStatus)).append("\n");
    sb.append("    occCode: ").append(toIndentedString(occCode)).append("\n");
    sb.append("    occDescription: ").append(toIndentedString(occDescription)).append("\n");
    sb.append("    orderNumber: ").append(toIndentedString(orderNumber)).append("\n");
    sb.append("    uuid: ").append(toIndentedString(uuid)).append("\n");
    sb.append("    cfValues: ").append(toIndentedString(cfValues)).append("\n");
    sb.append("    cfAccumulatedValues: ").append(toIndentedString(cfAccumulatedValues)).append("\n");
    sb.append("    bankLot: ").append(toIndentedString(bankLot)).append("\n");
    sb.append("    bankReference: ").append(toIndentedString(bankReference)).append("\n");
    sb.append("    depositDate: ").append(toIndentedString(depositDate)).append("\n");
    sb.append("    bankCollectionDate: ").append(toIndentedString(bankCollectionDate)).append("\n");
    sb.append("    paymentMethod: ").append(toIndentedString(paymentMethod)).append("\n");
    sb.append("    code: ").append(toIndentedString(code)).append("\n");
    sb.append("    description: ").append(toIndentedString(description)).append("\n");
    sb.append("    paymentInfo: ").append(toIndentedString(paymentInfo)).append("\n");
    sb.append("    paymentInfo1: ").append(toIndentedString(paymentInfo1)).append("\n");
    sb.append("    paymentInfo2: ").append(toIndentedString(paymentInfo2)).append("\n");
    sb.append("    paymentInfo3: ").append(toIndentedString(paymentInfo3)).append("\n");
    sb.append("    paymentInfo4: ").append(toIndentedString(paymentInfo4)).append("\n");
    sb.append("    paymentInfo5: ").append(toIndentedString(paymentInfo5)).append("\n");
    sb.append("    paymentInfo6: ").append(toIndentedString(paymentInfo6)).append("\n");
    sb.append("    paymentInfo7: ").append(toIndentedString(paymentInfo7)).append("\n");
    sb.append("    billingAccountName: ").append(toIndentedString(billingAccountName)).append("\n");
    sb.append("    paymentVentilation: ").append(toIndentedString(paymentVentilation)).append("\n");
    sb.append("    paymentVentilations: ").append(toIndentedString(paymentVentilations)).append("\n");
    sb.append("    parentCFEntities: ").append(toIndentedString(parentCFEntities)).append("\n");
    sb.append("    cfValuesNullSafe: ").append(toIndentedString(cfValuesNullSafe)).append("\n");
    sb.append("    cfValuesAsValues: ").append(toIndentedString(cfValuesAsValues)).append("\n");
    sb.append("    cfAccumulatedValuesNullSafe: ").append(toIndentedString(cfAccumulatedValuesNullSafe)).append("\n");
    sb.append("    _transient: ").append(toIndentedString(_transient)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}

