/// <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; }
/// <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); }
/// <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); }