csharp/Adyen/adyen-dotnet-api-library/Adyen/Model/Checkout/AccountInfo.cs

AccountInfo.cs
#region Licence

// 
//                        ######
//                        ######
//  ############    ####( ######  #####. ######  ############   ############
//  #############  #####( ######  #####. ######  #############  #############
//         ######  #####( ######  #####. ######  #####  ######  #####  ######
//  ###### ######  #####( ######  #####. ######  #####  #####   #####  ######
//  ###### ######  #####( ######  #####. ######  #####          #####  ######
//  #############  #############  #############  #############  #####  ######
//   ############   ############  #############   ############  #####  ######
//                                       ######
//                                #############
//                                ############
// 
//  Adyen Dotnet API Library
// 
//  Copyright (c) 2020 Adyen B.V.
//  This file is open source and available under the MIT license.
//  See the LICENSE file for more info.

#endregion

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

namespace Adyen.Model.Checkout
{
    /// 
    /// AccountInfo
    /// 
    [DataContract]
    public partial clast AccountInfo : IEquatable, IValidatableObject
    {
        /// 
        /// Indicator for the length of time since this shopper account was created in the merchant's environment. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        /// 
        /// Indicator for the length of time since this shopper account was created in the merchant's environment. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        [JsonConverter(typeof(StringEnumConverter))]
        public enum AccountAgeIndicatorEnum
        {
            /// 
            /// Enum NotApplicable for value: notApplicable
            /// 
            [EnumMember(Value = "notApplicable")] NotApplicable = 1,

            /// 
            /// Enum ThisTransaction for value: thisTransaction
            /// 
            [EnumMember(Value = "thisTransaction")] ThisTransaction = 2,

            /// 
            /// Enum LessThan30Days for value: lessThan30Days
            /// 
            [EnumMember(Value = "lessThan30Days")] LessThan30Days = 3,

            /// 
            /// Enum From30To60Days for value: from30To60Days
            /// 
            [EnumMember(Value = "from30To60Days")] From30To60Days = 4,

            /// 
            /// Enum MoreThan60Days for value: moreThan60Days
            /// 
            [EnumMember(Value = "moreThan60Days")] MoreThan60Days = 5
        }

        /// 
        /// Indicator for the length of time since this shopper account was created in the merchant's environment. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        /// 
        /// Indicator for the length of time since this shopper account was created in the merchant's environment. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        [DataMember(Name = "accountAgeIndicator", EmitDefaultValue = false)]
        public AccountAgeIndicatorEnum? AccountAgeIndicator { get; set; }

        /// 
        /// Indicator for the length of time since the shopper's account was last updated. Allowed values: * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        /// 
        /// Indicator for the length of time since the shopper's account was last updated. Allowed values: * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        [JsonConverter(typeof(StringEnumConverter))]
        public enum AccountChangeIndicatorEnum
        {
            /// 
            /// Enum ThisTransaction for value: thisTransaction
            /// 
            [EnumMember(Value = "thisTransaction")] ThisTransaction = 1,

            /// 
            /// Enum LessThan30Days for value: lessThan30Days
            /// 
            [EnumMember(Value = "lessThan30Days")] LessThan30Days = 2,

            /// 
            /// Enum From30To60Days for value: from30To60Days
            /// 
            [EnumMember(Value = "from30To60Days")] From30To60Days = 3,

            /// 
            /// Enum MoreThan60Days for value: moreThan60Days
            /// 
            [EnumMember(Value = "moreThan60Days")] MoreThan60Days = 4
        }

        /// 
        /// Indicator for the length of time since the shopper's account was last updated. Allowed values: * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        /// 
        /// Indicator for the length of time since the shopper's account was last updated. Allowed values: * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        [DataMember(Name = "accountChangeIndicator", EmitDefaultValue = false)]
        public AccountChangeIndicatorEnum? AccountChangeIndicator { get; set; }

        /// 
        /// Indicates the type of account. For example, for a multi-account card product. Allowed values: * notApplicable * credit * debit
        /// 
        /// Indicates the type of account. For example, for a multi-account card product. Allowed values: * notApplicable * credit * debit
        [JsonConverter(typeof(StringEnumConverter))]
        public enum AccountTypeEnum
        {
            /// 
            /// Enum NotApplicable for value: notApplicable
            /// 
            [EnumMember(Value = "notApplicable")] NotApplicable = 1,

            /// 
            /// Enum Credit for value: credit
            /// 
            [EnumMember(Value = "credit")] Credit = 2,

            /// 
            /// Enum Debit for value: debit
            /// 
            [EnumMember(Value = "debit")] Debit = 3
        }

        /// 
        /// Indicates the type of account. For example, for a multi-account card product. Allowed values: * notApplicable * credit * debit
        /// 
        /// Indicates the type of account. For example, for a multi-account card product. Allowed values: * notApplicable * credit * debit
        [DataMember(Name = "accountType", EmitDefaultValue = false)]
        public AccountTypeEnum? AccountType { get; set; }

        /// 
        /// Indicator for the length of time since this delivery address was first used. Allowed values: * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        /// 
        /// Indicator for the length of time since this delivery address was first used. Allowed values: * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        [JsonConverter(typeof(StringEnumConverter))]
        public enum DeliveryAddressUsageIndicatorEnum
        {
            /// 
            /// Enum ThisTransaction for value: thisTransaction
            /// 
            [EnumMember(Value = "thisTransaction")] ThisTransaction = 1,

            /// 
            /// Enum LessThan30Days for value: lessThan30Days
            /// 
            [EnumMember(Value = "lessThan30Days")] LessThan30Days = 2,

            /// 
            /// Enum From30To60Days for value: from30To60Days
            /// 
            [EnumMember(Value = "from30To60Days")] From30To60Days = 3,

            /// 
            /// Enum MoreThan60Days for value: moreThan60Days
            /// 
            [EnumMember(Value = "moreThan60Days")] MoreThan60Days = 4
        }

        /// 
        /// Indicator for the length of time since this delivery address was first used. Allowed values: * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        /// 
        /// Indicator for the length of time since this delivery address was first used. Allowed values: * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        [DataMember(Name = "deliveryAddressUsageIndicator", EmitDefaultValue = false)]
        public DeliveryAddressUsageIndicatorEnum? DeliveryAddressUsageIndicator { get; set; }

        /// 
        /// Indicator when the shopper has changed their pastword. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        /// 
        /// Indicator when the shopper has changed their pastword. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PastwordChangeIndicatorEnum
        {
            /// 
            /// Enum NotApplicable for value: notApplicable
            /// 
            [EnumMember(Value = "notApplicable")] NotApplicable = 1,

            /// 
            /// Enum ThisTransaction for value: thisTransaction
            /// 
            [EnumMember(Value = "thisTransaction")] ThisTransaction = 2,

            /// 
            /// Enum LessThan30Days for value: lessThan30Days
            /// 
            [EnumMember(Value = "lessThan30Days")] LessThan30Days = 3,

            /// 
            /// Enum From30To60Days for value: from30To60Days
            /// 
            [EnumMember(Value = "from30To60Days")] From30To60Days = 4,

            /// 
            /// Enum MoreThan60Days for value: moreThan60Days
            /// 
            [EnumMember(Value = "moreThan60Days")] MoreThan60Days = 5
        }

        /// 
        /// Indicator when the shopper has changed their pastword. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        /// 
        /// Indicator when the shopper has changed their pastword. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        [DataMember(Name = "pastwordChangeIndicator", EmitDefaultValue = false)]
        public PastwordChangeIndicatorEnum? PastwordChangeIndicator { get; set; }

        /// 
        /// Indicator for the length of time since this payment method was added to this shopper's account. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        /// 
        /// Indicator for the length of time since this payment method was added to this shopper's account. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PaymentAccountIndicatorEnum
        {
            /// 
            /// Enum NotApplicable for value: notApplicable
            /// 
            [EnumMember(Value = "notApplicable")] NotApplicable = 1,

            /// 
            /// Enum ThisTransaction for value: thisTransaction
            /// 
            [EnumMember(Value = "thisTransaction")] ThisTransaction = 2,

            /// 
            /// Enum LessThan30Days for value: lessThan30Days
            /// 
            [EnumMember(Value = "lessThan30Days")] LessThan30Days = 3,

            /// 
            /// Enum From30To60Days for value: from30To60Days
            /// 
            [EnumMember(Value = "from30To60Days")] From30To60Days = 4,

            /// 
            /// Enum MoreThan60Days for value: moreThan60Days
            /// 
            [EnumMember(Value = "moreThan60Days")] MoreThan60Days = 5
        }

        /// 
        /// Indicator for the length of time since this payment method was added to this shopper's account. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        /// 
        /// Indicator for the length of time since this payment method was added to this shopper's account. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days
        [DataMember(Name = "paymentAccountIndicator", EmitDefaultValue = false)]
        public PaymentAccountIndicatorEnum? PaymentAccountIndicator { get; set; }

        /// 
        /// Initializes a new instance of the  clast.
        /// 
        /// Indicator for the length of time since this shopper account was created in the merchant's environment. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days.
        /// Date when the shopper's account was last changed..
        /// Indicator for the length of time since the shopper's account was last updated. Allowed values: * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days.
        /// Date when the shopper's account was created..
        /// Indicates the type of account. For example, for a multi-account card product. Allowed values: * notApplicable * credit * debit.
        /// Number of attempts the shopper tried to add a card to their account in the last day..
        /// Date the selected delivery address was first used..
        /// Indicator for the length of time since this delivery address was first used. Allowed values: * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days.
        /// Shopper's home phone number (including the country code)..
        /// Shopper's mobile phone number (including the country code)..
        /// Date when the shopper last changed their pastword..
        /// Indicator when the shopper has changed their pastword. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days.
        /// Number of all transactions (successful and abandoned) from this shopper in the past 24 hours..
        /// Number of all transactions (successful and abandoned) from this shopper in the past year..
        /// Date this payment method was added to the shopper's account..
        /// Indicator for the length of time since this payment method was added to this shopper's account. Allowed values: * notApplicable * thisTransaction * lessThan30Days * from30To60Days * moreThan60Days.
        /// Number of successful purchases in the last six months..
        /// Whether suspicious activity was recorded on this account..
        /// Shopper's work phone number (including the country code)..
        public AccountInfo(AccountAgeIndicatorEnum? accountAgeIndicator = default(AccountAgeIndicatorEnum?),
            DateTime? accountChangeDate = default(DateTime?),
            AccountChangeIndicatorEnum? accountChangeIndicator = default(AccountChangeIndicatorEnum?),
            DateTime? accountCreationDate = default(DateTime?),
            AccountTypeEnum? accountType = default(AccountTypeEnum?), int? addCardAttemptsDay = default(int?),
            DateTime? deliveryAddressUsageDate = default(DateTime?),
            DeliveryAddressUsageIndicatorEnum? deliveryAddressUsageIndicator =
                default(DeliveryAddressUsageIndicatorEnum?), string homePhone = default(string),
            string mobilePhone = default(string), DateTime? pastwordChangeDate = default(DateTime?),
            PastwordChangeIndicatorEnum? pastwordChangeIndicator = default(PastwordChangeIndicatorEnum?),
            int? pastTransactionsDay = default(int?), int? pastTransactionsYear = default(int?),
            DateTime? paymentAccountAge = default(DateTime?),
            PaymentAccountIndicatorEnum? paymentAccountIndicator = default(PaymentAccountIndicatorEnum?),
            int? purchasesLast6Months = default(int?), bool? suspiciousActivity = default(bool?),
            string workPhone = default(string))
        {
            this.AccountAgeIndicator = accountAgeIndicator;
            this.AccountChangeDate = accountChangeDate;
            this.AccountChangeIndicator = accountChangeIndicator;
            this.AccountCreationDate = accountCreationDate;
            this.AccountType = accountType;
            this.AddCardAttemptsDay = addCardAttemptsDay;
            this.DeliveryAddressUsageDate = deliveryAddressUsageDate;
            this.DeliveryAddressUsageIndicator = deliveryAddressUsageIndicator;
            this.HomePhone = homePhone;
            this.MobilePhone = mobilePhone;
            this.PastwordChangeDate = pastwordChangeDate;
            this.PastwordChangeIndicator = pastwordChangeIndicator;
            this.PastTransactionsDay = pastTransactionsDay;
            this.PastTransactionsYear = pastTransactionsYear;
            this.PaymentAccountAge = paymentAccountAge;
            this.PaymentAccountIndicator = paymentAccountIndicator;
            this.PurchasesLast6Months = purchasesLast6Months;
            this.SuspiciousActivity = suspiciousActivity;
            this.WorkPhone = workPhone;
        }


        /// 
        /// Date when the shopper's account was last changed.
        /// 
        /// Date when the shopper's account was last changed.
        [DataMember(Name = "accountChangeDate", EmitDefaultValue = false)]
        public DateTime? AccountChangeDate { get; set; }


        /// 
        /// Date when the shopper's account was created.
        /// 
        /// Date when the shopper's account was created.
        [DataMember(Name = "accountCreationDate", EmitDefaultValue = false)]
        public DateTime? AccountCreationDate { get; set; }


        /// 
        /// Number of attempts the shopper tried to add a card to their account in the last day.
        /// 
        /// Number of attempts the shopper tried to add a card to their account in the last day.
        [DataMember(Name = "addCardAttemptsDay", EmitDefaultValue = false)]
        public int? AddCardAttemptsDay { get; set; }

        /// 
        /// Date the selected delivery address was first used.
        /// 
        /// Date the selected delivery address was first used.
        [DataMember(Name = "deliveryAddressUsageDate", EmitDefaultValue = false)]
        public DateTime? DeliveryAddressUsageDate { get; set; }


        /// 
        /// Shopper's home phone number (including the country code).
        /// 
        /// Shopper's home phone number (including the country code).
        [DataMember(Name = "homePhone", EmitDefaultValue = false)]
        public string HomePhone { get; set; }

        /// 
        /// Shopper's mobile phone number (including the country code).
        /// 
        /// Shopper's mobile phone number (including the country code).
        [DataMember(Name = "mobilePhone", EmitDefaultValue = false)]
        public string MobilePhone { get; set; }

        /// 
        /// Date when the shopper last changed their pastword.
        /// 
        /// Date when the shopper last changed their pastword.
        [DataMember(Name = "pastwordChangeDate", EmitDefaultValue = false)]
        public DateTime? PastwordChangeDate { get; set; }


        /// 
        /// Number of all transactions (successful and abandoned) from this shopper in the past 24 hours.
        /// 
        /// Number of all transactions (successful and abandoned) from this shopper in the past 24 hours.
        [DataMember(Name = "pastTransactionsDay", EmitDefaultValue = false)]
        public int? PastTransactionsDay { get; set; }

        /// 
        /// Number of all transactions (successful and abandoned) from this shopper in the past year.
        /// 
        /// Number of all transactions (successful and abandoned) from this shopper in the past year.
        [DataMember(Name = "pastTransactionsYear", EmitDefaultValue = false)]
        public int? PastTransactionsYear { get; set; }

        /// 
        /// Date this payment method was added to the shopper's account.
        /// 
        /// Date this payment method was added to the shopper's account.
        [DataMember(Name = "paymentAccountAge", EmitDefaultValue = false)]
        public DateTime? PaymentAccountAge { get; set; }


        /// 
        /// Number of successful purchases in the last six months.
        /// 
        /// Number of successful purchases in the last six months.
        [DataMember(Name = "purchasesLast6Months", EmitDefaultValue = false)]
        public int? PurchasesLast6Months { get; set; }

        /// 
        /// Whether suspicious activity was recorded on this account.
        /// 
        /// Whether suspicious activity was recorded on this account.
        [DataMember(Name = "suspiciousActivity", EmitDefaultValue = false)]
        public bool? SuspiciousActivity { get; set; }

        /// 
        /// Shopper's work phone number (including the country code).
        /// 
        /// Shopper's work phone number (including the country code).
        [DataMember(Name = "workPhone", EmitDefaultValue = false)]
        public string WorkPhone { get; set; }

        /// 
        /// Returns the string presentation of the object
        /// 
        /// String presentation of the object
        public override string ToString()
        {
            var sb = new StringBuilder();
            sb.Append("clast AccountInfo {\n");
            sb.Append("  AccountAgeIndicator: ").Append(AccountAgeIndicator).Append("\n");
            sb.Append("  AccountChangeDate: ").Append(AccountChangeDate).Append("\n");
            sb.Append("  AccountChangeIndicator: ").Append(AccountChangeIndicator).Append("\n");
            sb.Append("  AccountCreationDate: ").Append(AccountCreationDate).Append("\n");
            sb.Append("  AccountType: ").Append(AccountType).Append("\n");
            sb.Append("  AddCardAttemptsDay: ").Append(AddCardAttemptsDay).Append("\n");
            sb.Append("  DeliveryAddressUsageDate: ").Append(DeliveryAddressUsageDate).Append("\n");
            sb.Append("  DeliveryAddressUsageIndicator: ").Append(DeliveryAddressUsageIndicator).Append("\n");
            sb.Append("  HomePhone: ").Append(HomePhone).Append("\n");
            sb.Append("  MobilePhone: ").Append(MobilePhone).Append("\n");
            sb.Append("  PastwordChangeDate: ").Append(PastwordChangeDate).Append("\n");
            sb.Append("  PastwordChangeIndicator: ").Append(PastwordChangeIndicator).Append("\n");
            sb.Append("  PastTransactionsDay: ").Append(PastTransactionsDay).Append("\n");
            sb.Append("  PastTransactionsYear: ").Append(PastTransactionsYear).Append("\n");
            sb.Append("  PaymentAccountAge: ").Append(PaymentAccountAge).Append("\n");
            sb.Append("  PaymentAccountIndicator: ").Append(PaymentAccountIndicator).Append("\n");
            sb.Append("  PurchasesLast6Months: ").Append(PurchasesLast6Months).Append("\n");
            sb.Append("  SuspiciousActivity: ").Append(SuspiciousActivity).Append("\n");
            sb.Append("  WorkPhone: ").Append(WorkPhone).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }

        /// 
        /// Returns the JSON string presentation of the object
        /// 
        /// JSON string presentation of the object
        public virtual string ToJson()
        {
            return JsonConvert.SerializeObject(this, Formatting.Indented);
        }

        /// 
        /// Returns true if objects are equal
        /// 
        /// Object to be compared
        /// Boolean
        public override bool Equals(object input)
        {
            return this.Equals(input as AccountInfo);
        }

        /// 
        /// Returns true if AccountInfo instances are equal
        /// 
        /// Instance of AccountInfo to be compared
        /// Boolean
        public bool Equals(AccountInfo input)
        {
            if (input == null)
                return false;

            return
                (
                    this.AccountAgeIndicator == input.AccountAgeIndicator ||
                    this.AccountAgeIndicator != null &&
                    this.AccountAgeIndicator.Equals(input.AccountAgeIndicator)
                ) &&
                (
                    this.AccountChangeDate == input.AccountChangeDate ||
                    this.AccountChangeDate != null &&
                    this.AccountChangeDate.Equals(input.AccountChangeDate)
                ) &&
                (
                    this.AccountChangeIndicator == input.AccountChangeIndicator ||
                    this.AccountChangeIndicator != null &&
                    this.AccountChangeIndicator.Equals(input.AccountChangeIndicator)
                ) &&
                (
                    this.AccountCreationDate == input.AccountCreationDate ||
                    this.AccountCreationDate != null &&
                    this.AccountCreationDate.Equals(input.AccountCreationDate)
                ) &&
                (
                    this.AccountType == input.AccountType ||
                    this.AccountType != null &&
                    this.AccountType.Equals(input.AccountType)
                ) &&
                (
                    this.AddCardAttemptsDay == input.AddCardAttemptsDay ||
                    this.AddCardAttemptsDay != null &&
                    this.AddCardAttemptsDay.Equals(input.AddCardAttemptsDay)
                ) &&
                (
                    this.DeliveryAddressUsageDate == input.DeliveryAddressUsageDate ||
                    this.DeliveryAddressUsageDate != null &&
                    this.DeliveryAddressUsageDate.Equals(input.DeliveryAddressUsageDate)
                ) &&
                (
                    this.DeliveryAddressUsageIndicator == input.DeliveryAddressUsageIndicator ||
                    this.DeliveryAddressUsageIndicator != null &&
                    this.DeliveryAddressUsageIndicator.Equals(input.DeliveryAddressUsageIndicator)
                ) &&
                (
                    this.HomePhone == input.HomePhone ||
                    this.HomePhone != null &&
                    this.HomePhone.Equals(input.HomePhone)
                ) &&
                (
                    this.MobilePhone == input.MobilePhone ||
                    this.MobilePhone != null &&
                    this.MobilePhone.Equals(input.MobilePhone)
                ) &&
                (
                    this.PastwordChangeDate == input.PastwordChangeDate ||
                    this.PastwordChangeDate != null &&
                    this.PastwordChangeDate.Equals(input.PastwordChangeDate)
                ) &&
                (
                    this.PastwordChangeIndicator == input.PastwordChangeIndicator ||
                    this.PastwordChangeIndicator != null &&
                    this.PastwordChangeIndicator.Equals(input.PastwordChangeIndicator)
                ) &&
                (
                    this.PastTransactionsDay == input.PastTransactionsDay ||
                    this.PastTransactionsDay != null &&
                    this.PastTransactionsDay.Equals(input.PastTransactionsDay)
                ) &&
                (
                    this.PastTransactionsYear == input.PastTransactionsYear ||
                    this.PastTransactionsYear != null &&
                    this.PastTransactionsYear.Equals(input.PastTransactionsYear)
                ) &&
                (
                    this.PaymentAccountAge == input.PaymentAccountAge ||
                    this.PaymentAccountAge != null &&
                    this.PaymentAccountAge.Equals(input.PaymentAccountAge)
                ) &&
                (
                    this.PaymentAccountIndicator == input.PaymentAccountIndicator ||
                    this.PaymentAccountIndicator != null &&
                    this.PaymentAccountIndicator.Equals(input.PaymentAccountIndicator)
                ) &&
                (
                    this.PurchasesLast6Months == input.PurchasesLast6Months ||
                    this.PurchasesLast6Months != null &&
                    this.PurchasesLast6Months.Equals(input.PurchasesLast6Months)
                ) &&
                (
                    this.SuspiciousActivity == input.SuspiciousActivity ||
                    this.SuspiciousActivity != null &&
                    this.SuspiciousActivity.Equals(input.SuspiciousActivity)
                ) &&
                (
                    this.WorkPhone == input.WorkPhone ||
                    this.WorkPhone != null &&
                    this.WorkPhone.Equals(input.WorkPhone)
                );
        }

        /// 
        /// Gets the hash code
        /// 
        /// Hash code
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.AccountAgeIndicator != null)
                    hashCode = hashCode * 59 + this.AccountAgeIndicator.GetHashCode();
                if (this.AccountChangeDate != null)
                    hashCode = hashCode * 59 + this.AccountChangeDate.GetHashCode();
                if (this.AccountChangeIndicator != null)
                    hashCode = hashCode * 59 + this.AccountChangeIndicator.GetHashCode();
                if (this.AccountCreationDate != null)
                    hashCode = hashCode * 59 + this.AccountCreationDate.GetHashCode();
                if (this.AccountType != null)
                    hashCode = hashCode * 59 + this.AccountType.GetHashCode();
                if (this.AddCardAttemptsDay != null)
                    hashCode = hashCode * 59 + this.AddCardAttemptsDay.GetHashCode();
                if (this.DeliveryAddressUsageDate != null)
                    hashCode = hashCode * 59 + this.DeliveryAddressUsageDate.GetHashCode();
                if (this.DeliveryAddressUsageIndicator != null)
                    hashCode = hashCode * 59 + this.DeliveryAddressUsageIndicator.GetHashCode();
                if (this.HomePhone != null)
                    hashCode = hashCode * 59 + this.HomePhone.GetHashCode();
                if (this.MobilePhone != null)
                    hashCode = hashCode * 59 + this.MobilePhone.GetHashCode();
                if (this.PastwordChangeDate != null)
                    hashCode = hashCode * 59 + this.PastwordChangeDate.GetHashCode();
                if (this.PastwordChangeIndicator != null)
                    hashCode = hashCode * 59 + this.PastwordChangeIndicator.GetHashCode();
                if (this.PastTransactionsDay != null)
                    hashCode = hashCode * 59 + this.PastTransactionsDay.GetHashCode();
                if (this.PastTransactionsYear != null)
                    hashCode = hashCode * 59 + this.PastTransactionsYear.GetHashCode();
                if (this.PaymentAccountAge != null)
                    hashCode = hashCode * 59 + this.PaymentAccountAge.GetHashCode();
                if (this.PaymentAccountIndicator != null)
                    hashCode = hashCode * 59 + this.PaymentAccountIndicator.GetHashCode();
                if (this.PurchasesLast6Months != null)
                    hashCode = hashCode * 59 + this.PurchasesLast6Months.GetHashCode();
                if (this.SuspiciousActivity != null)
                    hashCode = hashCode * 59 + this.SuspiciousActivity.GetHashCode();
                if (this.WorkPhone != null)
                    hashCode = hashCode * 59 + this.WorkPhone.GetHashCode();
                return hashCode;
            }
        }

        /// 
        /// To validate all properties of the instance
        /// 
        /// Validation context
        /// Validation Result
        IEnumerable IValidatableObject.Validate(
            ValidationContext validationContext)
        {
            yield break;
        }
    }
}