/// <summary> /// Locates users by combining boths filters /// </summary> /// <param name="d"></param> /// <param name="d2"></param> /// <param name="r"></param> /// <returns></returns> public UserProfile2Contract[] FindUserProfile(UserProfile2Discriminator d, UserProfileVsLocationDiscriminator d2, RoleDiscriminator r) { try { using (var records = RepositoryFactory.GetUserProfile()) { records.Discriminator2 = d; records.UserProfileVsLocationFilter = d2; records.RoleFilter = r; //Debug.WriteLine(records.Count()); return(records.Select(x => new UserProfile2Contract() { UserProfile2 = x as DB.UserProfile }).ToArray()); } } catch (Exception ex) { HandleMyException(ex); return(null); } }
public UserAndProductsContarct[] FindLastUsedProducts(UserProfile2Discriminator u, UserProfileVsLocationDiscriminator pvl) { //TODO: it is not matching how it is implemented in the ProductRepository try { var userRecords = RepositoryFactory.GetUserProfile(); userRecords.Discriminator2 = u; userRecords.UserProfileVsLocationFilter = pvl; var ret = userRecords.OfType <DB.UserProfile>() .Select(p => new UserAndProductsContarct() { UserProfile = p, Products = p.ProfileCredits.OrderByDescending(pc => pc.HasBallance).ThenByDescending(pc => pc.CalculatedTime).ThenByDescending(pc => pc.Product.CreditTransactions.Count).Take(Settings.Default.NumberOfLastProductsToShow) .Select(pc => new ProductCreditContract() { Product = pc.Product, ProfileCredit = pc }).ToArray() }).ToArray(); foreach (var r in ret) { DB.UserProfile profile = (DB.UserProfile)userRecords.Result2.First(z => z.UserId == r.UserProfile.UserId); IQueryable <DB.CreditTransaction> transactions = profile.CreditTransactions.AsQueryable(); if (pvl != null && pvl.Filter != null) { var locations = MDB.UserProfileVsLocations.Where(pvl.Filter); transactions = transactions.Join(locations, location => location.LocationId, transaction => transaction.LocationId, (transaction, location) => transaction ); } var lastTransaction = transactions.LastOrDefault(); if (lastTransaction != null) { var lastPayment = lastTransaction.Payments.LastOrDefault(); if (lastPayment != null) { r.LastPayment = lastPayment; } else { //TODO: replace mocked-up payment with location-settings driven data r.LastPayment = new PaymentImplementor { Amount = lastTransaction.BallanceUnits * lastTransaction.Product.ProductPriceHistories.OrderByDescending(p => p.ChangeDate).First().Price }; } } } return(ret); } catch (Exception ex) { HandleMyException(ex); return(null); } }