diff --git a/SaOperationsMgr.sln b/SaOperationsMgr.sln
index 8f25474..76b4295 100644
--- a/SaOperationsMgr.sln
+++ b/SaOperationsMgr.sln
@@ -7,7 +7,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaOperationsMgrService", "S
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaOperationsMgr", "SaOperationsMgr\SaOperationsMgr.csproj", "{F59F6AEB-6611-4F71-A211-D64F98A1A8AC}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaOpnMgrCore", "SaOpnMgrCore\SaOpnMgrCore.csproj", "{9EAC4DD6-D3C8-4966-B1BE-B0D2CE17F012}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaOpnMgrCore", "SaOpnMgrCore\SaOpnMgrCore.csproj", "{9EAC4DD6-D3C8-4966-B1BE-B0D2CE17F012}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaOpnMgrProcs", "SaOpnMgrProcs\SaOpnMgrProcs.csproj", "{12783700-F1BA-4D24-9B0E-9C8A7C5FF621}"
EndProject
@@ -25,7 +25,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SacsWinForms", "..\..\Commo
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SacsWinOffice", "..\..\Common-C#\Workspace\SacsWinOffice\SacsWinOffice.csproj", "{E9106099-66B4-42DB-AF28-C34CF1AFF2AA}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SaOperationsMgrWeb", "SaOperationsMgrWeb\SaOperationsMgrWeb.csproj", "{BAEA9717-20F8-4519-93CB-19F4B75D5913}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SaOperationsMgrWeb", "SaOperationsMgrWeb\SaOperationsMgrWeb.csproj", "{BAEA9717-20F8-4519-93CB-19F4B75D5913}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/SaOperationsMgrWeb/Localisation/OpnProperties.resx b/SaOperationsMgrWeb/Localisation/OpnProperties.resx
index 4fdb1b6..64a186f 100644
--- a/SaOperationsMgrWeb/Localisation/OpnProperties.resx
+++ b/SaOperationsMgrWeb/Localisation/OpnProperties.resx
@@ -1,101 +1,255 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.3
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Sarand OperationsMgr
+
+
+ Cancel
+
+
+ Close
+
+
+ Login
+
+
+ Logout
+
+
+ Next page
+
+
+ No
+
+
+ OK
+
+
+ Prev page
+
+
+ Refresh
+
+
+ Yes
+
+
+ Code
+
+
+ Status
+
+
+ Utility
+
+
+ Utilities
+
+
+ Login
+
+
+ Logout
+
+
+ NextDataPage
+
+
+ PrevDataPage
+
+
+ Refresh
+
+
+ Login
+
+
+ Code
+
+
+ Company
+
+
+ Instance
+
+
+ Password
+
+
+ Status
+
+
+ Type
+
+
+ User
+
+
+ Home
+
+
+ Logout
+
+
+ Utilities
+
+
+ Are you sure that you want to logout?
+
+
+ No matching data found.
+
+
+ Querying data. please wait ...
+
+
+ Invalid credentials supplied.
+
+
+ User code must be supplied.
+
+
+ Failed to retrieve Security Console.
+
+
+ Your session has expired.
+
+
+ Unknown session context.
+
+
+ Session has expired.
+
+
+ Utilities
+
+
+ items
+
+
+ of
+
+
+ Page
+
+
+ Utilities
+
\ No newline at end of file
diff --git a/SaOperationsMgrWeb/Resources/OpnProperties.resx b/SaOperationsMgrWeb/Resources/OpnProperties.resx
index 4fdb1b6..64a186f 100644
--- a/SaOperationsMgrWeb/Resources/OpnProperties.resx
+++ b/SaOperationsMgrWeb/Resources/OpnProperties.resx
@@ -1,101 +1,255 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.3
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Sarand OperationsMgr
+
+
+ Cancel
+
+
+ Close
+
+
+ Login
+
+
+ Logout
+
+
+ Next page
+
+
+ No
+
+
+ OK
+
+
+ Prev page
+
+
+ Refresh
+
+
+ Yes
+
+
+ Code
+
+
+ Status
+
+
+ Utility
+
+
+ Utilities
+
+
+ Login
+
+
+ Logout
+
+
+ NextDataPage
+
+
+ PrevDataPage
+
+
+ Refresh
+
+
+ Login
+
+
+ Code
+
+
+ Company
+
+
+ Instance
+
+
+ Password
+
+
+ Status
+
+
+ Type
+
+
+ User
+
+
+ Home
+
+
+ Logout
+
+
+ Utilities
+
+
+ Are you sure that you want to logout?
+
+
+ No matching data found.
+
+
+ Querying data. please wait ...
+
+
+ Invalid credentials supplied.
+
+
+ User code must be supplied.
+
+
+ Failed to retrieve Security Console.
+
+
+ Your session has expired.
+
+
+ Unknown session context.
+
+
+ Session has expired.
+
+
+ Utilities
+
+
+ items
+
+
+ of
+
+
+ Page
+
+
+ Utilities
+
\ No newline at end of file
diff --git a/SaOperationsMgrWeb/Resources/Resources.OpnProperties.resx b/SaOperationsMgrWeb/Resources/Resources.OpnProperties.resx
index 4fdb1b6..91d8ff3 100644
--- a/SaOperationsMgrWeb/Resources/Resources.OpnProperties.resx
+++ b/SaOperationsMgrWeb/Resources/Resources.OpnProperties.resx
@@ -1,101 +1,258 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.3
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Sarand LogisticsMgr
+
+
+ Sarand OperationsMgr
+
+
+ Cancel
+
+
+ Close
+
+
+ Login
+
+
+ Logout
+
+
+ Next page
+
+
+ No
+
+
+ OK
+
+
+ Prev page
+
+
+ Refresh
+
+
+ Yes
+
+
+ Code
+
+
+ Status
+
+
+ Utility
+
+
+ Utilities
+
+
+ Login
+
+
+ Logout
+
+
+ NextDataPage
+
+
+ PrevDataPage
+
+
+ Refresh
+
+
+ Login
+
+
+ Code
+
+
+ Company
+
+
+ Instance
+
+
+ Password
+
+
+ Status
+
+
+ Type
+
+
+ User
+
+
+ Home
+
+
+ Logout
+
+
+ Utilities
+
+
+ Are you sure that you want to logout?
+
+
+ No matching data found.
+
+
+ Querying data. please wait ...
+
+
+ Invalid credentials supplied.
+
+
+ User code must be supplied.
+
+
+ Failed to retrieve Security Console.
+
+
+ Your session has expired.
+
+
+ Unknown session context.
+
+
+ Session has expired.
+
+
+ Utilities
+
+
+ items
+
+
+ of
+
+
+ Page
+
+
+ Utilities
+
\ No newline at end of file
diff --git a/SaOperationsMgrWeb/Resources/SaOperationsMgrWeb.Resources.OpnProperties.resx b/SaOperationsMgrWeb/Resources/SaOperationsMgrWeb.Resources.OpnProperties.resx
index 4fdb1b6..64a186f 100644
--- a/SaOperationsMgrWeb/Resources/SaOperationsMgrWeb.Resources.OpnProperties.resx
+++ b/SaOperationsMgrWeb/Resources/SaOperationsMgrWeb.Resources.OpnProperties.resx
@@ -1,101 +1,255 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.3
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Sarand OperationsMgr
+
+
+ Cancel
+
+
+ Close
+
+
+ Login
+
+
+ Logout
+
+
+ Next page
+
+
+ No
+
+
+ OK
+
+
+ Prev page
+
+
+ Refresh
+
+
+ Yes
+
+
+ Code
+
+
+ Status
+
+
+ Utility
+
+
+ Utilities
+
+
+ Login
+
+
+ Logout
+
+
+ NextDataPage
+
+
+ PrevDataPage
+
+
+ Refresh
+
+
+ Login
+
+
+ Code
+
+
+ Company
+
+
+ Instance
+
+
+ Password
+
+
+ Status
+
+
+ Type
+
+
+ User
+
+
+ Home
+
+
+ Logout
+
+
+ Utilities
+
+
+ Are you sure that you want to logout?
+
+
+ No matching data found.
+
+
+ Querying data. please wait ...
+
+
+ Invalid credentials supplied.
+
+
+ User code must be supplied.
+
+
+ Failed to retrieve Security Console.
+
+
+ Your session has expired.
+
+
+ Unknown session context.
+
+
+ Session has expired.
+
+
+ Utilities
+
+
+ items
+
+
+ of
+
+
+ Page
+
+
+ Utilities
+
\ No newline at end of file
diff --git a/SaOperationsMgrWeb/Resources/Sarand.OperationsMgr.Resources.OpnProperties.resx b/SaOperationsMgrWeb/Resources/Sarand.OperationsMgr.Resources.OpnProperties.resx
index 4fdb1b6..64a186f 100644
--- a/SaOperationsMgrWeb/Resources/Sarand.OperationsMgr.Resources.OpnProperties.resx
+++ b/SaOperationsMgrWeb/Resources/Sarand.OperationsMgr.Resources.OpnProperties.resx
@@ -1,101 +1,255 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 1.3
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Sarand OperationsMgr
+
+
+ Cancel
+
+
+ Close
+
+
+ Login
+
+
+ Logout
+
+
+ Next page
+
+
+ No
+
+
+ OK
+
+
+ Prev page
+
+
+ Refresh
+
+
+ Yes
+
+
+ Code
+
+
+ Status
+
+
+ Utility
+
+
+ Utilities
+
+
+ Login
+
+
+ Logout
+
+
+ NextDataPage
+
+
+ PrevDataPage
+
+
+ Refresh
+
+
+ Login
+
+
+ Code
+
+
+ Company
+
+
+ Instance
+
+
+ Password
+
+
+ Status
+
+
+ Type
+
+
+ User
+
+
+ Home
+
+
+ Logout
+
+
+ Utilities
+
+
+ Are you sure that you want to logout?
+
+
+ No matching data found.
+
+
+ Querying data. please wait ...
+
+
+ Invalid credentials supplied.
+
+
+ User code must be supplied.
+
+
+ Failed to retrieve Security Console.
+
+
+ Your session has expired.
+
+
+ Unknown session context.
+
+
+ Session has expired.
+
+
+ Utilities
+
+
+ items
+
+
+ of
+
+
+ Page
+
+
+ Utilities
+
\ No newline at end of file
diff --git a/SaOperationsMgrWeb/SaOperationsMgrWeb.csproj b/SaOperationsMgrWeb/SaOperationsMgrWeb.csproj
index 912f3e0..6c26ab7 100644
--- a/SaOperationsMgrWeb/SaOperationsMgrWeb.csproj
+++ b/SaOperationsMgrWeb/SaOperationsMgrWeb.csproj
@@ -35,4 +35,9 @@
+
+
+ PreserveNewest
+
+
diff --git a/SaOperationsMgrWeb/Views/Shared/OpnLogout.cshtml b/SaOperationsMgrWeb/Views/Shared/OpnLogout.cshtml
new file mode 100644
index 0000000..d4d09e3
--- /dev/null
+++ b/SaOperationsMgrWeb/Views/Shared/OpnLogout.cshtml
@@ -0,0 +1,12 @@
+@model Sarand.OperationsMgr.Web.Models.Model_Base
+@inject Sarand.OperationsMgr.Web.App.OpnLocaliser Localiser
+
+
+
+
+
@Localiser["msg.confirm.logout"]
+
+
\ No newline at end of file
diff --git a/SaOperationsMgrWeb/Views/Shared/OpnMessages.cshtml b/SaOperationsMgrWeb/Views/Shared/OpnMessages.cshtml
new file mode 100644
index 0000000..caf18d0
--- /dev/null
+++ b/SaOperationsMgrWeb/Views/Shared/OpnMessages.cshtml
@@ -0,0 +1,33 @@
+@model Sarand.OperationsMgr.Web.Models.Model_Base
+@if (Model.HasMessages)
+{
+
+ @if (Model.ErrorMessages.Count > 0)
+ {
+
+ @foreach (var message in Model.ErrorMessages)
+ {
+
@message
+ }
+
+ }
+ @if (Model.WarningMessages.Count > 0)
+ {
+
+ @foreach (var message in Model.WarningMessages)
+ {
+
@message
+ }
+
+ }
+ @if (Model.InfoMessages.Count > 0)
+ {
+
+ @foreach (var message in Model.InfoMessages)
+ {
+
@message
+ }
+
+ }
+
+}
diff --git a/SaOperationsMgrWeb/Views/Shared/_Layout.cshtml b/SaOperationsMgrWeb/Views/Shared/_Layout.cshtml
index 6f73098..3393d9f 100644
--- a/SaOperationsMgrWeb/Views/Shared/_Layout.cshtml
+++ b/SaOperationsMgrWeb/Views/Shared/_Layout.cshtml
@@ -1,71 +1,131 @@
+@using Sarand.Core.App
+@model Sarand.OperationsMgr.Web.Models.Model_Base
+@inject Sarand.OperationsMgr.Web.App.OpnLocaliser Localiser
+
-
-
- @ViewData["Title"] - SaOperationsMgrWeb
+
+
+ @* IE11 incompatibility eg. 'border-radius' not recognised. Must be at top of head *@
+
+
+
+
+
+
+ @ViewData["Title"] - Sarand OperationsMgr
+
+ @* Stylesheets *@
+
+
+
+
+
+
+
+
+
+ @foreach (var cssFile in Model.AdditionalFiles_CSS)
+ {
+
+ }
+
+ @* Scripts *@
+
+
+
+
+
+
+
+
+
+
+
+ @* @RenderSection("scripts", required: false) *@
+
+ @foreach (var jsFile in Model.AdditionalFiles_JS)
+ {
+
+ }
+ @if (SacsSystem.DebugMode)
+ {
+ @Html.ApplicationInsightsJavaScript(TelemetryConfiguration)
+ }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ @* --- H e a d e r --- *@
+
+
+ @* --- B o d y --- *@
+
+ @if (Model.ShowMessagesAtTopOfBody)
+ {
+ @await Html.PartialAsync("OpnMessages")
+ }
+ @RenderBody()
+ @await Html.PartialAsync("OpnLogout")
+
+
+ @* --- F o o t e r --- *@
+
+
+
- @RenderSection("Scripts", required: false)
diff --git a/SaOperationsMgrWeb/Views/Utilities/Utilities.cshtml b/SaOperationsMgrWeb/Views/Utilities/Utilities.cshtml
new file mode 100644
index 0000000..5d835c3
--- /dev/null
+++ b/SaOperationsMgrWeb/Views/Utilities/Utilities.cshtml
@@ -0,0 +1,9 @@
+@model Sarand.OperationsMgr.Web.Models.Model_Utilities_Base
+@inject Sarand.OperationsMgr.Web.App.OpnLocaliser Localiser
+@{
+ ViewData["Title"] = Localiser["view.title.utilities"];
+}
+
+
+
+
diff --git a/SaOperationsMgrWeb/Web/App/SaOperationsMgrWebApp.cs b/SaOperationsMgrWeb/Web/App/SaOperationsMgrWebApp.cs
index 92747eb..17a5b5c 100644
--- a/SaOperationsMgrWeb/Web/App/SaOperationsMgrWebApp.cs
+++ b/SaOperationsMgrWeb/Web/App/SaOperationsMgrWebApp.cs
@@ -1,12 +1,14 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Sarand.Core.Base;
+using Sarand.Core.IO;
using Sarand.OperationsMgr.Core.App;
using Sarand.OperationsMgr.Web.Consoles;
using Sarand.OperationsMgr.Win.Dbas.App;
using Sarand.Win.Dbas.Base;
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Threading.Tasks;
@@ -43,6 +45,49 @@ namespace Sarand.OperationsMgr.Web.App
public SaOperationsMgrWebApp (IHostingEnvironment env, IConfigurationSection instanceConfig, String initialLogMessage)
{
app = this;
+ OpnSystem_WinDbas.InitStatics();
+ ContentRootPath = env.ContentRootPath;
+ IsDevelopment = env.IsDevelopment();
+
+ // Locate IIS logs folder.
+ String logsFolder = null;
+ String folder = env.ContentRootPath;
+ DirectoryInfo info = null;
+ while (logsFolder == null && (info = Directory.GetParent(folder)) != null)
+ {
+ folder = info.FullName;
+ logsFolder = folder + Path.DirectorySeparatorChar + "logs" + Path.DirectorySeparatorChar + "LogFiles";
+ if (!Directory.Exists(logsFolder))
+ logsFolder = null;
+ }
+
+ // Configure root logging folder.
+ if (logsFolder != null)
+ {
+ logsFolder = logsFolder + Path.DirectorySeparatorChar + "SaOperationsMgr";
+ if (FileUtil.ValidateDirectory(logsFolder, true))
+ LoggingRootFolder = logsFolder;
+ }
+
+ // Initialise properties.
+ properties = new PropertySet();
+ // ToDo Web app - Logging properties - by user session?
+ properties.AddProperty("Logging", "Folder", LoggingRootFolder);
+ properties.AddProperty("Logging", "Level", "Info");
+ properties.AddProperty("Logging", "ExtendedLogging", "");
+
+ // Configure logging.
+ Logger.LogFilenamePrefix = "SLM-Web";
+ Logger.LogFolder = properties.GetPropertyValue("Logging", "Folder");
+#if DEBUG
+ Logger.ConsoleLevel = SaMessageLevel.Trace;
+#endif
+ Logger.LogFileLevel = EnumUtil.StartsWith(properties.GetPropertyValue("Logging", "Level"), SaMessageLevel.Info);
+ Logger.Info(initialLogMessage, true);
+ Logger.Info("Logging level: " + Logger.LogFileLevel);
+
+ // Initialise global objects.
+ InitGlobals(instanceConfig);
}
public void Dispose ()
{
diff --git a/SaOperationsMgrWeb/Web/Controllers/UtilitiesController-Utilities.cs b/SaOperationsMgrWeb/Web/Controllers/UtilitiesController-Utilities.cs
new file mode 100644
index 0000000..370453d
--- /dev/null
+++ b/SaOperationsMgrWeb/Web/Controllers/UtilitiesController-Utilities.cs
@@ -0,0 +1,65 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using Sarand.Core.Base;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Sarand.OperationsMgr.Web.Controllers
+{
+ //=======================================================================
+ // U t i l i t i e s C o n t r o l l e r
+ //-----------------------------------------------------------------------
+ // A s s e t s
+ //=======================================================================
+ partial class UtilitiesController
+ {
+ //-------------------------------------------------------------------
+ // Data members.
+
+ //-------------------------------------------------------------------
+ // Action - Utilities.
+ public IActionResult Utilities (Models.Model_Utilities_Utilities model)
+ {
+ Logger.Debug(GetType().Name + ".Utilities");
+
+ if (!ValidSession)
+ return new RedirectResult(GetRedirectLocation(RedirectLocation.Home_SessionExpired), false);
+
+ ViewData["Title"] = Localiser["view.title.assets.assets"];
+ //ViewData["Message"] = "Containers";
+
+ return View(model);
+ }
+
+ //-------------------------------------------------------------------
+ // A j a x - R e s p o n s e D a t a
+ //-------------------------------------------------------------------
+ /// Summary Utility information
+ public class UtilityInfo
+ {
+ }
+ /// Detailed Utility data
+ public class UtilityData : UtilityInfo
+ {
+ }
+
+ //-------------------------------------------------------------------
+ // A j a x - A s s e t L i s t
+ //-------------------------------------------------------------------
+ public class AjaxResponse_UtilityList : AjaxResponse
+ {
+ public List Utilities { get; set; } = new List();
+ }
+ // Ajax request.
+ [HttpGet, HttpPost]
+ public IActionResult GetUtilityList (Models.Model_Utilities_Utilities model)
+ {
+ throw new NotImplementedException();
+ }
+
+ //-------------------------------------------------------------------
+ }
+ //=======================================================================
+}
diff --git a/SaOperationsMgrWeb/Web/Controllers/UtilitiesController.cs b/SaOperationsMgrWeb/Web/Controllers/UtilitiesController.cs
new file mode 100644
index 0000000..9ddf4fe
--- /dev/null
+++ b/SaOperationsMgrWeb/Web/Controllers/UtilitiesController.cs
@@ -0,0 +1,41 @@
+using Microsoft.AspNetCore.Mvc;
+using Sarand.Core.Base;
+using Sarand.OperationsMgr.Core.App;
+using Sarand.OperationsMgr.Web.App;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Sarand.OperationsMgr.Web.Controllers
+{
+ //=======================================================================
+ // U t i l i t i e s C o n t r o l l e r
+ //=======================================================================
+ public partial class UtilitiesController : Controller_Base
+ {
+ //-------------------------------------------------------------------
+ // Data members.
+
+ //-------------------------------------------------------------------
+ // Construction.
+ public UtilitiesController (OpnLocaliser localiser) : base(localiser)
+ {
+ }
+
+ //-------------------------------------------------------------------
+ // Properties.
+
+ //-------------------------------------------------------------------
+ // Utilities.
+
+ //-------------------------------------------------------------------
+ public IActionResult Error ()
+ {
+ return View();
+ }
+
+ //-------------------------------------------------------------------
+ }
+ //=======================================================================
+}
diff --git a/SaOperationsMgrWeb/Web/Models/Model_Utilities_Base.cs b/SaOperationsMgrWeb/Web/Models/Model_Utilities_Base.cs
new file mode 100644
index 0000000..461902f
--- /dev/null
+++ b/SaOperationsMgrWeb/Web/Models/Model_Utilities_Base.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Sarand.OperationsMgr.Web.Models
+{
+ public class Model_Utilities_Base : Model_Base
+ {
+ //-------------------------------------------------------------------
+ // Data members.
+
+ //-------------------------------------------------------------------
+ // Construction.
+ protected Model_Utilities_Base ()
+ {
+ // Data paging.
+ DataPageNo = 1;
+ DataPageLength = 20;
+ DataItemCount = 0;
+ DataItemTotal = 0;
+ }
+
+ //-------------------------------------------------------------------
+ // Filter properties.
+
+ //-------------------------------------------------------------------
+ // Form properties.
+ }
+}
diff --git a/SaOperationsMgrWeb/Web/Models/Model_Utilities_Utilities.cs b/SaOperationsMgrWeb/Web/Models/Model_Utilities_Utilities.cs
new file mode 100644
index 0000000..f9b2e0b
--- /dev/null
+++ b/SaOperationsMgrWeb/Web/Models/Model_Utilities_Utilities.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace Sarand.OperationsMgr.Web.Models
+{
+ public class Model_Utilities_Utilities : Model_Utilities_Base
+ {
+ //-------------------------------------------------------------------
+ // Data members.
+
+ //-------------------------------------------------------------------
+ // Construction.
+ public Model_Utilities_Utilities ()
+ {
+ // Additional includes.
+ AdditionalFiles_CSS.Add("css/slm-assets-assets.css");
+ AdditionalFiles_JS.Add("js/slm-assets-assets.js");
+ }
+
+ //-------------------------------------------------------------------
+ // Filter properties.
+
+ //-------------------------------------------------------------------
+ // Form properties.
+
+ //-------------------------------------------------------------------
+ }
+}
diff --git a/SaOperationsMgrWeb/appsettings.machine.sarand106.json b/SaOperationsMgrWeb/appsettings.machine.sarand106.json
index aeeadd2..31ccda5 100644
--- a/SaOperationsMgrWeb/appsettings.machine.sarand106.json
+++ b/SaOperationsMgrWeb/appsettings.machine.sarand106.json
@@ -1,4 +1,13 @@
{
+ "SessionContexts": {
+ "TestInstance": {
+ "Instance": "TEST",
+ "Caption": "Test Instance",
+ "StockDatabase": {
+ "Location": "MsSQL:Sarand109\\Sql2014.SaBusinessMgr_Cadix"
+ }
+ }
+ },
"Logging": {
"IncludeScopes": false,
"LogLevel": {
diff --git a/SaOperationsMgrWeb/appsettings.machine.sarand109.json b/SaOperationsMgrWeb/appsettings.machine.sarand109.json
index aeeadd2..857dcf9 100644
--- a/SaOperationsMgrWeb/appsettings.machine.sarand109.json
+++ b/SaOperationsMgrWeb/appsettings.machine.sarand109.json
@@ -1,4 +1,13 @@
{
+ "SessionContexts": {
+ "TestInstance": {
+ "Instance": "TEST",
+ "Caption": "Test Instance",
+ "StockDatabase": {
+ "Location": "MsSQL:Sarand109\\SQL2012EXPRESS.SaBusinessMgr_Cadix"
+ }
+ }
+ },
"Logging": {
"IncludeScopes": false,
"LogLevel": {
diff --git a/SaOperationsMgrWeb/wwwroot/css/jquery-ui.css b/SaOperationsMgrWeb/wwwroot/css/jquery-ui.css
new file mode 100644
index 0000000..c464236
--- /dev/null
+++ b/SaOperationsMgrWeb/wwwroot/css/jquery-ui.css
@@ -0,0 +1,2000 @@
+/*! jQuery UI - v1.12.1 - 2016-09-14
+* http://jqueryui.com
+* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6
+* Copyright jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+ display: none;
+}
+
+.ui-helper-hidden-accessible {
+ border: 0;
+ clip: rect(0 0 0 0);
+ height: 1px;
+ margin: -1px;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ width: 1px;
+}
+
+.ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none;
+}
+
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+ content: "";
+ display: table;
+ border-collapse: collapse;
+}
+
+.ui-helper-clearfix:after {
+ clear: both;
+}
+
+.ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter: Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+ z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+ cursor: default !important;
+ pointer-events: none;
+}
+
+
+/* Icons
+----------------------------------*/
+.ui-icon {
+ display: inline-block;
+ vertical-align: middle;
+ margin-top: -.25em;
+ position: relative;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+}
+
+.ui-widget-icon-block {
+ left: 50%;
+ margin-left: -8px;
+ display: block;
+}
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+.ui-accordion .ui-accordion-header {
+ display: block;
+ cursor: pointer;
+ position: relative;
+ margin: 2px 0 0 0;
+ padding: .5em .5em .5em .7em;
+ font-size: 100%;
+}
+
+.ui-accordion .ui-accordion-content {
+ padding: 1em 2.2em;
+ border-top: 0;
+ overflow: auto;
+}
+
+.ui-autocomplete {
+ position: absolute;
+ top: 0;
+ left: 0;
+ cursor: default;
+}
+
+.ui-menu {
+ list-style: none;
+ padding: 0;
+ margin: 0;
+ display: block;
+ outline: 0;
+}
+
+ .ui-menu .ui-menu {
+ position: absolute;
+ }
+
+ .ui-menu .ui-menu-item {
+ margin: 0;
+ cursor: pointer;
+ /* support: IE10, see #8844 */
+ list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+ }
+
+ .ui-menu .ui-menu-item-wrapper {
+ position: relative;
+ padding: 3px 1em 3px .4em;
+ }
+
+ .ui-menu .ui-menu-divider {
+ margin: 5px 0;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ border-width: 1px 0 0 0;
+ }
+
+ .ui-menu .ui-state-focus,
+ .ui-menu .ui-state-active {
+ margin: -1px;
+ }
+
+/* icon support */
+.ui-menu-icons {
+ position: relative;
+}
+
+ .ui-menu-icons .ui-menu-item-wrapper {
+ padding-left: 2em;
+ }
+
+/* left-aligned */
+.ui-menu .ui-icon {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: .2em;
+ margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+ left: auto;
+ right: 0;
+}
+
+.ui-button {
+ padding: .4em 1em;
+ display: inline-block;
+ position: relative;
+ line-height: normal;
+ margin-right: .1em;
+ cursor: pointer;
+ vertical-align: middle;
+ text-align: center;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ /* Support: IE <= 11 */
+ overflow: visible;
+}
+
+ .ui-button,
+ .ui-button:link,
+ .ui-button:visited,
+ .ui-button:hover,
+ .ui-button:active {
+ text-decoration: none;
+ }
+
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+ width: 2em;
+ box-sizing: border-box;
+ text-indent: -9999px;
+ white-space: nowrap;
+}
+
+/* no icon support for input elements */
+input.ui-button.ui-button-icon-only {
+ text-indent: 0;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin-top: -8px;
+ margin-left: -8px;
+}
+
+.ui-button.ui-icon-notext .ui-icon {
+ padding: 0;
+ width: 2.1em;
+ height: 2.1em;
+ text-indent: -9999px;
+ white-space: nowrap;
+}
+
+input.ui-button.ui-icon-notext .ui-icon {
+ width: auto;
+ height: auto;
+ text-indent: 0;
+ white-space: normal;
+ padding: .4em 1em;
+}
+
+/* workarounds */
+/* Support: Firefox 5 - 40 */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+.ui-controlgroup {
+ vertical-align: middle;
+ display: inline-block;
+}
+
+ .ui-controlgroup > .ui-controlgroup-item {
+ float: left;
+ margin-left: 0;
+ margin-right: 0;
+ }
+
+ .ui-controlgroup > .ui-controlgroup-item:focus,
+ .ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
+ z-index: 9999;
+ }
+
+.ui-controlgroup-vertical > .ui-controlgroup-item {
+ display: block;
+ float: none;
+ width: 100%;
+ margin-top: 0;
+ margin-bottom: 0;
+ text-align: left;
+}
+
+.ui-controlgroup-vertical .ui-controlgroup-item {
+ box-sizing: border-box;
+}
+
+.ui-controlgroup .ui-controlgroup-label {
+ padding: .4em 1em;
+}
+
+ .ui-controlgroup .ui-controlgroup-label span {
+ font-size: 80%;
+ }
+
+.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
+ border-left: none;
+}
+
+.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
+ border-top: none;
+}
+
+.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
+ border-right: none;
+}
+
+.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
+ border-bottom: none;
+}
+
+/* Spinner specific style fixes */
+.ui-controlgroup-vertical .ui-spinner-input {
+ /* Support: IE8 only, Android < 4.4 only */
+ width: 75%;
+ width: calc( 100% - 2.4em );
+}
+
+.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
+ border-top-style: solid;
+}
+
+.ui-checkboxradio-label .ui-icon-background {
+ box-shadow: inset 1px 1px 1px #ccc;
+ border-radius: .12em;
+ border: none;
+}
+
+.ui-checkboxradio-radio-label .ui-icon-background {
+ width: 16px;
+ height: 16px;
+ border-radius: 1em;
+ overflow: visible;
+ border: none;
+}
+
+.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
+.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
+ background-image: none;
+ width: 8px;
+ height: 8px;
+ border-width: 4px;
+ border-style: solid;
+}
+
+.ui-checkboxradio-disabled {
+ pointer-events: none;
+}
+
+.ui-datepicker {
+ width: 17em;
+ padding: .2em .2em 0;
+ display: none;
+}
+
+ .ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: .2em 0;
+ }
+
+ .ui-datepicker .ui-datepicker-prev,
+ .ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em;
+ }
+
+ .ui-datepicker .ui-datepicker-prev-hover,
+ .ui-datepicker .ui-datepicker-next-hover {
+ top: 1px;
+ }
+
+ .ui-datepicker .ui-datepicker-prev {
+ left: 2px;
+ }
+
+ .ui-datepicker .ui-datepicker-next {
+ right: 2px;
+ }
+
+ .ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px;
+ }
+
+ .ui-datepicker .ui-datepicker-next-hover {
+ right: 1px;
+ }
+
+ .ui-datepicker .ui-datepicker-prev span,
+ .ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px;
+ }
+
+ .ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center;
+ }
+
+ .ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0;
+ }
+
+ .ui-datepicker select.ui-datepicker-month,
+ .ui-datepicker select.ui-datepicker-year {
+ width: 45%;
+ }
+
+ .ui-datepicker table {
+ width: 100%;
+ font-size: .9em;
+ border-collapse: collapse;
+ margin: 0 0 .4em;
+ }
+
+ .ui-datepicker th {
+ padding: .7em .3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0;
+ }
+
+ .ui-datepicker td {
+ border: 0;
+ padding: 1px;
+ }
+
+ .ui-datepicker td span,
+ .ui-datepicker td a {
+ display: block;
+ padding: .2em;
+ text-align: right;
+ text-decoration: none;
+ }
+
+ .ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: .7em 0 0 0;
+ padding: 0 .2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0;
+ }
+
+ .ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: .5em .2em .4em;
+ cursor: pointer;
+ padding: .2em .6em .3em .6em;
+ width: auto;
+ overflow: visible;
+ }
+
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left;
+ }
+
+ /* with multiple calendars */
+ .ui-datepicker.ui-datepicker-multi {
+ width: auto;
+ }
+
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+
+ .ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto .4em;
+ }
+
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0;
+}
+
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
+
+.ui-datepicker-row-break {
+ clear: both;
+ width: 100%;
+ font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+ direction: rtl;
+}
+
+ .ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto;
+ }
+
+ .ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto;
+ }
+
+ .ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto;
+ }
+
+ .ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto;
+ }
+
+ .ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right;
+ }
+
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left;
+ }
+
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+ .ui-datepicker-rtl .ui-datepicker-group {
+ float: right;
+ }
+
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+ .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px;
+ }
+
+/* Icons */
+.ui-datepicker .ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat;
+ left: .5em;
+ top: .3em;
+}
+
+.ui-dialog {
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: .2em;
+ outline: 0;
+}
+
+ .ui-dialog .ui-dialog-titlebar {
+ padding: .4em 1em;
+ position: relative;
+ }
+
+ .ui-dialog .ui-dialog-title {
+ float: left;
+ margin: .1em 0;
+ white-space: nowrap;
+ width: 90%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ .ui-dialog .ui-dialog-titlebar-close {
+ position: absolute;
+ right: .3em;
+ top: 50%;
+ width: 20px;
+ margin: -10px 0 0 0;
+ padding: 1px;
+ height: 20px;
+ }
+
+ .ui-dialog .ui-dialog-content {
+ position: relative;
+ border: 0;
+ padding: .5em 1em;
+ background: none;
+ overflow: auto;
+ }
+
+ .ui-dialog .ui-dialog-buttonpane {
+ text-align: left;
+ border-width: 1px 0 0 0;
+ background-image: none;
+ margin-top: .5em;
+ padding: .3em 1em .5em .4em;
+ }
+
+ .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+ float: right;
+ }
+
+ .ui-dialog .ui-dialog-buttonpane button {
+ margin: .5em .4em .5em 0;
+ cursor: pointer;
+ }
+
+ .ui-dialog .ui-resizable-n {
+ height: 2px;
+ top: 0;
+ }
+
+ .ui-dialog .ui-resizable-e {
+ width: 2px;
+ right: 0;
+ }
+
+ .ui-dialog .ui-resizable-s {
+ height: 2px;
+ bottom: 0;
+ }
+
+ .ui-dialog .ui-resizable-w {
+ width: 2px;
+ left: 0;
+ }
+
+ .ui-dialog .ui-resizable-se,
+ .ui-dialog .ui-resizable-sw,
+ .ui-dialog .ui-resizable-ne,
+ .ui-dialog .ui-resizable-nw {
+ width: 7px;
+ height: 7px;
+ }
+
+ .ui-dialog .ui-resizable-se {
+ right: 0;
+ bottom: 0;
+ }
+
+ .ui-dialog .ui-resizable-sw {
+ left: 0;
+ bottom: 0;
+ }
+
+ .ui-dialog .ui-resizable-ne {
+ right: 0;
+ top: 0;
+ }
+
+ .ui-dialog .ui-resizable-nw {
+ left: 0;
+ top: 0;
+ }
+
+.ui-draggable .ui-dialog-titlebar {
+ cursor: move;
+}
+
+.ui-draggable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-resizable {
+ position: relative;
+}
+
+.ui-resizable-handle {
+ position: absolute;
+ font-size: 0.1px;
+ display: block;
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+ display: none;
+}
+
+.ui-resizable-n {
+ cursor: n-resize;
+ height: 7px;
+ width: 100%;
+ top: -5px;
+ left: 0;
+}
+
+.ui-resizable-s {
+ cursor: s-resize;
+ height: 7px;
+ width: 100%;
+ bottom: -5px;
+ left: 0;
+}
+
+.ui-resizable-e {
+ cursor: e-resize;
+ width: 7px;
+ right: -5px;
+ top: 0;
+ height: 100%;
+}
+
+.ui-resizable-w {
+ cursor: w-resize;
+ width: 7px;
+ left: -5px;
+ top: 0;
+ height: 100%;
+}
+
+.ui-resizable-se {
+ cursor: se-resize;
+ width: 12px;
+ height: 12px;
+ right: 1px;
+ bottom: 1px;
+}
+
+.ui-resizable-sw {
+ cursor: sw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ bottom: -5px;
+}
+
+.ui-resizable-nw {
+ cursor: nw-resize;
+ width: 9px;
+ height: 9px;
+ left: -5px;
+ top: -5px;
+}
+
+.ui-resizable-ne {
+ cursor: ne-resize;
+ width: 9px;
+ height: 9px;
+ right: -5px;
+ top: -5px;
+}
+
+.ui-progressbar {
+ height: 2em;
+ text-align: left;
+ overflow: hidden;
+}
+
+ .ui-progressbar .ui-progressbar-value {
+ margin: -1px;
+ height: 100%;
+ }
+
+ .ui-progressbar .ui-progressbar-overlay {
+ background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+ height: 100%;
+ filter: alpha(opacity=25); /* support: IE8 */
+ opacity: 0.25;
+ }
+
+.ui-progressbar-indeterminate .ui-progressbar-value {
+ background-image: none;
+}
+
+.ui-selectable {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-selectable-helper {
+ position: absolute;
+ z-index: 100;
+ border: 1px dotted black;
+}
+
+.ui-selectmenu-menu {
+ padding: 0;
+ margin: 0;
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: none;
+}
+
+ .ui-selectmenu-menu .ui-menu {
+ overflow: auto;
+ overflow-x: hidden;
+ padding-bottom: 1px;
+ }
+
+ .ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 1.5;
+ padding: 2px 0.4em;
+ margin: 0.5em 0 0 0;
+ height: auto;
+ border: 0;
+ }
+
+.ui-selectmenu-open {
+ display: block;
+}
+
+.ui-selectmenu-text {
+ display: block;
+ margin-right: 20px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.ui-selectmenu-button.ui-button {
+ text-align: left;
+ white-space: nowrap;
+ width: 14em;
+}
+
+.ui-selectmenu-icon.ui-icon {
+ float: right;
+ margin-top: 0;
+}
+
+.ui-slider {
+ position: relative;
+ text-align: left;
+}
+
+ .ui-slider .ui-slider-handle {
+ position: absolute;
+ z-index: 2;
+ width: 1.2em;
+ height: 1.2em;
+ cursor: default;
+ -ms-touch-action: none;
+ touch-action: none;
+ }
+
+ .ui-slider .ui-slider-range {
+ position: absolute;
+ z-index: 1;
+ font-size: .7em;
+ display: block;
+ border: 0;
+ background-position: 0 0;
+ }
+
+ /* support: IE8 - See #6727 */
+ .ui-slider.ui-state-disabled .ui-slider-handle,
+ .ui-slider.ui-state-disabled .ui-slider-range {
+ filter: inherit;
+ }
+
+.ui-slider-horizontal {
+ height: .8em;
+}
+
+ .ui-slider-horizontal .ui-slider-handle {
+ top: -.3em;
+ margin-left: -.6em;
+ }
+
+ .ui-slider-horizontal .ui-slider-range {
+ top: 0;
+ height: 100%;
+ }
+
+ .ui-slider-horizontal .ui-slider-range-min {
+ left: 0;
+ }
+
+ .ui-slider-horizontal .ui-slider-range-max {
+ right: 0;
+ }
+
+.ui-slider-vertical {
+ width: .8em;
+ height: 100px;
+}
+
+ .ui-slider-vertical .ui-slider-handle {
+ left: -.3em;
+ margin-left: 0;
+ margin-bottom: -.6em;
+ }
+
+ .ui-slider-vertical .ui-slider-range {
+ left: 0;
+ width: 100%;
+ }
+
+ .ui-slider-vertical .ui-slider-range-min {
+ bottom: 0;
+ }
+
+ .ui-slider-vertical .ui-slider-range-max {
+ top: 0;
+ }
+
+.ui-sortable-handle {
+ -ms-touch-action: none;
+ touch-action: none;
+}
+
+.ui-spinner {
+ position: relative;
+ display: inline-block;
+ overflow: hidden;
+ padding: 0;
+ vertical-align: middle;
+}
+
+.ui-spinner-input {
+ border: none;
+ background: none;
+ color: inherit;
+ padding: .222em 0;
+ margin: .2em 0;
+ vertical-align: middle;
+ margin-left: .4em;
+ margin-right: 2em;
+}
+
+.ui-spinner-button {
+ width: 1.6em;
+ height: 50%;
+ font-size: .5em;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+ position: absolute;
+ cursor: default;
+ display: block;
+ overflow: hidden;
+ right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+ border-top-style: none;
+ border-bottom-style: none;
+ border-right-style: none;
+}
+
+.ui-spinner-up {
+ top: 0;
+}
+
+.ui-spinner-down {
+ bottom: 0;
+}
+
+.ui-tabs {
+ position: relative; /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+ padding: .2em;
+}
+
+ .ui-tabs .ui-tabs-nav {
+ margin: 0;
+ padding: .2em .2em 0;
+ }
+
+ .ui-tabs .ui-tabs-nav li {
+ list-style: none;
+ float: left;
+ position: relative;
+ top: 0;
+ margin: 1px .2em 0 0;
+ border-bottom-width: 0;
+ padding: 0;
+ white-space: nowrap;
+ }
+
+ .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+ float: left;
+ padding: .5em 1em;
+ text-decoration: none;
+ }
+
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active {
+ margin-bottom: -1px;
+ padding-bottom: 1px;
+ }
+
+ .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+ .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+ .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+ cursor: text;
+ }
+
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+ cursor: pointer;
+}
+
+.ui-tabs .ui-tabs-panel {
+ display: block;
+ border-width: 0;
+ padding: 1em 1.4em;
+ background: none;
+}
+
+.ui-tooltip {
+ padding: 8px;
+ position: absolute;
+ z-index: 9999;
+ max-width: 300px;
+}
+
+body .ui-tooltip {
+ border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+ font-family: Arial,Helvetica,sans-serif;
+ font-size: 1em;
+}
+
+ .ui-widget .ui-widget {
+ font-size: 1em;
+ }
+
+ .ui-widget input,
+ .ui-widget select,
+ .ui-widget textarea,
+ .ui-widget button {
+ font-family: Arial,Helvetica,sans-serif;
+ font-size: 1em;
+ }
+
+ .ui-widget.ui-widget-content {
+ border: 1px solid #c5c5c5;
+ }
+
+.ui-widget-content {
+ border: 1px solid #dddddd;
+ background: #ffffff;
+ color: #333333;
+}
+
+ .ui-widget-content a {
+ color: #333333;
+ }
+
+.ui-widget-header {
+ border: 1px solid #dddddd;
+ background: #e9e9e9;
+ color: #333333;
+ font-weight: bold;
+}
+
+ .ui-widget-header a {
+ color: #333333;
+ }
+
+ /* Interaction states
+----------------------------------*/
+ .ui-state-default,
+ .ui-widget-content .ui-state-default,
+ .ui-widget-header .ui-state-default,
+ .ui-button,
+ /* We use html here because we need a greater specificity to make sure disabled
+works properly when clicked or hovered */
+ html .ui-button.ui-state-disabled:hover,
+ html .ui-button.ui-state-disabled:active {
+ border: 1px solid #c5c5c5;
+ background: #f6f6f6;
+ font-weight: normal;
+ color: #454545;
+ }
+
+ .ui-state-default a,
+ .ui-state-default a:link,
+ .ui-state-default a:visited,
+ a.ui-button,
+ a:link.ui-button,
+ a:visited.ui-button,
+ .ui-button {
+ color: #454545;
+ text-decoration: none;
+ }
+
+ .ui-state-hover,
+ .ui-widget-content .ui-state-hover,
+ .ui-widget-header .ui-state-hover,
+ .ui-state-focus,
+ .ui-widget-content .ui-state-focus,
+ .ui-widget-header .ui-state-focus,
+ .ui-button:hover,
+ .ui-button:focus {
+ border: 1px solid #cccccc;
+ background: #ededed;
+ font-weight: normal;
+ color: #2b2b2b;
+ }
+
+ .ui-state-hover a,
+ .ui-state-hover a:hover,
+ .ui-state-hover a:link,
+ .ui-state-hover a:visited,
+ .ui-state-focus a,
+ .ui-state-focus a:hover,
+ .ui-state-focus a:link,
+ .ui-state-focus a:visited,
+ a.ui-button:hover,
+ a.ui-button:focus {
+ color: #2b2b2b;
+ text-decoration: none;
+ }
+
+.ui-visual-focus {
+ box-shadow: 0 0 3px 1px rgb(94, 158, 214);
+}
+
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active,
+a.ui-button:active,
+.ui-button:active,
+.ui-button.ui-state-active:hover {
+ border: 1px solid #003eff;
+ background: #007fff;
+ font-weight: normal;
+ color: #ffffff;
+}
+
+ .ui-icon-background,
+ .ui-state-active .ui-icon-background {
+ border: #003eff;
+ background-color: #ffffff;
+ }
+
+ .ui-state-active a,
+ .ui-state-active a:link,
+ .ui-state-active a:visited {
+ color: #ffffff;
+ text-decoration: none;
+ }
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+ border: 1px solid #dad55e;
+ background: #fffa90;
+ color: #777620;
+}
+
+.ui-state-checked {
+ border: 1px solid #dad55e;
+ background: #fffa90;
+}
+
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+ color: #777620;
+}
+
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+ border: 1px solid #f1a899;
+ background: #fddfdf;
+ color: #5f3f3f;
+}
+
+ .ui-state-error a,
+ .ui-widget-content .ui-state-error a,
+ .ui-widget-header .ui-state-error a {
+ color: #5f3f3f;
+ }
+
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+ color: #5f3f3f;
+}
+
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+ font-weight: bold;
+}
+
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+ opacity: .7;
+ filter: Alpha(Opacity=70); /* support: IE8 */
+ font-weight: normal;
+}
+
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+ opacity: .35;
+ filter: Alpha(Opacity=35); /* support: IE8 */
+ background-image: none;
+}
+
+ .ui-state-disabled .ui-icon {
+ filter: Alpha(Opacity=35); /* support: IE8 - See #6059 */
+ }
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+ width: 16px;
+ height: 16px;
+}
+
+.ui-icon,
+.ui-widget-content .ui-icon {
+ background-image: url("images/ui-icons_444444_256x240.png");
+}
+
+.ui-widget-header .ui-icon {
+ background-image: url("images/ui-icons_444444_256x240.png");
+}
+
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon,
+.ui-button:hover .ui-icon,
+.ui-button:focus .ui-icon {
+ background-image: url("images/ui-icons_555555_256x240.png");
+}
+
+.ui-state-active .ui-icon,
+.ui-button:active .ui-icon {
+ background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+
+.ui-state-highlight .ui-icon,
+.ui-button .ui-state-highlight.ui-icon {
+ background-image: url("images/ui-icons_777620_256x240.png");
+}
+
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+ background-image: url("images/ui-icons_cc0000_256x240.png");
+}
+
+.ui-button .ui-icon {
+ background-image: url("images/ui-icons_777777_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank {
+ background-position: 16px 16px;
+}
+
+.ui-icon-caret-1-n {
+ background-position: 0 0;
+}
+
+.ui-icon-caret-1-ne {
+ background-position: -16px 0;
+}
+
+.ui-icon-caret-1-e {
+ background-position: -32px 0;
+}
+
+.ui-icon-caret-1-se {
+ background-position: -48px 0;
+}
+
+.ui-icon-caret-1-s {
+ background-position: -65px 0;
+}
+
+.ui-icon-caret-1-sw {
+ background-position: -80px 0;
+}
+
+.ui-icon-caret-1-w {
+ background-position: -96px 0;
+}
+
+.ui-icon-caret-1-nw {
+ background-position: -112px 0;
+}
+
+.ui-icon-caret-2-n-s {
+ background-position: -128px 0;
+}
+
+.ui-icon-caret-2-e-w {
+ background-position: -144px 0;
+}
+
+.ui-icon-triangle-1-n {
+ background-position: 0 -16px;
+}
+
+.ui-icon-triangle-1-ne {
+ background-position: -16px -16px;
+}
+
+.ui-icon-triangle-1-e {
+ background-position: -32px -16px;
+}
+
+.ui-icon-triangle-1-se {
+ background-position: -48px -16px;
+}
+
+.ui-icon-triangle-1-s {
+ background-position: -65px -16px;
+}
+
+.ui-icon-triangle-1-sw {
+ background-position: -80px -16px;
+}
+
+.ui-icon-triangle-1-w {
+ background-position: -96px -16px;
+}
+
+.ui-icon-triangle-1-nw {
+ background-position: -112px -16px;
+}
+
+.ui-icon-triangle-2-n-s {
+ background-position: -128px -16px;
+}
+
+.ui-icon-triangle-2-e-w {
+ background-position: -144px -16px;
+}
+
+.ui-icon-arrow-1-n {
+ background-position: 0 -32px;
+}
+
+.ui-icon-arrow-1-ne {
+ background-position: -16px -32px;
+}
+
+.ui-icon-arrow-1-e {
+ background-position: -32px -32px;
+}
+
+.ui-icon-arrow-1-se {
+ background-position: -48px -32px;
+}
+
+.ui-icon-arrow-1-s {
+ background-position: -65px -32px;
+}
+
+.ui-icon-arrow-1-sw {
+ background-position: -80px -32px;
+}
+
+.ui-icon-arrow-1-w {
+ background-position: -96px -32px;
+}
+
+.ui-icon-arrow-1-nw {
+ background-position: -112px -32px;
+}
+
+.ui-icon-arrow-2-n-s {
+ background-position: -128px -32px;
+}
+
+.ui-icon-arrow-2-ne-sw {
+ background-position: -144px -32px;
+}
+
+.ui-icon-arrow-2-e-w {
+ background-position: -160px -32px;
+}
+
+.ui-icon-arrow-2-se-nw {
+ background-position: -176px -32px;
+}
+
+.ui-icon-arrowstop-1-n {
+ background-position: -192px -32px;
+}
+
+.ui-icon-arrowstop-1-e {
+ background-position: -208px -32px;
+}
+
+.ui-icon-arrowstop-1-s {
+ background-position: -224px -32px;
+}
+
+.ui-icon-arrowstop-1-w {
+ background-position: -240px -32px;
+}
+
+.ui-icon-arrowthick-1-n {
+ background-position: 1px -48px;
+}
+
+.ui-icon-arrowthick-1-ne {
+ background-position: -16px -48px;
+}
+
+.ui-icon-arrowthick-1-e {
+ background-position: -32px -48px;
+}
+
+.ui-icon-arrowthick-1-se {
+ background-position: -48px -48px;
+}
+
+.ui-icon-arrowthick-1-s {
+ background-position: -64px -48px;
+}
+
+.ui-icon-arrowthick-1-sw {
+ background-position: -80px -48px;
+}
+
+.ui-icon-arrowthick-1-w {
+ background-position: -96px -48px;
+}
+
+.ui-icon-arrowthick-1-nw {
+ background-position: -112px -48px;
+}
+
+.ui-icon-arrowthick-2-n-s {
+ background-position: -128px -48px;
+}
+
+.ui-icon-arrowthick-2-ne-sw {
+ background-position: -144px -48px;
+}
+
+.ui-icon-arrowthick-2-e-w {
+ background-position: -160px -48px;
+}
+
+.ui-icon-arrowthick-2-se-nw {
+ background-position: -176px -48px;
+}
+
+.ui-icon-arrowthickstop-1-n {
+ background-position: -192px -48px;
+}
+
+.ui-icon-arrowthickstop-1-e {
+ background-position: -208px -48px;
+}
+
+.ui-icon-arrowthickstop-1-s {
+ background-position: -224px -48px;
+}
+
+.ui-icon-arrowthickstop-1-w {
+ background-position: -240px -48px;
+}
+
+.ui-icon-arrowreturnthick-1-w {
+ background-position: 0 -64px;
+}
+
+.ui-icon-arrowreturnthick-1-n {
+ background-position: -16px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-e {
+ background-position: -32px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-s {
+ background-position: -48px -64px;
+}
+
+.ui-icon-arrowreturn-1-w {
+ background-position: -64px -64px;
+}
+
+.ui-icon-arrowreturn-1-n {
+ background-position: -80px -64px;
+}
+
+.ui-icon-arrowreturn-1-e {
+ background-position: -96px -64px;
+}
+
+.ui-icon-arrowreturn-1-s {
+ background-position: -112px -64px;
+}
+
+.ui-icon-arrowrefresh-1-w {
+ background-position: -128px -64px;
+}
+
+.ui-icon-arrowrefresh-1-n {
+ background-position: -144px -64px;
+}
+
+.ui-icon-arrowrefresh-1-e {
+ background-position: -160px -64px;
+}
+
+.ui-icon-arrowrefresh-1-s {
+ background-position: -176px -64px;
+}
+
+.ui-icon-arrow-4 {
+ background-position: 0 -80px;
+}
+
+.ui-icon-arrow-4-diag {
+ background-position: -16px -80px;
+}
+
+.ui-icon-extlink {
+ background-position: -32px -80px;
+}
+
+.ui-icon-newwin {
+ background-position: -48px -80px;
+}
+
+.ui-icon-refresh {
+ background-position: -64px -80px;
+}
+
+.ui-icon-shuffle {
+ background-position: -80px -80px;
+}
+
+.ui-icon-transfer-e-w {
+ background-position: -96px -80px;
+}
+
+.ui-icon-transferthick-e-w {
+ background-position: -112px -80px;
+}
+
+.ui-icon-folder-collapsed {
+ background-position: 0 -96px;
+}
+
+.ui-icon-folder-open {
+ background-position: -16px -96px;
+}
+
+.ui-icon-document {
+ background-position: -32px -96px;
+}
+
+.ui-icon-document-b {
+ background-position: -48px -96px;
+}
+
+.ui-icon-note {
+ background-position: -64px -96px;
+}
+
+.ui-icon-mail-closed {
+ background-position: -80px -96px;
+}
+
+.ui-icon-mail-open {
+ background-position: -96px -96px;
+}
+
+.ui-icon-suitcase {
+ background-position: -112px -96px;
+}
+
+.ui-icon-comment {
+ background-position: -128px -96px;
+}
+
+.ui-icon-person {
+ background-position: -144px -96px;
+}
+
+.ui-icon-print {
+ background-position: -160px -96px;
+}
+
+.ui-icon-trash {
+ background-position: -176px -96px;
+}
+
+.ui-icon-locked {
+ background-position: -192px -96px;
+}
+
+.ui-icon-unlocked {
+ background-position: -208px -96px;
+}
+
+.ui-icon-bookmark {
+ background-position: -224px -96px;
+}
+
+.ui-icon-tag {
+ background-position: -240px -96px;
+}
+
+.ui-icon-home {
+ background-position: 0 -112px;
+}
+
+.ui-icon-flag {
+ background-position: -16px -112px;
+}
+
+.ui-icon-calendar {
+ background-position: -32px -112px;
+}
+
+.ui-icon-cart {
+ background-position: -48px -112px;
+}
+
+.ui-icon-pencil {
+ background-position: -64px -112px;
+}
+
+.ui-icon-clock {
+ background-position: -80px -112px;
+}
+
+.ui-icon-disk {
+ background-position: -96px -112px;
+}
+
+.ui-icon-calculator {
+ background-position: -112px -112px;
+}
+
+.ui-icon-zoomin {
+ background-position: -128px -112px;
+}
+
+.ui-icon-zoomout {
+ background-position: -144px -112px;
+}
+
+.ui-icon-search {
+ background-position: -160px -112px;
+}
+
+.ui-icon-wrench {
+ background-position: -176px -112px;
+}
+
+.ui-icon-gear {
+ background-position: -192px -112px;
+}
+
+.ui-icon-heart {
+ background-position: -208px -112px;
+}
+
+.ui-icon-star {
+ background-position: -224px -112px;
+}
+
+.ui-icon-link {
+ background-position: -240px -112px;
+}
+
+.ui-icon-cancel {
+ background-position: 0 -128px;
+}
+
+.ui-icon-plus {
+ background-position: -16px -128px;
+}
+
+.ui-icon-plusthick {
+ background-position: -32px -128px;
+}
+
+.ui-icon-minus {
+ background-position: -48px -128px;
+}
+
+.ui-icon-minusthick {
+ background-position: -64px -128px;
+}
+
+.ui-icon-close {
+ background-position: -80px -128px;
+}
+
+.ui-icon-closethick {
+ background-position: -96px -128px;
+}
+
+.ui-icon-key {
+ background-position: -112px -128px;
+}
+
+.ui-icon-lightbulb {
+ background-position: -128px -128px;
+}
+
+.ui-icon-scissors {
+ background-position: -144px -128px;
+}
+
+.ui-icon-clipboard {
+ background-position: -160px -128px;
+}
+
+.ui-icon-copy {
+ background-position: -176px -128px;
+}
+
+.ui-icon-contact {
+ background-position: -192px -128px;
+}
+
+.ui-icon-image {
+ background-position: -208px -128px;
+}
+
+.ui-icon-video {
+ background-position: -224px -128px;
+}
+
+.ui-icon-script {
+ background-position: -240px -128px;
+}
+
+.ui-icon-alert {
+ background-position: 0 -144px;
+}
+
+.ui-icon-info {
+ background-position: -16px -144px;
+}
+
+.ui-icon-notice {
+ background-position: -32px -144px;
+}
+
+.ui-icon-help {
+ background-position: -48px -144px;
+}
+
+.ui-icon-check {
+ background-position: -64px -144px;
+}
+
+.ui-icon-bullet {
+ background-position: -80px -144px;
+}
+
+.ui-icon-radio-on {
+ background-position: -96px -144px;
+}
+
+.ui-icon-radio-off {
+ background-position: -112px -144px;
+}
+
+.ui-icon-pin-w {
+ background-position: -128px -144px;
+}
+
+.ui-icon-pin-s {
+ background-position: -144px -144px;
+}
+
+.ui-icon-play {
+ background-position: 0 -160px;
+}
+
+.ui-icon-pause {
+ background-position: -16px -160px;
+}
+
+.ui-icon-seek-next {
+ background-position: -32px -160px;
+}
+
+.ui-icon-seek-prev {
+ background-position: -48px -160px;
+}
+
+.ui-icon-seek-end {
+ background-position: -64px -160px;
+}
+
+.ui-icon-seek-start {
+ background-position: -80px -160px;
+}
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first {
+ background-position: -80px -160px;
+}
+
+.ui-icon-stop {
+ background-position: -96px -160px;
+}
+
+.ui-icon-eject {
+ background-position: -112px -160px;
+}
+
+.ui-icon-volume-off {
+ background-position: -128px -160px;
+}
+
+.ui-icon-volume-on {
+ background-position: -144px -160px;
+}
+
+.ui-icon-power {
+ background-position: 0 -176px;
+}
+
+.ui-icon-signal-diag {
+ background-position: -16px -176px;
+}
+
+.ui-icon-signal {
+ background-position: -32px -176px;
+}
+
+.ui-icon-battery-0 {
+ background-position: -48px -176px;
+}
+
+.ui-icon-battery-1 {
+ background-position: -64px -176px;
+}
+
+.ui-icon-battery-2 {
+ background-position: -80px -176px;
+}
+
+.ui-icon-battery-3 {
+ background-position: -96px -176px;
+}
+
+.ui-icon-circle-plus {
+ background-position: 0 -192px;
+}
+
+.ui-icon-circle-minus {
+ background-position: -16px -192px;
+}
+
+.ui-icon-circle-close {
+ background-position: -32px -192px;
+}
+
+.ui-icon-circle-triangle-e {
+ background-position: -48px -192px;
+}
+
+.ui-icon-circle-triangle-s {
+ background-position: -64px -192px;
+}
+
+.ui-icon-circle-triangle-w {
+ background-position: -80px -192px;
+}
+
+.ui-icon-circle-triangle-n {
+ background-position: -96px -192px;
+}
+
+.ui-icon-circle-arrow-e {
+ background-position: -112px -192px;
+}
+
+.ui-icon-circle-arrow-s {
+ background-position: -128px -192px;
+}
+
+.ui-icon-circle-arrow-w {
+ background-position: -144px -192px;
+}
+
+.ui-icon-circle-arrow-n {
+ background-position: -160px -192px;
+}
+
+.ui-icon-circle-zoomin {
+ background-position: -176px -192px;
+}
+
+.ui-icon-circle-zoomout {
+ background-position: -192px -192px;
+}
+
+.ui-icon-circle-check {
+ background-position: -208px -192px;
+}
+
+.ui-icon-circlesmall-plus {
+ background-position: 0 -208px;
+}
+
+.ui-icon-circlesmall-minus {
+ background-position: -16px -208px;
+}
+
+.ui-icon-circlesmall-close {
+ background-position: -32px -208px;
+}
+
+.ui-icon-squaresmall-plus {
+ background-position: -48px -208px;
+}
+
+.ui-icon-squaresmall-minus {
+ background-position: -64px -208px;
+}
+
+.ui-icon-squaresmall-close {
+ background-position: -80px -208px;
+}
+
+.ui-icon-grip-dotted-vertical {
+ background-position: 0 -224px;
+}
+
+.ui-icon-grip-dotted-horizontal {
+ background-position: -16px -224px;
+}
+
+.ui-icon-grip-solid-vertical {
+ background-position: -32px -224px;
+}
+
+.ui-icon-grip-solid-horizontal {
+ background-position: -48px -224px;
+}
+
+.ui-icon-gripsmall-diagonal-se {
+ background-position: -64px -224px;
+}
+
+.ui-icon-grip-diagonal-se {
+ background-position: -80px -224px;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+ border-top-left-radius: 3px;
+}
+
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+ border-top-right-radius: 3px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+ border-bottom-left-radius: 3px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+ border-bottom-right-radius: 3px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+ background: #aaaaaa;
+ opacity: .003;
+ filter: Alpha(Opacity=.3); /* support: IE8 */
+}
+
+.ui-widget-shadow {
+ -webkit-box-shadow: 0px 0px 5px #666666;
+ box-shadow: 0px 0px 5px #666666;
+}
diff --git a/SaOperationsMgrWeb/wwwroot/css/opn-core.css b/SaOperationsMgrWeb/wwwroot/css/opn-core.css
new file mode 100644
index 0000000..84d5b0d
--- /dev/null
+++ b/SaOperationsMgrWeb/wwwroot/css/opn-core.css
@@ -0,0 +1,579 @@
+/*
+ Application: Sarand OperationsMgr
+ Stylesheet: Core
+*/
+
+@charset "UTF-8";
+
+@media print {
+ * {
+ color: #000000 !important;
+ background-color: #FFFFFF !important;
+ }
+}
+
+body {
+ min-width: 320px;
+ max-width: 1600px;
+ margin: auto;
+ padding: 0px;
+ font-family: Verdana,Arial,Tahoma,"Sans-Serif";
+ font-size: 16px;
+ line-height: 1.42857em;
+ text-indent: 0px;
+ color: #0a0a0a;
+ background-color: #ffffe5;
+ page: rotated;
+ border-width: 0px;
+}
+
+div {
+ font-family: inherit;
+ font-size: inherit;
+}
+
+button, input, textarea, select, option {
+ font-family: inherit;
+ font-size: 1em;
+}
+
+input, textarea, select {
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+}
+
+/* --- Standard tags --- */
+h1, h2, h3 {
+ color: #0000B0;
+}
+
+h1 {
+ font-size: 14px;
+ font-weight: bold;
+ margin: 6px 0px 6px 0px;
+ padding: 0px;
+}
+
+h2 {
+ font-size: 12px;
+ font-weight: bold;
+ margin: 3px 0px 6px 0px;
+ padding: 0px;
+}
+
+h3 {
+ font-size: 11px;
+ font-weight: bold;
+ margin: 3px 0px 6px 0px;
+ padding: 0px;
+}
+
+p {
+ margin: 3px 0px 6px 0px;
+}
+
+hr {
+ height: 4px;
+ width: 90%;
+ text-align: center;
+ color: #000000;
+ margin: 4px auto;
+}
+
+a {
+ font-size: 1em;
+}
+
+img {
+ border-style: none;
+}
+
+ul {
+ margin-top: 3px;
+ margin-bottom: 6px;
+}
+
+table {
+ margin-top: 0px;
+ empty-cells: inherit;
+}
+
+td {
+ vertical-align: top;
+ padding: 0px;
+}
+
+div, form {
+ margin: 0px;
+ padding: 0px;
+}
+
+label {
+ margin: 0px;
+}
+
+input {
+ margin: 0px;
+ padding: 0px 2px 1px 2px;
+}
+
+textarea {
+ resize: none;
+}
+
+.bold, b {
+ font-weight: bold !important;
+}
+
+.ul, u {
+ text-decoration: underline !important;
+}
+
+.italic, i {
+ font-style: italic !important;
+}
+
+.upper {
+ text-transform: uppercase !important;
+}
+
+.lower {
+ text-transform: lowercase !important;
+}
+
+.center {
+ text-align: center !important;
+}
+
+.right {
+ text-align: right !important;
+}
+
+.middle {
+ vertical-align: middle !important;
+}
+
+.bottom {
+ vertical-align: bottom !important;
+}
+
+.pointer {
+ cursor: pointer;
+}
+
+.fullwidth {
+ width: 100%;
+}
+
+.floatl, .floatleft {
+ float: left;
+}
+
+.floatr, .floatright {
+ float: right;
+}
+
+.clearl, .clearleft {
+ clear: left;
+}
+
+.clearr, .clearright {
+ clear: right;
+}
+
+.clearb, .clearboth {
+ clear: both;
+ margin: 0px;
+ padding: 0px;
+ width: 0px;
+ height: 0px;
+ line-height: 0.0em;
+ font-size: 0px;
+}
+
+.clear-after:after {
+ visibility: hidden;
+ display: block;
+ font-size: 0;
+ content: " ";
+ clear: both;
+ height: 0;
+}
+
+.nowrap {
+ white-space: nowrap !important;
+}
+
+.spacer {
+ height: 4px;
+ font-size: 2px;
+}
+
+.spacer2 {
+ height: 8px;
+ font-size: 2px;
+}
+
+.spacer4 {
+ height: 16px;
+ font-size: 2px;
+}
+
+.pl4 {
+ padding-left: 4px;
+}
+
+.pl8 {
+ padding-left: 8px;
+}
+
+.lastTabSeq {
+ z-index: 99;
+}
+
+.hidden {
+ visibility: hidden;
+}
+
+.shadow {
+ -moz-box-shadow: 2px 2px 3px #ccc;
+ -webkit-box-shadow: 2px 2px 3px #ccc;
+ box-shadow: 2px 2px 3px #ccc; /* For IE 8 */
+ -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=3,Direction=135,Color='#cccccc')"; /* For IE 5.5 - 7 */
+ filter: progid:DXImageTransform.Microsoft.Shadow(Strength=3,Direction=135,Color='#cccccc');
+}
+
+/* --- Application --- */
+body {
+ padding-top: 50px !important;
+ padding-bottom: 0 !important; /* 20px */
+}
+
+/* Wrapping element */
+/* Set some basic padding to keep content from hitting the edges */
+.body-content {
+ padding-left: 15px;
+ padding-right: 15px;
+}
+
+/* Set widths on the form inputs since otherwise they're 100% wide */
+input, select, textarea {
+ max-width: 280px;
+}
+
+/* Carousel */
+.carousel-caption p {
+ font-size: 20px;
+ line-height: 1.4;
+}
+/* Make .svg files in the carousel display properly in older browsers */
+.carousel-inner .item img[src$=".svg"] {
+ width: 100%;
+}
+
+/* Hide/rearrange for smaller screens */
+@media screen and (max-width:767px) {
+ /* Hide captions */
+ .carousel-caption {
+ display: none;
+ }
+}
+
+/* --- Bootstrap --- */
+.navbar-inverse .navbar-brand,
+.navbar-inverse .navbar-nav > li > a,
+.mob .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #e0e0e0;
+ font-weight: bold;
+}
+
+.dropdown-menu {
+ font-size: 1em;
+}
+
+/* --- Tooltip --- */
+.tooltip {
+ position: fixed
+}
+
+ .tooltip.in {
+ opacity: 1;
+ }
+
+ .tooltip.top {
+ margin-top: -0px;
+ }
+
+ .tooltip.top .tooltip-arrow {
+ border-top-color: #808080;
+ }
+
+ .tooltip .tooltip-inner {
+ min-width: 320px;
+ max-width: 320px;
+ color: #404040;
+ background-color: #FFFFFF;
+ text-align: left;
+ border: 1px solid #808080;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ -moz-box-shadow: 4px 4px 3px #aaa;
+ -webkit-box-shadow: 4px 4px 3px #aaa;
+ box-shadow: 4px 4px 3px #aaa; /* For IE 8 */
+ -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=3,Direction=135,Color='#aaaaaa')"; /* For IE 5.5 - 7 */
+ filter: progid:DXImageTransform.Microsoft.Shadow(Strength=3,Direction=135,Color='#aaaaaa');
+ }
+
+ .tooltip .tooltip-inner .tooltip-caption {
+ margin-bottom: 4px;
+ font-weight: bold;
+ border-bottom: 1px solid #808080;
+ }
+
+ .tooltip .tooltip-inner .label {
+ padding-right: 6px;
+ color: #808080;
+ }
+
+/* --- Application Messages --- */
+.opn-msg {
+ margin: 4px 0;
+}
+
+ .opn-msg .err, .opn-msg .wrn, .opn-msg .inf {
+ margin: 2px 0;
+ padding: 4px 16px 4px 32px;
+ background-color: #fefefe;
+ border-radius: 4px;
+ }
+
+ .opn-msg .err {
+ color: red;
+ border: 1px solid red;
+ }
+
+ .opn-msg .wrn {
+ color: #ff6000;
+ border: 1px solid darkorange;
+ }
+
+ .opn-msg .inf {
+ color: darkgreen;
+ border: 1px solid green;
+ }
+
+/* --- Notification --- */
+#opn-notification {
+ display: none;
+ position: fixed;
+ bottom: 0;
+ right: 0;
+ min-width: 180px;
+ margin-right: 12px;
+ z-index: 1000;
+ border: 1px solid #808080;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ overflow: hidden;
+}
+
+ #opn-notification .content {
+ background-color: #fbfbfb;
+ }
+
+ #opn-notification .heading {
+ background-color: #f0f0f0;
+ font-weight: bold;
+ border-bottom: 1px solid #808080;
+ }
+
+ #opn-notification .heading:after {
+ content: "";
+ display: table;
+ clear: both;
+ }
+
+ #opn-notification .title {
+ float: left;
+ padding: 4px 8px;
+ white-space: nowrap;
+ }
+
+ #opn-notification .close {
+ float: right;
+ padding: 4px;
+ font-weight: bold;
+ cursor: pointer;
+ }
+
+ #opn-notification .message {
+ clear: both;
+ padding: 8px;
+ }
+
+/* --- Modal Please wait --- */
+#opn-please-wait {
+ display: none;
+ cursor: progress;
+ position: fixed;
+ z-index: 1000;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background: rgba(255,255,255,.0) url('../img/icon/opn-please-wait.gif') 50% 50% no-repeat;
+}
+
+/* --- Dialogs --- */
+div.dialog {
+ display: none;
+}
+
+/* --- Forms --- */
+.opn-form {
+ margin: 12px auto 6px auto;
+ background-color: #f8f8f8;
+ border: 1px solid #808080;
+ border-radius: 4px;
+ -moz-box-shadow: 4px 4px 6px #ccc;
+ -webkit-box-shadow: 4px 4px 6px #ccc;
+ filter: progid:DXImageTransform.Microsoft.Shadow(Strength=6,Direction=135,Color='#cccccc');
+}
+
+ .opn-form.login {
+ width: 440px;
+ }
+
+ .opn-form .caption {
+ padding: 4px 0;
+ text-align: center;
+ font-weight: bold;
+ color: #fff;
+ background-color: #404040;
+ border-bottom: 1px solid #808080;
+ }
+
+ .opn-form .body {
+ padding: 12px;
+ }
+
+/* --- Controls --- */
+.ui-datepicker-trigger {
+ margin-left: 4px;
+ cursor: pointer;
+}
+
+/* --- Page Layout --- */
+#opn-header.navbar-inverse {
+ background-color: #404040;
+}
+
+#opn-body {
+ padding: 2px 0;
+ overflow-y: auto;
+}
+
+#opn-footer {
+ padding: 0 4px;
+ font-size: 10px;
+ color: #e0e0e0;
+ background-color: #404040;
+ border-top: solid 1px #b0b0b0;
+ visibility: hidden;
+}
+
+/* --- Panels --- */
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ padding: 0px;
+}
+
+/* --- Filter Panel --- */
+.opn-panel-filter {
+ padding: 4px 4px;
+ /*border:1px solid blue;*/
+}
+
+ .opn-panel-filter .opn-filter-header {
+ margin-bottom: 4px;
+ padding: 2px 8px;
+ text-align: center;
+ background-color: aliceblue;
+ border: 1px solid #808080;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ }
+
+ .opn-panel-filter .opn-label {
+ padding: 0 8px 0 0;
+ text-align: right;
+ }
+
+ .opn-panel-filter .opn-value {
+ }
+
+ .opn-panel-filter input[type="text"],
+ .opn-panel-filter select {
+ width: 96%;
+ }
+
+ .opn-panel-filter .opn-filter-paging {
+ display: none;
+ }
+
+/* --- Data Panel --- */
+.opn-panel-data {
+ padding: 4px 4px;
+ /*border:1px solid purple;*/
+}
+
+ .opn-panel-data .opn-data-header {
+ margin-bottom: 4px;
+ background-color: aliceblue;
+ border: 1px solid #808080;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px;
+ }
+
+ .opn-panel-data .opn-data-header .opn-column-header {
+ padding: 2px 8px;
+ }
+
+ .opn-panel-data .opn-data-msg {
+ padding: 4px;
+ background-color: lightgoldenrodyellow;
+ border: 1px solid #808080;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ border-radius: 8px;
+ }
+
+ .opn-panel-data .opn-data-content {
+ overflow-y: auto;
+ }
+
+ .opn-panel-data .opn-data-item {
+ }
+
+ .opn-panel-data .opn-data-item {
+ margin-bottom: 4px;
+ padding: 6px 4px;
+ background-color: #fff;
+ border: 1px solid #808080;
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ border-radius: 8px;
+ }
+
+ .opn-panel-data .opn-data-item:hover {
+ background-color: #e0ffe0;
+ }
+
+.opn-data-template {
+ display: none;
+}
+
+/* --- The End --- */
diff --git a/SaOperationsMgrWeb/wwwroot/js/opn-core.js b/SaOperationsMgrWeb/wwwroot/js/opn-core.js
new file mode 100644
index 0000000..0e7e24c
--- /dev/null
+++ b/SaOperationsMgrWeb/wwwroot/js/opn-core.js
@@ -0,0 +1,340 @@
+/*
+ Application: Sarand OperationsMgr
+ Javascript: Core
+ Notes: From a sarand.com original.
+*/
+
+//-------------------------------------------------------------
+// Data members.
+var opn = opn || {};
+
+//-------------------------------------------------------------
+// Utility functions.
+opn.checkTextAreaMaxLength = function (ctrl, len) {
+ if (ctrl == null || ctrl.value == null) return;
+ if (ctrl.value.length > len) ctrl.value = ctrl.value.substring(0, len);
+};
+opn.isDef = function (obj) {
+ return obj === null || typeof obj == "undefined" ? false : true;
+};
+opn.isFn = function (fn) {
+ return fn != null && typeof fn == typeof Function;
+};
+opn.isNumeric = function (n) {
+ return !isNaN(parseFloat(n)) && isFinite(n);
+};
+opn.zeroPad = function (num, count) {
+ var val = num + '';
+ while (val.length < count) val = "0" + val;
+ return val;
+};
+opn.setOddDataRowClass = function (rowSel) {
+ $(rowSel).addClass(function (index, currentClasses) {
+ return index % 2 == 1 ? "other" : "";
+ });
+};
+opn.toInt = function (value, defaultValue) {
+ return opn.isNumeric(value) ? parseInt(value, 10) : defaultValue || 0;
+}
+
+//-------------------------------------------------------------
+// Security.
+opn.redirectHome = function () {
+ opn.doPleaseWait();
+ document.location = opn.urlHome;
+}
+opn.redirectHomeExp = function () {
+ opn.doPleaseWait();
+ document.location = opn.urlHomeExp;
+}
+opn.doLogout = function () {
+ var $dlg = $('#dlgOpnLogout');
+ if (!$dlg.hasClass('ui-dialog-content')) {
+ var optLogout = opn.dlgOpts();
+ optLogout.buttons[opn.dlgBtnLogout] = function () { $(this).dialog('close'); opn.onLogout(); };
+ optLogout.buttons[opn.dlgBtnCancel] = function () { $(this).dialog('close'); };
+ $dlg.dialog(optLogout);
+ }
+ $dlg.dialog('open');
+};
+opn.onLogout = function () {
+ opn.doPleaseWait();
+ $('form#frmOpnLogout').submit();
+};
+
+//-------------------------------------------------------------
+// Data paging.
+opn.doPrevDataPage = function (frm) {
+ var $frm = $(frm);
+ var $pageNo = $('#ifDataPageNo', $frm);
+ $pageNo.val(Math.max(1, opn.toInt($pageNo.val()) - 1));
+ opn.refreshItemList();
+};
+opn.doNextDataPage = function (frm) {
+ var $frm = $(frm);
+ var $pageNo = $('#ifDataPageNo', $frm);
+ $pageNo.val(opn.toInt($pageNo.val()) + 1);
+ opn.refreshItemList();
+};
+opn.refreshPaging = function (paging, $paging) {
+ if (!paging) {
+ $paging.hide().Hide();
+ return;
+ }
+ $('#ifDataPageNo', $paging).val(paging ? paging.pageNo : '');
+ $('.PageNo', $paging).text(paging ? paging.pageNo : '');
+ $('#DataPageCount', $paging).val(paging ? paging.pageCount : '');
+ $('.PageCount', $paging).text(paging ? paging.pageCount : '');
+ $('#DataItemCount', $paging).val(paging ? paging.itemCount : '');
+ $('#DataItemTotal', $paging).val(paging ? paging.itemTotal : '');
+ $('.ItemTotal', $paging).text(paging ? paging.itemTotal : '');
+ if (paging.paged) $paging.show(); else $paging.hide();
+}
+
+//-------------------------------------------------------------
+// Dialogs.
+opn.openDialog = function ($dlg, width) {
+ $dlg.dialog({ minWidth: null, maxWidth: null, width: Math.min(width || 400, $(window).width() * .90) }).dialog('open');
+ return $dlg;
+};
+opn.dlgOpts = function () {
+ return { autoOpen: false, modal: true, show: 'clip', hide: 'clip', minWidth: 320, maxWidth: 480, width: 'auto', resizable: false, draggable: false, closeOnEscape: false, dialogClass: "no-close center-buttons", buttons: {} };
+};
+opn.dlgOptsClose = function () {
+ var opts = opn.dlgOpts();
+ opts.buttons[opn.dlgBtnClose] = function () { $(this).dialog('close'); };
+ return opts;
+};
+opn.doAlert = function (title, msg, onOk) {
+ if (!msg) {
+ msg = title;
+ title = null;
+ }
+ if (!opn.isDef(opn.$dlgAlert)) {
+ var opt = opn.dlgOpts();
+ opt.title = title || opn.dlgTitleAlert;
+ opt.buttons[opn.dlgBtnOk] = function () { $(this).dialog('close'); if (onOk) onOk(); };
+ opn.$dlgAlert = $('').dialog(opt);
+ }
+ $('#dlgAlertMsg').html(msg);
+ opn.openDialog(opn.$dlgAlert);
+};
+opn.doConfirm = function (msg, onOk, onCancel) {
+ if (!opn.isDef(opn.$dlgConfirm)) {
+ var opt = opn.dlgOpts();
+ opt.title = opn.dlgTitleConfirm;
+ opn.$dlgConfirm = $('').dialog(opt);
+ }
+ var buttons = opn.$dlgConfirm.dialog('option', 'buttons');
+ buttons[opn.dlgBtnYes] = function () { $(this).dialog('close'); if (onOk) onOk(); };
+ buttons[opn.dlgBtnNo] = function () { $(this).dialog('close'); if (onCancel) onCancel(); };
+ opn.$dlgConfirm.dialog('option', 'buttons', buttons);
+ $('#dlgConfirmMsg').html(msg);
+ opn.openDialog(opn.$dlgConfirm);
+};
+opn.doProgress = function (msg, delay) {
+ clearTimeout(opn.toShowProgress);
+ if (!opn.isDef(opn.$dlgProgress)) {
+ var opt = opn.dlgOpts();
+ opt.title = opn.dlgTitleProgress;
+ opt.show = { effect: 'fade', duration: 100 };
+ opt.hide = { effect: 'fade', duration: 100 };
+ opn.$dlgProgress = $('').dialog(opt);
+ }
+ $('#dlgProgressMsg').html(msg);
+ if (delay > 0) opn.toShowProgress = setTimeout(function () { opn.$dlgProgress.dialog('open'); }, delay);
+ else opn.$dlgProgress.dialog('open');
+};
+opn.hideProgress = function () {
+ clearTimeout(opn.toShowProgress);
+ opn.$dlgProgress.dialog('close');
+};
+
+//-------------------------------------------------------------
+// Notifications.
+opn.showNotification = function (title, msg) {
+ window.clearTimeout(opn.toNotification);
+ var $win = $(window);
+ var $not = $('#opn-notification').hide();
+ if (!$not.length) {
+ $not = $('');
+ $('body').append($not);
+ }
+ var $hdr = $('.heading', $not).css({ 'background-color': 'rgba(247,217,0,0.7)' });
+ $('.title', $not).html(title);
+ $('.message', $not).html(msg);
+ var fbr = $('#opn-footer')[0].getBoundingClientRect();
+ var fn = function () { $hdr.delay(2000).animate({ backgroundColor: '#f0f0f0' }, 1000); };
+ $not.css({ 'bottom': $win.height() - fbr.top, 'right': $win.width() - fbr.right }).slideDown(500, fn);
+ opn.toNotification = setTimeout(opn.hideNotification, 6000);
+};
+opn.hideNotification = function () {
+ window.clearTimeout(opn.toNotification);
+ $('#opn-notification').slideUp(500);
+};
+opn.doPleaseWait = function () {
+ $('#opn-please-wait').show();
+};
+opn.hidePleaseWait = function () {
+ $('#opn-please-wait').hide();
+};
+
+//-------------------------------------------------------------
+// Ajax.
+opn.doAjaxRequest = function (ajax, url, formId, callback, delay) {
+ window.clearTimeout(ajax.timeout);
+ if (url) ajax.url = url;
+ if (formId) ajax.formId = formId;
+ if (callback) ajax.callback = callback;
+ if (!ajax.noWaitIcon) opn.doPleaseWait();
+ ajax.timeout = setTimeout(function () { opn.execAjaxRequest(ajax); }, Math.max(50, parseInt(delay || 0, 10)));
+};
+opn.execAjaxRequest = function (ajax) {
+ window.clearTimeout(ajax.timeout);
+ if (ajax.request) ajax.request.abort();
+ var cfgAjax =
+ {
+ url: ajax.url,
+ type: 'POST',
+ cache: false,
+ enctype: 'multipart/form-data',
+ data: ajax.formData || $("#" + ajax.formId).serialize(),
+ dataType: 'json',
+ success: function (response, status, jqXHR) {
+ ajax.status = status;
+ if (response.notification)
+ opn.showNotification(response.notification.title, response.notification.message);
+ if (response.message)
+ opn.doAlert(response.message.title, response.message.text, function (response) { if (ajax.errFn) ajax.errFn(response); }(response));
+ if (response.sessionExpired)
+ return opn.redirectHomeExp();
+ if (response.goHome)
+ return opn.redirectHome();
+ if (ajax.callback) ajax.callback(response);
+ },
+ error: function (jqXHR, status, errorThrown) {
+ ajax.status = status;
+ if (status == "abort") return;
+ return opn.redirectHome();
+ },
+ complete: function (jqXHR, textStatus) {
+ if (!ajax.noWaitIcon) opn.hidePleaseWait();
+ ajax.complete = true;
+ }
+ };
+ if (ajax.formData) {
+ cfgAjax.processData = false,
+ cfgAjax.contentType = false;
+ }
+ //console.log(ajax.formData);
+ ajax.request = $.ajax(cfgAjax);
+};
+
+//-------------------------------------------------------------
+// Viewport - Desktop or Mobile.
+opn.isMob = function () { return $('body.mob').length > 0; };
+opn.onChangeViewport = function (viewport) {
+ var $body = $('body');
+ $body.removeClass('mob dsk');
+ if (viewport.is('xs')) $body.addClass('mob');
+ else if (viewport.current() != 'unrecognized') $body.addClass('dsk');
+};
+opn.isAutoHeight = function () { return ($(window).width() < 360 || $(window).height() < 560 || opn.isMob()); }
+opn.onWinResizePage = function () { };
+opn.onWinResize = function () {
+ var winH = $(window).height();
+ var $pageBody = $('#opn-body');
+ var $hdr = $('#opn-header');
+ var $ftr = $('#opn-footer');
+ //console.log(winH);
+ //console.log($hdr.outerHeight(true));
+ //console.log($ftr.outerHeight(true));
+ if (opn.isAutoHeight())
+ $pageBody.height('auto');
+ else
+ $pageBody.innerHeight(Math.min(1200, winH - $hdr.outerHeight() - $ftr.outerHeight(true)));
+ $ftr.css('visibility', 'visible');
+ opn.onWinResizePage();
+};
+opn.objBtm = function (sel) {
+ var $obj = $(sel);
+ return Math.floor($obj.offset().top + $obj.outerHeight(true));
+};
+opn.innerBtm = function (sel) {
+ var $obj = $(sel);
+ return Math.floor($obj.offset().top + $obj.outerHeight() - opn.bottomSurround($obj));
+};
+opn.innerTop = function (sel) {
+ var $obj = $(sel);
+ return Math.floor($obj.offset().top + opn.topSurround($obj));
+};
+opn.topSurround = function (sel) {
+ var $obj = $(sel);
+ return parseInt($obj.css('margin-top'), 10) + parseInt($obj.css('border-top-width'), 10) + parseInt($obj.css('padding-top'), 10);
+};
+opn.bottomSurround = function (sel) {
+ var $obj = $(sel);
+ return parseInt($obj.css('margin-bottom'), 10) + parseInt($obj.css('border-bottom-width'), 10) + parseInt($obj.css('padding-bottom'), 10);
+};
+opn.marginHeight = function (sel) {
+ var $obj = $(sel);
+ return parseInt($obj.css('margin-top'), 10) + parseInt($obj.css('margin-bottom'), 10);
+};
+opn.borderHeight = function (sel) {
+ var $obj = $(sel);
+ return parseInt($obj.css('border-top-width'), 10) + parseInt($obj.css('border-bottom-width'), 10);
+};
+
+//-------------------------------------------------------------
+// On page load.
+$(function () {
+ //console.log('Page loaded');
+ (function ($, viewport) {
+ var timerResize = 0;
+ $(window).bind('resize', function (e) {
+ viewport.changed(function () { opn.onChangeViewport(viewport); });
+ clearTimeout(timerResize);
+ timerResize = setTimeout(opn.onWinResize, 200);
+ }).trigger('resize');
+ })($, ResponsiveBootstrapToolkit);
+ $('textarea[maxlength]').keyup(function () {
+ var limit = parseInt($(this).attr('maxlength'), 10);
+ var text = $(this).val();
+ if (text.length > limit)
+ $(this).val(text.substr(0, limit));
+ });
+ // Text selection in element.
+ jQuery.fn.selectText = function () {
+ /*
+ this.find('input').each(function()
+ {
+ if($(this).prev().length == 0 || !$(this).prev().hasClass('p_copy'))
+ $('').insertBefore($(this));
+ $(this).prev().html($(this).val());
+ });
+ */
+ var doc = document;
+ var element = this[0];
+ var range;
+ if (doc.body.createTextRange) {
+ range = doc.body.createTextRange();
+ range.moveToElementText(element);
+ range.select();
+ }
+ else if (window.getSelection) {
+ range = doc.createRange();
+ range.selectNodeContents(element);
+ var sel = window.getSelection();
+ sel.removeAllRanges();
+ sel.addRange(range);
+ }
+ };
+});
+$(window).load(function () {
+ //console.log('Window loaded');
+ $(window).trigger('resize');
+});
+
+//-------------------------------------------------------------
+// T h e E n d
+//-------------------------------------------------------------
diff --git a/SaOperationsMgrWeb/wwwroot/js/opn-utilities-utilities.js b/SaOperationsMgrWeb/wwwroot/js/opn-utilities-utilities.js
new file mode 100644
index 0000000..0000832
--- /dev/null
+++ b/SaOperationsMgrWeb/wwwroot/js/opn-utilities-utilities.js
@@ -0,0 +1,62 @@
+/*
+ Application: Sarand OperationsMgr
+ Javascript: Utilities
+ Notes: From a sarand.com original.
+*/
+
+//-------------------------------------------------------------
+opn.refreshUtilityList = function (delay) {
+ var $panel = $('#opn-panel-utilities-utilities');
+ var $data = $('.opn-panel-data', $panel);
+ var $content = $('.opn-data-content', $data);
+ $('.opn-data-list', $content).empty();
+ $('.opn-data-msg', $data).text(opn.msgDataQuerying).show();
+ opn.ajaxUtilityList = opn.ajaxUtilityList || {};
+ opn.doAjaxRequest(opn.ajaxUtilityList, '/Utilities/GetUtilityList', 'frmFilter', opn.onRefreshUtilityList, delay || 250);
+};
+opn.refreshItemList = opn.refreshUtilityList;
+opn.onRefreshUtilityList = function (response) {
+ var $panel = $('#opn-panel-utilities-utilities');
+ var $data = $('.opn-panel-data', $panel);
+ var $content = $('.opn-data-content', $data);
+ var $msg = $('.opn-data-msg', $data).empty().hide();
+ //console.log(response);
+ opn.refreshPaging(response.paging, $('.opn-panel-filter .opn-filter-paging', $panel));
+
+ var $list = $('.opn-data-list', $content);
+ $list.empty();
+ if (response.utilities && response.utilities.length) {
+ var $tmpl = $('.opn-utility-template .opn-data-item', $data);
+ for (var utilityIdx = 0; utilityIdx < response.utilities.length; utilityIdx++) {
+ var $utility = $tmpl.clone();
+ var utility = response.utilities[utilityIdx];
+ $('.code', $utility).text(utility.code);
+ $('.size', $utility).text(utility.sizeCode);
+ if (utility.onInstance)
+ $('.status', $utility).text("Gate-in: " + utility.gateIn);
+ else
+ $('.status', $utility).text("Gate-out: " + utility.gateOut);
+ $list.append($utility);
+ if (utilityIdx > 12) break;
+ }
+ }
+ else {
+ $msg.text(opn.msgDataNoneFound).show();
+ }
+};
+
+//------------------------------------------------------------
+$(function () {
+ $('#ifFilterUtilityCode,#ifFilterUtilitySize').keypress(function (evt) {
+ if (evt.key === 'Enter') {
+ $('#pbFilterRefresh').click();
+ evt.preventDefault();
+ return false;
+ }
+ });
+ opn.refreshUtilityList(500);
+});
+
+/* --------------------------- */
+/* T h e E n d */
+/* --------------------------- */
\ No newline at end of file
diff --git a/SaOpnMgrCore/Core/App/OpnDfn.cs b/SaOpnMgrCore/Core/App/OpnDfn.cs
index a49f764..c64f947 100644
--- a/SaOpnMgrCore/Core/App/OpnDfn.cs
+++ b/SaOpnMgrCore/Core/App/OpnDfn.cs
@@ -67,6 +67,7 @@ namespace Sarand.OperationsMgr.Core.App
public enum Instance
{
Unknown = 0,
+ Test = 10,
}
//-------------------------------------------------------------------
diff --git a/SaOpnMgrCore/Core/App/OpnSystem.cs b/SaOpnMgrCore/Core/App/OpnSystem.cs
index 3aca8bc..70c9b55 100644
--- a/SaOpnMgrCore/Core/App/OpnSystem.cs
+++ b/SaOpnMgrCore/Core/App/OpnSystem.cs
@@ -47,7 +47,7 @@ namespace Sarand.OperationsMgr.Core.App
// System code utilities.
public static Opn.Instance GetInstanceForCode (String instanceCode)
{
- return Opn.Instance.Unknown;
+ return Opn.Instance.Test;
}
public static String GetInstanceCode (Opn.Instance instance)
{
diff --git a/SaOpnMgrWinDbas/Win/Dbas/Consoles/OpnSecurityConsole_Dbas.cs b/SaOpnMgrWinDbas/Win/Dbas/Consoles/OpnSecurityConsole_Dbas.cs
index 4b6c9c8..7a2a41b 100644
--- a/SaOpnMgrWinDbas/Win/Dbas/Consoles/OpnSecurityConsole_Dbas.cs
+++ b/SaOpnMgrWinDbas/Win/Dbas/Consoles/OpnSecurityConsole_Dbas.cs
@@ -40,7 +40,6 @@ namespace Sarand.OperationsMgr.App.Consoles
// Register Security Rights.
public override void RegisterSecurityRights ()
{
- throw new NotImplementedException();
}
//---------------------------------------------------------------