Beispiel #1
0
        /// <summary>
        /// Marshals information from the MasterCard clearing data record into the RedeemedDeal object in the context.
        /// </summary>
        /// <param name="clearingData">
        /// The clearing data record to marshal.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// Parameter clearingData cannot be null.
        /// </exception>
        public void MarshalRedeemDeal(ClearingData clearingData)
        {
            if (clearingData == null)
            {
                throw new ArgumentNullException("clearingData", "Parameter clearingData cannot be null.");
            }

            RedeemedDeal redeemedDeal = (RedeemedDeal)Context[Key.RedeemedDeal];

            redeemedDeal.CallbackEvent              = RedemptionEvent.Settlement;
            redeemedDeal.PurchaseDateTime           = clearingData.TransactionDate;
            redeemedDeal.AuthorizationAmount        = (int)(clearingData.TransactionAmount * 100);
            redeemedDeal.Currency                   = "USD";
            redeemedDeal.PartnerRedeemedDealScopeId = clearingData.BankNetRefNumber;

            KeyClearingData keyClearingData = new KeyClearingData
            {
                BankCustomerNumber = clearingData.BankCustomerNumber,
                BankNetRefNumber   = clearingData.BankNetRefNumber,
                MerchantId         = clearingData.MerchantId,
                IssuerIca          = clearingData.IssuerIca
            };

            Context[Key.PartnerData] = keyClearingData.XmlSerialize();

            Context[Key.PartnerCardId]          = clearingData.BankCustomerNumber;
            Context[Key.PartnerMerchantId]      = clearingData.LocationId;
            Context[Key.PartnerMerchantIdType]  = PartnerMerchantIdType.SettlementOnly;
            Context[Key.CreditStatus]           = CreditStatus.ClearingReceived;
            Context[Key.PartnerReferenceNumber] = clearingData.TransactionSequenceNumber;
        }
Beispiel #2
0
        /// <summary>
        /// Parses a data record.
        /// </summary>
        /// <remarks>
        /// A null item may be added.
        /// </remarks>
        private void ParseDataRecord()
        {
            ClearingData clearingData = ClearingDataParser.Parse(Line, NumberOfDataRecords++);

            if (clearingData == null)
            {
                Log.Error("Record in line #{0} from file \"{1}\" could not be parsed.", null,
                          (int)ResultCode.CorruptSettlementRecord, LineNumber, FileName);
            }

            Clearing.DataRecords.Add(clearingData);
        }
        /// <summary>
        /// Adds a RedeemedDeal record to the data store for the specified ClearingData record.
        /// </summary>
        /// <param name="clearingData">
        /// The ClearingData record for which to add a redeemed deal record.
        /// </param>
        /// <param name="redeemedDeal">
        /// The RedeemedDeal object to use when committing the redeemed deal record.
        /// </param>
        /// <returns>
        /// The ResultCode corresponding to the result of the operation.
        /// </returns>
        private ResultCode AddRedeemedDealRecord(ClearingData clearingData,
                                                 RedeemedDeal redeemedDeal)
        {
            ResultCode result = ResultCode.NoApplicableDealFound;

            redeemedDeal.AnalyticsEventId = Guid.NewGuid();
            Context[Key.RedeemedDeal]     = redeemedDeal;
            new MasterCard(Context).MarshalRedeemDeal(clearingData);
            Context[Key.Partner] = Partner.MasterCard;
            result = RedeemedDealOperations.AddRedeemedDeal();

            return(result);
        }
Beispiel #4
0
        /// <summary>
        /// Parses the specified record text into a clearing data record if possible.
        /// </summary>
        /// <param name="record">
        /// The record text to parse into a clearing data record.
        /// </param>
        /// <param name="recordNumber">
        /// The number of the record of this type from the extract file being parsed.
        /// </param>
        /// <returns>
        /// * The ClearingData object if successful.
        /// * Else returns null.
        /// </returns>
        internal ClearingData Parse(string record,
                                    int recordNumber)
        {
            ClearingData result = new ClearingData();

            int      recordPos    = 0;
            bool     recordValid  = true;
            string   stringField  = null;
            decimal  decimalField = Decimal.MinValue;
            DateTime dateField    = DateTime.MinValue;

            ParsingUtilities parsingUtilities = new ParsingUtilities("Clearing File Data Record", recordNumber, FileName, ClearingConstants.ShortTimeFieldLength, Log);

            // RecordType
            recordValid = parsingUtilities.VerifyString(record, ref recordPos, "Record Type", RecordType, ClearingConstants.RecordTypeLength, recordValid);

            // Transaction sequence number.
            recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ClearingConstants.TransactionSequenceNumberLength, recordValid);
            result.TransactionSequenceNumber = stringField;

            // Bank account number.
            recordValid = parsingUtilities.VerifyString(record, ref recordPos, "Bank Account Number", EmptyBankAccountNumber, ClearingConstants.BankAccountNumberLength,
                                                        false, recordValid);

            // Transaction amount.
            recordValid = parsingUtilities.PopulateDecimal(record, ref recordPos, "Transaction Amount", out decimalField, ClearingConstants.TransactionAmountLength,
                                                           recordValid);
            result.TransactionAmount = decimalField;

            // Transaction date. Save this for later combination with transaction time.
            recordValid = parsingUtilities.PopulateDateTime(record, ref recordPos, "Transaction Date", out dateField, false, false, recordValid);
            DateTime transactionDate = dateField;

            // Merchant DBA name.
            recordValid            = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ClearingConstants.MerchantDbaNameLength, recordValid);
            result.MerchantDbaName = stringField;

            // Merchant ID.
            recordValid       = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ClearingConstants.MerchantIdLength, recordValid);
            result.MerchantId = stringField;

            // Location ID.
            recordValid       = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ClearingConstants.LocationIdLength, recordValid);
            result.LocationId = stringField;

            // Issuer ICA.
            recordValid      = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ClearingConstants.IssuerIcaLength, recordValid);
            result.IssuerIca = stringField;

            // Transaction time.
            recordValid            = parsingUtilities.PopulateTimeForExistingDate(record, ref recordPos, "Transaction Time", ref transactionDate, recordValid);
            result.TransactionDate = transactionDate;

            // Bank Net ref number.
            recordValid             = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ClearingConstants.BankNetRefNumberLength, recordValid);
            result.BankNetRefNumber = stringField;

            // Bank customer number.
            recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ClearingConstants.BankCustomerNumberLength, recordValid);
            result.BankCustomerNumber = stringField;

            // Aggregate merchant ID.
            recordValid = parsingUtilities.PopulateString(record, ref recordPos, out stringField, ClearingConstants.AggregateMerchantIdLength, recordValid);
            result.AggregateMerchantId = stringField;

            // If the record is not valid, return a null value.
            if (recordValid == false)
            {
                result = null;
            }

            return(result);
        }