public IActionResult Announce(AnnounceViewModel model)
        {
            var date = DateTime.Now;

            if (ModelState.IsValid)
            {
                string uniqueFileName = null;
                if (model.ImageFile != null)
                {
                    uniqueFileName = Utils.FileProcess.UploadFile(model.ImageFile, hostingEnvironment);
                }

                var article = new Article
                {
                    Name           = model.Name,
                    Category       = model.getCategory(),
                    Price          = model.Price,
                    Description    = model.Description,
                    SellerUserName = User.Identity.Name,
                    ImageFilePath  = uniqueFileName,
                };
                context.Articles.Add(article);
                context.SaveChanges();
                var announcement = new Announcement
                {
                    Title     = model.Title,
                    Date      = date,
                    ArticleId = article.Id,
                };
                context.Announcements.Add(announcement);
                context.SaveChanges();
                return(RedirectToAction("Announcements"));
            }
            return(View(model));
        }
        public void ParticipantCanShowAnnounceForm()
        {
            ViewResult        res = _controller.Announce(_ownerGranted, 4) as ViewResult;
            AnnounceViewModel vm  = (AnnounceViewModel)res?.Model;

            Assert.Equal(_context.Label2, vm.Label);
            Assert.Equal("", vm.Message);
        }
        public IActionResult Announce(Participant participant, int id)
        {
            // Show announce form

            var label = _labelRepository.GetByGroup(id);

            var vm = new AnnounceViewModel
            {
                Label   = label,
                Message = ""
            };

            return(View(vm));
        }
        public IActionResult AnnouncementDetails(AnnounceViewModel model)
        {
            var date    = DateTime.Now;
            var comment = new Comment
            {
                Description    = model.CommentFormDescription,
                UserId         = User.Identity.Name,
                PubDate        = date,
                AnnouncementId = model.Id,
            };

            context.Comments.Add(comment);
            context.SaveChanges();
            return(RedirectToAction("AnnouncementDetails", model.Id));
        }
        public IActionResult AnnouncementDetails(int?id)
        {
            var announcement = context.Announcements.FirstOrDefault(e => e.Id.Equals(id));
            var article_     = context.Articles.FirstOrDefault(e => e.Id.Equals(announcement.ArticleId));
            var comments     = context.Comments.Where(e => e.AnnouncementId.Equals(id)).OrderByDescending(e => e.PubDate);

            var userArticles = from userArticle in context.ShoppingCar
                               join article in context.Articles on userArticle.ArticleId equals article.Id
                               select new
            {
                article.Id,
                article.Name,
                article.Price,
                article.Category,
                userArticle.UserName,
                article.SellerUserName
            };

            userArticles = userArticles.Where(e => e.UserName.Equals(User.Identity.Name));

            bool inCar = userArticles.FirstOrDefault(e => e.Id.Equals(id)) != null;

            var obj = new AnnounceViewModel
            {
                Id             = announcement.Id,
                ArticleId      = article_.Id,
                Title          = announcement.Title,
                Date           = announcement.Date,
                Name           = article_.Name,
                SellerUserName = article_.SellerUserName,
                Category       = article_.Category.ToString(),
                Description    = article_.Description,
                Price          = article_.Price,
                Comments       = comments.ToList(),
                ImagePath      = article_.ImageFilePath,
                InCar          = inCar,
                Sold           = article_.Sold,
                Owner          = article_.Owner
            };

            return(View(obj));
        }
        public IActionResult Announcements(double?maxPrice, double?minPrice, string searchText = "", string category = "", int page = 1, string seller = "", string state = "All")
        {
            var announcements = from announcement in context.Announcements
                                join article in context.Articles on announcement.ArticleId equals article.Id
                                select new AnnounceViewModel
            {
                Id             = announcement.Id,
                ArticleId      = article.Id,
                Title          = announcement.Title,
                SellerUserName = article.SellerUserName,
                Date           = announcement.Date,
                Name           = article.Name,
                Category       = article.Category.ToString(),
                Price          = article.Price,
                Description    = article.Description,
                Sold           = article.Sold,
                Owner          = article.Owner,
            };

            // Filter by category
            if (!string.IsNullOrEmpty(category) && category.ToLower() != "all")
            {
                announcements = announcements.Where(e => e.getCategory() == AnnounceViewModel.getCategory(category));
            }
            // Filter by price
            if (minPrice != null)
            {
                announcements = announcements.Where(e => e.Price >= minPrice);
            }
            if (maxPrice != null)
            {
                announcements = announcements.Where(e => e.Price <= maxPrice);
            }
            // Filter by text
            if (!string.IsNullOrEmpty(searchText))
            {
                announcements = announcements.Where(e =>
                                                    e.Description.Contains(searchText, StringComparison.CurrentCultureIgnoreCase) ||
                                                    e.Title.Contains(searchText, StringComparison.CurrentCultureIgnoreCase) ||
                                                    e.SellerUserName.Contains(searchText, StringComparison.CurrentCultureIgnoreCase)
                                                    );
            }
            if (!string.IsNullOrEmpty(seller))
            {
                announcements = announcements.Where(e => e.SellerUserName.Equals(seller));
            }
            if (!User.IsInRole("Admin"))
            {
                announcements = announcements.Where(e => !e.Sold);
            }
            else
            {
                if (state.ToLower() == "free")
                {
                    announcements = announcements.Where(e => !e.Sold);
                }
                else if (state.ToLower() == "sold")
                {
                    announcements = announcements.Where(e => e.Sold);
                }
            }

            int amount = announcements.Count();

            announcements = announcements.OrderByDescending(e => e.Date).Skip(4 * (page - 1)).Take(4);

            return(View(new AnnouncementsViewModel
            {
                Announcements = announcements,
                Page = page,
                SearchText = searchText,
                MinPrice = minPrice,
                MaxPrice = maxPrice,
                Category = category,
                TotalPages = (int)Math.Ceiling((decimal)amount / 4),
                Seller = seller,
                State = state
            }));
        }
        public IActionResult Auctions(double?minPrice, double?maxPrice, string searchText = "", string aCategory = "All", string state = "", int page = 1)
        {
            var auctions = from article in context.Articles
                           join auction in context.Auctions on article.Id equals auction.ArticleId
                           select new
            {
                auction.Id,
                article.Name,
                article.Category,
                auction.Title,
                auction.Details,
                auction.SellerUserName,
                auction.CurrentPrice,
                auction.Begin,
                auction.End,
                auction.ArticleId
            };

            if (minPrice != null)
            {
                auctions = auctions.Where(e => minPrice <= e.CurrentPrice);
            }
            if (maxPrice != null)
            {
                auctions = auctions.Where(e => e.CurrentPrice <= maxPrice);
            }
            if (!string.IsNullOrEmpty(searchText))
            {
                auctions = auctions
                           .Where(e => e.Title.Contains(searchText, StringComparison.CurrentCultureIgnoreCase) ||
                                  e.Details.Contains(searchText, StringComparison.CurrentCultureIgnoreCase) ||
                                  e.Name.Contains(searchText, StringComparison.CurrentCultureIgnoreCase) ||
                                  e.Category.ToString().Contains(searchText, StringComparison.CurrentCultureIgnoreCase) ||
                                  e.SellerUserName.ToString().Contains(searchText, StringComparison.CurrentCultureIgnoreCase)
                                  );
            }
            if (!string.IsNullOrEmpty(aCategory) && aCategory.ToLower() != "all")
            {
                auctions = auctions.Where(e => AnnounceViewModel.getCategory(aCategory) == e.Category);
            }
            if (!string.IsNullOrEmpty(state) && state.ToLower() != "all")
            {
                DateTime now = DateTime.Now;

                if (state.ToLower() == "closed")
                {
                    auctions = auctions.Where(e => e.End.CompareTo(now) == -1);
                }
                if (state.ToLower() == "coming")
                {
                    auctions = auctions.Where(e => e.Begin.CompareTo(now) == 1);
                }
                if (state.ToLower() == "running")
                {
                    auctions = auctions.Where(e => e.Begin.CompareTo(now) <= 0 && e.End.CompareTo(now) >= 0);
                }
            }

            int amount = auctions.Count();

            auctions = auctions.OrderByDescending(e => e.Begin).Skip(4 * (page - 1)).Take(4);

            List <Auction> listAuctions = new List <Auction>();

            foreach (var auction in auctions)
            {
                listAuctions.Add(new Auction
                {
                    Id             = auction.Id,
                    ArticleId      = auction.ArticleId,
                    Title          = auction.Title,
                    Details        = auction.Details,
                    SellerUserName = auction.SellerUserName,
                    CurrentPrice   = auction.CurrentPrice,
                    Begin          = auction.Begin,
                    End            = auction.End
                });
            }

            return(View(new AuctionsViewModel
            {
                Auctions = listAuctions,
                Page = page,
                SearchText = searchText,
                MinPrice = minPrice,
                MaxPrice = maxPrice,
                ACategory = aCategory,
                State = state,
                TotalPages = (int)Math.Ceiling((decimal)amount / 4)
            }));
        }