public async Task <ServiceResponse <int> > GetPrice(string ticketType) { ServiceResponse <int> response = new ServiceResponse <int>(); ServiceResponse <int> rpcResponse = new ServiceResponse <int>(); int userId = GetUserId(); Enums.UserType userType = Enums.UserType.RegulerUser; try { if (userId != -1) { // RPC call to account service to get user type var res = await _rpcClient.CallAsync(userId.ToString()); Console.WriteLine("test1"); rpcResponse = System.Text.Json.JsonSerializer.Deserialize <ServiceResponse <int> >(res); Console.WriteLine("test2"); if (rpcResponse.Success) { Console.WriteLine("test3"); userType = (Enums.UserType)rpcResponse.Data; } Console.WriteLine("test4"); } } catch (Exception) { response.Message = "Possible discount couldn't be processed. Price shown is without discount.\n"; } try { Enums.TicketType type = (Enums.TicketType)Enum.Parse(typeof(Enums.TicketType), ticketType); PricelistItem pricelistItem = await _context.PricelistItems.FirstOrDefaultAsync(pi => pi.Pricelist.Active == true && pi.Item.TicketType == type); Coefficient coef = await _context.Coefficients.FirstOrDefaultAsync(c => c.UserType == userType); response.Data = (int)Math.Round(pricelistItem.Price * coef.Value); } catch (Exception e) { response.Success = false; response.Message = e.Message; } return(response); }
public async Task <ServiceResponse <AddedTicketDTO> > CreateTicket(string ticketType, int ticketPrice, string email) { ServiceResponse <AddedTicketDTO> response = new ServiceResponse <AddedTicketDTO>(); Enums.TicketType type = (Enums.TicketType)Enum.Parse(typeof(Enums.TicketType), ticketType); PricelistItem pricelistItem = await _context.PricelistItems.FirstOrDefaultAsync(pi => pi.Pricelist.Active == true && pi.Item.TicketType == type); Ticket ticket = new Ticket() { IssueTime = DateTime.Now, PricelistItemId = pricelistItem.Id, Valid = true, Price = (double)ticketPrice }; int userId = GetUserId(); if (userId != -1) { ticket.UserId = userId; } try { await _context.Tickets.AddAsync(ticket); await _context.SaveChangesAsync(); response.Data = new AddedTicketDTO() { Id = ticket.Id, Price = ticket.Price }; Utility.SendEmail(email, "Ticket purchase confirmation", "You have successfully purchased a ticket. Ticket id: " + ticket.Id); } catch (Exception e) { response.Success = false; response.Message = e.Message; } return(response); }
public ActionResult Confirmation() { Database.ReadData(); User u = (User)Session["user"]; Show show = new Show(); foreach (Show s in Database.shows) { if (s.Name.Equals(Request["ID"])) { show = s; ViewBag.showBuy = s; } } int number = Int32.Parse(Request["amount"]); double price; double raw_price; Enums.TicketType type = new Enums.TicketType(); if (Request["type"].Equals("Regular")) { type = Enums.TicketType.Regular; } if (Request["type"].Equals("FanPit")) { type = Enums.TicketType.FanPit; } if (Request["type"].Equals("VIP")) { type = Enums.TicketType.VIP; } if (show.NumberOfSeats >= number) { if (u.Type.Discount > 0) { ViewBag.Discount = u.Type.Discount; if (type == Enums.TicketType.Regular) { raw_price = show.Price * number; price = raw_price - (u.Type.Discount / 100 * raw_price); ViewBag.price = price; } else if (type == Enums.TicketType.FanPit) { raw_price = show.Price * number * 2; price = raw_price - (u.Type.Discount / 100 * raw_price); ViewBag.price = price; } else if (type == Enums.TicketType.VIP) { raw_price = show.Price * number * 4; price = raw_price - (u.Type.Discount / 100 * raw_price); ViewBag.price = price; } } else { if (type == Enums.TicketType.Regular) { price = show.Price * number; ViewBag.price = price; } else if (type == Enums.TicketType.FanPit) { price = show.Price * number * 2; ViewBag.price = price; } else if (type == Enums.TicketType.VIP) { price = show.Price * number * 4; ViewBag.price = price; } } } else { ViewBag.showBuy = show; ViewBag.seatnumber = show.NumberOfSeats; return(View("~/Views/Buyer/NoTickets.cshtml")); } ViewBag.type = type; ViewBag.ticketnumber = number; return(View("~/Views/Buyer/Confirmation.cshtml")); }
public ActionResult Buy() { Database.ReadData(); int amount = Int32.Parse(Request["ticketNumber"]); User u = (User)Session["user"]; Enums.TicketType type = new Enums.TicketType(); if (Request["type"].Equals("Regular")) { type = Enums.TicketType.Regular; } if (Request["type"].Equals("FanPit")) { type = Enums.TicketType.FanPit; } if (Request["type"].Equals("VIP")) { type = Enums.TicketType.VIP; } foreach (Show s in Database.shows) { if (Request["ID"].Equals(s.Name)) { int maxId = -1; foreach (var item in Database.tickets) { if (item.ID > maxId) { maxId = item.ID; } } Ticket t = new Ticket(s, s.Start, float.Parse(Request["price"]), u.Username, Enums.TicketStatus.Reserved, s.Type, amount); t.ID = maxId + 1; s.NumberOfSeats -= amount; Database.tickets.Add(t); Database.UpdateData(); if (type == Enums.TicketType.Regular) { u.Points = u.Points + (Int32.Parse(s.Price.ToString()) / 1000 * 133); u.Type.ReqPoints = u.Type.ReqPoints - u.Points; } if (type == Enums.TicketType.FanPit) { u.Points = u.Points + ((Int32.Parse(s.Price.ToString()) * 2) / 1000 * 133); u.Type.ReqPoints = u.Type.ReqPoints - u.Points; } if (type == Enums.TicketType.VIP) { u.Points = u.Points + ((Int32.Parse(s.Price.ToString()) * 4) / 1000 * 133); u.Type.ReqPoints = u.Type.ReqPoints - u.Points; } int points = u.Points; if (u.Points >= 1000) { u.Type.Name = "Bronze"; u.Type.Discount = 1; u.Type.ReqPoints = 3000; } else if (u.Points >= 3000) { u.Type.Name = "Silver"; u.Type.Discount = 10; u.Type.ReqPoints = 5000; } else if (u.Points >= 5000) { u.Type.Name = "Gold"; u.Type.Discount = 20; u.Type.ReqPoints = 10000; } Database.users.Remove(Database.users.FirstOrDefault(x => x.Username == u.Username)); Database.users.Add(u); Database.UpdateData(); } } return(View("~/Views/Buyer/SuccessfulBuy.cshtml")); }