예제 #1
0
 public virtual ServiceReceiptResponse FoodItemImportFromDataProvider(FoodItemImportFromDataProviderCommand command)
 {
     if (command == null)
     {
         throw new ArgumentNullException(nameof(command));
     }
     try
     {
         return(_commandBus.Publish <FoodItemImportFromDataProviderCommand, ServiceReceiptResponse>(command));
     }
     catch (Exception ex)
     {
         throw _foodWasteFaultExceptionBuilder.Build(ex, SoapNamespaces.FoodWasteSystemDataServiceName, MethodBase.GetCurrentMethod());
     }
 }
예제 #2
0
        /// <summary>
        /// Gets the food items to import.
        /// </summary>
        /// <param name="foodGroupTree">Tree for the food groups.</param>
        /// <param name="translationInfoCollection">Collection of translation informations.</param>
        /// <returns>Commands for food items to import.</returns>
        public static IEnumerable <FoodItemImportFromDataProviderCommand> GetFoodItemImportFromDataProviderCommands(FoodGroupTreeSystemView foodGroupTree, ICollection <TranslationInfoSystemView> translationInfoCollection)
        {
            if (foodGroupTree == null)
            {
                throw new ArgumentNullException(nameof(foodGroupTree));
            }
            if (translationInfoCollection == null)
            {
                throw new ArgumentNullException(nameof(translationInfoCollection));
            }

            var dataProviderIdentifier = foodGroupTree.DataProvider.DataProviderIdentifier;

            var foodGroupDataProviderKeys = foodGroupTree.FoodGroups
                                            .SelectMany(foodGroup => foodGroup.ForeignKeys)
                                            .Where(foreignKey => foreignKey.DataProvider != null && foreignKey.DataProvider.DataProviderIdentifier == dataProviderIdentifier)
                                            .ToDictionary(foreignKey => foreignKey.ForeignKey, foreignKey => foreignKey.ForeignKeyForIdentifier);

            var daDkTranslationInfoIdentifier = translationInfoCollection.Single(m => m.CultureName == "da-DK").TranslationInfoIdentifier;
            var enUsTranslationInfoIdentifier = translationInfoCollection.Single(m => m.CultureName == "en-US").TranslationInfoIdentifier;

            var foodItems = new Dictionary <string, IDictionary <string, string> >(0);

            using (var resourceStream = GetEmbeddedResourceStream("Integrationstests.Testdata.DKFoodComp701_2009-11-16.txt"))
            {
                using (var streamReader = new StreamReader(resourceStream, Encoding.Default))
                {
                    while (streamReader.EndOfStream == false)
                    {
                        var buffer = streamReader.ReadLine();
                        if (buffer == null || buffer.Length < 2 + 4 + 3)
                        {
                            continue;
                        }

                        var foodItemKey = buffer.Substring(2, 4);
                        if (string.IsNullOrEmpty(foodItemKey))
                        {
                            continue;
                        }

                        IDictionary <string, string> foodItemValues;
                        if (foodItems.TryGetValue(foodItemKey, out foodItemValues) == false)
                        {
                            foodItemValues = new Dictionary <string, string>();
                            foodItems.Add(foodItemKey, foodItemValues);
                        }

                        switch (buffer.Substring(6, 3))
                        {
                        case "DAN":
                            foodItemValues.Add("DAN", CommonValidations.IllegalChars.Aggregate(buffer.Substring(10).Trim(), (current, illegalChar) => current.Replace(Convert.ToString(illegalChar), string.Empty)));
                            break;

                        case "ENG":
                            foodItemValues.Add("ENG", CommonValidations.IllegalChars.Aggregate(buffer.Substring(10).Trim(), (current, illegalChar) => current.Replace(Convert.ToString(illegalChar), string.Empty)));
                            break;

                        case "MGR":
                            foodItemValues.Add("MGR", buffer.Substring(10).Trim());
                            break;
                        }
                    }
                    streamReader.Close();
                }
                resourceStream.Close();
            }

            var commands = new List <FoodItemImportFromDataProviderCommand>();

            foreach (var foodItem in foodItems)
            {
                var foodItemValues = foodItem.Value;
                if (foodItemValues.ContainsKey("MGR") == false || string.IsNullOrEmpty(foodItemValues["MGR"]))
                {
                    continue;
                }
                if (foodGroupDataProviderKeys.ContainsKey(foodItemValues["MGR"]) == false)
                {
                    continue;
                }
                var primaryGroupIdentifier = foodGroupDataProviderKeys[foodItemValues["MGR"]];

                if (foodItemValues.ContainsKey("DAN") && string.IsNullOrEmpty(foodItemValues["DAN"]) == false)
                {
                    var command = new FoodItemImportFromDataProviderCommand
                    {
                        DataProviderIdentifier    = dataProviderIdentifier,
                        TranslationInfoIdentifier = daDkTranslationInfoIdentifier,
                        Key  = foodItem.Key,
                        Name = foodItemValues["DAN"].Trim(),
                        PrimaryFoodGroupIdentifier = primaryGroupIdentifier,
                        IsActive = true
                    };
                    commands.Add(command);
                }

                if (foodItemValues.ContainsKey("ENG") && string.IsNullOrEmpty(foodItemValues["ENG"]) == false)
                {
                    var command = new FoodItemImportFromDataProviderCommand
                    {
                        DataProviderIdentifier    = dataProviderIdentifier,
                        TranslationInfoIdentifier = enUsTranslationInfoIdentifier,
                        Key  = foodItem.Key,
                        Name = foodItemValues["ENG"].Trim(),
                        PrimaryFoodGroupIdentifier = primaryGroupIdentifier,
                        IsActive = true
                    };
                    commands.Add(command);
                }
            }
            return(commands);
        }