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);
        }
示例#3
0
        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"));
        }
示例#4
0
        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"));
        }