public IQueryable<Track> GetTracks([QueryString("id")] int? AlbumId,
            [QueryString("mediatypeid")] int? MediaTypeId, [QueryString("genreid")] int? GenreId,
            [QueryString("artistid")] int? ArtistId)
        {
            var _db = new MyTunesContext();
            IQueryable<Track> query = _db.Tracks;
            if (AlbumId.HasValue && AlbumId > 0)
            {
                query = query.Where(p => p.AlbumId == AlbumId);
            }
            else if (MediaTypeId.HasValue && MediaTypeId > 0)
            {
                query = query.Where(p => p.MediaTypeId == MediaTypeId);
            }

            else if (GenreId.HasValue && GenreId > 0)
            {
                query = query.Where(p => p.GenreId == GenreId);
            }

            else if (ArtistId.HasValue && ArtistId > 0)
            {
                query = query.Where(p => p.Album.ArtistId == ArtistId);
            }

            return query;
        }
        public ActionResult About(){

            MyTunesContext db = new MyTunesContext();

            int countALLTracks = (from track in db.Tracks
                                    select track).Count();
            ViewBag.AllTracks = countALLTracks;

            int countALLAlbums = (from album in db.Albums
                                  select album).Count();
            ViewBag.AllAlbums = countALLAlbums;

            int countALLArtists = (from artist in db.Artists
                                  select artist).Count();
            ViewBag.AllArtists = countALLArtists;

            var largestTrack = (from track in db.Tracks select track.Bytes).Max();
            ViewBag.LargestTrack = largestTrack;

            var longestTrack = (from track in db.Tracks select track.Milliseconds).Max();
            ViewBag.LongestTrack = longestTrack;

            var artistWithMostTrack = from artist in db.Tracks
                                      select artist.Name;

            ViewBag.ArtistWithTrack = artistWithMostTrack;

            return View();

        }
 public void Dispose()
 {
     if (_db != null)
     {
         _db.Dispose();
         _db = null;
     }
 }
  public IQueryable<MediaType> GetMediaTypes()
  {
    
      var _db = new MyTunes.Models.MyTunesContext();
      IQueryable<MediaType> query = _db.MediaTypes;
      return query;
 
  }
 public IQueryable<Track> GetTrack([QueryString("trackID")] int? trackId)
 {
     var _db = new MyTunes.Models.MyTunesContext();
     IQueryable<Track> query = _db.Tracks;
     if (trackId.HasValue && trackId > 0)
     {
         query = query.Where(p => p.TrackId == trackId);
     }
     else
     {
         query = null;
     }
     return query;
 }
        public bool AddAlbum(string AlbumName, string AlbumArtist)
        {
            var myAlbum = new Album();
            myAlbum.Title = AlbumName;
            myAlbum.ArtistId = Convert.ToInt32(AlbumArtist);

            using (MyTunesContext _db = new MyTunesContext())
            {
                // Add Track to DB.
                _db.Albums.Add(myAlbum);
                _db.SaveChanges();
            }
            // Success.
            return true;
        }
        public bool AddMediaType(string MediaTypeName, string MediaCategory)
        {
            var myMediaType = new MediaType();
            myMediaType.Name = MediaTypeName;
            myMediaType.MediaCategoryId = Convert.ToInt32(MediaCategory);

            using (MyTunesContext _db = new MyTunesContext())
            {
                // Add Track to DB.
                _db.MediaTypes.Add(myMediaType);
                _db.SaveChanges();
            }
            // Success.
            return true;
        }
        public bool AddArtist(string ArtistName)
        {
            var myArtist = new Artist();
            myArtist.Name = ArtistName;
            

            using (MyTunesContext _db = new MyTunesContext())
            {
                // Add Track to DB.
                _db.Artists.Add(myArtist);
                _db.SaveChanges();
            }
            // Success.
            return true;
        }
        public ActionResult TrackByMediaCategory()
        {

            MyTunesContext db = new MyTunesContext();

            IQueryable<CountTrackByMediaCategory> data = from track in db.Tracks
                                                     group track by track.MediaType.MediaCategory.Name into mediaCategoryGroup
                                                     select new CountTrackByMediaCategory()
                                                     {
                                                         MediaCategory = mediaCategoryGroup.Key,
                                                         TrackCount = mediaCategoryGroup.Count()
                                                     };
            return View(data.ToList());

        }
        public bool AddGenre(string GenreName)
        {
            var myGenre = new Genre();
            myGenre.Name = GenreName;


            using (MyTunesContext _db = new MyTunesContext())
            {
                // Add Track to DB.
                _db.Genres.Add(myGenre);
                _db.SaveChanges();
            }
            // Success.
            return true;
        }
        public ActionResult TrackByGenre()
        {

            MyTunesContext db = new MyTunesContext();

            IQueryable<CountTrackbyGenre> data = from track in db.Tracks
                                                 group track by track.Genre.Name into genreGroup
                                                 select new CountTrackbyGenre()
                                                 {
                                                     GenreType = genreGroup.Key,
                                                     TrackCount = genreGroup.Count()
                                                 };
            return View(data.ToList());
            
        }
        protected void RemoveTrackButton_Click(object sender, EventArgs e)
        {
            using (var _db = new MyTunes.Models.MyTunesContext())
            {
                int TrackId = Convert.ToInt16(DropDownRemoveTrack.SelectedValue);
                var myItem = (from c in _db.Tracks where c.TrackId == TrackId select c).FirstOrDefault();
                if (myItem != null)
                {
                    _db.Tracks.Remove(myItem);
                    _db.SaveChanges();

                    // Reload the page.
                    string pageUrl = Request.Url.AbsoluteUri.Substring(0, Request.Url.AbsoluteUri.Count() - Request.Url.Query.Count());
                    Response.Redirect(pageUrl + "?TrackAction=remove");
                }
                else
                {
                    LabelRemoveStatus.Text = "Unable to locate Track.";
                }
            }
        }
        public bool AddTrack(string TrackName, string TrackPrice, string TrackAlbum,string TrackMediaType, string TrackGenre)
        {
            var myTrack = new Track();
            myTrack.Name = TrackName;
           
            myTrack.UnitPrice = Convert.ToDecimal(TrackPrice);
           
            myTrack.AlbumId = Convert.ToInt32(TrackAlbum);
          
            myTrack.MediaTypeId = Convert.ToInt32(TrackMediaType);

            myTrack.GenreId = Convert.ToInt32(TrackGenre);

            using (MyTunesContext _db = new MyTunesContext())
            {
                // Add Track to DB.
                _db.Tracks.Add(myTrack);
                _db.SaveChanges();
            }
            // Success.
            return true;
        }
 public IQueryable<Album> GetAlbums()
 {
     var _db = new MyTunes.Models.MyTunesContext();
     IQueryable<Album> query = _db.Albums;
     return query;
 }
 public void UpdateItem(string updateCartID, int updateTrackId, int quantity)
 {
     using (var _db = new MyTunes.Models.MyTunesContext())
     {
         try
         {
             var myItem = (from c in _db.CartItems where c.CartId == updateCartID && c.Track.TrackId == updateTrackId select c).FirstOrDefault();
             if (myItem != null)
             {
                 myItem.Quantity = quantity;
                 _db.SaveChanges();
             }
         }
         catch (Exception exp)
         {
             throw new Exception("ERROR: Unable to Update Cart Item - " + exp.Message.ToString(), exp);
         }
     }
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                // Verify user has completed the checkout process.
                if ((string)Session["userCheckoutCompleted"] != "true")
                {
                    Session["userCheckoutCompleted"] = string.Empty;
                    Response.Redirect("CheckoutError.aspx?" + "Desc=Unvalidated%20Checkout.");
                }

                NVPAPICaller payPalCaller = new NVPAPICaller();

                string retMsg = "";
                string token = "";
                string finalPaymentAmount = "";
                string PayerID = "";
                NVPCodec decoder = new NVPCodec();

                token = Session["token"].ToString();
                PayerID = Session["payerId"].ToString();
                finalPaymentAmount = Session["payment_amt"].ToString();

                bool ret = payPalCaller.DoCheckoutPayment(finalPaymentAmount, token, PayerID, ref decoder, ref retMsg);
                if (ret)
                {
                    // Retrieve PayPal confirmation value.
                    string PaymentConfirmation = decoder["PAYMENTINFO_0_TRANSACTIONID"].ToString();
                    TransactionId.Text = PaymentConfirmation;



                    MyTunesContext _db = new MyTunesContext();
                    // Get the current order id.
                    int currentOrderId = -1;
                    if (Session["currentOrderId"] != string.Empty)
                    {
                        currentOrderId = Convert.ToInt32(Session["currentOrderID"]);
                    }
                    Order myCurrentOrder;
                    if (currentOrderId >= 0)
                    {
                        // Get the order based on order id.
                        myCurrentOrder = _db.Orders.Single(o => o.OrderId == currentOrderId);
                        // Update the order to reflect payment has been completed.
                        myCurrentOrder.PaymentTransactionId = PaymentConfirmation;
                        // Save to DB.
                        _db.SaveChanges();
                    }

                    // Clear shopping cart.
                    using (MyTunes.Logic.ShoppingCartActions usersShoppingCart =
                        new MyTunes.Logic.ShoppingCartActions())
                    {
                        usersShoppingCart.EmptyCart();
                    }

                    // Clear order id.
                    Session["currentOrderId"] = string.Empty;
                }
                else
                {
                    Response.Redirect("CheckoutError.aspx?" + retMsg);
                }
            }
        }
 public IQueryable GetMediaCategories()
 {
     var _db = new MyTunes.Models.MyTunesContext();
     IQueryable query = _db.MediaCategories;
     return query;
 }
 public IQueryable GetTracks()
 {
     var _db = new MyTunes.Models.MyTunesContext();
     IQueryable query = _db.Tracks;
     return query;
 }
 public void RemoveItem(string removeCartID, int removeTrackId)
 {
     using (var _db = new MyTunes.Models.MyTunesContext())
     {
         try
         {
             var myItem = (from c in _db.CartItems where c.CartId == removeCartID && c.Track.TrackId == removeTrackId select c).FirstOrDefault();
             if (myItem != null)
             {
                 // Remove Item.
                 _db.CartItems.Remove(myItem);
                 _db.SaveChanges();
             }
         }
         catch (Exception exp)
         {
             throw new Exception("ERROR: Unable to Remove Cart Item - " + exp.Message.ToString(), exp);
         }
     }
 }
 public IQueryable<Genre> GetGenres()
 {
     var _db = new MyTunes.Models.MyTunesContext();
     IQueryable<Genre> query = _db.Genres;
     return query;
 }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                NVPAPICaller payPalCaller = new NVPAPICaller();

                string retMsg = "";
                string token = "";
                string PayerID = "";
                NVPCodec decoder = new NVPCodec();
                token = Session["token"].ToString();

                bool ret = payPalCaller.GetCheckoutDetails(token, ref PayerID, ref decoder, ref retMsg);
                if (ret)
                {
                    Session["payerId"] = PayerID;

                    var myOrder = new Order();
                    myOrder.OrderDate = Convert.ToDateTime(decoder["TIMESTAMP"].ToString());
                    myOrder.Username = User.Identity.Name;
                    myOrder.FirstName = decoder["FIRSTNAME"].ToString();
                    myOrder.LastName = decoder["LASTNAME"].ToString();
                    myOrder.Address = decoder["SHIPTOSTREET"].ToString();
                    myOrder.City = decoder["SHIPTOCITY"].ToString();
                    myOrder.State = decoder["SHIPTOSTATE"].ToString();
                    myOrder.PostalCode = decoder["SHIPTOZIP"].ToString();
                    myOrder.Country = decoder["SHIPTOCOUNTRYCODE"].ToString();
                    myOrder.Email = decoder["EMAIL"].ToString();
                    myOrder.Total = Convert.ToDecimal(decoder["AMT"].ToString());

                    // Verify total payment amount as set on CheckoutStart.aspx.
                    try
                    {
                        decimal paymentAmountOnCheckout = Convert.ToDecimal(Session["payment_amt"].ToString());
                        decimal paymentAmoutFromPayPal = Convert.ToDecimal(decoder["AMT"].ToString());
                        if (paymentAmountOnCheckout != paymentAmoutFromPayPal)
                        {
                            Response.Redirect("CheckoutError.aspx?" + "Desc=Amount%20total%20mismatch.");
                        }
                    }
                    catch (Exception)
                    {
                        Response.Redirect("CheckoutError.aspx?" + "Desc=Amount%20total%20mismatch.");
                    }

                    // Get DB context.
                    MyTunesContext _db = new MyTunesContext();

                    // Add order to DB.
                    _db.Orders.Add(myOrder);
                    _db.SaveChanges();

                    // Get the shopping cart items and process them.
                    using (MyTunes.Logic.ShoppingCartActions usersShoppingCart = new MyTunes.Logic.ShoppingCartActions())
                    {
                        List<CartItem> myOrderList = usersShoppingCart.GetCartItems();

                        // Add OrderDetail information to the DB for each product purchased.
                        for (int i = 0; i < myOrderList.Count; i++)
                        {
                            // Create a new OrderDetail object.
                            var myOrderDetail = new OrderDetail();
                            myOrderDetail.OrderId = myOrder.OrderId;
                            myOrderDetail.Username = User.Identity.Name;
                            myOrderDetail.ProductId = myOrderList[i].TrackId;
                            //myOrderDetail.Quantity = myOrderList[i].Quantity;
                            myOrderDetail.UnitPrice = (double) myOrderList[i].Track.UnitPrice;

                            // Add OrderDetail to DB.
                            _db.OrderDetails.Add(myOrderDetail);
                            _db.SaveChanges();
                        }

                        // Set OrderId.
                        Session["currentOrderId"] = myOrder.OrderId;

                        // Display Order information.
                        List<Order> orderList = new List<Order>();
                        orderList.Add(myOrder);
                        ShipInfo.DataSource = orderList;
                        ShipInfo.DataBind();

                        // Display OrderDetails.
                        OrderItemList.DataSource = myOrderList;
                        OrderItemList.DataBind();
                    }
                }
                else
                {
                    Response.Redirect("CheckoutError.aspx?" + retMsg);
                }
            }
        }
 public IQueryable<Artist> GetArtists()
 {
     var _db = new MyTunes.Models.MyTunesContext();
     IQueryable<Artist> query = _db.Artists;
     return query;
 }
 public void UpdateShoppingCartDatabase(string cartId, ShoppingCartUpdates[] CartItemUpdates)
 {
     using (var db = new MyTunes.Models.MyTunesContext())
     {
         try
         {
             int CartItemCount = CartItemUpdates.Count();
             List<CartItem> myCart = GetCartItems();
             foreach (var cartItem in myCart)
             {
                 // Iterate through all rows within shopping cart list
                 for (int i = 0; i < CartItemCount; i++)
                 {
                     if (cartItem.Track.TrackId == CartItemUpdates[i].TrackId)
                     {
                         if (CartItemUpdates[i].PurchaseQuantity < 1 || CartItemUpdates[i].RemoveItem == true)
                         {
                             RemoveItem(cartId, cartItem.TrackId);
                         }
                         else
                         {
                             UpdateItem(cartId, cartItem.TrackId, CartItemUpdates[i].PurchaseQuantity);
                         }
                     }
                 }
             }
         }
         catch (Exception exp)
         {
             throw new Exception("ERROR: Unable to Update Cart Database - " + exp.Message.ToString(), exp);
         }
     }
 }