public IHttpActionResult Get([FromUri] ProfileCreditRequest request) { return(Execute <IHttpActionResult>(delegate { bool isPoweUser = SessionGlobal.CurrentUser.RoleNames.Any(a => a == Constants.OWNER || a == Constants.TELLER || Constants.ALL_MARKETING_AsArray.Any(b => a == b)); Expression <Func <IProfileCredit, bool> > filter = x => true; if (!isPoweUser) { if (isPoweUser || request.UserId.Value == SessionGlobal.CurrentUser.Identity.UserId) { int userId = request.UserId.Value; filter = x => x.UserId == userId; } else { throw new UnauthorizedAccessException("Attempt to request records from other profile"); } } LocationDiscriminator locationFilter = null; if (!string.IsNullOrEmpty(request.LocationLambda)) { locationFilter = new LocationDiscriminator() { Filter = ExpressionParser.CompileBolleanFunc <ILocation>(request.LocationLambda) }; } ProductDiscriminator productFilter = null; if (!string.IsNullOrEmpty(request.ProductLambda)) { productFilter = new ProductDiscriminator() { Filter = ExpressionParser.CompileBolleanFunc <IProduct>(request.ProductLambda) }; } return base.Ok(Db.FindProfileCredit2( productFilter, new ProfileCreditDiscriminator() { Filter = filter }, locationFilter ) ); })); }
public string GetReportHTML(DateTime from, DateTime to) { var reportLocationIds = LocationIds; var locations = Db.FindLocation(new LocationDiscriminator() { Filter = x => reportLocationIds.Contains(x.LocationId) }, null, null); var reportAddresses = locations.Select(l => l.Location.AddressId).ToArray(); var addresses = Db.FindAddress(new AddressDiscriminator() { Filter = x => reportAddresses.Contains(x.AddressId) }); var trns = Db.FindCreditTransaction(new CreditTransactionDiscriminator() { Filter = x => reportLocationIds.Contains(x.LocationId) && x.TransactionTime >= from && x.TransactionTime < to }); var productIds = trns.Select(x => x.CreditTransaction.ProductId).Distinct().ToArray(); var productFilter = new ProductDiscriminator() { Filter = x => productIds.Contains(x.ProductId) }; var products = Db.FindProduct(productFilter, null, null, default(int)); var prices = Db.FindProductPriceHistory(productFilter, true); var userIds = trns.Select(t => t.CreditTransaction.UserId).Distinct().ToArray(); var users = SecrityDB.FindUserProfile(new UserProfileDiscriminator() { Filter = x => userIds.Contains(x.UserId) }); var trnTemplate = new LocationTransactions(); trnTemplate.Locations = locations.Select(l => l.Location); trnTemplate.Addresses = addresses.Select(a => a.Address); trnTemplate.From = from; trnTemplate.To = to; trnTemplate.CreditTransactions = trns.Select(x => x.CreditTransaction); trnTemplate.Products = products.Select(x => x.Product); trnTemplate.Prices = prices.Select(x => x.ProductPriceHistory); trnTemplate.Users = users.Select(u => u.UserProfile); return(trnTemplate.TransformText()); }
public ProductPriceHistoryContract[] FindProductPriceHistory(ProductDiscriminator p, bool latestPriceOnly = true) { try { using (var records = RepositoryFactory.GetProductPriceHistory()) { //records.Discriminator = d; records.ProductFilter = p; records.LatestPriceOnly = latestPriceOnly; return(records.Select(r => new ProductPriceHistoryContract() { ProductPriceHistory = r }).ToArray()); } } catch (Exception ex) { HandleMyException(ex); return(null); } }
/// <summary> /// /// </summary> /// <param name="d"></param> /// <param name="l"></param> /// <param name="c"></param> /// <param name="trnCntByProduct">Max count of transactions to select by each product</param> /// <returns></returns> public ProductAndTransactionsContract[] FindProductLastTransactions(ProductDiscriminator d, LocationDiscriminator l, ProfileCreditDiscriminator c, int trnCntByProduct) { try { using (var records = RepositoryFactory.GetProduct()) { records.Discriminator = d; records.LocationFilter = l; records.ProfileCreditFilter = c; return(records.Select(r => new ProductAndTransactionsContract() { Product = r, CreditTransactions = (r as DB.Product).CreditTransactions.OrderByDescending(x => x.TransactionTime).Take(trnCntByProduct) }).ToArray()); } } catch (Exception ex) { HandleMyException(ex); return(null); } }
/// <summary> /// /// </summary> /// <param name="d"></param> /// <param name="l"></param> /// <param name="c"></param> /// <param name="userId">User id that will be used to remove products known for the user</param> /// <returns></returns> public ProductContract[] FindProduct(ProductDiscriminator d, LocationDiscriminator l, ProfileCreditDiscriminator c, int userId) { try { using (var records = RepositoryFactory.GetProduct()) { records.Discriminator = d; records.LocationFilter = l; records.ProfileCreditFilter = c; records.UserIdForExcludingAlreadyUsedProducts = userId; return(records.Select(r => new ProductContract() { Product = r }).ToArray()); } } catch (Exception ex) { HandleMyException(ex); return(null); } }
public ProductCreditContract[] FindProfileCredit2(ProductDiscriminator p, ProfileCreditDiscriminator d, LocationDiscriminator l) { try { using (var records = RepositoryFactory.GetProfileCredit()) { records.Discriminator = d; records.ProductFilter = p; records.LocationFilter = l; return(records.Select(r => new ProductCreditContract() { ProfileCredit = r, Product = (r as DB.ProfileCredit).Product }).ToArray()); } } catch (Exception ex) { HandleMyException(ex); return(null); } }
public string GetReportHTML() { var reportLocationIds = LocationIds; IAddress address = null; if (SessionGlobal.CurrentLocation != null && SessionGlobal.CurrentLocation.AddressId.HasValue) { long curAddressId = SessionGlobal.CurrentLocation.AddressId.Value; var addressC = Db.FindAddress(new AddressDiscriminator() { Filter = x => x.AddressId == curAddressId }).FirstOrDefault(); if (addressC != null) { address = addressC.Address; } } var user = Db.FindUserProfile(new UserProfile2Discriminator() { Filter = x => x.UserId == UserId }, null, null).First(); var locations = Db.FindLocation(new LocationDiscriminator() { Filter = x => reportLocationIds.Contains(x.LocationId) }, null, null); var lastTransaction = Db.FindCreditTransaction(new CreditTransactionDiscriminator() { Filter = x => x.UserId == UserId && reportLocationIds.Contains(x.LocationId), Take = 1, OrderBy = new SortByFld[] { new SortByFld() { FieldName = "Id", IsDescending = true } } }).FirstOrDefault(); if (lastTransaction != null) { DateTime lastTrnTime = lastTransaction.CreditTransaction.TransactionTime.AddMinutes(-1); var reportLocationIds2 = LocationIds; var lastTransactions = Db.FindCreditTransaction(new CreditTransactionDiscriminator() { Filter = x => x.UserId == UserId && reportLocationIds2.Contains(x.LocationId) && x.TransactionTime >= lastTrnTime }); var productIds = lastTransactions.Select(x => x.CreditTransaction.ProductId).Distinct().ToArray(); var productFilter = new ProductDiscriminator() { Filter = x => productIds.Contains(x.ProductId) }; var products = Db.FindProduct(productFilter, null, null, default(int)); var prices = Db.FindProductPriceHistory(productFilter, true); var receiptTemplate = new Receipt(); receiptTemplate.User = user.UserProfile2; receiptTemplate.Locations = locations.Select(l => l.Location); receiptTemplate.CreditTransactions = lastTransactions.Select(x => x.CreditTransaction); receiptTemplate.Products = products.Select(x => x.Product); receiptTemplate.Prices = prices.Select(x => x.ProductPriceHistory); receiptTemplate.LocationAddress = address; return(receiptTemplate.TransformText()); } else { return(null); } }