/// <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()); }
public CatalogDescription GetDefaultCatalog() { CatalogDescription result = Catalogs .FirstOrDefault(catalog => catalog.Default) ?? Catalogs.First(); return(result); }
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); } }
/// <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); } }
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); }