/* 
 * 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>
    /// FuelingTransaction &lt;emph&gt;undocumented&lt;/emph&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction :  IEquatable<ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction>, IValidatableObject
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction" /> class.
        /// </summary>
        /// <param name="key">&lt;p&gt;Getter for inner key class.&lt;/p&gt; (required).</param>
        /// <param name="itemID">Reference to the Item (required).</param>
        /// <param name="fuelingPointID">A unique identifier for the FuelingPoint at a particular BusinessUnitGroup.</param>
        /// <param name="nozzleID">A unique identifier for the Nozzle.</param>
        /// <param name="typeCode">A two charcter code denoting the type of FuelingTransactionEvent being recorded.Possible values includePostPay: Where the FuelingTransaction is yet to be sold by a FuelSalesLineItem in a RetailTransactionPrePayCompletion: Where money has been collected for the FuelingTransaction in a previous FuelSalesLineItem and there is no refund required.PrePayRefund: Where too much money was collected for the FuelingTransaction in a previous FuelSalesLineItem, and a further FuelSalesLineItem in a RetailTransaction is required to deal with the refund..</param>
        /// <param name="timeStamp">The date &amp;amp; time of the completion of the fueling transaction; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone) (required).</param>
        /// <param name="timeStampUTC0">The date &amp;amp; time of the completion of the fueling transaction (UTC0); UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone).</param>
        /// <param name="volume">The volume of fuel delivered in the fueling transaction. (required).</param>
        /// <param name="unitPrice">The price per volume unit charged by the FUELING POINT for the fuel delivered in the FUELING TRANSACTION (required).</param>
        /// <param name="authorizationElapsedTime">The number of milli-seconds elapsed between CUSTOMER lifting NOZZLE and FUELING TRANSACTION commencing&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(18, 0). Be aware of this and round value!.</param>
        /// <param name="deliveryElapsedTime">The number of seconds between FUELING TRANSACTION commencing and completing. &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(18, 0). Be aware of this and round value!.</param>
        /// <param name="saleElapsedTime">The number of seconds elapsed between FUELING TRANSACTION completing and being sold at a point of sale. (required).</param>
        /// <param name="fuelGradeID">A unique system assigned identifier for the retailer&#39;s itemID (values between 01-99) (required).</param>
        /// <param name="unitOfMeasureCode">The code used to specify the units in which a value is being expressed, or manner in which a measurement has been taken. This code relates to the UCC data element 355. (required).</param>
        /// <param name="fleetCardPermissionTypeCode">Restricts the possibility of using the fleet card for paying to dedicated merchandise only. The code maintained for the merchandise and the code on the fleet card which is intended to be used for paying the transaction have to match in order that this merchandise can be paid by using the fleet card. Whether/for which line items of the transacttion the matching is given is determined by the external payment provider..</param>
        /// <param name="testDeliveryTypeCode">Records the clearing of a FUELING TRANSACTION without accepting payment because the fueling transaction was for testing or calibrating the FUELING POINT..</param>
        /// <param name="driveOffTypeCode">Records the clearing of a FUELING TRANSACTION without accepting payment because the customer simply drove off wthout paying..</param>
        /// <param name="xxcustom05">Customizable information.</param>
        /// <param name="xxcustom03">Customizable information.</param>
        /// <param name="xxcustom02">Customizable information.</param>
        /// <param name="xxcustom04">Customizable information.</param>
        /// <param name="xxcustom01">Customizable information.</param>
        public ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction(ComGkSoftwareGkrApiTxpoolDtoFuelingTransactionKey key = default(ComGkSoftwareGkrApiTxpoolDtoFuelingTransactionKey), string itemID = default(string), string fuelingPointID = default(string), string nozzleID = default(string), string typeCode = default(string), string timeStamp = default(string), DateTime? timeStampUTC0 = default(DateTime?), double? volume = default(double?), double? unitPrice = default(double?), double? authorizationElapsedTime = default(double?), double? deliveryElapsedTime = default(double?), double? saleElapsedTime = default(double?), string fuelGradeID = default(string), string unitOfMeasureCode = default(string), string fleetCardPermissionTypeCode = default(string), string testDeliveryTypeCode = default(string), string driveOffTypeCode = default(string), string xxcustom05 = default(string), string xxcustom03 = default(string), string xxcustom02 = default(string), string xxcustom04 = default(string), string xxcustom01 = default(string))
        {
            // to ensure "key" is required (not null)
            if (key == null)
            {
                throw new InvalidDataException("key is a required property for ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction and cannot be null");
            }
            else
            {
                this.Key = key;
            }
            // to ensure "itemID" is required (not null)
            if (itemID == null)
            {
                throw new InvalidDataException("itemID is a required property for ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction and cannot be null");
            }
            else
            {
                this.ItemID = itemID;
            }
            // to ensure "timeStamp" is required (not null)
            if (timeStamp == null)
            {
                throw new InvalidDataException("timeStamp is a required property for ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction and cannot be null");
            }
            else
            {
                this.TimeStamp = timeStamp;
            }
            // to ensure "volume" is required (not null)
            if (volume == null)
            {
                throw new InvalidDataException("volume is a required property for ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction and cannot be null");
            }
            else
            {
                this.Volume = volume;
            }
            // to ensure "unitPrice" is required (not null)
            if (unitPrice == null)
            {
                throw new InvalidDataException("unitPrice is a required property for ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction and cannot be null");
            }
            else
            {
                this.UnitPrice = unitPrice;
            }
            // to ensure "saleElapsedTime" is required (not null)
            if (saleElapsedTime == null)
            {
                throw new InvalidDataException("saleElapsedTime is a required property for ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction and cannot be null");
            }
            else
            {
                this.SaleElapsedTime = saleElapsedTime;
            }
            // to ensure "fuelGradeID" is required (not null)
            if (fuelGradeID == null)
            {
                throw new InvalidDataException("fuelGradeID is a required property for ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction and cannot be null");
            }
            else
            {
                this.FuelGradeID = fuelGradeID;
            }
            // to ensure "unitOfMeasureCode" is required (not null)
            if (unitOfMeasureCode == null)
            {
                throw new InvalidDataException("unitOfMeasureCode is a required property for ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction and cannot be null");
            }
            else
            {
                this.UnitOfMeasureCode = unitOfMeasureCode;
            }
            this.FuelingPointID = fuelingPointID;
            this.NozzleID = nozzleID;
            this.TypeCode = typeCode;
            this.TimeStampUTC0 = timeStampUTC0;
            this.AuthorizationElapsedTime = authorizationElapsedTime;
            this.DeliveryElapsedTime = deliveryElapsedTime;
            this.FleetCardPermissionTypeCode = fleetCardPermissionTypeCode;
            this.TestDeliveryTypeCode = testDeliveryTypeCode;
            this.DriveOffTypeCode = driveOffTypeCode;
            this.Xxcustom05 = xxcustom05;
            this.Xxcustom03 = xxcustom03;
            this.Xxcustom02 = xxcustom02;
            this.Xxcustom04 = xxcustom04;
            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 ComGkSoftwareGkrApiTxpoolDtoFuelingTransactionKey Key { get; set; }

        /// <summary>
        /// Reference to the Item
        /// </summary>
        /// <value>Reference to the Item</value>
        [DataMember(Name="itemID", EmitDefaultValue=false)]
        public string ItemID { get; set; }

        /// <summary>
        /// A unique identifier for the FuelingPoint at a particular BusinessUnitGroup
        /// </summary>
        /// <value>A unique identifier for the FuelingPoint at a particular BusinessUnitGroup</value>
        [DataMember(Name="fuelingPointID", EmitDefaultValue=false)]
        public string FuelingPointID { get; set; }

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

        /// <summary>
        /// A two charcter code denoting the type of FuelingTransactionEvent being recorded.Possible values includePostPay: Where the FuelingTransaction is yet to be sold by a FuelSalesLineItem in a RetailTransactionPrePayCompletion: Where money has been collected for the FuelingTransaction in a previous FuelSalesLineItem and there is no refund required.PrePayRefund: Where too much money was collected for the FuelingTransaction in a previous FuelSalesLineItem, and a further FuelSalesLineItem in a RetailTransaction is required to deal with the refund.
        /// </summary>
        /// <value>A two charcter code denoting the type of FuelingTransactionEvent being recorded.Possible values includePostPay: Where the FuelingTransaction is yet to be sold by a FuelSalesLineItem in a RetailTransactionPrePayCompletion: Where money has been collected for the FuelingTransaction in a previous FuelSalesLineItem and there is no refund required.PrePayRefund: Where too much money was collected for the FuelingTransaction in a previous FuelSalesLineItem, and a further FuelSalesLineItem in a RetailTransaction is required to deal with the refund.</value>
        [DataMember(Name="typeCode", EmitDefaultValue=false)]
        public string TypeCode { get; set; }

        /// <summary>
        /// The date &amp;amp; time of the completion of the fueling transaction; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)
        /// </summary>
        /// <value>The date &amp;amp; time of the completion of the fueling transaction; Date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSS&#39; (no timezone)</value>
        [DataMember(Name="timeStamp", EmitDefaultValue=false)]
        public string TimeStamp { get; set; }

        /// <summary>
        /// The date &amp;amp; time of the completion of the fueling transaction (UTC0); UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)
        /// </summary>
        /// <value>The date &amp;amp; time of the completion of the fueling transaction (UTC0); UTC0 date format &#39;yyyy-MM-dd&#39;T&#39;HH:mm:ss.SSSZ&#39; (with timezone)</value>
        [DataMember(Name="timeStampUTC0", EmitDefaultValue=false)]
        public DateTime? TimeStampUTC0 { get; set; }

        /// <summary>
        /// The volume of fuel delivered in the fueling transaction.
        /// </summary>
        /// <value>The volume of fuel delivered in the fueling transaction.</value>
        [DataMember(Name="volume", EmitDefaultValue=false)]
        public double? Volume { get; set; }

        /// <summary>
        /// The price per volume unit charged by the FUELING POINT for the fuel delivered in the FUELING TRANSACTION
        /// </summary>
        /// <value>The price per volume unit charged by the FUELING POINT for the fuel delivered in the FUELING TRANSACTION</value>
        [DataMember(Name="unitPrice", EmitDefaultValue=false)]
        public double? UnitPrice { get; set; }

        /// <summary>
        /// The number of milli-seconds elapsed between CUSTOMER lifting NOZZLE and FUELING TRANSACTION commencing&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(18, 0). Be aware of this and round value!
        /// </summary>
        /// <value>The number of milli-seconds elapsed between CUSTOMER lifting NOZZLE and FUELING TRANSACTION commencing&lt;br&gt;Fixed decimal precision expected, definition of used precision: double(18, 0). Be aware of this and round value!</value>
        [DataMember(Name="authorizationElapsedTime", EmitDefaultValue=false)]
        public double? AuthorizationElapsedTime { get; set; }

        /// <summary>
        /// The number of seconds between FUELING TRANSACTION commencing and completing. &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(18, 0). Be aware of this and round value!
        /// </summary>
        /// <value>The number of seconds between FUELING TRANSACTION commencing and completing. &lt;br&gt;Fixed decimal precision expected, definition of used precision: double(18, 0). Be aware of this and round value!</value>
        [DataMember(Name="deliveryElapsedTime", EmitDefaultValue=false)]
        public double? DeliveryElapsedTime { get; set; }

        /// <summary>
        /// The number of seconds elapsed between FUELING TRANSACTION completing and being sold at a point of sale.
        /// </summary>
        /// <value>The number of seconds elapsed between FUELING TRANSACTION completing and being sold at a point of sale.</value>
        [DataMember(Name="saleElapsedTime", EmitDefaultValue=false)]
        public double? SaleElapsedTime { get; set; }

        /// <summary>
        /// A unique system assigned identifier for the retailer&#39;s itemID (values between 01-99)
        /// </summary>
        /// <value>A unique system assigned identifier for the retailer&#39;s itemID (values between 01-99)</value>
        [DataMember(Name="fuelGradeID", EmitDefaultValue=false)]
        public string FuelGradeID { get; set; }

        /// <summary>
        /// The code used to specify the units in which a value is being expressed, or manner in which a measurement has been taken. This code relates to the UCC data element 355.
        /// </summary>
        /// <value>The code used to specify the units in which a value is being expressed, or manner in which a measurement has been taken. This code relates to the UCC data element 355.</value>
        [DataMember(Name="unitOfMeasureCode", EmitDefaultValue=false)]
        public string UnitOfMeasureCode { get; set; }

        /// <summary>
        /// Restricts the possibility of using the fleet card for paying to dedicated merchandise only. The code maintained for the merchandise and the code on the fleet card which is intended to be used for paying the transaction have to match in order that this merchandise can be paid by using the fleet card. Whether/for which line items of the transacttion the matching is given is determined by the external payment provider.
        /// </summary>
        /// <value>Restricts the possibility of using the fleet card for paying to dedicated merchandise only. The code maintained for the merchandise and the code on the fleet card which is intended to be used for paying the transaction have to match in order that this merchandise can be paid by using the fleet card. Whether/for which line items of the transacttion the matching is given is determined by the external payment provider.</value>
        [DataMember(Name="fleetCardPermissionTypeCode", EmitDefaultValue=false)]
        public string FleetCardPermissionTypeCode { get; set; }

        /// <summary>
        /// Records the clearing of a FUELING TRANSACTION without accepting payment because the fueling transaction was for testing or calibrating the FUELING POINT.
        /// </summary>
        /// <value>Records the clearing of a FUELING TRANSACTION without accepting payment because the fueling transaction was for testing or calibrating the FUELING POINT.</value>
        [DataMember(Name="testDeliveryTypeCode", EmitDefaultValue=false)]
        public string TestDeliveryTypeCode { get; set; }

        /// <summary>
        /// Records the clearing of a FUELING TRANSACTION without accepting payment because the customer simply drove off wthout paying.
        /// </summary>
        /// <value>Records the clearing of a FUELING TRANSACTION without accepting payment because the customer simply drove off wthout paying.</value>
        [DataMember(Name="driveOffTypeCode", EmitDefaultValue=false)]
        public string DriveOffTypeCode { 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="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>
        /// 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 ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction {\n");
            sb.Append("  Key: ").Append(Key).Append("\n");
            sb.Append("  ItemID: ").Append(ItemID).Append("\n");
            sb.Append("  FuelingPointID: ").Append(FuelingPointID).Append("\n");
            sb.Append("  NozzleID: ").Append(NozzleID).Append("\n");
            sb.Append("  TypeCode: ").Append(TypeCode).Append("\n");
            sb.Append("  TimeStamp: ").Append(TimeStamp).Append("\n");
            sb.Append("  TimeStampUTC0: ").Append(TimeStampUTC0).Append("\n");
            sb.Append("  Volume: ").Append(Volume).Append("\n");
            sb.Append("  UnitPrice: ").Append(UnitPrice).Append("\n");
            sb.Append("  AuthorizationElapsedTime: ").Append(AuthorizationElapsedTime).Append("\n");
            sb.Append("  DeliveryElapsedTime: ").Append(DeliveryElapsedTime).Append("\n");
            sb.Append("  SaleElapsedTime: ").Append(SaleElapsedTime).Append("\n");
            sb.Append("  FuelGradeID: ").Append(FuelGradeID).Append("\n");
            sb.Append("  UnitOfMeasureCode: ").Append(UnitOfMeasureCode).Append("\n");
            sb.Append("  FleetCardPermissionTypeCode: ").Append(FleetCardPermissionTypeCode).Append("\n");
            sb.Append("  TestDeliveryTypeCode: ").Append(TestDeliveryTypeCode).Append("\n");
            sb.Append("  DriveOffTypeCode: ").Append(DriveOffTypeCode).Append("\n");
            sb.Append("  Xxcustom05: ").Append(Xxcustom05).Append("\n");
            sb.Append("  Xxcustom03: ").Append(Xxcustom03).Append("\n");
            sb.Append("  Xxcustom02: ").Append(Xxcustom02).Append("\n");
            sb.Append("  Xxcustom04: ").Append(Xxcustom04).Append("\n");
            sb.Append("  Xxcustom01: ").Append(Xxcustom01).Append("\n");
            sb.Append("}\n");
            return sb.ToString();
        }
  
        /// <summary>
        /// Returns the JSON string presentation of the object
        /// </summary>
        /// <returns>JSON string presentation of the object</returns>
        public virtual string ToJson()
        {
            return JsonConvert.SerializeObject(this, Formatting.Indented);
        }

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

        /// <summary>
        /// Returns true if ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction instances are equal
        /// </summary>
        /// <param name="input">Instance of ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(ComGkSoftwareGkrApiTxpoolDtoFuelingTransaction 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.FuelingPointID == input.FuelingPointID ||
                    (this.FuelingPointID != null &&
                    this.FuelingPointID.Equals(input.FuelingPointID))
                ) && 
                (
                    this.NozzleID == input.NozzleID ||
                    (this.NozzleID != null &&
                    this.NozzleID.Equals(input.NozzleID))
                ) && 
                (
                    this.TypeCode == input.TypeCode ||
                    (this.TypeCode != null &&
                    this.TypeCode.Equals(input.TypeCode))
                ) && 
                (
                    this.TimeStamp == input.TimeStamp ||
                    (this.TimeStamp != null &&
                    this.TimeStamp.Equals(input.TimeStamp))
                ) && 
                (
                    this.TimeStampUTC0 == input.TimeStampUTC0 ||
                    (this.TimeStampUTC0 != null &&
                    this.TimeStampUTC0.Equals(input.TimeStampUTC0))
                ) && 
                (
                    this.Volume == input.Volume ||
                    (this.Volume != null &&
                    this.Volume.Equals(input.Volume))
                ) && 
                (
                    this.UnitPrice == input.UnitPrice ||
                    (this.UnitPrice != null &&
                    this.UnitPrice.Equals(input.UnitPrice))
                ) && 
                (
                    this.AuthorizationElapsedTime == input.AuthorizationElapsedTime ||
                    (this.AuthorizationElapsedTime != null &&
                    this.AuthorizationElapsedTime.Equals(input.AuthorizationElapsedTime))
                ) && 
                (
                    this.DeliveryElapsedTime == input.DeliveryElapsedTime ||
                    (this.DeliveryElapsedTime != null &&
                    this.DeliveryElapsedTime.Equals(input.DeliveryElapsedTime))
                ) && 
                (
                    this.SaleElapsedTime == input.SaleElapsedTime ||
                    (this.SaleElapsedTime != null &&
                    this.SaleElapsedTime.Equals(input.SaleElapsedTime))
                ) && 
                (
                    this.FuelGradeID == input.FuelGradeID ||
                    (this.FuelGradeID != null &&
                    this.FuelGradeID.Equals(input.FuelGradeID))
                ) && 
                (
                    this.UnitOfMeasureCode == input.UnitOfMeasureCode ||
                    (this.UnitOfMeasureCode != null &&
                    this.UnitOfMeasureCode.Equals(input.UnitOfMeasureCode))
                ) && 
                (
                    this.FleetCardPermissionTypeCode == input.FleetCardPermissionTypeCode ||
                    (this.FleetCardPermissionTypeCode != null &&
                    this.FleetCardPermissionTypeCode.Equals(input.FleetCardPermissionTypeCode))
                ) && 
                (
                    this.TestDeliveryTypeCode == input.TestDeliveryTypeCode ||
                    (this.TestDeliveryTypeCode != null &&
                    this.TestDeliveryTypeCode.Equals(input.TestDeliveryTypeCode))
                ) && 
                (
                    this.DriveOffTypeCode == input.DriveOffTypeCode ||
                    (this.DriveOffTypeCode != null &&
                    this.DriveOffTypeCode.Equals(input.DriveOffTypeCode))
                ) && 
                (
                    this.Xxcustom05 == input.Xxcustom05 ||
                    (this.Xxcustom05 != null &&
                    this.Xxcustom05.Equals(input.Xxcustom05))
                ) && 
                (
                    this.Xxcustom03 == input.Xxcustom03 ||
                    (this.Xxcustom03 != null &&
                    this.Xxcustom03.Equals(input.Xxcustom03))
                ) && 
                (
                    this.Xxcustom02 == input.Xxcustom02 ||
                    (this.Xxcustom02 != null &&
                    this.Xxcustom02.Equals(input.Xxcustom02))
                ) && 
                (
                    this.Xxcustom04 == input.Xxcustom04 ||
                    (this.Xxcustom04 != null &&
                    this.Xxcustom04.Equals(input.Xxcustom04))
                ) && 
                (
                    this.Xxcustom01 == input.Xxcustom01 ||
                    (this.Xxcustom01 != null &&
                    this.Xxcustom01.Equals(input.Xxcustom01))
                );
        }

        /// <summary>
        /// Gets the hash code
        /// </summary>
        /// <returns>Hash code</returns>
        public override int GetHashCode()
        {
            unchecked // Overflow is fine, just wrap
            {
                int hashCode = 41;
                if (this.Key != null)
                    hashCode = hashCode * 59 + this.Key.GetHashCode();
                if (this.ItemID != null)
                    hashCode = hashCode * 59 + this.ItemID.GetHashCode();
                if (this.FuelingPointID != null)
                    hashCode = hashCode * 59 + this.FuelingPointID.GetHashCode();
                if (this.NozzleID != null)
                    hashCode = hashCode * 59 + this.NozzleID.GetHashCode();
                if (this.TypeCode != null)
                    hashCode = hashCode * 59 + this.TypeCode.GetHashCode();
                if (this.TimeStamp != null)
                    hashCode = hashCode * 59 + this.TimeStamp.GetHashCode();
                if (this.TimeStampUTC0 != null)
                    hashCode = hashCode * 59 + this.TimeStampUTC0.GetHashCode();
                if (this.Volume != null)
                    hashCode = hashCode * 59 + this.Volume.GetHashCode();
                if (this.UnitPrice != null)
                    hashCode = hashCode * 59 + this.UnitPrice.GetHashCode();
                if (this.AuthorizationElapsedTime != null)
                    hashCode = hashCode * 59 + this.AuthorizationElapsedTime.GetHashCode();
                if (this.DeliveryElapsedTime != null)
                    hashCode = hashCode * 59 + this.DeliveryElapsedTime.GetHashCode();
                if (this.SaleElapsedTime != null)
                    hashCode = hashCode * 59 + this.SaleElapsedTime.GetHashCode();
                if (this.FuelGradeID != null)
                    hashCode = hashCode * 59 + this.FuelGradeID.GetHashCode();
                if (this.UnitOfMeasureCode != null)
                    hashCode = hashCode * 59 + this.UnitOfMeasureCode.GetHashCode();
                if (this.FleetCardPermissionTypeCode != null)
                    hashCode = hashCode * 59 + this.FleetCardPermissionTypeCode.GetHashCode();
                if (this.TestDeliveryTypeCode != null)
                    hashCode = hashCode * 59 + this.TestDeliveryTypeCode.GetHashCode();
                if (this.DriveOffTypeCode != null)
                    hashCode = hashCode * 59 + this.DriveOffTypeCode.GetHashCode();
                if (this.Xxcustom05 != null)
                    hashCode = hashCode * 59 + this.Xxcustom05.GetHashCode();
                if (this.Xxcustom03 != null)
                    hashCode = hashCode * 59 + this.Xxcustom03.GetHashCode();
                if (this.Xxcustom02 != null)
                    hashCode = hashCode * 59 + this.Xxcustom02.GetHashCode();
                if (this.Xxcustom04 != null)
                    hashCode = hashCode * 59 + this.Xxcustom04.GetHashCode();
                if (this.Xxcustom01 != null)
                    hashCode = hashCode * 59 + this.Xxcustom01.GetHashCode();
                return hashCode;
            }
        }

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

}
