protected override void ExecuteTask()
        {
            Monitoring.Notify(Name, 0);

            base.ExecuteTask();

            Monitoring.Notify(Name, 1);
        }
Exemplo n.º 2
0
        protected override void ExecuteConnectorTask()
        {
            Monitoring.Notify(Name, 0);

            var destination = new DirectoryInfo(Destination);

            if (!destination.FullName.EndsWith("$") && !destination.Exists)
            {
                TraceError("{0}: The directory '{1}' does not exists!", Context.Name, destination.FullName);
            }
            else if (!destination.FullName.EndsWith("$") && !destination.HasAccess(FileSystemRights.FullControl))
            {
                TraceError("{0}: The user '{1}' has insufficient access over the directory '{2}'!"
                           , Context.Name
                           , WindowsIdentity.GetCurrent().Name
                           , destination.FullName);
            }
            else
            {
                PriceRules = Context.ContentPrices
                             .OrderByDescending(priceRule => priceRule.ContentPriceRuleIndex)
                             .ToArray();

                var differentialProvider = new DifferentialProvider(Path.Combine(Constants.Directories.History, Context.Name));
                var articles             = GetArticles()
                                           .Select(UpdateArticlePricing)
                                           .ToArray();

                articles = differentialProvider
                           .GetDifferential(articles, ArticleCommercialComparer.Default)
                           .ToArray();

                if (articles.Any())
                {
                    var articleFile = Path.Combine(destination.FullName, String.Format("{0}_{1:yyyyMMddHHmmss}.csv", MultiMagCode, DateTime.Now));

                    TraceVerbose("{0}: Writing {1} articles to file '{2}'...", Context.Name, articles.Length, Path.GetFileName(articleFile));

                    using (var streamWriter = new StreamWriter(articleFile))
                        using (var csvWriter = new CsvWriter(streamWriter))
                        {
                            csvWriter.Configuration.Delimiter = ";";
                            csvWriter.Configuration.RegisterClassMap <ExportArticleMapping>();
                            csvWriter.WriteHeader <Article>();
                            csvWriter.WriteRecords(articles);

                            TraceInformation("{0}: {1} articles written to file '{2}'!", Context.Name, articles.Length, Path.GetFileName(articleFile));
                        }
                }
                else
                {
                    TraceWarning("{0}: There are no articles generated for export...", Context.Name);
                }
            }

            Monitoring.Notify(Name, 1);
        }
        protected override void ExecuteConnectorTask()
        {
            Monitoring.Notify(Name, 0);

            var destination = new DirectoryInfo(Destination);

            if (!destination.Exists)
            {
                TraceError("{0}: The directory '{1}' does not exists!", Context.Name, destination.FullName);
            }
            else
            {
                var consolidateConnectors = Unit.Scope
                                            .Repository <ConnectorSystem>()
                                            .Include(connectorSystem => connectorSystem.Connectors)
                                            .GetAll(connectorSystem => connectorSystem.Name == Constants.Connector.System.Magento /* || connectorSystem.Name == Constants.Connector.System.MultiMag */)
                                            .SelectMany(connectorSystem => connectorSystem.Connectors)
                                            .ToArray();

                var repositoryDirectory = new DirectoryInfo(Constants.Directories.Repository);

                if (!repositoryDirectory.Exists)
                {
                    repositoryDirectory.Create();
                }

                var differentialProvider = new DifferentialProvider(Path.Combine(Constants.Directories.History, Context.Name));

                foreach (var fileGrouping in repositoryDirectory
                         .GetFiles("??_???_*" + Constants.Extensions.CSV)
                         .OrderByDescending(fileInfo => fileInfo.LastWriteTime)
                         .GroupBy(fileInfo => fileInfo.Name.Substring(0, 2).ToUpper()))
                {
                    var destinationFileName = String.Format("{0}_{1:yyyyMMdd_HHmmss}" + Constants.Extensions.CSV, fileGrouping.Key, DateTime.Now);
                    var destinationFileInfo = new FileInfo(Path.Combine(destination.FullName, destinationFileName));

                    try
                    {
                        switch (fileGrouping.Key)
                        {
                        case Constants.Prefixes.Customer:
                            var customers = fileGrouping
                                            .SelectMany(Import <Customer, CustomerMapping>)
                                            .ToArray();

                            customers = GetCustomers().Concat(customers).Distinct().ToArray();
                            customers = differentialProvider.GetDifferential(customers).ToArray();

                            Export <Customer, CustomerMapping>(destinationFileInfo, customers);
                            break;

                        case Constants.Prefixes.Items:
                            var items = fileGrouping
                                        .SelectMany(Import <Item, ItemMapping>)
                                        .Distinct()
                                        .ToArray();

                            items = differentialProvider
                                    .GetDifferential(items)
                                    .ToArray();

                            Export <Item, ItemMapping>(destinationFileInfo, items);
                            break;

                        case Constants.Prefixes.Movements:
                            var movements = fileGrouping
                                            .SelectMany(Import <Movement, MovementMapping>)
                                            .Distinct()
                                            .ToArray();

                            movements = differentialProvider
                                        .GetDifferential(movements)
                                        .ToArray();

                            Export <Movement, MovementMapping>(destinationFileInfo, movements);
                            break;

                        case Constants.Prefixes.Statistics:
                            var statistics = fileGrouping
                                             .SelectMany(Import <Statistic, StatisticMapping>)
                                             .Distinct()
                                             .ToArray();

                            statistics = differentialProvider
                                         .GetDifferential(statistics)
                                         .ToArray();

                            Export <Statistic, StatisticMapping>(destinationFileInfo, statistics);
                            break;

                        case Constants.Prefixes.Stock:
                            var stock = fileGrouping
                                        .SelectMany(Import <Stock, StockMapping>)
                                        .Distinct()
                                        .ToArray();

                            stock = differentialProvider
                                    .GetDifferential(stock)
                                    .ToArray();

                            Export <Stock, StockMapping>(destinationFileInfo, stock);
                            break;

                        case Constants.Prefixes.Transaction:
                            var orders = fileGrouping
                                         .SelectMany(Import <Order, OrderMapping>)
                                         .ToArray();

                            orders = GetOrders(consolidateConnectors)
                                     .Concat(orders)
                                     .Distinct()
                                     .ToArray();
                            orders = differentialProvider
                                     .GetDifferential(orders)
                                     .ToArray();

                            Export <Order, OrderMapping>(destinationFileInfo, orders);
                            break;

                        default:
                            break;
                        }
                    }
                    catch (Exception exception)
                    {
                        TraceCritical(exception);
                    }
                }
            }

            Monitoring.Notify(Name, 1);
        }
        protected override void ExecuteVendorTask()
        {
            _monitoring = new FeeblMonitoring();
            _monitoring.Notify(Name, 0);

            if (Location.IsNullOrWhiteSpace())
            {
                TraceError("The connector setting '{0}' does not exists or is empty!", Constants.Vendor.Setting.Location);
            }
            else
            {
                var locationInfo = new DirectoryInfo(Location);

                if (!locationInfo.FullName.EndsWith("$") && !locationInfo.Exists)
                {
                    TraceError("The directory '{0}' does not exists!", locationInfo.FullName);
                }
                else if (!locationInfo.FullName.EndsWith("$") && !locationInfo.HasAccess(FileSystemRights.FullControl))
                {
                    TraceError("The user '{0}' has insufficient access over the directory '{1}'!", WindowsIdentity.GetCurrent().Name, locationInfo.FullName);
                }
                else if (ProductAttributeHelper.Bind(PropertyStore, Context, TraceSource))
                {
                    Languages = Unit.Scope
                                .Repository <Language>()
                                .GetAll(language => language.Name == Constants.Language.English)
                                .ToArray();

                    TariffVendors = Unit.Scope
                                    .Repository <Vendor>()
                                    .Include(vendor => vendor.VendorSettings)
                                    .GetAll(vendor => vendor.ParentVendorID == VendorID)
                                    .AsEnumerable()
                                    .Where(vendor
                                           => vendor.GetVendorSetting(Constants.Vendor.Setting.IsTariff, false) &&
                                           !vendor.GetVendorSetting(Constants.Vendor.Setting.CountryCode).IsNullOrWhiteSpace() &&
                                           !vendor.GetVendorSetting(Constants.Vendor.Setting.CurrencyCode).IsNullOrWhiteSpace())
                                    .ToDictionary(GetTariffCode);

                    var files = locationInfo.GetFiles("*.csv", SearchOption.TopDirectoryOnly);

                    TraceInformation("Found {0} CSV-files for import!", files.Length);

                    foreach (var fileInfo in files)
                    {
                        TraceInformation("Importing the file '{0}'...", fileInfo);

                        var articles = GetArticles(fileInfo.FullName);

                        if (articles != null)
                        {
                            var enumerableArticles = articles as Article[] ?? articles.ToArray();
                            ImportTariffVendors(enumerableArticles);

                            var vendorAssortmentItems = GetVendorAssortments(enumerableArticles).ToArray();

                            var success = true;

                            foreach (var vendorAssortmentGrouping in vendorAssortmentItems.GroupBy(vendorAssortmentItem => vendorAssortmentItem.VendorProduct.VendorID))
                            {
                                TraceInformation("Importing assortment for vendor '{0}'...", vendorAssortmentGrouping.Key != VendorID
                  ? Unit.Scope.Repository <Vendor>().GetSingle(vendor => vendor.VendorID == vendorAssortmentGrouping.Key).Name
                  : VendorName);

                                var bulkConfig = new VendorAssortmentBulkConfiguration
                                {
                                    IsPartialAssortment = true
                                };

                                using (var bulk = new VendorAssortmentBulk(vendorAssortmentGrouping, vendorAssortmentGrouping.Key, VendorID, bulkConfig))
                                {
                                    try
                                    {
                                        bulk.Init(Unit.Context);
                                        bulk.Sync(Unit.Context);
                                    }
                                    catch (Exception exception)
                                    {
                                        success = false;
                                        TraceCritical(exception);
                                    }
                                }
                            }

                            fileInfo.CopyTo(fileInfo.FullName + (success ? ".processed" : ".failed"), true);
                            fileInfo.Delete();
                        }
                    }

                    ImportProductConfiguration(PropertyStore.ColorCode, PropertyStore.SizeCode);
                    ImportProductGroups();
                }
            }
            _monitoring.Notify(Name, 1);
        }
Exemplo n.º 5
0
 /// <summary>
 /// Send message to Feebl.
 /// </summary>
 private void Notify(int counter)
 {
     _monitoring.Notify(Name, counter);
 }