/* 
 * GK application - OmniPOS Service API
 *
 * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)
 *
 * OpenAPI spec version: 5.21.1-b03
 * 
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 */

using System;
using System.Linq;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Runtime.Serialization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.ComponentModel.DataAnnotations;
using SwaggerDateConverter = IO.Swagger.Client.SwaggerDateConverter;

namespace IO.Swagger.Model
{
    /// <summary>
    /// PosUOMItemSellingPriceDO &lt;p&gt;Selling price&lt;br /&gt;&lt;/p&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDO :  IEquatable<ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDO>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDO" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDO() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDO" /> class.
        /// </summary>
        /// <param name="key">&lt;p&gt;Getter for inner key class.&lt;/p&gt; (required).</param>
        /// <param name="priceExpirationDate">&lt;p&gt;Expiration (end) time stamp of the price&lt;br /&gt;&lt;/p&gt; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone).</param>
        /// <param name="priceAmount">&lt;p&gt;Amount of the price&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="packagePriceQuantity">packagePriceQuantity.</param>
        /// <param name="priceGroupId">priceGroupId.</param>
        /// <param name="description">&lt;p&gt;Additional information concerning the price (e.g. campaign number)&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM18">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM19">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM20">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM21">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM22">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM23">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM24">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM25">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM26">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM27">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM28">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM29">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM30">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM01">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM02">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM03">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM04">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM05">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM06">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM07">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM08">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM09">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM10">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM11">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM12">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM13">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM14">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM15">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM16">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxCUSTOM17">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        public ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDO(ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDOKey key = default(ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDOKey), string priceExpirationDate = default(string), double? priceAmount = default(double?), int? packagePriceQuantity = default(int?), string priceGroupId = default(string), string description = default(string), string xxCUSTOM18 = default(string), string xxCUSTOM19 = default(string), string xxCUSTOM20 = default(string), string xxCUSTOM21 = default(string), string xxCUSTOM22 = default(string), string xxCUSTOM23 = default(string), string xxCUSTOM24 = default(string), string xxCUSTOM25 = default(string), string xxCUSTOM26 = default(string), string xxCUSTOM27 = default(string), string xxCUSTOM28 = default(string), string xxCUSTOM29 = default(string), string xxCUSTOM30 = default(string), string xxCUSTOM01 = default(string), string xxCUSTOM02 = default(string), string xxCUSTOM03 = default(string), string xxCUSTOM04 = default(string), string xxCUSTOM05 = default(string), string xxCUSTOM06 = default(string), string xxCUSTOM07 = default(string), string xxCUSTOM08 = default(string), string xxCUSTOM09 = default(string), string xxCUSTOM10 = default(string), string xxCUSTOM11 = default(string), string xxCUSTOM12 = default(string), string xxCUSTOM13 = default(string), string xxCUSTOM14 = default(string), string xxCUSTOM15 = default(string), string xxCUSTOM16 = default(string), string xxCUSTOM17 = default(string))
        {
            // to ensure "key" is required (not null)
            if (key == null)
            {
                throw new InvalidDataException("key is a required property for ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDO and cannot be null");
            }
            else
            {
                this.Key = key;
            }
            this.PriceExpirationDate = priceExpirationDate;
            this.PriceAmount = priceAmount;
            this.PackagePriceQuantity = packagePriceQuantity;
            this.PriceGroupId = priceGroupId;
            this.Description = description;
            this.XxCUSTOM18 = xxCUSTOM18;
            this.XxCUSTOM19 = xxCUSTOM19;
            this.XxCUSTOM20 = xxCUSTOM20;
            this.XxCUSTOM21 = xxCUSTOM21;
            this.XxCUSTOM22 = xxCUSTOM22;
            this.XxCUSTOM23 = xxCUSTOM23;
            this.XxCUSTOM24 = xxCUSTOM24;
            this.XxCUSTOM25 = xxCUSTOM25;
            this.XxCUSTOM26 = xxCUSTOM26;
            this.XxCUSTOM27 = xxCUSTOM27;
            this.XxCUSTOM28 = xxCUSTOM28;
            this.XxCUSTOM29 = xxCUSTOM29;
            this.XxCUSTOM30 = xxCUSTOM30;
            this.XxCUSTOM01 = xxCUSTOM01;
            this.XxCUSTOM02 = xxCUSTOM02;
            this.XxCUSTOM03 = xxCUSTOM03;
            this.XxCUSTOM04 = xxCUSTOM04;
            this.XxCUSTOM05 = xxCUSTOM05;
            this.XxCUSTOM06 = xxCUSTOM06;
            this.XxCUSTOM07 = xxCUSTOM07;
            this.XxCUSTOM08 = xxCUSTOM08;
            this.XxCUSTOM09 = xxCUSTOM09;
            this.XxCUSTOM10 = xxCUSTOM10;
            this.XxCUSTOM11 = xxCUSTOM11;
            this.XxCUSTOM12 = xxCUSTOM12;
            this.XxCUSTOM13 = xxCUSTOM13;
            this.XxCUSTOM14 = xxCUSTOM14;
            this.XxCUSTOM15 = xxCUSTOM15;
            this.XxCUSTOM16 = xxCUSTOM16;
            this.XxCUSTOM17 = xxCUSTOM17;
        }
        
        /// <summary>
        /// &lt;p&gt;Getter for inner key class.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Getter for inner key class.&lt;/p&gt;</value>
        [DataMember(Name="key", EmitDefaultValue=false)]
        public ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDOKey Key { get; set; }

        /// <summary>
        /// &lt;p&gt;Expiration (end) time stamp of the price&lt;br /&gt;&lt;/p&gt; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)
        /// </summary>
        /// <value>&lt;p&gt;Expiration (end) time stamp of the price&lt;br /&gt;&lt;/p&gt; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)</value>
        [DataMember(Name="priceExpirationDate", EmitDefaultValue=false)]
        public string PriceExpirationDate { get; set; }

        /// <summary>
        /// &lt;p&gt;Amount of the price&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Amount of the price&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="priceAmount", EmitDefaultValue=false)]
        public double? PriceAmount { get; set; }

        /// <summary>
        /// Gets or Sets PackagePriceQuantity
        /// </summary>
        [DataMember(Name="packagePriceQuantity", EmitDefaultValue=false)]
        public int? PackagePriceQuantity { get; set; }

        /// <summary>
        /// Gets or Sets PriceGroupId
        /// </summary>
        [DataMember(Name="priceGroupId", EmitDefaultValue=false)]
        public string PriceGroupId { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional information concerning the price (e.g. campaign number)&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional information concerning the price (e.g. campaign number)&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="description", EmitDefaultValue=false)]
        public string Description { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_18", EmitDefaultValue=false)]
        public string XxCUSTOM18 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_19", EmitDefaultValue=false)]
        public string XxCUSTOM19 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_20", EmitDefaultValue=false)]
        public string XxCUSTOM20 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_21", EmitDefaultValue=false)]
        public string XxCUSTOM21 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_22", EmitDefaultValue=false)]
        public string XxCUSTOM22 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_23", EmitDefaultValue=false)]
        public string XxCUSTOM23 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_24", EmitDefaultValue=false)]
        public string XxCUSTOM24 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_25", EmitDefaultValue=false)]
        public string XxCUSTOM25 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_26", EmitDefaultValue=false)]
        public string XxCUSTOM26 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_27", EmitDefaultValue=false)]
        public string XxCUSTOM27 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_28", EmitDefaultValue=false)]
        public string XxCUSTOM28 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_29", EmitDefaultValue=false)]
        public string XxCUSTOM29 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_30", EmitDefaultValue=false)]
        public string XxCUSTOM30 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_01", EmitDefaultValue=false)]
        public string XxCUSTOM01 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_02", EmitDefaultValue=false)]
        public string XxCUSTOM02 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_03", EmitDefaultValue=false)]
        public string XxCUSTOM03 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_04", EmitDefaultValue=false)]
        public string XxCUSTOM04 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_05", EmitDefaultValue=false)]
        public string XxCUSTOM05 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_06", EmitDefaultValue=false)]
        public string XxCUSTOM06 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_07", EmitDefaultValue=false)]
        public string XxCUSTOM07 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_08", EmitDefaultValue=false)]
        public string XxCUSTOM08 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_09", EmitDefaultValue=false)]
        public string XxCUSTOM09 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_10", EmitDefaultValue=false)]
        public string XxCUSTOM10 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_11", EmitDefaultValue=false)]
        public string XxCUSTOM11 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_12", EmitDefaultValue=false)]
        public string XxCUSTOM12 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_13", EmitDefaultValue=false)]
        public string XxCUSTOM13 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_14", EmitDefaultValue=false)]
        public string XxCUSTOM14 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_15", EmitDefaultValue=false)]
        public string XxCUSTOM15 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_16", EmitDefaultValue=false)]
        public string XxCUSTOM16 { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="xx_CUSTOM_17", EmitDefaultValue=false)]
        public string XxCUSTOM17 { get; set; }

        /// <summary>
        /// Returns the string presentation of the object
        /// </summary>
        /// <returns>String presentation of the object</returns>
        public override string ToString()
        {
            var sb = new StringBuilder();
            sb.Append("class ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDO {\n");
            sb.Append("  Key: ").Append(Key).Append("\n");
            sb.Append("  PriceExpirationDate: ").Append(PriceExpirationDate).Append("\n");
            sb.Append("  PriceAmount: ").Append(PriceAmount).Append("\n");
            sb.Append("  PackagePriceQuantity: ").Append(PackagePriceQuantity).Append("\n");
            sb.Append("  PriceGroupId: ").Append(PriceGroupId).Append("\n");
            sb.Append("  Description: ").Append(Description).Append("\n");
            sb.Append("  XxCUSTOM18: ").Append(XxCUSTOM18).Append("\n");
            sb.Append("  XxCUSTOM19: ").Append(XxCUSTOM19).Append("\n");
            sb.Append("  XxCUSTOM20: ").Append(XxCUSTOM20).Append("\n");
            sb.Append("  XxCUSTOM21: ").Append(XxCUSTOM21).Append("\n");
            sb.Append("  XxCUSTOM22: ").Append(XxCUSTOM22).Append("\n");
            sb.Append("  XxCUSTOM23: ").Append(XxCUSTOM23).Append("\n");
            sb.Append("  XxCUSTOM24: ").Append(XxCUSTOM24).Append("\n");
            sb.Append("  XxCUSTOM25: ").Append(XxCUSTOM25).Append("\n");
            sb.Append("  XxCUSTOM26: ").Append(XxCUSTOM26).Append("\n");
            sb.Append("  XxCUSTOM27: ").Append(XxCUSTOM27).Append("\n");
            sb.Append("  XxCUSTOM28: ").Append(XxCUSTOM28).Append("\n");
            sb.Append("  XxCUSTOM29: ").Append(XxCUSTOM29).Append("\n");
            sb.Append("  XxCUSTOM30: ").Append(XxCUSTOM30).Append("\n");
            sb.Append("  XxCUSTOM01: ").Append(XxCUSTOM01).Append("\n");
            sb.Append("  XxCUSTOM02: ").Append(XxCUSTOM02).Append("\n");
            sb.Append("  XxCUSTOM03: ").Append(XxCUSTOM03).Append("\n");
            sb.Append("  XxCUSTOM04: ").Append(XxCUSTOM04).Append("\n");
            sb.Append("  XxCUSTOM05: ").Append(XxCUSTOM05).Append("\n");
            sb.Append("  XxCUSTOM06: ").Append(XxCUSTOM06).Append("\n");
            sb.Append("  XxCUSTOM07: ").Append(XxCUSTOM07).Append("\n");
            sb.Append("  XxCUSTOM08: ").Append(XxCUSTOM08).Append("\n");
            sb.Append("  XxCUSTOM09: ").Append(XxCUSTOM09).Append("\n");
            sb.Append("  XxCUSTOM10: ").Append(XxCUSTOM10).Append("\n");
            sb.Append("  XxCUSTOM11: ").Append(XxCUSTOM11).Append("\n");
            sb.Append("  XxCUSTOM12: ").Append(XxCUSTOM12).Append("\n");
            sb.Append("  XxCUSTOM13: ").Append(XxCUSTOM13).Append("\n");
            sb.Append("  XxCUSTOM14: ").Append(XxCUSTOM14).Append("\n");
            sb.Append("  XxCUSTOM15: ").Append(XxCUSTOM15).Append("\n");
            sb.Append("  XxCUSTOM16: ").Append(XxCUSTOM16).Append("\n");
            sb.Append("  XxCUSTOM17: ").Append(XxCUSTOM17).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }
  
        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return JsonConvert.SerializeObject(this, Formatting.Indented);
        }

        /// <summary>
        /// Returns true if objects are equal
        /// </summary>
        /// <param name="input">Object to be compared</param>
        /// <returns>Boolean</returns>
        public override bool Equals(object input)
        {
            return this.Equals(input as ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDO);
        }

        /// <summary>
        /// Returns true if ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDO instances are equal
        /// </summary>
        /// <param name="input">Instance of ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDO to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSellingPriceDO input)
        {
            if (input == null)
                return false;

            return 
                (
                    this.Key == input.Key ||
                    (this.Key != null &&
                    this.Key.Equals(input.Key))
                ) && 
                (
                    this.PriceExpirationDate == input.PriceExpirationDate ||
                    (this.PriceExpirationDate != null &&
                    this.PriceExpirationDate.Equals(input.PriceExpirationDate))
                ) && 
                (
                    this.PriceAmount == input.PriceAmount ||
                    (this.PriceAmount != null &&
                    this.PriceAmount.Equals(input.PriceAmount))
                ) && 
                (
                    this.PackagePriceQuantity == input.PackagePriceQuantity ||
                    (this.PackagePriceQuantity != null &&
                    this.PackagePriceQuantity.Equals(input.PackagePriceQuantity))
                ) && 
                (
                    this.PriceGroupId == input.PriceGroupId ||
                    (this.PriceGroupId != null &&
                    this.PriceGroupId.Equals(input.PriceGroupId))
                ) && 
                (
                    this.Description == input.Description ||
                    (this.Description != null &&
                    this.Description.Equals(input.Description))
                ) && 
                (
                    this.XxCUSTOM18 == input.XxCUSTOM18 ||
                    (this.XxCUSTOM18 != null &&
                    this.XxCUSTOM18.Equals(input.XxCUSTOM18))
                ) && 
                (
                    this.XxCUSTOM19 == input.XxCUSTOM19 ||
                    (this.XxCUSTOM19 != null &&
                    this.XxCUSTOM19.Equals(input.XxCUSTOM19))
                ) && 
                (
                    this.XxCUSTOM20 == input.XxCUSTOM20 ||
                    (this.XxCUSTOM20 != null &&
                    this.XxCUSTOM20.Equals(input.XxCUSTOM20))
                ) && 
                (
                    this.XxCUSTOM21 == input.XxCUSTOM21 ||
                    (this.XxCUSTOM21 != null &&
                    this.XxCUSTOM21.Equals(input.XxCUSTOM21))
                ) && 
                (
                    this.XxCUSTOM22 == input.XxCUSTOM22 ||
                    (this.XxCUSTOM22 != null &&
                    this.XxCUSTOM22.Equals(input.XxCUSTOM22))
                ) && 
                (
                    this.XxCUSTOM23 == input.XxCUSTOM23 ||
                    (this.XxCUSTOM23 != null &&
                    this.XxCUSTOM23.Equals(input.XxCUSTOM23))
                ) && 
                (
                    this.XxCUSTOM24 == input.XxCUSTOM24 ||
                    (this.XxCUSTOM24 != null &&
                    this.XxCUSTOM24.Equals(input.XxCUSTOM24))
                ) && 
                (
                    this.XxCUSTOM25 == input.XxCUSTOM25 ||
                    (this.XxCUSTOM25 != null &&
                    this.XxCUSTOM25.Equals(input.XxCUSTOM25))
                ) && 
                (
                    this.XxCUSTOM26 == input.XxCUSTOM26 ||
                    (this.XxCUSTOM26 != null &&
                    this.XxCUSTOM26.Equals(input.XxCUSTOM26))
                ) && 
                (
                    this.XxCUSTOM27 == input.XxCUSTOM27 ||
                    (this.XxCUSTOM27 != null &&
                    this.XxCUSTOM27.Equals(input.XxCUSTOM27))
                ) && 
                (
                    this.XxCUSTOM28 == input.XxCUSTOM28 ||
                    (this.XxCUSTOM28 != null &&
                    this.XxCUSTOM28.Equals(input.XxCUSTOM28))
                ) && 
                (
                    this.XxCUSTOM29 == input.XxCUSTOM29 ||
                    (this.XxCUSTOM29 != null &&
                    this.XxCUSTOM29.Equals(input.XxCUSTOM29))
                ) && 
                (
                    this.XxCUSTOM30 == input.XxCUSTOM30 ||
                    (this.XxCUSTOM30 != null &&
                    this.XxCUSTOM30.Equals(input.XxCUSTOM30))
                ) && 
                (
                    this.XxCUSTOM01 == input.XxCUSTOM01 ||
                    (this.XxCUSTOM01 != null &&
                    this.XxCUSTOM01.Equals(input.XxCUSTOM01))
                ) && 
                (
                    this.XxCUSTOM02 == input.XxCUSTOM02 ||
                    (this.XxCUSTOM02 != null &&
                    this.XxCUSTOM02.Equals(input.XxCUSTOM02))
                ) && 
                (
                    this.XxCUSTOM03 == input.XxCUSTOM03 ||
                    (this.XxCUSTOM03 != null &&
                    this.XxCUSTOM03.Equals(input.XxCUSTOM03))
                ) && 
                (
                    this.XxCUSTOM04 == input.XxCUSTOM04 ||
                    (this.XxCUSTOM04 != null &&
                    this.XxCUSTOM04.Equals(input.XxCUSTOM04))
                ) && 
                (
                    this.XxCUSTOM05 == input.XxCUSTOM05 ||
                    (this.XxCUSTOM05 != null &&
                    this.XxCUSTOM05.Equals(input.XxCUSTOM05))
                ) && 
                (
                    this.XxCUSTOM06 == input.XxCUSTOM06 ||
                    (this.XxCUSTOM06 != null &&
                    this.XxCUSTOM06.Equals(input.XxCUSTOM06))
                ) && 
                (
                    this.XxCUSTOM07 == input.XxCUSTOM07 ||
                    (this.XxCUSTOM07 != null &&
                    this.XxCUSTOM07.Equals(input.XxCUSTOM07))
                ) && 
                (
                    this.XxCUSTOM08 == input.XxCUSTOM08 ||
                    (this.XxCUSTOM08 != null &&
                    this.XxCUSTOM08.Equals(input.XxCUSTOM08))
                ) && 
                (
                    this.XxCUSTOM09 == input.XxCUSTOM09 ||
                    (this.XxCUSTOM09 != null &&
                    this.XxCUSTOM09.Equals(input.XxCUSTOM09))
                ) && 
                (
                    this.XxCUSTOM10 == input.XxCUSTOM10 ||
                    (this.XxCUSTOM10 != null &&
                    this.XxCUSTOM10.Equals(input.XxCUSTOM10))
                ) && 
                (
                    this.XxCUSTOM11 == input.XxCUSTOM11 ||
                    (this.XxCUSTOM11 != null &&
                    this.XxCUSTOM11.Equals(input.XxCUSTOM11))
                ) && 
                (
                    this.XxCUSTOM12 == input.XxCUSTOM12 ||
                    (this.XxCUSTOM12 != null &&
                    this.XxCUSTOM12.Equals(input.XxCUSTOM12))
                ) && 
                (
                    this.XxCUSTOM13 == input.XxCUSTOM13 ||
                    (this.XxCUSTOM13 != null &&
                    this.XxCUSTOM13.Equals(input.XxCUSTOM13))
                ) && 
                (
                    this.XxCUSTOM14 == input.XxCUSTOM14 ||
                    (this.XxCUSTOM14 != null &&
                    this.XxCUSTOM14.Equals(input.XxCUSTOM14))
                ) && 
                (
                    this.XxCUSTOM15 == input.XxCUSTOM15 ||
                    (this.XxCUSTOM15 != null &&
                    this.XxCUSTOM15.Equals(input.XxCUSTOM15))
                ) && 
                (
                    this.XxCUSTOM16 == input.XxCUSTOM16 ||
                    (this.XxCUSTOM16 != null &&
                    this.XxCUSTOM16.Equals(input.XxCUSTOM16))
                ) && 
                (
                    this.XxCUSTOM17 == input.XxCUSTOM17 ||
                    (this.XxCUSTOM17 != null &&
                    this.XxCUSTOM17.Equals(input.XxCUSTOM17))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Key != null)
                    hashCode = hashCode * 59 + this.Key.GetHashCode();
                if (this.PriceExpirationDate != null)
                    hashCode = hashCode * 59 + this.PriceExpirationDate.GetHashCode();
                if (this.PriceAmount != null)
                    hashCode = hashCode * 59 + this.PriceAmount.GetHashCode();
                if (this.PackagePriceQuantity != null)
                    hashCode = hashCode * 59 + this.PackagePriceQuantity.GetHashCode();
                if (this.PriceGroupId != null)
                    hashCode = hashCode * 59 + this.PriceGroupId.GetHashCode();
                if (this.Description != null)
                    hashCode = hashCode * 59 + this.Description.GetHashCode();
                if (this.XxCUSTOM18 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM18.GetHashCode();
                if (this.XxCUSTOM19 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM19.GetHashCode();
                if (this.XxCUSTOM20 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM20.GetHashCode();
                if (this.XxCUSTOM21 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM21.GetHashCode();
                if (this.XxCUSTOM22 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM22.GetHashCode();
                if (this.XxCUSTOM23 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM23.GetHashCode();
                if (this.XxCUSTOM24 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM24.GetHashCode();
                if (this.XxCUSTOM25 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM25.GetHashCode();
                if (this.XxCUSTOM26 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM26.GetHashCode();
                if (this.XxCUSTOM27 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM27.GetHashCode();
                if (this.XxCUSTOM28 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM28.GetHashCode();
                if (this.XxCUSTOM29 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM29.GetHashCode();
                if (this.XxCUSTOM30 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM30.GetHashCode();
                if (this.XxCUSTOM01 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM01.GetHashCode();
                if (this.XxCUSTOM02 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM02.GetHashCode();
                if (this.XxCUSTOM03 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM03.GetHashCode();
                if (this.XxCUSTOM04 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM04.GetHashCode();
                if (this.XxCUSTOM05 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM05.GetHashCode();
                if (this.XxCUSTOM06 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM06.GetHashCode();
                if (this.XxCUSTOM07 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM07.GetHashCode();
                if (this.XxCUSTOM08 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM08.GetHashCode();
                if (this.XxCUSTOM09 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM09.GetHashCode();
                if (this.XxCUSTOM10 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM10.GetHashCode();
                if (this.XxCUSTOM11 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM11.GetHashCode();
                if (this.XxCUSTOM12 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM12.GetHashCode();
                if (this.XxCUSTOM13 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM13.GetHashCode();
                if (this.XxCUSTOM14 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM14.GetHashCode();
                if (this.XxCUSTOM15 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM15.GetHashCode();
                if (this.XxCUSTOM16 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM16.GetHashCode();
                if (this.XxCUSTOM17 != null)
                    hashCode = hashCode * 59 + this.XxCUSTOM17.GetHashCode();
                return hashCode;
            }
        }

        /// <summary>
        /// To validate all properties of the instance
        /// </summary>
        /// <param name="validationContext">Validation context</param>
        /// <returns>Validation Result</returns>
        IEnumerable<System.ComponentModel.DataAnnotations.ValidationResult> IValidatableObject.Validate(ValidationContext validationContext)
        {
            yield break;
        }
    }

}
