Ejemplo n.º 1
0
        public List<Payment> GetPayment(PaymentRequest paymentRequest)
        {
            if (paymentRequest == null || string.IsNullOrEmpty(paymentRequest.OrderReferenceCode))
            {
                throw new ArgumentNullException("paymentRequest");
            }

            var client = new PaymentServiceServiceClient();
            return client.GetTransactions(paymentRequest.OrderReferenceCode).Result;
        }
Ejemplo n.º 2
0
        /// <summary>
        ///  Get payment information from data repository
        /// </summary>
        /// <param name="paymentRequest">paymentRequest</param>
        /// <returns>Collection of Payments</returns>
        public List<Payment> GetPayment(PaymentRequest paymentRequest)
        {
            Helper.ArgumentNotNull(paymentRequest, "paymentRequest");
            Helper.ArgumentNotNullOrEmpty(paymentRequest.IsoCountryCode, "IsoCountryCode");

            var service = PaymentServiceGateway.CreateGateway(paymentRequest.IsoCountryCode);

            // First try get payments for the OrderReference
            var payments = service.GetPayments(paymentRequest.OrderReferenceCode);
            
            // If none exist then try get payments for the BookingReference
            if (payments == null || !payments.Any())
            {
                payments = service.GetPayments(paymentRequest.BookingReferenceCode);
            }

            return payments;
        }
Ejemplo n.º 3
0
 /// <summary>
 ///  Get payment information from data repository
 /// </summary>
 /// <param name="paymentRequest">paymentRequest</param>
 /// <returns>Collection of Payments</returns>
  public List<SettlementPaymentDto> GetPayment(PaymentRequest paymentRequest)
 {
     List<Payment> payment = settlementPaymentManager.GetPayment(paymentRequest);
     return payment != null? payment.ConvertAll(DataTransferObjectsConverter.ConvertToSettlementPaymentDto) : null;
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Create a settlement TransactionModel for invoice request
        /// </summary>
        /// <remarks>
        /// Will need changes for multi-room booking and also for bookings without channel information
        /// </remarks>
        /// <param name="bookingId">bookingId</param>
        /// <param name="orderId">orderId</param>
        /// <param name="eventId">event Id that caused this</param>
        /// <param name="forceProcess">if true will ignore some missing data and process anyway</param>
        /// <returns>TransactionModel</returns>
        public TransactionModel CreateTransactionModelForInvoiceRequest(int bookingId, int orderId, int eventId, bool forceProcess)
        {
            // Check that there is a booking and order
            Helper.ArgumentNotDefaultValue<int>(bookingId, "bookingId");
            Helper.ArgumentNotDefaultValue<int>(orderId, "orderId");

            var transactionModel = new TransactionModel();          

            // get data from eagle database        
            Model.Order.Order order = orderDao.GetOrderWithBookingsByKey(orderId);
            Model.Booking.Booking booking = order.Bookings.FirstOrDefault(b => b.Id == bookingId);
            Model.Business.Business business = businessDao.GetByKey(booking.BusinessId);
            var orderReference = orderReferenceDao.GetByOrderIdAndReferenceType(orderId, ReferenceTypeEnum.EcommerceReservation);
            var reservationId = orderReference != null ? orderReference.Reference : Helper.IntToGuid(orderId).ToString();

            order.Channel = channelDao.GetById(order.ChannelId.Value);
            Model.Business.Business channelBusiness = businessDao.GetByKey(order.Channel.DistributorId.Value);
            var country = countryDao.GetByBusiness(booking.BusinessId);

            BookingEvent bookingEvent = null;
            List<BookingEventData> bookingEventData = null;

            #region booking event fetch if available
            if (eventId != default(int) &&
                    eventId > 0)
            {
                bookingEvent = bookingEventDao.GetByKey(eventId);
            }

            if (bookingEvent != null)
            {
                bookingEventData = bookingEventDataDao.GetAllByEventId(bookingEvent.Id);
            } 
            #endregion

            List<Payment> payments = paymentDao.GetPaymentsByOrder(orderId);
            decimal orderPaidAmount = payments.Where(p => p.PaymentSourceEnum.GetCode() == order.OrderSourceCode && p.PaymentTypeEnum == PaymentTypeEnum.Payment).Sum(pym => pym.Amount);

            Payment bookingPayment = GetPaymentByTypeAndSource(payments, PaymentTypeEnum.Payment, PaymentSourceEnum.Online);
            List<BookingItem> bookingItems = bookingItemDao.GetByBooking(bookingId);
            List<PaymentEvent> paymentEvents = paymentEventDao.GetByPaymentId(bookingPayment.Id);
            logger.LogInfo("Get data from eagle database completed in CreateTransactionModelForInvoiceRequest ");

            // get payment data from payment service 
            var paymentRequest = new SettlementPaymentModel.PaymentRequest() { OrderReferenceCode = order.OrderReference, BookingReferenceCode = booking.BookingReferenceNumber, IsoCountryCode = country.IsoChar2Code };
            List<SettlementPaymentDto> settlementPaymentDtos = GetSettlementPayment(paymentRequest);
            logger.LogInfo("Get payment data from payment service completed in CreateTransactionModelForInvoiceRequest");
            
            // set retrieved data on settlement TransactionModel
            SetLineItemsOnTransactionModel(transactionModel, settlementPaymentDtos, order, payments, paymentEvents);
            SetGuestInfoOnTransactionModel(transactionModel, order);
            SetBookingInfoOnTransactionModel(transactionModel, booking, order, bookingEvent, bookingEventData, business, settlementPaymentDtos, reservationId);
            SetFinancialInfoOnTransactionModel(transactionModel, booking, business, order, bookingItems, orderPaidAmount);
            settlementHelper.SetMerchantInfoOnTransactionModel(transactionModel, booking, business, channelBusiness, settlementPaymentDtos);

            SetPaymentInfoOnTransactionModel(transactionModel, bookingPayment, settlementPaymentDtos, order, forceProcess);
            
            SetProviderDistributorInformationOnTransactionModel(transactionModel, business, channelBusiness, order.Channel);
            SetReservedProductOnTransactionModel(transactionModel, booking, order, reservationId);

            return transactionModel;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Determine if invoice request is valid
        /// </summary>
        /// <param name="bookingId">BookingId</param>
        /// <param name="orderId">OrderId</param>
        /// <param name="orderSourceCode">order source code to check if it is online</param>
        /// <returns>true if invoice request is valid, false other</returns>
        public bool IsInvoiceRequestValid(int bookingId, int orderId, string orderSourceCode)
        {
            // Check that there is a booking and order
            Helper.ArgumentNotDefaultValue<int>(bookingId,"bookingId");
            Helper.ArgumentNotDefaultValue<int>(orderId, "orderId");
            Helper.ArgumentNotNull(orderSourceCode, "order source code");

            // return false at this point since we only care about on line payments for settlement
            if (orderSourceCode != SourceType.Online.GetCode())
            {
                return false;
            }

            // get data from eagle database    
            Model.Order.Order order = orderDao.GetOrderWithBookingsByKey(orderId);
            Model.Booking.Booking booking = order.Bookings.FirstOrDefault(b => b.Id == bookingId);
            
            order.Channel = order.ChannelId.HasValue ? channelDao.GetById(order.ChannelId.Value) : null;
            
            var country = countryDao.GetByBusiness(booking.BusinessId);
            logger.LogInfo("Get data from eagle database completed in IsInvoiceRequestValid ");

            // get payment data from payment service 
            var paymentRequest = new SettlementPaymentModel.PaymentRequest() { OrderReferenceCode = order.OrderReference, BookingReferenceCode = booking.BookingReferenceNumber, IsoCountryCode = country.IsoChar2Code };
            List<SettlementPaymentDto> settlementPaymentDtos = GetSettlementPayment(paymentRequest);
            logger.LogInfo("Get payment data from payment service completed in IsInvoiceRequestValid");

            ScenarioType scenarioType = GetTransactionScenarioType(booking, order, settlementPaymentDtos);
            return scenarioType != ScenarioType.Unknown;
        }