public InsertEgenciaCardResponse(string pan)
 {
     // Initialisation
     this.StartDate = DateTime.Now;
     // On garde en mémoire le Pan
     // que le client souhaite envoyer
     this.InputPan = CreditCardVerifier.TruncatePan(pan);
 }
Ejemplo n.º 2
0
 public void SetValues(UserInfo useri, string pan, string cardType, string status, string information)
 {
     SetUser(useri);
     this.TruncatedPAN = CreditCardVerifier.TruncatePan(pan);
     this.CardType     = cardType;
     this.Status       = status;
     this.Information  = information;
 }
Ejemplo n.º 3
0
        public void IfCreditCardNumberIsEmpty_ReturnException()
        {
            var card     = new CreditCardVerifier();
            var input    = card.Verify("");
            var expected = "0";

            Assert.AreEqual(expected, input);
        }
 public void SetValues(UserInfo useri, string token, string pan, string cardType, string status, string code, string message)
 {
     SetUser(useri);
     this.TruncatedPAN       = CreditCardVerifier.TruncatePan(pan);
     this.Status             = status;
     this.CardType           = cardType;
     this.InformationCode    = code;
     this.InformationMessage = message;
     this.Token = token;
 }
Ejemplo n.º 5
0
        /// <summary>
        /// On va répondre au client
        /// mais avant, nous devons tracer cette demande
        /// en informant Syslog
        /// </summary>
        private void LogResponse()
        {
            string providedData = Util.Nvl(this.InputToken, string.Empty);

            if (!IsError())
            {
                // We need to mask displayed value in the log
                providedData = CreditCardVerifier.TruncatePan(providedData);
            }
            Services.WriteOperationStatusToLog(GetUser(),
                                               String.Format(" and provided Pan={0}", providedData),
                                               String.Format(".The following values were returned to user : {0}", GetValueMessage()),
                                               String.Format(".Unfortunately, the process failed for the following reason: {0}", GetExceptionMessage()),
                                               IsError(),
                                               GetDuration());
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Affectation des valeurs
        /// </summary>
        /// <param name="BOtoken">Token FrontOffice</param>
        /// <param name="pan">Numéro de carte</param>
        /// <param name="expirationDate">Date d'expiration</param>
        /// <param name="ri">Information validation numéro de carte</param>
        public void SetValues(string token, string pan, string csc, CardInfos ri)
        {
            this.Token = token;
            this.PAN   = pan;
            this.CSC   = csc;

            if (ri != null)
            {
                this.TruncatedPAN      = ri.GetTruncatedPAN();
                this.CardType          = ri.GetCardType();
                this.ShortCardType     = ri.GetShortCardType();
                this.MII               = ri.GetMII();
                this.MIIIssuerCategory = ri.GetMIIIssuerCategory();
            }
            else
            {
                this.TruncatedPAN = CreditCardVerifier.TruncatePan(pan);
            }
        }
Ejemplo n.º 7
0
        public InsertCardResponse(string value, bool isAToken)
        {
            // Initialisation
            this.StartDate = DateTime.Now;
            // On garde en mémoire le Pan (ou le token)
            // que le client souhaite envoyer
            this.ArgIsAToken = isAToken;

            if (IsAToken())
            {
                // On a probablement un token
                this.InputValue = value;
            }
            else
            {
                // On a une carte
                this.InputValue = CreditCardVerifier.TruncatePan(value);
            }
        }
Ejemplo n.º 8
0
 /// <summary>
 /// Affectation des valeurs
 /// </summary>
 /// <param name="BOtoken">Token FrontOffice</param>
 /// <param name="pan">Numéro de carte</param>
 /// <param name="expirationDate">Date d'expiration</param>
 /// <param name="ri">Information validation numéro de carte</param>
 public void SetValues(long BOtoken, string pan, DateTime expirationDate, CardInfos ri)
 {
     this.BOToken        = BOtoken;
     this.PAN            = pan;
     this.TruncatedPAN   = CreditCardVerifier.TruncatePan(pan);
     this.ExpirationDate = expirationDate;
     SetShortExpirationDate(Util.GetShortExpirationDate(GetExpirationDate()));
     if (ri != null)
     {
         this.Cvc               = ri.GetCvc();
         this.CardType          = ri.GetCardType();
         this.ShortCardType     = ri.GetShortCardType();
         this.MII               = ri.GetMII();
         this.MIIIssuerCategory = ri.GetMIIIssuerCategory();
         //--> EGE-62034 : Revamp - CCE - Change Financial flow update
         //this.NavisionCardLabel = ri.GetNavisionCardLabel();
         this.NavisionCardLabel = ri.GetNavisionFinancialFlow();
         //<-- EGE-62034 : Revamp - CCE - Change Financial flow update
         this.NavisionCardType         = ri.GetNavisionCardType();
         this.IsNavisionPaymentAirplus = ri.GetNavisionPaymentAirPlus();
         this.IsNavisionPaymentBTA     = ri.GetNavisionPaymentBTA();
         this.IsNavisionLodgedCard     = ri.GetNavisionLodgedCard();
     }
 }
        /// <summary>
        /// Retour de la réponse structurée en XML
        /// </summary>
        /// <returns>Réponse (XML)</returns>
        public string GetResponse()
        {
            // On trace la demande
            LogResponse();
            // On va maintenant contruire la réponse
            string strData = Const.XmlHeader
                             + Xml_Response_Open_Tag
                             + Xml_Response_Duration_Open_Tag
                             + GetDuration()
                             + Xml_Response_Duration_Close_Tag;

            if (!IsError())
            {
                // Il n'y aucune erreur
                // On va renvoyer les données
                // et de ce fait ignorer les tag d'exception
                strData +=
                    Xml_Response_Value_Open_Tag
                    + Xml_POS_Open_Tag
                    + GetArgPos()
                    + Xml_POS_Close_Tag
                    + Xml_Customer_Open_Tag
                    + GetArgComcode()
                    + Xml_Customer_Close_Tag
                    + Xml_CostCenter_Open_Tag
                    + Util.Nvl(GetArgCostCenter(), string.Empty)
                    + Xml_CostCenter_Close_Tag
                    + Xml_Percode_Open_Tag
                    + GetArgPercode()
                    + Xml_Percode_Close_Tag
                    + Xml_Corporation_Open_Tag
                    + GetArgCorporation()
                    + Xml_Corporation_Close_Tag;


                if (!String.IsNullOrEmpty(GetPaymentType()) && GetPaymentType().Equals(Const.PaymentTypeStringCASH_FR))
                {
                    // Payment type CASH
                    strData +=
                        Xml_Service_Open_Tag + GetArgService() + Xml_Service_Close_Tag
                        + Xml_PaymentType_Open_Tag + GetPaymentType() + Xml_PaymentType_Close_Tag
                        + Xml_Origin_Open_Tag + string.Empty + Xml_Origin_Close_Tag;
                }
                else if (this.extendedPanInfos != null)
                {
                    // Payment type CREDIT CARD
                    // with BO Token
                    strData +=
                        Xml_Service_Open_Tag + GetArgService() + Xml_Service_Close_Tag
                        + Xml_PaymentType_Open_Tag + Const.PaymentTypeCreditCardShort + Xml_PaymentType_Close_Tag
                        + Xml_Origin_Open_Tag + string.Empty + Xml_Origin_Close_Tag;

                    strData += Xml_Card_Open_Tag
                               + Xml_CardType_Open_Tag + this.extendedPanInfos.GetCardType() + Xml_CardType_Close_Tag
                               + Xml_ShortCardType_Open_Tag + this.extendedPanInfos.GetShortCardType() + Xml_ShortCardType_Close_Tag
                               + Xml_CardToken_Open_Tag + GetArgToken() + Xml_CardToken_Close_Tag
                               + Xml_TruncatedCardNumber_Open_Tag + this.extendedPanInfos.GetTruncatedPan() + Xml_TruncatedCardNumber_Close_Tag
                               + Xml_CardNumber_Open_Tag + this.extendedPanInfos.GetPan() + Xml_CardNumber_Close_Tag
                               + Xml_FormOfPayment_Open_Tag +
                               String.Format("FP CC{0}{1}/{2}", this.extendedPanInfos.GetShortCardType(), this.extendedPanInfos.GetPan(), this.extendedPanInfos.GetShortExpirationDate().Replace("/", string.Empty))
                               + Xml_FormOfPayment_Close_Tag
                               + Xml_ExpirationDate_Open_Tag + this.extendedPanInfos.GetExpirationDate() + Xml_ExpirationDate_Close_Tag
                               + Xml_ShortExpirationDate_Open_Tag + this.extendedPanInfos.GetShortExpirationDate() + Xml_ShortExpirationDate_Close_Tag
                               + Xml_LodgedCard_Open_Tag + "0" + Xml_LodgedCard_Close_Tag
                               + Xml_MII_Open_Tag + this.extendedPanInfos.GetMII() + Xml_MII_Close_Tag
                               + Xml_MIIIssuerCategory_Open_Tag + this.extendedPanInfos.GetMIIIssuerCategory() + Xml_MIIIssuerCategory_Close_Tag
                               + Xml_MerchantFlow_Open_Tag + this.extendedPanInfos.GetMerchantFlow() + Xml_MerchantFlow_Close_Tag
                               + Xml_EnhancedFlow_Open_Tag + this.extendedPanInfos.GetEnhancedFlow() + Xml_EnhancedFlow_Close_Tag

                               + Xml_Card_Close_Tag;
                }
                else if (this.fOPanInfos != null)
                {
                    string truncatedPAN = CreditCardVerifier.TruncatePan(this.fOPanInfos.GetPAN());

                    // Payment type CREDIT CARD
                    // with FO Token
                    strData +=
                        Xml_Service_Open_Tag + GetArgService() + Xml_Service_Close_Tag
                        + Xml_PaymentType_Open_Tag + Const.PaymentTypeCreditCardShort + Xml_PaymentType_Close_Tag
                        + Xml_Origin_Open_Tag + Xml_Origin_Close_Tag;

                    strData += Xml_Card_Open_Tag
                               + Xml_CardType_Open_Tag + this.fOPanInfos.GetCardType() + Xml_CardType_Close_Tag
                               + Xml_ShortCardType_Open_Tag + this.fOPanInfos.GetShortCardType() + Xml_ShortCardType_Close_Tag
                               + Xml_CardToken_Open_Tag + GetArgToken() + Xml_CardToken_Close_Tag
                               + Xml_TruncatedCardNumber_Open_Tag + truncatedPAN + Xml_TruncatedCardNumber_Close_Tag
                               + Xml_CardNumber_Open_Tag + this.fOPanInfos.GetPAN() + Xml_CardNumber_Close_Tag
                               + Xml_FormOfPayment_Open_Tag +
                               String.Format("FP CC{0}{1}/{2}", this.fOPanInfos.GetShortCardType(), this.fOPanInfos.GetPAN(), this.fOPanInfos.GetShortExpirationDate().Replace("/", string.Empty))
                               + Xml_FormOfPayment_Close_Tag
                               + Xml_ExpirationDate_Open_Tag + this.fOPanInfos.GetExpirationDate() + Xml_ExpirationDate_Close_Tag
                               + Xml_ShortExpirationDate_Open_Tag + this.fOPanInfos.GetShortExpirationDate() + Xml_ShortExpirationDate_Close_Tag
                               + Xml_LodgedCard_Open_Tag + "0" + Xml_LodgedCard_Close_Tag
                               + Xml_MII_Open_Tag + this.fOPanInfos.GetMII() + Xml_MII_Close_Tag
                               + Xml_MIIIssuerCategory_Open_Tag + this.fOPanInfos.GetMIIIssuerCategory() + Xml_MIIIssuerCategory_Close_Tag
                               + Xml_MerchantFlow_Open_Tag + string.Empty + Xml_MerchantFlow_Close_Tag
                               + Xml_EnhancedFlow_Open_Tag + string.Empty + Xml_EnhancedFlow_Close_Tag

                               + Xml_Card_Close_Tag;
                }
                else
                {
                    // hierarchival payment means
                    RequestedService rs = this.travelerPaymentMeanResponse.GetNav_PaymentMeans().RequestedService[0];

                    strData += Xml_Service_Open_Tag + rs.Service[0] + Xml_Service_Close_Tag
                               + Xml_PaymentType_Open_Tag + rs.PaymentType + Xml_PaymentType_Close_Tag
                               + Xml_Origin_Open_Tag + rs.Origin + Xml_Origin_Close_Tag;

                    if (!String.IsNullOrEmpty(rs.PaymentType) && rs.PaymentType.Equals(Const.PaymentTypeCreditCardShort) && !String.IsNullOrEmpty(rs.Card[0].CardToken))
                    {
                        // We have a credit card
                        // prepare expiration date
                        DateTime expDate             = Util.GetLastDayOfThisMonth(Util.ConvertStringToDate(rs.Card[0].ExpirationDate, Const.DateFormat_MMyyyy));
                        string   shortExpirationDate = Util.ConvertDateToString(expDate, Const.DateFormat_MMyy);
                        // Set card type
                        string cardType      = rs.Card[0].CardType[0];
                        string shortCardType = CreditCardVerifier.GetShortCardTypeFromNavisionCardType(rs.Card[0].CardType[0]);
                        // Return the MII (first digit)
                        int mii = String.IsNullOrEmpty(rs.Card[0].TruncatedPAN) ? -1 : Util.ConvertStringToInt(rs.Card[0].TruncatedPAN.Substring(0, 1));

                        strData += Xml_Card_Open_Tag
                                   + Xml_CardType_Open_Tag + cardType + Xml_CardType_Close_Tag
                                   + Xml_ShortCardType_Open_Tag + CreditCardVerifier.GetShortCardTypeFromNavisionCardType(cardType) + Xml_ShortCardType_Close_Tag
                                   + Xml_CardToken_Open_Tag + rs.Card[0].CardToken + Xml_CardToken_Close_Tag
                                   + Xml_TruncatedCardNumber_Open_Tag + rs.Card[0].TruncatedPAN + Xml_TruncatedCardNumber_Close_Tag;

                        string pan;
                        try
                        {
                            // Untokenize
                            pan      = Services.GetPanFromBOToken(GetUser(), Util.ConvertStringToToken(rs.Card[0].CardToken));
                            strData += Xml_CardNumber_Open_Tag + pan + Xml_CardNumber_Close_Tag;
                        }catch (Exception e)
                        {
                            SetException(GetUser(), e.Message);
                            return(Const.XmlHeader
                                   + Xml_Response_Open_Tag
                                   + Xml_Response_Duration_Open_Tag
                                   + GetDuration()
                                   + Xml_Response_Duration_Close_Tag
                                   + BuildException()
                                   + Xml_Response_Close_Tag);
                        }

                        strData += Xml_FormOfPayment_Open_Tag +
                                   String.Format("FP CC{0}{1}/{2}", shortCardType, pan, shortExpirationDate.Replace("/", string.Empty))
                                   + Xml_FormOfPayment_Close_Tag
                                   + Xml_ExpirationDate_Open_Tag + Util.ConvertExpirationDateToString(expDate) + Xml_ExpirationDate_Close_Tag
                                   + Xml_ShortExpirationDate_Open_Tag + shortExpirationDate + Xml_ShortExpirationDate_Close_Tag
                                   + Xml_LodgedCard_Open_Tag + (rs.Card[0].LodgedCard[0].Equals("true") ? "1" : "0") + Xml_LodgedCard_Close_Tag
                                   + Xml_MII_Open_Tag + mii.ToString() + Xml_MII_Close_Tag
                                   + Xml_MIIIssuerCategory_Open_Tag + CreditCardVerifier.GetMIIIssuerCategory(mii) + Xml_MIIIssuerCategory_Close_Tag
                                   + Xml_MerchantFlow_Open_Tag + rs.Card[0].MerchandFlow + Xml_MerchantFlow_Close_Tag
                                   + Xml_EnhancedFlow_Open_Tag + rs.Card[0].EnhanceFlow + Xml_EnhancedFlow_Close_Tag

                                   + Xml_Card_Close_Tag;
                    }
                }

                strData += Xml_Response_Value_Close_Tag;
            }
            else
            {
                // On a une exception
                // Il faut renvoyer les tags d'exception et
                // de ce fait ne pas ajouter les tags sur les données
                strData += BuildException();
            }
            strData += Xml_Response_Close_Tag;

            return(strData);
        }
Ejemplo n.º 10
0
 /// <summary>
 /// On va répondre au client
 /// mais avant, nous devons tracer cette demande
 /// en informant Syslog
 /// </summary>
 private void LogResponse()
 {
     Services.WriteOperationStatusToLog(GetUser(),
                                        String.Format(" and provided {0}", IsAPAN()?CreditCardVerifier.TruncatePan(GetInputValue()):GetInputValue()),
                                        String.Format(".The following values were returned to user : {0}", GetValueMessage()),
                                        String.Format(".Unfortunately, the process failed for the following reason: {0}", GetExceptionMessage()),
                                        IsError(),
                                        GetDuration());
 }
Ejemplo n.º 11
0
 /// <summary>
 /// Affectation du numéro de carte
 /// </summary>
 /// <param name="cardNumber">Numéro de carte</param>
 public void SetCardNumber(string cardNumber)
 {
     this.CardNumber = cardNumber;
     SetTruncatedPAN(CreditCardVerifier.TruncatePan(cardNumber));
 }
Ejemplo n.º 12
0
        /// <summary>
        /// Log VCard request in the table
        /// </summary>
        /// <param name="reader">XML request</param>
        /// <param name="travelerOrder">Traveler order</param>
        /// <param name="percode">Traveler code</param>
        /// <param name="travelerName">Traveler Name</param>
        /// <param name="cc1">Cost center 1</param>
        /// <param name="cc2">Cost center 2</param>
        /// <param name="cc3">Cost center 3</param>
        /// <param name="channel">channel</param>
        /// <param name="response">CompleteIssueVNettVANResponse</param>
        public void InsertNewRequest(ENettRequestVAN reader, int travelerOrder, string percode, string travelerName
                                     , string cc1, string cc2, string cc3, string channel, CompleteIssueVNettVANResponse response)
        {
            string request = String.Format("INSERT INTO VCardBooking ("
                                           + "PaymentId ,TravelerOrder, PosCode, Comcode, BookerPercode, TravelerPercode, TravelerName, AdultCount, AgentLogin, "
                                           + "BookingDate, FundedAmount, Currency, CardActivationDate, CardExpirationDate, IsMultiUseCard, "
                                           + "TruncatedVAN, Product, Channel, ECN, MerchantCategory, MdCode, RefDossierType, RefDossierCode, OriginDate, OriginAddress, "
                                           + "OriginLocationCode, OriginCountryCode, EndDate, EndAddress, EndLocationCode, EndCountryCode, SupplierName, "
                                           + "CC1, CC2, CC3, RequestDate, TripName, FreeText1, FreeText2, FreeText3, HotelId, "
                                           //>>EGE-60949
                                           //+ "ErrorCode, ErrorDesc, CreationDate, CreatedBy, ModificationDate, ModifiedBy, SupportLogId, VNettTransactionID) "
                                           + "ErrorCode, ErrorDesc, CreationDate, CreatedBy, ModificationDate, ModifiedBy, SupportLogId, VNettTransactionID, PosCurrency, VanCountryCode) "
                                           //<< EGE-60949
                                           + "VALUES ("
                                           + "@PaymentId ,@TravelerOrder, @PosCode, @Comcode, @BookerPercode, @TravelerPercode, @TravelerName, @AdultCount, @AgentLogin, "
                                           + "@BookingDate, @FundedAmount, @Currency, @CardActivationDate, @CardExpirationDate, @IsMultiUseCard, "
                                           + "@TruncatedVAN, @Product, @Channel, @ECN, @MerchantCategory, @MdCode, @RefDossierType, @RefDossierCode, @OriginDate, @OriginAddress, "
                                           + "@OriginLocationCode, @OriginCountryCode, @EndDate, @EndAddress, @EndLocationCode, @EndCountryCode, @SupplierName, "
                                           + "@CC1, @CC2, @CC3, @RequestDate, @TripName, @FreeText1, @FreeText2, @FreeText3, @HotelId, "
                                           //>>EGE-60949
                                           //+ "@ErrorCode, @ErrorDesc, @CreationDate, @CreatedBy, @ModificationDate, @ModifiedBy, @SupportLogId, @VNettTransactionID)");
                                           + "@ErrorCode, @ErrorDesc, @CreationDate, @CreatedBy, @ModificationDate, @ModifiedBy, @SupportLogId, @VNettTransactionID, @PosCurrency, @VanCountryCode)");
            //<< EGE-60949
            // objet command
            SqlCommand command = new SqlCommand(request, GetConnection());

            try
            {
                // Send parameters
                command.Parameters.Add("@PaymentId", SqlDbType.VarChar, 16);
                command.Parameters["@PaymentId"].Value = Util.Nvl(response.GetReferenceId(), DBNull.Value);

                command.Parameters.Add("@SupportLogId", SqlDbType.VarChar, 256);
                command.Parameters["@SupportLogId"].Value = Util.Nvl(response.GetIssuedVNettResponse().SupportLogId, DBNull.Value);

                command.Parameters.Add("@VNettTransactionID", SqlDbType.VarChar, 100);
                command.Parameters["@VNettTransactionID"].Value = Util.Nvl(response.GetIssuedVNettResponse().VNettTransactionID, DBNull.Value);


                //<< EGE-60949
                command.Parameters.Add("@PosCode", SqlDbType.VarChar, 2);
                command.Parameters["@PosCode"].Value = Util.Nvl(reader.PosCountryCode, DBNull.Value);
                command.Parameters.Add("@PosCurrency", SqlDbType.VarChar, 3);
                command.Parameters["@PosCurrency"].Value = Util.Nvl(reader.PosCurrency, DBNull.Value);
                command.Parameters.Add("@VanCountryCode ", SqlDbType.VarChar, 2);
                command.Parameters["@VanCountryCode "].Value = Util.Nvl(reader.Market, DBNull.Value);
                //<< EGE-60949


                command.Parameters.Add("@TravelerOrder", SqlDbType.Int);
                command.Parameters["@TravelerOrder"].Value = travelerOrder;

                //<< EGE-60949
                //command.Parameters.Add("@PosCode", SqlDbType.VarChar, 2);
                //command.Parameters["@PosCode"].Value = Util.Nvl(reader.Market, DBNull.Value);
                //<< EGE-60949

                command.Parameters.Add("@Comcode", SqlDbType.Int);
                command.Parameters["@Comcode"].Value = Util.TryConvertStringToInt(reader.ComCode, DBNull.Value);

                command.Parameters.Add("@BookerPercode", SqlDbType.BigInt);
                command.Parameters["@BookerPercode"].Value = Util.TryConvertStringToLong(reader.BookerPerCode, DBNull.Value);

                command.Parameters.Add("@TravelerPercode", SqlDbType.BigInt);
                command.Parameters["@TravelerPercode"].Value = Util.TryConvertStringToLong(percode, DBNull.Value);

                command.Parameters.Add("@TravelerName", SqlDbType.VarChar, 512);
                command.Parameters["@TravelerName"].Value = Util.Nvl(travelerName, DBNull.Value);

                command.Parameters.Add("@AdultCount", SqlDbType.Int);
                command.Parameters["@AdultCount"].Value = Util.TryConvertStringToInt(reader.AdultsCount, DBNull.Value);

                command.Parameters.Add("@AgentLogin", SqlDbType.VarChar, 100);
                command.Parameters["@AgentLogin"].Value = Util.Nvl(reader.UserName, DBNull.Value);

                command.Parameters.Add("@BookingDate", SqlDbType.DateTime);
                command.Parameters["@BookingDate"].Value = Util.ConvertStringToDate(reader.BookingDate, Const.ExpirationDateFormat);

                command.Parameters.Add("@FundedAmount", SqlDbType.Money);
                command.Parameters["@FundedAmount"].Value = response.GetIssuedVNettResponse().IsSuccessful ?response.GetIssuedVNettResponse().FundedAmount:0;

                command.Parameters.Add("@Currency", SqlDbType.VarChar, 3);
                command.Parameters["@Currency"].Value = Util.Nvl(reader.Currency, DBNull.Value);

                command.Parameters.Add("@CardActivationDate", SqlDbType.DateTime);
                command.Parameters["@CardActivationDate"].Value = Util.ConvertStringToDate(reader.ActivationDate, Const.ExpirationDateFormat);

                command.Parameters.Add("@CardExpirationDate", SqlDbType.DateTime);
                command.Parameters["@CardExpirationDate"].Value = Util.ConvertStringToDate(reader.ExpiryDate, Const.ExpirationDateFormat);

                command.Parameters.Add("@IsMultiUseCard", SqlDbType.Bit);
                command.Parameters["@IsMultiUseCard"].Value = Util.ConvertStringToBool(reader.IsMultiUse) ? 1 : 0;

                command.Parameters.Add("@TruncatedVAN", SqlDbType.VarChar, 16);
                command.Parameters["@TruncatedVAN"].Value = response.GetIssuedVNettResponse().IsSuccessful ? CreditCardVerifier.TruncatePan(response.GetIssuedVNettResponse().VirtualAccountNumber) : string.Empty;

                command.Parameters.Add("@Product", SqlDbType.VarChar, 30);
                command.Parameters["@Product"].Value = Util.Nvl(reader.Product, DBNull.Value);

                command.Parameters.Add("@Channel", SqlDbType.VarChar, 10);
                command.Parameters["@Channel"].Value = Util.Nvl(channel, DBNull.Value);

                command.Parameters.Add("@ECN", SqlDbType.Int);
                command.Parameters["@ECN"].Value = Util.TryConvertStringToInt(reader.ECN, DBNull.Value);

                command.Parameters.Add("@MerchantCategory", SqlDbType.VarChar, 30);
                command.Parameters["@MerchantCategory"].Value = Util.Nvl(reader.MerchantCategory, DBNull.Value);

                command.Parameters.Add("@MdCode", SqlDbType.Int);
                command.Parameters["@MdCode"].Value = Util.TryConvertStringToInt(reader.MdCode, DBNull.Value);

                command.Parameters.Add("@RefDossierType", SqlDbType.VarChar, 10);
                command.Parameters["@RefDossierType"].Value = Util.Nvl(reader.RefDossierType, DBNull.Value);

                command.Parameters.Add("@RefDossierCode", SqlDbType.Int);
                command.Parameters["@RefDossierCode"].Value = Util.TryConvertStringToInt(reader.RefDossierCode, DBNull.Value);

                // Origin date is not available in verion 1 of the XML
                command.Parameters.Add("@OriginDate", SqlDbType.DateTime);
                if (String.IsNullOrEmpty(reader.OriginDate))
                {
                    command.Parameters["@OriginDate"].Value = DBNull.Value;
                }
                else
                {
                    command.Parameters["@OriginDate"].Value = Util.ConvertStringToDate(reader.OriginDate, Const.ExpirationDateFormat);
                }

                command.Parameters.Add("@OriginAddress", SqlDbType.VarChar, 2000);
                command.Parameters["@OriginAddress"].Value = Util.Nvl(reader.OriginLocationName, DBNull.Value);

                command.Parameters.Add("@OriginLocationCode", SqlDbType.VarChar, 30);
                command.Parameters["@OriginLocationCode"].Value = Util.Nvl(reader.OriginLocationCode, DBNull.Value);

                command.Parameters.Add("@OriginCountryCode", SqlDbType.VarChar, 3);
                command.Parameters["@OriginCountryCode"].Value = Util.Nvl(reader.OriginCountryCode, DBNull.Value);

                // Origin date is not available in verion 1 of the XML
                command.Parameters.Add("@EndDate", SqlDbType.DateTime);
                if (String.IsNullOrEmpty(reader.EndDate))
                {
                    command.Parameters["@EndDate"].Value = DBNull.Value;
                }
                else
                {
                    command.Parameters["@EndDate"].Value = Util.ConvertStringToDate(reader.EndDate, Const.ExpirationDateFormat);
                }

                command.Parameters.Add("@EndAddress", SqlDbType.VarChar, 2000);
                command.Parameters["@EndAddress"].Value = Util.Nvl(reader.EndLocationName, DBNull.Value);

                command.Parameters.Add("@EndLocationCode", SqlDbType.VarChar, 30);
                command.Parameters["@EndLocationCode"].Value = Util.Nvl(reader.EndLocationCode, DBNull.Value);

                command.Parameters.Add("@EndCountryCode", SqlDbType.VarChar, 3);
                command.Parameters["@EndCountryCode"].Value = Util.Nvl(reader.EndCountryCode, DBNull.Value);

                command.Parameters.Add("@SupplierName", SqlDbType.VarChar, 512);
                command.Parameters["@SupplierName"].Value = Util.Nvl(reader.SupplierName, DBNull.Value);

                command.Parameters.Add("@CC1", SqlDbType.VarChar, 100);
                command.Parameters["@CC1"].Value = Util.Nvl(cc1, DBNull.Value);

                command.Parameters.Add("@CC2", SqlDbType.VarChar, 100);
                command.Parameters["@CC2"].Value = Util.Nvl(cc2, DBNull.Value);

                command.Parameters.Add("@CC3", SqlDbType.VarChar, 100);
                command.Parameters["@CC3"].Value = Util.Nvl(cc3, DBNull.Value);

                command.Parameters.Add("@RequestDate", SqlDbType.DateTime);
                command.Parameters["@RequestDate"].Value = DateTime.Now;

                command.Parameters.Add("@TripName", SqlDbType.VarChar, 256);
                command.Parameters["@TripName"].Value = Util.Nvl(reader.TripName, DBNull.Value);

                command.Parameters.Add("@FreeText1", SqlDbType.VarChar, 1000);
                command.Parameters["@FreeText1"].Value = Util.Nvl(reader.FreeText1, DBNull.Value);
                command.Parameters.Add("@FreeText2", SqlDbType.VarChar, 1000);
                command.Parameters["@FreeText2"].Value = Util.Nvl(reader.FreeText2, DBNull.Value);
                command.Parameters.Add("@FreeText3", SqlDbType.VarChar, 1000);
                command.Parameters["@FreeText3"].Value = Util.Nvl(reader.FreeText3, DBNull.Value);

                command.Parameters.Add("@HotelId", SqlDbType.BigInt);
                command.Parameters["@HotelId"].Value = Util.TryConvertStringToLong(reader.HotelID, 0L);


                command.Parameters.Add("@ErrorCode", SqlDbType.VarChar, 50);
                command.Parameters["@ErrorCode"].Value = response.GetIssuedVNettResponse().IsSuccessful?0:response.GetIssuedVNettResponse().ErrorCode;
                command.Parameters.Add("@ErrorDesc", SqlDbType.VarChar, 256);
                command.Parameters["@ErrorDesc"].Value = response.GetIssuedVNettResponse().IsSuccessful ? string.Empty : response.GetIssuedVNettResponse().ErrorDescription;
                // Technical infos
                command.Parameters.Add("@CreationDate", SqlDbType.DateTime);
                command.Parameters["@CreationDate"].Value = DateTime.Now;
                command.Parameters.Add("@CreatedBy", SqlDbType.VarChar, 256);
                command.Parameters["@CreatedBy"].Value = Util.Nvl(reader.AgentLogIn, DBNull.Value);
                command.Parameters.Add("@ModificationDate", SqlDbType.DateTime);
                command.Parameters["@ModificationDate"].Value = DateTime.Now;
                command.Parameters.Add("@ModifiedBy", SqlDbType.VarChar, 256);
                command.Parameters["@ModifiedBy"].Value = Util.Nvl(reader.AgentLogIn, DBNull.Value);


                // Execute ...
                command.ExecuteNonQuery();
            }
            catch (Exception e)
            {
                // Something wen wrong
                throw new Exception(GetMessages().GetString("VCardLogConnection.Save.Error", response.GetReferenceId(), e.Message, true));
            }
            finally
            {
                DisposeCommand(command);
            }
        }
        /// <summary>
        /// Retour de la réponse structurée en XML
        /// </summary>
        /// <returns>Réponse (XML)</returns>
        public string GetResponse()
        {
            // On trace la demande
            LogResponse();
            // On va maintenant contruire la réponse
            string strData = Const.XmlHeader
                             + Xml_Response_Open_Tag
                             + Xml_Response_Duration_Open_Tag
                             + GetDuration()
                             + Xml_Response_Duration_Close_Tag;

            if (!IsError())
            {
                // Il n'y aucune erreur
                // On va renvoyer les données
                // et de ce fait ignorer les tag d'exception
                strData +=
                    Xml_Response_Value_Open_Tag
                    + Xml_POS_Open_Tag
                    + GetArgPos()
                    + Xml_POS_Close_Tag
                    + Xml_Customer_Open_Tag
                    + GetArgComcode()
                    + Xml_Customer_Close_Tag
                    + Xml_CostCenter_Open_Tag
                    + Util.Nvl(GetArgCostCenter(), string.Empty)
                    + Xml_CostCenter_Close_Tag
                    + Xml_Percode_Open_Tag
                    + GetArgPercode()
                    + Xml_Percode_Close_Tag
                    + Xml_Services_Open_Tag;

                foreach (RequestedService rs in this.pm.RequestedService)
                {
                    strData += "<RequestedService RequestedValue=\"" + Util.Nvl(rs.RequestedValue, Const.ServiceALL) + "\">"
                               + Xml_PaymentType_Open_Tag + rs.PaymentType + Xml_PaymentType_Close_Tag
                               + Xml_Origin_Open_Tag + rs.Origin + Xml_Origin_Close_Tag
                               + Xml_Service_Open_Tag + rs.Service[0] + Xml_Service_Close_Tag;

                    if (!String.IsNullOrEmpty(rs.PaymentType) && rs.PaymentType.Equals(Const.PaymentTypeCreditCardShort) && !String.IsNullOrEmpty(rs.Card[0].CardToken))
                    {
                        // We have a credit card
                        // prepare expiration date
                        DateTime expDate             = Util.GetLastDayOfThisMonth(Util.ConvertStringToDate(rs.Card[0].ExpirationDate, Const.DateFormat_MMyyyy));
                        string   shortExpirationDate = Util.ConvertDateToString(expDate, Const.DateFormat_MMyy);
                        // Set card type
                        string cardType      = rs.Card[0].CardType[0];
                        string shortCardType = CreditCardVerifier.GetShortCardTypeFromNavisionCardType(rs.Card[0].CardType[0]);
                        // Return the MII (first digit)
                        int mii = String.IsNullOrEmpty(rs.Card[0].TruncatedPAN) ? -1 : Util.ConvertStringToInt(rs.Card[0].TruncatedPAN.Substring(0, 1));

                        strData += Xml_Card_Open_Tag
                                   + Xml_CardType_Open_Tag + cardType + Xml_CardType_Close_Tag
                                   + Xml_ShortCardType_Open_Tag + CreditCardVerifier.GetShortCardTypeFromNavisionCardType(cardType) + Xml_ShortCardType_Close_Tag
                                   + Xml_CardToken_Open_Tag + rs.Card[0].CardToken + Xml_CardToken_Close_Tag
                                   + Xml_TruncatedCardNumber_Open_Tag + rs.Card[0].TruncatedPAN + Xml_TruncatedCardNumber_Close_Tag
                                   + Xml_FormOfPayment_Open_Tag +
                                   String.Format("FP CC{0}{1}/{2}", shortCardType, rs.Card[0].TruncatedPAN, shortExpirationDate.Replace("/", string.Empty))
                                   + Xml_FormOfPayment_Close_Tag
                                   + Xml_ExpirationDate_Open_Tag + Util.ConvertExpirationDateToString(expDate) + Xml_ExpirationDate_Close_Tag
                                   + Xml_ShortExpirationDate_Open_Tag + shortExpirationDate + Xml_ShortExpirationDate_Close_Tag
                                   + Xml_LodgedCard_Open_Tag + (rs.Card[0].LodgedCard[0].Equals("true") ? "1" : "0") + Xml_LodgedCard_Close_Tag
                                   + Xml_MII_Open_Tag + mii.ToString() + Xml_MII_Close_Tag
                                   + Xml_MIIIssuerCategory_Open_Tag + CreditCardVerifier.GetMIIIssuerCategory(mii) + Xml_MIIIssuerCategory_Close_Tag
                                   //+ Xml_MerchantFlow_Open_Tag + rs.Card[0].MerchandFlow + Xml_MerchantFlow_Close_Tag
                                   //+ Xml_EnhancedFlow_Open_Tag + rs.Card[0].EnhanceFlow + Xml_EnhancedFlow_Close_Tag

                                   + Xml_Card_Close_Tag;
                    }

                    strData += Xml_Requested_Service_Close_Tag;
                }

                strData +=
                    Xml_Services_Close_Tag
                    + Xml_Response_Value_Close_Tag;
            }
            else
            {
                // On a une exception
                // Il faut renvoyer les tags d'exception et
                // de ce fait ne pas ajouter les tags sur ls données
                strData +=
                    Xml_Response_Exception_Open_Tag
                    + Xml_Response_Exception_Count_Open_Tag
                    + GetExceptionCount()
                    + Xml_Response_Exception_Count_Close_Tag
                    + Xml_Response_Exception_Code_Open_Tag
                    + GetExceptionCode()
                    + Xml_Response_Exception_Code_Close_Tag
                    + Xml_Response_Exception_Severity_Open_Tag
                    + GetExceptionSeverity()
                    + Xml_Response_Exception_Severity_Close_Tag
                    + Xml_Response_Exception_Type_Open_Tag
                    + GetExceptionType()
                    + Xml_Response_Exception_Type_Close_Tag
                    + Xml_Response_Exception_Message_Open_Tag
                    + GetExceptionMessage()
                    + Xml_Response_Exception_Message_Close_Tag
                    + Xml_Response_Exception_Close_Tag;
            }
            strData +=
                Xml_Response_Close_Tag;
            return(strData);
        }
        private void LogRequest()
        {
            if (!this.requestLogged)
            {
                Logger.WriteInformationToLog(String.Format("(login = {0}, IP¨= {1}) is calling {2} and provided {3}",
                                                           GetUser().GetLogin(), GetUser().GetClientIP(), UserInfo.GetApplicationName(GetUser().GetApplication()),
                                                           ArgsChecker.IsValidToken(GetUser(), GetInputValue()) ? GetInputValue() : CreditCardVerifier.TruncatePan(GetInputValue())));

                // request logged
                this.requestLogged = true;
            }
        }