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> Post(SecureTicketSeatApiModel[] model) { if (model == null || model.Length == 0) { return Ok(); } //Create Order DexCMS.Tickets.Orders.Models.Order order = new DexCMS.Tickets.Orders.Models.Order { EnteredOn = cstTime, OrderStatus = OrderStatus.Pending, OrderTicketReferences = new List<OrderTicketReference>(), UserName = User.Identity.Name }; foreach (var item in model) { OrderTicketReference ticketRef = new OrderTicketReference { TicketSeatID = item.TicketSeatID, PendingPurchaseConfirmation = item.ConfirmationNumber, EventAgeGroupID = item.AgeID, TicketDiscountID = item.TicketDiscountID, SecurityConfirmationNumber = item.DiscountConfirmationNumber, TotalPrice = item.TotalPrice }; if (item.Options != null && item.Options.Count > 0) { ticketRef.TicketOptionChoices = new List<int>(); foreach (KeyValuePair<int, int> optionChoice in item.Options) { ticketRef.TicketOptionChoices.Add(optionChoice.Value); } } order.OrderTicketReferences.Add(ticketRef); } //save await repository.AddAsync(order); if (order.OrderTotal > 0) { //Create order with paypal var payment = CreatePayment(order); var createdPayment = payment.Create(PaypalConfiguration.GetAPIContext()); var links = createdPayment.links.GetEnumerator(); var approvalUrl = ""; while (links.MoveNext()) { var link = links.Current; if (link.rel.ToLower().Trim().Equals("approval_url")) { approvalUrl = link.href; } } return Ok(new { OrderID = order.OrderID, ApprovalUrl = approvalUrl }); } else { order.Payments = new List<DexCMS.Tickets.Orders.Models.Payment>(); order.Payments.Add(new DexCMS.Tickets.Orders.Models.Payment { GrossPaid = 0, NetPaid = 0, OrderID = order.OrderID, PaidOn = DateTime.Now, PaymentDetails = "{\"type\":\"Automatic\"}", PaymentFee = 0, PaymentType = PaymentType.NoCharge }); order.OrderStatus = OrderStatus.Complete; await repository.UpdateAsync(order, order.OrderID); return Ok(new { OrderID = order.OrderID }); } }