Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit e202210f authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

Merge branch 'feature/CodeEU-52_number-format-in-xml-reports' into 'amdm2/develop'

Feature/code eu 52 number format in xml reports

See merge request vecto!21
parents 8548bfc9 756c070e
No related branches found
No related tags found
No related merge requests found
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Xml.Linq; using System.Xml.Linq;
using TUGraz.VectoCommon.Models; using TUGraz.VectoCommon.Models;
...@@ -17,7 +18,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common ...@@ -17,7 +18,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
{ {
return GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume, return GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume,
entry.PassengerCount) entry.PassengerCount)
.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2, x.ValueAsUnit(3, 1))) .Select(x => new XElement(TNS + XMLNames.Report_Results_CO2, x.GetElement()))
.ToArray(); .ToArray();
} }
...@@ -25,13 +26,52 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common ...@@ -25,13 +26,52 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
{ {
return GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume, return GetCO2ResultEntries(entry.CO2Total, entry.Distance, entry.Payload, entry.CargoVolume,
entry.PassengerCount) entry.PassengerCount)
.Select(x => new XElement(TNS + XMLNames.Report_Results_CO2, x.ValueAsUnit(3, 1))) .Select(x => new XElement(TNS + XMLNames.Report_Results_CO2, x.GetElement()))
.ToArray(); .ToArray();
} }
protected abstract IList<ConvertedSI> GetCO2ResultEntries(Kilogram co2, Meter distance, Kilogram payload, protected abstract IList<FormattedReportValue> GetCO2ResultEntries(Kilogram co2, Meter distance, Kilogram payload,
CubicMeter volume, double? passengers); CubicMeter volume, double? passengers);
protected object[] Format3Significant1Decimal(ConvertedSI value)
{
return value.ValueAsUnit(3, 1);
}
protected object[] Format1Decimal(ConvertedSI value)
{
return value.ValueAsUnit(1);
}
protected object[] Format2Decimal(ConvertedSI value)
{
return value.ValueAsUnit(2);
}
}
public class FormattedReportValue
{
public ConvertedSI Value { get; }
protected Func<ConvertedSI, object[]> Formatter;
public FormattedReportValue(ConvertedSI value, Func<ConvertedSI, object[]> formatter = null)
{
Value = value;
Formatter = formatter ?? DefaultFormat;
}
public object[] GetElement()
{
return Formatter(Value);
}
protected object[] DefaultFormat(ConvertedSI value)
{
return Value.ValueAsUnit(3, 1);
}
} }
public class LorryCO2Writer : CO2WriterBase public class LorryCO2Writer : CO2WriterBase
...@@ -39,15 +79,15 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common ...@@ -39,15 +79,15 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
public LorryCO2Writer(ICommonResultsWriterFactory factory, XNamespace ns) : base(factory, ns) { } public LorryCO2Writer(ICommonResultsWriterFactory factory, XNamespace ns) : base(factory, ns) { }
protected override IList<ConvertedSI> GetCO2ResultEntries(Kilogram CO2Total, Meter distance, Kilogram payload, protected override IList<FormattedReportValue> GetCO2ResultEntries(Kilogram CO2Total, Meter distance, Kilogram payload,
CubicMeter volume, double? passengers) CubicMeter volume, double? passengers)
{ {
var retVal = new List<ConvertedSI>() { var retVal = new List<FormattedReportValue>() {
(CO2Total / distance).ConvertToGrammPerKiloMeter(), new FormattedReportValue((CO2Total / distance).ConvertToGrammPerKiloMeter()),
(CO2Total / distance / payload).ConvertToGrammPerTonKilometer(), new FormattedReportValue((CO2Total / distance / payload).ConvertToGrammPerTonKilometer(), Format1Decimal),
}; };
if (volume.IsGreater(0)) { if (volume.IsGreater(0)) {
retVal.Add((CO2Total / distance / volume).ConvertToGrammPerCubicMeterKiloMeter()); retVal.Add(new FormattedReportValue((CO2Total / distance / volume).ConvertToGrammPerCubicMeterKiloMeter()));
} }
return retVal; return retVal;
} }
...@@ -58,12 +98,12 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common ...@@ -58,12 +98,12 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
{ {
public BusCO2Writer(ICommonResultsWriterFactory factory, XNamespace ns) : base(factory, ns) { } public BusCO2Writer(ICommonResultsWriterFactory factory, XNamespace ns) : base(factory, ns) { }
protected override IList<ConvertedSI> GetCO2ResultEntries(Kilogram CO2Total, Meter distance, Kilogram payload, protected override IList<FormattedReportValue> GetCO2ResultEntries(Kilogram CO2Total, Meter distance, Kilogram payload,
CubicMeter volume, double? passengers) CubicMeter volume, double? passengers)
{ {
return new[] { return new[] {
(CO2Total / distance).ConvertToGrammPerKiloMeter(), new FormattedReportValue((CO2Total / distance).ConvertToGrammPerKiloMeter()),
(CO2Total / distance / passengers.Value).ConvertToGrammPerPassengerKilometer(), new FormattedReportValue((CO2Total / distance / passengers.Value).ConvertToGrammPerPassengerKilometer(), Format2Decimal),
}; };
} }
...@@ -92,7 +132,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common ...@@ -92,7 +132,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
new XElement(TNS + XMLNames.Report_ResultEntry_CO2ZEVAuxHeater, new XElement(TNS + XMLNames.Report_ResultEntry_CO2ZEVAuxHeater,
GetCO2ResultEntries(entry.ZEV_CO2, entry.Distance, entry.Payload, entry.CargoVolume, GetCO2ResultEntries(entry.ZEV_CO2, entry.Distance, entry.Payload, entry.CargoVolume,
entry.PassengerCount).Select(x => entry.PassengerCount).Select(x =>
new XElement(TNS + XMLNames.Report_Results_CO2, x.ValueAsUnit(3, 1))) new XElement(TNS + XMLNames.Report_Results_CO2, x.GetElement()))
) )
}; };
} }
...@@ -114,7 +154,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common ...@@ -114,7 +154,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.Common
new XElement(TNS + XMLNames.Report_ResultEntry_CO2ZEVAuxHeater, new XElement(TNS + XMLNames.Report_ResultEntry_CO2ZEVAuxHeater,
GetCO2ResultEntries(entry.ZEV_CO2, entry.Distance, entry.Payload, entry.CargoVolume, GetCO2ResultEntries(entry.ZEV_CO2, entry.Distance, entry.Payload, entry.CargoVolume,
entry.PassengerCount).Select(x => entry.PassengerCount).Select(x =>
new XElement(TNS + XMLNames.Report_Results_CO2, x.ValueAsUnit(3, 1))) new XElement(TNS + XMLNames.Report_Results_CO2, x.GetElement()))
) )
}; };
} }
......
...@@ -72,7 +72,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation ...@@ -72,7 +72,7 @@ namespace TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformation
protected override XElement[] GetSummary(IWeightedResult weighted) protected override XElement[] GetSummary(IWeightedResult weighted)
{ {
return new[] { return new[] {
new XElement(TNS + "AveragePayload", XMLHelper.ValueAsUnit(weighted.Payload, "t")) new XElement(TNS + "AveragePayload", XMLHelper.ValueAsUnit(weighted.Payload, "t", 3))
}; };
} }
} }
......
...@@ -198,6 +198,11 @@ namespace TUGraz.VectoCore.Utils ...@@ -198,6 +198,11 @@ namespace TUGraz.VectoCore.Utils
}; };
} }
public static object[] ValueAsUnit(this ConvertedSI value, uint decimals)
{
return GetValueAsUnit(value, value.Units, decimals);
}
private static object[] GetValueAsUnit(this double? value, string unit, uint? decimals) private static object[] GetValueAsUnit(this double? value, string unit, uint? decimals)
{ {
if (value == null) { if (value == null) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment