コード例 #1
0
        //   end

        //   to build optional data string
        /// <summary>
        /// Method ro build optiona data string
        /// </summary>
        /// <param name="sale">Sale</param>
        /// <param name="card">Credit card</param>
        /// <param name="tendCard">Tend card</param>
        public void Build_OptDataString(Sale sale, ref Credit_Card card, ref TenderCard tendCard)
        {
            if (sale.EMVVersion)
            {
                if (string.IsNullOrEmpty(card.OptDataProfileIDEMV))
                {
                    card.OptDataString = "";
                    return;
                }
                tendCard = new TenderCard {
                    OptDataProfileID = card.OptDataProfileIDEMV
                };
            }
            else
            {
                if (tendCard == null)
                {
                    card.OptDataString = "";
                    return;
                }
                if (string.IsNullOrEmpty(tendCard.OptDataProfileID))
                {
                    card.OptDataString = "";
                    return;
                }
            }

            string    strData   = "";
            Sale_Line sl        = default(Sale_Line);
            var       maxIdFuel = _cardService.GetMaxFuelId(tendCard.OptDataProfileID);

            var maxIdNonFuel = _cardService.GetMaxNonFuelId(tendCard.OptDataProfileID);

            var noFuelLines = _cardService.GetTotalOptionalData(tendCard.OptDataProfileID);

            var exemptDataCode = _cardService.GetOptionalDataCode(tendCard.OptDataProfileID);

            var strExemptDept = string.IsNullOrEmpty(exemptDataCode) ? "NOT DEFINED EXEMPTION" : exemptDataCode;

            var noNonFuelLines = _cardService.GetTotalNonFuelOptionalData(tendCard.OptDataProfileID);

            var arrFuelLines       = new short[1];
            var arrNonFuelLines    = new short[1];
            var arrExemptDeptLines = new short[1];

            foreach (Sale_Line saleLine in sale.Sale_Lines)
            {
                sl = saleLine;
                if (sl.ProductIsFuel)
                {
                    Array.Resize(ref arrFuelLines, arrFuelLines.Length - 1 + 1 + 1);
                    arrFuelLines[arrFuelLines.Length - 1] = sl.Line_Num;
                }
                else if (sl.Dept != strExemptDept)
                {
                    Array.Resize(ref arrNonFuelLines, arrNonFuelLines.Length - 1 + 1 + 1);
                    arrNonFuelLines[arrNonFuelLines.Length - 1] = sl.Line_Num;
                }
                else if (sl.Dept == strExemptDept)
                {
                    Array.Resize(ref arrExemptDeptLines, arrExemptDeptLines.Length - 1 + 1 + 1);
                    arrExemptDeptLines[arrExemptDeptLines.Length - 1] = sl.Line_Num;
                }
            }

            var   optionalDatas = _cardService.GetOptionalDatas(tendCard.OptDataProfileID);
            short fuelId        = 0;
            short nonFuelId     = 0;
            var   ubFuel        = (short)(arrFuelLines.Length - 1);
            var   ubNonFuel     = (short)(arrNonFuelLines.Length - 1);

            var maxFuel    = (short)modStringPad.MinVal(ubFuel, noFuelLines);
            var maxNonFuel = (short)modStringPad.MinVal(ubNonFuel, noNonFuelLines);

            foreach (var optionalData in optionalDatas)
            {
                var      taxCode  = optionalData.Code;
                var      strValue = "";
                decimal  total    = 0;
                var      id       = Convert.ToInt32(optionalData.ID);
                Line_Tax lt;
                switch (id)
                {
                case 20:     // Exemption Dept quantity
                    foreach (Sale_Line saleLine in sale.Sale_Lines)
                    {
                        sl = saleLine;
                        if (sl.Dept == strExemptDept)
                        {
                            total = total + (decimal)sl.Quantity;
                        }
                    }
                    strValue = total.ToString(CultureInfo.InvariantCulture);
                    break;

                case 22:     // Exemption Dept amount
                    foreach (Sale_Line saleLine in sale.Sale_Lines)
                    {
                        sl = saleLine;
                        if (sl.Dept == strExemptDept)
                        {
                            total = total + sl.Amount;
                        }
                    }
                    strValue = total.ToString(CultureInfo.InvariantCulture);
                    break;

                case 24:     //  Total Transaction Amount
                    strValue = sale.Sale_Totals.Gross.ToString(CultureInfo.InvariantCulture);
                    break;

                case 101:     //  Fuel Product Code
                    if (fuelId == 0)
                    {
                        fuelId++;
                    }
                    if (fuelId <= maxFuel)
                    {
                        strValue = _cardService.Get_ProductCode(tendCard.OptDataProfileID, sale.Sale_Lines[arrFuelLines[fuelId]].Stock_Code);
                    }
                    else
                    {
                        strValue = 0.ToString();
                    }
                    break;

                case 108:     //  Fuel Price
                    if (fuelId == 0)
                    {
                        fuelId++;
                    }
                    strValue = fuelId <= maxFuel ? sale.Sale_Lines[arrFuelLines[fuelId]].price.ToString(CultureInfo.InvariantCulture) : 0.ToString();
                    break;

                case 105:     //  Fuel Extended Amount
                    if (fuelId == 0)
                    {
                        fuelId++;
                    }
                    strValue = fuelId <= maxFuel ? sale.Sale_Lines[arrFuelLines[fuelId]].Amount.ToString(CultureInfo.InvariantCulture) : 0.ToString();
                    break;

                case 107:     //  Fuel Quantity
                    if (fuelId == 0)
                    {
                        fuelId++;
                    }
                    strValue = fuelId <= maxFuel ? sale.Sale_Lines[arrFuelLines[fuelId]].Quantity.ToString(CultureInfo.InvariantCulture) : 0.ToString();
                    break;

                case 109:     // Fuel GST/HST Amount and Fuel PST Amount (Tax Code is based on Code field in OptData table)
                case 110:
                    strValue = 0.ToString();
                    if (fuelId == 0)
                    {
                        fuelId++;
                    }
                    if (fuelId <= maxFuel)
                    {
                        foreach (Line_Tax lineTax in sale.Sale_Lines[arrFuelLines[fuelId]].Line_Taxes)
                        {
                            lt = lineTax;
                            if (lt.Tax_Name == taxCode)
                            {
                                strValue = lt.Tax_Incl_Amount.ToString(CultureInfo.InvariantCulture);
                                break;
                            }
                        }
                    }
                    else
                    {
                        strValue = 0.ToString();
                    }
                    break;

                case 209:     // Accumulated Fuel GST/HST Amount and Accumulated Fuel PST Amount (Tax Code is based on Code field in OptData table)
                case 210:
                    foreach (Sale_Line saleLine in sale.Sale_Lines)
                    {
                        sl = saleLine;
                        if (sl.ProductIsFuel)
                        {
                            foreach (Line_Tax lineTax in sl.Line_Taxes)
                            {
                                lt = lineTax;
                                if (lt.Tax_Code == taxCode)
                                {
                                    total = total + (decimal)lt.Tax_Incl_Amount;
                                }
                            }
                        }
                    }
                    strValue = total.ToString(CultureInfo.InvariantCulture);
                    break;

                case 301:     //  Non-Fuel Product Code
                    if (nonFuelId == 0)
                    {
                        nonFuelId++;
                    }
                    if (nonFuelId <= maxNonFuel)
                    {
                        strValue = _cardService.Get_ProductCode(tendCard.OptDataProfileID, sale.Sale_Lines[arrNonFuelLines[nonFuelId]].Stock_Code);
                    }
                    else
                    {
                        strValue = 0.ToString();
                    }
                    break;

                case 307:     //  Non-Fuel Quantity
                    if (nonFuelId == 0)
                    {
                        nonFuelId++;
                    }
                    if (nonFuelId <= maxNonFuel)
                    {
                        strValue = sale.Sale_Lines[arrNonFuelLines[nonFuelId]].Quantity.ToString(CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        strValue = 0.ToString();
                    }
                    break;

                case 305:     //  Non-Fuel Extended Amount
                    if (nonFuelId == 0)
                    {
                        nonFuelId++;
                    }
                    if (nonFuelId <= maxNonFuel)
                    {
                        strValue = sale.Sale_Lines[arrNonFuelLines[nonFuelId]].Amount.ToString(CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        strValue = 0.ToString();
                    }
                    break;

                case 314:     //  Non-Fuel Tax Description
                    if (nonFuelId == 0)
                    {
                        nonFuelId++;
                    }
                    if (nonFuelId <= maxNonFuel)
                    {
                        strValue = sale.Sale_Lines[arrNonFuelLines[nonFuelId]].Line_Taxes.Count > 0 ? sale.Sale_Lines[arrNonFuelLines[nonFuelId]].Line_Taxes[1].Tax_Name : 0.ToString();
                    }
                    else
                    {
                        strValue = 0.ToString();
                    }
                    break;

                case 405:     // Accumulated non-fuel extended amount
                    total = 0;
                    foreach (Sale_Line saleLine in sale.Sale_Lines)
                    {
                        sl = saleLine;
                        if (!sl.ProductIsFuel)
                        {
                            total = total + sl.Amount;
                        }
                    }
                    strValue = total.ToString(CultureInfo.InvariantCulture);
                    break;

                case 415:     // Accumulated Non-Fuel Tax Amount - includes exempted dept items
                    total = 0;
                    foreach (Sale_Line saleLine in sale.Sale_Lines)
                    {
                        sl = saleLine;
                        if (!sl.ProductIsFuel)
                        {
                            foreach (Line_Tax lineTax in sl.Line_Taxes)
                            {
                                lt    = lineTax;
                                total = total + (decimal)lt.Tax_Incl_Amount + (decimal)lt.Tax_Added_Amount;
                            }
                        }
                    }
                    strValue = total.ToString(CultureInfo.InvariantCulture);
                    break;

                case 121:     //  Non Fuel Product Code
                    if (nonFuelId == 0)
                    {
                        nonFuelId++;
                    }
                    if (nonFuelId <= maxNonFuel)
                    {
                        strValue = _cardService.Get_ProductCode(tendCard.OptDataProfileID, sale.Sale_Lines[arrNonFuelLines[nonFuelId]].Stock_Code);
                    }
                    else
                    {
                        strValue = 0.ToString();
                    }
                    break;

                case 102:     //  Fuel Description
                    if (fuelId == 0)
                    {
                        fuelId++;
                    }
                    if (fuelId <= maxFuel)
                    {
                        strValue = sl.Description;
                    }
                    else
                    {
                        strValue = 0.ToString();
                    }
                    break;

                case 103:     //  Fuel Service type
                    break;

                case 2:     // Merchant Terminal Prompt Data
                    var promptSeq = _cardService.GetPromptSeq(tendCard.OptDataProfileID);
                    if (promptSeq.HasValue)
                    {
                        strValue = card.CardPrompts[promptSeq.Value].PromptAnswer;
                    }
                    else
                    {
                        strValue = 0.ToString();
                    }
                    break;

                case 3:     // Card Prompt Code
                    promptSeq = _cardService.GetPromptSeq(tendCard.OptDataProfileID);
                    strValue  = promptSeq.HasValue ? card.CardPrompts[promptSeq.Value].PromptAnswer : 0.ToString();
                    break;

                default:
                    strValue = "";
                    break;
                }
                if (Convert.ToInt32(optionalData.ID) == maxIdFuel)
                {
                    fuelId++;
                }
                if (Convert.ToInt32(optionalData.ID) == maxIdNonFuel)
                {
                    nonFuelId++;
                }
                if (Convert.ToInt32(optionalData.ID) == 29)
                {
                    strData = Convert.ToString(strData + new string(Strings.Chr(Convert.ToInt32(string.IsNullOrEmpty(optionalData.Format) ? "0" : optionalData.Format)), optionalData.Length));
                }
                else
                {
                    strData = strData +
                              Convert.ToString(Format_Value(strValue,
                                                            (short)optionalData.Length, (short)optionalData.Decimals,
                                                            string.IsNullOrEmpty(optionalData.Alignment) ? "RIGHT" : optionalData.Alignment));
                }
            }
            card.OptDataString = strData;
            //todo:
            // modStringPad.WriteToLogFile("Optional data string is " + strData)
        }
コード例 #2
0
        /// <summary>
        /// Method to get request string
        /// </summary>
        /// <param name="cc">Credit card</param>
        /// <param name="sale">Sale</param>
        /// <param name="trnType">Transaction type</param>
        /// <param name="cardType">Card type</param>
        /// <param name="amount">Amount</param>
        /// <param name="authCode">Auth code</param>
        /// <returns>Request string</returns>
        public string GetRequestString(ref Credit_Card cc, Sale sale, string trnType, string cardType, float amount,
                                       string authCode)
        {
            string str = "";
            short  pos = 0;

            //string strOptionalData;

            switch (trnType.Trim())
            {
            case "SwipeInside":
                str = str + trnType.Trim() + "," + cardType.Trim() + ",";
                str = str + amount.ToString().Trim() + ",,,,,,,,,,,,,,,";
                break;

            case "EODTerminal":     //authcode as terminal ID - changed on 06/19/02 'Sajan
                str = str + trnType.Trim() + "," + cardType.Trim() + ",1,,,,," + authCode.Trim() + ",,,,,,,,,,,,Y,,,,,,,,,,,,,,";
                break;

            case "CloseBatchInside":
                if (Strings.UCase(Convert.ToString(_policyManager.BankSystem)) == "GLOBAL")
                {
                    if (cardType == "NoDebit")     //Added by Mina - For no trans debit
                    {
                        str = str + trnType.Trim() + "," + cardType.Trim() + ",1,,,,,,,,,,,,,,,,,Y,,,,,,,,,,,,,,";
                    }
                    else
                    {
                        str = str + trnType.Trim() + ",,1,,,,,,,,,,,,,,,,,Y,,,,,,,,,,,,,,";
                    }
                }
                else
                {
                    str = str + trnType.Trim() + ",,1,,,,,,,,,,,,,,,,,Y,,,,,,,,,,,,,,";
                }
                break;

            case "InitDebitInside":
                str = str + trnType.Trim() + "," + cardType.Trim() + ",,,,,,,,,,,,,,,,,";
                break;

            default:
                if (trnType == "VoidInside")
                {
                    str = trnType.Trim() + "," + cardType.Trim() + ",1,";
                }
                else
                {
                    str = trnType.Trim() + "," + cardType.Trim() + ",1,";
                }
                str = str + Convert.ToString(sale.Sale_Num) + ",,,";
                if (Strings.UCase(Convert.ToString(_policyManager.BankSystem)) == "GLOBAL")
                {
                    if (trnType == "VoidInside" || trnType.ToUpper() == "SAFVOIDINSIDE") //Added by Mina : UCase(TrnType) = "SAFVOIDINSIDE"
                    {
                        str = str + Convert.ToString(sale.Void_Num) + ",,";              //void refnum
                    }
                    else
                    {
                        str = str + ",,";     //void refnum
                    }
                }
                else
                {
                    //
                    if (trnType == "VoidInside")
                    {
                        str = str + Convert.ToString(sale.Void_Num) + ",,";     //void refnum
                    }
                    else
                    {
                        str = str + ",,";     //void refnum
                    }
                }
                if (_policyManager.Version == "US")                   //Behriooz Oct25-05
                {
                    str = str + amount.ToString("0.00").Trim() + ","; //    CStr(Int(Abs(Amount * 100)))) & ","
                }
                else
                {
                    str = str + (double.Parse(amount.ToString("0.00")) * 100).ToString().Trim() + ",";     //    CStr(Int(Abs(Amount * 100)))) & ","
                }
                str = str + _creditCardManager.Language(ref cc).Substring(0, 1) + ",,";
                //the following lines were added by Sajan
                if (!string.IsNullOrEmpty(cc.Track2))
                {
                    pos = (short)(cc.Track2.IndexOf("?") + 1);
                }
                var track2 = "";
                if (pos != 0)
                {
                    track2 = cc.Track2.Substring(0, pos - 1);
                }
                else
                {
                    track2 = cc.Track2 ?? "";
                }
                pos = (short)(track2.IndexOf(";") + 1);
                if (pos != 0)
                {
                    track2 = track2.Substring(pos + 1 - 1);
                }
                if (string.IsNullOrEmpty(cc.Track2))
                {
                    track2 = (string.IsNullOrEmpty(cc.Cardnumber) ? string.Empty : cc.Cardnumber.Trim()) + "=" +
                             (string.IsNullOrEmpty(cc.Expiry_Date) ? string.Empty : cc.Expiry_Date.Trim());
                }
                str = str + track2 + ",,,";
                if (!string.IsNullOrEmpty(authCode))
                {
                    if (_policyManager.EMVVersion)
                    {
                        str = str + authCode + ",,,,,";
                    }
                    else
                    {
                        //shiny end - EMVVERSION
                        str = str + authCode + ",,,,";
                    }
                }
                else
                {
                    str = str + ",,,,,Y";
                }

                if (cc.Crd_Type == "F")
                {
                    str = str + ",";
                    str = str + _creditCardManager.ProductCodes(sale.TillNumber) + ",,";
                    str = str + cc.Vechicle_Number + ",";
                    str = Convert.ToString((string.IsNullOrEmpty(cc.ID_Number) ? str + cc.Driver_Number : str + cc.ID_Number) + ",");
                    str = str + cc.Odometer_Number + ",,,";
                    str = str + cc.TerminalType + ",,";     // Terminal Type

                    string temp_Policy_Name = "USE_PINPAD";
                    str = str + Convert.ToString(_policyManager.GetPol(temp_Policy_Name, null)) + ",";

                    if (_policyManager.USE_PINPAD)
                    {
                        str = str + Convert.ToString(cc.AskDriverNo) + ",";
                        str = str + Convert.ToString(cc.AskIdentificationNo) + ",";
                        str = str + Convert.ToString(cc.AskOdometer) + ",";
                        str = str + Convert.ToString(cc.AskVechicle) + ",";
                        str = str + Convert.ToString(cc.AskProdRestrictCode) + ",";
                    }
                    else
                    {
                        str = str + "False,False,False,False,False,";
                    }
                    str = str + cc.UsageCode + ",";     // Nicolette, Jan 27 added a extra comma to match the number of commas send to STPS
                }
                else
                {
                    str = str + new string(',', 16);
                }
                // Nicolette end
                //Shiny Nov9, 2009'EMVVERSION
                if (_policyManager.EMVVersion)     //- only needed for credit
                {
                    //                    str = str & IIf(cc.ManualCardProcess, "M", "") & ","
                    str = str + Convert.ToString(cc.ManualCardProcess ? "M85" : "") + ",";     //  - added the POs trans timeout 85  to passing to TPS with Farhad's instruction
                }
                //shiny end
                //   to assign optional data profile for any debit or credit card selected
                // for EMV version, TPS will drop th unnecessary optional data string sent by POS
                // debit cards are included because the cashier might select debit but the customer inserts a credit card
                if (cc.Crd_Type == "F" || cc.Crd_Type == "C" || cc.Crd_Type == "D")     //   added Or cc.Crd_Type = "C" for Crevier Visa
                {
                    TenderCard tenderCard = _cardService.LoadTenderCard(cc.CardCode);
                    Build_OptDataString(sale, ref cc, ref tenderCard);     //   optional data for fleet cards
                    str = str + "," + cc.OptDataString;
                }
                else
                {
                    str = str + ",";
                }
                break;
            }
            var returnValue = str;

            return(returnValue);
        }