public static bool AccessTest(ProductSkuMap discount, ModelGeneralAttribute attr)
 {
     if (attr.Acl)
     {
         if (LS.CurrentShop != null)
         {
             return(discount.ShopID == LS.CurrentShop.ID);
         }
         return(false);
     }
     ;
     return(true);
 }
        public static ProductSkuMap OnUpdating(ProductSkuMap item)
        {
            if (!string.IsNullOrEmpty(item.ProductSKU))
            {
                //check if shop product in DB

                var sid               = item.ShopID;
                var sku               = item.ProductSKU;
                var product           = LS.CurrentEntityContext.Products.AsNoTracking().FirstOrDefault(x => x.SKU == sku);
                int productCategoryID = 0;
                if (product != null)
                {
                    var pid         = product.ID;
                    var productShop = LS.CurrentEntityContext.ProductShopMap.AsNoTracking().FirstOrDefault(x => x.ProductID == pid && x.ShopID == sid);


                    if (productShop == null)
                    {
                        //import
                        DeleteOldProductShop(item.ID, item.ShopID);
                        var newProductShop = new ProductShop();
                        newProductShop.CreateDate = DateTime.Now;
                        newProductShop.Price      = item.Price;
                        if (product.UnitsPerPackage.HasValue && product.UnitsPerPackage.Value > 0)
                        {
                            newProductShop.PriceByUnit = newProductShop.Price / product.UnitsPerPackage.Value;
                        }
                        newProductShop.ProductID    = product.ID;
                        newProductShop.Quantity     = item.Quantity;
                        newProductShop.QuantityType = ProductQuantityType.NotCheck;
                        newProductShop.ShopID       = sid;


                        bool needAddCategory = true;
                        productCategoryID = product.CategoryID;
                        //category check
                        if (productCategoryID > 0)
                        {
                            var shopCategories = LS.CurrentEntityContext.ShopCategories.AsNoTracking().Where(x => x.ShopID == sid);
                            var categories     = LS.CurrentEntityContext.Categories.AsNoTracking();

                            if (!shopCategories.Any(x => x.CategoryID == productCategoryID))
                            {
                                //create and add
                                var shopCat = new ShopCategory()
                                {
                                    CategoryID   = productCategoryID,
                                    DisplayOrder = 1000,
                                    Published    = true,
                                    ShopID       = sid
                                };
                                LS.CurrentEntityContext.ShopCategories.Add(shopCat);
                                //check if parent cat in shop map
                                var cat = categories.FirstOrDefault(x => x.ID == productCategoryID);
                                if (cat != null && cat.ParentCategoryID > 0)
                                {
                                    int parentCategoryID = cat.ParentCategoryID;
                                    if (!shopCategories.Any(x => x.CategoryID == parentCategoryID))
                                    {
                                        //create and add
                                        var shopCatParent = new ShopCategory()
                                        {
                                            CategoryID   = parentCategoryID,
                                            DisplayOrder = 1000,
                                            Published    = true,
                                            ShopID       = sid
                                        };
                                        LS.CurrentEntityContext.ShopCategories.Add(shopCatParent);
                                    }
                                }
                            }
                            else
                            {
                                newProductShop.NotInCategory = true;
                                if (needAddCategory)//run only one time
                                {
                                    var otherCategory = categories.FirstOrDefault(x => x.Name == "שונות" && x.ParentCategoryID == 0);
                                    if (otherCategory == null)
                                    {
                                        otherCategory = new Category()
                                        {
                                            DisplayOrder = 1000000,
                                            Name         = "שונות",
                                            Published    = true,
                                        };
                                        LS.CurrentEntityContext.Categories.Add(otherCategory);
                                    }
                                    var catshopmap = shopCategories.FirstOrDefault(x => x.CategoryID == otherCategory.ID);
                                    if (catshopmap == null)
                                    {
                                        var otherShopCategory = new ShopCategory()
                                        {
                                            CategoryID   = otherCategory.ID,
                                            DisplayOrder = 1000000,
                                            Published    = true,
                                            ShopID       = sid
                                        };
                                        LS.CurrentEntityContext.ShopCategories.Add(otherShopCategory);
                                    }
                                    else
                                    {
                                        if (!catshopmap.Published)
                                        {
                                            var catshopMapAttached = LS.CurrentEntityContext.ShopCategories.FirstOrDefault(x => x.ID == catshopmap.ID);
                                            if (catshopMapAttached != null)
                                            {
                                                catshopMapAttached.Published = true;
                                            }
                                        }
                                    }
                                    needAddCategory = false;
                                }
                            }
                        }



                        LS.CurrentEntityContext.ProductShopMap.Add(newProductShop);
                        item.Imported = true;
                    }
                    else
                    {
                        item.Imported = true;
                    }
                }
            }
            //delete product from shop
            if (string.IsNullOrEmpty(item.ProductSKU))
            {
                item.Imported = false;
                DeleteOldProductShop(item.ID, item.ShopID);
            }
            return(item);
        }