public async Task <IActionResult> Create(CategoryViewModel model)
        {
            if (ModelState.IsValid)
            {
                var vm = new Category
                {
                    Id       = NumberUtilities.GetUniqueNumber(),
                    Name     = model.Category.Name,
                    ParentId = model.Category.ParentId
                };
                await _context.Categories.AddAsync(vm);

                if (model.Category.ParentId != null)
                {
                    var cat = await _context.Categories.AsNoTracking().FirstOrDefaultAsync(x => x.Id == model.Category.ParentId);

                    cat.IsParent = true;
                }

                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View());
        }
        public async Task <IActionResult> Create([Bind("Id,Division,Name")] District district)
        {
            if (ModelState.IsValid)
            {
                district.Id = NumberUtilities.GetUniqueNumber();
                _context.Add(district);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(district));
        }
示例#3
0
        public IActionResult AgentRequest(Agent agent)
        {
            if (!ModelState.IsValid)
            {
                return(View(agent));
            }
            agent.Id = NumberUtilities.GetUniqueNumber();
            _context.Agents.Add(agent);
            _context.SaveChanges();

            return(RedirectToAction("Index", "Agents"));
        }
示例#4
0
        public async Task <IActionResult> AddProduct(IFormFile file, ProductViewModel vm)
        {
            if (ModelState.IsValid)
            {
                var Seller = _context.Sellers.Where(s => s.Email.Contains(User.Identity.Name));
                if (Seller.SingleOrDefault() == null)
                {
                    return(RedirectToAction("RequestForSell", "Products"));
                }


                ImgUploader img     = new ImgUploader(environment);
                var         imgPath = img.ImageUrl(file); //function working here

                var products = new Product
                {
                    Id    = NumberUtilities.GetUniqueNumber(),
                    Title = vm.Product.Title,

                    Description     = vm.Product.Description,
                    Price           = vm.Product.Price,
                    SellerId        = 1, //manually value. Next time it will be from Session User Value
                    CategoryId      = vm.Product.CategoryId,
                    DistrictId      = vm.Product.DistrictId,
                    IsPublished     = vm.Product.IsPublished, //manually valuess
                    Unit            = vm.Product.Unit,
                    ItemInStock     = vm.Product.ItemInStock,
                    UpdatedAt       = DateTime.Now, //manually valuess
                    OfferExpireDate = DateTime.Now, //manually valuess
                    ImagePath       = imgPath,
                    OfferPrice      = vm.Product.OfferPrice,
                };

                await _context.AddAsync(products);

                await _context.SaveChangesAsync();

                long id = products.Id;
            }
            else
            {
                var viewmodel = _productService.GetProductViewModelAsync();

                ViewBag.error = "You Cannot ignore required fields";
                return(View("AddProduct", viewmodel));
            }


            return(RedirectToAction("AddProduct", "Products"));
        }
示例#5
0
        public async Task <IActionResult> Create([Bind("Id,Title,SellerId,Price,Description,Unit,IsPublished,ItemInStock,DistrictId,CategoryId,ImagePath,OfferPrice,OfferExpireDate,CreatedAt,UpdatedAt")] Product product)
        {
            if (ModelState.IsValid)
            {
                product.Id = NumberUtilities.GetUniqueNumber();
                _context.Add(product);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["CategoryId"] = new SelectList(_context.Categories, "Id", "Domain", product.CategoryId);
            ViewData["DistrictId"] = new SelectList(_context.Districts, "Id", "Division", product.DistrictId);
            ViewData["SellerId"]   = new SelectList(_context.Sellers, "Id", "Email", product.SellerId);
            return(View(product));
        }
示例#6
0
        public Document Upload(IFormFile file)
        {
            if (file == null || file.Length == 0)
            {
                return(null);
            }

            //DRILL ORIGINAL NAME
            var originalName = GetDocumentName(file);

            //DRILL EXTENSION
            var extension = Path.GetExtension(file.FileName).ToLower();

            //GENERATE UNIQUE NAME
            var currentName = _encryptionService.GetUniqueKey(20);

            //ROOT PATH
            string rootPath = _env.ContentRootPath;

            //APPLICATION LOCAL DIRECTORY PATH
            string localDirectory = $"/StaticFiles/Images/";

            //FILE PATH
            string imagePath = $"{rootPath}{localDirectory}{currentName}{extension}";

            //SAVE STREAM
            using (var stream = new FileStream(imagePath, FileMode.Create))
            {
                file.CopyTo(stream);
                stream.Dispose();
            }

            return(new Document
            {
                Id = NumberUtilities.GetUniqueNumber(),
                OriginalName = originalName,
                Name = currentName,
                CreatedAt = DateTime.UtcNow,
                Extension = extension,
                Path = Path.Combine(localDirectory, (currentName + extension)),
                Type = FileUtilities.GetType(extension)
            });
        }
示例#7
0
        public async Task <IActionResult> ApproveSeller(string email)
        {
            var requestedSeller = _context.SellerRequests
                                  .Where(s => s.Email.Contains(email))
                                  .FirstOrDefault();

            if (requestedSeller == null)
            {
                return(NotFound());
            }

            var sellers = _context.Sellers.Include(x => x.User).ThenInclude(x => x.District);

            if (!sellers.Any(x => x.Email == email))
            {
                var seller = new Seller
                {
                    Id          = NumberUtilities.GetUniqueNumber(),
                    Name        = requestedSeller.SellerName,
                    Email       = email,
                    CompanyName = requestedSeller.CompanyName,
                    Phone       = requestedSeller.Phone,
                    DateOfBirth = requestedSeller.DateOfBirth
                }; await _context.Sellers.AddAsync(seller);

                var appUserr = _context.Users.Where(x => x.Email == email).FirstOrDefault();
                if (appUserr != null)
                {
                    seller.UserId = appUserr.Id;
                }
                await _context.SaveChangesAsync();
            }

            //REMOVE PREVIOUS SELLER REQUEST
            var del = _context.SellerRequests.Find(requestedSeller.Id);

            _context.SellerRequests.Remove(del);
            await _context.SaveChangesAsync();

            return(RedirectToAction("RequestIndex"));
        }        //REQUEST SECTION END
示例#8
0
        public async Task <ActionResult> Checkout(OrderViewModel ovModel)
        {
            if (SessionHelper.GetObjectFromJson <List <CartItem> >(HttpContext.Session, "cart") == null)
            {
                return(RedirectToAction("Index", "Products"));
            }


            Customer customer        = new Customer();
            var      customerExisted = _context.Customers.Where(c => c.Email == ovModel.Order.Email).AsNoTracking().FirstOrDefault();

            if (customerExisted == null)
            {
                //nw user
                var user = new AppUser
                {
                    Email    = ovModel.Order.Email,
                    UserName = ovModel.Order.Email
                };
                var res = await _userManager.CreateAsync(user);

                if (res.Succeeded)
                {
                    var cust = new Customer
                    {
                        Id     = NumberUtilities.GetUniqueNumber(),
                        Name   = ovModel.Order.Name,
                        Email  = ovModel.Order.Email,
                        Phone  = ovModel.Customer.Phone,
                        UserId = user.Id
                    };
                    await _context.Customers.AddAsync(cust);

                    await _context.SaveChangesAsync();

                    customer = cust;
                }
            }
            else
            {
                customer = _context.Customers.Find(ovModel.Customer.Id);
            }

            var order = new Order
            {
                Id    = NumberUtilities.GetUniqueNumber(),
                Name  = customer.Name,
                Email = customer.Email,
                //fixed portion
                ShippingAddress = ovModel.Order.ShippingAddress,
                PostalCode      = ovModel.Order.PostalCode,
                StreetNo        = ovModel.Order.StreetNo,
                CustomerId      = customer.Id,
                TotalPrice      = ovModel.TotalPrice,
                OrderDate       = DateTime.Now,
                AccountNo       = ovModel.Order.AccountNo,
                TransactionId   = ovModel.Order.TransactionId
            };

            _context.Orders.Add(order);
            _context.SaveChanges();


            var cartList = SessionHelper.GetObjectFromJson <List <CartItem> >(HttpContext.Session, "cart");

            ViewBag.total = cartList.Sum(c => c.Product.Price * c.Quantity);

            foreach (var item in cartList)
            {
                var order_product = new ProductOrder
                {
                    Id              = NumberUtilities.GetUniqueNumber(),
                    OrderId         = order.Id,
                    ProductId       = item.Product.Id,
                    NumberOfProduct = item.Quantity
                };

                _context.ProductOrders.Add(order_product);
                _context.SaveChanges();


                var quantity = _context.Products.Where(c => c.Id == item.Product.Id).SingleOrDefault();
                if (quantity != null)
                {
                    var pro = _context.Products.Find(item.Product.Id);
                    pro.ItemInStock = pro.ItemInStock - order_product.NumberOfProduct;

                    _context.Products.Update(pro);
                    _context.SaveChanges();
                }
            }
            //clear the session now
            HttpContext.Session.Clear();

            var agents = _context.Agents.Where(c => c.User.DistrictId == customer.User.DistrictId).ToList();
            var random = new Random();
            var index  = random.Next(0, agents.Count);
            var agent  = agents[index];

            var agentorder = new AgentOrder
            {
                Id               = NumberUtilities.GetUniqueNumber(),
                AgentId          = agent.Id,
                OrderId          = order.Id,
                IsPaid           = false,
                IsOnRoute        = false,
                IsFullyCompleted = false
            };

            _context.AgentOrders.Add(agentorder);
            _context.SaveChanges();



            TempData["orderSuccess"] = "Your order has been placed successfully!";
            return(RedirectToAction("Checkout"));
        }
示例#9
0
        public async Task <ActionResult> CreateProduct(long id, IFormFile file, SellerViewModel request)
        {
            if (id == 0)
            {
                return(NotFound());
            }

            var sellerChk = await _context.Sellers.FindAsync(id);

            if (User.Identity.Name != sellerChk.Email)
            {
                return(NotFound());
            }

            var data = await _context.Sellers.Where(c => c.Email == User.Identity.Name).FirstOrDefaultAsync();

            if (data == null)
            {
                NotFound();
            }

            if (request.CreateProductViewModel.Title == null)
            {
                ModelState.AddModelError("CreateProductViewModel.Title", "Please enter product name");
            }

            if (request.CreateProductViewModel.Price == 0)
            {
                ModelState.AddModelError("CreateProductViewModel.Price", "Please enter price");
            }

            if (request.CreateProductViewModel.ItemInStock == 0)
            {
                ModelState.AddModelError("CreateProductViewModel.ItemInStock", "Please enter itemInStock");
            }

            if (request.CreateProductViewModel.Unit == null)
            {
                ModelState.AddModelError("CreateProductViewModel.Unit", "Please enter unit");
            }

            if (request.CreateProductViewModel.CategoryId == 0 || request.CreateProductViewModel.CategoryId == null)
            {
                ModelState.AddModelError("CreateProductViewModel.CategoryId", "Please enter category");
            }

            //MODEL WILL BE INVALID IF
            if (request.CreateProductViewModel.Title == null || request.CreateProductViewModel.Price == 0 || request.CreateProductViewModel.ItemInStock == 0 || request.CreateProductViewModel.Unit == null || request.CreateProductViewModel.CategoryId == 0 || request.CreateProductViewModel.CategoryId == null)
            {
                var vmfinal = new SellerViewModel
                {
                    Products               = _context.Products.Where(c => c.SellerId == id).AsNoTracking().ToList(),
                    Districts              = _context.Districts.AsNoTracking().ToList(),
                    Categories             = _context.Categories.AsNoTracking().ToList(),
                    Sellers                = _context.Sellers.AsNoTracking().ToList(),
                    Seller                 = _context.Sellers.Where(x => x.Id == id).AsNoTracking().FirstOrDefault(),
                    Product                = request.Product,
                    CreateProductViewModel = request.CreateProductViewModel
                };

                return(View(vmfinal));
            }


            var seller = await _context.Sellers.Where(s => s.Email.Contains(User.Identity.Name)).Include(x => x.User).FirstOrDefaultAsync();

            if (seller == null)
            {
                return(RedirectToAction("request", "Products", new { id = id }));
            }


            ////IMAGE UPLOAD
            //ImgUploader img = new ImgUploader(_environment);
            //var imgPath = img.ImageUrl(file);
            //if (imgPath == null)
            //{
            //    TempData["uploaderr"] = "May be Image is not perfect!";
            //    return RedirectToAction("CreateProduct", "Sellers", new { id = seller.Id });
            //}

            var uploadCommand = new CreateDocumentCommand()
            {
                File = file
            };
            var uploadedPhoto = await _mediator.Send(uploadCommand);

            //CREATE PRODUCT MODEL
            var products = new Product
            {
                Id              = NumberUtilities.GetUniqueNumber(),
                Title           = request.CreateProductViewModel.Title,
                Description     = request.CreateProductViewModel.Description,
                Price           = request.CreateProductViewModel.Price ?? 0,
                SellerId        = seller.Id,
                CategoryId      = request.CreateProductViewModel.CategoryId ?? 0,
                DistrictId      = seller.User.DistrictId,
                IsPublished     = true,
                Unit            = request.CreateProductViewModel.Unit,
                ItemInStock     = request.CreateProductViewModel.ItemInStock ?? 0,
                CreatedAt       = DateTime.UtcNow,
                UpdatedAt       = DateTime.UtcNow,
                OfferExpireDate = DateTime.UtcNow.AddDays(100),
                //ImagePath = imgPath,
                PhotoId    = uploadedPhoto.Id,
                OfferPrice = request.CreateProductViewModel.OfferPrice ?? 0     //need to change
            };
            await _context.Products.AddAsync(products);

            await _context.SaveChangesAsync();


            var vms = new SellerViewModel
            {
                Products   = await _context.Products.Where(c => c.SellerId == id).ToListAsync(),
                Districts  = await _context.Districts.ToListAsync(),
                Categories = await _context.Categories.ToListAsync(),
                Sellers    = await _context.Sellers.ToListAsync(),
                Error      = "Your Product has been added"
            };


            return(RedirectToAction(nameof(SellerProducts), id));
        }