public IHttpActionResult Buy(TicketBuyModel model) { int hours = model.Hours; string currentUserId = this.User.Identity.GetUserId(); User user = this.context.Users.FirstOrDefault(u => u.Id == currentUserId); decimal ticketPrice = ((hours - 1) * TicketPricePerHour) + InitialTicketPrice; // get discount for one or more weekend tickets if (hours > OneWeekInHours) { ticketPrice = ticketPrice - (ticketPrice * DiscountValue); } if (user.Balance - ticketPrice < 0) { return(this.BadRequest(string.Format("Not enough money! Ticket price: {0}. Your balance: {1}", ticketPrice, user.Balance))); } Ticket ticket = this.ticketService.Create(hours, ticketPrice); user.Balance -= ticketPrice; user.Tickets.Add(ticket); context.SaveChanges(); return(this.Created("/", new { QRCode = ticket.QRCode, Cost = ticketPrice })); }
public async Task <ActionResult> Buy(IFormCollection collection) { try { var buyModel = await PrepareTicketBuyViewModel(Guid.Parse(collection["evnt.Id"])); if (buyModel.evnt == null || buyModel.evnt.TotalAvailableTickets < 1) { return(View("Error")); } var paymentData = new PaymentData() { CardNumber = collection["paymentData.CardNumber"], NameOnCard = collection["paymentData.NameOnCard"], ValidMonth = Int32.Parse(collection["paymentData.ValidMonth"]), ValidYear = Int32.Parse(collection["paymentData.ValidYear"]), SecurityCode = collection["paymentData.SecurityCode"], Value = buyModel.evnt.Price }; paymentData = await MakePayment(paymentData); buyModel.paymentData = paymentData; if (buyModel.user.Id == Guid.Empty) { buyModel.user = await UserManager.GetUserByAuthId(buyModel.user); } if (paymentData.TransactionSuccessful) { //var ticket = await TicketManager.IssueEventTicket(buyModel.evnt, buyModel.user, paymentData.ToString()); var ticketBuyModel = new TicketBuyModel() { EventId = buyModel.evnt.Id, UserId = buyModel.user.Id, PaymentData = paymentData.ToString() }; var ticket = await IssueTicket(ticketBuyModel); return(RedirectToAction("ViewTicket", new { id = ticket.Id })); } return(View("Error")); } catch { return(View("Error")); } }
public async Task <Ticket> IssueTicket(TicketBuyModel buyModel) { using (var client = new HttpClient()) { var request = new HttpRequestMessage { RequestUri = new Uri(Configuration["TicketApiUrl"]), Method = HttpMethod.Post }; request.Content = new StringContent(JsonConvert.SerializeObject(buyModel)); request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain"); //request.Content.Headers.ContentType = new MediaTypeHeaderValue(parameters.ContentType); var result = client.SendAsync(request).Result; result.EnsureSuccessStatusCode(); return(JsonConvert.DeserializeObject <Ticket>(await result.Content.ReadAsStringAsync())); } }
public async Task <Ticket> IssueTicket(TicketBuyModel buyModel) { using (var httpClientHandler = new HttpClientHandler()) { httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return(true); }; using (var client = new HttpClient(httpClientHandler)) { var request = new HttpRequestMessage { RequestUri = new Uri(Configuration["TicketApiUrl"]), Method = HttpMethod.Post }; request.Content = new StringContent(JsonConvert.SerializeObject(buyModel)); request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain"); //request.Content.Headers.ContentType = new MediaTypeHeaderValue(parameters.ContentType); var result = client.SendAsync(request).Result; result.EnsureSuccessStatusCode(); return(JsonConvert.DeserializeObject <Ticket>(await result.Content.ReadAsStringAsync())); } } }