public ActionResult genreReport() { var query = from g in db.Genres select g; List <Genre> allGenres = query.ToList(); List <GenreReportViewModel> grvmList = new List <GenreReportViewModel>(); foreach (Genre g in allGenres) { GenreReportViewModel grvm = new GenreReportViewModel(); grvm.totalRev = 0.ToString("c"); grvm.songRev = 0.ToString("c"); grvm.songCount = 0; grvm.albumCount = 0; grvm.topArtist = "N/A"; grvm.Genre = g; Decimal topRevenue = 0; foreach (Artist a in g.GenreArtists) { Int32 artistSongPurchaseCount = 0; Int32 artistAlbumPurchaseCount = 0; Decimal artistSongRev = 0; Decimal artistAlbumRev = 0; Decimal totalArtistRev = 0; var query2 = from pi in db.PurchaseItems select pi; List <PurchaseItem> allPurchaseItems = query2.ToList(); List <PurchaseItem> songsPurchased = new List <PurchaseItem>(); List <PurchaseItem> albumsPurchased = new List <PurchaseItem>(); foreach (PurchaseItem pi in allPurchaseItems) { if (!pi.isAlbum) { if (pi.PurchaseItemSong.SongArtist.Contains(a)) { songsPurchased.Add(pi); } } else { if (pi.PurchaseItemAlbum.AlbumArtist.Contains(a)) { albumsPurchased.Add(pi); } } } artistSongPurchaseCount = songsPurchased.Count(); foreach (PurchaseItem pi in songsPurchased) { artistSongRev += pi.PurchaseItemPrice; } artistAlbumPurchaseCount = albumsPurchased.Count(); foreach (PurchaseItem pi in albumsPurchased) { artistAlbumRev += pi.PurchaseItemPrice; } totalArtistRev = artistAlbumRev + artistSongRev; if (totalArtistRev > topRevenue) { topRevenue = totalArtistRev; grvm.topArtist = a.ArtistName; grvm.albumRev = artistAlbumRev.ToString("c"); grvm.albumCount = artistAlbumPurchaseCount; grvm.songRev = artistSongRev.ToString("c"); grvm.songCount = artistSongPurchaseCount; grvm.totalRev = totalArtistRev.ToString("c"); } } grvmList.Add(grvm); } grvmList = grvmList.OrderByDescending(x => x.albumRev).ToList(); return(View(grvmList)); }
public ActionResult GenreReport() { List <Genre> Genres = db.Genres.ToList(); List <GenreReportViewModel> TopArtists = new List <GenreReportViewModel>(); foreach (Genre genre in Genres) { List <Artist> Artists = db.Artists.ToList(); GenreReportViewModel TopArtist = new GenreReportViewModel(); foreach (Artist artist in Artists) { if (artist.Genres.Contains(genre)) { int songpurchases = 0; int albumpurchases = 0; decimal songrevenue = 0.00m; decimal albumrevenue = 0.00m; decimal totalrevenue = 0.00m; GenreReportViewModel artistinstance = new GenreReportViewModel(); List <Song> SongsByArtist = db.Songs.Where(x => x.Artists.Contains(artist)).ToList(); foreach (Song song in SongsByArtist) { Int32 SaleCount; SaleCount = 0; Decimal TotalSongRevenue; TotalSongRevenue = 0.00m; List <OrderDetail> OrderDetails = db.OrderDetails.Where(x => x.Product.ContentID == song.ContentID).ToList(); foreach (OrderDetail orderdetail in OrderDetails) { SaleCount += 1; TotalSongRevenue += orderdetail.ExtendedPrice; } songpurchases += SaleCount; songrevenue += TotalSongRevenue; } List <Album> AlbumsByArtist = db.Albums.Where(x => x.Artists.Contains(artist)).ToList(); foreach (Album album in AlbumsByArtist) { Int32 SaleCount; SaleCount = 0; Decimal TotalAlbumRevenue; TotalAlbumRevenue = 0.00m; List <OrderDetail> OrderDetails = db.OrderDetails.Where(x => x.Product.ContentID == album.ContentID).ToList(); foreach (OrderDetail orderdetail in OrderDetails) { SaleCount += 1; TotalAlbumRevenue += orderdetail.ExtendedPrice; } albumpurchases += SaleCount; albumrevenue += TotalAlbumRevenue; } artistinstance.ArtistName = artist.ArtistName; artistinstance.GenreName = genre.GenreName; totalrevenue = albumrevenue + songrevenue; artistinstance.AlbumPurchases = albumpurchases; artistinstance.AlbumRevenue = albumrevenue; artistinstance.SongPurchases = songpurchases; artistinstance.SongRevenue = songrevenue; artistinstance.TotalRevenue = totalrevenue; if (totalrevenue >= TopArtist.TotalRevenue) { TopArtist = artistinstance; } } } //Add top artist of that genre to the list TopArtists.Add(TopArtist); } ViewBag.TopArtists = TopArtists; return(View()); }