private static IOrderForm GetCurrentReturnForm(IEnumerable<IOrderForm> returnForms, DinteroTransactionActionResponse transaction) { IOrderForm returnForm = null; if (returnForms != null) { var forms = returnForms.ToList(); if (forms.Count == 1) { returnForm = forms.First(); } else { var refunds = transaction.Events.Where(e => e.Success && e.Event == "REFUND").ToList(); foreach (var form in forms) { if (!refunds.Any(refund => HaveEqualLineItems(refund.Items, form.GetAllLineItems().ToList()))) { returnForm = form; break; } } } } return returnForm; }
private static List<DinteroOrderLine> ConvertRefundOrderLineItems(IOrderForm orderForm, DinteroTransactionActionResponse transaction, Currency currency) { // TODO: resolve address var shippingAddress = orderForm.Shipments.FirstOrDefault(); return orderForm.GetAllLineItems().Select(lineItem => TransformLineItem(currency, lineItem, shippingAddress?.ShippingAddress, ResolveLineItemDinteroId(transaction, lineItem.Code))).ToList(); }
private static int ResolveLineItemDinteroId(DinteroTransactionActionResponse transaction, string code) { var dinteroItem = transaction.Items.FirstOrDefault(item => item.Id == code); if (dinteroItem != null && int.TryParse(dinteroItem.LineId, out var dinteroId)) { return dinteroId; } return 0; }
/// <summary> /// Retrieve transaction details /// </summary> /// <param name="transactionId"></param> /// <param name="accessToken"></param> /// <returns></returns> public DinteroTransactionActionResponse GetTransactionDetails(string transactionId, string accessToken) { var result = new DinteroTransactionActionResponse(); if (!Configuration.IsValid()) { throw new Exception("Dintero configuration is not valid!"); } var url = DinteroAPIUrlHelper.GetTransactionDetailsUrl(transactionId); if (!string.IsNullOrWhiteSpace(url)) { try { var response = (JObject)SendRequest<object>(url, accessToken, requestMethod: "GET"); result.Id = response["id"]?.ToString().ToUpper(); result.Currency = response["currency"]?.ToString().ToUpper(); result.Status = response["status"]?.ToString().ToUpper(); result.Items = response["items"]?.ToObject<List<DinteroOrderLine>>(); result.Events = new List<DinteroTransactionEvent>(); result.PaymentProduct = response["payment_product"]?.ToString().ToLower(); var events = response["events"]; if (events != null) { foreach (var transactionEvent in events) { var eventObj = new DinteroTransactionEvent { Id = transactionEvent["id"]?.ToString(), Event = transactionEvent["event"]?.ToString().ToUpper(), Items = response["items"]?.ToObject<List<DinteroOrderLine>>(), Success = response["success"]?.ToString().ToLower() == "true" }; if (int.TryParse(response["amount"]?.ToString(), out var eventAmount)) { eventObj.Amount = eventAmount; } result.Events.Add(eventObj); } } if (int.TryParse(response["amount"]?.ToString(), out var amount)) { result.Amount = amount; } } catch (Exception e) { Logger.Error("An error occurred during capturing transaction.", e); throw; } } return result; }