public ActionResult Save(SaveProductFormModel model)
        {
            #region thêm sản phẩm
            Menu menu = new Menu()
            {
                CodeProduct = RejectMarks(model.NameProductLong),
                PriceOffPro = model.PriceOffPro,
                Content     = ChangeImageSEO(model.Content, model.NameProduct, ConvertFont(model.NameProductLong)),
                Content1    = ChangeImageSEO1(model.Content1, model.NameProduct, ConvertFont(model.NameProductLong)),
                Content2    = ChangeImageSEO2(model.Content2, model.NameProduct, ConvertFont(model.NameProductLong)),
                Content3    = ChangeImageSEO3(model.Content3, model.NameProduct, ConvertFont(model.NameProductLong)),
                Content4    = ChangeImageSEO4(model.Content4, model.NameProduct, ConvertFont(model.NameProductLong)),
                //Content = model.Content,
                //Content1 = model.Content1,
                //Content2 = model.Content2,
                //Content3 = model.Content3,
                //Content4 = model.Content4,
                Img                = (model.Img).Replace("/files/", ""),
                IdNhaCungCap       = model.IdNhaCungCap,
                idControl          = 11,
                Note               = model.Note,
                ok                 = false,//vua them thi san pham an di
                Option1            = model.Option1,
                Option5            = model.Option5,
                Option6            = model.Option6,
                Menu2              = "",
                MenuAdwords        = "",
                Link               = ConvertFont(model.NameProductLong),
                LevelMenu          = 1,
                LinkHttp           = "https://beautygarden.vn/" + ConvertFont(model.NameProduct) + ".html",
                LinkHttp1          = "",
                Style              = "san-pham",
                ui                 = "vi",
                ContentLabel       = model.ContentLabel,
                Option             = true,
                ContentLabel1      = model.ContentLabel1,
                ContentLabel2      = model.ContentLabel2,
                ContentLabel3      = model.ContentLabel3,
                ContentLabel4      = model.ContentLabel4,
                VIP                = false,
                Option8            = true,
                Option9            = model.Option9,
                sPosition          = model.sPosition,
                Visitor            = model.Visitor,
                sDate              = DateTime.Now,
                sDateOk            = DateTime.Now,
                idUser             = 18,
                idUserOk           = 18,
                Option2            = true,
                Option3            = true,
                Option4            = true,
                SEOKeyWord         = "",
                NumberHaveGift     = 0,
                idMPADSys          = 0,
                HasSale            = model.HasSale,
                HasValue           = false,
                NameProduct        = model.NameProduct,
                BarCode            = string.IsNullOrEmpty(model.BarCode) ? "" : model.BarCode.Trim(), //luu tam thoi ben bang menu sau do lay du lieu do qua bang menuoption
                HasOnHand          = true,                                                            //mac dinh =1 tuc la con hang. sau khi kiem tra ma vach thi update lai onhand
                SapXepSanPham      = model.SapXepSanPham,
                SapxepDanhMuc      = model.SapxepDanhMuc,
                BarcodeType        = model.BarcodeType,
                ContentTaiSao      = model.ContentTaiSao,
                ContentLabelTaiSao = model.ContentLabelTaiSao,
                ContentTheoSp      = model.ContentTheoSp,
                GiaHot             = false,
                NameProductLong    = model.NameProductLong,
                DungSai            = true,
                SEODescription     = model.SEODescription,
                SEOtitle           = model.SEOtitle,
                NgayHetHang        = DateTime.Now,
                NguoiTao           = User.Identity.Name,
                Bestseller         = false
            };

            _menuRepository.Add(menu);
            _unitOfWork.Commit();
            //sau khi thêm mới sp xong insert 4 sao cho phần đánh giá
            using (var context = new ShopDataContex())
            {
                context.Database.ExecuteSqlCommand("INSERT INTO UserRatings (Rating, IdSanPham)VALUES (4, {0})", menu.id_);
            }
            #endregion
            #region hinh anh khac
            //luu hinh anh khac
            IList <MenuImageMapping.MenuImage> images = !string.IsNullOrEmpty(model.OtherImages)
                                                         ? JsonConvert.DeserializeObject
                                                        <IList <MenuImageMapping.MenuImage> >(model.OtherImages)
                                                         : new List <MenuImageMapping.MenuImage>();
            if (images.Any())
            {
                foreach (var menuImage in images)
                {
                    if (menuImage.id == 0)//them moi hinh anh
                    {
                        MenuImage img = new MenuImage()
                        {
                            idMenu    = menu.id_,
                            date      = DateTime.Now,
                            ImageName = menuImage.ImageName,
                        };
                        _menuImageRepository.Add(img);
                        _unitOfWork.Commit();
                    }
                }
            }
            #endregion
            #region danh muc

            IList <int> idDanhMucs = !string.IsNullOrEmpty(model.DanhMucIds)
                                        ? JsonConvert.DeserializeObject
                                     <IList <int> >(model.DanhMucIds)
                                        : new List <int>();
            if (model.id_ != 0)
            {
                IList <MenuProAdd> menusDanhMuc = _menuProAddRepository.GetMany(o => o.idMenuProAdded == model.id_).ToList();
                foreach (var menuProAdd in menusDanhMuc)
                {
                    if (!idDanhMucs.Contains(menuProAdd.idMenuCatelogy))
                    {
                        //delete nhung thang khong co trong danh sach idDanhMucs
                        _menuProAddRepository.Delete(menuProAdd);
                        _unitOfWork.Commit();
                    }
                }
                if (menusDanhMuc.Any())
                {
                    if (idDanhMucs.Any())
                    {
                        //lay danh sach menuproadd hien tai cua product

                        foreach (var idDanhMuc in idDanhMucs)
                        {
                            if (!menusDanhMuc.Any(o => o.idMenuCatelogy == idDanhMuc))
                            {
                                MenuProAdd menuProAdd = new MenuProAdd()
                                {
                                    idMenuCatelogy = idDanhMuc,
                                    idMenuProAdded = menu.id_,
                                    sDate          = DateTime.Now,
                                    sDateOk        = DateTime.Now,
                                    Style          = "add-san-pham",
                                    idUser         = 15,
                                    idUserOk       = 15
                                };
                                _menuProAddRepository.Add(menuProAdd);
                                _unitOfWork.Commit();
                            }
                        }
                    }

                    IList <int> removeMenuProdIds =
                        menusDanhMuc.Where(o => !idDanhMucs.Contains(o.idMenuCatelogy)).Select(o => o.id_).ToList();
                    if (removeMenuProdIds.Any())
                    {
                        _menuProAddRepository.Delete(o => removeMenuProdIds.Contains(o.id_));
                    }
                }
            }
            else
            {
                if (idDanhMucs.Any())
                {
                    foreach (var idDanhMuc in idDanhMucs)
                    {
                        MenuProAdd menuProAdd = new MenuProAdd()
                        {
                            idMenuCatelogy = idDanhMuc,
                            idMenuProAdded = menu.id_,
                            sDate          = DateTime.Now,
                            sDateOk        = DateTime.Now,
                            Style          = "add-san-pham",
                            idUser         = 15,
                            idUserOk       = 15
                        };
                        _menuProAddRepository.Add(menuProAdd);
                        _unitOfWork.Commit();
                    }
                }
            }

            #endregion
            #region ma vach

            IList <MenuOptionMapping.OptionShow> maVachs = !string.IsNullOrEmpty(model.MaVachJson)
                                                      ? JsonConvert.DeserializeObject
                                                           <IList <MenuOptionMapping.OptionShow> >(model.MaVachJson)
                                                      : new List <MenuOptionMapping.OptionShow>();
            IList <MenuOption> menuOptionsCu = _menuOptionRepository.GetMany(o => o.IdMenu == model.id_).ToList();
            if (maVachs.Any())
            {
                foreach (var optionShow in maVachs)
                {
                    if (optionShow.id_ == 0)//them moi ma vach
                    {
                        MenuOption menuOption = new MenuOption()
                        {
                            IdMenu      = menu.id_,
                            TenLoai     = optionShow.TenLoai,
                            Img         = optionShow.Img.Replace("/files/", ""),
                            Barcode     = string.IsNullOrEmpty(optionShow.Barcode) ? "" : optionShow.Barcode.Trim(),
                            Flag        = optionShow.Flag,
                            NameProduct = menu.NameProduct,
                            SDate       = DateTime.Now,
                            sDateOk     = DateTime.Now
                        };
                        //truoc khi luu ma vach kiem tra ma vach co ton tai trong he thong hay khong
                        int istontai = _menuRepository.ChekBarcode(string.IsNullOrEmpty(optionShow.Barcode) ? "" : optionShow.Barcode.Trim());
                        if (istontai > 0)//ma vach ton tai ==> them duoc
                        {
                            _menuOptionRepository.Add(menuOption);
                            _unitOfWork.Commit();
                            //update hasvalue=1
                            using (var context = new ShopDataContex())
                            {
                                context.Database.ExecuteSqlCommand("update Menu set HasValue='True' where id_ ={0}", menu.id_);
                                //update barcodetype
                                context.Database.ExecuteSqlCommand("update Menu set BarcodeType={0} where id_ ={1}", optionShow.Flag, menu.id_);
                            }
                            //them dl thanh cong roi thi kiem tra san pham: onhand=0 thi an di nguoc lai show ra
                            //neu tong onhand <=0  het hang. nguoc lai con hang
                            int isonhand = _menuRepository.CheckOnhand(optionShow.Barcode.Trim());
                            if (isonhand <= 0)
                            {
                                //update hasOnhand =0

                                using (var context = new ShopDataContex())
                                {
                                    context.Database.ExecuteSqlCommand("update Menu set HasOnHand='false' where id_ ={0}", menu.id_);
                                }
                            }
                        }
                        else
                        {
                            return(RedirectToAction("Index"));
                        }
                    }
                    else
                    {
                        MenuOption sua = menuOptionsCu.FirstOrDefault(o => o.id_ == optionShow.id_);//sua ma vach
                        if (sua != null)
                        {
                            sua.Img     = optionShow.Img;
                            sua.Barcode = optionShow.Barcode.Trim();
                            sua.TenLoai = optionShow.TenLoai;
                            sua.Flag    = optionShow.Flag;
                            _menuOptionRepository.Update(sua);
                            _unitOfWork.Commit();
                        }
                    }
                }
            }


            #endregion
            #region ma vach khong co gi
            //cach 1:lay barcode cua bang menu sau do luu vao bang meuoption
            //truoc khi luu ma vach kiem tra ma vach co ton tai trong he thong hay khong
            if (model.BarcodeType == 0)
            {
                int somavach = _menuRepository.ChekBarcode(menu.BarCode.Trim());
                if (somavach > 0)//ma vach ton tai ==> them duoc
                {
                    //luu san pham
                    MenuOption menuOp = new MenuOption()
                    {
                        IdMenu      = menu.id_,
                        TenLoai     = "không có gì",
                        Img         = "images.png",
                        Barcode     = menu.BarCode,
                        SDate       = DateTime.Now,
                        sDateOk     = DateTime.Now,
                        NameProduct = menu.NameProduct,
                        Flag        = (short)BarcodeType.KhongCoGi
                    };
                    //luu ma vach
                    _menuOptionRepository.Add(menuOp);
                    _unitOfWork.Commit();

                    //update hasvalue=1
                    // _menuRepository.UpdateHasvalue(menu.id_, true);
                    using (var context = new ShopDataContex())
                    {
                        context.Database.ExecuteSqlCommand("update Menu set HasValue='True' where id_ ={0}", menu.id_);
                        //update barcodetype=0 neu la san pham khong co gi
                        context.Database.ExecuteSqlCommand("update Menu set BarcodeType=0 where id_ ={0}", menu.id_);
                    }
                    //them dl thanh cong roi thi kiem tra san pham: onhand=0 thi an di nguoc lai show ra
                    //neu tong onhand <=0  het hang. nguoc lai con hang
                    int tonkho = _menuRepository.CheckOnhand(menu.BarCode);
                    if (tonkho <= 0)
                    {
                        //update hasOnhand = 0
                        using (var context = new ShopDataContex())
                        {
                            context.Database.ExecuteSqlCommand("update Menu set HasOnHand='false' where id_ ={0}", menu.id_);
                        }
                    }
                    //  kiểm tra nếu mã vạch là CB hoặc cb tức là (Combo) thì update Hasonhand =1
                    if (menu.BarCode.IndexOf("CB") != -1 || menu.BarCode.IndexOf("cb") != -1)
                    {
                        using (var context = new ShopDataContex())
                        {
                            context.Database.ExecuteSqlCommand("update Menu set HasOnHand='True' where id_ ={0}", menu.id_);
                        }
                    }
                }
            }

            #endregion
            #region thêm mới tag

            string[] separators = { "," };
            var      taglist    = model.mySingleField.Split(separators, StringSplitOptions.RemoveEmptyEntries);
            //check null: nếu tồn tại thêm mới bình thường
            if (taglist.Any())
            {
                foreach (var tag in taglist)
                {
                    DanhSachTag _tag = new DanhSachTag()
                    {
                        NgayTao  = DateTime.Now,
                        IdMenu   = menu.id_,
                        NguoiTao = 18,
                        TenTag   = tag.Trim(),
                        Code     = RejectMarks(tag.Trim())
                    };
                    _danhSachTagRepository.Add(_tag);
                    _unitOfWork.Commit();
                }
            }
            #endregion
            #region thêm mới kho quà tặng

            if (model.IdQUaTangs != null)
            {
                KhoQuaTang khoQuaTang = new KhoQuaTang()
                {
                    IdMenu        = menu.id_,
                    NgayTao       = DateTime.Now,
                    IdSanPhamTang = model.IdQUaTangs
                };
                _khoQuaTangRepository.Add(khoQuaTang);
                _unitOfWork.Commit();
            }

            #endregion

            _menuRepository.ClearCacheByKey(new List <string>()
            {
                Shop.Web.Core.Cache.CacheKey.AllMenu
            });

            return(RedirectToAction("Index"));
        }
        public ActionResult SaveEdit(SaveProductFormModel model)
        {
            #region san pham
            //SaveProductFormModel
            Menu dlcu = _menuRepository.GetById(model.id_);
            dlcu.NameProduct   = model.NameProduct;
            dlcu.Img           = (model.Img).Replace("/files/", "");
            dlcu.IdNhaCungCap  = model.IdNhaCungCap;
            dlcu.id_           = model.id_;
            dlcu.Option1       = model.Option1;
            dlcu.Option5       = model.Option5;
            dlcu.Option6       = model.Option6;
            dlcu.ContentLabel  = model.ContentLabel;
            dlcu.ContentLabel1 = model.ContentLabel1;
            dlcu.ContentLabel2 = model.ContentLabel2;
            dlcu.ContentLabel3 = model.ContentLabel3;
            dlcu.ContentLabel4 = model.ContentLabel4;
            //dlcu.Content = ChangeImageSEO(model.Content, model.NameProduct, ConvertFont(model.NameProductLong));
            //dlcu.Content1 = ChangeImageSEO1(model.Content1, model.NameProduct, ConvertFont(model.NameProductLong));
            //dlcu.Content2 = ChangeImageSEO2(model.Content2, model.NameProduct, ConvertFont(model.NameProductLong));
            //dlcu.Content3 = ChangeImageSEO3(model.Content3, model.NameProduct, ConvertFont(model.NameProductLong));
            //dlcu.Content4 = ChangeImageSEO4(model.Content4, model.NameProduct, ConvertFont(model.NameProductLong));
            dlcu.Content            = model.Content;
            dlcu.Content1           = model.Content1;
            dlcu.Content2           = model.Content2;
            dlcu.Content3           = model.Content3;
            dlcu.Content4           = model.Content4;
            dlcu.Note               = model.Note;
            dlcu.SapXepSanPham      = model.SapXepSanPham;
            dlcu.sDate              = DateTime.Now;
            dlcu.sDateOk            = DateTime.Now;
            dlcu.ContentLabelTaiSao = model.ContentLabelTaiSao;
            dlcu.ContentTaiSao      = model.ContentTaiSao;
            dlcu.BarCode            = model.BarCode;
            dlcu.ContentTheoSp      = model.ContentTheoSp;
            dlcu.NameProductLong    = model.NameProductLong;
            dlcu.Link               = model.Link; //sửa sản phẩm không sửa tên thành link nữa, cho sửa link trực tiếp
            dlcu.DungSai            = true;
            dlcu.SEOtitle           = model.SEOtitle;
            dlcu.SEODescription     = model.SEODescription;
            dlcu.NguoiTao           = User.Identity.Name;
            dlcu.Bestseller         = false;
            //dlcu.NgayHetHang = DateTime.Now;
            #endregion san pham
            #region hinh anh khac
            //------------- hinh anh khac -----------------


            IList <MenuImageMapping.MenuImage> images = !string.IsNullOrEmpty(model.OtherImages)
                                                       ? JsonConvert.DeserializeObject
                                                        <IList <MenuImageMapping.MenuImage> >(model.OtherImages)
                                                       : new List <MenuImageMapping.MenuImage>();
            foreach (var menuImage in images)
            {
                if (menuImage.id == 0)//them moi hinh anh
                {
                    MenuImage img = new MenuImage()
                    {
                        idMenu    = model.id_,
                        date      = DateTime.Now,
                        ImageName = menuImage.ImageName,
                    };
                    _menuImageRepository.Add(img);
                }
            }
            #endregion hinh anh khac
            #region danh muc

            IList <int> idDanhMucs = !string.IsNullOrEmpty(model.DanhMucIds)
                                        ? JsonConvert.DeserializeObject
                                     <IList <int> >(model.DanhMucIds)
                                        : new List <int>();
            if (model.id_ != 0)
            {
                IList <MenuProAdd> menusDanhMuc = _menuProAddRepository.GetMany(o => o.idMenuProAdded == model.id_).ToList();
                foreach (var menuProAdd in menusDanhMuc)
                {
                    if (!idDanhMucs.Contains(menuProAdd.idMenuCatelogy))
                    {
                        //delete nhung thang khong co trong danh sach idDanhMucs
                        _menuProAddRepository.Delete(menuProAdd);
                        _unitOfWork.Commit();
                    }
                }
                if (idDanhMucs.Any())
                {
                    //lay danh sach menuproadd hien tai cua product

                    foreach (var idDanhMuc in idDanhMucs)
                    {
                        if (!menusDanhMuc.Any(o => o.idMenuCatelogy == idDanhMuc))
                        {
                            MenuProAdd menuProAdd = new MenuProAdd()
                            {
                                idMenuCatelogy = idDanhMuc,
                                idMenuProAdded = model.id_,
                                sDate          = DateTime.Now,
                                sDateOk        = DateTime.Now,
                                Style          = "add-san-pham",
                                idUser         = 15,
                                idUserOk       = 15
                            };
                            _menuProAddRepository.Add(menuProAdd);
                            _unitOfWork.Commit();
                        }
                    }
                }
            }
            else
            {
                if (idDanhMucs.Any())
                {
                    foreach (var idDanhMuc in idDanhMucs)
                    {
                        MenuProAdd menuProAdd = new MenuProAdd()
                        {
                            idMenuCatelogy = idDanhMuc,
                            idMenuProAdded = model.id_,
                            sDate          = DateTime.Now,
                            sDateOk        = DateTime.Now,
                            Style          = "add-san-pham",
                            idUser         = 15,
                            idUserOk       = 15
                        };
                        _menuProAddRepository.Add(menuProAdd);
                        _unitOfWork.Commit();
                    }
                }
            }

            #endregion
            #region danh sach tag
            string[] separators = { "," };
            var      taglist    = model.mySingleField.Split(separators, StringSplitOptions.RemoveEmptyEntries);
            //check null: nếu tồn tại thêm mới bình thường
            if (taglist.Any())
            {
                foreach (var tag in taglist)
                {
                    //check trung
                    int checktrung = _danhSachTagRepository.GetTagNamebyIdmenu(model.id_, tag.Trim());
                    if (checktrung == 0)
                    {
                        DanhSachTag _tag = new DanhSachTag()
                        {
                            NgayTao  = DateTime.Now,
                            IdMenu   = model.id_,
                            NguoiTao = 18,
                            TenTag   = tag.Trim(),
                            Code     = RejectMarks(tag.Trim())
                        };
                        _danhSachTagRepository.Add(_tag);
                    }
                }
            }
            #endregion
            #region update kho quà tặng

            var idkhoqt = _khoQuaTangRepository.Get(o => o.IdMenu == model.id_);
            if (idkhoqt == null)
            {
                //thêm mới
                #region thêm mới kho quà tặng

                if (model.IdQUaTangs != null)
                {
                    KhoQuaTang khoQuaTang = new KhoQuaTang()
                    {
                        IdMenu        = model.id_,
                        NgayTao       = DateTime.Now,
                        IdSanPhamTang = model.IdQUaTangs.Remove(0, 1)
                    };
                    _khoQuaTangRepository.Add(khoQuaTang);
                    _unitOfWork.Commit();
                }

                #endregion
            }
            else
            {
                //update
                KhoQuaTang kho = _khoQuaTangRepository.GetById(idkhoqt.Id);
                kho.Id            = idkhoqt.Id;
                kho.IdMenu        = model.id_;
                kho.NgayTao       = DateTime.Now;
                kho.IdSanPhamTang = model.IdQUaTangs;
                _khoQuaTangRepository.Update(kho);
            }

            #endregion
            _menuRepository.Update(dlcu);

            _menuRepository.ClearCacheByKey(new List <string>()
            {
                Shop.Web.Core.Cache.CacheKey.AllMenu
            });
            _unitOfWork.Commit();
            return(RedirectToAction("Index"));
        }