/* 
 * 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>
    /// ItemSellingRuleSO &lt;p&gt;This object is a set of rules used for item selling.&lt;br /&gt; The rules can be referred from the item object and merchandise hierarchy group object.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The fields of this rule object are imported directly on the item / MHG, but saved as a separate domain object to save storage place.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Import from masterData_Item.xml from the element Item.UOMItem.ItemSellingRule.&lt;br /&gt; Import from masterData_BusinessUnit.xml from the element BusinessUnit.MerchandiseHierarchyGroupDetail.ItemSellingRule: DiscountFlag, BonusPointsFlag and NegativePositionFlag.&lt;br /&gt;&lt;/p&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO :  IEquatable<ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO>, IValidatableObject
    {
        /// <summary>
        /// &lt;p&gt;Type code for controlling the quantity input&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Type code for controlling the quantity input&lt;br /&gt;&lt;/p&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum QuantityInputTypeCodeEnum
        {
            
            /// <summary>
            /// Enum POSSIBLE for value: POSSIBLE
            /// </summary>
            [EnumMember(Value = "POSSIBLE")]
            POSSIBLE = 1,
            
            /// <summary>
            /// Enum REQUIRED for value: REQUIRED
            /// </summary>
            [EnumMember(Value = "REQUIRED")]
            REQUIRED = 2,
            
            /// <summary>
            /// Enum PROHIBITED for value: PROHIBITED
            /// </summary>
            [EnumMember(Value = "PROHIBITED")]
            PROHIBITED = 3
        }

        /// <summary>
        /// &lt;p&gt;Type code for controlling the quantity input&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Type code for controlling the quantity input&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="quantityInputTypeCode", EmitDefaultValue=false)]
        public QuantityInputTypeCodeEnum QuantityInputTypeCode { get; set; }
        /// <summary>
        /// &lt;p&gt;Determines how the input of quantity is done on POS&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines how the input of quantity is done on POS&lt;br /&gt;&lt;/p&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum QuantityInputMethodEnum
        {
            
            /// <summary>
            /// Enum PIECE for value: PIECE
            /// </summary>
            [EnumMember(Value = "PIECE")]
            PIECE = 1,
            
            /// <summary>
            /// Enum LENGTH for value: LENGTH
            /// </summary>
            [EnumMember(Value = "LENGTH")]
            LENGTH = 2,
            
            /// <summary>
            /// Enum AREA for value: AREA
            /// </summary>
            [EnumMember(Value = "AREA")]
            AREA = 3,
            
            /// <summary>
            /// Enum VOLUMESPACE for value: VOLUME_SPACE
            /// </summary>
            [EnumMember(Value = "VOLUME_SPACE")]
            VOLUMESPACE = 4,
            
            /// <summary>
            /// Enum WEIGHT for value: WEIGHT
            /// </summary>
            [EnumMember(Value = "WEIGHT")]
            WEIGHT = 5,
            
            /// <summary>
            /// Enum QUANTITYAUTOMATIC for value: QUANTITY_AUTOMATIC
            /// </summary>
            [EnumMember(Value = "QUANTITY_AUTOMATIC")]
            QUANTITYAUTOMATIC = 6,
            
            /// <summary>
            /// Enum QUANTITYMANUAL for value: QUANTITY_MANUAL
            /// </summary>
            [EnumMember(Value = "QUANTITY_MANUAL")]
            QUANTITYMANUAL = 7
        }

        /// <summary>
        /// &lt;p&gt;Determines how the input of quantity is done on POS&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines how the input of quantity is done on POS&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="quantityInputMethod", EmitDefaultValue=false)]
        public QuantityInputMethodEnum QuantityInputMethod { get; set; }
        /// <summary>
        /// &lt;p&gt;Type code for the manual price change.&lt;br /&gt; Values:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00 &#x3D; price 0.00 not allowed LIMITED,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01 &#x3D; price 0.00 allowed - POSSIBLE,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02 &#x3D; no price change allowed - PROHIBITED&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Type code for the manual price change.&lt;br /&gt; Values:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00 &#x3D; price 0.00 not allowed LIMITED,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01 &#x3D; price 0.00 allowed - POSSIBLE,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02 &#x3D; no price change allowed - PROHIBITED&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PriceChangeTypeCodeEnum
        {
            
            /// <summary>
            /// Enum POSSIBLE for value: POSSIBLE
            /// </summary>
            [EnumMember(Value = "POSSIBLE")]
            POSSIBLE = 1,
            
            /// <summary>
            /// Enum LIMITED for value: LIMITED
            /// </summary>
            [EnumMember(Value = "LIMITED")]
            LIMITED = 2,
            
            /// <summary>
            /// Enum PROHIBITED for value: PROHIBITED
            /// </summary>
            [EnumMember(Value = "PROHIBITED")]
            PROHIBITED = 3
        }

        /// <summary>
        /// &lt;p&gt;Type code for the manual price change.&lt;br /&gt; Values:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00 &#x3D; price 0.00 not allowed LIMITED,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01 &#x3D; price 0.00 allowed - POSSIBLE,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02 &#x3D; no price change allowed - PROHIBITED&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Type code for the manual price change.&lt;br /&gt; Values:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00 &#x3D; price 0.00 not allowed LIMITED,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01 &#x3D; price 0.00 allowed - POSSIBLE,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02 &#x3D; no price change allowed - PROHIBITED&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="priceChangeTypeCode", EmitDefaultValue=false)]
        public PriceChangeTypeCodeEnum PriceChangeTypeCode { get; set; }
        /// <summary>
        /// &lt;p&gt;Bar code handling method&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Bar code handling method&lt;br /&gt;&lt;/p&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum BarCodeHandlingMethodEnum
        {
            
            /// <summary>
            /// Enum WEIGHT for value: WEIGHT
            /// </summary>
            [EnumMember(Value = "WEIGHT")]
            WEIGHT = 1,
            
            /// <summary>
            /// Enum PRICE for value: PRICE
            /// </summary>
            [EnumMember(Value = "PRICE")]
            PRICE = 2,
            
            /// <summary>
            /// Enum PRICEWEIGHT for value: PRICE_WEIGHT
            /// </summary>
            [EnumMember(Value = "PRICE_WEIGHT")]
            PRICEWEIGHT = 3
        }

        /// <summary>
        /// &lt;p&gt;Bar code handling method&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Bar code handling method&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="barCodeHandlingMethod", EmitDefaultValue=false)]
        public BarCodeHandlingMethodEnum BarCodeHandlingMethod { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO" /> class.
        /// </summary>
        /// <param name="itemSellingRuleId">&lt;p&gt;A unique system assigned identifier for the item selling rule.&lt;br /&gt; Generated, not imported.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="priceEntryRequiredFlag">&lt;p&gt;A flag to denote that the retail price is to be manually entered when this item is sold.&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="prohibitReturnFlag">&lt;p&gt;A flag to denote whether or not this item may be returned. (Eg: freezer or chilled merchandise)&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="allowFoodStampFlag">&lt;p&gt;A flag to indicate whether food stamps can be tendered for this item.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="wicFlag">&lt;p&gt;A flag denoting if this item is allowed in a WIC transaction.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="fsaCode">fsaCode.</param>
        /// <param name="deliveryStockAssortmentFlag">&lt;p&gt;A flag to indicate if the item can be delivered to the customer.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="retainPrepaymentFlag">&lt;p&gt;Determines whether a prepayment/downpayment position should be retained when an order of the item is voided (e.g. the prepayment could be retained if the order of a special measured item is voided)&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="takeAwayAllowedFlag">&lt;p&gt;A flag to indicate if the customer may take an item home to test it&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="serialNumberRequiredFlag">&lt;p&gt;Defines if the registration of the item requires a serial number input&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="taxExemptProbihitedFlag">&lt;p&gt;A flag to denote if no tax exemption is allowed for the item. True &#x3D; no tax exemption allowed.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="authorisedForSaleFlag">&lt;p&gt;A flag to indicate that the retail store is authorized to stock this particular item.&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="discountFlag">&lt;p&gt;A flag to indicate whether this item can be discounted.&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="bonusPointsFlag">&lt;p&gt;Determines whether bonus points are allowed for the item&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="quantityInputTypeCode">&lt;p&gt;Type code for controlling the quantity input&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="quantityInputMethod">&lt;p&gt;Determines how the input of quantity is done on POS&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="sellingEffectiveDate">&lt;p&gt;Date when selling of the item becomes effective&lt;br /&gt;&lt;/p&gt; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone) (required).</param>
        /// <param name="sellingExpirationDate">&lt;p&gt;Last date when the item is available for sale&lt;br /&gt;&lt;/p&gt; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone) (required).</param>
        /// <param name="negativePositionFlag">&lt;p&gt;If this flag is set to true, automatically a negative position is created when registering this item&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="priceChangeTypeCode">&lt;p&gt;Type code for the manual price change.&lt;br /&gt; Values:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt;00 &#x3D; price 0.00 not allowed LIMITED,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;01 &#x3D; price 0.00 allowed - POSSIBLE,&lt;/li&gt;&lt;br /&gt; &lt;li&gt;02 &#x3D; no price change allowed - PROHIBITED&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt; (required).</param>
        /// <param name="hidePriceFlag">&lt;p&gt;Determines whether the price is to be hided (not printed) on the receipt and to be hided (not shown)&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="showItemOnCustomerDisplayFlag">&lt;p&gt;Determines whether this item is to be shown on the customer display&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="barCodeHandlingMethod">&lt;p&gt;Bar code handling method&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="weightEntryRequiredFlag">&lt;p&gt;A flag to denote that the weight is to be registered when this item is sold&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="priceEntryOnScalesAllowedFlag">&lt;p&gt;Determines whether it is possible to register a price on scales&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="allowLayawayFlag">&lt;p&gt;Flag AllowLayawayFlag defines if an item is allowed for Layaway or not.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="layawayDiscountFlag">&lt;p&gt;Flag LayawayDiscountFlag defines if promotions are allowed for the &#39;Layaway&#39; item.&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 ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO(string itemSellingRuleId = default(string), bool? priceEntryRequiredFlag = default(bool?), bool? prohibitReturnFlag = default(bool?), bool? allowFoodStampFlag = default(bool?), bool? wicFlag = default(bool?), string fsaCode = default(string), bool? deliveryStockAssortmentFlag = default(bool?), bool? retainPrepaymentFlag = default(bool?), bool? takeAwayAllowedFlag = default(bool?), bool? serialNumberRequiredFlag = default(bool?), bool? taxExemptProbihitedFlag = default(bool?), bool? authorisedForSaleFlag = default(bool?), bool? discountFlag = default(bool?), bool? bonusPointsFlag = default(bool?), QuantityInputTypeCodeEnum quantityInputTypeCode = default(QuantityInputTypeCodeEnum), QuantityInputMethodEnum quantityInputMethod = default(QuantityInputMethodEnum), string sellingEffectiveDate = default(string), string sellingExpirationDate = default(string), bool? negativePositionFlag = default(bool?), PriceChangeTypeCodeEnum priceChangeTypeCode = default(PriceChangeTypeCodeEnum), bool? hidePriceFlag = default(bool?), bool? showItemOnCustomerDisplayFlag = default(bool?), BarCodeHandlingMethodEnum barCodeHandlingMethod = default(BarCodeHandlingMethodEnum), bool? weightEntryRequiredFlag = default(bool?), bool? priceEntryOnScalesAllowedFlag = default(bool?), bool? allowLayawayFlag = default(bool?), bool? layawayDiscountFlag = default(bool?), 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 "priceEntryRequiredFlag" is required (not null)
            if (priceEntryRequiredFlag == null)
            {
                throw new InvalidDataException("priceEntryRequiredFlag is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.PriceEntryRequiredFlag = priceEntryRequiredFlag;
            }
            // to ensure "prohibitReturnFlag" is required (not null)
            if (prohibitReturnFlag == null)
            {
                throw new InvalidDataException("prohibitReturnFlag is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.ProhibitReturnFlag = prohibitReturnFlag;
            }
            // to ensure "authorisedForSaleFlag" is required (not null)
            if (authorisedForSaleFlag == null)
            {
                throw new InvalidDataException("authorisedForSaleFlag is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.AuthorisedForSaleFlag = authorisedForSaleFlag;
            }
            // to ensure "discountFlag" is required (not null)
            if (discountFlag == null)
            {
                throw new InvalidDataException("discountFlag is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.DiscountFlag = discountFlag;
            }
            // to ensure "bonusPointsFlag" is required (not null)
            if (bonusPointsFlag == null)
            {
                throw new InvalidDataException("bonusPointsFlag is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.BonusPointsFlag = bonusPointsFlag;
            }
            // to ensure "quantityInputTypeCode" is required (not null)
            if (quantityInputTypeCode == null)
            {
                throw new InvalidDataException("quantityInputTypeCode is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.QuantityInputTypeCode = quantityInputTypeCode;
            }
            // to ensure "quantityInputMethod" is required (not null)
            if (quantityInputMethod == null)
            {
                throw new InvalidDataException("quantityInputMethod is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.QuantityInputMethod = quantityInputMethod;
            }
            // to ensure "sellingEffectiveDate" is required (not null)
            if (sellingEffectiveDate == null)
            {
                throw new InvalidDataException("sellingEffectiveDate is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.SellingEffectiveDate = sellingEffectiveDate;
            }
            // to ensure "sellingExpirationDate" is required (not null)
            if (sellingExpirationDate == null)
            {
                throw new InvalidDataException("sellingExpirationDate is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.SellingExpirationDate = sellingExpirationDate;
            }
            // to ensure "negativePositionFlag" is required (not null)
            if (negativePositionFlag == null)
            {
                throw new InvalidDataException("negativePositionFlag is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.NegativePositionFlag = negativePositionFlag;
            }
            // to ensure "priceChangeTypeCode" is required (not null)
            if (priceChangeTypeCode == null)
            {
                throw new InvalidDataException("priceChangeTypeCode is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.PriceChangeTypeCode = priceChangeTypeCode;
            }
            // to ensure "hidePriceFlag" is required (not null)
            if (hidePriceFlag == null)
            {
                throw new InvalidDataException("hidePriceFlag is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.HidePriceFlag = hidePriceFlag;
            }
            // to ensure "showItemOnCustomerDisplayFlag" is required (not null)
            if (showItemOnCustomerDisplayFlag == null)
            {
                throw new InvalidDataException("showItemOnCustomerDisplayFlag is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.ShowItemOnCustomerDisplayFlag = showItemOnCustomerDisplayFlag;
            }
            // to ensure "barCodeHandlingMethod" is required (not null)
            if (barCodeHandlingMethod == null)
            {
                throw new InvalidDataException("barCodeHandlingMethod is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.BarCodeHandlingMethod = barCodeHandlingMethod;
            }
            // to ensure "weightEntryRequiredFlag" is required (not null)
            if (weightEntryRequiredFlag == null)
            {
                throw new InvalidDataException("weightEntryRequiredFlag is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.WeightEntryRequiredFlag = weightEntryRequiredFlag;
            }
            // to ensure "priceEntryOnScalesAllowedFlag" is required (not null)
            if (priceEntryOnScalesAllowedFlag == null)
            {
                throw new InvalidDataException("priceEntryOnScalesAllowedFlag is a required property for ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO and cannot be null");
            }
            else
            {
                this.PriceEntryOnScalesAllowedFlag = priceEntryOnScalesAllowedFlag;
            }
            this.ItemSellingRuleId = itemSellingRuleId;
            this.AllowFoodStampFlag = allowFoodStampFlag;
            this.WicFlag = wicFlag;
            this.FsaCode = fsaCode;
            this.DeliveryStockAssortmentFlag = deliveryStockAssortmentFlag;
            this.RetainPrepaymentFlag = retainPrepaymentFlag;
            this.TakeAwayAllowedFlag = takeAwayAllowedFlag;
            this.SerialNumberRequiredFlag = serialNumberRequiredFlag;
            this.TaxExemptProbihitedFlag = taxExemptProbihitedFlag;
            this.AllowLayawayFlag = allowLayawayFlag;
            this.LayawayDiscountFlag = layawayDiscountFlag;
            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;A unique system assigned identifier for the item selling rule.&lt;br /&gt; Generated, not imported.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A unique system assigned identifier for the item selling rule.&lt;br /&gt; Generated, not imported.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="itemSellingRuleId", EmitDefaultValue=false)]
        public string ItemSellingRuleId { get; set; }

        /// <summary>
        /// &lt;p&gt;A flag to denote that the retail price is to be manually entered when this item is sold.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A flag to denote that the retail price is to be manually entered when this item is sold.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="priceEntryRequiredFlag", EmitDefaultValue=false)]
        public bool? PriceEntryRequiredFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;A flag to denote whether or not this item may be returned. (Eg: freezer or chilled merchandise)&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A flag to denote whether or not this item may be returned. (Eg: freezer or chilled merchandise)&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="prohibitReturnFlag", EmitDefaultValue=false)]
        public bool? ProhibitReturnFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;A flag to indicate whether food stamps can be tendered for this item.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A flag to indicate whether food stamps can be tendered for this item.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="allowFoodStampFlag", EmitDefaultValue=false)]
        public bool? AllowFoodStampFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;A flag denoting if this item is allowed in a WIC transaction.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A flag denoting if this item is allowed in a WIC transaction.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="wicFlag", EmitDefaultValue=false)]
        public bool? WicFlag { get; set; }

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

        /// <summary>
        /// &lt;p&gt;A flag to indicate if the item can be delivered to the customer.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A flag to indicate if the item can be delivered to the customer.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="deliveryStockAssortmentFlag", EmitDefaultValue=false)]
        public bool? DeliveryStockAssortmentFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Determines whether a prepayment/downpayment position should be retained when an order of the item is voided (e.g. the prepayment could be retained if the order of a special measured item is voided)&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether a prepayment/downpayment position should be retained when an order of the item is voided (e.g. the prepayment could be retained if the order of a special measured item is voided)&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="retainPrepaymentFlag", EmitDefaultValue=false)]
        public bool? RetainPrepaymentFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;A flag to indicate if the customer may take an item home to test it&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A flag to indicate if the customer may take an item home to test it&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="takeAwayAllowedFlag", EmitDefaultValue=false)]
        public bool? TakeAwayAllowedFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Defines if the registration of the item requires a serial number input&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines if the registration of the item requires a serial number input&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="serialNumberRequiredFlag", EmitDefaultValue=false)]
        public bool? SerialNumberRequiredFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;A flag to denote if no tax exemption is allowed for the item. True &#x3D; no tax exemption allowed.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A flag to denote if no tax exemption is allowed for the item. True &#x3D; no tax exemption allowed.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="taxExemptProbihitedFlag", EmitDefaultValue=false)]
        public bool? TaxExemptProbihitedFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;A flag to indicate that the retail store is authorized to stock this particular item.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A flag to indicate that the retail store is authorized to stock this particular item.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="authorisedForSaleFlag", EmitDefaultValue=false)]
        public bool? AuthorisedForSaleFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;A flag to indicate whether this item can be discounted.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A flag to indicate whether this item can be discounted.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="discountFlag", EmitDefaultValue=false)]
        public bool? DiscountFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Determines whether bonus points are allowed for the item&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether bonus points are allowed for the item&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="bonusPointsFlag", EmitDefaultValue=false)]
        public bool? BonusPointsFlag { get; set; }



        /// <summary>
        /// &lt;p&gt;Date when selling of the item becomes effective&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;Date when selling of the item becomes effective&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="sellingEffectiveDate", EmitDefaultValue=false)]
        public string SellingEffectiveDate { get; set; }

        /// <summary>
        /// &lt;p&gt;Last date when the item is available for sale&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;Last date when the item is available for sale&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="sellingExpirationDate", EmitDefaultValue=false)]
        public string SellingExpirationDate { get; set; }

        /// <summary>
        /// &lt;p&gt;If this flag is set to true, automatically a negative position is created when registering this item&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;If this flag is set to true, automatically a negative position is created when registering this item&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="negativePositionFlag", EmitDefaultValue=false)]
        public bool? NegativePositionFlag { get; set; }


        /// <summary>
        /// &lt;p&gt;Determines whether the price is to be hided (not printed) on the receipt and to be hided (not shown)&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether the price is to be hided (not printed) on the receipt and to be hided (not shown)&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="hidePriceFlag", EmitDefaultValue=false)]
        public bool? HidePriceFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Determines whether this item is to be shown on the customer display&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether this item is to be shown on the customer display&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="showItemOnCustomerDisplayFlag", EmitDefaultValue=false)]
        public bool? ShowItemOnCustomerDisplayFlag { get; set; }


        /// <summary>
        /// &lt;p&gt;A flag to denote that the weight is to be registered when this item is sold&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A flag to denote that the weight is to be registered when this item is sold&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="weightEntryRequiredFlag", EmitDefaultValue=false)]
        public bool? WeightEntryRequiredFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Determines whether it is possible to register a price on scales&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether it is possible to register a price on scales&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="priceEntryOnScalesAllowedFlag", EmitDefaultValue=false)]
        public bool? PriceEntryOnScalesAllowedFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Flag AllowLayawayFlag defines if an item is allowed for Layaway or not.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Flag AllowLayawayFlag defines if an item is allowed for Layaway or not.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="allowLayawayFlag", EmitDefaultValue=false)]
        public bool? AllowLayawayFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Flag LayawayDiscountFlag defines if promotions are allowed for the &#39;Layaway&#39; item.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Flag LayawayDiscountFlag defines if promotions are allowed for the &#39;Layaway&#39; item.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="layawayDiscountFlag", EmitDefaultValue=false)]
        public bool? LayawayDiscountFlag { 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 ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO {\n");
            sb.Append("  ItemSellingRuleId: ").Append(ItemSellingRuleId).Append("\n");
            sb.Append("  PriceEntryRequiredFlag: ").Append(PriceEntryRequiredFlag).Append("\n");
            sb.Append("  ProhibitReturnFlag: ").Append(ProhibitReturnFlag).Append("\n");
            sb.Append("  AllowFoodStampFlag: ").Append(AllowFoodStampFlag).Append("\n");
            sb.Append("  WicFlag: ").Append(WicFlag).Append("\n");
            sb.Append("  FsaCode: ").Append(FsaCode).Append("\n");
            sb.Append("  DeliveryStockAssortmentFlag: ").Append(DeliveryStockAssortmentFlag).Append("\n");
            sb.Append("  RetainPrepaymentFlag: ").Append(RetainPrepaymentFlag).Append("\n");
            sb.Append("  TakeAwayAllowedFlag: ").Append(TakeAwayAllowedFlag).Append("\n");
            sb.Append("  SerialNumberRequiredFlag: ").Append(SerialNumberRequiredFlag).Append("\n");
            sb.Append("  TaxExemptProbihitedFlag: ").Append(TaxExemptProbihitedFlag).Append("\n");
            sb.Append("  AuthorisedForSaleFlag: ").Append(AuthorisedForSaleFlag).Append("\n");
            sb.Append("  DiscountFlag: ").Append(DiscountFlag).Append("\n");
            sb.Append("  BonusPointsFlag: ").Append(BonusPointsFlag).Append("\n");
            sb.Append("  QuantityInputTypeCode: ").Append(QuantityInputTypeCode).Append("\n");
            sb.Append("  QuantityInputMethod: ").Append(QuantityInputMethod).Append("\n");
            sb.Append("  SellingEffectiveDate: ").Append(SellingEffectiveDate).Append("\n");
            sb.Append("  SellingExpirationDate: ").Append(SellingExpirationDate).Append("\n");
            sb.Append("  NegativePositionFlag: ").Append(NegativePositionFlag).Append("\n");
            sb.Append("  PriceChangeTypeCode: ").Append(PriceChangeTypeCode).Append("\n");
            sb.Append("  HidePriceFlag: ").Append(HidePriceFlag).Append("\n");
            sb.Append("  ShowItemOnCustomerDisplayFlag: ").Append(ShowItemOnCustomerDisplayFlag).Append("\n");
            sb.Append("  BarCodeHandlingMethod: ").Append(BarCodeHandlingMethod).Append("\n");
            sb.Append("  WeightEntryRequiredFlag: ").Append(WeightEntryRequiredFlag).Append("\n");
            sb.Append("  PriceEntryOnScalesAllowedFlag: ").Append(PriceEntryOnScalesAllowedFlag).Append("\n");
            sb.Append("  AllowLayawayFlag: ").Append(AllowLayawayFlag).Append("\n");
            sb.Append("  LayawayDiscountFlag: ").Append(LayawayDiscountFlag).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 ComGkSoftwareSweeSesApiServerMdItemSellingRuleDtoSoItemSellingRuleSO);
        }

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

            return 
                (
                    this.ItemSellingRuleId == input.ItemSellingRuleId ||
                    (this.ItemSellingRuleId != null &&
                    this.ItemSellingRuleId.Equals(input.ItemSellingRuleId))
                ) && 
                (
                    this.PriceEntryRequiredFlag == input.PriceEntryRequiredFlag ||
                    (this.PriceEntryRequiredFlag != null &&
                    this.PriceEntryRequiredFlag.Equals(input.PriceEntryRequiredFlag))
                ) && 
                (
                    this.ProhibitReturnFlag == input.ProhibitReturnFlag ||
                    (this.ProhibitReturnFlag != null &&
                    this.ProhibitReturnFlag.Equals(input.ProhibitReturnFlag))
                ) && 
                (
                    this.AllowFoodStampFlag == input.AllowFoodStampFlag ||
                    (this.AllowFoodStampFlag != null &&
                    this.AllowFoodStampFlag.Equals(input.AllowFoodStampFlag))
                ) && 
                (
                    this.WicFlag == input.WicFlag ||
                    (this.WicFlag != null &&
                    this.WicFlag.Equals(input.WicFlag))
                ) && 
                (
                    this.FsaCode == input.FsaCode ||
                    (this.FsaCode != null &&
                    this.FsaCode.Equals(input.FsaCode))
                ) && 
                (
                    this.DeliveryStockAssortmentFlag == input.DeliveryStockAssortmentFlag ||
                    (this.DeliveryStockAssortmentFlag != null &&
                    this.DeliveryStockAssortmentFlag.Equals(input.DeliveryStockAssortmentFlag))
                ) && 
                (
                    this.RetainPrepaymentFlag == input.RetainPrepaymentFlag ||
                    (this.RetainPrepaymentFlag != null &&
                    this.RetainPrepaymentFlag.Equals(input.RetainPrepaymentFlag))
                ) && 
                (
                    this.TakeAwayAllowedFlag == input.TakeAwayAllowedFlag ||
                    (this.TakeAwayAllowedFlag != null &&
                    this.TakeAwayAllowedFlag.Equals(input.TakeAwayAllowedFlag))
                ) && 
                (
                    this.SerialNumberRequiredFlag == input.SerialNumberRequiredFlag ||
                    (this.SerialNumberRequiredFlag != null &&
                    this.SerialNumberRequiredFlag.Equals(input.SerialNumberRequiredFlag))
                ) && 
                (
                    this.TaxExemptProbihitedFlag == input.TaxExemptProbihitedFlag ||
                    (this.TaxExemptProbihitedFlag != null &&
                    this.TaxExemptProbihitedFlag.Equals(input.TaxExemptProbihitedFlag))
                ) && 
                (
                    this.AuthorisedForSaleFlag == input.AuthorisedForSaleFlag ||
                    (this.AuthorisedForSaleFlag != null &&
                    this.AuthorisedForSaleFlag.Equals(input.AuthorisedForSaleFlag))
                ) && 
                (
                    this.DiscountFlag == input.DiscountFlag ||
                    (this.DiscountFlag != null &&
                    this.DiscountFlag.Equals(input.DiscountFlag))
                ) && 
                (
                    this.BonusPointsFlag == input.BonusPointsFlag ||
                    (this.BonusPointsFlag != null &&
                    this.BonusPointsFlag.Equals(input.BonusPointsFlag))
                ) && 
                (
                    this.QuantityInputTypeCode == input.QuantityInputTypeCode ||
                    (this.QuantityInputTypeCode != null &&
                    this.QuantityInputTypeCode.Equals(input.QuantityInputTypeCode))
                ) && 
                (
                    this.QuantityInputMethod == input.QuantityInputMethod ||
                    (this.QuantityInputMethod != null &&
                    this.QuantityInputMethod.Equals(input.QuantityInputMethod))
                ) && 
                (
                    this.SellingEffectiveDate == input.SellingEffectiveDate ||
                    (this.SellingEffectiveDate != null &&
                    this.SellingEffectiveDate.Equals(input.SellingEffectiveDate))
                ) && 
                (
                    this.SellingExpirationDate == input.SellingExpirationDate ||
                    (this.SellingExpirationDate != null &&
                    this.SellingExpirationDate.Equals(input.SellingExpirationDate))
                ) && 
                (
                    this.NegativePositionFlag == input.NegativePositionFlag ||
                    (this.NegativePositionFlag != null &&
                    this.NegativePositionFlag.Equals(input.NegativePositionFlag))
                ) && 
                (
                    this.PriceChangeTypeCode == input.PriceChangeTypeCode ||
                    (this.PriceChangeTypeCode != null &&
                    this.PriceChangeTypeCode.Equals(input.PriceChangeTypeCode))
                ) && 
                (
                    this.HidePriceFlag == input.HidePriceFlag ||
                    (this.HidePriceFlag != null &&
                    this.HidePriceFlag.Equals(input.HidePriceFlag))
                ) && 
                (
                    this.ShowItemOnCustomerDisplayFlag == input.ShowItemOnCustomerDisplayFlag ||
                    (this.ShowItemOnCustomerDisplayFlag != null &&
                    this.ShowItemOnCustomerDisplayFlag.Equals(input.ShowItemOnCustomerDisplayFlag))
                ) && 
                (
                    this.BarCodeHandlingMethod == input.BarCodeHandlingMethod ||
                    (this.BarCodeHandlingMethod != null &&
                    this.BarCodeHandlingMethod.Equals(input.BarCodeHandlingMethod))
                ) && 
                (
                    this.WeightEntryRequiredFlag == input.WeightEntryRequiredFlag ||
                    (this.WeightEntryRequiredFlag != null &&
                    this.WeightEntryRequiredFlag.Equals(input.WeightEntryRequiredFlag))
                ) && 
                (
                    this.PriceEntryOnScalesAllowedFlag == input.PriceEntryOnScalesAllowedFlag ||
                    (this.PriceEntryOnScalesAllowedFlag != null &&
                    this.PriceEntryOnScalesAllowedFlag.Equals(input.PriceEntryOnScalesAllowedFlag))
                ) && 
                (
                    this.AllowLayawayFlag == input.AllowLayawayFlag ||
                    (this.AllowLayawayFlag != null &&
                    this.AllowLayawayFlag.Equals(input.AllowLayawayFlag))
                ) && 
                (
                    this.LayawayDiscountFlag == input.LayawayDiscountFlag ||
                    (this.LayawayDiscountFlag != null &&
                    this.LayawayDiscountFlag.Equals(input.LayawayDiscountFlag))
                ) && 
                (
                    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.ItemSellingRuleId != null)
                    hashCode = hashCode * 59 + this.ItemSellingRuleId.GetHashCode();
                if (this.PriceEntryRequiredFlag != null)
                    hashCode = hashCode * 59 + this.PriceEntryRequiredFlag.GetHashCode();
                if (this.ProhibitReturnFlag != null)
                    hashCode = hashCode * 59 + this.ProhibitReturnFlag.GetHashCode();
                if (this.AllowFoodStampFlag != null)
                    hashCode = hashCode * 59 + this.AllowFoodStampFlag.GetHashCode();
                if (this.WicFlag != null)
                    hashCode = hashCode * 59 + this.WicFlag.GetHashCode();
                if (this.FsaCode != null)
                    hashCode = hashCode * 59 + this.FsaCode.GetHashCode();
                if (this.DeliveryStockAssortmentFlag != null)
                    hashCode = hashCode * 59 + this.DeliveryStockAssortmentFlag.GetHashCode();
                if (this.RetainPrepaymentFlag != null)
                    hashCode = hashCode * 59 + this.RetainPrepaymentFlag.GetHashCode();
                if (this.TakeAwayAllowedFlag != null)
                    hashCode = hashCode * 59 + this.TakeAwayAllowedFlag.GetHashCode();
                if (this.SerialNumberRequiredFlag != null)
                    hashCode = hashCode * 59 + this.SerialNumberRequiredFlag.GetHashCode();
                if (this.TaxExemptProbihitedFlag != null)
                    hashCode = hashCode * 59 + this.TaxExemptProbihitedFlag.GetHashCode();
                if (this.AuthorisedForSaleFlag != null)
                    hashCode = hashCode * 59 + this.AuthorisedForSaleFlag.GetHashCode();
                if (this.DiscountFlag != null)
                    hashCode = hashCode * 59 + this.DiscountFlag.GetHashCode();
                if (this.BonusPointsFlag != null)
                    hashCode = hashCode * 59 + this.BonusPointsFlag.GetHashCode();
                if (this.QuantityInputTypeCode != null)
                    hashCode = hashCode * 59 + this.QuantityInputTypeCode.GetHashCode();
                if (this.QuantityInputMethod != null)
                    hashCode = hashCode * 59 + this.QuantityInputMethod.GetHashCode();
                if (this.SellingEffectiveDate != null)
                    hashCode = hashCode * 59 + this.SellingEffectiveDate.GetHashCode();
                if (this.SellingExpirationDate != null)
                    hashCode = hashCode * 59 + this.SellingExpirationDate.GetHashCode();
                if (this.NegativePositionFlag != null)
                    hashCode = hashCode * 59 + this.NegativePositionFlag.GetHashCode();
                if (this.PriceChangeTypeCode != null)
                    hashCode = hashCode * 59 + this.PriceChangeTypeCode.GetHashCode();
                if (this.HidePriceFlag != null)
                    hashCode = hashCode * 59 + this.HidePriceFlag.GetHashCode();
                if (this.ShowItemOnCustomerDisplayFlag != null)
                    hashCode = hashCode * 59 + this.ShowItemOnCustomerDisplayFlag.GetHashCode();
                if (this.BarCodeHandlingMethod != null)
                    hashCode = hashCode * 59 + this.BarCodeHandlingMethod.GetHashCode();
                if (this.WeightEntryRequiredFlag != null)
                    hashCode = hashCode * 59 + this.WeightEntryRequiredFlag.GetHashCode();
                if (this.PriceEntryOnScalesAllowedFlag != null)
                    hashCode = hashCode * 59 + this.PriceEntryOnScalesAllowedFlag.GetHashCode();
                if (this.AllowLayawayFlag != null)
                    hashCode = hashCode * 59 + this.AllowLayawayFlag.GetHashCode();
                if (this.LayawayDiscountFlag != null)
                    hashCode = hashCode * 59 + this.LayawayDiscountFlag.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;
        }
    }

}
