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()); } }
/// <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); }