public async Task<IHttpActionResult> Get(int id) { var order = await repository.RetrieveAsync(id); Orders.Models.Payment payment = null; if (order.Payments != null && order.Payments.Count > 0) { payment = order.Payments.First(); } InvoiceDetails details = null; var response = new CashierOrderApiModel { OrderID = order.OrderID, EnteredOn = order.EnteredOn, OrderStatus = order.OrderStatus, OrderTotal = order.OrderTotal, Notes = order.Notes }; if (payment != null) { if (payment.PaymentType == PaymentType.PendingInvoice) { details = JsonConvert.DeserializeObject<InvoiceDetails>(payment.PaymentDetails); var invoice = Invoice.Get(PaypalConfiguration.GetAPIContext(), details.id); if (invoice.status == "PAID") { payment.GrossPaid = decimal.Parse(invoice.total_amount.value); payment.PaidOn = Convert.ToDateTime(invoice.invoice_date.Substring(0, 10)); payment.PaymentType = PaymentType.Paypal; order.OrderStatus = OrderStatus.Complete; await repository.UpdateAsync(order, order.OrderID); } } else { response.PaymentDetails = payment.PaymentDetails; response.PaymentID = payment.PaymentID; response.PaymentType = payment.PaymentType; response.GrossPaid = payment.GrossPaid; } } else { response.PaymentType = PaymentType.Pending; } if (details != null) { response.InvoiceEmail = details.email; response.InvoiceID = details.id; } return Ok(response); }
public async Task<IHttpActionResult> Put(int id, CashierOrderApiModel model) { var order = await repository.RetrieveAsync(id); if (order == null || order.OrderID != model.OrderID) { return NotFound(); } if (model.GrossPaid.HasValue) { Orders.Models.Payment payment = null; if (model.PaymentID.HasValue) { payment = order.Payments.Where(x => x.PaymentID == model.PaymentID).SingleOrDefault(); payment.GrossPaid = model.GrossPaid.Value; payment.PaymentType = model.PaymentType; payment.PaymentDetails = model.PaymentDetails; } if (payment == null) { payment = new Orders.Models.Payment { GrossPaid = model.GrossPaid.Value, PaidOn = cstTime, PaymentType = model.PaymentType, PaymentDetails = model.PaymentDetails, OrderID = model.OrderID }; } if (order.Payments == null || order.Payments.Count == 0) { order.Payments = new List<Orders.Models.Payment> { payment }; } } order.OrderStatus = model.OrderStatus; order.Notes = model.Notes; await repository.UpdateAsync(order, order.OrderID); return Ok(); }
public async Task<IHttpActionResult> Post(CashierOrderApiModel model) { if (model == null || model.Tickets.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.Tickets) { 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); //! CHANGING HERE switch (model.CashierOrderType) { case CashierOrderType.CashOrCheck: return Ok(new { OrderID = order.OrderID }); case CashierOrderType.Paypal: Invoice invoice = CreateInvoice(model.InvoiceEmail, order); invoice.id = order.OrderID.ToString(); try { var apiContext = PaypalConfiguration.GetAPIContext(); var createdInvoice = invoice.Create(apiContext); createdInvoice.Send(apiContext, true); var invoiceDetails = new { id = createdInvoice.id, email = model.InvoiceEmail }; order.Payments = new List<Orders.Models.Payment> { new Orders.Models.Payment { OrderID = order.OrderID, PaymentDetails = JsonConvert.SerializeObject(invoiceDetails), PaymentType = PaymentType.PendingInvoice } }; order.OrderStatus = OrderStatus.Pending; await repository.UpdateAsync(order, order.OrderID); return Ok(new { OrderID = order.OrderID }); } catch (Exception ex) { await Logger.WriteLog(LogType.Error, ex.ToString()); throw ex; } default: return Ok(); } }