Example #1
0
        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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        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();
        }
Example #4
0
        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);
        }