private static void PopulateFields(TransactionLookupResponsePayload transactionLookupResponsePayload, Dictionary <string, string> infoKeysWithGroupTypes, string thirdPartyType, List <KeyValuePairType> fldValues, List <string> reqFld)
 {
     foreach (var key in reqFld)
     {
         KeyValuePairType newFldVal = FromTransactionLookupResponsePayload(transactionLookupResponsePayload, key);
         if (newFldVal == null)
         {
             if (key == InfoKeyNames.thirdParty_Sender_Type) //TODO: Verify whether ThirdPartyType.NONE/null works.
             {
                 newFldVal = GetFieldValueItem(key, thirdPartyType ?? TestThirdPartyType.None);
             }
             else if (infoKeysWithGroupTypes.Keys.Contains(key) && (infoKeysWithGroupTypes[key] == InfoKeyGroups.PersonalIdNumber))
             {
                 var correspondingIdTypeInfoKey = key.Substring(0, key.LastIndexOf("_") + 1) + "Type";
                 var idType = fldValues.FirstOrDefault(x => x.InfoKey == correspondingIdTypeInfoKey).Value;
                 newFldVal = GetFieldValueItem(key, DataGenerator.PersonalIdNumber(idType));
             }
             else
             {
                 newFldVal = GetFieldValueItem(key, infoKeysWithGroupTypes.Keys.Contains(key) ? DataGenerator.GetRandomData(infoKeysWithGroupTypes[key]) : string.Empty);
             }
         }
         fldValues.Add(newFldVal);
     }
 }
        private static KeyValuePairType FromTransactionLookupResponsePayload(TransactionLookupResponsePayload transactionLookupResponsePayload, string reqInfoKey)
        {
            KeyValuePairType currVal = transactionLookupResponsePayload.CurrentValues.Exists(x => x.InfoKey == reqInfoKey) ?
                                       transactionLookupResponsePayload.CurrentValues.First(x => x.InfoKey == reqInfoKey) : null;

            return(currVal);
        }
        public static ReceiveReversalValidationRequest FromTransactionLookup(this ReceiveReversalValidationRequest receiveReversalValidationReq, TransactionLookupResponsePayload tranLookupResponsePayload)
        {
            receiveReversalValidationReq.MgiSessionID    = tranLookupResponsePayload.MgiSessionID;
            receiveReversalValidationReq.ReceiveAmount   = tranLookupResponsePayload.ReceiveAmounts.ReceiveAmount.GetValueOrDefault();
            receiveReversalValidationReq.ReceiveCurrency = tranLookupResponsePayload.ReceiveAmounts.ReceiveCurrency;

            return(receiveReversalValidationReq);
        }
        public static SendReversalValidationRequest FromTransactionLookup(this SendReversalValidationRequest sendReversalValidationReq, TransactionLookupResponsePayload tranLookupResponsePayload)
        {
            sendReversalValidationReq.MgiSessionID = tranLookupResponsePayload.MgiSessionID;
            sendReversalValidationReq.SendAmount   = tranLookupResponsePayload.SendAmounts.SendAmount.GetValueOrDefault();
            sendReversalValidationReq.SendCurrency = tranLookupResponsePayload.SendAmounts.SendCurrency;

            return(sendReversalValidationReq);
        }
        public static List <KeyValuePairType> GetFieldValues(IEnumerable <FieldToCollectInfo> categoryFieldsToCollect, TransactionLookupResponsePayload transactionLookupResponsePayload, Dictionary <string, string> infoKeysWithGroupTypes, string thirdPartyType)
        {
            List <KeyValuePairType> fldValues = new List <KeyValuePairType>();

            #region PopulateEnumFieldValues
            //Get keyvalues for enum fields
            foreach (var enumItem in categoryFieldsToCollect.Where(x => x.DataType == DataType.@enum).ToList())
            {
                var enumeration     = enumItem.Enumeration;
                var enumeratedItems = enumeration.EnumeratedItems.Select(x => x.Identifier).ToList();
                var fldValue        = GetFieldValueItem(enumItem.InfoKey, DataGenerator.GetRandomItemFromList(enumeratedItems));
                fldValues.Add(fldValue);
                if (enumItem.ChildFields != null)
                {
                    var matchingChildField      = enumItem.ChildFields.FirstOrDefault(x => x.FieldValue == fldValue.Value);
                    var requiredChildFieldInfos = matchingChildField?.Infos.OfType <FieldToCollectInfo>().Where(x => x.Required == true).ToList() ?? new List <FieldToCollectInfo>();
                    if (requiredChildFieldInfos?.Count() > 0)
                    {
                        PopulateFields(transactionLookupResponsePayload, infoKeysWithGroupTypes, thirdPartyType, fldValues, requiredChildFieldInfos.Select(x => x.InfoKey).ToList());
                    }
                }
            }
            #endregion

            #region PopulateFieldValues
            if (!categoryFieldsToCollect.Any())
            {
                return(fldValues);
            }
            List <string> reqFld = categoryFieldsToCollect.Where(x => (x.DataType != DataType.@enum)).Select(x => x.InfoKey).ToList();
            PopulateFields(transactionLookupResponsePayload, infoKeysWithGroupTypes, thirdPartyType, fldValues, reqFld);
            #endregion

            return(fldValues);
        }
        public static List <KeyValuePairType> GetRequestedFieldValuesFromErrors(IEnumerable <BusinessError> checkVerifiedErrors, TransactionLookupResponsePayload transactionLookupResponsePayload, Dictionary <string, string> infoKeysWithGroupTypes, string thirdPartyType)
        {
            List <KeyValuePairType> fldValues = new List <KeyValuePairType>();
            List <string>           reqFlds   = checkVerifiedErrors.Where(x => x.ErrorCategory.ToUpper() == BusinessErrors.CheckVerify || x.ErrorCategory.ToUpper() == BusinessErrors.Validation).Select(x => x.OffendingField).ToList();

            PopulateFields(transactionLookupResponsePayload, infoKeysWithGroupTypes, thirdPartyType, fldValues, reqFlds);
            return(fldValues);
        }
        public static ReceiveValidationRequest FromTransactionLookup(this ReceiveValidationRequest recvValReq, TransactionLookupResponsePayload transactionResponsePayload)
        {
            var sessionId = transactionResponsePayload.MgiSessionID;
            var currency  = transactionResponsePayload.ReceiveAmounts;

            recvValReq.ReceiveAmount   = currency.ReceiveAmount.Value;
            recvValReq.ReceiveCurrency = currency.ReceiveCurrency;
            recvValReq.MgiSessionID    = sessionId;
            return(recvValReq);
        }