private PaymentViewData GetPaymentInstrumentInformation(PaymentInstrument paymentInstrument, PaymentViewData paymentViewData) { if (paymentInstrument is CheckPayment) { var checkPayment = paymentInstrument as CheckPayment; paymentViewData.InstrumentNumber = checkPayment.Check.CheckNumber; } else if (paymentInstrument is ECheckPayment) { var eCheckPayment = paymentInstrument as ECheckPayment; var processorResponse = eCheckPayment.ProcessorResponse.Split('|'); paymentViewData.ProcessorResponse = processorResponse.Length >= 6 ? processorResponse.GetValue(6).ToString() : "-N/A-"; paymentViewData.InstrumentNumber = eCheckPayment.ECheck.CheckNumber; } else if (paymentInstrument is ChargeCardPayment) { var chargeCardPayment = paymentInstrument as ChargeCardPayment; paymentViewData.ProcessorResponse = "-N/A-"; if (ProcessorResponse.IsValidResponseString(chargeCardPayment.ProcessorResponse)) { paymentViewData.ProcessorResponse = new ProcessorResponse(chargeCardPayment.ProcessorResponse).TransactionCode; } var chargeCard = _chargeCardRepository.GetById(chargeCardPayment.ChargeCardId); if (chargeCard != null) { paymentViewData.InstrumentDate = chargeCard.ExpirationDate.ToString("MM/yyyy"); paymentViewData.InstrumentNumber = chargeCard.Number.Length > 3 ? chargeCard.TypeId + " - ends with " + chargeCard.Number.Substring( chargeCard.Number.Length - 4, 4) : chargeCard.Number; } } else if (paymentInstrument is InsurancePayment) { var insurancePayment = paymentInstrument as InsurancePayment; if (insurancePayment.AmountToBePaid > insurancePayment.Amount) { paymentViewData.ProcessorResponse = "Amount: $" + insurancePayment.AmountToBePaid.ToString("0.00") + ", Status: Pending for settlement"; } else { paymentViewData.ProcessorResponse = "Amount: $" + insurancePayment.AmountToBePaid.ToString("0.00") + ", Status: Payment settled"; } } return(paymentViewData); }
/// <summary> /// Checks if the given transaction is valid for refund or not /// </summary> /// <param name="cardPayment"></param> /// <param name="amountToRefund"></param> /// <returns></returns> public bool IsCardValidforRefund(ChargeCardPayment cardPayment, decimal amountToRefund, out string reasonForFailure) { reasonForFailure = string.Empty; if (cardPayment.Amount < amountToRefund) { reasonForFailure = "The payment gateway doesn't allow refund of an amount greater than the one in the last transaction made. The Last Transaction amount is ($" + cardPayment.Amount.ToString("0.00") + ")."; return(false); } if (cardPayment.DataRecorderMetaData.DateCreated < DateTime.Now.Date.AddDays(-120)) { reasonForFailure = "Can Not Refund against the last transaction, made on Card on file. As the valid date of making a request is within 120 days."; return(false); } if (!ProcessorResponse.IsValidResponseString(cardPayment.ProcessorResponse)) { reasonForFailure = "No valid Transaction Code found in the database, for the selected card on file."; return(false); } return(true); }
private void CompleteEditModel(RefundRequestResultEditModel model, long customerId) { string value = _configurationSettingRepository.GetConfigurationValue(ConfigurationSettingName.CancellationFee); if (!string.IsNullOrEmpty(value)) { decimal fee; Decimal.TryParse(value.Trim(), out fee); model.CancellationFee = fee; } if (model.PaymentEditModel == null) { model.PaymentEditModel = new PaymentEditModel { PaymentFlow = PaymentFlow.Out }; } if (_isEccEnabled) { model.PaymentEditModel.AllowedPaymentTypes = new[] { new OrderedPair <long, string>(PaymentType.Check.PersistenceLayerId, PaymentType.Check.Name), new OrderedPair <long, string>(PaymentType.Cash.PersistenceLayerId, PaymentType.Cash.Name), new OrderedPair <long, string>(PaymentType.CreditCard.PersistenceLayerId, PaymentType.CreditCard.Name) } } ; else { model.PaymentEditModel.AllowedPaymentTypes = new[] { new OrderedPair <long, string>(PaymentType.Check.PersistenceLayerId, PaymentType.Check.Name), new OrderedPair <long, string>(PaymentType.Cash.PersistenceLayerId, PaymentType.Cash.Name) } }; var order = _orderRepository.GetOrder(model.OrderId); var validCardPayment = order.PaymentsApplied.Where(pi => pi.PaymentType == PaymentType.CreditCard).OrderBy( pi => pi.DataRecorderMetaData.DateCreated).Select(pi => (ChargeCardPayment)pi).LastOrDefault(); if (validCardPayment != null && (_isEccEnabled || (validCardPayment.Amount > 0 && validCardPayment.DataRecorderMetaData.DateCreated > DateTime.Now.Date.AddDays(-120) && ProcessorResponse.IsValidResponseString(validCardPayment.ProcessorResponse)))) { model.PaymentEditModel.ChargeCardonFile = new ChargeCardPaymentEditModel() { ChargeCardPayment = validCardPayment, ChargeCard = _chargeCardRepository.GetById(validCardPayment.ChargeCardId) }; model.PaymentEditModel.AllowedPaymentTypes = model.PaymentEditModel.AllowedPaymentTypes.Concat(new[] { new OrderedPair <long, string>(PaymentType.CreditCardOnFile_Value, PaymentType.CreditCardOnFile_Text) }); } model.PaymentEditModel.ExistingBillingAddress = Mapper.Map <Address, AddressEditModel>(_customerRepository.GetCustomer(customerId).BillingAddress) ?? new AddressEditModel(); }
public CreditCardReconcileListModel Create(IEnumerable <ChargeCardPayment> chargeCardPayments, IEnumerable <ChargeCard> chargeCards, IEnumerable <OrderedPair <long, long> > orderPaymentIdOrderedPairs, IEnumerable <Order> orders, IEnumerable <OrderedPair <long, string> > customerNameIdPairs, IEnumerable <Event> events, IEnumerable <OrderedPair <long, string> > eventPods, IEnumerable <OrderedPair <long, string> > corporateAccountNameOrderedPairs) { var listModel = new CreditCardReconcileListModel(); var array = new CreditCardReconcileModel[chargeCardPayments.Count()]; var index = 0; foreach (var chargeCardPayment in chargeCardPayments) { var chargeCard = chargeCards.Where(c => c.Id == chargeCardPayment.ChargeCardId).SingleOrDefault(); var orderId = orderPaymentIdOrderedPairs.Where(p => p.SecondValue == chargeCardPayment.PaymentId).Select(p => p.FirstValue).SingleOrDefault(); var order = orders.Where(o => o.Id == orderId).SingleOrDefault(); if (order == null) { continue; } var customerName = customerNameIdPairs.Where(p => p.FirstValue == order.CustomerId).FirstOrDefault(); var eventPod = eventPods.Where(ep => ep.FirstValue == order.EventId).SingleOrDefault(); string pods = eventPod != null ? eventPod.SecondValue : string.Empty; var theEvent = events != null && order.EventId.HasValue ? events.Where(e => e.Id == order.EventId).SingleOrDefault() : null; string prepaid = "No"; decimal prePaidSum = 0; if (theEvent != null) { prePaidSum = order.PaymentsApplied.Where( pa => pa.DataRecorderMetaData.DateCreated < theEvent.EventDate).Sum( p => p.Amount); if ( order.PaymentsApplied.Where(pa => pa.DataRecorderMetaData.DateCreated < theEvent.EventDate). Count() > 0 && prePaidSum < order.DiscountedTotal) { prepaid = "Partial Paid"; } else if (order.DiscountedTotal == order.TotalAmountPaid && order.PaymentsApplied.Where(pa => pa.DataRecorderMetaData.DateCreated >= theEvent.EventDate) .Count() < 1) { prepaid = "Yes"; } else if (chargeCardPayment.DataRecorderMetaData.DataRecorderCreator.Id == customerName.FirstValue) { prepaid = "Yes"; } } else { prepaid = " -N/A-"; prePaidSum = order.PaymentsApplied.Sum(p => p.Amount); } var account = theEvent != null?corporateAccountNameOrderedPairs.FirstOrDefault(x => x.FirstValue == theEvent.Id) : null; var model = new CreditCardReconcileModel { EventId = theEvent != null ? theEvent.Id : 0, Amount = chargeCardPayment.Amount, CardType = chargeCard.TypeId.ToString(), CustomerName = customerName.SecondValue, DateApproved = chargeCardPayment.DataRecorderMetaData.DateCreated, Pod = pods, ReceiptNumber = ProcessorResponse.IsValidResponseString(chargeCardPayment.ProcessorResponse) ? new ProcessorResponse(chargeCardPayment.ProcessorResponse).TransactionCode : chargeCardPayment.ProcessorResponse, IsOnline = chargeCardPayment.DataRecorderMetaData.DataRecorderCreator.Id == customerName.FirstValue, Prepaid = prepaid, CorporatePartner = account == null ? "N/A" : account.SecondValue, EventType = theEvent != null ? ((theEvent.EventType == EventType.Retail) ? EventType.Retail.ToString() : EventType.Corporate.ToString()) : "N/A" }; array[index++] = model; } listModel.Collection = array; return(listModel); }