public ActionResult RateUser(int?id, ShowsViewModel model)
        {
            User_Show      show      = db.User_Show.Where(s => s.ShowID == id).FirstOrDefault();
            ShowsViewModel viewModel = new ShowsViewModel(show);
            // Converting string into int
            int    numStars = getRating(model.RatingValue);
            string comment  = model.Comment;

            Models.Rating userRating = new Models.Rating();

            if (User.IsInRole("VenueOwner"))
            {
                User user = db.Users.Where(u => u.ID == viewModel.MusicianID).FirstOrDefault();
                userRating.UserID  = viewModel.MusicianID;
                userRating.Value   = numStars;
                userRating.Comment = comment;
                show.VenueRated    = true;
                user.AveRating     = CalcAveRating(user.ID, numStars);
            }
            else if (User.IsInRole("Musician"))
            {
                User user = db.Users.Where(u => u.ID == viewModel.VenueID).FirstOrDefault();
                userRating.UserID  = viewModel.VenueID;
                userRating.Value   = numStars;
                userRating.Comment = comment;
                show.MusicianRated = true;
                user.AveRating     = CalcAveRating(user.ID, numStars);
            }

            db.Ratings.Add(userRating);
            db.SaveChanges();

            return(RedirectToAction("MyShows"));
        }
        public ActionResult RateUser(int?id)
        {
            User_Show      show      = db.User_Show.Where(s => s.ShowID == id).FirstOrDefault();
            ShowsViewModel viewModel = new ShowsViewModel(show);

            return(View(viewModel));
        }
        // GET: Shows/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Show show = db.Shows.Find(id);

            if (show == null)
            {
                return(HttpNotFound());
            }
            User_Show      user_Show = db.User_Show.Where(u => u.ShowID == id).First();
            ShowsViewModel viewModel = new ShowsViewModel(user_Show);

            viewModel.VenueList = new SelectList(db.Venues.Where(s => s.UserID == show.Venue.UserID), "ID", "VenueName");
            return(View(viewModel));
        }
        public async Task <ActionResult> CreateShow(int?id, MusicianDetailViewModel viewModel)
        {
            // No user id passed through
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            User user = db.Users.Find(id);

            // If users doesn't exisit
            if (user == null)
            {
                return(HttpNotFound());
            }

            // Viewmodel for Musician
            MusicianDetailViewModel model = new MusicianDetailViewModel(user);

            var IdentityID = User.Identity.GetUserId();

            model.VenueList = new SelectList(db.Venues.Where(v => v.User.ASPNetIdentityID == IdentityID), "ID", "VenueName");

            if (ModelState.IsValid)
            {
                // Get user's calendar credentials
                UserCredential credential = await GetCredentialForApiAsync();

                // Create Google Calendar API service.
                var service = new CalendarService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName       = "Harmony",
                });

                // Fetch the list of calendars.
                var calendars = await service.CalendarList.List().ExecuteAsync();

                // create a new event to google calendar
                if (calendars != null)
                {
                    Event newEvent = new Event()
                    {
                        Id          = Guid.NewGuid().ToString().Replace('-', '0'),
                        Summary     = viewModel.Title,
                        Description = viewModel.ShowDescription,
                        Location    = db.Venues.Find(viewModel.VenueID).VenueName,
                        Start       = new EventDateTime()
                        {
                            DateTime = viewModel.StartDateTime.AddHours(7.0),
                            TimeZone = "America/Los_Angeles"
                        },
                        End = new EventDateTime()
                        {
                            DateTime = viewModel.EndDateTime.AddHours(7.0),
                            TimeZone = "America/Los_Angeles"
                        },
                        Attendees = new List <EventAttendee>()
                        {
                            new EventAttendee()
                            {
                                Email = model.Email
                            }
                        },
                        GuestsCanModify = true
                    };
                    var newEventRequest = service.Events.Insert(newEvent, "primary");
                    // This allows attendees to get email notification
                    newEventRequest.SendNotifications = true;
                    var eventResult = newEventRequest.Execute();

                    // add the new show to db
                    Show newShow = new Show
                    {
                        Title         = viewModel.Title,
                        StartDateTime = viewModel.StartDateTime,
                        EndDateTime   = viewModel.EndDateTime,
                        Description   = viewModel.ShowDescription,
                        DateBooked    = newEvent.Created ?? DateTime.Now,
                        VenueID       = viewModel.VenueID,
                        Status        = "Pending",
                        GoogleEventID = newEvent.Id,
                        ShowOwnerID   = db.Users.Where(u => u.ASPNetIdentityID == IdentityID).First().ID
                    };
                    db.Shows.Add(newShow);
                    User_Show user_Show = new User_Show
                    {
                        MusicianID    = model.ID,
                        VenueOwnerID  = db.Users.Where(u => u.ASPNetIdentityID == IdentityID).First().ID,
                        ShowID        = newShow.ID,
                        MusicianRated = false,
                        VenueRated    = false
                    };
                    db.User_Show.Add(user_Show);
                    db.SaveChanges();
                }

                return(RedirectToAction("MusicianDetails", new { id = model.ID }));
            }
            return(View(model));
        }