Пример #1
0
        private void AddConfiguredAttributes(VendorAssortmentBulk.VendorAssortmentItem configurableProduct, bool hasCupsize)
        {
            var configuredAttributesNames = new List <String> {
                "Color", "Size"
            };

            if (!_configuredAttributes.Keys.Contains(configurableProduct.VendorProduct.VendorItemNumber))
            {
                _configuredAttributes.Add(configurableProduct.VendorProduct.VendorItemNumber, configuredAttributesNames);
            }
        }
Пример #2
0
        protected override void Process()
        {
            var defaultVendorIDSetting = GetConfiguration().AppSettings.Settings["VendorID"];

            if (defaultVendorIDSetting == null)
            {
                throw new Exception("Setting VendorID is missing");
            }

            DefaultVendorID = Int32.Parse(defaultVendorIDSetting.Value);

            var vendorIdsToProcess = GetConfiguration().AppSettings.Settings["VendorIDs"];

            if (vendorIdsToProcess == null)
            {
                throw new Exception("Setting VendorIDs is missing");
            }

            _vendorIDs = vendorIdsToProcess.Value.Split(',').Select(x => Convert.ToInt32(x)).ToArray();

            var attributes = new List <ProductAttributeMetaData>();

            using (var unit = GetUnitOfWork())
            {
                try
                {
                    InitAttributeMapping();
                    SetupAttributes(unit, _attributeMapping, DefaultVendorID, out attributes);
                }
                catch (Exception e)
                {
                    log.Debug(e.InnerException);
                }

                foreach (var vendorID in _vendorIDs)
                {
                    _configuredAttributes = new Dictionary <string, List <string> >();



                    var repositoryProductTypes = new ProductTypeRepository((IServiceUnitOfWork)unit, DefaultVendorID);
                    var repositoryModels       = new ProductModelRepository((IServiceUnitOfWork)unit, DefaultVendorID);

                    bool useAdvicePrice        = false;
                    var  useAdvicePriceSetting = unit.Scope.Repository <VendorSetting>().GetSingle(c => c.VendorID == vendorID && c.SettingKey == USE_ADVICE_PRICE_FROM_XML_SETTING_KEY);
                    if (useAdvicePriceSetting != null)
                    {
                        bool.TryParse(useAdvicePriceSetting.Value, out useAdvicePrice);
                    }


                    var ReturnCostsVendorItemNumber = unit.Scope.Repository <VendorSetting>().GetSingle(c => c.VendorID == vendorID && c.SettingKey == "ReturnCostsProduct");
                    if (ReturnCostsVendorItemNumber != null)
                    {
                        ReturnVendorItemNumber = ReturnCostsVendorItemNumber.Value;
                    }

                    var ShipmentCostsVendorItemNumber = unit.Scope.Repository <VendorSetting>().GetSingle(c => c.VendorID == vendorID && c.SettingKey == "ShipmentCostsProduct");
                    if (ShipmentCostsVendorItemNumber != null)
                    {
                        ShipmentVendorItemNumber = ShipmentCostsVendorItemNumber.Value;
                    }

                    foreach (var attributeMapping in _attributeMapping)
                    {
                        attributeMapping.VendorID = vendorID;
                    }


                    var xmlAssortmentRepository = new XmlAssortmentRepository(vendorID, unit, log);
                    foreach (var assortment in xmlAssortmentRepository.GetAssortment(vendorID))
                    {
                        var assortmentList  = new List <VendorAssortmentBulk.VendorAssortmentItem>();
                        var stockPerProduct = (from p in unit.Scope.Repository <Product>().GetAll(c => c.SourceVendorID == vendorID)
                                               let stock = p.VendorStocks.FirstOrDefault(c => c.VendorID == vendorID)
                                                           where stock != null
                                                           select new
                        {
                            p.VendorItemNumber,
                            stock.QuantityOnHand
                        }).ToDictionary(c => c.VendorItemNumber, c => c.QuantityOnHand);

                        var productGroup = assortment.Assortments.GroupBy(c => c.ConfigurableVendorItemNumber).ToList();

                        foreach (var configurableProductGroup in productGroup)
                        {
                            var first = configurableProductGroup.First();
                            var isConfigurableProductAWebsiteProduct = configurableProductGroup.Select(x => x.Website).Contains("WEB");

                            var type = first.TypeCode;

                            var typeObject  = repositoryProductTypes.Get(type);
                            var modelObject = repositoryModels.Get(first.ModelCode);

                            #region "Configurable Product"
                            var configurableProduct = new VendorAssortmentBulk.VendorAssortmentItem();

                            if (first.ConfigurableVendorItemNumber != ShipmentVendorItemNumber && first.ConfigurableVendorItemNumber != ReturnVendorItemNumber)
                            {
                                #region BrandVendor
                                configurableProduct.BrandVendors = new List <VendorAssortmentBulk.VendorImportBrand>()
                                {
                                    new VendorAssortmentBulk.VendorImportBrand()
                                    {
                                        VendorID        = DefaultVendorID,
                                        VendorBrandCode = first.Brand,
                                        Name            = first.Brand
                                    }
                                };
                                #endregion

                                #region GeneralProductInfo
                                configurableProduct.VendorProduct = new VendorAssortmentBulk.VendorProduct
                                {
                                    VendorID                    = vendorID,
                                    DefaultVendorID             = DefaultVendorID,
                                    CustomItemNumber            = configurableProductGroup.Key,
                                    VendorItemNumber            = configurableProductGroup.Key,
                                    VendorBrandCode             = first.Brand,
                                    IsConfigurable              = 1,
                                    VendorProductGroupCode1     = first.ProductGroupCode1,
                                    VendorProductGroupCodeName1 = first.ProductGroupCode1,
                                    VendorProductGroupCode2     = first.ProductGroupCode2,
                                    VendorProductGroupCodeName2 = first.ProductGroupCode2,
                                    VendorProductGroupCode3     = first.ProductGroupCode3,
                                    VendorProductGroupCodeName3 = first.ProductGroupCode3,
                                    VendorProductGroupCode4     = first.Brand,
                                    VendorProductGroupCodeName4 = first.Brand,
                                    ShortDescription            = first.ShortDescription,
                                    LongDescription             = first.LongDescription,
                                    Barcode = String.Empty
                                };
                                #endregion

                                #region ProductDescription
                                configurableProduct.VendorProductDescriptions = new List <VendorAssortmentBulk.VendorProductDescription>()
                                {
                                    new Concentrator.Objects.Vendors.Bulk.VendorAssortmentBulk.VendorProductDescription()
                                    {
                                        VendorID                = vendorID,
                                        DefaultVendorID         = DefaultVendorID,
                                        CustomItemNumber        = first.ConfigurableVendorItemNumber,
                                        LanguageID              = 1,
                                        ProductName             = first.ShortDescription,
                                        ShortContentDescription = first.ShortDescription,
                                        LongContentDescription  = first.LongDescription
                                    }
                                };
                                #endregion

                                #region Attributes

                                configurableProduct.VendorImportAttributeValues = new List
                                                                                  <VendorAssortmentBulk.VendorImportAttributeValue>()
                                {
                                    new VendorAssortmentBulk.VendorImportAttributeValue()
                                    {
                                        AttributeCode    = "Season",
                                        Value            = first.ProductGroupCode2,
                                        AttributeID      = attributes.FirstOrDefault(c => c.AttributeCode == "Season").AttributeID,
                                        CustomItemNumber = first.ConfigurableVendorItemNumber,
                                        DefaultVendorID  = DefaultVendorID,
                                        LanguageID       = null,
                                        VendorID         = ConcentratorVendorID
                                    },
                                    new Concentrator.Objects.Vendors.Bulk.VendorAssortmentBulk.VendorImportAttributeValue()
                                    {
                                        AttributeCode    = "IsBra",
                                        Value            = typeObject == null ? "false" : typeObject.IsBra.ToString(),
                                        AttributeID      = attributes.FirstOrDefault(c => c.AttributeCode == "IsBra").AttributeID,
                                        CustomItemNumber = first.ConfigurableVendorItemNumber,
                                        DefaultVendorID  = DefaultVendorID,
                                        LanguageID       = null,
                                        VendorID         = ConcentratorVendorID
                                    },
                                    new Concentrator.Objects.Vendors.Bulk.VendorAssortmentBulk.VendorImportAttributeValue()
                                    {
                                        AttributeCode    = "Group",
                                        Value            = typeObject == null ? type : typeObject.ProductType.ToString(),
                                        AttributeID      = attributes.FirstOrDefault(c => c.AttributeCode == "Group").AttributeID,
                                        CustomItemNumber = first.ConfigurableVendorItemNumber,
                                        DefaultVendorID  = DefaultVendorID,
                                        LanguageID       = null,
                                        VendorID         = ConcentratorVendorID
                                    }
                                };

                                #region ProductType Translation Attributes

                                if (typeObject != null) //add translations
                                {
                                    foreach (var translation in typeObject.Translations)
                                    {
                                        configurableProduct.VendorImportAttributeValues.Add(new VendorAssortmentBulk.VendorImportAttributeValue
                                        {
                                            AttributeCode    = "Type",
                                            Value            = translation.Value,
                                            AttributeID      = attributes.FirstOrDefault(c => c.AttributeCode == "Type").AttributeID,
                                            CustomItemNumber = first.ConfigurableVendorItemNumber,
                                            DefaultVendorID  = DefaultVendorID,
                                            LanguageID       = translation.Key.ToString(),
                                            VendorID         = ConcentratorVendorID
                                        });
                                    }
                                }

                                #endregion

                                #region Model Translation

                                if (modelObject != null)
                                {
                                    configurableProduct.VendorImportAttributeValues.Add(new Concentrator.Objects.Vendors.Bulk.VendorAssortmentBulk.VendorImportAttributeValue()
                                    {
                                        AttributeCode    = "Model",
                                        Value            = modelObject.Translation,
                                        AttributeID      = attributes.FirstOrDefault(c => c.AttributeCode == "Model").AttributeID,
                                        CustomItemNumber = first.ConfigurableVendorItemNumber,
                                        DefaultVendorID  = DefaultVendorID,
                                        LanguageID       = null,
                                        VendorID         = ConcentratorVendorID
                                    });
                                }

                                #endregion

                                #endregion

                                #region Prices
                                configurableProduct.VendorImportPrices =
                                    new List <Concentrator.Objects.Vendors.Bulk.VendorAssortmentBulk.VendorImportPrice>()
                                {
                                    new Concentrator.Objects.Vendors.Bulk.VendorAssortmentBulk.VendorImportPrice()
                                    {
                                        VendorID         = vendorID,
                                        DefaultVendorID  = DefaultVendorID,
                                        CustomItemNumber = configurableProductGroup.Key,
                                        CommercialStatus = isConfigurableProductAWebsiteProduct ? "Active" : "Non-Web",
                                        Price            = "0"
                                    }
                                };
                                #endregion

                                #region VendorStock
                                configurableProduct.VendorImportStocks = new List <VendorAssortmentBulk.VendorImportStock>()
                                {
                                    new VendorAssortmentBulk.VendorImportStock()
                                    {
                                        VendorID         = vendorID,
                                        DefaultVendorID  = DefaultVendorID,
                                        CustomItemNumber = configurableProductGroup.Key,
                                        StockType        = "Webshop",
                                        StockStatus      = "NonStock"
                                    }
                                };
                                #endregion

                                assortmentList.Add(configurableProduct);

                                configurableProduct.RelatedProducts = new List <VendorAssortmentBulk.VendorImportRelatedProduct>();

                                var otherProductsFromModel =
                                    assortment.Assortments.Where(c => c.ModelCode == first.ModelCode && c.TypeCode != first.ModelCode)
                                    .Select(c => c.ConfigurableVendorItemNumber)
                                    .Distinct()
                                    .ToList();
                                var otherProductsFromModelAndSameType      = new List <string>();
                                var otherProductsFromModelAndDifferentType = new List <string>();

                                foreach (var product in otherProductsFromModel)
                                {
                                    //var typeRelated = product.Split(new char[] {'-'}, StringSplitOptions.RemoveEmptyEntries)[1];
                                    var typeObjectRelated = repositoryProductTypes.Get(type);

                                    if (typeObjectRelated != null && typeObject != null)
                                    {
                                        if (typeObjectRelated.IsBra == typeObject.IsBra)
                                        {
                                            otherProductsFromModelAndSameType.Add(product);
                                        }
                                        else
                                        {
                                            otherProductsFromModelAndDifferentType.Add(product);
                                        }
                                    }
                                }

                                foreach (var relatedFromType in otherProductsFromModelAndSameType)
                                {
                                    configurableProduct.RelatedProducts.Add(new VendorAssortmentBulk.VendorImportRelatedProduct()
                                    {
                                        CustomItemNumber        = configurableProductGroup.Key,
                                        DefaultVendorID         = DefaultVendorID,
                                        VendorID                = vendorID,
                                        RelatedCustomItemNumber = relatedFromType,
                                        IsConfigured            = 0,
                                        RelatedProductType      = "ModelType"
                                    });
                                }

                                foreach (var relatedFromType in otherProductsFromModelAndDifferentType)
                                {
                                    configurableProduct.RelatedProducts.Add(new VendorAssortmentBulk.VendorImportRelatedProduct()
                                    {
                                        CustomItemNumber        = configurableProductGroup.Key,
                                        DefaultVendorID         = DefaultVendorID,
                                        VendorID                = vendorID,
                                        RelatedCustomItemNumber = relatedFromType,
                                        IsConfigured            = 0,
                                        RelatedProductType      = "ModelTypeCross"
                                    });
                                }
                            }
                            #endregion

                            var isBra = typeObject != null && typeObject.IsBra;

                            foreach (var simpleItem in configurableProductGroup)
                            {
                                var cupsizeProduct = false;

                                #region "Simple Product"
                                var simpleProduct = new VendorAssortmentBulk.VendorAssortmentItem();

                                #region "Brand"
                                simpleProduct.BrandVendors = new List <VendorAssortmentBulk.VendorImportBrand>()
                                {
                                    new VendorAssortmentBulk.VendorImportBrand()
                                    {
                                        VendorID        = DefaultVendorID,
                                        VendorBrandCode = simpleItem.Brand,
                                        Name            = simpleItem.Brand
                                    }
                                };
                                #endregion

                                #region "Vendor Product"
                                simpleProduct.VendorProduct = new VendorAssortmentBulk.VendorProduct
                                {
                                    VendorID                    = vendorID,
                                    DefaultVendorID             = DefaultVendorID,
                                    CustomItemNumber            = simpleItem.SimpleVendorItemNumber,
                                    VendorItemNumber            = simpleItem.SimpleVendorItemNumber,
                                    VendorBrandCode             = first.Brand,
                                    IsConfigurable              = 0,
                                    VendorProductGroupCode1     = simpleItem.ProductGroupCode1,
                                    VendorProductGroupCodeName1 = simpleItem.ProductGroupCode1,
                                    VendorProductGroupCode2     = simpleItem.ProductGroupCode2,
                                    VendorProductGroupCodeName2 = simpleItem.ProductGroupCode2,
                                    VendorProductGroupCode3     = simpleItem.ProductGroupCode3,
                                    VendorProductGroupCodeName3 = simpleItem.ProductGroupCode3,
                                    VendorProductGroupCode4     = first.Brand,
                                    VendorProductGroupCodeName4 = first.Brand,
                                    ShortDescription            = simpleItem.ShortDescription,
                                    LongDescription             = simpleItem.LongDescription,
                                    Barcode = simpleItem.Barcode,
                                    ParentProductCustomItemNumber = configurableProductGroup.Key
                                };
                                #endregion

                                #region "Product Description"
                                simpleProduct.VendorProductDescriptions = new List <VendorAssortmentBulk.VendorProductDescription>()
                                {
                                    new Concentrator.Objects.Vendors.Bulk.VendorAssortmentBulk.VendorProductDescription()
                                    {
                                        VendorID                = vendorID,
                                        DefaultVendorID         = DefaultVendorID,
                                        CustomItemNumber        = simpleItem.SimpleVendorItemNumber,
                                        LanguageID              = 1,
                                        ProductName             = simpleItem.ShortDescription,
                                        ShortContentDescription = simpleItem.ShortDescription,
                                        LongContentDescription  = simpleItem.LongDescription
                                    }
                                };
                                #endregion

                                #region "Attribute"
                                simpleProduct.VendorImportAttributeValues = new List <VendorAssortmentBulk.VendorImportAttributeValue>()
                                {
                                    new Concentrator.Objects.Vendors.Bulk.VendorAssortmentBulk.VendorImportAttributeValue()
                                    {
                                        AttributeCode    = "Color",
                                        Value            = simpleItem.ColourcodeSupplier,
                                        AttributeID      = attributes.FirstOrDefault(c => c.AttributeCode == "Color").AttributeID,
                                        CustomItemNumber = simpleItem.SimpleVendorItemNumber,
                                        DefaultVendorID  = DefaultVendorID,
                                        LanguageID       = null,
                                        VendorID         = ConcentratorVendorID
                                    },
                                    new Concentrator.Objects.Vendors.Bulk.VendorAssortmentBulk.VendorImportAttributeValue()
                                    {
                                        AttributeCode    = "Group",
                                        Value            = typeObject == null ? type : typeObject.ProductType.ToString(),
                                        AttributeID      = attributes.FirstOrDefault(c => c.AttributeCode == "Group").AttributeID,
                                        CustomItemNumber = simpleItem.SimpleVendorItemNumber,
                                        DefaultVendorID  = DefaultVendorID,
                                        LanguageID       = null,
                                        VendorID         = ConcentratorVendorID
                                    }
                                };

                                if (!string.IsNullOrEmpty(simpleItem.SubsizeSupplier))
                                {
                                    simpleProduct.VendorImportAttributeValues.Add(new VendorAssortmentBulk.VendorImportAttributeValue()
                                    {
                                        AttributeCode    = "Size",
                                        Value            = string.Format("{0}{1}", simpleItem.SizeSupplier, simpleItem.SubsizeSupplier),
                                        AttributeID      = attributes.FirstOrDefault(c => c.AttributeCode == "Size").AttributeID,
                                        CustomItemNumber = simpleItem.SimpleVendorItemNumber,
                                        DefaultVendorID  = DefaultVendorID,
                                        LanguageID       = null,
                                        VendorID         = ConcentratorVendorID
                                    });

                                    cupsizeProduct = true;
                                }
                                else
                                {
                                    simpleProduct.VendorImportAttributeValues.Add(new VendorAssortmentBulk.VendorImportAttributeValue()
                                    {
                                        AttributeCode    = "Size",
                                        Value            = simpleItem.SizeSupplier,
                                        AttributeID      = attributes.FirstOrDefault(c => c.AttributeCode == "Size").AttributeID,
                                        CustomItemNumber = simpleItem.SimpleVendorItemNumber,
                                        DefaultVendorID  = DefaultVendorID,
                                        LanguageID       = null,
                                        VendorID         = ConcentratorVendorID
                                    });
                                }

                                if (isBra)
                                {
                                    simpleProduct.VendorImportAttributeValues.Add(new VendorAssortmentBulk.VendorImportAttributeValue()
                                    {
                                        AttributeCode    = "TopSize",
                                        Value            = string.Format("{0}{1}", simpleItem.SizeSupplier, simpleItem.SubsizeSupplier),
                                        AttributeID      = attributes.FirstOrDefault(c => c.AttributeCode == "TopSize").AttributeID,
                                        CustomItemNumber = simpleItem.SimpleVendorItemNumber,
                                        DefaultVendorID  = DefaultVendorID,     // 50
                                        LanguageID       = null,
                                        VendorID         = ConcentratorVendorID // 48
                                    });
                                }
                                else
                                {
                                    simpleProduct.VendorImportAttributeValues.Add(new VendorAssortmentBulk.VendorImportAttributeValue()
                                    {
                                        AttributeCode    = "BottomSize",
                                        Value            = simpleItem.SizeSupplier,
                                        AttributeID      = attributes.FirstOrDefault(c => c.AttributeCode == "BottomSize").AttributeID,
                                        CustomItemNumber = simpleItem.SimpleVendorItemNumber,
                                        DefaultVendorID  = DefaultVendorID,     // 50
                                        LanguageID       = null,
                                        VendorID         = ConcentratorVendorID // 48
                                    });
                                }


                                #endregion

                                #region "Price"
                                simpleProduct.VendorImportPrices = new List <Concentrator.Objects.Vendors.Bulk.VendorAssortmentBulk.VendorImportPrice>()
                                {
                                    new Concentrator.Objects.Vendors.Bulk.VendorAssortmentBulk.VendorImportPrice()
                                    {
                                        VendorID         = vendorID,
                                        DefaultVendorID  = DefaultVendorID,
                                        CustomItemNumber = simpleItem.SimpleVendorItemNumber,
                                        CommercialStatus = simpleItem.Website.Equals("WEB") ? "Active" : "Non-Web",
                                        Price            = (useAdvicePrice  ? simpleItem.AdvicePrice :  simpleItem.LabellingPrice).ToString(CultureInfo.InvariantCulture),
                                        CostPrice        = (useAdvicePrice  ? simpleItem.AdvicePrice :  simpleItem.LabellingPrice).ToString(CultureInfo.InvariantCulture)
                                    }
                                };
                                #endregion

                                #region "Stock"

                                if (!stockPerProduct.ContainsKey(simpleItem.SimpleVendorItemNumber))
                                {
                                    simpleProduct.VendorImportStocks = new List <VendorAssortmentBulk.VendorImportStock>()
                                    {
                                        new VendorAssortmentBulk.VendorImportStock()
                                        {
                                            VendorID         = vendorID,
                                            DefaultVendorID  = DefaultVendorID,
                                            CustomItemNumber = simpleItem.SimpleVendorItemNumber,
                                            StockType        = "Webshop",
                                            StockStatus      = "ENA"
                                        }
                                    };
                                }
                                else
                                {
                                    simpleProduct.VendorImportStocks = new List <VendorAssortmentBulk.VendorImportStock>();
                                }
                                #endregion

                                assortmentList.Add(simpleProduct);

                                if (first.ConfigurableVendorItemNumber != ShipmentVendorItemNumber && first.ConfigurableVendorItemNumber != ReturnVendorItemNumber)
                                {
                                    configurableProduct.RelatedProducts.Add(new VendorAssortmentBulk.VendorImportRelatedProduct()
                                    {
                                        CustomItemNumber        = first.ConfigurableVendorItemNumber,
                                        DefaultVendorID         = DefaultVendorID,
                                        IsConfigured            = 1,
                                        VendorID                = vendorID,
                                        RelatedCustomItemNumber = simpleItem.SimpleVendorItemNumber,
                                        RelatedProductType      = "Configured product"
                                    });

                                    AddConfiguredAttributes(configurableProduct, cupsizeProduct);
                                }
                                #endregion
                            }
                        }

                        try
                        {
                            var bulkConfig = new VendorAssortmentBulkConfiguration {
                                IsPartialAssortment = IsPartialAssortment
                            };
                            using (var vendorAssortmentBulk = new VendorAssortmentBulk(assortmentList, vendorID, DefaultVendorID, bulkConfig))
                            {
                                vendorAssortmentBulk.Init(unit.Context);
                                vendorAssortmentBulk.Sync(unit.Context);
                            }
                        }
                        catch (Exception ex)
                        {
                            log.AuditError(ex.Message);
                        }

                        foreach (var productAttributeConfiguration in _configuredAttributes)
                        {
                            var product = unit.Scope.Repository <Product>().GetSingle(c => c.VendorItemNumber == productAttributeConfiguration.Key && c.IsConfigurable);

                            foreach (var code in productAttributeConfiguration.Value)
                            {
                                var ent = product.ProductAttributeMetaDatas.FirstOrDefault(c => c.AttributeCode == code);

                                if (ent == null)
                                {
                                    var attr = unit.Scope.Repository <ProductAttributeMetaData>().GetSingle(c => c.AttributeCode == code);

                                    product.ProductAttributeMetaDatas.Add(attr);
                                }
                            }
                        }
                        unit.Save();
                        CopyArticleInformationToTnt(assortment.FileName);
                    }
                }
            }
        }
        private VendorAssortmentBulk.VendorAssortmentItem GetVendorAssortmentForSimpleProduct(Article article)
        {
            var vendorItemNumber = article.GetVendorItemNumber();

            var simpleProduct = new VendorAssortmentBulk.VendorAssortmentItem
            {
                RelatedProducts = new List <VendorAssortmentBulk.VendorImportRelatedProduct>
                {
                    new VendorAssortmentBulk.VendorImportRelatedProduct
                    {
                        CustomItemNumber        = article.ArticleCode,
                        DefaultVendorID         = VendorID,
                        IsConfigured            = 1,
                        RelatedCustomItemNumber = vendorItemNumber,
                        RelatedProductType      = Constants.Relation.Style,
                        VendorID = VendorID
                    }
                },
                VendorProduct               = GetVendorAssortmentProduct(article, false, Context),
                VendorProductDescriptions   = GetVendorAssortmentProductDescriptions(article, vendorItemNumber),
                VendorImportAttributeValues = new List <VendorAssortmentBulk.VendorImportAttributeValue>
                {
                    new VendorAssortmentBulk.VendorImportAttributeValue
                    {
                        AttributeID      = PropertyStore.ReferenceCode.AttributeID,
                        CustomItemNumber = vendorItemNumber,
                        DefaultVendorID  = VendorID,
                        VendorID         = VendorID,
                        Value            = article.ReferenceCode
                    }
                }
            };

            if (!article.ColorCode.Equals(Constants.IgnoreCode))
            {
                simpleProduct.VendorImportAttributeValues.Add(new VendorAssortmentBulk.VendorImportAttributeValue
                {
                    AttributeID      = PropertyStore.ColorCode.AttributeID,
                    CustomItemNumber = vendorItemNumber,
                    DefaultVendorID  = VendorID,
                    VendorID         = VendorID,
                    Value            = article.ColorCode
                });

                simpleProduct.VendorImportAttributeValues.Add(new VendorAssortmentBulk.VendorImportAttributeValue
                {
                    AttributeID      = PropertyStore.ColorName.AttributeID,
                    CustomItemNumber = vendorItemNumber,
                    DefaultVendorID  = VendorID,
                    VendorID         = VendorID,
                    Value            = article.ColorName
                });
            }

            if (!article.SizeCode.Equals(Constants.IgnoreCode))
            {
                simpleProduct.VendorImportAttributeValues.Add(new VendorAssortmentBulk.VendorImportAttributeValue
                {
                    AttributeID      = PropertyStore.SizeCode.AttributeID,
                    CustomItemNumber = vendorItemNumber,
                    DefaultVendorID  = VendorID,
                    VendorID         = VendorID,
                    Value            = article.SizeCode
                });
            }

            return(simpleProduct);
        }
        private Boolean ProcessFile(Stream fileStream)
        {
            using (var document = new ExcelPackage(fileStream))
            {
                var worksheet = document.Workbook.Worksheets.First();

                if (VerifyWorksheet(worksheet))
                {
                    TraceVerbose("Loading existing product vendor assortment data...");

                    var vendorBySkuLookup = Unit.Scope.Repository <VendorAssortment>()
                                            .Include(vendorAssortment => vendorAssortment.Product)
                                            .GetAll(vendorAssortment => vendorAssortment.Product.IsConfigurable)
                                            .ToLookup(vendorAssortment => vendorAssortment.CustomItemNumber, vendorAssortment => vendorAssortment.VendorID);

                    TraceVerbose("Loading product content processors...");

                    var productContentRecordProcessors = GetType()
                                                         .GetNestedTypes(BindingFlags.Instance | BindingFlags.NonPublic)
                                                         .Where(type => type.BaseType == typeof(ProductContentRecordProcessor))
                                                         .Select(processorType => Activator.CreateInstance(processorType, DefaultVendor) as ProductContentRecordProcessor)
                                                         .ToArray();

                    TraceVerbose("Loading product content records...");

                    var productContentRecords      = GetProductContentRecords(worksheet).ToArray();
                    var vendorAssortmentDictionary = new Dictionary <Int32, IList <VendorAssortmentBulk.VendorAssortmentItem> >();
                    var progressStopwatch          = Stopwatch.StartNew();

                    for (var index = 0; index < productContentRecords.Length; index++)
                    {
                        var productContentRecord = productContentRecords[index];
                        var customItemNumber     = String.Format("{0} {1}", productContentRecord[HeaderName].Substring(3), productContentRecord[HeaderColor]);

                        foreach (var vendorID in vendorBySkuLookup[customItemNumber])
                        {
                            var vendorAssortmentItem = new VendorAssortmentBulk.VendorAssortmentItem();

                            foreach (var productContentProcessor in productContentRecordProcessors)
                            {
                                productContentProcessor.CustomItemNumber = customItemNumber;
                                productContentProcessor.LanguageID       = DefaultLanguage.LanguageID;
                                productContentProcessor.VendorAssortment = vendorAssortmentItem;
                                productContentProcessor.VendorID         = vendorID;
                                productContentProcessor.Process(productContentRecord);
                            }

                            if (!vendorAssortmentDictionary.ContainsKey(vendorID))
                            {
                                vendorAssortmentDictionary[vendorID] = new List <VendorAssortmentBulk.VendorAssortmentItem>();
                            }

                            vendorAssortmentDictionary[vendorID].Add(vendorAssortmentItem);
                        }

                        if (progressStopwatch.ElapsedMilliseconds > 1000L || productContentRecords.Length - 1 == index)
                        {
                            TraceVerbose("Progress: {0:P2}", (index + 1D) / productContentRecords.Length);
                            progressStopwatch.Restart();
                        }
                    }

                    foreach (var vendorID in vendorAssortmentDictionary.Keys)
                    {
                        TraceVerbose("Bulk importing vendor '{0}'...", Unit.Scope.Repository <Vendor>().GetSingle(vendor => vendor.VendorID == vendorID).Name);

                        var bulkConfig = new VendorAssortmentBulkConfiguration {
                            IsPartialAssortment = true
                        };

                        using (var vendorAssortmentBulk = new VendorAssortmentBulk(vendorAssortmentDictionary[vendorID], vendorID, vendorID, bulkConfig))
                        {
                            vendorAssortmentBulk.Init(Unit.Context);
                            vendorAssortmentBulk.Sync(Unit.Context);
                        }
                    }

                    return(true);
                }
            }

            return(false);
        }
        private VendorAssortmentBulk.VendorAssortmentItem GetVendorAssortmentForConfigurableProductWithColorLevel(Article article)
        {
            var colorVendorItemNumber = article.GetColorVendorItemNumber();

            var colorProduct = new VendorAssortmentBulk.VendorAssortmentItem
            {
                RelatedProducts = new List <VendorAssortmentBulk.VendorImportRelatedProduct>
                {
                    new VendorAssortmentBulk.VendorImportRelatedProduct
                    {
                        CustomItemNumber        = article.ArticleCode,
                        DefaultVendorID         = VendorID,
                        IsConfigured            = 0,
                        RelatedCustomItemNumber = colorVendorItemNumber,
                        RelatedProductType      = Constants.Relation.Color,
                        VendorID = VendorID
                    }
                },
                VendorProduct               = GetVendorAssortmentProduct(article, false, Context),
                VendorProductDescriptions   = GetVendorAssortmentProductDescriptions(article, colorVendorItemNumber),
                VendorImportAttributeValues = new List <VendorAssortmentBulk.VendorImportAttributeValue>
                {
                    new VendorAssortmentBulk.VendorImportAttributeValue
                    {
                        AttributeID      = PropertyStore.ReferenceCode.AttributeID,
                        CustomItemNumber = colorVendorItemNumber,
                        DefaultVendorID  = VendorID,
                        VendorID         = VendorID,
                        Value            = article.ReferenceCode
                    }
                }
            };

            if (!article.ColorCode.Equals(Constants.IgnoreCode))
            {
                colorProduct.VendorImportAttributeValues.Add(new VendorAssortmentBulk.VendorImportAttributeValue
                {
                    AttributeID      = PropertyStore.ColorCode.AttributeID,
                    CustomItemNumber = colorVendorItemNumber,
                    DefaultVendorID  = VendorID,
                    VendorID         = VendorID,
                    Value            = article.ColorCode
                });

                colorProduct.VendorImportAttributeValues.Add(new VendorAssortmentBulk.VendorImportAttributeValue
                {
                    AttributeID      = PropertyStore.ColorName.AttributeID,
                    CustomItemNumber = colorVendorItemNumber,
                    DefaultVendorID  = VendorID,
                    VendorID         = VendorID,
                    Value            = article.ColorName
                });
            }

            //if (!article.SizeCode.Equals(Constants.IgnoreCode))
            //{
            //  colorProduct.VendorImportAttributeValues.Add(new VendorAssortmentBulk.VendorImportAttributeValue
            //  {
            //    AttributeID = PropertyStore.SizeCode.AttributeID,
            //    CustomItemNumber = colorVendorItemNumber,
            //    DefaultVendorID = VendorID,
            //    VendorID = VendorID,
            //    Value = article.SizeCode
            //  });
            //}

            return(colorProduct);
        }