Exemple #1
0
        public ActionResult Create(CreateProductViewModel viewModel, HttpPostedFileBase mainImage, IEnumerable <HttpPostedFileBase> images)
        {
            if (ModelState.IsValid)
            {
                var product = new Product();
                product.Code        = viewModel.Code;
                product.Name        = viewModel.Name;
                product.Description = viewModel.Description;
                product.Price       = viewModel.Price;
                product.Created_at  = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

                db.Products.Add(product);

                var imagesToDownload = new List <HttpPostedFileBase>();

                if (mainImage != null)
                {
                    string       relativePathToImage = Helper.GetRelativePathForResource(mainImage.FileName);
                    ProductImage productMainImage    = Factories.ProductImageFactory.Create(product.Id, relativePathToImage, true);
                    db.ProductImages.Add(productMainImage);
                    imagesToDownload.Add(mainImage);
                }

                foreach (var image in images.Where(x => x != null))
                {
                    string       relativePathToImage = Helper.GetRelativePathForResource(image.FileName);
                    ProductImage productImage        = Factories.ProductImageFactory.Create(product.Id, relativePathToImage, false);
                    db.ProductImages.Add(productImage);
                    imagesToDownload.Add(image);
                }

                //sukuriam dar viena sarasa, kad klaidos atveju zinotume, kokias nuotraukas reikia istrint
                var downloadedImages = new List <HttpPostedFileBase>();
                try
                {
                    foreach (var img in imagesToDownload)
                    {
                        FileWorker.DownloadImage(img);
                        downloadedImages.Add(img);
                    }
                }
                catch (FileDownloadException)
                {
                    foreach (var img in downloadedImages)
                    {
                        string relativePathToImage = Helper.GetRelativePathForResource(img.FileName);
                        FileWorker.DeleteFile(relativePathToImage);
                    }

                    ModelState.AddModelError("Error", "Klaida išsaugant paveikslėlį.");
                    return(View(viewModel));
                }

                try
                {
                    db.SaveChanges();
                }
                catch (System.Data.Entity.Infrastructure.DbUpdateException)
                {
                    ModelState.AddModelError("Error", "Prekė su tokiu kodu jau egzistuoja.");
                    return(View(viewModel));
                }
                catch (Exception ex)
                {
                    ModelState.AddModelError("Error", ex);
                    return(View(viewModel));
                }

                return(RedirectToAction("GetProductsListForAdmin", new { isPartial = false, query = "", currentPage = 1 }));
            }

            return(View(viewModel));
        }