public async Task<IHttpActionResult> Get(int id) { var order = await repository.RetrieveAsync(id); if (order == null || order.UserName != User.Identity.Name) { return NotFound(); } var response = new SecureOrderApiModel { OrderID = order.OrderID, EnteredOn = order.EnteredOn, OrderStatus = order.OrderStatus.ToString(), OrderTotal = order.OrderTotal, UserName = order.UserName, Tickets = new List<SecureTicketSeatApiModel>() }; foreach (var x in order.Tickets) { var ticket = new SecureTicketSeatApiModel { ConfirmationNumber = x.TicketSeat.PendingPurchaseConfirmation, TicketSeatID = x.TicketSeat.TicketSeatID, TicketPriceID = x.TicketPriceID, AgeID = x.TicketPrice.EventAgeGroupID, BasePrice = x.TicketPrice.BasePrice, TotalPrice = x.TicketTotalPrice, EventName = x.TicketSeat.TicketArea.Event.PageContent.Heading, TicketDiscountID = x.TicketDiscountID, DiscountConfirmationNumber = x.TicketDiscount?.SecurityConfirmationNumber, Options = new Dictionary<int, int>(), IsValid = true }; foreach (var y in x.TicketOptionChoices) { ticket.Options.Add(y.TicketOptionID, y.TicketOptionChoiceID); } response.Tickets.Add(ticket); } return Ok(response); }
public async Task<IHttpActionResult> Put(int id, SecureOrderApiModel model) { var order = await repository.RetrieveAsync(id); if (order != null && order.UserName == User.Identity.Name) { var apiContext = PaypalConfiguration.GetAPIContext(); var payment = PayPal.Api.Payment.Get(apiContext, model.PaymentID); if (payment.state == "approved") { var transaction = payment.transactions.ToArray()[0]; var sale = transaction.related_resources.ToArray()[0].sale; if (order.Payments == null) { order.Payments = new List<DexCMS.Tickets.Orders.Models.Payment>(); } order.Payments.Add(new DexCMS.Tickets.Orders.Models.Payment { GrossPaid = decimal.Parse(transaction.amount.total), NetPaid = decimal.Parse(transaction.amount.total) - decimal.Parse(sale.transaction_fee.value), OrderID = order.OrderID, PaidOn = Convert.ToDateTime(payment.update_time), PaymentDetails = payment.ConvertToJson(), PaymentFee = decimal.Parse(sale.transaction_fee.value), PaymentType = PaymentType.Paypal }); order.OrderStatus = order.OrderTotal == decimal.Parse(transaction.amount.total) ? OrderStatus.Complete : OrderStatus.Partial; await repository.UpdateAsync(order, order.OrderID); return Ok(); } else { return BadRequest(); } } else { return BadRequest(); } }