From 0c1dc22912c5fc7f1a380e0686c30aa519476f97 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Fri, 27 Apr 2018 12:41:53 +0200
Subject: [PATCH] extending GUI to allow setting manufacturer record file

---
 VECTO/File Browser/FileBrowserModule.vb       |  1 +
 VECTO/GUI/MainForm.vb                         |  3 +
 VECTO/GUI/VectoVTPJobForm.Designer.vb         | 85 +++++++++++++++----
 VECTO/GUI/VectoVTPJobForm.resx                | 18 ++++
 VECTO/GUI/VectoVTPJobForm.vb                  | 11 ++-
 VECTO/Input Files/VectoEPTPJob.vb             | 35 +++++++-
 VECTO/OutputData/JSONFileWriter.vb            |  3 +
 .../InputData/VTPDeclarationInputData.cs      |  2 +
 .../InputData/FileIO/JSON/JSONInputData.cs    |  2 +
 .../class_5_generic vehicle_DECL.vecto        |  4 +-
 10 files changed, 142 insertions(+), 22 deletions(-)

diff --git a/VECTO/File Browser/FileBrowserModule.vb b/VECTO/File Browser/FileBrowserModule.vb
index 253a85419c..31de0ae1c5 100644
--- a/VECTO/File Browser/FileBrowserModule.vb	
+++ b/VECTO/File Browser/FileBrowserModule.vb	
@@ -24,6 +24,7 @@ Public Module FileBrowserModule
 	Public TextFileBrowser As FileBrowser
 	Public VehicleFileBrowser As FileBrowser
 	Public VehicleXMLFileBrowser As FileBrowser
+    public ManRXMLFileBrowser As FileBrowser
 	Public DrivingCycleFileBrowser As FileBrowser
 	Public PTODrivingCycleFileBrowser As FileBrowser
 	Public FuelConsumptionMapFileBrowser As FileBrowser
diff --git a/VECTO/GUI/MainForm.vb b/VECTO/GUI/MainForm.vb
index eccee56f13..cdba29c6ed 100644
--- a/VECTO/GUI/MainForm.vb
+++ b/VECTO/GUI/MainForm.vb
@@ -116,6 +116,7 @@ Imports TUGraz.VectoCore.Utils
         JobfileFileBrowser = New FileBrowser("vecto")
         VehicleFileBrowser = New FileBrowser("vveh")
         VehicleXMLFileBrowser = New FileBrowser("vveh_xml")
+        ManRXMLFileBrowser = new FileBrowser("xml")
         FuelConsumptionMapFileBrowser = New FileBrowser("vmap")
         DrivingCycleFileBrowser = New FileBrowser("vdri")
         FullLoadCurveFileBrowser = New FileBrowser("vfld")
@@ -144,6 +145,7 @@ Imports TUGraz.VectoCore.Utils
         JobfileFileBrowser.Extensions = New String() {"vecto"}
         VehicleFileBrowser.Extensions = New String() {"vveh"}
         VehicleXMLFileBrowser.Extensions = New String() {"xml"}
+        ManRXMLFileBrowser.Extensions = New String() {"xml"}
         FuelConsumptionMapFileBrowser.Extensions = New String() {"vmap"}
         DrivingCycleFileBrowser.Extensions = New String() {"vdri"}
         FullLoadCurveFileBrowser.Extensions = New String() {"vfld"}
@@ -169,6 +171,7 @@ Imports TUGraz.VectoCore.Utils
         JobfileFileBrowser.Close()
         VehicleFileBrowser.Close()
         VehicleXMLFileBrowser.Close()
+        ManRXMLFileBrowser.Close()
         FuelConsumptionMapFileBrowser.Close()
         DrivingCycleFileBrowser.Close()
         FullLoadCurveFileBrowser.Close()
diff --git a/VECTO/GUI/VectoVTPJobForm.Designer.vb b/VECTO/GUI/VectoVTPJobForm.Designer.vb
index 3f8c030922..968e1c2fc3 100644
--- a/VECTO/GUI/VectoVTPJobForm.Designer.vb
+++ b/VECTO/GUI/VectoVTPJobForm.Designer.vb
@@ -69,6 +69,7 @@ Partial Class VectoVTPJobForm
         Me.lblEngineCharacteristics = New System.Windows.Forms.Label()
         Me.PictureBox2 = New System.Windows.Forms.PictureBox()
         Me.GroupBox1 = New System.Windows.Forms.GroupBox()
+        Me.Label7 = New System.Windows.Forms.Label()
         Me.tbFanDiameter = New System.Windows.Forms.TextBox()
         Me.Label6 = New System.Windows.Forms.Label()
         Me.tbC3 = New System.Windows.Forms.TextBox()
@@ -78,7 +79,10 @@ Partial Class VectoVTPJobForm
         Me.tbC1 = New System.Windows.Forms.TextBox()
         Me.Label1 = New System.Windows.Forms.Label()
         Me.Label5 = New System.Windows.Forms.Label()
-        Me.Label7 = New System.Windows.Forms.Label()
+        Me.pnManufacturerRecord = New System.Windows.Forms.Panel()
+        Me.Label8 = New System.Windows.Forms.Label()
+        Me.tbManufacturerRecord = New System.Windows.Forms.TextBox()
+        Me.ButtonManR = New System.Windows.Forms.Button()
         Me.GrCycles.SuspendLayout
         Me.GrAux.SuspendLayout
         Me.StatusStrip1.SuspendLayout
@@ -89,6 +93,7 @@ Partial Class VectoVTPJobForm
         CType(Me.PicBox,System.ComponentModel.ISupportInitialize).BeginInit
         CType(Me.PictureBox2,System.ComponentModel.ISupportInitialize).BeginInit
         Me.GroupBox1.SuspendLayout
+        Me.pnManufacturerRecord.SuspendLayout
         Me.SuspendLayout
         '
         'GrCycles
@@ -99,7 +104,7 @@ Partial Class VectoVTPJobForm
         Me.GrCycles.Controls.Add(Me.LvCycles)
         Me.GrCycles.Controls.Add(Me.BtDRIrem)
         Me.GrCycles.Controls.Add(Me.BtDRIadd)
-        Me.GrCycles.Location = New System.Drawing.Point(12, 260)
+        Me.GrCycles.Location = New System.Drawing.Point(12, 290)
         Me.GrCycles.Name = "GrCycles"
         Me.GrCycles.Size = New System.Drawing.Size(515, 138)
         Me.GrCycles.TabIndex = 10
@@ -169,7 +174,7 @@ Partial Class VectoVTPJobForm
         Me.GrAux.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left)  _
             Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
         Me.GrAux.Controls.Add(Me.LvAux)
-        Me.GrAux.Location = New System.Drawing.Point(12, 114)
+        Me.GrAux.Location = New System.Drawing.Point(12, 144)
         Me.GrAux.Name = "GrAux"
         Me.GrAux.Size = New System.Drawing.Size(515, 140)
         Me.GrAux.TabIndex = 9
@@ -213,9 +218,9 @@ Partial Class VectoVTPJobForm
         '
         Me.TbVEH.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left)  _
             Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
-        Me.TbVEH.Location = New System.Drawing.Point(90, 86)
+        Me.TbVEH.Location = New System.Drawing.Point(128, 86)
         Me.TbVEH.Name = "TbVEH"
-        Me.TbVEH.Size = New System.Drawing.Size(411, 20)
+        Me.TbVEH.Size = New System.Drawing.Size(373, 20)
         Me.TbVEH.TabIndex = 1
         '
         'ButtonVEH
@@ -232,7 +237,7 @@ Partial Class VectoVTPJobForm
         'StatusStrip1
         '
         Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripStatusLabelGEN})
-        Me.StatusStrip1.Location = New System.Drawing.Point(0, 568)
+        Me.StatusStrip1.Location = New System.Drawing.Point(0, 584)
         Me.StatusStrip1.Name = "StatusStrip1"
         Me.StatusStrip1.Size = New System.Drawing.Size(944, 22)
         Me.StatusStrip1.SizingGrip = false
@@ -248,7 +253,7 @@ Partial Class VectoVTPJobForm
         'ButOK
         '
         Me.ButOK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
-        Me.ButOK.Location = New System.Drawing.Point(778, 541)
+        Me.ButOK.Location = New System.Drawing.Point(778, 557)
         Me.ButOK.Name = "ButOK"
         Me.ButOK.Size = New System.Drawing.Size(75, 23)
         Me.ButOK.TabIndex = 0
@@ -259,7 +264,7 @@ Partial Class VectoVTPJobForm
         '
         Me.ButCancel.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
         Me.ButCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel
-        Me.ButCancel.Location = New System.Drawing.Point(859, 541)
+        Me.ButCancel.Location = New System.Drawing.Point(859, 557)
         Me.ButCancel.Name = "ButCancel"
         Me.ButCancel.Size = New System.Drawing.Size(75, 23)
         Me.ButCancel.TabIndex = 1
@@ -476,13 +481,22 @@ Partial Class VectoVTPJobForm
         Me.GroupBox1.Controls.Add(Me.tbC1)
         Me.GroupBox1.Controls.Add(Me.Label1)
         Me.GroupBox1.Controls.Add(Me.PictureBox2)
-        Me.GroupBox1.Location = New System.Drawing.Point(11, 404)
+        Me.GroupBox1.Location = New System.Drawing.Point(11, 434)
         Me.GroupBox1.Name = "GroupBox1"
         Me.GroupBox1.Size = New System.Drawing.Size(515, 135)
         Me.GroupBox1.TabIndex = 39
         Me.GroupBox1.TabStop = false
         Me.GroupBox1.Text = "Fan Power"
         '
+        'Label7
+        '
+        Me.Label7.AutoSize = true
+        Me.Label7.Location = New System.Drawing.Point(477, 32)
+        Me.Label7.Name = "Label7"
+        Me.Label7.Size = New System.Drawing.Size(29, 13)
+        Me.Label7.TabIndex = 47
+        Me.Label7.Text = "[mm]"
+        '
         'tbFanDiameter
         '
         Me.tbFanDiameter.Location = New System.Drawing.Point(371, 29)
@@ -556,14 +570,44 @@ Partial Class VectoVTPJobForm
         Me.Label5.TabIndex = 40
         Me.Label5.Text = "Vehicle XML:"
         '
-        'Label7
+        'pnManufacturerRecord
         '
-        Me.Label7.AutoSize = true
-        Me.Label7.Location = New System.Drawing.Point(477, 32)
-        Me.Label7.Name = "Label7"
-        Me.Label7.Size = New System.Drawing.Size(29, 13)
-        Me.Label7.TabIndex = 47
-        Me.Label7.Text = "[mm]"
+        Me.pnManufacturerRecord.Controls.Add(Me.Label8)
+        Me.pnManufacturerRecord.Controls.Add(Me.tbManufacturerRecord)
+        Me.pnManufacturerRecord.Controls.Add(Me.ButtonManR)
+        Me.pnManufacturerRecord.Location = New System.Drawing.Point(11, 112)
+        Me.pnManufacturerRecord.Name = "pnManufacturerRecord"
+        Me.pnManufacturerRecord.Size = New System.Drawing.Size(525, 36)
+        Me.pnManufacturerRecord.TabIndex = 41
+        '
+        'Label8
+        '
+        Me.Label8.AutoSize = true
+        Me.Label8.Location = New System.Drawing.Point(3, 11)
+        Me.Label8.Name = "Label8"
+        Me.Label8.Size = New System.Drawing.Size(108, 13)
+        Me.Label8.TabIndex = 43
+        Me.Label8.Text = "Manufacturer Record"
+        '
+        'tbManufacturerRecord
+        '
+        Me.tbManufacturerRecord.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left)  _
+            Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+        Me.tbManufacturerRecord.Location = New System.Drawing.Point(117, 8)
+        Me.tbManufacturerRecord.Name = "tbManufacturerRecord"
+        Me.tbManufacturerRecord.Size = New System.Drawing.Size(374, 20)
+        Me.tbManufacturerRecord.TabIndex = 41
+        '
+        'ButtonManR
+        '
+        Me.ButtonManR.Anchor = CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
+        Me.ButtonManR.Image = CType(resources.GetObject("ButtonManR.Image"),System.Drawing.Image)
+        Me.ButtonManR.Location = New System.Drawing.Point(492, 6)
+        Me.ButtonManR.Name = "ButtonManR"
+        Me.ButtonManR.Size = New System.Drawing.Size(24, 24)
+        Me.ButtonManR.TabIndex = 42
+        Me.ButtonManR.TabStop = false
+        Me.ButtonManR.UseVisualStyleBackColor = true
         '
         'VectoVTPJobForm
         '
@@ -571,7 +615,8 @@ Partial Class VectoVTPJobForm
         Me.AutoScaleDimensions = New System.Drawing.SizeF(6!, 13!)
         Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
         Me.CancelButton = Me.ButCancel
-        Me.ClientSize = New System.Drawing.Size(944, 590)
+        Me.ClientSize = New System.Drawing.Size(944, 606)
+        Me.Controls.Add(Me.pnManufacturerRecord)
         Me.Controls.Add(Me.Label5)
         Me.Controls.Add(Me.GroupBox1)
         Me.Controls.Add(Me.GrAux)
@@ -612,6 +657,8 @@ Partial Class VectoVTPJobForm
         CType(Me.PictureBox2,System.ComponentModel.ISupportInitialize).EndInit
         Me.GroupBox1.ResumeLayout(false)
         Me.GroupBox1.PerformLayout
+        Me.pnManufacturerRecord.ResumeLayout(false)
+        Me.pnManufacturerRecord.PerformLayout
         Me.ResumeLayout(false)
         Me.PerformLayout
 
@@ -668,4 +715,8 @@ End Sub
     Friend WithEvents tbFanDiameter As TextBox
     Friend WithEvents Label6 As Label
     Friend WithEvents Label7 As Label
+    Friend WithEvents pnManufacturerRecord As Panel
+    Friend WithEvents Label8 As Label
+    Friend WithEvents tbManufacturerRecord As TextBox
+    Friend WithEvents ButtonManR As Button
 End Class
diff --git a/VECTO/GUI/VectoVTPJobForm.resx b/VECTO/GUI/VectoVTPJobForm.resx
index 772cde37b8..1af59968ed 100644
--- a/VECTO/GUI/VectoVTPJobForm.resx
+++ b/VECTO/GUI/VectoVTPJobForm.resx
@@ -296,6 +296,24 @@
         C8aYB81CY4z5BqQVkREGdf7kRUA5jcELbowxTzQLjTHmW1A2KP9o7WPOA8rPkzzVTz0aY/rQLDTGmF9A
         CuvaoDw5KK/ctiFpjGnSLDTGmF9B2UPpR8icDJTzPG1IGmMmaRYaY8waoGxQ+pFBJwHlRwD5ezPGvKVZ
         aIwxazEaJsq786NkToS/M2PMPP75H/8P3C2RO8+dg8cAAAAASUVORK5CYII=
+</value>
+  </data>
+  <data name="ButtonManR.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+        vAAADrwBlbxySQAAAtVJREFUOE+FkmtIk2EYhhc6zU1zyjyAlZn5Q0QS6k/EMDDSQiuzkmxM5wpEA00S
+        zTzbsozQEDUyVKjQbejUPGQSyyjUmofysFRKU/M859J5qORu77s1KX/0wPXju7/vvp4X3o/RVsHv7pDy
+        0VklwIfaCPTXCzHQEPkXn5pEUDWJNH31kRGMf4eUocvF7GAShlqjQZ6H3qZjYUICQGliVfscvc+EGmNt
+        c0hhY/kONpYMrC/cwowqiYowchcYNaKRoa7mDDyfcuFRYpdnrBsEv7S3KT8XCTkUkq/3xGOj9xrQn0Cp
+        qQrGvnJ7uJTuwK58G4VJ8GMhh25eV29Ccp0yDmvd8SZBV7UA7sW2R5wfWsO+0ApO2ewMKlibE2N11siM
+        GCt6SL7YEQtdZxxUShECq7wQ9MQLZKnTfbbcqpQJuwxLDRWsTN+EbiobuslsLBsh+eybK3j/WgBfmQeq
+        1RKcqPalAgexlYIIrNMtQAVLE1lYGs/Cd8JYJrR6SK5ovoCzjTzI1VLE9gjgVsiBYza7jJvHAhGwkpkG
+        gfZrJhZHM6D5QtBf4ed0yKSnENLEg0L3AlHKIBxq2Ik9BRy4FNrA4bFBYJlgbhCQgno4DeqhNMwPpuFb
+        TyICan3waqUF0coAHGtxpwJvuSPcJBwqYBUzwby8TUEF84OpmFOlYnYghR69XcLHUdl+RLX7I6TVc4uA
+        W8aCZZy5hhnO8KECUpzuu4Gpj8lU0FgShuIHgeAVucK/0d0k8KzgwjGXje0xZiPMS/oyGVIgxcme65jo
+        MvyBNUWhqMw/j7ryi+Dlu+KwfDcVcNNYEOfx6E2Ypq0iVKN6GYNxZRLG3iVSQXnOcRSk+EGadxK1j4Jx
+        IMsZPhXOsE+2QnPZOcPmP9MtD+d0SMPkXTVCDLdeRadciPjIg7H6V3sNXzAYtrEMjmW0udxCZFZmjLZO
+        eyX/NDkNOcG9FD9vY/yfYTB+A9kMOLKC3dXwAAAAAElFTkSuQmCC
 </value>
   </data>
   <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
diff --git a/VECTO/GUI/VectoVTPJobForm.vb b/VECTO/GUI/VectoVTPJobForm.vb
index 505917bc9e..07aaeba47f 100644
--- a/VECTO/GUI/VectoVTPJobForm.vb
+++ b/VECTO/GUI/VectoVTPJobForm.vb
@@ -57,6 +57,8 @@ Public Class VectoVTPJobForm
 
         LvAux.Columns(AuxViewColumns.AuxInputOrTech).Text = "Technology"
 
+        pnManufacturerRecord.Visible = cfg.DeclMode
+
         GrCycles.Enabled = True
 
         _changed = False
@@ -192,6 +194,7 @@ Public Class VectoVTPJobForm
 
         'Files -----------------------------
         TbVEH.Text = GetRelativePath(inputData.JobInputData.Vehicle.Source, _basePath)
+        tbManufacturerRecord.Text = If (cfg.DeclMode, GetRelativePath(inputData.JobInputData.ManufacturerReportInputData.Source, _basePath), "")
 
         Dim auxInput As IAuxiliariesDeclarationInputData = inputData.JobInputData.Vehicle.AuxiliaryInputData()
 
@@ -268,6 +271,8 @@ Public Class VectoVTPJobForm
         'Files ------------------------------------------------- -----------------
 
         vectoJob.PathVeh = TbVEH.Text
+        vectoJob.ManufacturerRecord = If(cfg.DeclMode,  tbManufacturerRecord.Text, "")
+
 
         For Each lv0 As ListViewItem In LvCycles.Items
             Dim sb As SubPath = New SubPath
@@ -693,7 +698,11 @@ Public Class VectoVTPJobForm
     Private Sub LvAux_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LvAux.SelectedIndexChanged
     End Sub
 
-
+    Private Sub ButtonManR_Click(sender As Object, e As EventArgs) Handles ButtonManR.Click
+        If ManRXMLFileBrowser.OpenDialog(FileRepl(tbManufacturerRecord.Text, GetPath(VectoFile))) Then
+            tbManufacturerRecord.Text = GetFilenameWithoutDirectory(ManRXMLFileBrowser.Files(0), GetPath(VectoFile))
+        End If
+    End Sub
 End Class
 
 
diff --git a/VECTO/Input Files/VectoEPTPJob.vb b/VECTO/Input Files/VectoEPTPJob.vb
index 21751d63aa..671c0cd6f2 100644
--- a/VECTO/Input Files/VectoEPTPJob.vb	
+++ b/VECTO/Input Files/VectoEPTPJob.vb	
@@ -6,6 +6,7 @@ Imports System.Linq
 Imports System.Xml
 Imports TUGraz.VECTO.Input_Files
 Imports TUGraz.VectoCommon.Exceptions
+Imports TUGraz.VectoCommon.Hashing
 Imports TUGraz.VectoCommon.InputData
 Imports TUGraz.VectoCommon.Models
 Imports TUGraz.VectoCommon.Utils
@@ -19,12 +20,13 @@ Imports TUGraz.VectoHashing
 <CustomValidation(GetType(VectoVTPJob), "ValidateJob")>
 Public Class VectoVTPJob
     Implements IVTPEngineeringInputDataProvider, IVTPEngineeringJobInputData, IVTPDeclarationInputDataProvider,
-               IVTPDeclarationJobInputData
+               IVTPDeclarationJobInputData, IManufacturerReport
 
     Private _sFilePath As String
     Private _myPath As String
 
     Private ReadOnly _vehicleFile As SubPath
+    Private ReadOnly _manufacturerRecord As SubPath
 
     Public ReadOnly CycleFiles As List(Of SubPath)
     Public FanCoefficients As Double()
@@ -34,6 +36,7 @@ Public Class VectoVTPJob
     Public Sub New()
         CycleFiles = New List(Of SubPath)
         _vehicleFile = New SubPath
+        _manufacturerRecord = New SubPath()
     End Sub
 
     Public Property FilePath As String
@@ -117,10 +120,16 @@ Public Class VectoVTPJob
     End Property
 
     Public ReadOnly Property IVTPDeclarationJobInputData_ManufacturerReportInputData As IManufacturerReport Implements IVTPDeclarationJobInputData.ManufacturerReportInputData
+    get
+            Return me
+    End Get
+    End Property
+
+   Public ReadOnly Property VectoJobHash As IVectoHash Implements IVTPDeclarationJobInputData.VectoJobHash
 
-    Public ReadOnly Property VectoJobHash As IVectoHash Implements IVTPDeclarationJobInputData.VectoJobHash
     Public ReadOnly Property VectoManufacturerReportHash As IVectoHash Implements IVTPDeclarationJobInputData.VectoManufacturerReportHash
 
+
     Public ReadOnly Property Cycles As IList(Of ICycleData) Implements IVTPEngineeringJobInputData.Cycles
         Get
             Dim retVal As ICycleData() = New ICycleData(CycleFiles.Count - 1) {}
@@ -187,4 +196,26 @@ Public Class VectoVTPJob
             return Me
         End Get
     End Property
+
+    Public Property ManufacturerRecord(Optional ByVal original As Boolean = False) As String
+        Get
+            If original Then
+                Return _manufacturerRecord.OriginalPath
+            Else
+                Return _manufacturerRecord.FullPath
+            End If
+        End Get
+        Set(value As String)
+            _manufacturerRecord.Init(_myPath, value)
+        End Set
+    End Property
+
+    Public ReadOnly Property Source As String Implements IManufacturerReport.Source
+    get
+            Return _manufacturerRecord.FullPath
+    End Get
+    End Property
+
+    Public ReadOnly Property ComponentDigests As IDictionary(Of VectoComponents,IList(Of String)) Implements IManufacturerReport.ComponentDigests
+    Public ReadOnly Property JobDigest As DigestData Implements IManufacturerReport.JobDigest
 End Class
diff --git a/VECTO/OutputData/JSONFileWriter.vb b/VECTO/OutputData/JSONFileWriter.vb
index ba8c7151d4..3f1464574e 100644
--- a/VECTO/OutputData/JSONFileWriter.vb
+++ b/VECTO/OutputData/JSONFileWriter.vb
@@ -370,6 +370,9 @@ Public Class JSONFileWriter
 		Dim body As Dictionary(Of String, Object) = New Dictionary(Of String, Object)
 		body.Add("SavedInDeclMode", declarationmode)
 		body.Add("DeclarationVehicle", GetRelativePath(job.Vehicle.Source, Path.GetDirectoryName(filename)))
+        if declarationmode Then
+            body.add("ManufacturerRecord", GetRelativePath(job.ManufacturerReportInputData.Source, Path.GetDirectoryName(filename)))
+        End If
 		body.Add("FanPowerCoefficients", job.FanPowerCoefficents)
 		body.Add("FanDiameter", job.FanDiameter.Value())
 		body.Add("Cycles",
diff --git a/VectoCommon/VectoCommon/InputData/VTPDeclarationInputData.cs b/VectoCommon/VectoCommon/InputData/VTPDeclarationInputData.cs
index 9f7918bb28..c63183b4de 100644
--- a/VectoCommon/VectoCommon/InputData/VTPDeclarationInputData.cs
+++ b/VectoCommon/VectoCommon/InputData/VTPDeclarationInputData.cs
@@ -65,6 +65,8 @@ namespace TUGraz.VectoCommon.InputData
 
 	public interface IManufacturerReport
 	{
+		string Source { get; }
+
 		IDictionary<VectoComponents,IList<string>> ComponentDigests { get; }
 
 		DigestData JobDigest { get; }
diff --git a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
index 4cf8314942..ccdc194e12 100644
--- a/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
+++ b/VectoCore/VectoCore/InputData/FileIO/JSON/JSONInputData.cs
@@ -696,6 +696,8 @@ namespace TUGraz.VectoCore.InputData.FileIO.JSON
 
 		public IVectoHash VectoManufacturerReportHash { get; }
 
+		string IManufacturerReport.Source { get { return Body["ManufacturerRecord"].Value<string>(); } }
+
 		public IList<ICycleData> Cycles
 		{
 			get {
diff --git a/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/class_5_generic vehicle_DECL.vecto b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/class_5_generic vehicle_DECL.vecto
index fdc0895c42..7f01870784 100644
--- a/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/class_5_generic vehicle_DECL.vecto	
+++ b/VectoCore/VectoCoreTest/TestData/Integration/VTPMode/GenericVehicle/class_5_generic vehicle_DECL.vecto	
@@ -1,14 +1,14 @@
 {
   "Header": {
     "CreatedBy": "",
-    "Date": "2017-11-20T13:22:33.6138904Z",
+    "Date": "2018-04-27T10:40:05.4111247Z",
     "AppVersion": "3",
     "FileVersion": 4
   },
   "Body": {
     "SavedInDeclMode": true,
     "DeclarationVehicle": "Tractor_4x2_vehicle-class-5_Generic vehicle.xml",
-	"ManufacturerRecord": "Tractor_4x2_vehicle-class-5_Generic vehicle.RSLT_MANUFACTURER.xml",
+    "ManufacturerRecord": "Tractor_4x2_vehicle-class-5_Generic vehicle.RSLT_MANUFACTURER.xml",
     "FanPowerCoefficients": [
       5.5E-07,
       15.0,
-- 
GitLab