/// <summary> /// Centralises the logic to create payments and events /// </summary> /// <param name="payment">Payment</param> /// <param name="orderEventType">Order event type to create</param> /// <param name="paymentEventType">Payment event type to create</param> private void CreatePayment(Payment payment, OrderEventTypeEnum orderEventType, PaymentEventTypeEnum paymentEventType, long businessId) { //input validation if (payment.IsValid()) { SetPaymentConvertedValue(payment, businessId); using (var tx = new BusinessTransaction()) { //enforce that the values are positive and negative according to the type of payment we're trying to create if ((payment.Amount > 0 && payment.PaymentTypeEnum == PaymentTypeEnum.Refund) || (payment.Amount < 0 && payment.PaymentTypeEnum == PaymentTypeEnum.Payment)) { payment.Amount *= -1; } //Set Merchant Type if not already done payment.MerchantType = payment.MerchantType ?? paymentDao.GetMerchantType(payment.OrderId); //create payment paymentDao.Create(payment); //create the payment event eventTrackingManager.CreatePaymentEvent(payment.Id, paymentEventType, payment.Notes); //create the order event eventTrackingManager.CreateOrderEvent(payment.OrderId, orderEventType, payment.Id.ToString(), payment.Notes); tx.Commit(); } } }
/// <summary> /// Create a order event /// </summary> /// <param name="orderId">Id of Order</param> /// <param name="eventType">Event Type</param> /// <param name="reference">Reference</param> /// <param name="notes">Notes for event</param> public void CreateOrderEvent(int orderId, OrderEventTypeEnum eventType, string reference, string notes) { var orderEvent = new OrderEvent { OrderId = orderId, Reference = reference, EventType = new EnumEntity { Code = eventType.GetCode() }, Notes = notes }; orderEventDao.Create(orderEvent); }