/// <summary> /// Gets all finance result for admin user /// </summary> /// <returns></returns> private PayResultsViewModel GetAllPays(int currencyID) { using (var payTransRepo = Factory.GetPaymentTransactionRepository()) { //var s = payTransRepo.GetAll(a => a.Currency).Sum(z => z.Totals); var s = payTransRepo.GetAll(a => a.Currency) .GroupBy(z => z.Currency) .Select(g => new PayResultViewModel { Currency = g.Key, Totals = g.Sum(t => t.Totals), Royalties = g.Sum(t => t.Totals) * (decimal).9, CurrencyID = g.Key.Id, CrossCourse = Factory.GetCurrencyRateRepository() .FirstOrDefault(Rate => Rate.TargetCurrencyId == currencyID && Rate.CurrencyId == g.Key.Id) == null ? 1 : Factory.GetCurrencyRateRepository() .FirstOrDefault(Rate => Rate.TargetCurrencyId == currencyID && Rate.CurrencyId == g.Key.Id).CrossCourse, }).ToArray(); if (s != null) { var result = new PayResultsViewModel() { Payments = s, Total = s.Sum(t => t.Totals * t.CrossCourse), Royalties = s.Sum(t => t.Totals * t.CrossCourse * (decimal)0.9) }; return(result); } } return(new PayResultsViewModel()); }
/// <summary> /// Gets financial result for admin or seller user in certain currency /// </summary> /// <param name="currentUser">user</param> /// <param name="currentUserCurrencyId">target currency id</param> /// <returns></returns> public PayResultsViewModel GetPaysForUser(CurrentUser currentUser, int currentUserCurrencyId) { PayResultsViewModel pays = new PayResultsViewModel() { Payments = new List <PayResultViewModel>() }; if (currentUser.IsInRole(UserRoles.Seller)) { pays = GetSellerPays(currentUser.Id, currentUserCurrencyId); } ; if (currentUser.IsInRole(UserRoles.Admin)) { pays = GetAllPays(currentUserCurrencyId); } return(pays); }
/// <summary> /// Get pay results view model for certain seller items /// </summary> /// <param name="userID">seller user id</param> /// <param name="currencyID">current currency id</param> /// <returns></returns> private PayResultsViewModel GetSellerPays(int userID, int currencyID) { var result = new PayResultsViewModel() { Payments = new List <PayResultViewModel>(), Total = 0, Royalties = 0 }; using (var purchasedItems = Factory.GetPurchasedAlbumRepository()) { var s = purchasedItems.GetAll(a => a.Album.OwnerId == userID, a => a.Currency) .GroupBy(z => z.Currency) .Select(g => new PayResultViewModel { Currency = g.Key, Totals = g.Sum(t => t.Price), Royalties = g.Sum(t => t.Price) * (decimal).9, CurrencyID = g.Key.Id, CrossCourse = Factory.GetCurrencyRateRepository() .FirstOrDefault(Rate => Rate.TargetCurrencyId == currencyID && Rate.CurrencyId == g.Key.Id) == null ? 1 : Factory.GetCurrencyRateRepository() .FirstOrDefault(Rate => Rate.TargetCurrencyId == currencyID && Rate.CurrencyId == g.Key.Id).CrossCourse }).ToArray(); if (s != null) { result = new PayResultsViewModel() { Payments = s, Total = s.Sum(t => t.Totals * t.CrossCourse), Royalties = s.Sum(t => t.Totals * t.CrossCourse * (decimal)0.9) }; } }; using (var purchasedItems = Factory.GetPurchasedTrackRepository()) { var s = purchasedItems.GetAll(a => a.Track.OwnerId == userID, a => a.Currency) .GroupBy(z => z.Currency) .Select(g => new PayResultViewModel { Currency = g.Key, Totals = g.Sum(t => t.Price), Royalties = g.Sum(t => t.Price) * (decimal).9, CurrencyID = g.Key.Id, CrossCourse = Factory.GetCurrencyRateRepository() .FirstOrDefault(Rate => Rate.TargetCurrencyId == currencyID && Rate.CurrencyId == g.Key.Id) == null ? 1 : Factory.GetCurrencyRateRepository() .FirstOrDefault(Rate => Rate.TargetCurrencyId == currencyID && Rate.CurrencyId == g.Key.Id).CrossCourse }).ToArray(); if (s != null) { if (result.Total > 0) { var s1 = result.Payments.ToList(); s1.AddRange(s); result.Payments = s1; result.Total = result.Payments.Sum(a => a.Totals * a.CrossCourse); result.Royalties = result.Payments.Sum(a => a.Royalties * a.CrossCourse); } else { result = new PayResultsViewModel() { Payments = s, Total = s.Sum(t => t.Totals * t.CrossCourse), Royalties = s.Sum(t => t.Totals * t.CrossCourse * (decimal)0.9) }; } } }; return(result); }