Пример #1
0
        public ActionResult SaveProducts(ListSellProductModel model)
        {
            model.CorrectSellProducts = (List<SellProductModel>)Session["CorrectProducts"];
            var errors = ModelState.Values.Where(x => x.Errors.Count > 0);
            //Trạng thái khi lưu xuống db
            int countUpdate = 0;
            int countInsert = 0;
            List<List<SellProductModel>> dupSellProduct = new List<List<SellProductModel>>();
            foreach (var product in model.CorrectSellProducts)
            {
                SmartBuyEntities db = new SmartBuyEntities();

                //Trùng data
                var productNameFirst = product.Name.Split(';').First(); // Cắt chuỗi
                var dupMarket = db.Markets.Where(m => m.Name.Equals(product.MarketName)).FirstOrDefault();
                var dupProduct = db.Products.Where(p => p.Name.Equals(productNameFirst)).FirstOrDefault();
                var dupProductDictionary = db.Dictionaries.Where(p => p.Name.Equals(productNameFirst)).FirstOrDefault();

                //Trung hoan toan
                if (dupMarket != null & dupProduct != null)
                {
                    TrungHoanToan(ref countUpdate, ref countInsert, product, db, dupMarket, dupProduct);

                }
                else if (dupMarket == null & dupProduct != null) // Trùng Tên sản phẩm
                {
                    countInsert = TrungTenSanPham(countInsert, product, db, dupProduct);
                }
                else if (dupMarket != null & dupProduct == null) // Trùng Market
                {
                    var results = TrungMarket(ref countInsert, product, db, productNameFirst, dupMarket, dupProductDictionary);
                    if (results != null)
                    {
                        dupSellProduct.Add(results);
                    }
                }

                else  //Insert sellProduct mới
                {
                    countInsert = AddNewProduct(countInsert, product, db, productNameFirst, dupProductDictionary);
                }
            }
            if (dupSellProduct.Count() > 0)
            {
                TempData["DictionaryProduct"] = dupSellProduct;
            }
            Session.Remove("CorrectProducts");
            Session.Remove("duplicateProducts");
            Session["duplicateProducts"] = dupSellProduct;
            TempData["UpdateMessage"] = "Có " + countUpdate + " sản phẩm được cập nhật giá.";
            TempData["InsertMessage"] = "Có " + countInsert + " sản phẩm được lưu mới.";
            return RedirectToAction("UploadProduct");
        }
Пример #2
0
        public ActionResult UploadProduct(HttpPostedFileBase excelFile)
        {
            if (excelFile != null)
            {
                Guid guid = Guid.NewGuid();
                string savedFileName = "~/UploadedExcelFiles/" + guid + excelFile.FileName;
                excelFile.SaveAs(Server.MapPath(savedFileName));

                ExcelHelper excelHelper = new ExcelHelper();
                List<SellProductModel> sellProductCollection = new List<SellProductModel>();
                List<SellProductModel> sellProductCorrectCollection = new List<SellProductModel>();
                List<SellProductModel> sellProductErrorCollection = new List<SellProductModel>();
                ListSellProductModel model = new ListSellProductModel();
                //Catch exception

                string errorName = "";
                string errorMarket = "";
                string errorPrice = "";
                int errorCount = 0;
                try
                {
                    sellProductCorrectCollection = excelHelper.ReadDataCorrect((Server.MapPath(savedFileName)));
                    sellProductErrorCollection = excelHelper.ReadDataError((Server.MapPath(savedFileName)), out errorName, out errorMarket, out errorPrice, out errorCount);
                    model.CorrectSellProducts = sellProductCorrectCollection;
                    model.InCorrectSellProducts = sellProductErrorCollection;
                    model.ExceptionName = errorName;
                    model.ExceptionMarket = errorMarket;
                    model.ExceptionPrice = errorPrice;
                    model.ErrorCount = errorCount;
                    List<string> errorNameLines = new List<string>();
                    List<string> errorMarketNameLines = new List<string>();
                    List<string> errorPriceLines = new List<string>();
                    foreach (var product in sellProductErrorCollection)
                    {
                        var errorNameLine = "";
                        var errorMarketNameLine = "";
                        var errorPriceLine = "";
                        if (product.Name.Length < 5 || product.Name.Length > 100)
                        {
                            errorNameLine += product.RowNumber;
                        }
                        if (product.MarketName.Length < 5 || product.MarketName.Length > 100)
                        {
                            errorMarketNameLine += product.RowNumber;

                        }
                        if (product.Price < 1 || product.Price > 10000)
                        {
                            errorPriceLine += product.RowNumber;
                        }
                        if (errorNameLine != product.Name && errorNameLine != "")
                        {
                            errorNameLines.Add(errorNameLine);
                        }
                        if (errorMarketNameLine != product.MarketName && errorMarketNameLine != "")
                        {
                            errorMarketNameLines.Add(errorMarketNameLine);
                        }
                        if (errorPriceLine != "")
                        {
                            errorPriceLines.Add(errorPriceLine);
                        }
                    }
                    model.ErrorNameLines = errorNameLines;
                    model.ErrorMarketNameLines = errorMarketNameLines;
                    model.ErrorPriceLines = errorPriceLines;
                    TempData["CorrectProducts"] = sellProductCorrectCollection;
                    Session["CorrectProducts"] = sellProductCorrectCollection;
                }
                catch (Exception exception)
                {
                    model.Exception = exception.Message;
                    model.ExceptionName = exception.Message;
                    model.ExceptionMarket = exception.Message;
                    model.ExceptionPrice = errorPrice;
                    model.ErrorCount = errorCount;
                }
                //Compare items in Excel
                List<SellProductModel> compareListProduct = sellProductCorrectCollection;
                List<List<SellProductModel>> results = new List<List<SellProductModel>>();
                for (int i = 0; i < compareListProduct.Count; i++)
                {
                    List<SellProductModel> result = new List<SellProductModel>();
                    for (int j = i + 1; j < compareListProduct.Count; j++)
                    {
                        if (compareListProduct[i].MarketName == compareListProduct[j].MarketName)
                        {
                            var percentage =
                                CompareStringHelper.CompareString(compareListProduct[i].Name.Split(';').First(), compareListProduct[j].Name.Split(';').First());
                            if (percentage > 0.7 && percentage < 1)
                            {
                                if (result.Count() == 0)
                                {
                                    result.Add(compareListProduct[i]);
                                }
                                result.Add(compareListProduct[j]);
                                compareListProduct.Remove(compareListProduct[j]);
                            }
                            else if (percentage == 1)
                            {
                                compareListProduct[i].Name += ";" + compareListProduct[j].Name ;
                                compareListProduct[i].Price = compareListProduct[j].Price;
                                compareListProduct.Remove(compareListProduct[j]);
                            }
                        }
                    }
                    if (result.Count() != 0)
                    {
                        compareListProduct.Remove(compareListProduct[i]);
                        i = i - 1;
                        results.Add(result);
                    }
                }
                model.duplicateCorrectProduct = results;
                model.duplicateCorrectProductCount = results.Count();
                Session["duplicateProducts"] = results;
                if (model.CorrectSellProducts != null)
                {
                    model.PagedCorrectProducts = model.CorrectSellProducts.OrderBy(x => x.Name).ToPagedList(1, PageSize);
                }
                Session["excel"] = model;

                return View(model);
            }

            return View();
        }
Пример #3
0
        public ActionResult SaveDupProducts(ListSellProductModel model)
        {
            model.CorrectSellProducts = (List<SellProductModel>)Session["CorrectProducts"];
            var errors = ModelState.Values.Where(x => x.Errors.Count > 0);
            //Trạng thái khi lưu xuống db
            int countUpdate = 0;
            int countInsert = 0;
            List<List<SellProductModel>> dupSellProduct = new List<List<SellProductModel>>();
            foreach (var product in model.CorrectSellProducts)
            {
                var productNameFirst = product.Name.Split(';').First(); // Cắt chuỗi
                var dupProduct = db.Products.Where(p => p.Name.Equals(productNameFirst)).FirstOrDefault();
                if (dupProduct != null)
                {
                    var dupMarket = db.Markets.Where(m => m.Name.Equals(product.MarketName)).FirstOrDefault();
                    var sellProduct = db.SellProducts.Where(s => s.ProductId == dupProduct.Id && s.MarketId == dupMarket.Id).FirstOrDefault();

                    if (sellProduct != null)
                    {

                        var newSellProduct = new SmartB.UI.Models.EntityFramework.SellProduct //add SellProduct
                        {
                            Market = dupMarket,
                            Product = dupProduct,
                            SellPrice = product.Price,
                            LastUpdatedTime = DateTime.Now
                        };
                        var addedSellProduct = db.SellProducts.Add(newSellProduct);
                        db.SaveChanges(); // Save to database
                        countUpdate++;

                        //add new product Attribute
                        PriceHelper helper = new PriceHelper();
                        helper.CalculatePriceRange(dupProduct.Id);

                        // add Product Dictionary
                        var dictionaries = product.Name.Split(';').ToList();
                        var dupProductDictionary = db.Dictionaries.Where(p => p.Name.Equals(productNameFirst)).FirstOrDefault();
                        foreach (string dictionary in dictionaries)
                        {
                            if (dictionary != productNameFirst.ToString() && dictionary != "")
                            {
                                var dictionaryDB = db.Dictionaries.Where(d => d.Name.Equals(dictionary)).FirstOrDefault();
                                if (dictionaryDB != null)
                                {
                                  //  var getProduct = db.Products.Where(p => p.Name.Equals(dictionaryDB.Name)).FirstOrDefault();
                                    var getProductId = Convert.ToInt32(dictionaryDB.ProductId);
                                    var listDic = db.Dictionaries.Where(p => p.ProductId == getProductId).ToList();
                                    foreach (var item in listDic)
                                    {
                                        item.ProductId = dupProduct.Id;
                                    }
                                }
                                else
                                {
                                    var ProductDic = new SmartB.UI.Models.EntityFramework.Dictionary
                                    {
                                        Name = dictionary,
                                        ProductId = dupProduct.Id
                                    };
                                    var addProductDic = db.Dictionaries.Add(ProductDic);
                                }
                            }
                        }
                        db.SaveChanges(); // Save to database
                    }
                } else
                {
                    var dupMarket = db.Markets.Where(m => m.Name.Equals(product.MarketName)).FirstOrDefault();
                    var newProduct = new SmartB.UI.Models.EntityFramework.Product // add Product
                    {
                        Name = productNameFirst,
                        IsActive = true,
                    };
                    var addedProduct = db.Products.Add(newProduct);
                    var sellProduct2 = new SmartB.UI.Models.EntityFramework.SellProduct //add SellProduct
                    {
                        Market = dupMarket,
                        Product = addedProduct,
                        SellPrice = product.Price,
                        LastUpdatedTime = DateTime.Now
                    };
                    var addedSellProduct = db.SellProducts.Add(sellProduct2);
                    countInsert++;
                    db.SaveChanges(); // Save to database
                    //add new product Attribute

                    var productAttribute = new SmartB.UI.Models.EntityFramework.ProductAttribute
                    {
                        ProductId = addedProduct.Id,
                        MinPrice = product.Price,
                        MaxPrice = product.Price,
                        LastUpdatedTime = DateTime.Now,
                    };
                    var addedProductAtt = db.ProductAttributes.Add(productAttribute);
                    db.SaveChanges(); // Save to database

                    // add Product Dictionary
                    var dictionaries = product.Name.Split(';').ToList();
                    var dupProductDictionary = db.Dictionaries.Where(p => p.Name.Equals(productNameFirst)).FirstOrDefault();
                    foreach (string dictionary in dictionaries)
                    {
                        if (dupProductDictionary == null && dictionary != "")
                        {
                            var dictionaryDB = db.Dictionaries.Where(d => d.Name.Equals(dictionary)).FirstOrDefault();
                            if (dictionaryDB == null)
                            {
                                var ProductDic = new SmartB.UI.Models.EntityFramework.Dictionary
                                {
                                    Name = dictionary,
                                    ProductId = newProduct.Id
                                };
                                var addProductDic = db.Dictionaries.Add(ProductDic);
                            }
                            else
                            {
                                //var getProductId = db.Products.Where(p => p.Name.Equals(dictionary)).FirstOrDefault();
                                //var listDic = db.Dictionaries.Where(d => d.ProductId.Equals(getProductId.Id)).ToList();
                                var getProductId = Convert.ToInt32(dictionaryDB.ProductId);
                                var listDic = db.Dictionaries.Where(p => p.ProductId == getProductId).ToList();
                                foreach (var item in listDic)
                                {
                                    item.ProductId = addedProduct.Id;
                                }
                            }
                        }
                    }
                    db.SaveChanges(); // Save to database
                }
            }

            TempData["UpdateMessage"] = "Có " + countUpdate + " sản phẩm được cập nhật giá.";
            TempData["InsertMessage"] = "Có " + countInsert + " sản phẩm được lưu mới.";
            return RedirectToAction("UploadProduct");
        }