aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Ben-Shabat <Roy@Twine-s.com>2018-11-20 13:27:36 +0200
committerRoy Ben-Shabat <Roy@Twine-s.com>2018-11-20 13:27:36 +0200
commitc272cdaaa43f7bf2fefcb36bbfe49624fc4a5ff1 (patch)
treebcc9ccd584d7cc706f6453e7a906fa3f1485ef53
parentfa8459be63d8f76059d1e71ab86c01e0a13851b5 (diff)
downloadTango-c272cdaaa43f7bf2fefcb36bbfe49624fc4a5ff1.tar.gz
Tango-c272cdaaa43f7bf2fefcb36bbfe49624fc4a5ff1.zip
Added job runs logger to machine studio.
-rw-r--r--Software/DB/Tango.mdfbin75497472 -> 75497472 bytes
-rw-r--r--Software/DB/Tango_log.ldfbin15400960 -> 15400960 bytes
-rw-r--r--Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnkbin1532 -> 1516 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/JobRunsLogging/DefaultJobRunsLogger.cs110
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/JobRunsLogging/IJobRunsLogger.cs14
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs5
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj4
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs16
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj2
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs4
-rw-r--r--Software/Visual_Studio/Tango.BL/Builders/JobBuilder.cs8
-rw-r--r--Software/Visual_Studio/Tango.BL/Builders/JobRunsBuilder.cs31
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/JobRun.cs57
-rw-r--r--Software/Visual_Studio/Tango.BL/EntitiesExtensions/JobRun.cs32
-rw-r--r--Software/Visual_Studio/Tango.BL/Enumerations/JobRunStatus.cs15
-rw-r--r--Software/Visual_Studio/Tango.BL/Tango.BL.csproj5
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/JOB_RUNS.cs3
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx9
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram150
19 files changed, 371 insertions, 94 deletions
diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf
index db0d38fa8..947bb2bdb 100644
--- a/Software/DB/Tango.mdf
+++ b/Software/DB/Tango.mdf
Binary files differ
diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf
index 9ce09a6ab..c0f243190 100644
--- a/Software/DB/Tango_log.ldf
+++ b/Software/DB/Tango_log.ldf
Binary files differ
diff --git a/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk b/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk
index 6336d80ca..120d5e694 100644
--- a/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk
+++ b/Software/Visual_Studio/Build/Shortcuts/Machine Studio.lnk
Binary files differ
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/JobRunsLogging/DefaultJobRunsLogger.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/JobRunsLogging/DefaultJobRunsLogger.cs
new file mode 100644
index 000000000..fb01e3aa8
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/JobRunsLogging/DefaultJobRunsLogger.cs
@@ -0,0 +1,110 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.BL;
+using Tango.BL.Entities;
+using Tango.BL.Enumerations;
+using Tango.Core;
+using Tango.Core.DI;
+using Tango.Integration.ExternalBridge;
+using Tango.Integration.Operation;
+using Tango.MachineStudio.Common.StudioApplication;
+
+namespace Tango.MachineStudio.Common.JobRunsLogging
+{
+ public class DefaultJobRunsLogger : ExtendedObject, IJobRunsLogger
+ {
+ private ObservablesContext _context;
+ private DateTime _start_date;
+ private Job _job;
+ private IStudioApplicationManager applicationManager;
+
+ public void Init(IStudioApplicationManager appManager)
+ {
+ applicationManager = appManager;
+ _context = ObservablesContext.CreateDefault();
+ applicationManager.ConnectedMachineChanged += ApplicationManager_ConnectedMachineChanged;
+ }
+
+ private void ApplicationManager_ConnectedMachineChanged(object sender, IExternalBridgeClient machine)
+ {
+ if (machine != null)
+ {
+ machine.PrintingStarted -= Machine_PrintingStarted;
+ machine.PrintingStarted += Machine_PrintingStarted;
+ machine.PrintingCompleted -= Machine_PrintingCompleted;
+ machine.PrintingCompleted += Machine_PrintingCompleted;
+ machine.PrintingAborted -= Machine_PrintingAborted;
+ machine.PrintingAborted += Machine_PrintingAborted;
+ machine.PrintingFailed -= Machine_PrintingFailed;
+ machine.PrintingFailed += Machine_PrintingFailed;
+ }
+ }
+
+ private void Machine_PrintingFailed(object sender, PrintingFailedEventArgs e)
+ {
+ if (e.Job.Guid == _job.Guid)
+ {
+ Task.Factory.StartNew(() =>
+ {
+ _context.JobRuns.Add(new JobRun()
+ {
+ StartDate = _start_date,
+ EndDate = DateTime.UtcNow,
+ JobGuid = _job.Guid,
+ JobRunStatus = JobRunStatus.Failed,
+ FailedMessage = e.Exception.Message,
+ });
+
+ _context.SaveChanges();
+ });
+ }
+ }
+
+ private void Machine_PrintingAborted(object sender, PrintingEventArgs e)
+ {
+ if (e.Job.Guid == _job.Guid)
+ {
+ Task.Factory.StartNew(() =>
+ {
+ _context.JobRuns.Add(new JobRun()
+ {
+ StartDate = _start_date,
+ EndDate = DateTime.UtcNow,
+ JobGuid = _job.Guid,
+ JobRunStatus = JobRunStatus.Aborted,
+ });
+
+ _context.SaveChanges();
+ });
+ }
+ }
+
+ private void Machine_PrintingCompleted(object sender, PrintingEventArgs e)
+ {
+ if (e.Job.Guid == _job.Guid)
+ {
+ Task.Factory.StartNew(() =>
+ {
+ _context.JobRuns.Add(new JobRun()
+ {
+ StartDate = _start_date,
+ EndDate = DateTime.UtcNow,
+ JobGuid = _job.Guid,
+ JobRunStatus = JobRunStatus.Completed,
+ });
+
+ _context.SaveChanges();
+ });
+ }
+ }
+
+ private void Machine_PrintingStarted(object sender, PrintingEventArgs e)
+ {
+ _job = e.Job;
+ _start_date = DateTime.UtcNow;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/JobRunsLogging/IJobRunsLogger.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/JobRunsLogging/IJobRunsLogger.cs
new file mode 100644
index 000000000..c3eca953b
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/JobRunsLogging/IJobRunsLogger.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.MachineStudio.Common.StudioApplication;
+
+namespace Tango.MachineStudio.Common.JobRunsLogging
+{
+ public interface IJobRunsLogger
+ {
+ void Init(IStudioApplicationManager appManager);
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs
index 1a0499f2c..3e54a327b 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/StudioApplication/IStudioApplicationManager.cs
@@ -16,6 +16,11 @@ namespace Tango.MachineStudio.Common.StudioApplication
public interface IStudioApplicationManager : INotifyPropertyChanged
{
/// <summary>
+ /// Occurs when the application is ready.
+ /// </summary>
+ event EventHandler ApplicationReady;
+
+ /// <summary>
/// Occurs when the connected machine property has changed.
/// </summary>
event EventHandler<IExternalBridgeClient> ConnectedMachineChanged;
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj
index 551ec93c0..4259bbb04 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Tango.MachineStudio.Common.csproj
@@ -101,6 +101,8 @@
<Compile Include="Html\IHtmlPresenter.cs" />
<None Include="Helpers\GraphsHelper.cs" />
<Compile Include="IStudioViewModel.cs" />
+ <Compile Include="JobRunsLogging\DefaultJobRunsLogger.cs" />
+ <Compile Include="JobRunsLogging\IJobRunsLogger.cs" />
<Compile Include="MachineStudioSettings.cs" />
<Compile Include="Messages\MachineConnectionChangedMessage.cs" />
<Compile Include="Navigation\INavigationBlocker.cs" />
@@ -301,7 +303,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
+ <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs
index 3864708fc..6303b1ac8 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/StudioApplication/DefaultStudioApplicationManager.cs
@@ -26,6 +26,7 @@ using Tango.MachineStudio.Common.Notifications;
using Tango.MachineStudio.UI.Views;
using Tango.Integration.Operation;
using Tango.MachineStudio.UI.Windows;
+using Tango.MachineStudio.Common.JobRunsLogging;
namespace Tango.MachineStudio.UI.StudioApplication
{
@@ -39,15 +40,22 @@ namespace Tango.MachineStudio.UI.StudioApplication
private INavigationManager _navigationManager;
private IStudioModuleLoader _moduleLoader;
private INotificationProvider _notification;
+ private IJobRunsLogger _jobRunsLogger;
private List<Window> _openedWindows;
private List<IStudioViewModel> _notified_view_models;
/// <summary>
+ /// Occurs when the application is ready.
+ /// </summary>
+ public event EventHandler ApplicationReady;
+
+ /// <summary>
/// Initializes a new instance of the <see cref="DefaultStudioApplicationManager" /> class.
/// </summary>
/// <param name="navigationManager">The navigation manager.</param>
- public DefaultStudioApplicationManager(INavigationManager navigationManager, IStudioModuleLoader moduleLoader, INotificationProvider notification)
+ public DefaultStudioApplicationManager(INavigationManager navigationManager, IStudioModuleLoader moduleLoader, INotificationProvider notification, IJobRunsLogger jobRunsLogger)
{
+ _jobRunsLogger = jobRunsLogger;
_moduleLoader = moduleLoader;
_navigationManager = navigationManager;
_notification = notification;
@@ -332,7 +340,7 @@ namespace Tango.MachineStudio.UI.StudioApplication
/// </summary>
public void NotifyApplicationReady()
{
- TangoIOC.Default.GetAllInstancesByBase<IStudioViewModel>().ToList().ForEach(x =>
+ TangoIOC.Default.GetAllInstancesByBase<IStudioViewModel>().ToList().ForEach(x =>
{
if (!_notified_view_models.Contains(x))
{
@@ -340,6 +348,9 @@ namespace Tango.MachineStudio.UI.StudioApplication
_notified_view_models.Add(x);
}
});
+
+ ApplicationReady?.Invoke(this, new EventArgs());
+ _jobRunsLogger.Init(this);
}
/// <summary>
@@ -360,5 +371,6 @@ namespace Tango.MachineStudio.UI.StudioApplication
ConnectedMachine = null;
}
}
+
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj
index 4fb14ba47..39f748ceb 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Tango.MachineStudio.UI.csproj
@@ -591,7 +591,7 @@ copy /Y "$(SolutionDir)Referenced Assemblies\Microsoft.WITDataStore32.dll" "$(Ta
</Target>
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_UseGlobalSettings="False" BuildVersion_DetectChanges="True" BuildVersion_UpdateFileVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.DeltaBaseYearDayOfYear" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_BuildVersioningStyle="None.None.Increment.DeltaBaseYearDayOfYear" BuildVersion_UpdateFileVersion="True" BuildVersion_DetectChanges="True" BuildVersion_UseGlobalSettings="False" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs
index 10aa86ad1..8bb33d007 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModelLocator.cs
@@ -7,6 +7,7 @@ using Tango.MachineStudio.Common.Authentication;
using Tango.MachineStudio.Common.Diagnostics;
using Tango.MachineStudio.Common.EventLogging;
using Tango.MachineStudio.Common.Html;
+using Tango.MachineStudio.Common.JobRunsLogging;
using Tango.MachineStudio.Common.Modules;
using Tango.MachineStudio.Common.Navigation;
using Tango.MachineStudio.Common.Notifications;
@@ -68,6 +69,7 @@ namespace Tango.MachineStudio.UI
TangoIOC.Default.Unregister<IHtmlPresenter>();
TangoIOC.Default.Unregister<ITeamFoundationServiceClient>();
TangoIOC.Default.Unregister<IDispatcherProvider>();
+ TangoIOC.Default.Unregister<IJobRunsLogger>();
TangoIOC.Default.Register<IDispatcherProvider, DefaultDispatcherProvider>(new DefaultDispatcherProvider(Application.Current.Dispatcher));
@@ -75,6 +77,7 @@ namespace Tango.MachineStudio.UI
TangoIOC.Default.Register<IAuthenticationProvider, DefaultAuthenticationProvider>();
TangoIOC.Default.Register<INavigationManager, DefaultNavigationManager>();
TangoIOC.Default.Register<IStudioModuleLoader, DefaultStudioModuleLoader>();
+ TangoIOC.Default.Register<IJobRunsLogger, DefaultJobRunsLogger>();
TangoIOC.Default.Register<IStudioApplicationManager, DefaultStudioApplicationManager>();
TangoIOC.Default.Register<ExternalBridgeScanner, ExternalBridgeScanner>();
TangoIOC.Default.Register<IVideoCaptureProvider, DefaultVideoCaptureProvider>();
@@ -83,6 +86,7 @@ namespace Tango.MachineStudio.UI
TangoIOC.Default.Register<ISpeechProvider, DefaultSpeechProvider>();
TangoIOC.Default.Register<IHtmlPresenter, DefaultHtmlPresenter>();
TangoIOC.Default.Register<TeamFoundationServiceExtendedClient>(new TeamFoundationServiceExtendedClient("https://twinetfs.visualstudio.com", String.Empty, "szzfokrceo4rhd4eqi5qpmxn3pa5iwl3q7tlqd36l2m7smz2ynoa"));
+
TangoIOC.Default.Register<MainViewVM>();
TangoIOC.Default.Register<LoadingViewVM>();
diff --git a/Software/Visual_Studio/Tango.BL/Builders/JobBuilder.cs b/Software/Visual_Studio/Tango.BL/Builders/JobBuilder.cs
index a0a88f4a7..d8d58d69b 100644
--- a/Software/Visual_Studio/Tango.BL/Builders/JobBuilder.cs
+++ b/Software/Visual_Studio/Tango.BL/Builders/JobBuilder.cs
@@ -77,5 +77,13 @@ namespace Tango.BL.Builders
new UserBuilder(Context).Set(Entity.UserGuid).Build();
});
}
+
+ public virtual JobBuilder WithJobRuns()
+ {
+ return AddStep(6, () =>
+ {
+ Context.JobRuns.Where(x => x.JobGuid == Entity.Guid).OrderBy(x => x.StartDate).ToList();
+ });
+ }
}
}
diff --git a/Software/Visual_Studio/Tango.BL/Builders/JobRunsBuilder.cs b/Software/Visual_Studio/Tango.BL/Builders/JobRunsBuilder.cs
new file mode 100644
index 000000000..0a02c6a23
--- /dev/null
+++ b/Software/Visual_Studio/Tango.BL/Builders/JobRunsBuilder.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.BL.Entities;
+using System.Data.Entity;
+
+namespace Tango.BL.Builders
+{
+ public class JobRunsBuilder : EntityBuilderBase<JobRun, JobRunsBuilder>
+ {
+ public JobRunsBuilder(ObservablesContext context) : base(context)
+ {
+
+ }
+
+ protected override IQueryable<JobRun> OnSetQuery(IQueryable<JobRun> query)
+ {
+ return query.Include(x => x.Job);
+ }
+
+ public virtual JobRunsBuilder WithJobEvents()
+ {
+ return AddStep(2, () =>
+ {
+ Context.MachinesEvents.Where(x => x.MachineGuid == Entity.Job.MachineGuid && x.DateTime >= Entity.StartDate && x.DateTime <= Entity.EndDate).OrderBy(x => x.DateTime).ToList();
+ });
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.BL/Entities/JobRun.cs b/Software/Visual_Studio/Tango.BL/Entities/JobRun.cs
index b4ecf4f5a..6e953f5ce 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/JobRun.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/JobRun.cs
@@ -21,6 +21,11 @@ using Tango.Core;
namespace Tango.BL.Entities
{
+
+ /// <summary>
+ ///
+ /// </summary>
+
[Table("JOB_RUNS")]
public partial class JobRun : ObservableEntity<JobRun>
{
@@ -29,7 +34,9 @@ namespace Tango.BL.Entities
public event EventHandler<DateTime> EndDateChanged;
- public event EventHandler<Boolean> SuccessfulChanged;
+ public event EventHandler<Int32> StatusChanged;
+
+ public event EventHandler<String> FailedMessageChanged;
public event EventHandler<Job> JobChanged;
@@ -115,30 +122,60 @@ namespace Tango.BL.Entities
}
}
- protected Boolean _successful;
+ protected Int32 _status;
+
+ /// <summary>
+ /// 0 = COMPLETED
+ /// 1 = ABORTED
+ /// 2 = FAILED
+ /// </summary>
+
+ [Column("STATUS")]
+
+ public Int32 Status
+ {
+ get
+ {
+ return _status;
+ }
+
+ set
+ {
+ if (_status != value)
+ {
+ _status = value;
+
+ StatusChanged?.Invoke(this, value);
+
+ RaisePropertyChanged(nameof(Status));
+ }
+ }
+ }
+
+ protected String _failedmessage;
/// <summary>
- /// Gets or sets the jobrun successful.
+ /// Gets or sets the jobrun failed message.
/// </summary>
- [Column("SUCCESSFUL")]
+ [Column("FAILED_MESSAGE")]
- public Boolean Successful
+ public String FailedMessage
{
get
{
- return _successful;
+ return _failedmessage;
}
set
{
- if (_successful != value)
+ if (_failedmessage != value)
{
- _successful = value;
+ _failedmessage = value;
- SuccessfulChanged?.Invoke(this, value);
+ FailedMessageChanged?.Invoke(this, value);
- RaisePropertyChanged(nameof(Successful));
+ RaisePropertyChanged(nameof(FailedMessage));
}
}
}
diff --git a/Software/Visual_Studio/Tango.BL/EntitiesExtensions/JobRun.cs b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/JobRun.cs
new file mode 100644
index 000000000..555857f53
--- /dev/null
+++ b/Software/Visual_Studio/Tango.BL/EntitiesExtensions/JobRun.cs
@@ -0,0 +1,32 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.BL.Enumerations;
+
+namespace Tango.BL.Entities
+{
+ public partial class JobRun
+ {
+ [NotMapped]
+ [JsonIgnore]
+ public JobRunStatus JobRunStatus
+ {
+ get { return (JobRunStatus)Status; }
+ set { Status = (int)value; }
+ }
+
+ protected override void RaisePropertyChanged(string propName)
+ {
+ base.RaisePropertyChanged(propName);
+
+ if (propName == nameof(Status))
+ {
+ RaisePropertyChanged(nameof(JobRunStatus));
+ }
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.BL/Enumerations/JobRunStatus.cs b/Software/Visual_Studio/Tango.BL/Enumerations/JobRunStatus.cs
new file mode 100644
index 000000000..5abc98073
--- /dev/null
+++ b/Software/Visual_Studio/Tango.BL/Enumerations/JobRunStatus.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Tango.BL.Enumerations
+{
+ public enum JobRunStatus
+ {
+ Completed,
+ Aborted,
+ Failed,
+ }
+}
diff --git a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj
index cf95ea9bc..b8cc1b1e3 100644
--- a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj
+++ b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj
@@ -89,6 +89,7 @@
<Compile Include="Builders\IEntityBuilder.cs" />
<Compile Include="Builders\IEntityCollectionBuilder.cs" />
<Compile Include="Builders\JobBuilder.cs" />
+ <Compile Include="Builders\JobRunsBuilder.cs" />
<Compile Include="Builders\JobsCollectionBuilder.cs" />
<Compile Include="Builders\MachineBuilder.cs" />
<Compile Include="Builders\RmlBuilder.cs" />
@@ -112,6 +113,7 @@
<Compile Include="Dispensing\TransparentLiquidDispensingCalc.cs" />
<Compile Include="EntitiesExtensions\ColorCatalog.cs" />
<Compile Include="EntitiesExtensions\Contact.cs" />
+ <Compile Include="EntitiesExtensions\JobRun.cs" />
<Compile Include="EntitiesExtensions\LiquidType.cs" />
<Compile Include="EntitiesExtensions\LiquidTypesRml.cs" />
<Compile Include="EntitiesExtensions\MachineEvent.cs" />
@@ -154,6 +156,7 @@
<Compile Include="Enumerations\Ios.cs" />
<Compile Include="Enumerations\JobCategories.cs" />
<Compile Include="Enumerations\JobDesignations.cs" />
+ <Compile Include="Enumerations\JobRunStatus.cs" />
<Compile Include="Enumerations\JobStatuses.cs" />
<Compile Include="Enumerations\JobTypes.cs" />
<Compile Include="Enumerations\LiquidTypes.cs" />
@@ -345,7 +348,7 @@
</Target>
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/JOB_RUNS.cs b/Software/Visual_Studio/Tango.DAL.Remote/DB/JOB_RUNS.cs
index bb93a87c2..9e5cf6049 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/JOB_RUNS.cs
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/JOB_RUNS.cs
@@ -20,7 +20,8 @@ namespace Tango.DAL.Remote.DB
public string JOB_GUID { get; set; }
public System.DateTime START_DATE { get; set; }
public System.DateTime END_DATE { get; set; }
- public bool SUCCESSFUL { get; set; }
+ public int STATUS { get; set; }
+ public string FAILED_MESSAGE { get; set; }
public virtual JOB JOB { get; set; }
}
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
index 46591fb34..1fbc101b3 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
@@ -589,7 +589,8 @@
<Property Name="JOB_GUID" Type="varchar" MaxLength="36" Nullable="false" />
<Property Name="START_DATE" Type="datetime2" Precision="3" Nullable="false" />
<Property Name="END_DATE" Type="datetime2" Precision="3" Nullable="false" />
- <Property Name="SUCCESSFUL" Type="bit" Nullable="false" />
+ <Property Name="STATUS" Type="int" Nullable="false" />
+ <Property Name="FAILED_MESSAGE" Type="nvarchar" MaxLength="300" />
</EntityType>
<EntityType Name="JOBS">
<Key>
@@ -3658,7 +3659,8 @@
<Property Name="JOB_GUID" Type="String" Nullable="false" MaxLength="36" FixedLength="false" Unicode="false" />
<Property Name="START_DATE" Type="DateTime" Nullable="false" Precision="3" />
<Property Name="END_DATE" Type="DateTime" Nullable="false" Precision="3" />
- <Property Name="SUCCESSFUL" Type="Boolean" Nullable="false" />
+ <Property Name="STATUS" Type="Int32" Nullable="false" />
+ <Property Name="FAILED_MESSAGE" Type="String" MaxLength="300" FixedLength="false" Unicode="true" />
<NavigationProperty Name="JOB" Relationship="RemoteModel.FK_JOB_RUNS_JOBS" FromRole="JOB_RUNS" ToRole="JOB" />
</EntityType>
<EntityType Name="JOB">
@@ -5935,7 +5937,8 @@
<EntitySetMapping Name="JOB_RUNS">
<EntityTypeMapping TypeName="RemoteModel.JOB_RUNS">
<MappingFragment StoreEntitySet="JOB_RUNS">
- <ScalarProperty Name="SUCCESSFUL" ColumnName="SUCCESSFUL" />
+ <ScalarProperty Name="FAILED_MESSAGE" ColumnName="FAILED_MESSAGE" />
+ <ScalarProperty Name="STATUS" ColumnName="STATUS" />
<ScalarProperty Name="END_DATE" ColumnName="END_DATE" />
<ScalarProperty Name="START_DATE" ColumnName="START_DATE" />
<ScalarProperty Name="JOB_GUID" ColumnName="JOB_GUID" />
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
index 8667820a2..8a1e6296e 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
@@ -5,81 +5,81 @@
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram DiagramId="f9ae01d708754bbd997add25a4bacc79" Name="Diagram1">
- <EntityTypeShape EntityType="RemoteModel.ACTION_TYPES" Width="1.5" PointX="5.25" PointY="1.375" />
- <EntityTypeShape EntityType="RemoteModel.ADDRESS" Width="1.5" PointX="0.75" PointY="55.75" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_DISPLAY_PANEL_VERSIONS" Width="1.5" PointX="0.75" PointY="42.875" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_FIRMWARE_VERSIONS" Width="1.5" PointX="0.75" PointY="45.875" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_OS_VERSIONS" Width="1.5" PointX="0.75" PointY="35.75" />
- <EntityTypeShape EntityType="RemoteModel.BRUSH_STOPS" Width="1.5" PointX="15" PointY="16" />
- <EntityTypeShape EntityType="RemoteModel.CARTRIDGE_TYPES" Width="1.5" PointX="9" PointY="55.125" />
- <EntityTypeShape EntityType="RemoteModel.CAT" Width="1.5" PointX="8.25" PointY="19.625" />
- <EntityTypeShape EntityType="RemoteModel.CCT" Width="1.5" PointX="5.25" PointY="47.375" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS" Width="1.5" PointX="12.75" PointY="23.125" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_SPACES" Width="1.5" PointX="3" PointY="12.875" />
- <EntityTypeShape EntityType="RemoteModel.CONFIGURATION" Width="1.5" PointX="3" PointY="41" />
- <EntityTypeShape EntityType="RemoteModel.CONTACT" Width="1.5" PointX="0.75" PointY="51.75" />
- <EntityTypeShape EntityType="RemoteModel.CUSTOMER" Width="1.5" PointX="8.25" PointY="23.875" />
- <EntityTypeShape EntityType="RemoteModel.DISPENSER_TYPES" Width="1.5" PointX="9" PointY="58" />
- <EntityTypeShape EntityType="RemoteModel.EMBEDDED_FIRMWARE_VERSIONS" Width="1.5" PointX="0.75" PointY="48.75" />
- <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES" Width="1.5" PointX="5.25" PointY="4.5" />
- <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES_ACTIONS" Width="1.5" PointX="7.5" PointY="2.375" />
- <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES_CATEGORIES" Width="1.5" PointX="3" PointY="8.625" />
- <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES_GROUPS" Width="1.5" PointX="3" PointY="2.25" />
- <EntityTypeShape EntityType="RemoteModel.FIBER_SHAPES" Width="1.5" PointX="0.75" PointY="29.5" />
- <EntityTypeShape EntityType="RemoteModel.FIBER_SYNTHS" Width="1.5" PointX="0.75" PointY="12.75" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWER_TYPES" Width="1.5" PointX="0.75" PointY="60.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWERS" Width="1.5" PointX="3" PointY="37" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSOR_TYPES" Width="1.5" PointX="3.75" PointY="58.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSORS" Width="1.5" PointX="6" PointY="37" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCER_TYPES" Width="1.5" PointX="0.75" PointY="64.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCERS" Width="1.5" PointX="3" PointY="47.125" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTOR_TYPES" Width="1.5" PointX="10.75" PointY="65.125" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTORS" Width="1.5" PointX="13" PointY="40.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROL_TYPES" Width="1.5" PointX="6.75" PointY="52.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROLS" Width="1.5" PointX="9" PointY="33.375" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSOR_TYPES" Width="1.5" PointX="7.75" PointY="48.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSORS" Width="1.5" PointX="10" PointY="41" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_VERSIONS" Width="1.5" PointX="0.75" PointY="38.625" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDER_TYPES" Width="1.5" PointX="7.75" PointY="65.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDERS" Width="1.5" PointX="10" PointY="45" />
- <EntityTypeShape EntityType="RemoteModel.HTML_PAGES" Width="1.5" PointX="3" PointY="5.25" />
- <EntityTypeShape EntityType="RemoteModel.IDS_PACK_FORMULAS" Width="1.5" PointX="9" PointY="51.75" />
- <EntityTypeShape EntityType="RemoteModel.IDS_PACKS" Width="1.5" PointX="11.25" PointY="35.5" />
- <EntityTypeShape EntityType="RemoteModel.JOB_RUNS" Width="1.5" PointX="12.75" PointY="15.625" />
- <EntityTypeShape EntityType="RemoteModel.JOB" Width="1.5" PointX="10.5" PointY="13.875" />
- <EntityTypeShape EntityType="RemoteModel.LINEAR_MASS_DENSITY_UNITS" Width="1.5" PointX="0.75" PointY="32.375" />
- <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES" Width="1.5" PointX="6" PointY="29.75" />
- <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES_RMLS" Width="1.5" PointX="5.25" PointY="19.875" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE_STUDIO_VERSIONS" Width="1.5" PointX="7.5" PointY="5.5" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE_VERSIONS" Width="1.5" PointX="3" PointY="31.25" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE" Width="1.5" PointX="5.25" PointY="12.125" />
- <EntityTypeShape EntityType="RemoteModel.MACHINES_CONFIGURATIONS" Width="1.5" PointX="7.5" PointY="10" />
- <EntityTypeShape EntityType="RemoteModel.MACHINES_EVENTS" Width="1.5" PointX="7.5" PointY="13.5" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_COLORS" Width="1.5" PointX="0.75" PointY="19.875" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_CONDITIONS" Width="1.5" PointX="0.75" PointY="26.625" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_MATERIALS" Width="1.5" PointX="0.75" PointY="23.625" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_PURPOSES" Width="1.5" PointX="0.75" PointY="15.75" />
- <EntityTypeShape EntityType="RemoteModel.MID_TANK_TYPES" Width="1.5" PointX="9" PointY="61.25" />
- <EntityTypeShape EntityType="RemoteModel.ORGANIZATION" Width="1.5" PointX="3" PointY="53.875" />
- <EntityTypeShape EntityType="RemoteModel.PERMISSION" Width="1.5" PointX="11.25" PointY="48.75" />
- <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES" Width="1.5" PointX="7.5" PointY="40.875" />
- <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES_GROUPS" Width="1.5" PointX="5.25" PointY="42.375" />
- <EntityTypeShape EntityType="RemoteModel.RML" Width="1.5" PointX="3" PointY="17.25" />
- <EntityTypeShape EntityType="RemoteModel.ROLE" Width="1.5" PointX="11.25" PointY="31.75" />
- <EntityTypeShape EntityType="RemoteModel.ROLES_PERMISSIONS" Width="1.5" PointX="13.5" PointY="34.75" />
- <EntityTypeShape EntityType="RemoteModel.SEGMENT" Width="1.5" PointX="12.75" PointY="18.875" />
- <EntityTypeShape EntityType="RemoteModel.SPOOL_TYPES" Width="1.5" PointX="3" PointY="26.625" />
- <EntityTypeShape EntityType="RemoteModel.sysdiagram" Width="1.5" PointX="9.75" PointY="0.75" />
- <EntityTypeShape EntityType="RemoteModel.TANGO_VERSIONS" Width="1.5" PointX="10.5" PointY="27.375" />
- <EntityTypeShape EntityType="RemoteModel.TECH_CONTROLLERS" Width="1.5" PointX="9.75" PointY="3.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_DISPENSERS" Width="1.5" PointX="9.75" PointY="7.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_HEATERS" Width="1.5" PointX="9.75" PointY="10.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_IOS" Width="1.5" PointX="11.75" PointY="0.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_MONITORS" Width="1.5" PointX="11.75" PointY="5.75" />
- <EntityTypeShape EntityType="RemoteModel.TECH_VALVES" Width="1.5" PointX="12.75" PointY="10.75" />
- <EntityTypeShape EntityType="RemoteModel.USER" Width="1.5" PointX="5.25" PointY="23.75" />
- <EntityTypeShape EntityType="RemoteModel.USERS_ROLES" Width="1.5" PointX="13.5" PointY="30.75" />
- <EntityTypeShape EntityType="RemoteModel.WINDING_METHODS" Width="1.5" PointX="8.25" PointY="27" />
+ <EntityTypeShape EntityType="RemoteModel.ACTION_TYPES" Width="1.5" PointX="14.25" PointY="34.5" />
+ <EntityTypeShape EntityType="RemoteModel.ADDRESS" Width="1.5" PointX="6.75" PointY="50.5" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_DISPLAY_PANEL_VERSIONS" Width="1.5" PointX="6.75" PointY="62.375" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_FIRMWARE_VERSIONS" Width="1.5" PointX="6.75" PointY="65.25" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_OS_VERSIONS" Width="1.5" PointX="6.75" PointY="68.125" />
+ <EntityTypeShape EntityType="RemoteModel.BRUSH_STOPS" Width="1.5" PointX="10.75" PointY="9.625" />
+ <EntityTypeShape EntityType="RemoteModel.CARTRIDGE_TYPES" Width="1.5" PointX="9" PointY="89.5" />
+ <EntityTypeShape EntityType="RemoteModel.CAT" Width="1.5" PointX="8.25" PointY="17.125" />
+ <EntityTypeShape EntityType="RemoteModel.CCT" Width="1.5" PointX="5.25" PointY="27.875" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS" Width="1.5" PointX="8.5" PointY="71.75" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_SPACES" Width="1.5" PointX="9" PointY="33.5" />
+ <EntityTypeShape EntityType="RemoteModel.CONFIGURATION" Width="1.5" PointX="9" PointY="60.375" />
+ <EntityTypeShape EntityType="RemoteModel.CONTACT" Width="1.5" PointX="6.75" PointY="46.5" />
+ <EntityTypeShape EntityType="RemoteModel.CUSTOMER" Width="1.5" PointX="3" PointY="15.25" />
+ <EntityTypeShape EntityType="RemoteModel.DISPENSER_TYPES" Width="1.5" PointX="9" PointY="86.125" />
+ <EntityTypeShape EntityType="RemoteModel.EMBEDDED_FIRMWARE_VERSIONS" Width="1.5" PointX="6.75" PointY="59.375" />
+ <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES" Width="1.5" PointX="14.25" PointY="29.625" />
+ <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES_ACTIONS" Width="1.5" PointX="16.5" PointY="30.5" />
+ <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES_CATEGORIES" Width="1.5" PointX="12" PointY="30.375" />
+ <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES_GROUPS" Width="1.5" PointX="12" PointY="27.25" />
+ <EntityTypeShape EntityType="RemoteModel.FIBER_SHAPES" Width="1.5" PointX="0.75" PointY="21.5" />
+ <EntityTypeShape EntityType="RemoteModel.FIBER_SYNTHS" Width="1.5" PointX="0.75" PointY="31.125" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWER_TYPES" Width="1.5" PointX="6.75" PointY="79.75" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWERS" Width="1.5" PointX="9" PointY="55.375" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSOR_TYPES" Width="1.5" PointX="12.75" PointY="39.75" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSORS" Width="1.5" PointX="15" PointY="49.375" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCER_TYPES" Width="1.5" PointX="9.75" PointY="39.75" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCERS" Width="1.5" PointX="12" PointY="49.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTOR_TYPES" Width="1.5" PointX="12.75" PointY="67.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTORS" Width="1.5" PointX="15" PointY="61.25" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROL_TYPES" Width="1.5" PointX="12.75" PointY="63.75" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROLS" Width="1.5" PointX="15" PointY="53.75" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSOR_TYPES" Width="1.5" PointX="9.75" PointY="79.75" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSORS" Width="1.5" PointX="12" PointY="59.375" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_VERSIONS" Width="1.5" PointX="6.75" PointY="55.125" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDER_TYPES" Width="1.5" PointX="9.75" PointY="66.75" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDERS" Width="1.5" PointX="12" PointY="55.5" />
+ <EntityTypeShape EntityType="RemoteModel.HTML_PAGES" Width="1.5" PointX="12" PointY="33.5" />
+ <EntityTypeShape EntityType="RemoteModel.IDS_PACK_FORMULAS" Width="1.5" PointX="9" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.IDS_PACKS" Width="1.5" PointX="11.25" PointY="43.5" />
+ <EntityTypeShape EntityType="RemoteModel.JOB_RUNS" Width="1.5" PointX="7.5" PointY="25" />
+ <EntityTypeShape EntityType="RemoteModel.JOB" Width="1.5" PointX="5.25" PointY="16.875" />
+ <EntityTypeShape EntityType="RemoteModel.LINEAR_MASS_DENSITY_UNITS" Width="1.5" PointX="0.75" PointY="14" />
+ <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES" Width="1.5" PointX="6" PointY="32.375" />
+ <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES_RMLS" Width="1.5" PointX="8.25" PointY="21.25" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE_STUDIO_VERSIONS" Width="1.5" PointX="5.25" PointY="36.125" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE_VERSIONS" Width="1.5" PointX="9" PointY="5" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE" Width="1.5" PointX="11.25" PointY="19.5" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINES_CONFIGURATIONS" Width="1.5" PointX="13.5" PointY="21.5" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINES_EVENTS" Width="1.5" PointX="16.5" PointY="21" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_COLORS" Width="1.5" PointX="0.75" PointY="17" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_CONDITIONS" Width="1.5" PointX="0.75" PointY="34" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_MATERIALS" Width="1.5" PointX="0.75" PointY="25.25" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_PURPOSES" Width="1.5" PointX="0.75" PointY="28.25" />
+ <EntityTypeShape EntityType="RemoteModel.MID_TANK_TYPES" Width="1.5" PointX="9" PointY="83" />
+ <EntityTypeShape EntityType="RemoteModel.ORGANIZATION" Width="1.5" PointX="9" PointY="48.625" />
+ <EntityTypeShape EntityType="RemoteModel.PERMISSION" Width="1.5" PointX="12" PointY="1.5" />
+ <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES" Width="1.5" PointX="7.5" PointY="39.375" />
+ <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES_GROUPS" Width="1.5" PointX="5.25" PointY="40.875" />
+ <EntityTypeShape EntityType="RemoteModel.RML" Width="1.5" PointX="3" PointY="18.625" />
+ <EntityTypeShape EntityType="RemoteModel.ROLE" Width="1.5" PointX="12" PointY="5.375" />
+ <EntityTypeShape EntityType="RemoteModel.ROLES_PERMISSIONS" Width="1.5" PointX="14.25" PointY="5.5" />
+ <EntityTypeShape EntityType="RemoteModel.SEGMENT" Width="1.5" PointX="7.5" PointY="13.5" />
+ <EntityTypeShape EntityType="RemoteModel.SPOOL_TYPES" Width="1.5" PointX="9" PointY="28.75" />
+ <EntityTypeShape EntityType="RemoteModel.sysdiagram" Width="1.5" PointX="0.75" PointY="2.125" />
+ <EntityTypeShape EntityType="RemoteModel.TANGO_VERSIONS" Width="1.5" PointX="13.25" PointY="15" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_CONTROLLERS" Width="1.5" PointX="2.75" PointY="2.125" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_DISPENSERS" Width="1.5" PointX="4.75" PointY="2.125" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_HEATERS" Width="1.5" PointX="0.75" PointY="6.125" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_IOS" Width="1.5" PointX="2.75" PointY="6.125" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_MONITORS" Width="1.5" PointX="4.75" PointY="5.125" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_VALVES" Width="1.5" PointX="6.75" PointY="9.125" />
+ <EntityTypeShape EntityType="RemoteModel.USER" Width="1.5" PointX="3" PointY="27.375" />
+ <EntityTypeShape EntityType="RemoteModel.USERS_ROLES" Width="1.5" PointX="14.25" PointY="25.375" />
+ <EntityTypeShape EntityType="RemoteModel.WINDING_METHODS" Width="1.5" PointX="3" PointY="32.625" />
<AssociationConnector Association="RemoteModel.FK_EVENTS_ACTIONS_ACTIONS" />
<AssociationConnector Association="RemoteModel.FK_ORGANIZATIONS_ADDRESSES" />
<AssociationConnector Association="RemoteModel.FK_USERS_ADDRESSES" />