/*
 * 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 org.openapitools.client.model.BankCoordinatesDto;
import org.openapitools.client.model.CustomFieldsDto;
import org.openapitools.client.model.InvoiceConfigurationDto;

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

  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_MULTI_CURRENCY = "multiCurrency";
  @SerializedName(SERIALIZED_NAME_MULTI_CURRENCY)
  private Boolean multiCurrency;

  public static final String SERIALIZED_NAME_MULTI_COUNTRY = "multiCountry";
  @SerializedName(SERIALIZED_NAME_MULTI_COUNTRY)
  private Boolean multiCountry;

  public static final String SERIALIZED_NAME_MULTI_LANGUAGE = "multiLanguage";
  @SerializedName(SERIALIZED_NAME_MULTI_LANGUAGE)
  private Boolean multiLanguage;

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

  public static final String SERIALIZED_NAME_ENTERPRISE = "enterprise";
  @SerializedName(SERIALIZED_NAME_ENTERPRISE)
  private Boolean enterprise;

  public static final String SERIALIZED_NAME_LEVEL_DUPLICATION = "levelDuplication";
  @SerializedName(SERIALIZED_NAME_LEVEL_DUPLICATION)
  private Boolean levelDuplication;

  public static final String SERIALIZED_NAME_ROUNDING = "rounding";
  @SerializedName(SERIALIZED_NAME_ROUNDING)
  private Integer rounding;

  /**
   * Gets or Sets roundingMode
   */
  @JsonAdapter(RoundingModeEnum.Adapter.class)
  public enum RoundingModeEnum {
    NEAREST("NEAREST"),
    
    DOWN("DOWN"),
    
    UP("UP");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_ROUNDING_MODE = "roundingMode";
  @SerializedName(SERIALIZED_NAME_ROUNDING_MODE)
  private RoundingModeEnum roundingMode;

  public static final String SERIALIZED_NAME_INVOICE_ROUNDING = "invoiceRounding";
  @SerializedName(SERIALIZED_NAME_INVOICE_ROUNDING)
  private Integer invoiceRounding;

  /**
   * Gets or Sets invoiceRoundingMode
   */
  @JsonAdapter(InvoiceRoundingModeEnum.Adapter.class)
  public enum InvoiceRoundingModeEnum {
    NEAREST("NEAREST"),
    
    DOWN("DOWN"),
    
    UP("UP");

    private String value;

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

    public String getValue() {
      return value;
    }

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

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

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

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

  public static final String SERIALIZED_NAME_INVOICE_ROUNDING_MODE = "invoiceRoundingMode";
  @SerializedName(SERIALIZED_NAME_INVOICE_ROUNDING_MODE)
  private InvoiceRoundingModeEnum invoiceRoundingMode;

  public static final String SERIALIZED_NAME_PREPAID_RESERVATION_EXPIRATION_DELAYIN_MILLISEC = "prepaidReservationExpirationDelayinMillisec";
  @SerializedName(SERIALIZED_NAME_PREPAID_RESERVATION_EXPIRATION_DELAYIN_MILLISEC)
  private Long prepaidReservationExpirationDelayinMillisec;

  public static final String SERIALIZED_NAME_DISCOUNT_ACCOUNTING_CODE = "discountAccountingCode";
  @SerializedName(SERIALIZED_NAME_DISCOUNT_ACCOUNTING_CODE)
  private String discountAccountingCode;

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

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

  public static final String SERIALIZED_NAME_RECOGNIZE_REVENUE = "recognizeRevenue";
  @SerializedName(SERIALIZED_NAME_RECOGNIZE_REVENUE)
  private Boolean recognizeRevenue;

  public static final String SERIALIZED_NAME_INVOICE_CONFIGURATION = "invoiceConfiguration";
  @SerializedName(SERIALIZED_NAME_INVOICE_CONFIGURATION)
  private InvoiceConfigurationDto invoiceConfiguration;

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


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

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

  public String getCurrency() {
    return currency;
  }



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


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

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

  public String getCountry() {
    return country;
  }



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


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

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

  public String getLanguage() {
    return language;
  }



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


  public ProviderDto multiCurrency(Boolean multiCurrency) {
    
    this.multiCurrency = multiCurrency;
    return this;
  }

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

  public Boolean getMultiCurrency() {
    return multiCurrency;
  }



  public void setMultiCurrency(Boolean multiCurrency) {
    this.multiCurrency = multiCurrency;
  }


  public ProviderDto multiCountry(Boolean multiCountry) {
    
    this.multiCountry = multiCountry;
    return this;
  }

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

  public Boolean getMultiCountry() {
    return multiCountry;
  }



  public void setMultiCountry(Boolean multiCountry) {
    this.multiCountry = multiCountry;
  }


  public ProviderDto multiLanguage(Boolean multiLanguage) {
    
    this.multiLanguage = multiLanguage;
    return this;
  }

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

  public Boolean getMultiLanguage() {
    return multiLanguage;
  }



  public void setMultiLanguage(Boolean multiLanguage) {
    this.multiLanguage = multiLanguage;
  }


  public ProviderDto userAccount(String userAccount) {
    
    this.userAccount = userAccount;
    return this;
  }

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

  public String getUserAccount() {
    return userAccount;
  }



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


  public ProviderDto enterprise(Boolean enterprise) {
    
    this.enterprise = enterprise;
    return this;
  }

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

  public Boolean getEnterprise() {
    return enterprise;
  }



  public void setEnterprise(Boolean enterprise) {
    this.enterprise = enterprise;
  }


  public ProviderDto levelDuplication(Boolean levelDuplication) {
    
    this.levelDuplication = levelDuplication;
    return this;
  }

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

  public Boolean getLevelDuplication() {
    return levelDuplication;
  }



  public void setLevelDuplication(Boolean levelDuplication) {
    this.levelDuplication = levelDuplication;
  }


  public ProviderDto rounding(Integer rounding) {
    
    this.rounding = rounding;
    return this;
  }

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

  public Integer getRounding() {
    return rounding;
  }



  public void setRounding(Integer rounding) {
    this.rounding = rounding;
  }


  public ProviderDto roundingMode(RoundingModeEnum roundingMode) {
    
    this.roundingMode = roundingMode;
    return this;
  }

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

  public RoundingModeEnum getRoundingMode() {
    return roundingMode;
  }



  public void setRoundingMode(RoundingModeEnum roundingMode) {
    this.roundingMode = roundingMode;
  }


  public ProviderDto invoiceRounding(Integer invoiceRounding) {
    
    this.invoiceRounding = invoiceRounding;
    return this;
  }

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

  public Integer getInvoiceRounding() {
    return invoiceRounding;
  }



  public void setInvoiceRounding(Integer invoiceRounding) {
    this.invoiceRounding = invoiceRounding;
  }


  public ProviderDto invoiceRoundingMode(InvoiceRoundingModeEnum invoiceRoundingMode) {
    
    this.invoiceRoundingMode = invoiceRoundingMode;
    return this;
  }

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

  public InvoiceRoundingModeEnum getInvoiceRoundingMode() {
    return invoiceRoundingMode;
  }



  public void setInvoiceRoundingMode(InvoiceRoundingModeEnum invoiceRoundingMode) {
    this.invoiceRoundingMode = invoiceRoundingMode;
  }


  public ProviderDto prepaidReservationExpirationDelayinMillisec(Long prepaidReservationExpirationDelayinMillisec) {
    
    this.prepaidReservationExpirationDelayinMillisec = prepaidReservationExpirationDelayinMillisec;
    return this;
  }

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

  public Long getPrepaidReservationExpirationDelayinMillisec() {
    return prepaidReservationExpirationDelayinMillisec;
  }



  public void setPrepaidReservationExpirationDelayinMillisec(Long prepaidReservationExpirationDelayinMillisec) {
    this.prepaidReservationExpirationDelayinMillisec = prepaidReservationExpirationDelayinMillisec;
  }


  public ProviderDto discountAccountingCode(String discountAccountingCode) {
    
    this.discountAccountingCode = discountAccountingCode;
    return this;
  }

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

  public String getDiscountAccountingCode() {
    return discountAccountingCode;
  }



  public void setDiscountAccountingCode(String discountAccountingCode) {
    this.discountAccountingCode = discountAccountingCode;
  }


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

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

  public Boolean getRecognizeRevenue() {
    return recognizeRevenue;
  }



  public void setRecognizeRevenue(Boolean recognizeRevenue) {
    this.recognizeRevenue = recognizeRevenue;
  }


  public ProviderDto invoiceConfiguration(InvoiceConfigurationDto invoiceConfiguration) {
    
    this.invoiceConfiguration = invoiceConfiguration;
    return this;
  }

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

  public InvoiceConfigurationDto getInvoiceConfiguration() {
    return invoiceConfiguration;
  }



  public void setInvoiceConfiguration(InvoiceConfigurationDto invoiceConfiguration) {
    this.invoiceConfiguration = invoiceConfiguration;
  }


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


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    ProviderDto providerDto = (ProviderDto) o;
    return Objects.equals(this.code, providerDto.code) &&
        Objects.equals(this.description, providerDto.description) &&
        Objects.equals(this.currency, providerDto.currency) &&
        Objects.equals(this.country, providerDto.country) &&
        Objects.equals(this.language, providerDto.language) &&
        Objects.equals(this.multiCurrency, providerDto.multiCurrency) &&
        Objects.equals(this.multiCountry, providerDto.multiCountry) &&
        Objects.equals(this.multiLanguage, providerDto.multiLanguage) &&
        Objects.equals(this.userAccount, providerDto.userAccount) &&
        Objects.equals(this.enterprise, providerDto.enterprise) &&
        Objects.equals(this.levelDuplication, providerDto.levelDuplication) &&
        Objects.equals(this.rounding, providerDto.rounding) &&
        Objects.equals(this.roundingMode, providerDto.roundingMode) &&
        Objects.equals(this.invoiceRounding, providerDto.invoiceRounding) &&
        Objects.equals(this.invoiceRoundingMode, providerDto.invoiceRoundingMode) &&
        Objects.equals(this.prepaidReservationExpirationDelayinMillisec, providerDto.prepaidReservationExpirationDelayinMillisec) &&
        Objects.equals(this.discountAccountingCode, providerDto.discountAccountingCode) &&
        Objects.equals(this.email, providerDto.email) &&
        Objects.equals(this.bankCoordinates, providerDto.bankCoordinates) &&
        Objects.equals(this.recognizeRevenue, providerDto.recognizeRevenue) &&
        Objects.equals(this.invoiceConfiguration, providerDto.invoiceConfiguration) &&
        Objects.equals(this.customFields, providerDto.customFields);
  }

  @Override
  public int hashCode() {
    return Objects.hash(code, description, currency, country, language, multiCurrency, multiCountry, multiLanguage, userAccount, enterprise, levelDuplication, rounding, roundingMode, invoiceRounding, invoiceRoundingMode, prepaidReservationExpirationDelayinMillisec, discountAccountingCode, email, bankCoordinates, recognizeRevenue, invoiceConfiguration, customFields);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class ProviderDto {\n");
    sb.append("    code: ").append(toIndentedString(code)).append("\n");
    sb.append("    description: ").append(toIndentedString(description)).append("\n");
    sb.append("    currency: ").append(toIndentedString(currency)).append("\n");
    sb.append("    country: ").append(toIndentedString(country)).append("\n");
    sb.append("    language: ").append(toIndentedString(language)).append("\n");
    sb.append("    multiCurrency: ").append(toIndentedString(multiCurrency)).append("\n");
    sb.append("    multiCountry: ").append(toIndentedString(multiCountry)).append("\n");
    sb.append("    multiLanguage: ").append(toIndentedString(multiLanguage)).append("\n");
    sb.append("    userAccount: ").append(toIndentedString(userAccount)).append("\n");
    sb.append("    enterprise: ").append(toIndentedString(enterprise)).append("\n");
    sb.append("    levelDuplication: ").append(toIndentedString(levelDuplication)).append("\n");
    sb.append("    rounding: ").append(toIndentedString(rounding)).append("\n");
    sb.append("    roundingMode: ").append(toIndentedString(roundingMode)).append("\n");
    sb.append("    invoiceRounding: ").append(toIndentedString(invoiceRounding)).append("\n");
    sb.append("    invoiceRoundingMode: ").append(toIndentedString(invoiceRoundingMode)).append("\n");
    sb.append("    prepaidReservationExpirationDelayinMillisec: ").append(toIndentedString(prepaidReservationExpirationDelayinMillisec)).append("\n");
    sb.append("    discountAccountingCode: ").append(toIndentedString(discountAccountingCode)).append("\n");
    sb.append("    email: ").append(toIndentedString(email)).append("\n");
    sb.append("    bankCoordinates: ").append(toIndentedString(bankCoordinates)).append("\n");
    sb.append("    recognizeRevenue: ").append(toIndentedString(recognizeRevenue)).append("\n");
    sb.append("    invoiceConfiguration: ").append(toIndentedString(invoiceConfiguration)).append("\n");
    sb.append("    customFields: ").append(toIndentedString(customFields)).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    ");
  }

}

