diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle_09.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle_09.cs new file mode 100644 index 0000000000000000000000000000000000000000..897d7e22e9a7d5cdf6be13bca038c4628e14b4e1 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportCompletedVehicle_09.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using TUGraz.VectoCommon.Exceptions; +using TUGraz.VectoCommon.InputData; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile.VehicleInformationFile_0_1; + +namespace TUGraz.VectoCore.OutputData.XML +{ + /// <summary> + /// Create MRF and CIF of the complete(d) step + /// </summary> + public class XMLDeclarationReportCompletedVehicle_09 : XMLDeclarationReport + { + #region Constructors + //public XMLDeclarationReportCompletedVehicle_09(IReportWriter writer) : base(writer) { } + public XMLDeclarationReportCompletedVehicle_09(IReportWriter writer, IManufacturerReportFactory mrfFactory, + ICustomerInformationFileFactory cifFactory, + IVIFReportFactory vifFactory) : base(writer, mrfFactory, cifFactory) + { + } + + #endregion + + public IPrimaryVehicleInformationInputDataProvider PrimaryVehicleReportInputData { get; set; } + + #region Overrides of XMLDeclarationReportCompletedVehicle + + protected override void InstantiateReports(VectoRunData modelData) + { + var inputData = modelData.InputData as IXMLMultistageInputDataProvider; + var primaryVehicle = inputData.JobInputData.PrimaryVehicle.Vehicle; + + var ihpc = (primaryVehicle.Components?.ElectricMachines?.Entries)?.Count(electric => electric.ElectricMachine.IHPCType != "None") > 0; + var iepc = (primaryVehicle.Components?.IEPC != null); + ManufacturerRpt = _mrfFactory.GetManufacturerReport( + inputData.JobInputData.ConsolidateManufacturingStage.Vehicle.VehicleCategory, + inputData.JobInputData.JobType, + primaryVehicle.ArchitectureID, + primaryVehicle.ExemptedVehicle, + iepc, + ihpc); + + CustomerRpt = _cifFactory.GetCustomerReport( + inputData.JobInputData.ConsolidateManufacturingStage.Vehicle.VehicleCategory, + inputData.JobInputData.JobType, + primaryVehicle.ArchitectureID, + primaryVehicle.ExemptedVehicle, + iepc, + ihpc); + + } + public override void InitializeReport(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + _weightingFactors = EqualWeighting; + + InstantiateReports(modelData); + + ManufacturerRpt.Initialize(modelData, fuelModes); + CustomerRpt.Initialize(modelData, fuelModes); + } + #endregion + + + + private static IDictionary<Tuple<MissionType, LoadingType>, double> EqualWeighting => + new ReadOnlyDictionary<Tuple<MissionType, LoadingType>, double>( + new Dictionary<Tuple<MissionType, LoadingType>, double>() { + { Tuple.Create(MissionType.LongHaul, LoadingType.LowLoading), 1 }, + { Tuple.Create(MissionType.LongHaul, LoadingType.ReferenceLoad), 1 }, + { Tuple.Create(MissionType.RegionalDelivery, LoadingType.LowLoading), 1 }, + { Tuple.Create(MissionType.RegionalDelivery, LoadingType.ReferenceLoad), 1 }, + { Tuple.Create(MissionType.UrbanDelivery, LoadingType.LowLoading), 1 }, + { Tuple.Create(MissionType.UrbanDelivery, LoadingType.ReferenceLoad), 1 }, + { Tuple.Create(MissionType.LongHaulEMS, LoadingType.LowLoading), 1 }, + { Tuple.Create(MissionType.LongHaulEMS, LoadingType.ReferenceLoad), 1 }, + { Tuple.Create(MissionType.RegionalDeliveryEMS, LoadingType.LowLoading), 1 }, + { Tuple.Create(MissionType.RegionalDeliveryEMS, LoadingType.ReferenceLoad), 1 }, + { Tuple.Create(MissionType.MunicipalUtility, LoadingType.LowLoading), 1 }, + { Tuple.Create(MissionType.MunicipalUtility, LoadingType.ReferenceLoad), 1 }, + { Tuple.Create(MissionType.Construction, LoadingType.LowLoading), 1 }, + { Tuple.Create(MissionType.Construction, LoadingType.ReferenceLoad), 1 }, + { Tuple.Create(MissionType.HeavyUrban, LoadingType.LowLoading), 1 }, + { Tuple.Create(MissionType.HeavyUrban, LoadingType.ReferenceLoad), 1 }, + { Tuple.Create(MissionType.Urban, LoadingType.LowLoading), 1 }, + { Tuple.Create(MissionType.Urban, LoadingType.ReferenceLoad), 1 }, + { Tuple.Create(MissionType.Suburban, LoadingType.LowLoading), 1 }, + { Tuple.Create(MissionType.Suburban, LoadingType.ReferenceLoad), 1 }, + { Tuple.Create(MissionType.Interurban, LoadingType.LowLoading), 1 }, + { Tuple.Create(MissionType.Interurban, LoadingType.ReferenceLoad), 1 }, + { Tuple.Create(MissionType.Coach, LoadingType.LowLoading), 1 }, + { Tuple.Create(MissionType.Coach, LoadingType.ReferenceLoad), 1 }, + }); + + protected internal override void DoWriteReport() + { + foreach (var specificResult in Results.Where(x => VehicleClassHelper.IsCompletedBus(x.VehicleClass)).OrderBy(x => x.VehicleClass) + .ThenBy(x => x.FuelMode).ThenBy(x => x.Mission)) + { + + var genericResult = Results.First(x => x.VehicleClass.IsPrimaryBus() && x.FuelMode == specificResult.FuelMode && + x.Mission == specificResult.Mission && x.LoadingType == specificResult.LoadingType); + var primaryResult = genericResult.PrimaryResult ?? specificResult.PrimaryResult; + if (primaryResult == null) + { + throw new VectoException( + "no primary result entry set for simulation run vehicle class: {0}, mission: {1}, payload: {2}", + genericResult.VehicleClass, genericResult.Mission, genericResult.Payload); + } + + (ManufacturerRpt as XMLManufacturerReportCompletedBus).WriteResult(genericResult, specificResult, primaryResult); + (CustomerRpt as XMLCustomerReportCompletedBus).WriteResult(genericResult, specificResult, primaryResult); + } + + GenerateReports(); + + if (Writer != null) + { + OutputReports(); + } + } + + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportInterimVehicle_09.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportInterimVehicle_09.cs new file mode 100644 index 0000000000000000000000000000000000000000..68d621f80590b09e7660ecb880d7d4f15c73b9d3 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportInterimVehicle_09.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile.VehicleInformationFile_0_1; + +namespace TUGraz.VectoCore.OutputData.XML +{ + /// <summary> + /// Create VIF of an interim (or the complete(d) step + /// </summary> + public class XMLDeclarationReportInterimVehicle_09 : XMLDeclarationReport + { + protected readonly IVIFReportFactory _vifFactory; + + protected IXMLMultistepIntermediateReport MultistepIntermediateBusReport; + protected readonly IVIFReportInterimFactory _interimFactory; + + public XMLDeclarationReportInterimVehicle_09(IReportWriter writer, + IManufacturerReportFactory mrfFactory, + ICustomerInformationFileFactory cifFactory, + IVIFReportFactory vifFactory, IVIFReportInterimFactory interimFactory) : base(writer, mrfFactory, cifFactory) + { + _vifFactory = vifFactory; + _interimFactory = interimFactory; + } + + #region Overrides of XMLDeclarationReport + + protected override void InstantiateReports(VectoRunData modelData) + { + var vehicleData = modelData.VehicleData.InputData; + var iepc = vehicleData.Components?.IEPC != null; + var ihpc = + vehicleData.Components?.ElectricMachines?.Entries?.Count(e => e.ElectricMachine.IHPCType != "None") > 0; + + MultistepIntermediateBusReport = _interimFactory.GetInterimVIFReport(vehicleData.VehicleCategory, + vehicleData.VehicleType, + vehicleData.ArchitectureID, + vehicleData.ExemptedVehicle, + iepc, + ihpc); + } + + #endregion + + public override void InitializeReport(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + //_multistageBusReport = + // modelData.Exempted ? new XMLMultistageExemptedBusReport() : new XMLMultistageBusReport(); + + InstantiateReports(modelData); + + MultistepIntermediateBusReport.Initialize(modelData); + } + + protected override void GenerateReports() + { + MultistepIntermediateBusReport.GenerateReport(); + } + + protected override void OutputReports() + { + Writer.WriteReport(ReportType.DeclarationReportMultistageVehicleXML, MultistepIntermediateBusReport.Report); + } + + protected override void DoStoreResult(ResultEntry entry, VectoRunData runData, IModalDataContainer modData) + { + throw new NotSupportedException(); + } + protected override void WriteResult(ResultEntry result) + { + throw new NotSupportedException(); + } + } +} \ No newline at end of file diff --git a/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle_09.cs b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle_09.cs new file mode 100644 index 0000000000000000000000000000000000000000..1dc4298633ea76bc033784837b08c5dbbe34ef36 --- /dev/null +++ b/VectoCore/VectoCore/OutputData/XML/XMLDeclarationReportPrimaryVehicle_09.cs @@ -0,0 +1,90 @@ +using System.Collections.Generic; +using System.Linq; +using System.Xml.Linq; +using TUGraz.VectoCore.Models.Declaration; +using TUGraz.VectoCore.Models.Simulation.Data; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.ManufacturerReport.ManufacturerReport_0_9.ManufacturerReportXMLTypeWriter; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.VehicleInformationFile.VehicleInformationFile_0_1; + +namespace TUGraz.VectoCore.OutputData.XML +{ + /// <summary> + /// Create MRF and VIF for primary bus + /// </summary> + public class XMLDeclarationReportPrimaryVehicle_09 : XMLDeclarationReport + { + private readonly IVIFReportFactory _vifFactory; + + protected IXMLVehicleInformationFile VehicleInformationFile; + + + public override XDocument CustomerReport => null; + + public override XDocument PrimaryVehicleReport => VehicleInformationFile?.Report; + + + public XMLDeclarationReportPrimaryVehicle_09(IReportWriter writer, + IManufacturerReportFactory mrfFactory, + IVIFReportFactory vifFactory) : base(writer, mrfFactory, null) + { + _vifFactory = vifFactory; + } + + + + #region Overrides of XMLDeclarationReport + protected override void InstantiateReports(VectoRunData modelData) + { + var vehicleData = modelData.VehicleData.InputData; + var iepc = vehicleData.Components?.IEPC != null; + var ihpc = + vehicleData.Components?.ElectricMachines?.Entries?.Count(e => e.ElectricMachine.IHPCType != "None") > 0; + + ManufacturerRpt = _mrfFactory.GetManufacturerReport(vehicleData.VehicleCategory, + vehicleData.VehicleType, + vehicleData.ArchitectureID, + vehicleData.ExemptedVehicle, + iepc, + ihpc); + + VehicleInformationFile = _vifFactory.GetVIFReport(vehicleData.VehicleCategory, + vehicleData.VehicleType, + vehicleData.ArchitectureID, + vehicleData.ExemptedVehicle, + iepc, + ihpc); + + + + + } + public override void InitializeReport(VectoRunData modelData, List<List<FuelData.Entry>> fuelModes) + { + base.InitializeReport(modelData, fuelModes); + VehicleInformationFile.Initialize(modelData, fuelModes); + } + protected override void WriteResult(ResultEntry result) + { + base.WriteResult(result); + VehicleInformationFile.WriteResult(result); + } + + protected override void GenerateReports() + { + ManufacturerRpt.GenerateReport(); + var fullReportHash = GetSignature(ManufacturerRpt.Report); + CustomerRpt.GenerateReport(fullReportHash); + VehicleInformationFile.GenerateReport(fullReportHash); + } + + + + protected override void OutputReports() + { + Writer.WriteReport(ReportType.DeclarationReportManufacturerXML, ManufacturerRpt.Report); + Writer.WriteReport(ReportType.DeclarationReportPrimaryVehicleXML, VehicleInformationFile.Report); + } + #endregion + } +} \ No newline at end of file