/// <summary>
        /// Returned all properties belongs to specified catalog
        /// For virtual catalog also include all properties for categories linked to this virtual catalog
        /// </summary>
        /// <param name="catalogId"></param>
        /// <returns></returns>
        public dataModel.Property[] GetAllCatalogProperties(string catalogId)
        {
            var retVal  = new List <dataModel.Property>();
            var catalog = Catalogs.FirstOrDefault(x => x.Id == catalogId);

            if (catalog != null)
            {
                var propertyIds = Properties.Where(x => x.CatalogId == catalogId).Select(x => x.Id).ToArray();
                if (catalog.Virtual)
                {
                    //get all category relations
                    var linkedCategoryIds = CategoryLinks.Where(x => x.TargetCatalogId == catalogId)
                                            .Select(x => x.SourceCategoryId)
                                            .Distinct()
                                            .ToArray();
                    //linked product categories links
                    var linkedProductCategoryIds = CategoryItemRelations.Where(x => x.CatalogId == catalogId)
                                                   .Join(Items, link => link.ItemId, item => item.Id, (link, item) => item)
                                                   .Select(x => x.CategoryId)
                                                   .Distinct()
                                                   .ToArray();
                    linkedCategoryIds = linkedCategoryIds.Concat(linkedProductCategoryIds).Distinct().ToArray();
                    var expandedFlatLinkedCategoryIds = linkedCategoryIds.Concat(GetAllChildrenCategoriesIds(linkedCategoryIds)).Distinct().ToArray();

                    propertyIds = propertyIds.Concat(Properties.Where(x => expandedFlatLinkedCategoryIds.Contains(x.CategoryId)).Select(x => x.Id)).Distinct().ToArray();
                    var linkedCatalogIds = Categories.Where(x => expandedFlatLinkedCategoryIds.Contains(x.Id)).Select(x => x.CatalogId).Distinct().ToArray();
                    propertyIds = propertyIds.Concat(Properties.Where(x => linkedCatalogIds.Contains(x.CatalogId) && x.CategoryId == null).Select(x => x.Id)).Distinct().ToArray();
                }
                retVal.AddRange(GetPropertiesByIds(propertyIds));
            }
            return(retVal.ToArray());
        }
Exemplo n.º 2
0
        public CatalogDescription GetDefaultCatalog()
        {
            CatalogDescription result = Catalogs
                                        .FirstOrDefault(catalog => catalog.Default)
                                        ?? Catalogs.First();

            return(result);
        }
Exemplo n.º 3
0
        public bool RemoveProduct(string sku)
        {
            var product = Catalogs.FirstOrDefault(p => p.SKU.Equals(sku, StringComparison.InvariantCultureIgnoreCase));

            if (product != null)
            {
                var removeSuccess = Catalogs.Remove(product);
                Barcodes.RemoveAll(bc => bc.Product.SKU.Equals(sku, StringComparison.InvariantCultureIgnoreCase));

                return(removeSuccess);
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 添加商品
        /// </summary>
        protected virtual void ImportCommodities()
        {
            LoadCatalogs();
            var dics = GetImportCatalogDirectories();

            CommoditySequence = GetCommoditySequence();
            foreach (var dic in dics)
            {
                var catalog = Catalogs == null ? null : Catalogs.FirstOrDefault(it => it.Name == dic.Name);
                if (catalog == null)
                {
                    continue;
                }
                CreateCommodity(dic, catalog);
            }
        }
Exemplo n.º 5
0
        public bool AddBarcodes(string sku, string[] barcodes, int supplierID)
        {
            var product  = Catalogs.FirstOrDefault(p => p.SKU.Equals(sku, StringComparison.InvariantCultureIgnoreCase));
            var supplier = Suppliers.FirstOrDefault(s => s.ID == supplierID);

            if (product == null || supplier == null)
            {
                return(false);
            }

            foreach (string barcode in barcodes)
            {
                if (!Barcodes.Any(bc => bc.Barcode.Equals(barcode, StringComparison.InvariantCultureIgnoreCase)))
                {
                    Barcodes.Add(new SupplierProductBarcode()
                    {
                        Barcode = barcode, Product = product, Supplier = supplier
                    });
                }
            }

            return(true);
        }