/* 
 * 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>
    /// SaleReturnLineItem &lt;emph&gt;undocumented&lt;/emph&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem :  IEquatable<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem" /> class.
        /// </summary>
        /// <param name="key">&lt;p&gt;Getter for inner key class.&lt;/p&gt; (required).</param>
        /// <param name="itemID">A unique identifier for the item.</param>
        /// <param name="unitOfMeasureCode">The code used to specify the unit of the item.</param>
        /// <param name="itemType">The type code of the line item.</param>
        /// <param name="subItemType">The sub type code of the line item.</param>
        /// <param name="regularUnitPrice">The regular per-unit price (required).</param>
        /// <param name="regularUnitPriceQuantity">The number of items the regular price is defined for, i.e. 3 for $1.00&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!.</param>
        /// <param name="actualUnitPrice">The actual per-unit price&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!.</param>
        /// <param name="actualUnitPriceQuantity">The number of items the actual price is defined for, i.e. 3 for $1.00&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!.</param>
        /// <param name="quantity">The single quantity of a line itemPiece Item:3 * itemQuantity &#x3D; 3Units &#x3D; 1Weight item:3 * 1.234kg * itemQuantity &#x3D; 3Units &#x3D; 1.234Item with deposit:3 * six-pack (1 six-pack has 6 * deposit item)six-pack: Quantity &#x3D; 3, Units &#x3D; 1deposit: Quantity &#x3D; 3, Units &#x3D; 6 (required).</param>
        /// <param name="units">The units of the line itemPiece Item:3 * itemQuantity &#x3D; 3Units &#x3D; 1Weight item:3 * 1.234kg * itemQuantity &#x3D; 3Units &#x3D; 1.234Item with deposit:3 * six-pack (1 six-pack has 6 * deposit item)six-pack: Quantity &#x3D; 3, Units &#x3D; 1deposit: Quantity &#x3D; 3, Units &#x3D; 6&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!.</param>
        /// <param name="extendedAmount">The product of multiplying Quantity, Units and ActualUnitPrice.Different calculation rule for ExtendedAmount in case of package prices (see Transaction Calculation Rules). (required).</param>
        /// <param name="extendedDiscountAmount">The monetary total of all line item discounts that were applied to this Item.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!.</param>
        /// <param name="sellUnitRetailPriceEntryMethodCode">A code that describes how this line item&#39;s retail selling unit price is being entered..</param>
        /// <param name="actionCode">A code denoting the sign of the line item..</param>
        /// <param name="reasonCode">A unique retailer defined reason code (e.g. reason for Pay In / Pay Out).</param>
        /// <param name="itemTraceableUnitID">A universally unique identifier used to identify an instance of a distinguishable instance of a retail item. The item traceable unit ID is similar to a serial number in that it allows each selling unit to be explicitly identified and distinguished from other selling units of the same Item..</param>
        /// <param name="quantityInputMethod">Determines how the input of quantity was done on POS..</param>
        /// <param name="length">The registered length &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!.</param>
        /// <param name="width">The registered width &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!.</param>
        /// <param name="height">The registered height &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!.</param>
        /// <param name="manualWeightInputFlag">Describes how the weight was registered .</param>
        /// <param name="receiptText">The receipt printout text .</param>
        /// <param name="receiptDescription">The item description.</param>
        /// <param name="allowFoodStampFlag">A flag to indicate whether food stamps can be tendered for this item.  (required).</param>
        /// <param name="registrationNumber">The complete number which was registered on the POS originally .</param>
        /// <param name="negativeLineItemFlag">If this flag is set to true, automatically a negative line item is created when registering this item. Corresponds to ItemSellingRule.NegativeLineItemFlag (required).</param>
        /// <param name="discountFlag">A flag to indicate whether this ITEM can be discounted. Corresponds to Item.DiscountFlag  (required).</param>
        /// <param name="frequentShopperPointsEligibilityFlag">A flag to denote that the Item is eligible for frequent shopper points. Corresponds to ItemSellingRule.FrequentShopperPointsEligibilityFlag  (required).</param>
        /// <param name="discountTypeCode">A code which is used by the loyalty engine in order to determine whether the item can get rebate/points; possible values: 0..9 Corresponds to ItemSellingRule.DiscountTypeCode.</param>
        /// <param name="priceChangeTypeCode">Describes how the price of the item can be changed on POS.Corresponds to ItemSellingRule.PriceChangeTypeCode.</param>
        /// <param name="priceTypeCode">The price type code..</param>
        /// <param name="grandExtendedAmount">The line item total including taxes and discounts  (required).</param>
        /// <param name="reasonCodeGroupCode">A retailer assigned code denoting the family of related reason codes for classifying data and actions within the systems of the retail enterprise. .</param>
        /// <param name="reasonDescription">A narrative description describing the use of the retailer assigned reason code. .</param>
        /// <param name="notConsideredByLoyaltyEngineFlag">Determines whether the loyalty engine should care about the line item as a trigger; this information is needed because it may happen that another process (e.g. a return regarding to an existing transaction) applies rules for the line item which the loyalty engine is not allowed to change  (required).</param>
        /// <param name="merchandiseHierarchyGroupName">The business name for the merchandise structure. .</param>
        /// <param name="merchandiseHierarchyGroupDescription">A description of the merchandise structure. .</param>
        /// <param name="itemClassCode">Item class code .</param>
        /// <param name="prohibitTaxExemptFlag">If this flag is set to true, no tax exemption is allowed for the line item  (required).</param>
        /// <param name="prohibitReturnFlag">A flag to denote whether or not this item may be returned. (required).</param>
        /// <param name="warrantyDuration">The duration of the item&#39;s warranty (in months) &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(18, 0). Be aware of this and round value!.</param>
        /// <param name="depositTypeCode">Deposit type of the item.</param>
        /// <param name="taxExemptCode">A code to denote the tax exemption status from sales and use tax..</param>
        /// <param name="invoiceID">The ident of the invoice which is related to this line item .</param>
        /// <param name="mainPOSItemID">The main pos item id.</param>
        /// <param name="mainMerchandiseHierarchyGroupIDQualifier">A qualifier which is used to differ between MerchandiseHierarchyGroup&#39;s belonging to different functions but having the same id .</param>
        /// <param name="mainMerchandiseHierarchyGroupID">Unique system assigned identifier for the merchandise group..</param>
        /// <param name="taxReductionAmount">The amount that reduces the taxable amount of a line item. (required).</param>
        /// <param name="taxGroupID">The id of the taxable TaxableGroup.</param>
        /// <param name="taxReceiptPrintCode">A short code that is printed on a receipt to denote items that are in this TaxableGroup..</param>
        /// <param name="tareCount">The tare weight of the item.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!.</param>
        /// <param name="originalTaxGroupID">The original id of the taxable group..</param>
        /// <param name="manufacturerFamilyCode">The GS1 designated three digit coupon family code for the manufacturer item.</param>
        /// <param name="manufacturerCompanyCode">The GS1 designated 6 through 12 digit company prefix for the manufacturer of the item.</param>
        /// <param name="priceGroupID">The ident of the price group the item belongs to in terms of split pricing.</param>
        /// <param name="fixedPriceFlag">A flag to denote that the price of the line item was fixed/cannot be changed. One possible reason is that this price was calculated by a legally certified system such as a scale. Another possibility is that it was retrieved from a barcode.See also SellUnitRetailPriceEntryMethodCode. (required).</param>
        /// <param name="rootItemID">reference to the root item.</param>
        /// <param name="saleReturnLineItemExtensionList">list of line item extensions.</param>
        /// <param name="saleReturnLineItemCollectionList">list of related set items.</param>
        /// <param name="saleReturnLineItemPriceList">list of prices.</param>
        /// <param name="saleReturnTaxLineItemList">list of line item related taxes.</param>
        /// <param name="retailPriceModifierList">list of line item discounts.</param>
        /// <param name="frequentShopperPointsModifierList">list of line item points discounts.</param>
        /// <param name="saleReturnLineItemPromotionTriggerList">line of line item promotion triggers.</param>
        /// <param name="saleReturnLineItemCharacteristicList">list of characteristics.</param>
        /// <param name="saleReturnLineItemModifierCouponList">list of used coupons.</param>
        /// <param name="saleReturnLineItemModifierReferenceList">list of line items that caused a condition.</param>
        /// <param name="saleReturnLineItemMerchandiseHierarchyGroupList">list of merchandise groups that are directly linked to the item.</param>
        /// <param name="externalReferenceID">External reference number. In case of selling a fuel item, this is the FuelingTransactionID.</param>
        /// <param name="fuelSalesLineItem">line item with additional fuel data.</param>
        /// <param name="saleReturnLineItemAdditionalPriceList">list of additional prices.</param>
        /// <param name="saleReturnLineItemSplitPackageList">A list of prices used to calculate the line items extended amount out of a package price.i.e. 3 items with price 3/$1.00 will result in 1@ $0.34 and 2@ $0.33.</param>
        /// <param name="saleReturnLineItemGenericAttributeList">list of generic attributes being valid for the line item.</param>
        /// <param name="xxcustom08">Customizable information.</param>
        /// <param name="xxcustom10">Customizable information.</param>
        /// <param name="xxcustom09">Customizable information.</param>
        /// <param name="xxcustom07">Customizable information.</param>
        /// <param name="xxcustom05">Customizable information.</param>
        /// <param name="xxcustom06">Customizable information.</param>
        /// <param name="xxcustom11">Customizable information.</param>
        /// <param name="xxcustom12">Customizable information.</param>
        /// <param name="xxcustom13">Customizable information.</param>
        /// <param name="xxcustom14">Customizable information.</param>
        /// <param name="xxcustom15">Customizable information.</param>
        /// <param name="xxcustom03">Customizable information.</param>
        /// <param name="xxcustom02">Customizable information.</param>
        /// <param name="xxcustom04">Customizable information.</param>
        /// <param name="positemID">The ID used to identify the item..</param>
        /// <param name="posdepartmentID">A unique identifier for the POS department .</param>
        /// <param name="wicflag">A flag denoting if this Item is allowed in a WIC transaction  (required).</param>
        /// <param name="returnLineItemList">additional return data.</param>
        /// <param name="saleReturnLineItemSalesOrderList">additional data for sales order.</param>
        /// <param name="serializedUnitModiferList">serial number.</param>
        /// <param name="lineItemAssociateList">line item associate.</param>
        /// <param name="saleReturnTaxExemptTriggerList">tax exempt data.</param>
        /// <param name="additionalBonusLineItemList">Data for additional bonus items which were added to the transaction by the client based on the recommendation of PCE (AdditionalBonusDiscountLineItem). PCE cannot use such line items nor as trigger neither for granting a benefit to it..</param>
        /// <param name="xxcustom01">Customizable information.</param>
        public ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem(ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemKey key = default(ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemKey), string itemID = default(string), string unitOfMeasureCode = default(string), string itemType = default(string), string subItemType = default(string), double? regularUnitPrice = default(double?), double? regularUnitPriceQuantity = default(double?), double? actualUnitPrice = default(double?), double? actualUnitPriceQuantity = default(double?), int? quantity = default(int?), double? units = default(double?), double? extendedAmount = default(double?), double? extendedDiscountAmount = default(double?), string sellUnitRetailPriceEntryMethodCode = default(string), string actionCode = default(string), string reasonCode = default(string), string itemTraceableUnitID = default(string), string quantityInputMethod = default(string), double? length = default(double?), double? width = default(double?), double? height = default(double?), bool? manualWeightInputFlag = default(bool?), string receiptText = default(string), string receiptDescription = default(string), bool? allowFoodStampFlag = default(bool?), string registrationNumber = default(string), bool? negativeLineItemFlag = default(bool?), bool? discountFlag = default(bool?), bool? frequentShopperPointsEligibilityFlag = default(bool?), string discountTypeCode = default(string), string priceChangeTypeCode = default(string), string priceTypeCode = default(string), double? grandExtendedAmount = default(double?), string reasonCodeGroupCode = default(string), string reasonDescription = default(string), bool? notConsideredByLoyaltyEngineFlag = default(bool?), string merchandiseHierarchyGroupName = default(string), string merchandiseHierarchyGroupDescription = default(string), string itemClassCode = default(string), bool? prohibitTaxExemptFlag = default(bool?), bool? prohibitReturnFlag = default(bool?), double? warrantyDuration = default(double?), string depositTypeCode = default(string), string taxExemptCode = default(string), string invoiceID = default(string), string mainPOSItemID = default(string), string mainMerchandiseHierarchyGroupIDQualifier = default(string), string mainMerchandiseHierarchyGroupID = default(string), double? taxReductionAmount = default(double?), string taxGroupID = default(string), string taxReceiptPrintCode = default(string), double? tareCount = default(double?), string originalTaxGroupID = default(string), string manufacturerFamilyCode = default(string), string manufacturerCompanyCode = default(string), string priceGroupID = default(string), bool? fixedPriceFlag = default(bool?), string rootItemID = default(string), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemExtension> saleReturnLineItemExtensionList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemExtension>), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemCollection> saleReturnLineItemCollectionList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemCollection>), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemPrice> saleReturnLineItemPriceList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemPrice>), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnTaxLineItem> saleReturnTaxLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnTaxLineItem>), List<ComGkSoftwareGkrApiTxpoolDtoRetailPriceModifier> retailPriceModifierList = default(List<ComGkSoftwareGkrApiTxpoolDtoRetailPriceModifier>), List<ComGkSoftwareGkrApiTxpoolDtoFrequentShopperPointsModifier> frequentShopperPointsModifierList = default(List<ComGkSoftwareGkrApiTxpoolDtoFrequentShopperPointsModifier>), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemPromotionTrigger> saleReturnLineItemPromotionTriggerList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemPromotionTrigger>), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemCharacteristic> saleReturnLineItemCharacteristicList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemCharacteristic>), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemModifierCoupon> saleReturnLineItemModifierCouponList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemModifierCoupon>), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemModifierReference> saleReturnLineItemModifierReferenceList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemModifierReference>), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemMerchandiseHierarchyGroup> saleReturnLineItemMerchandiseHierarchyGroupList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemMerchandiseHierarchyGroup>), string externalReferenceID = default(string), ComGkSoftwareGkrApiTxpoolDtoFuelSalesLineItem fuelSalesLineItem = default(ComGkSoftwareGkrApiTxpoolDtoFuelSalesLineItem), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemAdditionalPrice> saleReturnLineItemAdditionalPriceList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemAdditionalPrice>), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemSplitPackage> saleReturnLineItemSplitPackageList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemSplitPackage>), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemGenericAttribute> saleReturnLineItemGenericAttributeList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemGenericAttribute>), 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 positemID = default(string), string posdepartmentID = default(string), bool? wicflag = default(bool?), List<ComGkSoftwareGkrApiTxpoolDtoReturnLineItem> returnLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoReturnLineItem>), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemSalesOrder> saleReturnLineItemSalesOrderList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemSalesOrder>), List<ComGkSoftwareGkrApiTxpoolDtoSerializedUnitModifer> serializedUnitModiferList = default(List<ComGkSoftwareGkrApiTxpoolDtoSerializedUnitModifer>), List<ComGkSoftwareGkrApiTxpoolDtoLineItemAssociate> lineItemAssociateList = default(List<ComGkSoftwareGkrApiTxpoolDtoLineItemAssociate>), List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnTaxExemptTrigger> saleReturnTaxExemptTriggerList = default(List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnTaxExemptTrigger>), List<ComGkSoftwareGkrApiTxpoolDtoAdditionalBonusLineItem> additionalBonusLineItemList = default(List<ComGkSoftwareGkrApiTxpoolDtoAdditionalBonusLineItem>), string xxcustom01 = default(string))
        {
            // to ensure "key" is required (not null)
            if (key == null)
            {
                throw new InvalidDataException("key is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.Key = key;
            }
            // to ensure "regularUnitPrice" is required (not null)
            if (regularUnitPrice == null)
            {
                throw new InvalidDataException("regularUnitPrice is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.RegularUnitPrice = regularUnitPrice;
            }
            // to ensure "quantity" is required (not null)
            if (quantity == null)
            {
                throw new InvalidDataException("quantity is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.Quantity = quantity;
            }
            // to ensure "extendedAmount" is required (not null)
            if (extendedAmount == null)
            {
                throw new InvalidDataException("extendedAmount is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.ExtendedAmount = extendedAmount;
            }
            // to ensure "allowFoodStampFlag" is required (not null)
            if (allowFoodStampFlag == null)
            {
                throw new InvalidDataException("allowFoodStampFlag is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.AllowFoodStampFlag = allowFoodStampFlag;
            }
            // to ensure "negativeLineItemFlag" is required (not null)
            if (negativeLineItemFlag == null)
            {
                throw new InvalidDataException("negativeLineItemFlag is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.NegativeLineItemFlag = negativeLineItemFlag;
            }
            // to ensure "discountFlag" is required (not null)
            if (discountFlag == null)
            {
                throw new InvalidDataException("discountFlag is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.DiscountFlag = discountFlag;
            }
            // to ensure "frequentShopperPointsEligibilityFlag" is required (not null)
            if (frequentShopperPointsEligibilityFlag == null)
            {
                throw new InvalidDataException("frequentShopperPointsEligibilityFlag is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.FrequentShopperPointsEligibilityFlag = frequentShopperPointsEligibilityFlag;
            }
            // to ensure "grandExtendedAmount" is required (not null)
            if (grandExtendedAmount == null)
            {
                throw new InvalidDataException("grandExtendedAmount is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.GrandExtendedAmount = grandExtendedAmount;
            }
            // to ensure "notConsideredByLoyaltyEngineFlag" is required (not null)
            if (notConsideredByLoyaltyEngineFlag == null)
            {
                throw new InvalidDataException("notConsideredByLoyaltyEngineFlag is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.NotConsideredByLoyaltyEngineFlag = notConsideredByLoyaltyEngineFlag;
            }
            // to ensure "prohibitTaxExemptFlag" is required (not null)
            if (prohibitTaxExemptFlag == null)
            {
                throw new InvalidDataException("prohibitTaxExemptFlag is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.ProhibitTaxExemptFlag = prohibitTaxExemptFlag;
            }
            // to ensure "prohibitReturnFlag" is required (not null)
            if (prohibitReturnFlag == null)
            {
                throw new InvalidDataException("prohibitReturnFlag is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.ProhibitReturnFlag = prohibitReturnFlag;
            }
            // to ensure "taxReductionAmount" is required (not null)
            if (taxReductionAmount == null)
            {
                throw new InvalidDataException("taxReductionAmount is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.TaxReductionAmount = taxReductionAmount;
            }
            // to ensure "fixedPriceFlag" is required (not null)
            if (fixedPriceFlag == null)
            {
                throw new InvalidDataException("fixedPriceFlag is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.FixedPriceFlag = fixedPriceFlag;
            }
            // to ensure "wicflag" is required (not null)
            if (wicflag == null)
            {
                throw new InvalidDataException("wicflag is a required property for ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem and cannot be null");
            }
            else
            {
                this.Wicflag = wicflag;
            }
            this.ItemID = itemID;
            this.UnitOfMeasureCode = unitOfMeasureCode;
            this.ItemType = itemType;
            this.SubItemType = subItemType;
            this.RegularUnitPriceQuantity = regularUnitPriceQuantity;
            this.ActualUnitPrice = actualUnitPrice;
            this.ActualUnitPriceQuantity = actualUnitPriceQuantity;
            this.Units = units;
            this.ExtendedDiscountAmount = extendedDiscountAmount;
            this.SellUnitRetailPriceEntryMethodCode = sellUnitRetailPriceEntryMethodCode;
            this.ActionCode = actionCode;
            this.ReasonCode = reasonCode;
            this.ItemTraceableUnitID = itemTraceableUnitID;
            this.QuantityInputMethod = quantityInputMethod;
            this.Length = length;
            this.Width = width;
            this.Height = height;
            this.ManualWeightInputFlag = manualWeightInputFlag;
            this.ReceiptText = receiptText;
            this.ReceiptDescription = receiptDescription;
            this.RegistrationNumber = registrationNumber;
            this.DiscountTypeCode = discountTypeCode;
            this.PriceChangeTypeCode = priceChangeTypeCode;
            this.PriceTypeCode = priceTypeCode;
            this.ReasonCodeGroupCode = reasonCodeGroupCode;
            this.ReasonDescription = reasonDescription;
            this.MerchandiseHierarchyGroupName = merchandiseHierarchyGroupName;
            this.MerchandiseHierarchyGroupDescription = merchandiseHierarchyGroupDescription;
            this.ItemClassCode = itemClassCode;
            this.WarrantyDuration = warrantyDuration;
            this.DepositTypeCode = depositTypeCode;
            this.TaxExemptCode = taxExemptCode;
            this.InvoiceID = invoiceID;
            this.MainPOSItemID = mainPOSItemID;
            this.MainMerchandiseHierarchyGroupIDQualifier = mainMerchandiseHierarchyGroupIDQualifier;
            this.MainMerchandiseHierarchyGroupID = mainMerchandiseHierarchyGroupID;
            this.TaxGroupID = taxGroupID;
            this.TaxReceiptPrintCode = taxReceiptPrintCode;
            this.TareCount = tareCount;
            this.OriginalTaxGroupID = originalTaxGroupID;
            this.ManufacturerFamilyCode = manufacturerFamilyCode;
            this.ManufacturerCompanyCode = manufacturerCompanyCode;
            this.PriceGroupID = priceGroupID;
            this.RootItemID = rootItemID;
            this.SaleReturnLineItemExtensionList = saleReturnLineItemExtensionList;
            this.SaleReturnLineItemCollectionList = saleReturnLineItemCollectionList;
            this.SaleReturnLineItemPriceList = saleReturnLineItemPriceList;
            this.SaleReturnTaxLineItemList = saleReturnTaxLineItemList;
            this.RetailPriceModifierList = retailPriceModifierList;
            this.FrequentShopperPointsModifierList = frequentShopperPointsModifierList;
            this.SaleReturnLineItemPromotionTriggerList = saleReturnLineItemPromotionTriggerList;
            this.SaleReturnLineItemCharacteristicList = saleReturnLineItemCharacteristicList;
            this.SaleReturnLineItemModifierCouponList = saleReturnLineItemModifierCouponList;
            this.SaleReturnLineItemModifierReferenceList = saleReturnLineItemModifierReferenceList;
            this.SaleReturnLineItemMerchandiseHierarchyGroupList = saleReturnLineItemMerchandiseHierarchyGroupList;
            this.ExternalReferenceID = externalReferenceID;
            this.FuelSalesLineItem = fuelSalesLineItem;
            this.SaleReturnLineItemAdditionalPriceList = saleReturnLineItemAdditionalPriceList;
            this.SaleReturnLineItemSplitPackageList = saleReturnLineItemSplitPackageList;
            this.SaleReturnLineItemGenericAttributeList = saleReturnLineItemGenericAttributeList;
            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.PositemID = positemID;
            this.PosdepartmentID = posdepartmentID;
            this.ReturnLineItemList = returnLineItemList;
            this.SaleReturnLineItemSalesOrderList = saleReturnLineItemSalesOrderList;
            this.SerializedUnitModiferList = serializedUnitModiferList;
            this.LineItemAssociateList = lineItemAssociateList;
            this.SaleReturnTaxExemptTriggerList = saleReturnTaxExemptTriggerList;
            this.AdditionalBonusLineItemList = additionalBonusLineItemList;
            this.Xxcustom01 = xxcustom01;
        }
        
        /// <summary>
        /// &lt;p&gt;Getter for inner key class.&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Getter for inner key class.&lt;/p&gt;</value>
        [DataMember(Name="key", EmitDefaultValue=false)]
        public ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemKey Key { get; set; }

        /// <summary>
        /// A unique identifier for the item
        /// </summary>
        /// <value>A unique identifier for the item</value>
        [DataMember(Name="itemID", EmitDefaultValue=false)]
        public string ItemID { get; set; }

        /// <summary>
        /// The code used to specify the unit of the item
        /// </summary>
        /// <value>The code used to specify the unit of the item</value>
        [DataMember(Name="unitOfMeasureCode", EmitDefaultValue=false)]
        public string UnitOfMeasureCode { get; set; }

        /// <summary>
        /// The type code of the line item
        /// </summary>
        /// <value>The type code of the line item</value>
        [DataMember(Name="itemType", EmitDefaultValue=false)]
        public string ItemType { get; set; }

        /// <summary>
        /// The sub type code of the line item
        /// </summary>
        /// <value>The sub type code of the line item</value>
        [DataMember(Name="subItemType", EmitDefaultValue=false)]
        public string SubItemType { get; set; }

        /// <summary>
        /// The regular per-unit price
        /// </summary>
        /// <value>The regular per-unit price</value>
        [DataMember(Name="regularUnitPrice", EmitDefaultValue=false)]
        public double? RegularUnitPrice { get; set; }

        /// <summary>
        /// The number of items the regular price is defined for, i.e. 3 for $1.00&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!
        /// </summary>
        /// <value>The number of items the regular price is defined for, i.e. 3 for $1.00&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!</value>
        [DataMember(Name="regularUnitPriceQuantity", EmitDefaultValue=false)]
        public double? RegularUnitPriceQuantity { get; set; }

        /// <summary>
        /// The actual per-unit price&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!
        /// </summary>
        /// <value>The actual per-unit price&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!</value>
        [DataMember(Name="actualUnitPrice", EmitDefaultValue=false)]
        public double? ActualUnitPrice { get; set; }

        /// <summary>
        /// The number of items the actual price is defined for, i.e. 3 for $1.00&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!
        /// </summary>
        /// <value>The number of items the actual price is defined for, i.e. 3 for $1.00&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!</value>
        [DataMember(Name="actualUnitPriceQuantity", EmitDefaultValue=false)]
        public double? ActualUnitPriceQuantity { get; set; }

        /// <summary>
        /// The single quantity of a line itemPiece Item:3 * itemQuantity &#x3D; 3Units &#x3D; 1Weight item:3 * 1.234kg * itemQuantity &#x3D; 3Units &#x3D; 1.234Item with deposit:3 * six-pack (1 six-pack has 6 * deposit item)six-pack: Quantity &#x3D; 3, Units &#x3D; 1deposit: Quantity &#x3D; 3, Units &#x3D; 6
        /// </summary>
        /// <value>The single quantity of a line itemPiece Item:3 * itemQuantity &#x3D; 3Units &#x3D; 1Weight item:3 * 1.234kg * itemQuantity &#x3D; 3Units &#x3D; 1.234Item with deposit:3 * six-pack (1 six-pack has 6 * deposit item)six-pack: Quantity &#x3D; 3, Units &#x3D; 1deposit: Quantity &#x3D; 3, Units &#x3D; 6</value>
        [DataMember(Name="quantity", EmitDefaultValue=false)]
        public int? Quantity { get; set; }

        /// <summary>
        /// The units of the line itemPiece Item:3 * itemQuantity &#x3D; 3Units &#x3D; 1Weight item:3 * 1.234kg * itemQuantity &#x3D; 3Units &#x3D; 1.234Item with deposit:3 * six-pack (1 six-pack has 6 * deposit item)six-pack: Quantity &#x3D; 3, Units &#x3D; 1deposit: Quantity &#x3D; 3, Units &#x3D; 6&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!
        /// </summary>
        /// <value>The units of the line itemPiece Item:3 * itemQuantity &#x3D; 3Units &#x3D; 1Weight item:3 * 1.234kg * itemQuantity &#x3D; 3Units &#x3D; 1.234Item with deposit:3 * six-pack (1 six-pack has 6 * deposit item)six-pack: Quantity &#x3D; 3, Units &#x3D; 1deposit: Quantity &#x3D; 3, Units &#x3D; 6&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!</value>
        [DataMember(Name="units", EmitDefaultValue=false)]
        public double? Units { get; set; }

        /// <summary>
        /// The product of multiplying Quantity, Units and ActualUnitPrice.Different calculation rule for ExtendedAmount in case of package prices (see Transaction Calculation Rules).
        /// </summary>
        /// <value>The product of multiplying Quantity, Units and ActualUnitPrice.Different calculation rule for ExtendedAmount in case of package prices (see Transaction Calculation Rules).</value>
        [DataMember(Name="extendedAmount", EmitDefaultValue=false)]
        public double? ExtendedAmount { get; set; }

        /// <summary>
        /// The monetary total of all line item discounts that were applied to this Item.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!
        /// </summary>
        /// <value>The monetary total of all line item discounts that were applied to this Item.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 5). Be aware of this and round value!</value>
        [DataMember(Name="extendedDiscountAmount", EmitDefaultValue=false)]
        public double? ExtendedDiscountAmount { get; set; }

        /// <summary>
        /// A code that describes how this line item&#39;s retail selling unit price is being entered.
        /// </summary>
        /// <value>A code that describes how this line item&#39;s retail selling unit price is being entered.</value>
        [DataMember(Name="sellUnitRetailPriceEntryMethodCode", EmitDefaultValue=false)]
        public string SellUnitRetailPriceEntryMethodCode { get; set; }

        /// <summary>
        /// A code denoting the sign of the line item.
        /// </summary>
        /// <value>A code denoting the sign of the line item.</value>
        [DataMember(Name="actionCode", EmitDefaultValue=false)]
        public string ActionCode { get; set; }

        /// <summary>
        /// A unique retailer defined reason code (e.g. reason for Pay In / Pay Out)
        /// </summary>
        /// <value>A unique retailer defined reason code (e.g. reason for Pay In / Pay Out)</value>
        [DataMember(Name="reasonCode", EmitDefaultValue=false)]
        public string ReasonCode { get; set; }

        /// <summary>
        /// A universally unique identifier used to identify an instance of a distinguishable instance of a retail item. The item traceable unit ID is similar to a serial number in that it allows each selling unit to be explicitly identified and distinguished from other selling units of the same Item.
        /// </summary>
        /// <value>A universally unique identifier used to identify an instance of a distinguishable instance of a retail item. The item traceable unit ID is similar to a serial number in that it allows each selling unit to be explicitly identified and distinguished from other selling units of the same Item.</value>
        [DataMember(Name="itemTraceableUnitID", EmitDefaultValue=false)]
        public string ItemTraceableUnitID { get; set; }

        /// <summary>
        /// Determines how the input of quantity was done on POS.
        /// </summary>
        /// <value>Determines how the input of quantity was done on POS.</value>
        [DataMember(Name="quantityInputMethod", EmitDefaultValue=false)]
        public string QuantityInputMethod { get; set; }

        /// <summary>
        /// The registered length &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!
        /// </summary>
        /// <value>The registered length &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!</value>
        [DataMember(Name="length", EmitDefaultValue=false)]
        public double? Length { get; set; }

        /// <summary>
        /// The registered width &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!
        /// </summary>
        /// <value>The registered width &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!</value>
        [DataMember(Name="width", EmitDefaultValue=false)]
        public double? Width { get; set; }

        /// <summary>
        /// The registered height &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!
        /// </summary>
        /// <value>The registered height &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(11, 3). Be aware of this and round value!</value>
        [DataMember(Name="height", EmitDefaultValue=false)]
        public double? Height { get; set; }

        /// <summary>
        /// Describes how the weight was registered 
        /// </summary>
        /// <value>Describes how the weight was registered </value>
        [DataMember(Name="manualWeightInputFlag", EmitDefaultValue=false)]
        public bool? ManualWeightInputFlag { get; set; }

        /// <summary>
        /// The receipt printout text 
        /// </summary>
        /// <value>The receipt printout text </value>
        [DataMember(Name="receiptText", EmitDefaultValue=false)]
        public string ReceiptText { get; set; }

        /// <summary>
        /// The item description
        /// </summary>
        /// <value>The item description</value>
        [DataMember(Name="receiptDescription", EmitDefaultValue=false)]
        public string ReceiptDescription { get; set; }

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

        /// <summary>
        /// The complete number which was registered on the POS originally 
        /// </summary>
        /// <value>The complete number which was registered on the POS originally </value>
        [DataMember(Name="registrationNumber", EmitDefaultValue=false)]
        public string RegistrationNumber { get; set; }

        /// <summary>
        /// If this flag is set to true, automatically a negative line item is created when registering this item. Corresponds to ItemSellingRule.NegativeLineItemFlag
        /// </summary>
        /// <value>If this flag is set to true, automatically a negative line item is created when registering this item. Corresponds to ItemSellingRule.NegativeLineItemFlag</value>
        [DataMember(Name="negativeLineItemFlag", EmitDefaultValue=false)]
        public bool? NegativeLineItemFlag { get; set; }

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

        /// <summary>
        /// A flag to denote that the Item is eligible for frequent shopper points. Corresponds to ItemSellingRule.FrequentShopperPointsEligibilityFlag 
        /// </summary>
        /// <value>A flag to denote that the Item is eligible for frequent shopper points. Corresponds to ItemSellingRule.FrequentShopperPointsEligibilityFlag </value>
        [DataMember(Name="frequentShopperPointsEligibilityFlag", EmitDefaultValue=false)]
        public bool? FrequentShopperPointsEligibilityFlag { get; set; }

        /// <summary>
        /// A code which is used by the loyalty engine in order to determine whether the item can get rebate/points; possible values: 0..9 Corresponds to ItemSellingRule.DiscountTypeCode
        /// </summary>
        /// <value>A code which is used by the loyalty engine in order to determine whether the item can get rebate/points; possible values: 0..9 Corresponds to ItemSellingRule.DiscountTypeCode</value>
        [DataMember(Name="discountTypeCode", EmitDefaultValue=false)]
        public string DiscountTypeCode { get; set; }

        /// <summary>
        /// Describes how the price of the item can be changed on POS.Corresponds to ItemSellingRule.PriceChangeTypeCode
        /// </summary>
        /// <value>Describes how the price of the item can be changed on POS.Corresponds to ItemSellingRule.PriceChangeTypeCode</value>
        [DataMember(Name="priceChangeTypeCode", EmitDefaultValue=false)]
        public string PriceChangeTypeCode { get; set; }

        /// <summary>
        /// The price type code.
        /// </summary>
        /// <value>The price type code.</value>
        [DataMember(Name="priceTypeCode", EmitDefaultValue=false)]
        public string PriceTypeCode { get; set; }

        /// <summary>
        /// The line item total including taxes and discounts 
        /// </summary>
        /// <value>The line item total including taxes and discounts </value>
        [DataMember(Name="grandExtendedAmount", EmitDefaultValue=false)]
        public double? GrandExtendedAmount { get; set; }

        /// <summary>
        /// A retailer assigned code denoting the family of related reason codes for classifying data and actions within the systems of the retail enterprise. 
        /// </summary>
        /// <value>A retailer assigned code denoting the family of related reason codes for classifying data and actions within the systems of the retail enterprise. </value>
        [DataMember(Name="reasonCodeGroupCode", EmitDefaultValue=false)]
        public string ReasonCodeGroupCode { get; set; }

        /// <summary>
        /// A narrative description describing the use of the retailer assigned reason code. 
        /// </summary>
        /// <value>A narrative description describing the use of the retailer assigned reason code. </value>
        [DataMember(Name="reasonDescription", EmitDefaultValue=false)]
        public string ReasonDescription { get; set; }

        /// <summary>
        /// Determines whether the loyalty engine should care about the line item as a trigger; this information is needed because it may happen that another process (e.g. a return regarding to an existing transaction) applies rules for the line item which the loyalty engine is not allowed to change 
        /// </summary>
        /// <value>Determines whether the loyalty engine should care about the line item as a trigger; this information is needed because it may happen that another process (e.g. a return regarding to an existing transaction) applies rules for the line item which the loyalty engine is not allowed to change </value>
        [DataMember(Name="notConsideredByLoyaltyEngineFlag", EmitDefaultValue=false)]
        public bool? NotConsideredByLoyaltyEngineFlag { get; set; }

        /// <summary>
        /// The business name for the merchandise structure. 
        /// </summary>
        /// <value>The business name for the merchandise structure. </value>
        [DataMember(Name="merchandiseHierarchyGroupName", EmitDefaultValue=false)]
        public string MerchandiseHierarchyGroupName { get; set; }

        /// <summary>
        /// A description of the merchandise structure. 
        /// </summary>
        /// <value>A description of the merchandise structure. </value>
        [DataMember(Name="merchandiseHierarchyGroupDescription", EmitDefaultValue=false)]
        public string MerchandiseHierarchyGroupDescription { get; set; }

        /// <summary>
        /// Item class code 
        /// </summary>
        /// <value>Item class code </value>
        [DataMember(Name="itemClassCode", EmitDefaultValue=false)]
        public string ItemClassCode { get; set; }

        /// <summary>
        /// If this flag is set to true, no tax exemption is allowed for the line item 
        /// </summary>
        /// <value>If this flag is set to true, no tax exemption is allowed for the line item </value>
        [DataMember(Name="prohibitTaxExemptFlag", EmitDefaultValue=false)]
        public bool? ProhibitTaxExemptFlag { get; set; }

        /// <summary>
        /// A flag to denote whether or not this item may be returned.
        /// </summary>
        /// <value>A flag to denote whether or not this item may be returned.</value>
        [DataMember(Name="prohibitReturnFlag", EmitDefaultValue=false)]
        public bool? ProhibitReturnFlag { get; set; }

        /// <summary>
        /// The duration of the item&#39;s warranty (in months) &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(18, 0). Be aware of this and round value!
        /// </summary>
        /// <value>The duration of the item&#39;s warranty (in months) &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(18, 0). Be aware of this and round value!</value>
        [DataMember(Name="warrantyDuration", EmitDefaultValue=false)]
        public double? WarrantyDuration { get; set; }

        /// <summary>
        /// Deposit type of the item
        /// </summary>
        /// <value>Deposit type of the item</value>
        [DataMember(Name="depositTypeCode", EmitDefaultValue=false)]
        public string DepositTypeCode { get; set; }

        /// <summary>
        /// A code to denote the tax exemption status from sales and use tax.
        /// </summary>
        /// <value>A code to denote the tax exemption status from sales and use tax.</value>
        [DataMember(Name="taxExemptCode", EmitDefaultValue=false)]
        public string TaxExemptCode { get; set; }

        /// <summary>
        /// The ident of the invoice which is related to this line item 
        /// </summary>
        /// <value>The ident of the invoice which is related to this line item </value>
        [DataMember(Name="invoiceID", EmitDefaultValue=false)]
        public string InvoiceID { get; set; }

        /// <summary>
        /// The main pos item id
        /// </summary>
        /// <value>The main pos item id</value>
        [DataMember(Name="mainPOSItemID", EmitDefaultValue=false)]
        public string MainPOSItemID { get; set; }

        /// <summary>
        /// A qualifier which is used to differ between MerchandiseHierarchyGroup&#39;s belonging to different functions but having the same id 
        /// </summary>
        /// <value>A qualifier which is used to differ between MerchandiseHierarchyGroup&#39;s belonging to different functions but having the same id </value>
        [DataMember(Name="mainMerchandiseHierarchyGroupIDQualifier", EmitDefaultValue=false)]
        public string MainMerchandiseHierarchyGroupIDQualifier { get; set; }

        /// <summary>
        /// Unique system assigned identifier for the merchandise group.
        /// </summary>
        /// <value>Unique system assigned identifier for the merchandise group.</value>
        [DataMember(Name="mainMerchandiseHierarchyGroupID", EmitDefaultValue=false)]
        public string MainMerchandiseHierarchyGroupID { get; set; }

        /// <summary>
        /// The amount that reduces the taxable amount of a line item.
        /// </summary>
        /// <value>The amount that reduces the taxable amount of a line item.</value>
        [DataMember(Name="taxReductionAmount", EmitDefaultValue=false)]
        public double? TaxReductionAmount { get; set; }

        /// <summary>
        /// The id of the taxable TaxableGroup
        /// </summary>
        /// <value>The id of the taxable TaxableGroup</value>
        [DataMember(Name="taxGroupID", EmitDefaultValue=false)]
        public string TaxGroupID { get; set; }

        /// <summary>
        /// A short code that is printed on a receipt to denote items that are in this TaxableGroup.
        /// </summary>
        /// <value>A short code that is printed on a receipt to denote items that are in this TaxableGroup.</value>
        [DataMember(Name="taxReceiptPrintCode", EmitDefaultValue=false)]
        public string TaxReceiptPrintCode { get; set; }

        /// <summary>
        /// The tare weight of the item.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!
        /// </summary>
        /// <value>The tare weight of the item.&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(16, 3). Be aware of this and round value!</value>
        [DataMember(Name="tareCount", EmitDefaultValue=false)]
        public double? TareCount { get; set; }

        /// <summary>
        /// The original id of the taxable group.
        /// </summary>
        /// <value>The original id of the taxable group.</value>
        [DataMember(Name="originalTaxGroupID", EmitDefaultValue=false)]
        public string OriginalTaxGroupID { get; set; }

        /// <summary>
        /// The GS1 designated three digit coupon family code for the manufacturer item
        /// </summary>
        /// <value>The GS1 designated three digit coupon family code for the manufacturer item</value>
        [DataMember(Name="manufacturerFamilyCode", EmitDefaultValue=false)]
        public string ManufacturerFamilyCode { get; set; }

        /// <summary>
        /// The GS1 designated 6 through 12 digit company prefix for the manufacturer of the item
        /// </summary>
        /// <value>The GS1 designated 6 through 12 digit company prefix for the manufacturer of the item</value>
        [DataMember(Name="manufacturerCompanyCode", EmitDefaultValue=false)]
        public string ManufacturerCompanyCode { get; set; }

        /// <summary>
        /// The ident of the price group the item belongs to in terms of split pricing
        /// </summary>
        /// <value>The ident of the price group the item belongs to in terms of split pricing</value>
        [DataMember(Name="priceGroupID", EmitDefaultValue=false)]
        public string PriceGroupID { get; set; }

        /// <summary>
        /// A flag to denote that the price of the line item was fixed/cannot be changed. One possible reason is that this price was calculated by a legally certified system such as a scale. Another possibility is that it was retrieved from a barcode.See also SellUnitRetailPriceEntryMethodCode.
        /// </summary>
        /// <value>A flag to denote that the price of the line item was fixed/cannot be changed. One possible reason is that this price was calculated by a legally certified system such as a scale. Another possibility is that it was retrieved from a barcode.See also SellUnitRetailPriceEntryMethodCode.</value>
        [DataMember(Name="fixedPriceFlag", EmitDefaultValue=false)]
        public bool? FixedPriceFlag { get; set; }

        /// <summary>
        /// reference to the root item
        /// </summary>
        /// <value>reference to the root item</value>
        [DataMember(Name="rootItemID", EmitDefaultValue=false)]
        public string RootItemID { get; set; }

        /// <summary>
        /// list of line item extensions
        /// </summary>
        /// <value>list of line item extensions</value>
        [DataMember(Name="saleReturnLineItemExtensionList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemExtension> SaleReturnLineItemExtensionList { get; set; }

        /// <summary>
        /// list of related set items
        /// </summary>
        /// <value>list of related set items</value>
        [DataMember(Name="saleReturnLineItemCollectionList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemCollection> SaleReturnLineItemCollectionList { get; set; }

        /// <summary>
        /// list of prices
        /// </summary>
        /// <value>list of prices</value>
        [DataMember(Name="saleReturnLineItemPriceList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemPrice> SaleReturnLineItemPriceList { get; set; }

        /// <summary>
        /// list of line item related taxes
        /// </summary>
        /// <value>list of line item related taxes</value>
        [DataMember(Name="saleReturnTaxLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnTaxLineItem> SaleReturnTaxLineItemList { get; set; }

        /// <summary>
        /// list of line item discounts
        /// </summary>
        /// <value>list of line item discounts</value>
        [DataMember(Name="retailPriceModifierList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoRetailPriceModifier> RetailPriceModifierList { get; set; }

        /// <summary>
        /// list of line item points discounts
        /// </summary>
        /// <value>list of line item points discounts</value>
        [DataMember(Name="frequentShopperPointsModifierList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoFrequentShopperPointsModifier> FrequentShopperPointsModifierList { get; set; }

        /// <summary>
        /// line of line item promotion triggers
        /// </summary>
        /// <value>line of line item promotion triggers</value>
        [DataMember(Name="saleReturnLineItemPromotionTriggerList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemPromotionTrigger> SaleReturnLineItemPromotionTriggerList { get; set; }

        /// <summary>
        /// list of characteristics
        /// </summary>
        /// <value>list of characteristics</value>
        [DataMember(Name="saleReturnLineItemCharacteristicList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemCharacteristic> SaleReturnLineItemCharacteristicList { get; set; }

        /// <summary>
        /// list of used coupons
        /// </summary>
        /// <value>list of used coupons</value>
        [DataMember(Name="saleReturnLineItemModifierCouponList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemModifierCoupon> SaleReturnLineItemModifierCouponList { get; set; }

        /// <summary>
        /// list of line items that caused a condition
        /// </summary>
        /// <value>list of line items that caused a condition</value>
        [DataMember(Name="saleReturnLineItemModifierReferenceList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemModifierReference> SaleReturnLineItemModifierReferenceList { get; set; }

        /// <summary>
        /// list of merchandise groups that are directly linked to the item
        /// </summary>
        /// <value>list of merchandise groups that are directly linked to the item</value>
        [DataMember(Name="saleReturnLineItemMerchandiseHierarchyGroupList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemMerchandiseHierarchyGroup> SaleReturnLineItemMerchandiseHierarchyGroupList { get; set; }

        /// <summary>
        /// External reference number. In case of selling a fuel item, this is the FuelingTransactionID
        /// </summary>
        /// <value>External reference number. In case of selling a fuel item, this is the FuelingTransactionID</value>
        [DataMember(Name="externalReferenceID", EmitDefaultValue=false)]
        public string ExternalReferenceID { get; set; }

        /// <summary>
        /// line item with additional fuel data
        /// </summary>
        /// <value>line item with additional fuel data</value>
        [DataMember(Name="fuelSalesLineItem", EmitDefaultValue=false)]
        public ComGkSoftwareGkrApiTxpoolDtoFuelSalesLineItem FuelSalesLineItem { get; set; }

        /// <summary>
        /// list of additional prices
        /// </summary>
        /// <value>list of additional prices</value>
        [DataMember(Name="saleReturnLineItemAdditionalPriceList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemAdditionalPrice> SaleReturnLineItemAdditionalPriceList { get; set; }

        /// <summary>
        /// A list of prices used to calculate the line items extended amount out of a package price.i.e. 3 items with price 3/$1.00 will result in 1@ $0.34 and 2@ $0.33
        /// </summary>
        /// <value>A list of prices used to calculate the line items extended amount out of a package price.i.e. 3 items with price 3/$1.00 will result in 1@ $0.34 and 2@ $0.33</value>
        [DataMember(Name="saleReturnLineItemSplitPackageList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemSplitPackage> SaleReturnLineItemSplitPackageList { get; set; }

        /// <summary>
        /// list of generic attributes being valid for the line item
        /// </summary>
        /// <value>list of generic attributes being valid for the line item</value>
        [DataMember(Name="saleReturnLineItemGenericAttributeList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemGenericAttribute> SaleReturnLineItemGenericAttributeList { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom08", EmitDefaultValue=false)]
        public string Xxcustom08 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom10", EmitDefaultValue=false)]
        public string Xxcustom10 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom09", EmitDefaultValue=false)]
        public string Xxcustom09 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom07", EmitDefaultValue=false)]
        public string Xxcustom07 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom05", EmitDefaultValue=false)]
        public string Xxcustom05 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom06", EmitDefaultValue=false)]
        public string Xxcustom06 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom11", EmitDefaultValue=false)]
        public string Xxcustom11 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom12", EmitDefaultValue=false)]
        public string Xxcustom12 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom13", EmitDefaultValue=false)]
        public string Xxcustom13 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom14", EmitDefaultValue=false)]
        public string Xxcustom14 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom15", EmitDefaultValue=false)]
        public string Xxcustom15 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom03", EmitDefaultValue=false)]
        public string Xxcustom03 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom02", EmitDefaultValue=false)]
        public string Xxcustom02 { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</value>
        [DataMember(Name="xxcustom04", EmitDefaultValue=false)]
        public string Xxcustom04 { get; set; }

        /// <summary>
        /// The ID used to identify the item.
        /// </summary>
        /// <value>The ID used to identify the item.</value>
        [DataMember(Name="positemID", EmitDefaultValue=false)]
        public string PositemID { get; set; }

        /// <summary>
        /// A unique identifier for the POS department 
        /// </summary>
        /// <value>A unique identifier for the POS department </value>
        [DataMember(Name="posdepartmentID", EmitDefaultValue=false)]
        public string PosdepartmentID { get; set; }

        /// <summary>
        /// A flag denoting if this Item is allowed in a WIC transaction 
        /// </summary>
        /// <value>A flag denoting if this Item is allowed in a WIC transaction </value>
        [DataMember(Name="wicflag", EmitDefaultValue=false)]
        public bool? Wicflag { get; set; }

        /// <summary>
        /// additional return data
        /// </summary>
        /// <value>additional return data</value>
        [DataMember(Name="returnLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoReturnLineItem> ReturnLineItemList { get; set; }

        /// <summary>
        /// additional data for sales order
        /// </summary>
        /// <value>additional data for sales order</value>
        [DataMember(Name="saleReturnLineItemSalesOrderList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItemSalesOrder> SaleReturnLineItemSalesOrderList { get; set; }

        /// <summary>
        /// serial number
        /// </summary>
        /// <value>serial number</value>
        [DataMember(Name="serializedUnitModiferList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSerializedUnitModifer> SerializedUnitModiferList { get; set; }

        /// <summary>
        /// line item associate
        /// </summary>
        /// <value>line item associate</value>
        [DataMember(Name="lineItemAssociateList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoLineItemAssociate> LineItemAssociateList { get; set; }

        /// <summary>
        /// tax exempt data
        /// </summary>
        /// <value>tax exempt data</value>
        [DataMember(Name="saleReturnTaxExemptTriggerList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoSaleReturnTaxExemptTrigger> SaleReturnTaxExemptTriggerList { get; set; }

        /// <summary>
        /// Data for additional bonus items which were added to the transaction by the client based on the recommendation of PCE (AdditionalBonusDiscountLineItem). PCE cannot use such line items nor as trigger neither for granting a benefit to it.
        /// </summary>
        /// <value>Data for additional bonus items which were added to the transaction by the client based on the recommendation of PCE (AdditionalBonusDiscountLineItem). PCE cannot use such line items nor as trigger neither for granting a benefit to it.</value>
        [DataMember(Name="additionalBonusLineItemList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiTxpoolDtoAdditionalBonusLineItem> AdditionalBonusLineItemList { get; set; }

        /// <summary>
        /// Customizable information
        /// </summary>
        /// <value>Customizable information</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 ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem {\n");
            sb.Append("  Key: ").Append(Key).Append("\n");
            sb.Append("  ItemID: ").Append(ItemID).Append("\n");
            sb.Append("  UnitOfMeasureCode: ").Append(UnitOfMeasureCode).Append("\n");
            sb.Append("  ItemType: ").Append(ItemType).Append("\n");
            sb.Append("  SubItemType: ").Append(SubItemType).Append("\n");
            sb.Append("  RegularUnitPrice: ").Append(RegularUnitPrice).Append("\n");
            sb.Append("  RegularUnitPriceQuantity: ").Append(RegularUnitPriceQuantity).Append("\n");
            sb.Append("  ActualUnitPrice: ").Append(ActualUnitPrice).Append("\n");
            sb.Append("  ActualUnitPriceQuantity: ").Append(ActualUnitPriceQuantity).Append("\n");
            sb.Append("  Quantity: ").Append(Quantity).Append("\n");
            sb.Append("  Units: ").Append(Units).Append("\n");
            sb.Append("  ExtendedAmount: ").Append(ExtendedAmount).Append("\n");
            sb.Append("  ExtendedDiscountAmount: ").Append(ExtendedDiscountAmount).Append("\n");
            sb.Append("  SellUnitRetailPriceEntryMethodCode: ").Append(SellUnitRetailPriceEntryMethodCode).Append("\n");
            sb.Append("  ActionCode: ").Append(ActionCode).Append("\n");
            sb.Append("  ReasonCode: ").Append(ReasonCode).Append("\n");
            sb.Append("  ItemTraceableUnitID: ").Append(ItemTraceableUnitID).Append("\n");
            sb.Append("  QuantityInputMethod: ").Append(QuantityInputMethod).Append("\n");
            sb.Append("  Length: ").Append(Length).Append("\n");
            sb.Append("  Width: ").Append(Width).Append("\n");
            sb.Append("  Height: ").Append(Height).Append("\n");
            sb.Append("  ManualWeightInputFlag: ").Append(ManualWeightInputFlag).Append("\n");
            sb.Append("  ReceiptText: ").Append(ReceiptText).Append("\n");
            sb.Append("  ReceiptDescription: ").Append(ReceiptDescription).Append("\n");
            sb.Append("  AllowFoodStampFlag: ").Append(AllowFoodStampFlag).Append("\n");
            sb.Append("  RegistrationNumber: ").Append(RegistrationNumber).Append("\n");
            sb.Append("  NegativeLineItemFlag: ").Append(NegativeLineItemFlag).Append("\n");
            sb.Append("  DiscountFlag: ").Append(DiscountFlag).Append("\n");
            sb.Append("  FrequentShopperPointsEligibilityFlag: ").Append(FrequentShopperPointsEligibilityFlag).Append("\n");
            sb.Append("  DiscountTypeCode: ").Append(DiscountTypeCode).Append("\n");
            sb.Append("  PriceChangeTypeCode: ").Append(PriceChangeTypeCode).Append("\n");
            sb.Append("  PriceTypeCode: ").Append(PriceTypeCode).Append("\n");
            sb.Append("  GrandExtendedAmount: ").Append(GrandExtendedAmount).Append("\n");
            sb.Append("  ReasonCodeGroupCode: ").Append(ReasonCodeGroupCode).Append("\n");
            sb.Append("  ReasonDescription: ").Append(ReasonDescription).Append("\n");
            sb.Append("  NotConsideredByLoyaltyEngineFlag: ").Append(NotConsideredByLoyaltyEngineFlag).Append("\n");
            sb.Append("  MerchandiseHierarchyGroupName: ").Append(MerchandiseHierarchyGroupName).Append("\n");
            sb.Append("  MerchandiseHierarchyGroupDescription: ").Append(MerchandiseHierarchyGroupDescription).Append("\n");
            sb.Append("  ItemClassCode: ").Append(ItemClassCode).Append("\n");
            sb.Append("  ProhibitTaxExemptFlag: ").Append(ProhibitTaxExemptFlag).Append("\n");
            sb.Append("  ProhibitReturnFlag: ").Append(ProhibitReturnFlag).Append("\n");
            sb.Append("  WarrantyDuration: ").Append(WarrantyDuration).Append("\n");
            sb.Append("  DepositTypeCode: ").Append(DepositTypeCode).Append("\n");
            sb.Append("  TaxExemptCode: ").Append(TaxExemptCode).Append("\n");
            sb.Append("  InvoiceID: ").Append(InvoiceID).Append("\n");
            sb.Append("  MainPOSItemID: ").Append(MainPOSItemID).Append("\n");
            sb.Append("  MainMerchandiseHierarchyGroupIDQualifier: ").Append(MainMerchandiseHierarchyGroupIDQualifier).Append("\n");
            sb.Append("  MainMerchandiseHierarchyGroupID: ").Append(MainMerchandiseHierarchyGroupID).Append("\n");
            sb.Append("  TaxReductionAmount: ").Append(TaxReductionAmount).Append("\n");
            sb.Append("  TaxGroupID: ").Append(TaxGroupID).Append("\n");
            sb.Append("  TaxReceiptPrintCode: ").Append(TaxReceiptPrintCode).Append("\n");
            sb.Append("  TareCount: ").Append(TareCount).Append("\n");
            sb.Append("  OriginalTaxGroupID: ").Append(OriginalTaxGroupID).Append("\n");
            sb.Append("  ManufacturerFamilyCode: ").Append(ManufacturerFamilyCode).Append("\n");
            sb.Append("  ManufacturerCompanyCode: ").Append(ManufacturerCompanyCode).Append("\n");
            sb.Append("  PriceGroupID: ").Append(PriceGroupID).Append("\n");
            sb.Append("  FixedPriceFlag: ").Append(FixedPriceFlag).Append("\n");
            sb.Append("  RootItemID: ").Append(RootItemID).Append("\n");
            sb.Append("  SaleReturnLineItemExtensionList: ").Append(SaleReturnLineItemExtensionList).Append("\n");
            sb.Append("  SaleReturnLineItemCollectionList: ").Append(SaleReturnLineItemCollectionList).Append("\n");
            sb.Append("  SaleReturnLineItemPriceList: ").Append(SaleReturnLineItemPriceList).Append("\n");
            sb.Append("  SaleReturnTaxLineItemList: ").Append(SaleReturnTaxLineItemList).Append("\n");
            sb.Append("  RetailPriceModifierList: ").Append(RetailPriceModifierList).Append("\n");
            sb.Append("  FrequentShopperPointsModifierList: ").Append(FrequentShopperPointsModifierList).Append("\n");
            sb.Append("  SaleReturnLineItemPromotionTriggerList: ").Append(SaleReturnLineItemPromotionTriggerList).Append("\n");
            sb.Append("  SaleReturnLineItemCharacteristicList: ").Append(SaleReturnLineItemCharacteristicList).Append("\n");
            sb.Append("  SaleReturnLineItemModifierCouponList: ").Append(SaleReturnLineItemModifierCouponList).Append("\n");
            sb.Append("  SaleReturnLineItemModifierReferenceList: ").Append(SaleReturnLineItemModifierReferenceList).Append("\n");
            sb.Append("  SaleReturnLineItemMerchandiseHierarchyGroupList: ").Append(SaleReturnLineItemMerchandiseHierarchyGroupList).Append("\n");
            sb.Append("  ExternalReferenceID: ").Append(ExternalReferenceID).Append("\n");
            sb.Append("  FuelSalesLineItem: ").Append(FuelSalesLineItem).Append("\n");
            sb.Append("  SaleReturnLineItemAdditionalPriceList: ").Append(SaleReturnLineItemAdditionalPriceList).Append("\n");
            sb.Append("  SaleReturnLineItemSplitPackageList: ").Append(SaleReturnLineItemSplitPackageList).Append("\n");
            sb.Append("  SaleReturnLineItemGenericAttributeList: ").Append(SaleReturnLineItemGenericAttributeList).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("  PositemID: ").Append(PositemID).Append("\n");
            sb.Append("  PosdepartmentID: ").Append(PosdepartmentID).Append("\n");
            sb.Append("  Wicflag: ").Append(Wicflag).Append("\n");
            sb.Append("  ReturnLineItemList: ").Append(ReturnLineItemList).Append("\n");
            sb.Append("  SaleReturnLineItemSalesOrderList: ").Append(SaleReturnLineItemSalesOrderList).Append("\n");
            sb.Append("  SerializedUnitModiferList: ").Append(SerializedUnitModiferList).Append("\n");
            sb.Append("  LineItemAssociateList: ").Append(LineItemAssociateList).Append("\n");
            sb.Append("  SaleReturnTaxExemptTriggerList: ").Append(SaleReturnTaxExemptTriggerList).Append("\n");
            sb.Append("  AdditionalBonusLineItemList: ").Append(AdditionalBonusLineItemList).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 ComGkSoftwareGkrApiTxpoolDtoSaleReturnLineItem);
        }

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

            return 
                (
                    this.Key == input.Key ||
                    (this.Key != null &&
                    this.Key.Equals(input.Key))
                ) && 
                (
                    this.ItemID == input.ItemID ||
                    (this.ItemID != null &&
                    this.ItemID.Equals(input.ItemID))
                ) && 
                (
                    this.UnitOfMeasureCode == input.UnitOfMeasureCode ||
                    (this.UnitOfMeasureCode != null &&
                    this.UnitOfMeasureCode.Equals(input.UnitOfMeasureCode))
                ) && 
                (
                    this.ItemType == input.ItemType ||
                    (this.ItemType != null &&
                    this.ItemType.Equals(input.ItemType))
                ) && 
                (
                    this.SubItemType == input.SubItemType ||
                    (this.SubItemType != null &&
                    this.SubItemType.Equals(input.SubItemType))
                ) && 
                (
                    this.RegularUnitPrice == input.RegularUnitPrice ||
                    (this.RegularUnitPrice != null &&
                    this.RegularUnitPrice.Equals(input.RegularUnitPrice))
                ) && 
                (
                    this.RegularUnitPriceQuantity == input.RegularUnitPriceQuantity ||
                    (this.RegularUnitPriceQuantity != null &&
                    this.RegularUnitPriceQuantity.Equals(input.RegularUnitPriceQuantity))
                ) && 
                (
                    this.ActualUnitPrice == input.ActualUnitPrice ||
                    (this.ActualUnitPrice != null &&
                    this.ActualUnitPrice.Equals(input.ActualUnitPrice))
                ) && 
                (
                    this.ActualUnitPriceQuantity == input.ActualUnitPriceQuantity ||
                    (this.ActualUnitPriceQuantity != null &&
                    this.ActualUnitPriceQuantity.Equals(input.ActualUnitPriceQuantity))
                ) && 
                (
                    this.Quantity == input.Quantity ||
                    (this.Quantity != null &&
                    this.Quantity.Equals(input.Quantity))
                ) && 
                (
                    this.Units == input.Units ||
                    (this.Units != null &&
                    this.Units.Equals(input.Units))
                ) && 
                (
                    this.ExtendedAmount == input.ExtendedAmount ||
                    (this.ExtendedAmount != null &&
                    this.ExtendedAmount.Equals(input.ExtendedAmount))
                ) && 
                (
                    this.ExtendedDiscountAmount == input.ExtendedDiscountAmount ||
                    (this.ExtendedDiscountAmount != null &&
                    this.ExtendedDiscountAmount.Equals(input.ExtendedDiscountAmount))
                ) && 
                (
                    this.SellUnitRetailPriceEntryMethodCode == input.SellUnitRetailPriceEntryMethodCode ||
                    (this.SellUnitRetailPriceEntryMethodCode != null &&
                    this.SellUnitRetailPriceEntryMethodCode.Equals(input.SellUnitRetailPriceEntryMethodCode))
                ) && 
                (
                    this.ActionCode == input.ActionCode ||
                    (this.ActionCode != null &&
                    this.ActionCode.Equals(input.ActionCode))
                ) && 
                (
                    this.ReasonCode == input.ReasonCode ||
                    (this.ReasonCode != null &&
                    this.ReasonCode.Equals(input.ReasonCode))
                ) && 
                (
                    this.ItemTraceableUnitID == input.ItemTraceableUnitID ||
                    (this.ItemTraceableUnitID != null &&
                    this.ItemTraceableUnitID.Equals(input.ItemTraceableUnitID))
                ) && 
                (
                    this.QuantityInputMethod == input.QuantityInputMethod ||
                    (this.QuantityInputMethod != null &&
                    this.QuantityInputMethod.Equals(input.QuantityInputMethod))
                ) && 
                (
                    this.Length == input.Length ||
                    (this.Length != null &&
                    this.Length.Equals(input.Length))
                ) && 
                (
                    this.Width == input.Width ||
                    (this.Width != null &&
                    this.Width.Equals(input.Width))
                ) && 
                (
                    this.Height == input.Height ||
                    (this.Height != null &&
                    this.Height.Equals(input.Height))
                ) && 
                (
                    this.ManualWeightInputFlag == input.ManualWeightInputFlag ||
                    (this.ManualWeightInputFlag != null &&
                    this.ManualWeightInputFlag.Equals(input.ManualWeightInputFlag))
                ) && 
                (
                    this.ReceiptText == input.ReceiptText ||
                    (this.ReceiptText != null &&
                    this.ReceiptText.Equals(input.ReceiptText))
                ) && 
                (
                    this.ReceiptDescription == input.ReceiptDescription ||
                    (this.ReceiptDescription != null &&
                    this.ReceiptDescription.Equals(input.ReceiptDescription))
                ) && 
                (
                    this.AllowFoodStampFlag == input.AllowFoodStampFlag ||
                    (this.AllowFoodStampFlag != null &&
                    this.AllowFoodStampFlag.Equals(input.AllowFoodStampFlag))
                ) && 
                (
                    this.RegistrationNumber == input.RegistrationNumber ||
                    (this.RegistrationNumber != null &&
                    this.RegistrationNumber.Equals(input.RegistrationNumber))
                ) && 
                (
                    this.NegativeLineItemFlag == input.NegativeLineItemFlag ||
                    (this.NegativeLineItemFlag != null &&
                    this.NegativeLineItemFlag.Equals(input.NegativeLineItemFlag))
                ) && 
                (
                    this.DiscountFlag == input.DiscountFlag ||
                    (this.DiscountFlag != null &&
                    this.DiscountFlag.Equals(input.DiscountFlag))
                ) && 
                (
                    this.FrequentShopperPointsEligibilityFlag == input.FrequentShopperPointsEligibilityFlag ||
                    (this.FrequentShopperPointsEligibilityFlag != null &&
                    this.FrequentShopperPointsEligibilityFlag.Equals(input.FrequentShopperPointsEligibilityFlag))
                ) && 
                (
                    this.DiscountTypeCode == input.DiscountTypeCode ||
                    (this.DiscountTypeCode != null &&
                    this.DiscountTypeCode.Equals(input.DiscountTypeCode))
                ) && 
                (
                    this.PriceChangeTypeCode == input.PriceChangeTypeCode ||
                    (this.PriceChangeTypeCode != null &&
                    this.PriceChangeTypeCode.Equals(input.PriceChangeTypeCode))
                ) && 
                (
                    this.PriceTypeCode == input.PriceTypeCode ||
                    (this.PriceTypeCode != null &&
                    this.PriceTypeCode.Equals(input.PriceTypeCode))
                ) && 
                (
                    this.GrandExtendedAmount == input.GrandExtendedAmount ||
                    (this.GrandExtendedAmount != null &&
                    this.GrandExtendedAmount.Equals(input.GrandExtendedAmount))
                ) && 
                (
                    this.ReasonCodeGroupCode == input.ReasonCodeGroupCode ||
                    (this.ReasonCodeGroupCode != null &&
                    this.ReasonCodeGroupCode.Equals(input.ReasonCodeGroupCode))
                ) && 
                (
                    this.ReasonDescription == input.ReasonDescription ||
                    (this.ReasonDescription != null &&
                    this.ReasonDescription.Equals(input.ReasonDescription))
                ) && 
                (
                    this.NotConsideredByLoyaltyEngineFlag == input.NotConsideredByLoyaltyEngineFlag ||
                    (this.NotConsideredByLoyaltyEngineFlag != null &&
                    this.NotConsideredByLoyaltyEngineFlag.Equals(input.NotConsideredByLoyaltyEngineFlag))
                ) && 
                (
                    this.MerchandiseHierarchyGroupName == input.MerchandiseHierarchyGroupName ||
                    (this.MerchandiseHierarchyGroupName != null &&
                    this.MerchandiseHierarchyGroupName.Equals(input.MerchandiseHierarchyGroupName))
                ) && 
                (
                    this.MerchandiseHierarchyGroupDescription == input.MerchandiseHierarchyGroupDescription ||
                    (this.MerchandiseHierarchyGroupDescription != null &&
                    this.MerchandiseHierarchyGroupDescription.Equals(input.MerchandiseHierarchyGroupDescription))
                ) && 
                (
                    this.ItemClassCode == input.ItemClassCode ||
                    (this.ItemClassCode != null &&
                    this.ItemClassCode.Equals(input.ItemClassCode))
                ) && 
                (
                    this.ProhibitTaxExemptFlag == input.ProhibitTaxExemptFlag ||
                    (this.ProhibitTaxExemptFlag != null &&
                    this.ProhibitTaxExemptFlag.Equals(input.ProhibitTaxExemptFlag))
                ) && 
                (
                    this.ProhibitReturnFlag == input.ProhibitReturnFlag ||
                    (this.ProhibitReturnFlag != null &&
                    this.ProhibitReturnFlag.Equals(input.ProhibitReturnFlag))
                ) && 
                (
                    this.WarrantyDuration == input.WarrantyDuration ||
                    (this.WarrantyDuration != null &&
                    this.WarrantyDuration.Equals(input.WarrantyDuration))
                ) && 
                (
                    this.DepositTypeCode == input.DepositTypeCode ||
                    (this.DepositTypeCode != null &&
                    this.DepositTypeCode.Equals(input.DepositTypeCode))
                ) && 
                (
                    this.TaxExemptCode == input.TaxExemptCode ||
                    (this.TaxExemptCode != null &&
                    this.TaxExemptCode.Equals(input.TaxExemptCode))
                ) && 
                (
                    this.InvoiceID == input.InvoiceID ||
                    (this.InvoiceID != null &&
                    this.InvoiceID.Equals(input.InvoiceID))
                ) && 
                (
                    this.MainPOSItemID == input.MainPOSItemID ||
                    (this.MainPOSItemID != null &&
                    this.MainPOSItemID.Equals(input.MainPOSItemID))
                ) && 
                (
                    this.MainMerchandiseHierarchyGroupIDQualifier == input.MainMerchandiseHierarchyGroupIDQualifier ||
                    (this.MainMerchandiseHierarchyGroupIDQualifier != null &&
                    this.MainMerchandiseHierarchyGroupIDQualifier.Equals(input.MainMerchandiseHierarchyGroupIDQualifier))
                ) && 
                (
                    this.MainMerchandiseHierarchyGroupID == input.MainMerchandiseHierarchyGroupID ||
                    (this.MainMerchandiseHierarchyGroupID != null &&
                    this.MainMerchandiseHierarchyGroupID.Equals(input.MainMerchandiseHierarchyGroupID))
                ) && 
                (
                    this.TaxReductionAmount == input.TaxReductionAmount ||
                    (this.TaxReductionAmount != null &&
                    this.TaxReductionAmount.Equals(input.TaxReductionAmount))
                ) && 
                (
                    this.TaxGroupID == input.TaxGroupID ||
                    (this.TaxGroupID != null &&
                    this.TaxGroupID.Equals(input.TaxGroupID))
                ) && 
                (
                    this.TaxReceiptPrintCode == input.TaxReceiptPrintCode ||
                    (this.TaxReceiptPrintCode != null &&
                    this.TaxReceiptPrintCode.Equals(input.TaxReceiptPrintCode))
                ) && 
                (
                    this.TareCount == input.TareCount ||
                    (this.TareCount != null &&
                    this.TareCount.Equals(input.TareCount))
                ) && 
                (
                    this.OriginalTaxGroupID == input.OriginalTaxGroupID ||
                    (this.OriginalTaxGroupID != null &&
                    this.OriginalTaxGroupID.Equals(input.OriginalTaxGroupID))
                ) && 
                (
                    this.ManufacturerFamilyCode == input.ManufacturerFamilyCode ||
                    (this.ManufacturerFamilyCode != null &&
                    this.ManufacturerFamilyCode.Equals(input.ManufacturerFamilyCode))
                ) && 
                (
                    this.ManufacturerCompanyCode == input.ManufacturerCompanyCode ||
                    (this.ManufacturerCompanyCode != null &&
                    this.ManufacturerCompanyCode.Equals(input.ManufacturerCompanyCode))
                ) && 
                (
                    this.PriceGroupID == input.PriceGroupID ||
                    (this.PriceGroupID != null &&
                    this.PriceGroupID.Equals(input.PriceGroupID))
                ) && 
                (
                    this.FixedPriceFlag == input.FixedPriceFlag ||
                    (this.FixedPriceFlag != null &&
                    this.FixedPriceFlag.Equals(input.FixedPriceFlag))
                ) && 
                (
                    this.RootItemID == input.RootItemID ||
                    (this.RootItemID != null &&
                    this.RootItemID.Equals(input.RootItemID))
                ) && 
                (
                    this.SaleReturnLineItemExtensionList == input.SaleReturnLineItemExtensionList ||
                    this.SaleReturnLineItemExtensionList != null &&
                    this.SaleReturnLineItemExtensionList.SequenceEqual(input.SaleReturnLineItemExtensionList)
                ) && 
                (
                    this.SaleReturnLineItemCollectionList == input.SaleReturnLineItemCollectionList ||
                    this.SaleReturnLineItemCollectionList != null &&
                    this.SaleReturnLineItemCollectionList.SequenceEqual(input.SaleReturnLineItemCollectionList)
                ) && 
                (
                    this.SaleReturnLineItemPriceList == input.SaleReturnLineItemPriceList ||
                    this.SaleReturnLineItemPriceList != null &&
                    this.SaleReturnLineItemPriceList.SequenceEqual(input.SaleReturnLineItemPriceList)
                ) && 
                (
                    this.SaleReturnTaxLineItemList == input.SaleReturnTaxLineItemList ||
                    this.SaleReturnTaxLineItemList != null &&
                    this.SaleReturnTaxLineItemList.SequenceEqual(input.SaleReturnTaxLineItemList)
                ) && 
                (
                    this.RetailPriceModifierList == input.RetailPriceModifierList ||
                    this.RetailPriceModifierList != null &&
                    this.RetailPriceModifierList.SequenceEqual(input.RetailPriceModifierList)
                ) && 
                (
                    this.FrequentShopperPointsModifierList == input.FrequentShopperPointsModifierList ||
                    this.FrequentShopperPointsModifierList != null &&
                    this.FrequentShopperPointsModifierList.SequenceEqual(input.FrequentShopperPointsModifierList)
                ) && 
                (
                    this.SaleReturnLineItemPromotionTriggerList == input.SaleReturnLineItemPromotionTriggerList ||
                    this.SaleReturnLineItemPromotionTriggerList != null &&
                    this.SaleReturnLineItemPromotionTriggerList.SequenceEqual(input.SaleReturnLineItemPromotionTriggerList)
                ) && 
                (
                    this.SaleReturnLineItemCharacteristicList == input.SaleReturnLineItemCharacteristicList ||
                    this.SaleReturnLineItemCharacteristicList != null &&
                    this.SaleReturnLineItemCharacteristicList.SequenceEqual(input.SaleReturnLineItemCharacteristicList)
                ) && 
                (
                    this.SaleReturnLineItemModifierCouponList == input.SaleReturnLineItemModifierCouponList ||
                    this.SaleReturnLineItemModifierCouponList != null &&
                    this.SaleReturnLineItemModifierCouponList.SequenceEqual(input.SaleReturnLineItemModifierCouponList)
                ) && 
                (
                    this.SaleReturnLineItemModifierReferenceList == input.SaleReturnLineItemModifierReferenceList ||
                    this.SaleReturnLineItemModifierReferenceList != null &&
                    this.SaleReturnLineItemModifierReferenceList.SequenceEqual(input.SaleReturnLineItemModifierReferenceList)
                ) && 
                (
                    this.SaleReturnLineItemMerchandiseHierarchyGroupList == input.SaleReturnLineItemMerchandiseHierarchyGroupList ||
                    this.SaleReturnLineItemMerchandiseHierarchyGroupList != null &&
                    this.SaleReturnLineItemMerchandiseHierarchyGroupList.SequenceEqual(input.SaleReturnLineItemMerchandiseHierarchyGroupList)
                ) && 
                (
                    this.ExternalReferenceID == input.ExternalReferenceID ||
                    (this.ExternalReferenceID != null &&
                    this.ExternalReferenceID.Equals(input.ExternalReferenceID))
                ) && 
                (
                    this.FuelSalesLineItem == input.FuelSalesLineItem ||
                    (this.FuelSalesLineItem != null &&
                    this.FuelSalesLineItem.Equals(input.FuelSalesLineItem))
                ) && 
                (
                    this.SaleReturnLineItemAdditionalPriceList == input.SaleReturnLineItemAdditionalPriceList ||
                    this.SaleReturnLineItemAdditionalPriceList != null &&
                    this.SaleReturnLineItemAdditionalPriceList.SequenceEqual(input.SaleReturnLineItemAdditionalPriceList)
                ) && 
                (
                    this.SaleReturnLineItemSplitPackageList == input.SaleReturnLineItemSplitPackageList ||
                    this.SaleReturnLineItemSplitPackageList != null &&
                    this.SaleReturnLineItemSplitPackageList.SequenceEqual(input.SaleReturnLineItemSplitPackageList)
                ) && 
                (
                    this.SaleReturnLineItemGenericAttributeList == input.SaleReturnLineItemGenericAttributeList ||
                    this.SaleReturnLineItemGenericAttributeList != null &&
                    this.SaleReturnLineItemGenericAttributeList.SequenceEqual(input.SaleReturnLineItemGenericAttributeList)
                ) && 
                (
                    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.PositemID == input.PositemID ||
                    (this.PositemID != null &&
                    this.PositemID.Equals(input.PositemID))
                ) && 
                (
                    this.PosdepartmentID == input.PosdepartmentID ||
                    (this.PosdepartmentID != null &&
                    this.PosdepartmentID.Equals(input.PosdepartmentID))
                ) && 
                (
                    this.Wicflag == input.Wicflag ||
                    (this.Wicflag != null &&
                    this.Wicflag.Equals(input.Wicflag))
                ) && 
                (
                    this.ReturnLineItemList == input.ReturnLineItemList ||
                    this.ReturnLineItemList != null &&
                    this.ReturnLineItemList.SequenceEqual(input.ReturnLineItemList)
                ) && 
                (
                    this.SaleReturnLineItemSalesOrderList == input.SaleReturnLineItemSalesOrderList ||
                    this.SaleReturnLineItemSalesOrderList != null &&
                    this.SaleReturnLineItemSalesOrderList.SequenceEqual(input.SaleReturnLineItemSalesOrderList)
                ) && 
                (
                    this.SerializedUnitModiferList == input.SerializedUnitModiferList ||
                    this.SerializedUnitModiferList != null &&
                    this.SerializedUnitModiferList.SequenceEqual(input.SerializedUnitModiferList)
                ) && 
                (
                    this.LineItemAssociateList == input.LineItemAssociateList ||
                    this.LineItemAssociateList != null &&
                    this.LineItemAssociateList.SequenceEqual(input.LineItemAssociateList)
                ) && 
                (
                    this.SaleReturnTaxExemptTriggerList == input.SaleReturnTaxExemptTriggerList ||
                    this.SaleReturnTaxExemptTriggerList != null &&
                    this.SaleReturnTaxExemptTriggerList.SequenceEqual(input.SaleReturnTaxExemptTriggerList)
                ) && 
                (
                    this.AdditionalBonusLineItemList == input.AdditionalBonusLineItemList ||
                    this.AdditionalBonusLineItemList != null &&
                    this.AdditionalBonusLineItemList.SequenceEqual(input.AdditionalBonusLineItemList)
                ) && 
                (
                    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.Key != null)
                    hashCode = hashCode * 59 + this.Key.GetHashCode();
                if (this.ItemID != null)
                    hashCode = hashCode * 59 + this.ItemID.GetHashCode();
                if (this.UnitOfMeasureCode != null)
                    hashCode = hashCode * 59 + this.UnitOfMeasureCode.GetHashCode();
                if (this.ItemType != null)
                    hashCode = hashCode * 59 + this.ItemType.GetHashCode();
                if (this.SubItemType != null)
                    hashCode = hashCode * 59 + this.SubItemType.GetHashCode();
                if (this.RegularUnitPrice != null)
                    hashCode = hashCode * 59 + this.RegularUnitPrice.GetHashCode();
                if (this.RegularUnitPriceQuantity != null)
                    hashCode = hashCode * 59 + this.RegularUnitPriceQuantity.GetHashCode();
                if (this.ActualUnitPrice != null)
                    hashCode = hashCode * 59 + this.ActualUnitPrice.GetHashCode();
                if (this.ActualUnitPriceQuantity != null)
                    hashCode = hashCode * 59 + this.ActualUnitPriceQuantity.GetHashCode();
                if (this.Quantity != null)
                    hashCode = hashCode * 59 + this.Quantity.GetHashCode();
                if (this.Units != null)
                    hashCode = hashCode * 59 + this.Units.GetHashCode();
                if (this.ExtendedAmount != null)
                    hashCode = hashCode * 59 + this.ExtendedAmount.GetHashCode();
                if (this.ExtendedDiscountAmount != null)
                    hashCode = hashCode * 59 + this.ExtendedDiscountAmount.GetHashCode();
                if (this.SellUnitRetailPriceEntryMethodCode != null)
                    hashCode = hashCode * 59 + this.SellUnitRetailPriceEntryMethodCode.GetHashCode();
                if (this.ActionCode != null)
                    hashCode = hashCode * 59 + this.ActionCode.GetHashCode();
                if (this.ReasonCode != null)
                    hashCode = hashCode * 59 + this.ReasonCode.GetHashCode();
                if (this.ItemTraceableUnitID != null)
                    hashCode = hashCode * 59 + this.ItemTraceableUnitID.GetHashCode();
                if (this.QuantityInputMethod != null)
                    hashCode = hashCode * 59 + this.QuantityInputMethod.GetHashCode();
                if (this.Length != null)
                    hashCode = hashCode * 59 + this.Length.GetHashCode();
                if (this.Width != null)
                    hashCode = hashCode * 59 + this.Width.GetHashCode();
                if (this.Height != null)
                    hashCode = hashCode * 59 + this.Height.GetHashCode();
                if (this.ManualWeightInputFlag != null)
                    hashCode = hashCode * 59 + this.ManualWeightInputFlag.GetHashCode();
                if (this.ReceiptText != null)
                    hashCode = hashCode * 59 + this.ReceiptText.GetHashCode();
                if (this.ReceiptDescription != null)
                    hashCode = hashCode * 59 + this.ReceiptDescription.GetHashCode();
                if (this.AllowFoodStampFlag != null)
                    hashCode = hashCode * 59 + this.AllowFoodStampFlag.GetHashCode();
                if (this.RegistrationNumber != null)
                    hashCode = hashCode * 59 + this.RegistrationNumber.GetHashCode();
                if (this.NegativeLineItemFlag != null)
                    hashCode = hashCode * 59 + this.NegativeLineItemFlag.GetHashCode();
                if (this.DiscountFlag != null)
                    hashCode = hashCode * 59 + this.DiscountFlag.GetHashCode();
                if (this.FrequentShopperPointsEligibilityFlag != null)
                    hashCode = hashCode * 59 + this.FrequentShopperPointsEligibilityFlag.GetHashCode();
                if (this.DiscountTypeCode != null)
                    hashCode = hashCode * 59 + this.DiscountTypeCode.GetHashCode();
                if (this.PriceChangeTypeCode != null)
                    hashCode = hashCode * 59 + this.PriceChangeTypeCode.GetHashCode();
                if (this.PriceTypeCode != null)
                    hashCode = hashCode * 59 + this.PriceTypeCode.GetHashCode();
                if (this.GrandExtendedAmount != null)
                    hashCode = hashCode * 59 + this.GrandExtendedAmount.GetHashCode();
                if (this.ReasonCodeGroupCode != null)
                    hashCode = hashCode * 59 + this.ReasonCodeGroupCode.GetHashCode();
                if (this.ReasonDescription != null)
                    hashCode = hashCode * 59 + this.ReasonDescription.GetHashCode();
                if (this.NotConsideredByLoyaltyEngineFlag != null)
                    hashCode = hashCode * 59 + this.NotConsideredByLoyaltyEngineFlag.GetHashCode();
                if (this.MerchandiseHierarchyGroupName != null)
                    hashCode = hashCode * 59 + this.MerchandiseHierarchyGroupName.GetHashCode();
                if (this.MerchandiseHierarchyGroupDescription != null)
                    hashCode = hashCode * 59 + this.MerchandiseHierarchyGroupDescription.GetHashCode();
                if (this.ItemClassCode != null)
                    hashCode = hashCode * 59 + this.ItemClassCode.GetHashCode();
                if (this.ProhibitTaxExemptFlag != null)
                    hashCode = hashCode * 59 + this.ProhibitTaxExemptFlag.GetHashCode();
                if (this.ProhibitReturnFlag != null)
                    hashCode = hashCode * 59 + this.ProhibitReturnFlag.GetHashCode();
                if (this.WarrantyDuration != null)
                    hashCode = hashCode * 59 + this.WarrantyDuration.GetHashCode();
                if (this.DepositTypeCode != null)
                    hashCode = hashCode * 59 + this.DepositTypeCode.GetHashCode();
                if (this.TaxExemptCode != null)
                    hashCode = hashCode * 59 + this.TaxExemptCode.GetHashCode();
                if (this.InvoiceID != null)
                    hashCode = hashCode * 59 + this.InvoiceID.GetHashCode();
                if (this.MainPOSItemID != null)
                    hashCode = hashCode * 59 + this.MainPOSItemID.GetHashCode();
                if (this.MainMerchandiseHierarchyGroupIDQualifier != null)
                    hashCode = hashCode * 59 + this.MainMerchandiseHierarchyGroupIDQualifier.GetHashCode();
                if (this.MainMerchandiseHierarchyGroupID != null)
                    hashCode = hashCode * 59 + this.MainMerchandiseHierarchyGroupID.GetHashCode();
                if (this.TaxReductionAmount != null)
                    hashCode = hashCode * 59 + this.TaxReductionAmount.GetHashCode();
                if (this.TaxGroupID != null)
                    hashCode = hashCode * 59 + this.TaxGroupID.GetHashCode();
                if (this.TaxReceiptPrintCode != null)
                    hashCode = hashCode * 59 + this.TaxReceiptPrintCode.GetHashCode();
                if (this.TareCount != null)
                    hashCode = hashCode * 59 + this.TareCount.GetHashCode();
                if (this.OriginalTaxGroupID != null)
                    hashCode = hashCode * 59 + this.OriginalTaxGroupID.GetHashCode();
                if (this.ManufacturerFamilyCode != null)
                    hashCode = hashCode * 59 + this.ManufacturerFamilyCode.GetHashCode();
                if (this.ManufacturerCompanyCode != null)
                    hashCode = hashCode * 59 + this.ManufacturerCompanyCode.GetHashCode();
                if (this.PriceGroupID != null)
                    hashCode = hashCode * 59 + this.PriceGroupID.GetHashCode();
                if (this.FixedPriceFlag != null)
                    hashCode = hashCode * 59 + this.FixedPriceFlag.GetHashCode();
                if (this.RootItemID != null)
                    hashCode = hashCode * 59 + this.RootItemID.GetHashCode();
                if (this.SaleReturnLineItemExtensionList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemExtensionList.GetHashCode();
                if (this.SaleReturnLineItemCollectionList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemCollectionList.GetHashCode();
                if (this.SaleReturnLineItemPriceList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemPriceList.GetHashCode();
                if (this.SaleReturnTaxLineItemList != null)
                    hashCode = hashCode * 59 + this.SaleReturnTaxLineItemList.GetHashCode();
                if (this.RetailPriceModifierList != null)
                    hashCode = hashCode * 59 + this.RetailPriceModifierList.GetHashCode();
                if (this.FrequentShopperPointsModifierList != null)
                    hashCode = hashCode * 59 + this.FrequentShopperPointsModifierList.GetHashCode();
                if (this.SaleReturnLineItemPromotionTriggerList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemPromotionTriggerList.GetHashCode();
                if (this.SaleReturnLineItemCharacteristicList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemCharacteristicList.GetHashCode();
                if (this.SaleReturnLineItemModifierCouponList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemModifierCouponList.GetHashCode();
                if (this.SaleReturnLineItemModifierReferenceList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemModifierReferenceList.GetHashCode();
                if (this.SaleReturnLineItemMerchandiseHierarchyGroupList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemMerchandiseHierarchyGroupList.GetHashCode();
                if (this.ExternalReferenceID != null)
                    hashCode = hashCode * 59 + this.ExternalReferenceID.GetHashCode();
                if (this.FuelSalesLineItem != null)
                    hashCode = hashCode * 59 + this.FuelSalesLineItem.GetHashCode();
                if (this.SaleReturnLineItemAdditionalPriceList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemAdditionalPriceList.GetHashCode();
                if (this.SaleReturnLineItemSplitPackageList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemSplitPackageList.GetHashCode();
                if (this.SaleReturnLineItemGenericAttributeList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemGenericAttributeList.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.PositemID != null)
                    hashCode = hashCode * 59 + this.PositemID.GetHashCode();
                if (this.PosdepartmentID != null)
                    hashCode = hashCode * 59 + this.PosdepartmentID.GetHashCode();
                if (this.Wicflag != null)
                    hashCode = hashCode * 59 + this.Wicflag.GetHashCode();
                if (this.ReturnLineItemList != null)
                    hashCode = hashCode * 59 + this.ReturnLineItemList.GetHashCode();
                if (this.SaleReturnLineItemSalesOrderList != null)
                    hashCode = hashCode * 59 + this.SaleReturnLineItemSalesOrderList.GetHashCode();
                if (this.SerializedUnitModiferList != null)
                    hashCode = hashCode * 59 + this.SerializedUnitModiferList.GetHashCode();
                if (this.LineItemAssociateList != null)
                    hashCode = hashCode * 59 + this.LineItemAssociateList.GetHashCode();
                if (this.SaleReturnTaxExemptTriggerList != null)
                    hashCode = hashCode * 59 + this.SaleReturnTaxExemptTriggerList.GetHashCode();
                if (this.AdditionalBonusLineItemList != null)
                    hashCode = hashCode * 59 + this.AdditionalBonusLineItemList.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;
        }
    }

}
