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
                                   )
                               );
            }));
        }
Пример #2
0
        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);
            }
        }