Beispiel #1
0
        /// <summary>
        /// Create the eagle payment and queue item for settlement after payment through service
        /// </summary>
        /// <param name="result">result of payment service</param>
        /// <param name="order">order paid to with bookings</param>
        /// <param name="note">note for payment</param>
        /// <returns>true if successful</returns>
        internal bool CreatePaymentAndQueueToSettlement(PreAuthPaymentResult result, Model.Order.Order order, string note)
        {
            if (result.Success)
            {
                if (order != null)
                {
                    Model.Booking.Booking firstBooking = order.Bookings.FirstOrDefault();

                    var paymentType = result.Amount > 0 ? PaymentTypeEnum.Payment : PaymentTypeEnum.Refund;

                    Payment payment = new Payment
                    {
                        Amount = result.Amount,
                        OrderId = order.Id.Value,
                        CreatedByUserId = order.UpdatedByUserId,
                        PaymentMethodEnum = PaymentMethodEnum.CreditCard, // assume credit card for now
                        PaymentMethod = new PaymentMethod { Code = PaymentMethodEnum.CreditCard.GetCode() },
                        CardLast4Digits = result.LastCardDigits,
                        PaymentSource = new PaymentSource { Code = PaymentSourceEnum.Online.GetCode() },
                        PaymentSourceEnum = PaymentSourceEnum.Online,
                        PaymentType = new PaymentType { Code = paymentType.GetCode() },
                        PaymentTypeEnum = paymentType,
                        PaymentStatus = new PaymentStatus { Code = PaymentStatusEnum.Created.GetCode() },
                        PaymentStatusEnum = PaymentStatusEnum.Created,
                        Currency = new Model.Common.Currency(order.CustomerCurrencyCode, string.Empty, string.Empty, 2),
                        ReceivedDate = result.TransactionDate,
                        MerchantType = null, // needs to be null in order to be filled in when being created
                        Notes = note,
                        TransactionSequence = result.Sequence
                    };
                    
                    
                    CardTypeEnum cardType = CardType.ConvertOgoneCardTypeToEagleCardType(result.CardTypeCode);
                    payment.CardType = cardType != CardTypeEnum.Unknown ? new CardType {Code = cardType.GetCode()} : null;

                    // add this payment to the order
                    CreatePaymentForOrder(payment, firstBooking.BusinessId);

                    SettlementInvoiceRequest invoiceRequest = new SettlementInvoiceRequest
                    {
                        OrderSourceCode = order.OrderSourceCode,
                        BusinessId = firstBooking.BusinessId,
                        BookingId = firstBooking.Id.Value,
                        OrderId = order.Id.Value
                    };

                    QueueItem queItem = GetSettlementQueueItemFromPayment(payment, invoiceRequest);

                    if (queItem == null || queueManager.AddQueueItem(queItem) == null)
                    {
                        // failed to create the queue item
                        throw new ValidationException(ErrorFactory.CreateAndLogError(Errors.SRVEX30139, "PaymentManager.ChargePreAuth",
                                    additionalDescriptionParameters: new object[] { order.OrderReference },
                                    arguments: new object[] { order.OrderReference }));
                    }
                    
                    return true;
                }
            }

            return false;
        }
Beispiel #2
0
            public void CreatePaymentAndQueueToSettlementCreatesPaymentAndQueueItem(PreAuthPaymentResult result, Order order, bool endResult)
            {
                // Arrange
                var managerMock = new Mock<PaymentManager>();
                var queueManager = new Mock<IQueueManager>();
                managerMock.CallBase = true;
                managerMock.Object.QueueManager = queueManager.Object;

                
                if (endResult)
                {
                    queueManager.Setup(
                        q =>
                        q.AddQueueItem(
                        It.Is<QueueItem>(qi =>
                                            qi.Key == order.Id.Value.ToString() &&
                                            qi.PayloadType == PayloadTypeEnum.BookingInv &&
                                            qi.QueueCode == QueueCodeType.SettlementInvoiceRequest
                            ))).Returns(new QueueItem());
                }

                if (endResult)
                {
                    managerMock.Setup(mm => mm.CreatePaymentForOrder(It.Is<Model.Booking.Payment>(p => 
                        p.OrderId == order.Id &&
                        p.Amount == result.Amount &&
                        p.PaymentMethodEnum == PaymentMethodEnum.CreditCard &&
                        p.PaymentSourceEnum == PaymentSourceEnum.Online &&
                        p.PaymentTypeEnum == PaymentTypeEnum.Payment &&
                        p.ReceivedDate == result.TransactionDate &&
                        p.MerchantType == null &&
                        p.Currency.ISOCode == order.CustomerCurrencyCode &&
                        p.CardLast4Digits == result.LastCardDigits &&
                        p.CardType.Code == CardType.ConvertOgoneCardTypeToEagleCardType(result.CardTypeCode).GetCode()
                        ), It.IsAny<long>()));
                }

                Assert.AreEqual(endResult, managerMock.Object.CreatePaymentAndQueueToSettlement(result, order, string.Empty),
                                "result did not equal expected result");

                managerMock.VerifyAll();
                queueManager.VerifyAll();
            }