/* 
 * 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>
    /// TenderDO &lt;p&gt;Tender includes all the forms of payment that are accepted by the retail store in settling sales and other transactions.&lt;br /&gt;&lt;/p&gt;
    /// </summary>
    [DataContract]
    public partial class ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO :  IEquatable<ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO>, IValidatableObject
    {
        /// <summary>
        /// &lt;p&gt;Defines type of tender pickup:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; NOT_ALLOWED(01) - Not allowed&lt;/li&gt;&lt;br /&gt; &lt;li&gt; ALLOWED(02) - Allowed&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines type of tender pickup:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; NOT_ALLOWED(01) - Not allowed&lt;/li&gt;&lt;br /&gt; &lt;li&gt; ALLOWED(02) - Allowed&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum PickupTypeCodeEnum
        {
            
            /// <summary>
            /// Enum NOTALLOWED for value: NOT_ALLOWED
            /// </summary>
            [EnumMember(Value = "NOT_ALLOWED")]
            NOTALLOWED = 1,
            
            /// <summary>
            /// Enum ALLOWED for value: ALLOWED
            /// </summary>
            [EnumMember(Value = "ALLOWED")]
            ALLOWED = 2
        }

        /// <summary>
        /// &lt;p&gt;Defines type of tender pickup:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; NOT_ALLOWED(01) - Not allowed&lt;/li&gt;&lt;br /&gt; &lt;li&gt; ALLOWED(02) - Allowed&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines type of tender pickup:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; NOT_ALLOWED(01) - Not allowed&lt;/li&gt;&lt;br /&gt; &lt;li&gt; ALLOWED(02) - Allowed&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="pickupTypeCode", EmitDefaultValue=false)]
        public PickupTypeCodeEnum? PickupTypeCode { get; set; }
        /// <summary>
        /// &lt;p&gt;A typecode to define how a tender is picked up from safe / delivered to bank:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; NO_DELIVERY(00) - no delivery&lt;/li&gt;&lt;br /&gt; &lt;li&gt; MANUAL_DELIVERY(01) - manual delivery&lt;/li&gt;&lt;br /&gt; &lt;li&gt; AUTOMATIC_DELIVERY(02) - automatic delivery&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;A typecode to define how a tender is picked up from safe / delivered to bank:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; NO_DELIVERY(00) - no delivery&lt;/li&gt;&lt;br /&gt; &lt;li&gt; MANUAL_DELIVERY(01) - manual delivery&lt;/li&gt;&lt;br /&gt; &lt;li&gt; AUTOMATIC_DELIVERY(02) - automatic delivery&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum DeliveryTypeCodeEnum
        {
            
            /// <summary>
            /// Enum NODELIVERY for value: NO_DELIVERY
            /// </summary>
            [EnumMember(Value = "NO_DELIVERY")]
            NODELIVERY = 1,
            
            /// <summary>
            /// Enum MANUALDELIVERY for value: MANUAL_DELIVERY
            /// </summary>
            [EnumMember(Value = "MANUAL_DELIVERY")]
            MANUALDELIVERY = 2,
            
            /// <summary>
            /// Enum AUTOMATICDELIVERY for value: AUTOMATIC_DELIVERY
            /// </summary>
            [EnumMember(Value = "AUTOMATIC_DELIVERY")]
            AUTOMATICDELIVERY = 3,
            
            /// <summary>
            /// Enum BANKPAYMENTONLY for value: BANK_PAYMENT_ONLY
            /// </summary>
            [EnumMember(Value = "BANK_PAYMENT_ONLY")]
            BANKPAYMENTONLY = 4,
            
            /// <summary>
            /// Enum SAFEBAGPACKINGONLY for value: SAFEBAG_PACKING_ONLY
            /// </summary>
            [EnumMember(Value = "SAFEBAG_PACKING_ONLY")]
            SAFEBAGPACKINGONLY = 5,
            
            /// <summary>
            /// Enum SAFEPAYOUTONLY for value: SAFE_PAYOUT_ONLY
            /// </summary>
            [EnumMember(Value = "SAFE_PAYOUT_ONLY")]
            SAFEPAYOUTONLY = 6
        }

        /// <summary>
        /// &lt;p&gt;A typecode to define how a tender is picked up from safe / delivered to bank:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; NO_DELIVERY(00) - no delivery&lt;/li&gt;&lt;br /&gt; &lt;li&gt; MANUAL_DELIVERY(01) - manual delivery&lt;/li&gt;&lt;br /&gt; &lt;li&gt; AUTOMATIC_DELIVERY(02) - automatic delivery&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;A typecode to define how a tender is picked up from safe / delivered to bank:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; NO_DELIVERY(00) - no delivery&lt;/li&gt;&lt;br /&gt; &lt;li&gt; MANUAL_DELIVERY(01) - manual delivery&lt;/li&gt;&lt;br /&gt; &lt;li&gt; AUTOMATIC_DELIVERY(02) - automatic delivery&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="deliveryTypeCode", EmitDefaultValue=false)]
        public DeliveryTypeCodeEnum? DeliveryTypeCode { get; set; }
        /// <summary>
        /// &lt;p&gt;Defines whether payment amount should be entered.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; REQUIRED(01) - required&lt;/li&gt;&lt;br /&gt; &lt;li&gt; OPTIONAL(02) - optional&lt;/li&gt;&lt;br /&gt; &lt;li&gt; PROHIBITED(03) - prohibited&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CONFIRM(04) - confirm&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines whether payment amount should be entered.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; REQUIRED(01) - required&lt;/li&gt;&lt;br /&gt; &lt;li&gt; OPTIONAL(02) - optional&lt;/li&gt;&lt;br /&gt; &lt;li&gt; PROHIBITED(03) - prohibited&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CONFIRM(04) - confirm&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum InputAmountConstraintEnum
        {
            
            /// <summary>
            /// Enum REQUIRED for value: REQUIRED
            /// </summary>
            [EnumMember(Value = "REQUIRED")]
            REQUIRED = 1,
            
            /// <summary>
            /// Enum OPTIONAL for value: OPTIONAL
            /// </summary>
            [EnumMember(Value = "OPTIONAL")]
            OPTIONAL = 2,
            
            /// <summary>
            /// Enum PROHIBITED for value: PROHIBITED
            /// </summary>
            [EnumMember(Value = "PROHIBITED")]
            PROHIBITED = 3,
            
            /// <summary>
            /// Enum CONFIRM for value: CONFIRM
            /// </summary>
            [EnumMember(Value = "CONFIRM")]
            CONFIRM = 4
        }

        /// <summary>
        /// &lt;p&gt;Defines whether payment amount should be entered.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; REQUIRED(01) - required&lt;/li&gt;&lt;br /&gt; &lt;li&gt; OPTIONAL(02) - optional&lt;/li&gt;&lt;br /&gt; &lt;li&gt; PROHIBITED(03) - prohibited&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CONFIRM(04) - confirm&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines whether payment amount should be entered.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; REQUIRED(01) - required&lt;/li&gt;&lt;br /&gt; &lt;li&gt; OPTIONAL(02) - optional&lt;/li&gt;&lt;br /&gt; &lt;li&gt; PROHIBITED(03) - prohibited&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CONFIRM(04) - confirm&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="inputAmountConstraint", EmitDefaultValue=false)]
        public InputAmountConstraintEnum? InputAmountConstraint { get; set; }
        /// <summary>
        /// &lt;p&gt;Defines what amount is allowed.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; EXACTLY(01) - EXACTLY&lt;/li&gt;&lt;br /&gt; &lt;li&gt; EXACTLY_AND_LESS(02) - EXACTLY_AND_LESS&lt;/li&gt;&lt;br /&gt; &lt;li&gt; EXACTLY_AND_MORE(03) - EXACTLY_AND_MORE&lt;/li&gt;&lt;br /&gt; &lt;li&gt; ALL(04) - ALL&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines what amount is allowed.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; EXACTLY(01) - EXACTLY&lt;/li&gt;&lt;br /&gt; &lt;li&gt; EXACTLY_AND_LESS(02) - EXACTLY_AND_LESS&lt;/li&gt;&lt;br /&gt; &lt;li&gt; EXACTLY_AND_MORE(03) - EXACTLY_AND_MORE&lt;/li&gt;&lt;br /&gt; &lt;li&gt; ALL(04) - ALL&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum AllowedAmountTypeCodeEnum
        {
            
            /// <summary>
            /// Enum EXACTLY for value: EXACTLY
            /// </summary>
            [EnumMember(Value = "EXACTLY")]
            EXACTLY = 1,
            
            /// <summary>
            /// Enum EXACTLYANDLESS for value: EXACTLY_AND_LESS
            /// </summary>
            [EnumMember(Value = "EXACTLY_AND_LESS")]
            EXACTLYANDLESS = 2,
            
            /// <summary>
            /// Enum EXACTLYANDMORE for value: EXACTLY_AND_MORE
            /// </summary>
            [EnumMember(Value = "EXACTLY_AND_MORE")]
            EXACTLYANDMORE = 3,
            
            /// <summary>
            /// Enum ALL for value: ALL
            /// </summary>
            [EnumMember(Value = "ALL")]
            ALL = 4
        }

        /// <summary>
        /// &lt;p&gt;Defines what amount is allowed.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; EXACTLY(01) - EXACTLY&lt;/li&gt;&lt;br /&gt; &lt;li&gt; EXACTLY_AND_LESS(02) - EXACTLY_AND_LESS&lt;/li&gt;&lt;br /&gt; &lt;li&gt; EXACTLY_AND_MORE(03) - EXACTLY_AND_MORE&lt;/li&gt;&lt;br /&gt; &lt;li&gt; ALL(04) - ALL&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines what amount is allowed.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; EXACTLY(01) - EXACTLY&lt;/li&gt;&lt;br /&gt; &lt;li&gt; EXACTLY_AND_LESS(02) - EXACTLY_AND_LESS&lt;/li&gt;&lt;br /&gt; &lt;li&gt; EXACTLY_AND_MORE(03) - EXACTLY_AND_MORE&lt;/li&gt;&lt;br /&gt; &lt;li&gt; ALL(04) - ALL&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="allowedAmountTypeCode", EmitDefaultValue=false)]
        public AllowedAmountTypeCodeEnum? AllowedAmountTypeCode { get; set; }
        /// <summary>
        /// &lt;p&gt;Defines the tender group used by POS payment functions:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; CASH,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; TERMINAL,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; GIFT_CERT,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; COUPON,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CHEQUE,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CREDIT,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; PROMOTION,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; POINTS,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CASHENGINE&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines the tender group used by POS payment functions:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; CASH,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; TERMINAL,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; GIFT_CERT,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; COUPON,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CHEQUE,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CREDIT,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; PROMOTION,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; POINTS,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CASHENGINE&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum TenderGroupCodeEnum
        {
            
            /// <summary>
            /// Enum CASH for value: CASH
            /// </summary>
            [EnumMember(Value = "CASH")]
            CASH = 1,
            
            /// <summary>
            /// Enum TERMINAL for value: TERMINAL
            /// </summary>
            [EnumMember(Value = "TERMINAL")]
            TERMINAL = 2,
            
            /// <summary>
            /// Enum GIFTCERT for value: GIFT_CERT
            /// </summary>
            [EnumMember(Value = "GIFT_CERT")]
            GIFTCERT = 3,
            
            /// <summary>
            /// Enum COUPON for value: COUPON
            /// </summary>
            [EnumMember(Value = "COUPON")]
            COUPON = 4,
            
            /// <summary>
            /// Enum CHEQUE for value: CHEQUE
            /// </summary>
            [EnumMember(Value = "CHEQUE")]
            CHEQUE = 5,
            
            /// <summary>
            /// Enum CREDIT for value: CREDIT
            /// </summary>
            [EnumMember(Value = "CREDIT")]
            CREDIT = 6,
            
            /// <summary>
            /// Enum PROMOTION for value: PROMOTION
            /// </summary>
            [EnumMember(Value = "PROMOTION")]
            PROMOTION = 7,
            
            /// <summary>
            /// Enum POINTS for value: POINTS
            /// </summary>
            [EnumMember(Value = "POINTS")]
            POINTS = 8,
            
            /// <summary>
            /// Enum CASHENGINE for value: CASHENGINE
            /// </summary>
            [EnumMember(Value = "CASHENGINE")]
            CASHENGINE = 9
        }

        /// <summary>
        /// &lt;p&gt;Defines the tender group used by POS payment functions:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; CASH,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; TERMINAL,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; GIFT_CERT,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; COUPON,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CHEQUE,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CREDIT,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; PROMOTION,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; POINTS,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CASHENGINE&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines the tender group used by POS payment functions:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; CASH,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; TERMINAL,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; GIFT_CERT,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; COUPON,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CHEQUE,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CREDIT,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; PROMOTION,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; POINTS,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CASHENGINE&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="tenderGroupCode", EmitDefaultValue=false)]
        public TenderGroupCodeEnum? TenderGroupCode { get; set; }
        /// <summary>
        /// &lt;p&gt;Determines whether the tender can be used only for sales, only for returns, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; SALES_AND_RETURNS(00) - for sales and returns&lt;/li&gt;&lt;br /&gt; &lt;li&gt; SALES(01) - only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt; RETURNS(02) - only for returns&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether the tender can be used only for sales, only for returns, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; SALES_AND_RETURNS(00) - for sales and returns&lt;/li&gt;&lt;br /&gt; &lt;li&gt; SALES(01) - only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt; RETURNS(02) - only for returns&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum SaleReturnTypeCodeEnum
        {
            
            /// <summary>
            /// Enum SALESANDRETURNS for value: SALES_AND_RETURNS
            /// </summary>
            [EnumMember(Value = "SALES_AND_RETURNS")]
            SALESANDRETURNS = 1,
            
            /// <summary>
            /// Enum SALES for value: SALES
            /// </summary>
            [EnumMember(Value = "SALES")]
            SALES = 2,
            
            /// <summary>
            /// Enum RETURNS for value: RETURNS
            /// </summary>
            [EnumMember(Value = "RETURNS")]
            RETURNS = 3
        }

        /// <summary>
        /// &lt;p&gt;Determines whether the tender can be used only for sales, only for returns, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; SALES_AND_RETURNS(00) - for sales and returns&lt;/li&gt;&lt;br /&gt; &lt;li&gt; SALES(01) - only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt; RETURNS(02) - only for returns&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether the tender can be used only for sales, only for returns, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; SALES_AND_RETURNS(00) - for sales and returns&lt;/li&gt;&lt;br /&gt; &lt;li&gt; SALES(01) - only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt; RETURNS(02) - only for returns&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="saleReturnTypeCode", EmitDefaultValue=false)]
        public SaleReturnTypeCodeEnum? SaleReturnTypeCode { get; set; }
        /// <summary>
        /// &lt;p&gt;Determines whether for this tender will be printed sales receipt:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; AUTOMATIC_PRINTOUT(00) - automatic printout of sales receipt&lt;/li&gt;&lt;br /&gt; &lt;li&gt; OPTIONAL_PRINTOUT(01) - optional printout (decision by user)&lt;/li&gt;&lt;br /&gt; &lt;li&gt; NO_AUTOMATIC_PRINTOUT(02) - no automatic printout&lt;/li&gt;&lt;br /&gt; &lt;li&gt; RECEIPT_AS_EMAIL(03) - receipt as email&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether for this tender will be printed sales receipt:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; AUTOMATIC_PRINTOUT(00) - automatic printout of sales receipt&lt;/li&gt;&lt;br /&gt; &lt;li&gt; OPTIONAL_PRINTOUT(01) - optional printout (decision by user)&lt;/li&gt;&lt;br /&gt; &lt;li&gt; NO_AUTOMATIC_PRINTOUT(02) - no automatic printout&lt;/li&gt;&lt;br /&gt; &lt;li&gt; RECEIPT_AS_EMAIL(03) - receipt as email&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ReceiptPrintoutTypeCodeEnum
        {
            
            /// <summary>
            /// Enum AUTOMATICPRINTOUT for value: AUTOMATIC_PRINTOUT
            /// </summary>
            [EnumMember(Value = "AUTOMATIC_PRINTOUT")]
            AUTOMATICPRINTOUT = 1,
            
            /// <summary>
            /// Enum OPTIONALPRINTOUT for value: OPTIONAL_PRINTOUT
            /// </summary>
            [EnumMember(Value = "OPTIONAL_PRINTOUT")]
            OPTIONALPRINTOUT = 2,
            
            /// <summary>
            /// Enum NOAUTOMATICPRINTOUT for value: NO_AUTOMATIC_PRINTOUT
            /// </summary>
            [EnumMember(Value = "NO_AUTOMATIC_PRINTOUT")]
            NOAUTOMATICPRINTOUT = 3,
            
            /// <summary>
            /// Enum RECEIPTASEMAIL for value: RECEIPT_AS_EMAIL
            /// </summary>
            [EnumMember(Value = "RECEIPT_AS_EMAIL")]
            RECEIPTASEMAIL = 4
        }

        /// <summary>
        /// &lt;p&gt;Determines whether for this tender will be printed sales receipt:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; AUTOMATIC_PRINTOUT(00) - automatic printout of sales receipt&lt;/li&gt;&lt;br /&gt; &lt;li&gt; OPTIONAL_PRINTOUT(01) - optional printout (decision by user)&lt;/li&gt;&lt;br /&gt; &lt;li&gt; NO_AUTOMATIC_PRINTOUT(02) - no automatic printout&lt;/li&gt;&lt;br /&gt; &lt;li&gt; RECEIPT_AS_EMAIL(03) - receipt as email&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether for this tender will be printed sales receipt:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; AUTOMATIC_PRINTOUT(00) - automatic printout of sales receipt&lt;/li&gt;&lt;br /&gt; &lt;li&gt; OPTIONAL_PRINTOUT(01) - optional printout (decision by user)&lt;/li&gt;&lt;br /&gt; &lt;li&gt; NO_AUTOMATIC_PRINTOUT(02) - no automatic printout&lt;/li&gt;&lt;br /&gt; &lt;li&gt; RECEIPT_AS_EMAIL(03) - receipt as email&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="receiptPrintoutTypeCode", EmitDefaultValue=false)]
        public ReceiptPrintoutTypeCodeEnum? ReceiptPrintoutTypeCode { get; set; }
        /// <summary>
        /// &lt;p&gt;A typecode to signify that only a specific group of items can be purchased using this tender.&lt;br /&gt; Possible values:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; WIC - tender is allowed only for items with WICFlag&lt;/li&gt;&lt;br /&gt; &lt;li&gt; FOST- tender is allowed only for items with AllowFoodStampFlag&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;A typecode to signify that only a specific group of items can be purchased using this tender.&lt;br /&gt; Possible values:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; WIC - tender is allowed only for items with WICFlag&lt;/li&gt;&lt;br /&gt; &lt;li&gt; FOST- tender is allowed only for items with AllowFoodStampFlag&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum ItemRestrictApplyTypeCodeEnum
        {
            
            /// <summary>
            /// Enum WIC for value: WIC
            /// </summary>
            [EnumMember(Value = "WIC")]
            WIC = 1,
            
            /// <summary>
            /// Enum FOST for value: FOST
            /// </summary>
            [EnumMember(Value = "FOST")]
            FOST = 2
        }

        /// <summary>
        /// &lt;p&gt;A typecode to signify that only a specific group of items can be purchased using this tender.&lt;br /&gt; Possible values:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; WIC - tender is allowed only for items with WICFlag&lt;/li&gt;&lt;br /&gt; &lt;li&gt; FOST- tender is allowed only for items with AllowFoodStampFlag&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;
        /// </summary>
        /// <value>&lt;p&gt;A typecode to signify that only a specific group of items can be purchased using this tender.&lt;br /&gt; Possible values:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; WIC - tender is allowed only for items with WICFlag&lt;/li&gt;&lt;br /&gt; &lt;li&gt; FOST- tender is allowed only for items with AllowFoodStampFlag&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;</value>
        [DataMember(Name="itemRestrictApplyTypeCode", EmitDefaultValue=false)]
        public ItemRestrictApplyTypeCodeEnum? ItemRestrictApplyTypeCode { get; set; }
        /// <summary>
        /// &lt;p&gt;Type of origin.&lt;br /&gt; OriginCode:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt; PARENT_COPY &#x3D; &#39;00&#39;&lt;br /&gt; IMPORT &#x3D; &#39;01&#39;&lt;br /&gt; MANUAL &#x3D; &#39;02&#39;&lt;br /&gt;&lt;/pre&gt;
        /// </summary>
        /// <value>&lt;p&gt;Type of origin.&lt;br /&gt; OriginCode:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt; PARENT_COPY &#x3D; &#39;00&#39;&lt;br /&gt; IMPORT &#x3D; &#39;01&#39;&lt;br /&gt; MANUAL &#x3D; &#39;02&#39;&lt;br /&gt;&lt;/pre&gt;</value>
        [JsonConverter(typeof(StringEnumConverter))]
        public enum OriginEnum
        {
            
            /// <summary>
            /// Enum PARENTCOPY for value: PARENT_COPY
            /// </summary>
            [EnumMember(Value = "PARENT_COPY")]
            PARENTCOPY = 1,
            
            /// <summary>
            /// Enum IMPORT for value: IMPORT
            /// </summary>
            [EnumMember(Value = "IMPORT")]
            IMPORT = 2,
            
            /// <summary>
            /// Enum MANUAL for value: MANUAL
            /// </summary>
            [EnumMember(Value = "MANUAL")]
            MANUAL = 3
        }

        /// <summary>
        /// &lt;p&gt;Type of origin.&lt;br /&gt; OriginCode:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt; PARENT_COPY &#x3D; &#39;00&#39;&lt;br /&gt; IMPORT &#x3D; &#39;01&#39;&lt;br /&gt; MANUAL &#x3D; &#39;02&#39;&lt;br /&gt;&lt;/pre&gt;
        /// </summary>
        /// <value>&lt;p&gt;Type of origin.&lt;br /&gt; OriginCode:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt; PARENT_COPY &#x3D; &#39;00&#39;&lt;br /&gt; IMPORT &#x3D; &#39;01&#39;&lt;br /&gt; MANUAL &#x3D; &#39;02&#39;&lt;br /&gt;&lt;/pre&gt;</value>
        [DataMember(Name="origin", EmitDefaultValue=false)]
        public OriginEnum? Origin { get; set; }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO" /> class.
        /// </summary>
        [JsonConstructorAttribute]
        protected ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO() { }
        /// <summary>
        /// Initializes a new instance of the <see cref="ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO" /> class.
        /// </summary>
        /// <param name="key">&lt;p&gt;Getter for inner key class.&lt;/p&gt; (required).</param>
        /// <param name="tenderClassCode">&lt;p&gt;A code to denote a group of tenders with common characteristics, e.g. payment cards, certificates, etc.&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="description">&lt;p&gt;Description of the tender type.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="minimumAcceptAmount">&lt;p&gt;The minimum value that can be accepted for an individual tender. For example, certain retailers will not accept card payments below $5.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="maximumAcceptAmount">&lt;p&gt;The maximum amount that can be accepted for a specific tender type.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="itemRestrictionsApplyFlag">&lt;p&gt;A flag to signify that specific groups of items cannot be purchased using certain tender types. For example, food stamps cannot be used to purchase alcohol or tobacco items.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="openCashDrawerRequiredFlag">&lt;p&gt;A flag that signifies that the cash drawer opens if a certain specific tender type is offered by the customer. For example, cash.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="changeThresholdAmount">&lt;p&gt;The maximum change that can be offered to a customer for a specific tender type.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="tillCountFlag">&lt;p&gt;Determines whether the tender should be shown in accounting functions for tills.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="denominationFlag">&lt;p&gt;Determines whether denomination is applicable for the tender.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="pickupTypeCode">&lt;p&gt;Defines type of tender pickup:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; NOT_ALLOWED(01) - Not allowed&lt;/li&gt;&lt;br /&gt; &lt;li&gt; ALLOWED(02) - Allowed&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="changeAllowedFlag">&lt;p&gt;Determines whether change is possible.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="unitCountRequiredFlag">&lt;p&gt;Defines if the tender count is registered in accounting functions.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="amountCountRequiredFlag">&lt;p&gt;Defines if the tender amount is registered in accounting functions.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="voidingAllowedFlag">&lt;p&gt;Defines whether a sales transaction which contains this tender can be voided later.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="depositAllowedFlag">&lt;p&gt;Determines whether this tender is allowed for deposit.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="blockingFlag">&lt;p&gt;Determines whether this tender can be used for payment and accounting.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="deliveryTypeCode">&lt;p&gt;A typecode to define how a tender is picked up from safe / delivered to bank:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; NO_DELIVERY(00) - no delivery&lt;/li&gt;&lt;br /&gt; &lt;li&gt; MANUAL_DELIVERY(01) - manual delivery&lt;/li&gt;&lt;br /&gt; &lt;li&gt; AUTOMATIC_DELIVERY(02) - automatic delivery&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="controlledBySafeFlag">&lt;p&gt;Determines whether the tender should be shown in safe accounting functions.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="inputAmountConstraint">&lt;p&gt;Defines whether payment amount should be entered.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; REQUIRED(01) - required&lt;/li&gt;&lt;br /&gt; &lt;li&gt; OPTIONAL(02) - optional&lt;/li&gt;&lt;br /&gt; &lt;li&gt; PROHIBITED(03) - prohibited&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CONFIRM(04) - confirm&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="allowedAmountTypeCode">&lt;p&gt;Defines what amount is allowed.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; EXACTLY(01) - EXACTLY&lt;/li&gt;&lt;br /&gt; &lt;li&gt; EXACTLY_AND_LESS(02) - EXACTLY_AND_LESS&lt;/li&gt;&lt;br /&gt; &lt;li&gt; EXACTLY_AND_MORE(03) - EXACTLY_AND_MORE&lt;/li&gt;&lt;br /&gt; &lt;li&gt; ALL(04) - ALL&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="tenderGroupCode">&lt;p&gt;Defines the tender group used by POS payment functions:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; CASH,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; TERMINAL,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; GIFT_CERT,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; COUPON,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CHEQUE,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CREDIT,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; PROMOTION,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; POINTS,&lt;/li&gt;&lt;br /&gt; &lt;li&gt; CASHENGINE&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="checkAvailableAmountFlag">&lt;p&gt;This flag determines whether the current value of the tender in the till is checked.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="pickupWarningFlag">&lt;p&gt;If this flag is set to true, a warning is shown on POS in the case that the actual amount of the till for that tender is equal or larger than the PickupWarningLimit&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="pickupWarningLimit">&lt;p&gt;Defines the limit for a tender pickup from the till, see also PickupWarningFlag&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="immediateVoidingAllowedFlag">&lt;p&gt;Defines whether this tender can be voided during the tender registration process (i.e. while the transaction is not finished yet)&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="receiptPrinterName">&lt;p&gt;Additional tender description which is used on POS side.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="exclusiveFlag">&lt;p&gt;Defines whether this tender can be used only exclusively, i.e. no other tenders can be combined with it in one transaction.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="saleReturnTypeCode">&lt;p&gt;Determines whether the tender can be used only for sales, only for returns, or for both:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; SALES_AND_RETURNS(00) - for sales and returns&lt;/li&gt;&lt;br /&gt; &lt;li&gt; SALES(01) - only for sales&lt;/li&gt;&lt;br /&gt; &lt;li&gt; RETURNS(02) - only for returns&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="sortSequence">&lt;p&gt;Sort sequence for tenders in reports and backoffice functions.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="safeCountFlag">&lt;p&gt;Determines whether this tender will be counted for safe.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="receiptPrintoutTypeCode">&lt;p&gt;Determines whether for this tender will be printed sales receipt:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; AUTOMATIC_PRINTOUT(00) - automatic printout of sales receipt&lt;/li&gt;&lt;br /&gt; &lt;li&gt; OPTIONAL_PRINTOUT(01) - optional printout (decision by user)&lt;/li&gt;&lt;br /&gt; &lt;li&gt; NO_AUTOMATIC_PRINTOUT(02) - no automatic printout&lt;/li&gt;&lt;br /&gt; &lt;li&gt; RECEIPT_AS_EMAIL(03) - receipt as email&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="negativeValueAllowedFlag">&lt;p&gt;Determines whether negative values can be input; is used in the context of foreign turnover registration.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="itemRestrictApplyTypeCode">&lt;p&gt;A typecode to signify that only a specific group of items can be purchased using this tender.&lt;br /&gt; Possible values:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;li&gt; WIC - tender is allowed only for items with WICFlag&lt;/li&gt;&lt;br /&gt; &lt;li&gt; FOST- tender is allowed only for items with AllowFoodStampFlag&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;.</param>
        /// <param name="roundingRequiredFlag">&lt;p&gt;Determines whether the tender amount has to be rounded according to the rounding rules of the main currency&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="tenderHandlingRuleID">&lt;p&gt;Reference to the tender handling rule (tender fields additional to ARTS)&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="tenderRestrictionRuleList">&lt;p&gt;List of tender restriction rules.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="translationList">&lt;p&gt;List of translations for the tender.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="packageID">&lt;p&gt;Internal identification of the import package (e.g. IDoc file). The identification is used for monitoring purposes.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="origin">&lt;p&gt;Type of origin.&lt;br /&gt; OriginCode:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt; PARENT_COPY &#x3D; &#39;00&#39;&lt;br /&gt; IMPORT &#x3D; &#39;01&#39;&lt;br /&gt; MANUAL &#x3D; &#39;02&#39;&lt;br /&gt;&lt;/pre&gt;.</param>
        /// <param name="tid">&lt;p&gt;Translation identifier - used for the unique identification of translations in the common translation table.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom05">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="isocurrencyCode">&lt;p&gt;The identifier of the currency used for the tender.&lt;br /&gt;&lt;/p&gt; (required).</param>
        /// <param name="xxcustom03">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom02">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom04">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        /// <param name="xxcustom01">&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;.</param>
        public ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO(ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDOKey key = default(ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDOKey), string tenderClassCode = default(string), string description = default(string), double? minimumAcceptAmount = default(double?), double? maximumAcceptAmount = default(double?), bool? itemRestrictionsApplyFlag = default(bool?), bool? openCashDrawerRequiredFlag = default(bool?), double? changeThresholdAmount = default(double?), bool? tillCountFlag = default(bool?), bool? denominationFlag = default(bool?), PickupTypeCodeEnum? pickupTypeCode = default(PickupTypeCodeEnum?), bool? changeAllowedFlag = default(bool?), bool? unitCountRequiredFlag = default(bool?), bool? amountCountRequiredFlag = default(bool?), bool? voidingAllowedFlag = default(bool?), bool? depositAllowedFlag = default(bool?), bool? blockingFlag = default(bool?), DeliveryTypeCodeEnum? deliveryTypeCode = default(DeliveryTypeCodeEnum?), bool? controlledBySafeFlag = default(bool?), InputAmountConstraintEnum? inputAmountConstraint = default(InputAmountConstraintEnum?), AllowedAmountTypeCodeEnum? allowedAmountTypeCode = default(AllowedAmountTypeCodeEnum?), TenderGroupCodeEnum? tenderGroupCode = default(TenderGroupCodeEnum?), bool? checkAvailableAmountFlag = default(bool?), bool? pickupWarningFlag = default(bool?), double? pickupWarningLimit = default(double?), bool? immediateVoidingAllowedFlag = default(bool?), string receiptPrinterName = default(string), bool? exclusiveFlag = default(bool?), SaleReturnTypeCodeEnum? saleReturnTypeCode = default(SaleReturnTypeCodeEnum?), int? sortSequence = default(int?), bool? safeCountFlag = default(bool?), ReceiptPrintoutTypeCodeEnum? receiptPrintoutTypeCode = default(ReceiptPrintoutTypeCodeEnum?), bool? negativeValueAllowedFlag = default(bool?), ItemRestrictApplyTypeCodeEnum? itemRestrictApplyTypeCode = default(ItemRestrictApplyTypeCodeEnum?), bool? roundingRequiredFlag = default(bool?), string tenderHandlingRuleID = default(string), List<ComGkSoftwareGkrApiServerMdTenderDtoDomTenderRestrictionRule> tenderRestrictionRuleList = default(List<ComGkSoftwareGkrApiServerMdTenderDtoDomTenderRestrictionRule>), List<ComGkSoftwareGkrApiServerCommonTranslationsDtoDomTranslationDO> translationList = default(List<ComGkSoftwareGkrApiServerCommonTranslationsDtoDomTranslationDO>), string packageID = default(string), OriginEnum? origin = default(OriginEnum?), string tid = default(string), string xxcustom05 = default(string), string isocurrencyCode = 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 ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO and cannot be null");
            }
            else
            {
                this.Key = key;
            }
            // to ensure "tenderClassCode" is required (not null)
            if (tenderClassCode == null)
            {
                throw new InvalidDataException("tenderClassCode is a required property for ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO and cannot be null");
            }
            else
            {
                this.TenderClassCode = tenderClassCode;
            }
            // to ensure "isocurrencyCode" is required (not null)
            if (isocurrencyCode == null)
            {
                throw new InvalidDataException("isocurrencyCode is a required property for ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO and cannot be null");
            }
            else
            {
                this.IsocurrencyCode = isocurrencyCode;
            }
            this.Description = description;
            this.MinimumAcceptAmount = minimumAcceptAmount;
            this.MaximumAcceptAmount = maximumAcceptAmount;
            this.ItemRestrictionsApplyFlag = itemRestrictionsApplyFlag;
            this.OpenCashDrawerRequiredFlag = openCashDrawerRequiredFlag;
            this.ChangeThresholdAmount = changeThresholdAmount;
            this.TillCountFlag = tillCountFlag;
            this.DenominationFlag = denominationFlag;
            this.PickupTypeCode = pickupTypeCode;
            this.ChangeAllowedFlag = changeAllowedFlag;
            this.UnitCountRequiredFlag = unitCountRequiredFlag;
            this.AmountCountRequiredFlag = amountCountRequiredFlag;
            this.VoidingAllowedFlag = voidingAllowedFlag;
            this.DepositAllowedFlag = depositAllowedFlag;
            this.BlockingFlag = blockingFlag;
            this.DeliveryTypeCode = deliveryTypeCode;
            this.ControlledBySafeFlag = controlledBySafeFlag;
            this.InputAmountConstraint = inputAmountConstraint;
            this.AllowedAmountTypeCode = allowedAmountTypeCode;
            this.TenderGroupCode = tenderGroupCode;
            this.CheckAvailableAmountFlag = checkAvailableAmountFlag;
            this.PickupWarningFlag = pickupWarningFlag;
            this.PickupWarningLimit = pickupWarningLimit;
            this.ImmediateVoidingAllowedFlag = immediateVoidingAllowedFlag;
            this.ReceiptPrinterName = receiptPrinterName;
            this.ExclusiveFlag = exclusiveFlag;
            this.SaleReturnTypeCode = saleReturnTypeCode;
            this.SortSequence = sortSequence;
            this.SafeCountFlag = safeCountFlag;
            this.ReceiptPrintoutTypeCode = receiptPrintoutTypeCode;
            this.NegativeValueAllowedFlag = negativeValueAllowedFlag;
            this.ItemRestrictApplyTypeCode = itemRestrictApplyTypeCode;
            this.RoundingRequiredFlag = roundingRequiredFlag;
            this.TenderHandlingRuleID = tenderHandlingRuleID;
            this.TenderRestrictionRuleList = tenderRestrictionRuleList;
            this.TranslationList = translationList;
            this.PackageID = packageID;
            this.Origin = origin;
            this.Tid = tid;
            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 ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDOKey Key { get; set; }

        /// <summary>
        /// &lt;p&gt;A code to denote a group of tenders with common characteristics, e.g. payment cards, certificates, etc.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A code to denote a group of tenders with common characteristics, e.g. payment cards, certificates, etc.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="tenderClassCode", EmitDefaultValue=false)]
        public string TenderClassCode { get; set; }

        /// <summary>
        /// &lt;p&gt;Description of the tender type.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Description of the tender type.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="description", EmitDefaultValue=false)]
        public string Description { get; set; }

        /// <summary>
        /// &lt;p&gt;The minimum value that can be accepted for an individual tender. For example, certain retailers will not accept card payments below $5.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The minimum value that can be accepted for an individual tender. For example, certain retailers will not accept card payments below $5.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="minimumAcceptAmount", EmitDefaultValue=false)]
        public double? MinimumAcceptAmount { get; set; }

        /// <summary>
        /// &lt;p&gt;The maximum amount that can be accepted for a specific tender type.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The maximum amount that can be accepted for a specific tender type.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="maximumAcceptAmount", EmitDefaultValue=false)]
        public double? MaximumAcceptAmount { get; set; }

        /// <summary>
        /// &lt;p&gt;A flag to signify that specific groups of items cannot be purchased using certain tender types. For example, food stamps cannot be used to purchase alcohol or tobacco items.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A flag to signify that specific groups of items cannot be purchased using certain tender types. For example, food stamps cannot be used to purchase alcohol or tobacco items.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="itemRestrictionsApplyFlag", EmitDefaultValue=false)]
        public bool? ItemRestrictionsApplyFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;A flag that signifies that the cash drawer opens if a certain specific tender type is offered by the customer. For example, cash.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;A flag that signifies that the cash drawer opens if a certain specific tender type is offered by the customer. For example, cash.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="openCashDrawerRequiredFlag", EmitDefaultValue=false)]
        public bool? OpenCashDrawerRequiredFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;The maximum change that can be offered to a customer for a specific tender type.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The maximum change that can be offered to a customer for a specific tender type.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="changeThresholdAmount", EmitDefaultValue=false)]
        public double? ChangeThresholdAmount { get; set; }

        /// <summary>
        /// &lt;p&gt;Determines whether the tender should be shown in accounting functions for tills.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether the tender should be shown in accounting functions for tills.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="tillCountFlag", EmitDefaultValue=false)]
        public bool? TillCountFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Determines whether denomination is applicable for the tender.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether denomination is applicable for the tender.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="denominationFlag", EmitDefaultValue=false)]
        public bool? DenominationFlag { get; set; }


        /// <summary>
        /// &lt;p&gt;Determines whether change is possible.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether change is possible.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="changeAllowedFlag", EmitDefaultValue=false)]
        public bool? ChangeAllowedFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Defines if the tender count is registered in accounting functions.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines if the tender count is registered in accounting functions.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="unitCountRequiredFlag", EmitDefaultValue=false)]
        public bool? UnitCountRequiredFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Defines if the tender amount is registered in accounting functions.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines if the tender amount is registered in accounting functions.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="amountCountRequiredFlag", EmitDefaultValue=false)]
        public bool? AmountCountRequiredFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Defines whether a sales transaction which contains this tender can be voided later.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines whether a sales transaction which contains this tender can be voided later.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="voidingAllowedFlag", EmitDefaultValue=false)]
        public bool? VoidingAllowedFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Determines whether this tender is allowed for deposit.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether this tender is allowed for deposit.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="depositAllowedFlag", EmitDefaultValue=false)]
        public bool? DepositAllowedFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Determines whether this tender can be used for payment and accounting.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether this tender can be used for payment and accounting.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="blockingFlag", EmitDefaultValue=false)]
        public bool? BlockingFlag { get; set; }


        /// <summary>
        /// &lt;p&gt;Determines whether the tender should be shown in safe accounting functions.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether the tender should be shown in safe accounting functions.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="controlledBySafeFlag", EmitDefaultValue=false)]
        public bool? ControlledBySafeFlag { get; set; }




        /// <summary>
        /// &lt;p&gt;This flag determines whether the current value of the tender in the till is checked.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;This flag determines whether the current value of the tender in the till is checked.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="checkAvailableAmountFlag", EmitDefaultValue=false)]
        public bool? CheckAvailableAmountFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;If this flag is set to true, a warning is shown on POS in the case that the actual amount of the till for that tender is equal or larger than the PickupWarningLimit&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;If this flag is set to true, a warning is shown on POS in the case that the actual amount of the till for that tender is equal or larger than the PickupWarningLimit&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="pickupWarningFlag", EmitDefaultValue=false)]
        public bool? PickupWarningFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Defines the limit for a tender pickup from the till, see also PickupWarningFlag&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines the limit for a tender pickup from the till, see also PickupWarningFlag&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="pickupWarningLimit", EmitDefaultValue=false)]
        public double? PickupWarningLimit { get; set; }

        /// <summary>
        /// &lt;p&gt;Defines whether this tender can be voided during the tender registration process (i.e. while the transaction is not finished yet)&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines whether this tender can be voided during the tender registration process (i.e. while the transaction is not finished yet)&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="immediateVoidingAllowedFlag", EmitDefaultValue=false)]
        public bool? ImmediateVoidingAllowedFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Additional tender description which is used on POS side.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional tender description which is used on POS side.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="receiptPrinterName", EmitDefaultValue=false)]
        public string ReceiptPrinterName { get; set; }

        /// <summary>
        /// &lt;p&gt;Defines whether this tender can be used only exclusively, i.e. no other tenders can be combined with it in one transaction.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Defines whether this tender can be used only exclusively, i.e. no other tenders can be combined with it in one transaction.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="exclusiveFlag", EmitDefaultValue=false)]
        public bool? ExclusiveFlag { get; set; }


        /// <summary>
        /// &lt;p&gt;Sort sequence for tenders in reports and backoffice functions.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Sort sequence for tenders in reports and backoffice functions.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="sortSequence", EmitDefaultValue=false)]
        public int? SortSequence { get; set; }

        /// <summary>
        /// &lt;p&gt;Determines whether this tender will be counted for safe.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether this tender will be counted for safe.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="safeCountFlag", EmitDefaultValue=false)]
        public bool? SafeCountFlag { get; set; }


        /// <summary>
        /// &lt;p&gt;Determines whether negative values can be input; is used in the context of foreign turnover registration.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether negative values can be input; is used in the context of foreign turnover registration.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="negativeValueAllowedFlag", EmitDefaultValue=false)]
        public bool? NegativeValueAllowedFlag { get; set; }


        /// <summary>
        /// &lt;p&gt;Determines whether the tender amount has to be rounded according to the rounding rules of the main currency&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Determines whether the tender amount has to be rounded according to the rounding rules of the main currency&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="roundingRequiredFlag", EmitDefaultValue=false)]
        public bool? RoundingRequiredFlag { get; set; }

        /// <summary>
        /// &lt;p&gt;Reference to the tender handling rule (tender fields additional to ARTS)&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Reference to the tender handling rule (tender fields additional to ARTS)&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="tenderHandlingRuleID", EmitDefaultValue=false)]
        public string TenderHandlingRuleID { get; set; }

        /// <summary>
        /// &lt;p&gt;List of tender restriction rules.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;List of tender restriction rules.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="tenderRestrictionRuleList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiServerMdTenderDtoDomTenderRestrictionRule> TenderRestrictionRuleList { get; set; }

        /// <summary>
        /// &lt;p&gt;List of translations for the tender.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;List of translations for the tender.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="translationList", EmitDefaultValue=false)]
        public List<ComGkSoftwareGkrApiServerCommonTranslationsDtoDomTranslationDO> TranslationList { get; set; }

        /// <summary>
        /// &lt;p&gt;Internal identification of the import package (e.g. IDoc file). The identification is used for monitoring purposes.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Internal identification of the import package (e.g. IDoc file). The identification is used for monitoring purposes.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="packageID", EmitDefaultValue=false)]
        public string PackageID { get; set; }


        /// <summary>
        /// &lt;p&gt;Translation identifier - used for the unique identification of translations in the common translation table.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Translation identifier - used for the unique identification of translations in the common translation table.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="tid", EmitDefaultValue=false)]
        public string Tid { get; set; }

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

        /// <summary>
        /// &lt;p&gt;The identifier of the currency used for the tender.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;The identifier of the currency used for the tender.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="isocurrencyCode", EmitDefaultValue=false)]
        public string IsocurrencyCode { get; set; }

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

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

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

        /// <summary>
        /// &lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;
        /// </summary>
        /// <value>&lt;p&gt;Additional field for custom development.&lt;br /&gt;&lt;/p&gt;</value>
        [DataMember(Name="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 ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO {\n");
            sb.Append("  Key: ").Append(Key).Append("\n");
            sb.Append("  TenderClassCode: ").Append(TenderClassCode).Append("\n");
            sb.Append("  Description: ").Append(Description).Append("\n");
            sb.Append("  MinimumAcceptAmount: ").Append(MinimumAcceptAmount).Append("\n");
            sb.Append("  MaximumAcceptAmount: ").Append(MaximumAcceptAmount).Append("\n");
            sb.Append("  ItemRestrictionsApplyFlag: ").Append(ItemRestrictionsApplyFlag).Append("\n");
            sb.Append("  OpenCashDrawerRequiredFlag: ").Append(OpenCashDrawerRequiredFlag).Append("\n");
            sb.Append("  ChangeThresholdAmount: ").Append(ChangeThresholdAmount).Append("\n");
            sb.Append("  TillCountFlag: ").Append(TillCountFlag).Append("\n");
            sb.Append("  DenominationFlag: ").Append(DenominationFlag).Append("\n");
            sb.Append("  PickupTypeCode: ").Append(PickupTypeCode).Append("\n");
            sb.Append("  ChangeAllowedFlag: ").Append(ChangeAllowedFlag).Append("\n");
            sb.Append("  UnitCountRequiredFlag: ").Append(UnitCountRequiredFlag).Append("\n");
            sb.Append("  AmountCountRequiredFlag: ").Append(AmountCountRequiredFlag).Append("\n");
            sb.Append("  VoidingAllowedFlag: ").Append(VoidingAllowedFlag).Append("\n");
            sb.Append("  DepositAllowedFlag: ").Append(DepositAllowedFlag).Append("\n");
            sb.Append("  BlockingFlag: ").Append(BlockingFlag).Append("\n");
            sb.Append("  DeliveryTypeCode: ").Append(DeliveryTypeCode).Append("\n");
            sb.Append("  ControlledBySafeFlag: ").Append(ControlledBySafeFlag).Append("\n");
            sb.Append("  InputAmountConstraint: ").Append(InputAmountConstraint).Append("\n");
            sb.Append("  AllowedAmountTypeCode: ").Append(AllowedAmountTypeCode).Append("\n");
            sb.Append("  TenderGroupCode: ").Append(TenderGroupCode).Append("\n");
            sb.Append("  CheckAvailableAmountFlag: ").Append(CheckAvailableAmountFlag).Append("\n");
            sb.Append("  PickupWarningFlag: ").Append(PickupWarningFlag).Append("\n");
            sb.Append("  PickupWarningLimit: ").Append(PickupWarningLimit).Append("\n");
            sb.Append("  ImmediateVoidingAllowedFlag: ").Append(ImmediateVoidingAllowedFlag).Append("\n");
            sb.Append("  ReceiptPrinterName: ").Append(ReceiptPrinterName).Append("\n");
            sb.Append("  ExclusiveFlag: ").Append(ExclusiveFlag).Append("\n");
            sb.Append("  SaleReturnTypeCode: ").Append(SaleReturnTypeCode).Append("\n");
            sb.Append("  SortSequence: ").Append(SortSequence).Append("\n");
            sb.Append("  SafeCountFlag: ").Append(SafeCountFlag).Append("\n");
            sb.Append("  ReceiptPrintoutTypeCode: ").Append(ReceiptPrintoutTypeCode).Append("\n");
            sb.Append("  NegativeValueAllowedFlag: ").Append(NegativeValueAllowedFlag).Append("\n");
            sb.Append("  ItemRestrictApplyTypeCode: ").Append(ItemRestrictApplyTypeCode).Append("\n");
            sb.Append("  RoundingRequiredFlag: ").Append(RoundingRequiredFlag).Append("\n");
            sb.Append("  TenderHandlingRuleID: ").Append(TenderHandlingRuleID).Append("\n");
            sb.Append("  TenderRestrictionRuleList: ").Append(TenderRestrictionRuleList).Append("\n");
            sb.Append("  TranslationList: ").Append(TranslationList).Append("\n");
            sb.Append("  PackageID: ").Append(PackageID).Append("\n");
            sb.Append("  Origin: ").Append(Origin).Append("\n");
            sb.Append("  Tid: ").Append(Tid).Append("\n");
            sb.Append("  Xxcustom05: ").Append(Xxcustom05).Append("\n");
            sb.Append("  IsocurrencyCode: ").Append(IsocurrencyCode).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 ComGkSoftwareGkrApiServerMdTenderDtoDomTenderDO);
        }

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

            return 
                (
                    this.Key == input.Key ||
                    (this.Key != null &&
                    this.Key.Equals(input.Key))
                ) && 
                (
                    this.TenderClassCode == input.TenderClassCode ||
                    (this.TenderClassCode != null &&
                    this.TenderClassCode.Equals(input.TenderClassCode))
                ) && 
                (
                    this.Description == input.Description ||
                    (this.Description != null &&
                    this.Description.Equals(input.Description))
                ) && 
                (
                    this.MinimumAcceptAmount == input.MinimumAcceptAmount ||
                    (this.MinimumAcceptAmount != null &&
                    this.MinimumAcceptAmount.Equals(input.MinimumAcceptAmount))
                ) && 
                (
                    this.MaximumAcceptAmount == input.MaximumAcceptAmount ||
                    (this.MaximumAcceptAmount != null &&
                    this.MaximumAcceptAmount.Equals(input.MaximumAcceptAmount))
                ) && 
                (
                    this.ItemRestrictionsApplyFlag == input.ItemRestrictionsApplyFlag ||
                    (this.ItemRestrictionsApplyFlag != null &&
                    this.ItemRestrictionsApplyFlag.Equals(input.ItemRestrictionsApplyFlag))
                ) && 
                (
                    this.OpenCashDrawerRequiredFlag == input.OpenCashDrawerRequiredFlag ||
                    (this.OpenCashDrawerRequiredFlag != null &&
                    this.OpenCashDrawerRequiredFlag.Equals(input.OpenCashDrawerRequiredFlag))
                ) && 
                (
                    this.ChangeThresholdAmount == input.ChangeThresholdAmount ||
                    (this.ChangeThresholdAmount != null &&
                    this.ChangeThresholdAmount.Equals(input.ChangeThresholdAmount))
                ) && 
                (
                    this.TillCountFlag == input.TillCountFlag ||
                    (this.TillCountFlag != null &&
                    this.TillCountFlag.Equals(input.TillCountFlag))
                ) && 
                (
                    this.DenominationFlag == input.DenominationFlag ||
                    (this.DenominationFlag != null &&
                    this.DenominationFlag.Equals(input.DenominationFlag))
                ) && 
                (
                    this.PickupTypeCode == input.PickupTypeCode ||
                    (this.PickupTypeCode != null &&
                    this.PickupTypeCode.Equals(input.PickupTypeCode))
                ) && 
                (
                    this.ChangeAllowedFlag == input.ChangeAllowedFlag ||
                    (this.ChangeAllowedFlag != null &&
                    this.ChangeAllowedFlag.Equals(input.ChangeAllowedFlag))
                ) && 
                (
                    this.UnitCountRequiredFlag == input.UnitCountRequiredFlag ||
                    (this.UnitCountRequiredFlag != null &&
                    this.UnitCountRequiredFlag.Equals(input.UnitCountRequiredFlag))
                ) && 
                (
                    this.AmountCountRequiredFlag == input.AmountCountRequiredFlag ||
                    (this.AmountCountRequiredFlag != null &&
                    this.AmountCountRequiredFlag.Equals(input.AmountCountRequiredFlag))
                ) && 
                (
                    this.VoidingAllowedFlag == input.VoidingAllowedFlag ||
                    (this.VoidingAllowedFlag != null &&
                    this.VoidingAllowedFlag.Equals(input.VoidingAllowedFlag))
                ) && 
                (
                    this.DepositAllowedFlag == input.DepositAllowedFlag ||
                    (this.DepositAllowedFlag != null &&
                    this.DepositAllowedFlag.Equals(input.DepositAllowedFlag))
                ) && 
                (
                    this.BlockingFlag == input.BlockingFlag ||
                    (this.BlockingFlag != null &&
                    this.BlockingFlag.Equals(input.BlockingFlag))
                ) && 
                (
                    this.DeliveryTypeCode == input.DeliveryTypeCode ||
                    (this.DeliveryTypeCode != null &&
                    this.DeliveryTypeCode.Equals(input.DeliveryTypeCode))
                ) && 
                (
                    this.ControlledBySafeFlag == input.ControlledBySafeFlag ||
                    (this.ControlledBySafeFlag != null &&
                    this.ControlledBySafeFlag.Equals(input.ControlledBySafeFlag))
                ) && 
                (
                    this.InputAmountConstraint == input.InputAmountConstraint ||
                    (this.InputAmountConstraint != null &&
                    this.InputAmountConstraint.Equals(input.InputAmountConstraint))
                ) && 
                (
                    this.AllowedAmountTypeCode == input.AllowedAmountTypeCode ||
                    (this.AllowedAmountTypeCode != null &&
                    this.AllowedAmountTypeCode.Equals(input.AllowedAmountTypeCode))
                ) && 
                (
                    this.TenderGroupCode == input.TenderGroupCode ||
                    (this.TenderGroupCode != null &&
                    this.TenderGroupCode.Equals(input.TenderGroupCode))
                ) && 
                (
                    this.CheckAvailableAmountFlag == input.CheckAvailableAmountFlag ||
                    (this.CheckAvailableAmountFlag != null &&
                    this.CheckAvailableAmountFlag.Equals(input.CheckAvailableAmountFlag))
                ) && 
                (
                    this.PickupWarningFlag == input.PickupWarningFlag ||
                    (this.PickupWarningFlag != null &&
                    this.PickupWarningFlag.Equals(input.PickupWarningFlag))
                ) && 
                (
                    this.PickupWarningLimit == input.PickupWarningLimit ||
                    (this.PickupWarningLimit != null &&
                    this.PickupWarningLimit.Equals(input.PickupWarningLimit))
                ) && 
                (
                    this.ImmediateVoidingAllowedFlag == input.ImmediateVoidingAllowedFlag ||
                    (this.ImmediateVoidingAllowedFlag != null &&
                    this.ImmediateVoidingAllowedFlag.Equals(input.ImmediateVoidingAllowedFlag))
                ) && 
                (
                    this.ReceiptPrinterName == input.ReceiptPrinterName ||
                    (this.ReceiptPrinterName != null &&
                    this.ReceiptPrinterName.Equals(input.ReceiptPrinterName))
                ) && 
                (
                    this.ExclusiveFlag == input.ExclusiveFlag ||
                    (this.ExclusiveFlag != null &&
                    this.ExclusiveFlag.Equals(input.ExclusiveFlag))
                ) && 
                (
                    this.SaleReturnTypeCode == input.SaleReturnTypeCode ||
                    (this.SaleReturnTypeCode != null &&
                    this.SaleReturnTypeCode.Equals(input.SaleReturnTypeCode))
                ) && 
                (
                    this.SortSequence == input.SortSequence ||
                    (this.SortSequence != null &&
                    this.SortSequence.Equals(input.SortSequence))
                ) && 
                (
                    this.SafeCountFlag == input.SafeCountFlag ||
                    (this.SafeCountFlag != null &&
                    this.SafeCountFlag.Equals(input.SafeCountFlag))
                ) && 
                (
                    this.ReceiptPrintoutTypeCode == input.ReceiptPrintoutTypeCode ||
                    (this.ReceiptPrintoutTypeCode != null &&
                    this.ReceiptPrintoutTypeCode.Equals(input.ReceiptPrintoutTypeCode))
                ) && 
                (
                    this.NegativeValueAllowedFlag == input.NegativeValueAllowedFlag ||
                    (this.NegativeValueAllowedFlag != null &&
                    this.NegativeValueAllowedFlag.Equals(input.NegativeValueAllowedFlag))
                ) && 
                (
                    this.ItemRestrictApplyTypeCode == input.ItemRestrictApplyTypeCode ||
                    (this.ItemRestrictApplyTypeCode != null &&
                    this.ItemRestrictApplyTypeCode.Equals(input.ItemRestrictApplyTypeCode))
                ) && 
                (
                    this.RoundingRequiredFlag == input.RoundingRequiredFlag ||
                    (this.RoundingRequiredFlag != null &&
                    this.RoundingRequiredFlag.Equals(input.RoundingRequiredFlag))
                ) && 
                (
                    this.TenderHandlingRuleID == input.TenderHandlingRuleID ||
                    (this.TenderHandlingRuleID != null &&
                    this.TenderHandlingRuleID.Equals(input.TenderHandlingRuleID))
                ) && 
                (
                    this.TenderRestrictionRuleList == input.TenderRestrictionRuleList ||
                    this.TenderRestrictionRuleList != null &&
                    this.TenderRestrictionRuleList.SequenceEqual(input.TenderRestrictionRuleList)
                ) && 
                (
                    this.TranslationList == input.TranslationList ||
                    this.TranslationList != null &&
                    this.TranslationList.SequenceEqual(input.TranslationList)
                ) && 
                (
                    this.PackageID == input.PackageID ||
                    (this.PackageID != null &&
                    this.PackageID.Equals(input.PackageID))
                ) && 
                (
                    this.Origin == input.Origin ||
                    (this.Origin != null &&
                    this.Origin.Equals(input.Origin))
                ) && 
                (
                    this.Tid == input.Tid ||
                    (this.Tid != null &&
                    this.Tid.Equals(input.Tid))
                ) && 
                (
                    this.Xxcustom05 == input.Xxcustom05 ||
                    (this.Xxcustom05 != null &&
                    this.Xxcustom05.Equals(input.Xxcustom05))
                ) && 
                (
                    this.IsocurrencyCode == input.IsocurrencyCode ||
                    (this.IsocurrencyCode != null &&
                    this.IsocurrencyCode.Equals(input.IsocurrencyCode))
                ) && 
                (
                    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.TenderClassCode != null)
                    hashCode = hashCode * 59 + this.TenderClassCode.GetHashCode();
                if (this.Description != null)
                    hashCode = hashCode * 59 + this.Description.GetHashCode();
                if (this.MinimumAcceptAmount != null)
                    hashCode = hashCode * 59 + this.MinimumAcceptAmount.GetHashCode();
                if (this.MaximumAcceptAmount != null)
                    hashCode = hashCode * 59 + this.MaximumAcceptAmount.GetHashCode();
                if (this.ItemRestrictionsApplyFlag != null)
                    hashCode = hashCode * 59 + this.ItemRestrictionsApplyFlag.GetHashCode();
                if (this.OpenCashDrawerRequiredFlag != null)
                    hashCode = hashCode * 59 + this.OpenCashDrawerRequiredFlag.GetHashCode();
                if (this.ChangeThresholdAmount != null)
                    hashCode = hashCode * 59 + this.ChangeThresholdAmount.GetHashCode();
                if (this.TillCountFlag != null)
                    hashCode = hashCode * 59 + this.TillCountFlag.GetHashCode();
                if (this.DenominationFlag != null)
                    hashCode = hashCode * 59 + this.DenominationFlag.GetHashCode();
                if (this.PickupTypeCode != null)
                    hashCode = hashCode * 59 + this.PickupTypeCode.GetHashCode();
                if (this.ChangeAllowedFlag != null)
                    hashCode = hashCode * 59 + this.ChangeAllowedFlag.GetHashCode();
                if (this.UnitCountRequiredFlag != null)
                    hashCode = hashCode * 59 + this.UnitCountRequiredFlag.GetHashCode();
                if (this.AmountCountRequiredFlag != null)
                    hashCode = hashCode * 59 + this.AmountCountRequiredFlag.GetHashCode();
                if (this.VoidingAllowedFlag != null)
                    hashCode = hashCode * 59 + this.VoidingAllowedFlag.GetHashCode();
                if (this.DepositAllowedFlag != null)
                    hashCode = hashCode * 59 + this.DepositAllowedFlag.GetHashCode();
                if (this.BlockingFlag != null)
                    hashCode = hashCode * 59 + this.BlockingFlag.GetHashCode();
                if (this.DeliveryTypeCode != null)
                    hashCode = hashCode * 59 + this.DeliveryTypeCode.GetHashCode();
                if (this.ControlledBySafeFlag != null)
                    hashCode = hashCode * 59 + this.ControlledBySafeFlag.GetHashCode();
                if (this.InputAmountConstraint != null)
                    hashCode = hashCode * 59 + this.InputAmountConstraint.GetHashCode();
                if (this.AllowedAmountTypeCode != null)
                    hashCode = hashCode * 59 + this.AllowedAmountTypeCode.GetHashCode();
                if (this.TenderGroupCode != null)
                    hashCode = hashCode * 59 + this.TenderGroupCode.GetHashCode();
                if (this.CheckAvailableAmountFlag != null)
                    hashCode = hashCode * 59 + this.CheckAvailableAmountFlag.GetHashCode();
                if (this.PickupWarningFlag != null)
                    hashCode = hashCode * 59 + this.PickupWarningFlag.GetHashCode();
                if (this.PickupWarningLimit != null)
                    hashCode = hashCode * 59 + this.PickupWarningLimit.GetHashCode();
                if (this.ImmediateVoidingAllowedFlag != null)
                    hashCode = hashCode * 59 + this.ImmediateVoidingAllowedFlag.GetHashCode();
                if (this.ReceiptPrinterName != null)
                    hashCode = hashCode * 59 + this.ReceiptPrinterName.GetHashCode();
                if (this.ExclusiveFlag != null)
                    hashCode = hashCode * 59 + this.ExclusiveFlag.GetHashCode();
                if (this.SaleReturnTypeCode != null)
                    hashCode = hashCode * 59 + this.SaleReturnTypeCode.GetHashCode();
                if (this.SortSequence != null)
                    hashCode = hashCode * 59 + this.SortSequence.GetHashCode();
                if (this.SafeCountFlag != null)
                    hashCode = hashCode * 59 + this.SafeCountFlag.GetHashCode();
                if (this.ReceiptPrintoutTypeCode != null)
                    hashCode = hashCode * 59 + this.ReceiptPrintoutTypeCode.GetHashCode();
                if (this.NegativeValueAllowedFlag != null)
                    hashCode = hashCode * 59 + this.NegativeValueAllowedFlag.GetHashCode();
                if (this.ItemRestrictApplyTypeCode != null)
                    hashCode = hashCode * 59 + this.ItemRestrictApplyTypeCode.GetHashCode();
                if (this.RoundingRequiredFlag != null)
                    hashCode = hashCode * 59 + this.RoundingRequiredFlag.GetHashCode();
                if (this.TenderHandlingRuleID != null)
                    hashCode = hashCode * 59 + this.TenderHandlingRuleID.GetHashCode();
                if (this.TenderRestrictionRuleList != null)
                    hashCode = hashCode * 59 + this.TenderRestrictionRuleList.GetHashCode();
                if (this.TranslationList != null)
                    hashCode = hashCode * 59 + this.TranslationList.GetHashCode();
                if (this.PackageID != null)
                    hashCode = hashCode * 59 + this.PackageID.GetHashCode();
                if (this.Origin != null)
                    hashCode = hashCode * 59 + this.Origin.GetHashCode();
                if (this.Tid != null)
                    hashCode = hashCode * 59 + this.Tid.GetHashCode();
                if (this.Xxcustom05 != null)
                    hashCode = hashCode * 59 + this.Xxcustom05.GetHashCode();
                if (this.IsocurrencyCode != null)
                    hashCode = hashCode * 59 + this.IsocurrencyCode.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;
        }
    }

}
