/* 
 * 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>
    /// ItemSearchRequest &lt;p&gt;Request object for searching specified item.&lt;/p&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest :  IEquatable<ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest" /> class.
        /// </summary>
        /// <param name="businessUnitGroupId">&lt;p&gt;long: The unique identifier of the business unit group (store number).&lt;/p&gt; (required).</param>
        /// <param name="filter">&lt;p&gt;PosUOMItemSearchFilter: Filter for search view&lt;/p&gt;.</param>
        /// <param name="recordCount">&lt;p&gt;int: Limits the search by number&lt;/p&gt; (required).</param>
        /// <param name="packageSelection">&lt;p&gt;boolean: It specifies whether search is limited to package items only.&lt;/p&gt; (required).</param>
        /// <param name="requiredUomCode">&lt;p&gt;String: It defines the required unit of measure code of the displayed package units.&lt;/p&gt;.</param>
        /// <param name="skipEnteredItem">&lt;p&gt;boolean: Specifies whether the entered item is excluded from the selection.&lt;/p&gt; (required).</param>
        /// <param name="textClassId">&lt;p&gt;String: Specifies the text class Id.&lt;/p&gt;.</param>
        /// <param name="cacheEnabled">&lt;p&gt;boolean: Specifies, whether the item search results should be cached globally (until replication data changes) in case global master data caching is activated via configuration. (check GlobalMasterDataCacheServiceConfig.cacheSize)&lt;/p&gt; (required).</param>
        /// <param name="itemName">&lt;p&gt;String: Specifies the text itemName.&lt;/p&gt;.</param>
        /// <param name="itemId">&lt;p&gt;String: Specifies the itemId.&lt;/p&gt;.</param>
        /// <param name="itemMerchandiseHierarchyGroup">&lt;p&gt;String: Specifies the itemMerchandiseHierarchyGroup.&lt;/p&gt;.</param>
        /// <param name="itemNormalPrice">&lt;p&gt;String: Specifies the itemNormalPrice.&lt;/p&gt;.</param>
        /// <param name="setsOnly">&lt;p&gt;boolean: Specifies the setsOnly flag.&lt;/p&gt;.</param>
        /// <param name="itemColor">&lt;p&gt;String: Specifies the itemColor.&lt;/p&gt;.</param>
        /// <param name="itemSize">&lt;p&gt;String: Specifies the itemSize.&lt;/p&gt;.</param>
        /// <param name="itemLength">&lt;p&gt;String: Specifies the itemLength.&lt;/p&gt;.</param>
        /// <param name="itemSeason">&lt;p&gt;String: Specifies the itemSeason.&lt;/p&gt;.</param>
        /// <param name="xXCustom08">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom10">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom09">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom07">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom05">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom06">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom11">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom12">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom13">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom14">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom15">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom03">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom02">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom04">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        /// <param name="xXCustom01">&lt;p&gt;Customizable information&lt;/p&gt;.</param>
        public ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest(string businessUnitGroupId = default(string), ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSearchFilter filter = default(ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSearchFilter), int? recordCount = default(int?), bool? packageSelection = default(bool?), string requiredUomCode = default(string), bool? skipEnteredItem = default(bool?), string textClassId = default(string), bool? cacheEnabled = default(bool?), string itemName = default(string), string itemId = default(string), string itemMerchandiseHierarchyGroup = default(string), string itemNormalPrice = default(string), bool? setsOnly = default(bool?), string itemColor = default(string), string itemSize = default(string), string itemLength = default(string), string itemSeason = default(string), string xXCustom08 = default(string), string xXCustom10 = default(string), string xXCustom09 = default(string), string xXCustom07 = default(string), string xXCustom05 = default(string), string xXCustom06 = default(string), string xXCustom11 = default(string), string xXCustom12 = default(string), string xXCustom13 = default(string), string xXCustom14 = default(string), string xXCustom15 = default(string), string xXCustom03 = default(string), string xXCustom02 = default(string), string xXCustom04 = default(string), string xXCustom01 = default(string))
        {
            // to ensure "businessUnitGroupId" is required (not null)
            if (businessUnitGroupId == null)
            {
                throw new InvalidDataException("businessUnitGroupId is a required property for ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest and cannot be null");
            }
            else
            {
                this.BusinessUnitGroupId = businessUnitGroupId;
            }
            // to ensure "recordCount" is required (not null)
            if (recordCount == null)
            {
                throw new InvalidDataException("recordCount is a required property for ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest and cannot be null");
            }
            else
            {
                this.RecordCount = recordCount;
            }
            // to ensure "packageSelection" is required (not null)
            if (packageSelection == null)
            {
                throw new InvalidDataException("packageSelection is a required property for ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest and cannot be null");
            }
            else
            {
                this.PackageSelection = packageSelection;
            }
            // to ensure "skipEnteredItem" is required (not null)
            if (skipEnteredItem == null)
            {
                throw new InvalidDataException("skipEnteredItem is a required property for ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest and cannot be null");
            }
            else
            {
                this.SkipEnteredItem = skipEnteredItem;
            }
            // to ensure "cacheEnabled" is required (not null)
            if (cacheEnabled == null)
            {
                throw new InvalidDataException("cacheEnabled is a required property for ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest and cannot be null");
            }
            else
            {
                this.CacheEnabled = cacheEnabled;
            }
            this.Filter = filter;
            this.RequiredUomCode = requiredUomCode;
            this.TextClassId = textClassId;
            this.ItemName = itemName;
            this.ItemId = itemId;
            this.ItemMerchandiseHierarchyGroup = itemMerchandiseHierarchyGroup;
            this.ItemNormalPrice = itemNormalPrice;
            this.SetsOnly = setsOnly;
            this.ItemColor = itemColor;
            this.ItemSize = itemSize;
            this.ItemLength = itemLength;
            this.ItemSeason = itemSeason;
            this.XXCustom08 = xXCustom08;
            this.XXCustom10 = xXCustom10;
            this.XXCustom09 = xXCustom09;
            this.XXCustom07 = xXCustom07;
            this.XXCustom05 = xXCustom05;
            this.XXCustom06 = xXCustom06;
            this.XXCustom11 = xXCustom11;
            this.XXCustom12 = xXCustom12;
            this.XXCustom13 = xXCustom13;
            this.XXCustom14 = xXCustom14;
            this.XXCustom15 = xXCustom15;
            this.XXCustom03 = xXCustom03;
            this.XXCustom02 = xXCustom02;
            this.XXCustom04 = xXCustom04;
            this.XXCustom01 = xXCustom01;
        }
        
        /// <summary>
        /// &lt;p&gt;long: The unique identifier of the business unit group (store number).&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;long: The unique identifier of the business unit group (store number).&lt;/p&gt;</value>
        [DataMember(Name="businessUnitGroupId", EmitDefaultValue=false)]
        public string BusinessUnitGroupId { get; set; }

        /// <summary>
        /// &lt;p&gt;PosUOMItemSearchFilter: Filter for search view&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;PosUOMItemSearchFilter: Filter for search view&lt;/p&gt;</value>
        [DataMember(Name="filter", EmitDefaultValue=false)]
        public ComGkSoftwareGkrApiServerMdItemDtoDomPosPosUOMItemSearchFilter Filter { get; set; }

        /// <summary>
        /// &lt;p&gt;int: Limits the search by number&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;int: Limits the search by number&lt;/p&gt;</value>
        [DataMember(Name="recordCount", EmitDefaultValue=false)]
        public int? RecordCount { get; set; }

        /// <summary>
        /// &lt;p&gt;boolean: It specifies whether search is limited to package items only.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;boolean: It specifies whether search is limited to package items only.&lt;/p&gt;</value>
        [DataMember(Name="packageSelection", EmitDefaultValue=false)]
        public bool? PackageSelection { get; set; }

        /// <summary>
        /// &lt;p&gt;String: It defines the required unit of measure code of the displayed package units.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String: It defines the required unit of measure code of the displayed package units.&lt;/p&gt;</value>
        [DataMember(Name="requiredUomCode", EmitDefaultValue=false)]
        public string RequiredUomCode { get; set; }

        /// <summary>
        /// &lt;p&gt;boolean: Specifies whether the entered item is excluded from the selection.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;boolean: Specifies whether the entered item is excluded from the selection.&lt;/p&gt;</value>
        [DataMember(Name="skipEnteredItem", EmitDefaultValue=false)]
        public bool? SkipEnteredItem { get; set; }

        /// <summary>
        /// &lt;p&gt;String: Specifies the text class Id.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String: Specifies the text class Id.&lt;/p&gt;</value>
        [DataMember(Name="textClassId", EmitDefaultValue=false)]
        public string TextClassId { get; set; }

        /// <summary>
        /// &lt;p&gt;boolean: Specifies, whether the item search results should be cached globally (until replication data changes) in case global master data caching is activated via configuration. (check GlobalMasterDataCacheServiceConfig.cacheSize)&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;boolean: Specifies, whether the item search results should be cached globally (until replication data changes) in case global master data caching is activated via configuration. (check GlobalMasterDataCacheServiceConfig.cacheSize)&lt;/p&gt;</value>
        [DataMember(Name="cacheEnabled", EmitDefaultValue=false)]
        public bool? CacheEnabled { get; set; }

        /// <summary>
        /// &lt;p&gt;String: Specifies the text itemName.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String: Specifies the text itemName.&lt;/p&gt;</value>
        [DataMember(Name="itemName", EmitDefaultValue=false)]
        public string ItemName { get; set; }

        /// <summary>
        /// &lt;p&gt;String: Specifies the itemId.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String: Specifies the itemId.&lt;/p&gt;</value>
        [DataMember(Name="itemId", EmitDefaultValue=false)]
        public string ItemId { get; set; }

        /// <summary>
        /// &lt;p&gt;String: Specifies the itemMerchandiseHierarchyGroup.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String: Specifies the itemMerchandiseHierarchyGroup.&lt;/p&gt;</value>
        [DataMember(Name="itemMerchandiseHierarchyGroup", EmitDefaultValue=false)]
        public string ItemMerchandiseHierarchyGroup { get; set; }

        /// <summary>
        /// &lt;p&gt;String: Specifies the itemNormalPrice.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String: Specifies the itemNormalPrice.&lt;/p&gt;</value>
        [DataMember(Name="itemNormalPrice", EmitDefaultValue=false)]
        public string ItemNormalPrice { get; set; }

        /// <summary>
        /// &lt;p&gt;boolean: Specifies the setsOnly flag.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;boolean: Specifies the setsOnly flag.&lt;/p&gt;</value>
        [DataMember(Name="setsOnly", EmitDefaultValue=false)]
        public bool? SetsOnly { get; set; }

        /// <summary>
        /// &lt;p&gt;String: Specifies the itemColor.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String: Specifies the itemColor.&lt;/p&gt;</value>
        [DataMember(Name="itemColor", EmitDefaultValue=false)]
        public string ItemColor { get; set; }

        /// <summary>
        /// &lt;p&gt;String: Specifies the itemSize.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String: Specifies the itemSize.&lt;/p&gt;</value>
        [DataMember(Name="itemSize", EmitDefaultValue=false)]
        public string ItemSize { get; set; }

        /// <summary>
        /// &lt;p&gt;String: Specifies the itemLength.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String: Specifies the itemLength.&lt;/p&gt;</value>
        [DataMember(Name="itemLength", EmitDefaultValue=false)]
        public string ItemLength { get; set; }

        /// <summary>
        /// &lt;p&gt;String: Specifies the itemSeason.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;String: Specifies the itemSeason.&lt;/p&gt;</value>
        [DataMember(Name="itemSeason", EmitDefaultValue=false)]
        public string ItemSeason { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom08", EmitDefaultValue=false)]
        public string XXCustom08 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom10", EmitDefaultValue=false)]
        public string XXCustom10 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom09", EmitDefaultValue=false)]
        public string XXCustom09 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom07", EmitDefaultValue=false)]
        public string XXCustom07 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom05", EmitDefaultValue=false)]
        public string XXCustom05 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom06", EmitDefaultValue=false)]
        public string XXCustom06 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom11", EmitDefaultValue=false)]
        public string XXCustom11 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom12", EmitDefaultValue=false)]
        public string XXCustom12 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom13", EmitDefaultValue=false)]
        public string XXCustom13 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom14", EmitDefaultValue=false)]
        public string XXCustom14 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom15", EmitDefaultValue=false)]
        public string XXCustom15 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom03", EmitDefaultValue=false)]
        public string XXCustom03 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom02", EmitDefaultValue=false)]
        public string XXCustom02 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom04", EmitDefaultValue=false)]
        public string XXCustom04 { get; set; }

        /// <summary>
        /// &lt;p&gt;Customizable information&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Customizable information&lt;/p&gt;</value>
        [DataMember(Name="xXCustom01", EmitDefaultValue=false)]
        public string XXCustom01 { 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 ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest {\n");
            sb.Append("  BusinessUnitGroupId: ").Append(BusinessUnitGroupId).Append("\n");
            sb.Append("  Filter: ").Append(Filter).Append("\n");
            sb.Append("  RecordCount: ").Append(RecordCount).Append("\n");
            sb.Append("  PackageSelection: ").Append(PackageSelection).Append("\n");
            sb.Append("  RequiredUomCode: ").Append(RequiredUomCode).Append("\n");
            sb.Append("  SkipEnteredItem: ").Append(SkipEnteredItem).Append("\n");
            sb.Append("  TextClassId: ").Append(TextClassId).Append("\n");
            sb.Append("  CacheEnabled: ").Append(CacheEnabled).Append("\n");
            sb.Append("  ItemName: ").Append(ItemName).Append("\n");
            sb.Append("  ItemId: ").Append(ItemId).Append("\n");
            sb.Append("  ItemMerchandiseHierarchyGroup: ").Append(ItemMerchandiseHierarchyGroup).Append("\n");
            sb.Append("  ItemNormalPrice: ").Append(ItemNormalPrice).Append("\n");
            sb.Append("  SetsOnly: ").Append(SetsOnly).Append("\n");
            sb.Append("  ItemColor: ").Append(ItemColor).Append("\n");
            sb.Append("  ItemSize: ").Append(ItemSize).Append("\n");
            sb.Append("  ItemLength: ").Append(ItemLength).Append("\n");
            sb.Append("  ItemSeason: ").Append(ItemSeason).Append("\n");
            sb.Append("  XXCustom08: ").Append(XXCustom08).Append("\n");
            sb.Append("  XXCustom10: ").Append(XXCustom10).Append("\n");
            sb.Append("  XXCustom09: ").Append(XXCustom09).Append("\n");
            sb.Append("  XXCustom07: ").Append(XXCustom07).Append("\n");
            sb.Append("  XXCustom05: ").Append(XXCustom05).Append("\n");
            sb.Append("  XXCustom06: ").Append(XXCustom06).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("  XXCustom03: ").Append(XXCustom03).Append("\n");
            sb.Append("  XXCustom02: ").Append(XXCustom02).Append("\n");
            sb.Append("  XXCustom04: ").Append(XXCustom04).Append("\n");
            sb.Append("  XXCustom01: ").Append(XXCustom01).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 ComGkSoftwarePosApiServiceMasterdataItemBlItemSearchRequest);
        }

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

            return 
                (
                    this.BusinessUnitGroupId == input.BusinessUnitGroupId ||
                    (this.BusinessUnitGroupId != null &&
                    this.BusinessUnitGroupId.Equals(input.BusinessUnitGroupId))
                ) && 
                (
                    this.Filter == input.Filter ||
                    (this.Filter != null &&
                    this.Filter.Equals(input.Filter))
                ) && 
                (
                    this.RecordCount == input.RecordCount ||
                    (this.RecordCount != null &&
                    this.RecordCount.Equals(input.RecordCount))
                ) && 
                (
                    this.PackageSelection == input.PackageSelection ||
                    (this.PackageSelection != null &&
                    this.PackageSelection.Equals(input.PackageSelection))
                ) && 
                (
                    this.RequiredUomCode == input.RequiredUomCode ||
                    (this.RequiredUomCode != null &&
                    this.RequiredUomCode.Equals(input.RequiredUomCode))
                ) && 
                (
                    this.SkipEnteredItem == input.SkipEnteredItem ||
                    (this.SkipEnteredItem != null &&
                    this.SkipEnteredItem.Equals(input.SkipEnteredItem))
                ) && 
                (
                    this.TextClassId == input.TextClassId ||
                    (this.TextClassId != null &&
                    this.TextClassId.Equals(input.TextClassId))
                ) && 
                (
                    this.CacheEnabled == input.CacheEnabled ||
                    (this.CacheEnabled != null &&
                    this.CacheEnabled.Equals(input.CacheEnabled))
                ) && 
                (
                    this.ItemName == input.ItemName ||
                    (this.ItemName != null &&
                    this.ItemName.Equals(input.ItemName))
                ) && 
                (
                    this.ItemId == input.ItemId ||
                    (this.ItemId != null &&
                    this.ItemId.Equals(input.ItemId))
                ) && 
                (
                    this.ItemMerchandiseHierarchyGroup == input.ItemMerchandiseHierarchyGroup ||
                    (this.ItemMerchandiseHierarchyGroup != null &&
                    this.ItemMerchandiseHierarchyGroup.Equals(input.ItemMerchandiseHierarchyGroup))
                ) && 
                (
                    this.ItemNormalPrice == input.ItemNormalPrice ||
                    (this.ItemNormalPrice != null &&
                    this.ItemNormalPrice.Equals(input.ItemNormalPrice))
                ) && 
                (
                    this.SetsOnly == input.SetsOnly ||
                    (this.SetsOnly != null &&
                    this.SetsOnly.Equals(input.SetsOnly))
                ) && 
                (
                    this.ItemColor == input.ItemColor ||
                    (this.ItemColor != null &&
                    this.ItemColor.Equals(input.ItemColor))
                ) && 
                (
                    this.ItemSize == input.ItemSize ||
                    (this.ItemSize != null &&
                    this.ItemSize.Equals(input.ItemSize))
                ) && 
                (
                    this.ItemLength == input.ItemLength ||
                    (this.ItemLength != null &&
                    this.ItemLength.Equals(input.ItemLength))
                ) && 
                (
                    this.ItemSeason == input.ItemSeason ||
                    (this.ItemSeason != null &&
                    this.ItemSeason.Equals(input.ItemSeason))
                ) && 
                (
                    this.XXCustom08 == input.XXCustom08 ||
                    (this.XXCustom08 != null &&
                    this.XXCustom08.Equals(input.XXCustom08))
                ) && 
                (
                    this.XXCustom10 == input.XXCustom10 ||
                    (this.XXCustom10 != null &&
                    this.XXCustom10.Equals(input.XXCustom10))
                ) && 
                (
                    this.XXCustom09 == input.XXCustom09 ||
                    (this.XXCustom09 != null &&
                    this.XXCustom09.Equals(input.XXCustom09))
                ) && 
                (
                    this.XXCustom07 == input.XXCustom07 ||
                    (this.XXCustom07 != null &&
                    this.XXCustom07.Equals(input.XXCustom07))
                ) && 
                (
                    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.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.XXCustom03 == input.XXCustom03 ||
                    (this.XXCustom03 != null &&
                    this.XXCustom03.Equals(input.XXCustom03))
                ) && 
                (
                    this.XXCustom02 == input.XXCustom02 ||
                    (this.XXCustom02 != null &&
                    this.XXCustom02.Equals(input.XXCustom02))
                ) && 
                (
                    this.XXCustom04 == input.XXCustom04 ||
                    (this.XXCustom04 != null &&
                    this.XXCustom04.Equals(input.XXCustom04))
                ) && 
                (
                    this.XXCustom01 == input.XXCustom01 ||
                    (this.XXCustom01 != null &&
                    this.XXCustom01.Equals(input.XXCustom01))
                );
        }

        /// <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.BusinessUnitGroupId != null)
                    hashCode = hashCode * 59 + this.BusinessUnitGroupId.GetHashCode();
                if (this.Filter != null)
                    hashCode = hashCode * 59 + this.Filter.GetHashCode();
                if (this.RecordCount != null)
                    hashCode = hashCode * 59 + this.RecordCount.GetHashCode();
                if (this.PackageSelection != null)
                    hashCode = hashCode * 59 + this.PackageSelection.GetHashCode();
                if (this.RequiredUomCode != null)
                    hashCode = hashCode * 59 + this.RequiredUomCode.GetHashCode();
                if (this.SkipEnteredItem != null)
                    hashCode = hashCode * 59 + this.SkipEnteredItem.GetHashCode();
                if (this.TextClassId != null)
                    hashCode = hashCode * 59 + this.TextClassId.GetHashCode();
                if (this.CacheEnabled != null)
                    hashCode = hashCode * 59 + this.CacheEnabled.GetHashCode();
                if (this.ItemName != null)
                    hashCode = hashCode * 59 + this.ItemName.GetHashCode();
                if (this.ItemId != null)
                    hashCode = hashCode * 59 + this.ItemId.GetHashCode();
                if (this.ItemMerchandiseHierarchyGroup != null)
                    hashCode = hashCode * 59 + this.ItemMerchandiseHierarchyGroup.GetHashCode();
                if (this.ItemNormalPrice != null)
                    hashCode = hashCode * 59 + this.ItemNormalPrice.GetHashCode();
                if (this.SetsOnly != null)
                    hashCode = hashCode * 59 + this.SetsOnly.GetHashCode();
                if (this.ItemColor != null)
                    hashCode = hashCode * 59 + this.ItemColor.GetHashCode();
                if (this.ItemSize != null)
                    hashCode = hashCode * 59 + this.ItemSize.GetHashCode();
                if (this.ItemLength != null)
                    hashCode = hashCode * 59 + this.ItemLength.GetHashCode();
                if (this.ItemSeason != null)
                    hashCode = hashCode * 59 + this.ItemSeason.GetHashCode();
                if (this.XXCustom08 != null)
                    hashCode = hashCode * 59 + this.XXCustom08.GetHashCode();
                if (this.XXCustom10 != null)
                    hashCode = hashCode * 59 + this.XXCustom10.GetHashCode();
                if (this.XXCustom09 != null)
                    hashCode = hashCode * 59 + this.XXCustom09.GetHashCode();
                if (this.XXCustom07 != null)
                    hashCode = hashCode * 59 + this.XXCustom07.GetHashCode();
                if (this.XXCustom05 != null)
                    hashCode = hashCode * 59 + this.XXCustom05.GetHashCode();
                if (this.XXCustom06 != null)
                    hashCode = hashCode * 59 + this.XXCustom06.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.XXCustom03 != null)
                    hashCode = hashCode * 59 + this.XXCustom03.GetHashCode();
                if (this.XXCustom02 != null)
                    hashCode = hashCode * 59 + this.XXCustom02.GetHashCode();
                if (this.XXCustom04 != null)
                    hashCode = hashCode * 59 + this.XXCustom04.GetHashCode();
                if (this.XXCustom01 != null)
                    hashCode = hashCode * 59 + this.XXCustom01.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;
        }
    }

}
