public IList <DTOs.OutputGeneration.Day> GetMaxEmissionsPerDay(Gas gas, Coal coal, EmissionsFactor emissionsFactor) { MaxEmissionGenerators maxEmissionGenerators = new MaxEmissionGenerators(); maxEmissionGenerators.Day = new List <DTOs.OutputGeneration.Day>(); foreach (var gasGenerator in gas.GasGenerator) { foreach (var inputday in gasGenerator.Generation.Day) { DTOs.OutputGeneration.Day outputDay = new DTOs.OutputGeneration.Day(); outputDay.Date = inputday.Date; outputDay.Name = gasGenerator.Name; outputDay.Emission = inputday.Energy * gasGenerator.EmissionsRating * emissionsFactor.Medium; maxEmissionGenerators.Day.Add(outputDay); } } foreach (var coalGenerator in coal.CoalGenerator) { foreach (var inputday in coalGenerator.Generation.Day) { DTOs.OutputGeneration.Day outputDay = new DTOs.OutputGeneration.Day(); outputDay.Date = inputday.Date; outputDay.Name = coalGenerator.Name; outputDay.Emission = inputday.Energy * coalGenerator.EmissionsRating * emissionsFactor.High; maxEmissionGenerators.Day.Add(outputDay); } } var result = maxEmissionGenerators.Day.GroupBy(x => x.Date) .SelectMany(group => group.Where(element => element.Emission == group.Max(obj => obj.Emission))); return(result.ToList()); }
/// <summary> /// Triggered whenever a new .xml file has been added to the input folder /// </summary> /// <param name="source"></param> /// <param name="e"></param> private static void OnCreated(object source, FileSystemEventArgs e) { if (e.ChangeType != WatcherChangeTypes.Created) { return; } const string generatorXPath = "//WindGenerator|//GasGenerator|//CoalGenerator"; const string referenceDataXPath = "//ValueFactor|//EmissionsFactor"; var appSettings = ConfigurationManager.AppSettings; var outputFolder = appSettings["OutputFolder"]; var referenceDataFolder = appSettings["ReferenceDataFolder"]; var inputFolder = appSettings["InputFolder"]; var reader = new XmlReader(); var pathToReport = e.FullPath; //redeclare lists to empty them _allTotalGenerationValuesCollection = new List <TotalGenerationValue>(); _actualHeatRates = new List <ActualHeatRates>(); _generatorCollection = new List <object>(); var emissionFactor = new EmissionsFactor(); var valueFactor = new ValueFactor(); ICollection <object> generatorCollection = new List <object>(); var doc = new XmlDocument(); var referenceDataDoc = new XmlDocument(); try { doc.Load(pathToReport); referenceDataDoc.Load(referenceDataFolder !); } catch (IOException ex) { Console.WriteLine(ex.Message); } var generators = doc.SelectNodes(generatorXPath); var factors = referenceDataDoc.SelectNodes(referenceDataXPath); var oldReportsFolder = @$ "{inputFolder}\OldReports"; if (!Directory.Exists(oldReportsFolder)) { Directory.CreateDirectory(oldReportsFolder); } emissionFactor = ParseValueAndEmissionsFactor(factors, emissionFactor, reader, ref valueFactor); PopulateGeneratorCollection(generators, _generatorCollection, reader); ObjectListToOutputObjects(_generatorCollection, valueFactor, emissionFactor); SetDistinctAllDayCollectionWithHighestValue(); CreateXmlFile(outputFolder); try { var newFileName = GetNewFileName(e.FullPath); if (!File.Exists(e.FullPath)) { return; } File.Move(e.FullPath, @$ "{oldReportsFolder}\{newFileName}.xml"); Console.WriteLine(@$ "Moved {e.Name} to \ReadReports"); }