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