Exemple #1
0
        public DonutContext(IRedisCacher cacher, Data.DataIntegration integration, IServiceProvider serviceProvider)
        {
            _cacher               = cacher;
            ApiAuth               = integration.APIKey;
            CacheRunInterval      = 10;
            _currentCacheRunIndex = 0;
            Integration           = integration;
            CurrentCache          = new ConcurrentDictionary <string, List <HashEntry> >();
            ConfigureCacheMap();
            Prefix = $"integration_context:{Integration.Id}";
            new ContextSetDiscoveryService(this, serviceProvider).Initialize();
            _cachingService = new CachingPersistеnceService(this);
            if (integration != null && !string.IsNullOrEmpty(integration.FeaturesCollection))
            {
                _encoder = FieldEncoder.Factory.Create(Integration);
//                var dbConfig = DBConfig.GetGeneralDatabase();
//                var mongoList = new MongoList(dbConfig, integration.FeaturesCollection);//Make sure the collection exists
//                var murlBuilder = new MongoUrlBuilder("");
//                murlBuilder.AuthenticationSource = "admin";
//                var murl = murlBuilder.ToMongoUrl();
//                var connection = new MongoClient(murl);
//                var database = connection.GetDatabase("");
//IMongoDatabase db = MongoHelper.GetDatabase();
//db.CreateCollection(integration.FeaturesCollection);
            }
        }
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not allowed in .NET:
//ORIGINAL LINE: protected GenotypesWriter(final Bio.VCF.VCFHeader header, final BCF2FieldEncoder fieldEncoder)
            protected internal GenotypesWriter(VCFHeader header, BCF2FieldEncoder fieldEncoder) : base(header, fieldEncoder)
            {
                if (fieldEncoder.hasConstantNumElements())
                {
                    nValuesPerGenotype = FieldEncoder.numElements();
                }
            }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void addGenotype(final BCF2Encoder encoder, final org.broadinstitute.variant.variantcontext.VariantContext vc, final org.broadinstitute.variant.variantcontext.Genotype g) throws java.io.IOException
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not allowed in .NET:
            public override void addGenotype(BCF2Encoder encoder, VariantContext vc, Genotype g)
            {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final String fieldValue = g.getFilters();
                string fieldValue = g.Filters;

                FieldEncoder.encodeValue(encoder, fieldValue, encodingType, nValuesPerGenotype);
            }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Requires({"encodingType != null", "nValuesPerGenotype >= 0"}) public void addGenotype(final BCF2Encoder encoder, final org.broadinstitute.variant.variantcontext.VariantContext vc, final org.broadinstitute.variant.variantcontext.Genotype g) throws java.io.IOException
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not allowed in .NET:
            public virtual void addGenotype(BCF2Encoder encoder, VariantContext vc, Genotype g)
            {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final Object fieldValue = g.getExtendedAttribute(getField(), null);
                object fieldValue = g.getExtendedAttribute(Field, null);

                FieldEncoder.encodeValue(encoder, fieldValue, encodingType, nValuesPerGenotype);
            }
Exemple #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="options"></param>
        public DataImportTask(DataImportTaskOptions options)
        {
            _options = options;
            string tmpGuid = Guid.NewGuid().ToString();

            _harvester = new Harvester <T>(_options.ThreadCount);
            if (options.Integration != null)
            {
                if (options.Integration.Fields.Count == 0)
                {
                    throw new InvalidOperationException("Integration needs to have at least 1 field.");
                }
                _integration        = options.Integration;
                _integration.APIKey = _options.ApiKey;
                if (string.IsNullOrEmpty(_integration.FeaturesCollection))
                {
                    _integration.FeaturesCollection = $"{_integration.Collection}_features";
                }
                if (string.IsNullOrEmpty(_integration.Collection))
                {
                    _integration.Collection = tmpGuid;
                }
                _harvester.AddIntegration(options.Integration, _options.Source);
            }
            else
            {
                _integration = _harvester.AddIntegrationSource(_options.Source, _options.ApiKey,
                                                               _options.IntegrationName, tmpGuid);
            }

            var outCollection = new DestinationCollection(_integration.Collection, _integration.GetReducedCollectionName());

            OutputDestinationCollection = outCollection;
            if (options.TotalEntryLimit > 0)
            {
                _harvester.LimitEntries(options.TotalEntryLimit);
            }
            if (options.ShardLimit > 0)
            {
                _harvester.LimitShards(options.ShardLimit);
            }
            this.EncodeOnImport = options.EncodeInput;
            if (this.EncodeOnImport)
            {
                _encoder = FieldEncoder.Factory.Create(_integration);
            }
            // new OneHotEncoding(new FieldEncodingOptions { Integration = _integration });
        }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Override @Requires({"encodingType != null", "nValuesPerGenotype >= 0 || ! getFieldEncoder().hasConstantNumElements()"}) @Ensures("nValuesPerGenotype >= 0") public void start(final BCF2Encoder encoder, final org.broadinstitute.variant.variantcontext.VariantContext vc) throws java.io.IOException
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not allowed in .NET:
            public override void start(BCF2Encoder encoder, VariantContext vc)
            {
                // writes the key information
                base.start(encoder, vc);

                // only update if we need to
                if (!FieldEncoder.hasConstantNumElements())
                {
                    if (FieldEncoder.hasContextDeterminedNumElements())
                    // we are cheap -- just depends on genotype of allele counts
                    {
                        nValuesPerGenotype = FieldEncoder.numElements(vc);
                    }
                    else
                    // we have to go fishing through the values themselves (expensive)
                    {
                        nValuesPerGenotype = computeMaxSizeOfGenotypeFieldFromValues(vc);
                    }
                }

                encoder.encodeType(nValuesPerGenotype, encodingType);
            }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void start(final BCF2Encoder encoder, final org.broadinstitute.variant.variantcontext.VariantContext vc) throws java.io.IOException
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not allowed in .NET:
            public override void start(BCF2Encoder encoder, VariantContext vc)
            {
                // TODO
                // TODO this piece of code consumes like 10% of the runtime alone because fo the vc.getGenotypes() iteration
                // TODO
                encodingType = BCF2Type.INT8;
                foreach (Genotype g in vc.Genotypes)
                {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final int[] pls = ige.getValues(g);
                    int[] pls = ige.getValues(g);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.broadinstitute.variant.bcf2.BCF2Type plsType = getFieldEncoder().getType(pls);
                    BCF2Type plsType = FieldEncoder.getType(pls);
                    encodingType = BCF2Utils.maxIntegerType(encodingType, plsType);
                    if (encodingType == BCF2Type.INT32)
                    {
                        break;                         // stop early
                    }
                }

                base.start(encoder, vc);
            }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void site(final BCF2Encoder encoder, final org.broadinstitute.variant.variantcontext.VariantContext vc) throws java.io.IOException
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not allowed in .NET:
            public override void site(BCF2Encoder encoder, VariantContext vc)
            {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final Object rawValue = vc.getAttribute(getField(), null);
                object rawValue = vc.getAttribute(Field, null);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.broadinstitute.variant.bcf2.BCF2Type type = getFieldEncoder().getType(rawValue);
                BCF2Type type = FieldEncoder.getType(rawValue);

                if (rawValue == null)
                {
                    // the value is missing, just write in null
                    encoder.encodeType(0, type);
                }
                else
                {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final int valueCount = getFieldEncoder().numElements(vc, rawValue);
                    int valueCount = FieldEncoder.numElements(vc, rawValue);
                    encoder.encodeType(valueCount, type);
                    FieldEncoder.encodeValue(encoder, rawValue, type, valueCount);
                }
            }
        /// <summary>
        /// Sends the MSG.
        /// </summary>
        /// <param name="RequestType">Type of the request.</param>
        /// <param name="HicapsParams">The hicaps params.</param>
        /// <param name="bRequestMsg">The b request MSG.</param>
        /// <returns></returns>
        internal static string ToTerminalMessage(string RequestType, TerminalParameters HicapsParams, out byte[] bRequestMsg)
        {
            // John P locals
            string strHexin = "", strHexout = "";

            //  string strSalesAmnt, strCashOut;

            // Original
            string[] TransCodes    = { "20", "21", "22", "26", "42", "50", "55", "61", "A4", "A5", "D0", "E7", "E8", "EF", "MP", "MC", "DP", "AP", "AM", "A0", "HT", "HL", "EL", "KC", "A6", "A7", "A8" };
            string[] ReqTypes      = { "Sale", "Claim", "Quote", "Refund", "Void", "Card Read", "55", "Settlement", "Providers Info", "Card Tables", "Test", "Cashout", "Plus Cash", "Cancel", "Medicare Providers", "Medicare Claim", "Eftpos Deposit", "All Providers", "All Merchants", "Print Last Receipt", "Hicaps Totals", "Hicaps Txn Listing", "Eftpos Txn Listing", "Key Check", "Item Response Code", "Txn Response Code", "Item List" };
            string   strRequestMsg = "";

            // int pos = 0;
            var enc = new UTF8Encoding();

            // Check for valid Request Type
            int index = Array.IndexOf(ReqTypes, RequestType);

            string strAddInfo        = "4D 58 00 02 44 30 1C ";
            string strAddInfoEncrypt = "4D 58 00 02 46 30 1C ";

            string strAddPrintReceiptInfo               = "4D 58 00 02 44 31 1C ";
            string strAddPrintReceiptInfoEncrypt        = "4D 58 00 02 46 31 1C ";
            string strAddPrintYesterdayTransactionsPms  = "4D 58 00 02 44 31 1C ";
            string strAddPrintYesterdayTransactionsTerm = "4D 58 00 02 44 32 1C ";
            string strAddPrintReceiptInfoPms            = "4D 58 00 02 44 30 1C ";

            string strTransCode = TransCodes[index];

            // Setup Encryption

            switch (strTransCode)
            {
            case "20":          // Sale
                strHexin = "02 00 34 36 30 30 30 30 30 30 30 30 30 31 30 32 30 30 30 30 1C 4D 58 00 02 46 30 1C 03 00";
                string amount = FieldEncoder.encodeHexString(HicapsParams.SaleAmount);

                if (HicapsParams.MultiMerchant)
                {
                    // strHexin = strHexin.Replace(strMultiMerchant, "");
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("MN", HicapsParams.MerchantId.Trim()), strHexin);
                }
                if (!HicapsParams.EncryptionFlag)
                {
                    strHexin = strHexin.Replace("4D 58 00 02 46 30 1C", "4D 58 00 02 44 30 1C");
                }
                strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                if (HicapsParams.SaleAmount > 0)
                {
                    //34 30 00 05 31 32 35 30 30 1C
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", FieldEncoder.encodeDecimal(HicapsParams.SaleAmount)), strHexin);
                }
                else
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", FieldEncoder.encodeDecimal(HicapsParams.SaleAmount)), strHexin);
                }
                // Sending down PAN
                if (!string.IsNullOrEmpty(HicapsParams.PrimaryAccountNumber))
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlphaEncrypt("30", HicapsParams.PrimaryAccountNumber, HicapsParams.KVC), strHexin);
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("31", HicapsParams.USExpiryDate), strHexin);

                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C1", HicapsParams.CCV), strHexin);
                    if (HicapsParams.CCVReason > 0)
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C2", HicapsParams.CCVReason.ToString()), strHexin);
                    }
                    if (HicapsParams.CCVSource > 0)
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C3", HicapsParams.CCVSource.ToString()), strHexin);
                    }
                }
                // New 2010 Changes... Add PMSKey to Sale Transactions
                if (!HicapsParams.Disable54AFields)
                {
                    if (!string.IsNullOrEmpty(HicapsParams.PmsKey))
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PK", HicapsParams.PmsKey), strHexin);
                    }
                    strHexin = FieldEncoder.encodePrintOptions(HicapsParams, strHexin);
                }
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "21":          // Claim
                // Jp Changed... New field called 'LB' = Loyalty Bonus [4C 42 00 01 31 1C]

                if (!HicapsParams.NonSettlementFlag)
                {
                    strHexin = "02 00 66 36 30 30 30 30 30 30 30 30 30 31 30 32 31 30 30 30 1C 4D 58 00 02 46 30 1C 4C 42 00 01 31 1C 03 4A";
                }
                else
                {
                    strHexin = "02 00 66 36 30 30 30 30 30 30 30 30 30 31 30 32 33 30 30 30 1C 4D 58 00 02 46 30 1C 4C 42 00 01 31 1C 03 4A";
                }

                if (!HicapsParams.EncryptionFlag)
                {
                    strHexin = strHexin.Replace("4D 58 00 02 46 30 1C", "4D 58 00 02 44 30 1C");
                }
                // Print receipt on terminal functionality

                if (HicapsParams.PrintReceiptOnTerminal)
                {
                    if (!HicapsParams.EncryptionFlag)
                    {
                        strHexin = strHexin.Replace(strAddInfo, strAddPrintReceiptInfo);
                    }
                    else
                    {
                        strHexin = strHexin.Replace(strAddInfoEncrypt, strAddPrintReceiptInfoEncrypt);
                    }
                }

                strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", FieldEncoder.encodeDecimal(HicapsParams.TotalClaimAmount)), strHexin);

                //if (AdditionalInfo != true)
                //{
                //    strHexin = strHexin.Replace(strAddInfo, "");
                //}
                if (HicapsParams.ComputerName != null && HicapsParams.ComputerName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                }
                if (HicapsParams.VendorName != null && HicapsParams.VendorName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                }

                //    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", encodeDecimal(HicapsParams.TotalClaimAmount)), strHexin);

                string claimField  = FieldEncoder.Right("00000000" + HicapsParams.ProviderNumberId, 8);
                string encryptData = "";
                if (HicapsParams.EncryptionFlag)
                {
                    // Bit of a workaround.  Only First 8 bytes are encrypted of EA Field.
                    encryptData = FieldEncoder.encodeAlphaEncrypt("30", claimField, HicapsParams.KVC);
                    encryptData = encryptData.Substring(12, 23);
                    claimField  = FieldEncoder.ConvertToHex(encryptData);
                }
                foreach (string claimData in HicapsParams.ClaimData)
                {
                    claimField += claimData;
                }
                strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("EA", claimField), strHexin);

                // Add Patient Card Information
                if (HicapsParams.PatientData != null && HicapsParams.PatientData.Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PN", HicapsParams.getPatientDataAsFieldString()), strHexin);
                }
                if (!string.IsNullOrEmpty(HicapsParams.PrimaryAccountNumber))
                {
                    if (!HicapsParams.EncryptionFlag)
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("30", HicapsParams.PrimaryAccountNumber), strHexin);
                    }
                    else
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlphaEncrypt("30", HicapsParams.PrimaryAccountNumber, HicapsParams.KVC), strHexin);
                    }
                }
                if (!HicapsParams.Disable54AFields)
                {
                    if (!string.IsNullOrEmpty(HicapsParams.PmsKey))
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PK", HicapsParams.PmsKey), strHexin);
                    }
                }
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "22":          // Quote
                strHexin = "02 00 65 36 30 30 30 30 30 30 30 30 30 31 30 32 32 30 30 30 1C 4D 58 00 02 46 30 1C 4C 42 00 01 31 1C 03 49";
                if (!HicapsParams.EncryptionFlag)
                {
                    strHexin = strHexin.Replace("4D 58 00 02 46 30 1C", "4D 58 00 02 44 30 1C");
                }
                // Print receipt on terminal functionality

                if (HicapsParams.PrintReceiptOnTerminal)
                {
                    if (!HicapsParams.EncryptionFlag)
                    {
                        strHexin = strHexin.Replace(strAddInfo, strAddPrintReceiptInfo);
                    }
                    else
                    {
                        strHexin = strHexin.Replace(strAddInfoEncrypt, strAddPrintReceiptInfoEncrypt);
                    }
                }

                if (HicapsParams.ComputerName != null && HicapsParams.ComputerName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                }
                if (HicapsParams.VendorName != null && HicapsParams.VendorName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                }

                strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", FieldEncoder.encodeDecimal(HicapsParams.TotalClaimAmount)), strHexin);

                string quoteField = FieldEncoder.Right("00000000" + HicapsParams.ProviderNumberId, 8);

                string encryptQuoteData = "";
                if (HicapsParams.EncryptionFlag)
                {
                    // Bit of a workaround.  Only First 8 bytes are encrypted of EA Field.
                    encryptQuoteData = FieldEncoder.encodeAlphaEncrypt("30", quoteField, HicapsParams.KVC);
                    encryptQuoteData = encryptQuoteData.Substring(12, 23);
                    quoteField       = FieldEncoder.ConvertToHex(encryptQuoteData);
                }
                foreach (string claimData in HicapsParams.ClaimData)
                {
                    quoteField += claimData;
                }
                strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("EA", quoteField), strHexin);

                // Add Patient Card Information
                if (HicapsParams.PatientData != null && HicapsParams.PatientData.Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PN", HicapsParams.getPatientDataAsFieldString()), strHexin);
                }
                if (!string.IsNullOrEmpty(HicapsParams.PrimaryAccountNumber))
                {
                    if (!HicapsParams.EncryptionFlag)
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("30", HicapsParams.PrimaryAccountNumber), strHexin);
                    }
                    else
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlphaEncrypt("30", HicapsParams.PrimaryAccountNumber, HicapsParams.KVC), strHexin);
                    }
                }
                // New 2010 Changes... Add PMSKey to Sale Transactions
                if (!HicapsParams.Disable54AFields)
                {
                    if (!string.IsNullOrEmpty(HicapsParams.PmsKey))
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PK", HicapsParams.PmsKey), strHexin);
                    }
                }
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "DP":      // Eftpos Deposit... Works same as refund
                strHexin = "02 00 45 36 30 30 30 30 30 30 30 30 30 31 30 44 50 30 30 30 1C 4D 58 00 02 46 30 1C 4D 52 00 06 35 34 38 31 36 30 1C 4D 4E 00 08 31 32 33 34 35 36 37 38 1C 4D 58 00 02 46 30 1C 03 7C";

                if (!HicapsParams.EncryptionFlag)
                {
                    strHexin = strHexin.Replace("4D 58 00 02 46 30 1C", "4D 58 00 02 44 30 1C");
                }
                if (HicapsParams.MRPwd == "")
                {
                    strHexin = strHexin.Replace("4D 52 00 06 35 34 38 31 36 30 1C ", "");
                }
                else
                {
                    string strPwd = "";
                    // Must be only 6 numeric values
                    HicapsParams.MRPwd = HicapsParams.MRPwd.Substring(0, 6);
                    foreach (char c in HicapsParams.MRPwd)
                    {
                        strPwd = strPwd + String.Format("{0:X2} ", (int)c);
                    }
                    strHexin = strHexin.Replace("4D 52 00 06 35 34 38 31 36 30 ", "4D 52 00 0" + HicapsParams.MRPwd.Length.ToString() + " " + strPwd);
                }

                string cancelAmount = FieldEncoder.encodeDecimal(HicapsParams.CancelAmount);
                if (HicapsParams.CancelAmount > 0)
                {
                    //34 30 00 05 31 32 35 30 30 1C
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", FieldEncoder.encodeDecimal(HicapsParams.CancelAmount)), strHexin);
                }
                else
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", FieldEncoder.encodeDecimal(HicapsParams.CancelAmount)), strHexin);
                }

                if (HicapsParams.MerchantId != "")
                {
                    string strMerchant = "";
                    foreach (char c in HicapsParams.MerchantId)
                    {
                        strMerchant = strMerchant + String.Format("{0:X2} ", (int)c);
                    }

                    strHexin = strHexin.Replace("4D 4E 00 08 31 32 33 34 35 36 37 38 ", "4D 4E 00 08 " + strMerchant);
                }
                if (HicapsParams.ComputerName != null && HicapsParams.ComputerName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                }
                if (HicapsParams.VendorName != null && HicapsParams.VendorName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                }
                if (!string.IsNullOrEmpty(HicapsParams.PrimaryAccountNumber))
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlphaEncrypt("30", HicapsParams.PrimaryAccountNumber, HicapsParams.KVC), strHexin);
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("31", HicapsParams.USExpiryDate), strHexin);
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C1", HicapsParams.CCV), strHexin);
                    if (HicapsParams.CCVReason > 0)
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C2", HicapsParams.CCVReason.ToString()), strHexin);
                    }
                    if (HicapsParams.CCVSource > 0)
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C3", HicapsParams.CCVSource.ToString()), strHexin);
                    }
                }
                // New 2010 Changes... Add PMSKey to Sale Transactions
                if (!HicapsParams.Disable54AFields)
                {
                    if (!string.IsNullOrEmpty(HicapsParams.PmsKey))
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PK", HicapsParams.PmsKey), strHexin);
                    }
                    strHexin = FieldEncoder.encodePrintOptions(HicapsParams, strHexin);
                }
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "26":          // Refund
                strHexin = "02 00 45 36 30 30 30 30 30 30 30 30 30 31 30 32 36 30 30 30 1C 4D 52 00 06 35 34 38 31 36 30 1C 4D 4E 00 08 31 32 33 34 35 36 37 38 1C 4D 58 00 02 46 30 1C 03 7C";

                if (!HicapsParams.EncryptionFlag)
                {
                    strHexin = strHexin.Replace("4D 58 00 02 46 30 1C", "4D 58 00 02 44 30 1C");
                }
                if (HicapsParams.MRPwd == "")
                {
                    strHexin = strHexin.Replace("4D 52 00 06 35 34 38 31 36 30 1C ", "");
                }
                else
                {
                    string strPwd = "";
                    // Must be only 6 numeric values
                    HicapsParams.MRPwd = HicapsParams.MRPwd.Substring(0, 6);
                    foreach (char c in HicapsParams.MRPwd)
                    {
                        strPwd = strPwd + String.Format("{0:X2} ", (int)c);
                    }
                    strHexin = strHexin.Replace("4D 52 00 06 35 34 38 31 36 30 ", "4D 52 00 0" + HicapsParams.MRPwd.Length.ToString() + " " + strPwd);
                }

                if (HicapsParams.CancelAmount > 0)
                {
                    //34 30 00 05 31 32 35 30 30 1C
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", FieldEncoder.encodeDecimal(HicapsParams.CancelAmount)), strHexin);
                }
                else
                {
                    HicapsParams.CancelAmount = 0;
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", FieldEncoder.encodeDecimal(HicapsParams.CancelAmount)), strHexin);
                }


                if (HicapsParams.MerchantId != "")
                {
                    string strMerchant = "";
                    foreach (char c in HicapsParams.MerchantId)
                    {
                        strMerchant = strMerchant + String.Format("{0:X2} ", (int)c);
                    }

                    strHexin = strHexin.Replace("4D 4E 00 08 31 32 33 34 35 36 37 38 ", "4D 4E 00 08 " + strMerchant);
                }

                if (HicapsParams.ComputerName != null && HicapsParams.ComputerName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                }
                if (HicapsParams.VendorName != null && HicapsParams.VendorName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                }
                if (!string.IsNullOrEmpty(HicapsParams.PrimaryAccountNumber))
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlphaEncrypt("30", HicapsParams.PrimaryAccountNumber, HicapsParams.KVC), strHexin);
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("31", HicapsParams.USExpiryDate), strHexin);
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C1", HicapsParams.CCV), strHexin);
                    if (HicapsParams.CCVReason > 0)
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C2", HicapsParams.CCVReason.ToString()), strHexin);
                    }
                    if (HicapsParams.CCVSource > 0)
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C3", HicapsParams.CCVSource.ToString()), strHexin);
                    }
                }
                // New 2010 Changes... Add PMSKey to Sale Transactions
                if (!HicapsParams.Disable54AFields)
                {
                    if (!string.IsNullOrEmpty(HicapsParams.PmsKey))
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PK", HicapsParams.PmsKey), strHexin);
                    }
                    strHexin = FieldEncoder.encodePrintOptions(HicapsParams, strHexin);
                }
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "A0":     // Print Last Receipt
                strHexin = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 41 30 30 30 30 1C 4D 58 00 02 44 30 1C 03 45";
                if (HicapsParams.ComputerName != null && HicapsParams.ComputerName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                }
                if (HicapsParams.VendorName != null && HicapsParams.VendorName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                }
                if (HicapsParams.PrintReceiptOnTerminal)
                {
                    // Not sure why b
                    strHexin = strHexin.Replace(strAddPrintReceiptInfoPms, strAddPrintReceiptInfo);
                }
                else
                {
                    // Not sure why, but this requirses 81 instead of C1 to not print
                    strHexin = strHexin.Replace(strAddPrintReceiptInfoPms, strAddPrintReceiptInfoPms);
                }

                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "EF":          // Cancel
                // Jp Changed... New field called 'LB' = Loyalty Bonus [4C 42 00 01 31 1C]
                if (!HicapsParams.NonSettlementFlag)
                {
                    strHexin = "02 00 64 36 30 30 30 30 30 30 30 30 30 31 30 45 46 30 30 30 1C 4D 58 00 02 44 30 1C 4C 42 00 01 31 1C 03 6A";
                }
                else
                {
                    strHexin = "02 00 64 36 30 30 30 30 30 30 30 30 30 31 30 32 34 30 30 30 1C 4D 58 00 02 44 30 1C 4C 42 00 01 31 1C 03 6A";
                }
                strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("EA", HicapsParams.ProviderNumberId), strHexin);

                if (HicapsParams.PrintReceiptOnTerminal)
                {
                    strHexin = strHexin.Replace(strAddPrintReceiptInfoPms, strAddPrintReceiptInfo);
                }
                else
                {
                    strHexin = strHexin.Replace(strAddPrintReceiptInfoPms, strAddPrintReceiptInfoPms);
                }

                if (HicapsParams.CancelAmount > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", FieldEncoder.encodeDecimal(HicapsParams.CancelAmount)), strHexin);
                }
                else
                {
                    HicapsParams.CancelAmount = 0;
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", FieldEncoder.encodeDecimal(HicapsParams.CancelAmount)), strHexin);
                }
                // Add Patient Card Information
                if (HicapsParams.PatientData != null && HicapsParams.PatientData.Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PN", HicapsParams.getPatientDataAsFieldString()), strHexin);
                }
                if (HicapsParams.ComputerName != null && HicapsParams.ComputerName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                }
                if (HicapsParams.VendorName != null && HicapsParams.VendorName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                }
                if (!string.IsNullOrEmpty(HicapsParams.PrimaryAccountNumber))
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("30", HicapsParams.PrimaryAccountNumber), strHexin);
                }
                if (!string.IsNullOrEmpty(HicapsParams.RrnNumber))
                {
                    HicapsParams.RrnNumber = FieldEncoder.Right("000000000000" + HicapsParams.RrnNumber, 12);
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("79", HicapsParams.RrnNumber), strHexin);
                }
                else
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("79", new string(' ', 12)), strHexin);
                }
                // New 2010 Changes... Add PMSKey to Sale Transactions
                if (!HicapsParams.Disable54AFields)
                {
                    if (!string.IsNullOrEmpty(HicapsParams.PmsKey))
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PK", HicapsParams.PmsKey), strHexin);
                    }
                }
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "HT":     // Hicaps Totals
                strHexin = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 48 54 30 30 30 1C 4D 58 00 02 44 30 1C 03 45";
                if (HicapsParams.TodayTransactions == false)
                {
                    // Make mx field = 4D 58 00 02 43 31
                    if (HicapsParams.PrintReceiptOnTerminal)
                    {
                        strHexin = strHexin.Replace(strAddPrintReceiptInfoPms, strAddPrintYesterdayTransactionsTerm);
                    }
                    else
                    {
                        strHexin = strHexin.Replace(strAddPrintReceiptInfoPms, strAddPrintYesterdayTransactionsPms);
                    }
                }
                else
                {
                    if (HicapsParams.PrintReceiptOnTerminal)
                    {
                        strHexin = strHexin.Replace(strAddPrintReceiptInfoPms, strAddPrintReceiptInfo);
                    }
                    else
                    {
                        // Do nothing
                        strHexin = strHexin.Replace(strAddPrintReceiptInfoPms, strAddPrintReceiptInfoPms);
                    }
                }

                if (HicapsParams.ComputerName != null && HicapsParams.ComputerName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                }
                if (HicapsParams.VendorName != null && HicapsParams.VendorName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                }
                if (!string.IsNullOrEmpty(HicapsParams.ProviderNumberId) && HicapsParams.ProviderNumberId != "00000000")
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PR", HicapsParams.ProviderNumberId), strHexin);
                }
                strHexout = FieldEncoder.ConvertToHex(strHexin);

                break;

            case "HL":    // Hicaps Transaction Listings
                strHexin = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 48 4C 30 30 30 1C 4D 58 00 02 44 30 1C 03 45";

                strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                if (!string.IsNullOrEmpty(HicapsParams.ProviderNumberId) && HicapsParams.ProviderNumberId != "00000000")
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PR", HicapsParams.ProviderNumberId), strHexin);
                }
                strHexout = FieldEncoder.ConvertToHex(strHexin);

                break;

            case "EL":     // Eftpos Transaction Listings
                strHexin = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 45 4C 30 30 30 1C 4D 58 00 02 44 30 1C 03 45";
                strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("MN", HicapsParams.MerchantId), strHexin);
                strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);

                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "50":          // Card read
                strHexin = "02 00 25 36 30 30 30 30 30 30 30 30 30 31 30 35 30 30 30 30 1C 4D 58 00 02 44 30 1C 03 0B";

                if (HicapsParams.ComputerName != null && HicapsParams.ComputerName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                }
                if (HicapsParams.VendorName != null && HicapsParams.VendorName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                }
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "61":          // Settlement
                strHexin = "02 00 32 36 30 30 30 30 30 30 30 30 30 31 30 36 31 30 30 30 1C 03 01";
                if (HicapsParams.PrintReceiptOnTerminal)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("MX", "D0"), strHexin);
                }
                else
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("MX", "D2"), strHexin);
                }
                if (!string.IsNullOrEmpty(HicapsParams.MerchantId))
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("MN", HicapsParams.MerchantId.PadRight(15)), strHexin);
                }
                if (HicapsParams.ComputerName != null && HicapsParams.ComputerName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                }
                if (HicapsParams.VendorName != null && HicapsParams.VendorName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                }
                if (!string.IsNullOrEmpty(HicapsParams.SettlementType))
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("ST", HicapsParams.SettlementType), strHexin);
                }

                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "D0":          // terminal test
                strHexin  = "02 00 25 36 30 30 30 30 30 30 30 30 30 31 30 44 30 30 30 30 1C 4D 58 00 02 44 30 1C 03 7A";
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "A4":          // providers details
                //strHexin = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 4D 50 30 30 30 1C 03 2D";
                strHexin  = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 41 34 30 30 30 1C 03 45";
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "AP":     // All provider details
                strHexin  = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 41 50 30 30 30 1C 03 45";
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "AM":     // All Merchant details
                strHexin  = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 41 4D 30 30 30 1C 03 45";
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "A5":          // cards details
                strHexin  = "02 00 25 36 30 30 30 30 30 30 30 30 30 31 30 41 35 30 30 30 1C 4D 58 00 02 44 30 1C 03 7A";
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "A6":     // Item Response Code
                strHexin  = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 41 36 30 30 30 1C 03 47";
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "A7":     // Txn Response Code
                strHexin  = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 41 37 30 30 30 1C 03 46";
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "A8":     // Item List
                strHexin  = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 41 38 30 30 30 1C 03 49";
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "MP":          // providers details
                strHexin  = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 4D 50 30 30 30 1C 03 2D";
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "E7":          // cash advance
                strHexin = "02 00 34 36 30 30 30 30 30 30 30 30 30 31 30 45 37 30 30 30 1C 4D 58 00 02 46 30 1C 03 72";
                if (!HicapsParams.EncryptionFlag)
                {
                    strHexin = strHexin.Replace("4D 58 00 02 46 30 1C", "4D 58 00 02 44 30 1C");
                }
                if (HicapsParams.MultiMerchant)
                {
                    // strHexin = strHexin.Replace(strMultiMerchant, "");
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("MN", HicapsParams.MerchantId), strHexin);
                }
                if (HicapsParams.ComputerName != null && HicapsParams.ComputerName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                }
                if (HicapsParams.VendorName != null && HicapsParams.VendorName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                }
                if (HicapsParams.CashOutAmount > 0)
                {
                    //34 30 00 05 31 32 35 30 30 1C
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("42", FieldEncoder.encodeDecimal(HicapsParams.CashOutAmount)), strHexin);
                }
                else
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("42", FieldEncoder.encodeDecimal(HicapsParams.CashOutAmount)), strHexin);
                }
                if (!string.IsNullOrEmpty(HicapsParams.PrimaryAccountNumber))
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlphaEncrypt("30", HicapsParams.PrimaryAccountNumber, HicapsParams.KVC), strHexin);
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("31", HicapsParams.USExpiryDate), strHexin);
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C1", HicapsParams.CCV), strHexin);
                    if (HicapsParams.CCVReason > 0)
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C2", HicapsParams.CCVReason.ToString()), strHexin);
                    }
                    if (HicapsParams.CCVSource > 0)
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C3", HicapsParams.CCVSource.ToString()), strHexin);
                    }
                }
                // New 2010 Changes... Add PMSKey to Sale Transactions
                if (!HicapsParams.Disable54AFields)
                {
                    if (!string.IsNullOrEmpty(HicapsParams.PmsKey))
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PK", HicapsParams.PmsKey), strHexin);
                    }
                    strHexin = FieldEncoder.encodePrintOptions(HicapsParams, strHexin);
                }
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;

            case "E8":          // cash plus details
                strHexin = "02 00 43 36 30 30 30 30 30 30 30 30 30 31 30 45 38 30 30 30 1C 4D 58 00 02 46 30 1C 03 15";
                if (!HicapsParams.EncryptionFlag)
                {
                    strHexin = strHexin.Replace("4D 58 00 02 46 30 1C", "4D 58 00 02 44 30 1C");
                }
                if (HicapsParams.MultiMerchant)
                {
                    // strHexin = strHexin.Replace(strMultiMerchant, "");
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("MN", HicapsParams.MerchantId), strHexin);
                }
                if (HicapsParams.ComputerName != null && HicapsParams.ComputerName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                }
                if (HicapsParams.VendorName != null && HicapsParams.VendorName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                }
                if (HicapsParams.SaleAmount > 0)
                {
                    //34 30 00 05 31 32 35 30 30 1C
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", FieldEncoder.encodeDecimal(HicapsParams.SaleAmount)), strHexin);
                }
                else
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("40", FieldEncoder.encodeDecimal(HicapsParams.SaleAmount)), strHexin);
                }
                if (HicapsParams.CashOutAmount > 0)
                {
                    //34 30 00 05 31 32 35 30 30 1C
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("42", FieldEncoder.encodeDecimal(HicapsParams.CashOutAmount)), strHexin);
                }
                else
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("42", FieldEncoder.encodeDecimal(HicapsParams.CashOutAmount)), strHexin);
                }
                if (!string.IsNullOrEmpty(HicapsParams.PrimaryAccountNumber))
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlphaEncrypt("30", HicapsParams.PrimaryAccountNumber, HicapsParams.KVC), strHexin);
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("31", HicapsParams.USExpiryDate), strHexin);
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C1", HicapsParams.CCV), strHexin);
                    if (HicapsParams.CCVReason > 0)
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C2", HicapsParams.CCVReason.ToString()), strHexin);
                    }
                    if (HicapsParams.CCVSource > 0)
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("C3", HicapsParams.CCVSource.ToString()), strHexin);
                    }
                }
                // New 2010 Changes... Add PMSKey to Sale Transactions
                if (!HicapsParams.Disable54AFields)
                {
                    if (!string.IsNullOrEmpty(HicapsParams.PmsKey))
                    {
                        strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("PK", HicapsParams.PmsKey), strHexin);
                    }
                    strHexin = FieldEncoder.encodePrintOptions(HicapsParams, strHexin);
                }
                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;



            case "KC":
                strHexin = "02 00 18 36 30 30 30 30 30 30 30 30 30 31 30 4B 43 30 30 30 1C 03 2D";
                // Generace Key Value;
                string keyValue;
                keyValue = FieldEncoder.getKVCCheck(HicapsParams.KVC);

                strHexin  = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("KV", keyValue), strHexin);
                strHexout = FieldEncoder.ConvertToHex(strHexin);

                break;

            case "MC":          // Medicare Claim

                strHexin = "02 00 80 36 30 30 30 30 30 30 30 30 30 31 30 4d 43 30 30 30 1C 4D 58 00 02 46 30 1C 03 21";

                if (!HicapsParams.EncryptionFlag)
                {
                    strHexin = strHexin.Replace("4D 58 00 02 46 30 1C", "4D 58 00 02 44 30 1C");
                }
                if (HicapsParams.ComputerName != null && HicapsParams.ComputerName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CN", HicapsParams.ComputerName), strHexin);
                }

                if (HicapsParams.VendorName != null && HicapsParams.VendorName.Trim().Length > 0)
                {
                    strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("VN", HicapsParams.VendorName), strHexin);
                }

                switch (HicapsParams.ClaimType)
                {
                case 1: strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CT", "1"), strHexin); break;

                case 2: strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CT", "2"), strHexin); break;

                case 3: strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CT", "3"), strHexin); break;

                case 4: strHexin = FieldEncoder.addSubHexStringField(FieldEncoder.encodeAlpha("CT", "4"), strHexin); break;

                default: break;
                }

                // Encode m0 field
                string strM0Field = FieldEncoder.encodeM0Field(HicapsParams);
                if (HicapsParams.EncryptionFlag)
                {
                    strM0Field = FieldEncoder.encodeFieldEncrypt(strM0Field, HicapsParams.KVC);
                }
                // ENcode m1 field;

                string strM1Field = FieldEncoder.encodeM1Field(HicapsParams);
                if (HicapsParams.EncryptionFlag)
                {
                    strM1Field = FieldEncoder.encodeFieldEncrypt(strM1Field, HicapsParams.KVC);
                }
                strHexin = FieldEncoder.addSubHexStringField(strM0Field, strHexin);
                strHexin = FieldEncoder.addSubHexStringField(strM1Field, strHexin);


                strHexout = FieldEncoder.ConvertToHex(strHexin);
                break;
            }                                                                                            // end switch strTransCode

            string strLRCvalue = FieldEncoder.GetChecksum(strHexout.Substring(1, strHexout.Length - 2)); // calc LRC of string less _STX and LRC

            strRequestMsg = strHexout.Substring(0, strHexout.Length - 1) + strLRCvalue;
            // bRequestMsg = enc.GetBytes(strRequestMsg);
            // JP fixed.
            bRequestMsg = Encoding.Default.GetBytes(strRequestMsg);
            byte[] bMsglen = FieldEncoder.IntToBCD(bRequestMsg.Length - 5, 2);
            bRequestMsg[1] = bMsglen[0];                       // plug in the bcd message length
            bRequestMsg[2] = bMsglen[1];
            byte bLrc = FieldEncoder.GetChecksum(bRequestMsg); // plug in the LRC byte

            return(strRequestMsg);
        }
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not allowed in .NET:
//ORIGINAL LINE: protected int numElements(final org.broadinstitute.variant.variantcontext.VariantContext vc, final org.broadinstitute.variant.variantcontext.Genotype g)
            protected internal override int numElements(VariantContext vc, Genotype g)
            {
                return(FieldEncoder.numElements(vc, g.Filters));
            }
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void addGenotype(final BCF2Encoder encoder, final org.broadinstitute.variant.variantcontext.VariantContext vc, final org.broadinstitute.variant.variantcontext.Genotype g) throws java.io.IOException
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not allowed in .NET:
            public override void addGenotype(BCF2Encoder encoder, VariantContext vc, Genotype g)
            {
                FieldEncoder.encodeValue(encoder, ige.getValues(g), encodingType, nValuesPerGenotype);
            }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Ensures({"result >= 0"}) protected int numElements(final org.broadinstitute.variant.variantcontext.VariantContext vc, final org.broadinstitute.variant.variantcontext.Genotype g)
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not allowed in .NET:
            protected internal virtual int numElements(VariantContext vc, Genotype g)
            {
                return(FieldEncoder.numElements(vc, g.getExtendedAttribute(Field)));
            }