TS - OperationsMgrWeb login page UI and function

This commit is contained in:
Thomas Savine
2020-03-23 09:06:54 +00:00
parent 70de9715ce
commit 5067e26d08
25 changed files with 4652 additions and 550 deletions
+2 -2
View File
@@ -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
@@ -1,101 +1,255 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
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.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
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.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="application.caption" xml:space="preserve">
<value>Sarand OperationsMgr</value>
</data>
<data name="button.cancel" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="button.close" xml:space="preserve">
<value>Close</value>
</data>
<data name="button.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="button.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="button.nextDataPage" xml:space="preserve">
<value>Next page</value>
</data>
<data name="button.no" xml:space="preserve">
<value>No</value>
</data>
<data name="button.ok" xml:space="preserve">
<value>OK</value>
</data>
<data name="button.prevDataPage" xml:space="preserve">
<value>Prev page</value>
</data>
<data name="button.refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="button.yes" xml:space="preserve">
<value>Yes</value>
</data>
<data name="dataList.header.code" xml:space="preserve">
<value>Code</value>
</data>
<data name="dataList.header.status" xml:space="preserve">
<value>Status</value>
</data>
<data name="dataList.header.utility" xml:space="preserve">
<value>Utility</value>
</data>
<data name="dialog.title.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="form.action.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="form.action.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="form.action.nextDataPage" xml:space="preserve">
<value>NextDataPage</value>
</data>
<data name="form.action.prevDataPage" xml:space="preserve">
<value>PrevDataPage</value>
</data>
<data name="form.action.refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="form.caption.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="label.code" xml:space="preserve">
<value>Code</value>
</data>
<data name="label.company" xml:space="preserve">
<value>Company</value>
</data>
<data name="label.instance" xml:space="preserve">
<value>Instance</value>
</data>
<data name="label.password" xml:space="preserve">
<value>Password</value>
</data>
<data name="label.status" xml:space="preserve">
<value>Status</value>
</data>
<data name="label.type" xml:space="preserve">
<value>Type</value>
</data>
<data name="label.user" xml:space="preserve">
<value>User</value>
</data>
<data name="menu.option.home" xml:space="preserve">
<value>Home</value>
</data>
<data name="menu.option.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="menu.option.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="msg.confirm.logout" xml:space="preserve">
<value>Are you sure that you want to logout?</value>
</data>
<data name="msg.data.noneFound" xml:space="preserve">
<value>No matching data found.</value>
</data>
<data name="msg.data.querying" xml:space="preserve">
<value>Querying data. please wait ...</value>
</data>
<data name="msg.warn.login.credentials.invalid" xml:space="preserve">
<value>Invalid credentials supplied.</value>
</data>
<data name="msg.warn.login.userCode.missing" xml:space="preserve">
<value>User code must be supplied.</value>
</data>
<data name="msg.warn.securityConsole.unavailable" xml:space="preserve">
<value>Failed to retrieve Security Console.</value>
</data>
<data name="msg.warn.session.expired" xml:space="preserve">
<value>Your session has expired.</value>
</data>
<data name="msg.warn.sessionContext.unknown" xml:space="preserve">
<value>Unknown session context.</value>
</data>
<data name="msg.warn.sessionExpired" xml:space="preserve">
<value>Session has expired.</value>
</data>
<data name="page.caption.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="paging.info.items.suffix" xml:space="preserve">
<value>items</value>
</data>
<data name="paging.info.of" xml:space="preserve">
<value>of</value>
</data>
<data name="paging.info.prefix" xml:space="preserve">
<value>Page</value>
</data>
<data name="view.title.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
</root>
+251 -97
View File
@@ -1,101 +1,255 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
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.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
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.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="application.caption" xml:space="preserve">
<value>Sarand OperationsMgr</value>
</data>
<data name="button.cancel" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="button.close" xml:space="preserve">
<value>Close</value>
</data>
<data name="button.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="button.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="button.nextDataPage" xml:space="preserve">
<value>Next page</value>
</data>
<data name="button.no" xml:space="preserve">
<value>No</value>
</data>
<data name="button.ok" xml:space="preserve">
<value>OK</value>
</data>
<data name="button.prevDataPage" xml:space="preserve">
<value>Prev page</value>
</data>
<data name="button.refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="button.yes" xml:space="preserve">
<value>Yes</value>
</data>
<data name="dataList.header.code" xml:space="preserve">
<value>Code</value>
</data>
<data name="dataList.header.status" xml:space="preserve">
<value>Status</value>
</data>
<data name="dataList.header.utility" xml:space="preserve">
<value>Utility</value>
</data>
<data name="dialog.title.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="form.action.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="form.action.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="form.action.nextDataPage" xml:space="preserve">
<value>NextDataPage</value>
</data>
<data name="form.action.prevDataPage" xml:space="preserve">
<value>PrevDataPage</value>
</data>
<data name="form.action.refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="form.caption.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="label.code" xml:space="preserve">
<value>Code</value>
</data>
<data name="label.company" xml:space="preserve">
<value>Company</value>
</data>
<data name="label.instance" xml:space="preserve">
<value>Instance</value>
</data>
<data name="label.password" xml:space="preserve">
<value>Password</value>
</data>
<data name="label.status" xml:space="preserve">
<value>Status</value>
</data>
<data name="label.type" xml:space="preserve">
<value>Type</value>
</data>
<data name="label.user" xml:space="preserve">
<value>User</value>
</data>
<data name="menu.option.home" xml:space="preserve">
<value>Home</value>
</data>
<data name="menu.option.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="menu.option.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="msg.confirm.logout" xml:space="preserve">
<value>Are you sure that you want to logout?</value>
</data>
<data name="msg.data.noneFound" xml:space="preserve">
<value>No matching data found.</value>
</data>
<data name="msg.data.querying" xml:space="preserve">
<value>Querying data. please wait ...</value>
</data>
<data name="msg.warn.login.credentials.invalid" xml:space="preserve">
<value>Invalid credentials supplied.</value>
</data>
<data name="msg.warn.login.userCode.missing" xml:space="preserve">
<value>User code must be supplied.</value>
</data>
<data name="msg.warn.securityConsole.unavailable" xml:space="preserve">
<value>Failed to retrieve Security Console.</value>
</data>
<data name="msg.warn.session.expired" xml:space="preserve">
<value>Your session has expired.</value>
</data>
<data name="msg.warn.sessionContext.unknown" xml:space="preserve">
<value>Unknown session context.</value>
</data>
<data name="msg.warn.sessionExpired" xml:space="preserve">
<value>Session has expired.</value>
</data>
<data name="page.caption.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="paging.info.items.suffix" xml:space="preserve">
<value>items</value>
</data>
<data name="paging.info.of" xml:space="preserve">
<value>of</value>
</data>
<data name="paging.info.prefix" xml:space="preserve">
<value>Page</value>
</data>
<data name="view.title.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
</root>
@@ -1,101 +1,258 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
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.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
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.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="application.caption" xml:space="preserve">
<value>Sarand LogisticsMgr</value>
</data>
<data name="application.caption1" xml:space="preserve">
<value>Sarand OperationsMgr</value>
</data>
<data name="button.cancel" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="button.close" xml:space="preserve">
<value>Close</value>
</data>
<data name="button.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="button.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="button.nextDataPage" xml:space="preserve">
<value>Next page</value>
</data>
<data name="button.no" xml:space="preserve">
<value>No</value>
</data>
<data name="button.ok" xml:space="preserve">
<value>OK</value>
</data>
<data name="button.prevDataPage" xml:space="preserve">
<value>Prev page</value>
</data>
<data name="button.refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="button.yes" xml:space="preserve">
<value>Yes</value>
</data>
<data name="dataList.header.code" xml:space="preserve">
<value>Code</value>
</data>
<data name="dataList.header.status" xml:space="preserve">
<value>Status</value>
</data>
<data name="dataList.header.utility" xml:space="preserve">
<value>Utility</value>
</data>
<data name="dialog.title.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="form.action.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="form.action.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="form.action.nextDataPage" xml:space="preserve">
<value>NextDataPage</value>
</data>
<data name="form.action.prevDataPage" xml:space="preserve">
<value>PrevDataPage</value>
</data>
<data name="form.action.refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="form.caption.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="label.code" xml:space="preserve">
<value>Code</value>
</data>
<data name="label.company" xml:space="preserve">
<value>Company</value>
</data>
<data name="label.instance" xml:space="preserve">
<value>Instance</value>
</data>
<data name="label.password" xml:space="preserve">
<value>Password</value>
</data>
<data name="label.status" xml:space="preserve">
<value>Status</value>
</data>
<data name="label.type" xml:space="preserve">
<value>Type</value>
</data>
<data name="label.user" xml:space="preserve">
<value>User</value>
</data>
<data name="menu.option.home" xml:space="preserve">
<value>Home</value>
</data>
<data name="menu.option.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="menu.option.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="msg.confirm.logout" xml:space="preserve">
<value>Are you sure that you want to logout?</value>
</data>
<data name="msg.data.noneFound" xml:space="preserve">
<value>No matching data found.</value>
</data>
<data name="msg.data.querying" xml:space="preserve">
<value>Querying data. please wait ...</value>
</data>
<data name="msg.warn.login.credentials.invalid" xml:space="preserve">
<value>Invalid credentials supplied.</value>
</data>
<data name="msg.warn.login.userCode.missing" xml:space="preserve">
<value>User code must be supplied.</value>
</data>
<data name="msg.warn.securityConsole.unavailable" xml:space="preserve">
<value>Failed to retrieve Security Console.</value>
</data>
<data name="msg.warn.session.expired" xml:space="preserve">
<value>Your session has expired.</value>
</data>
<data name="msg.warn.sessionContext.unknown" xml:space="preserve">
<value>Unknown session context.</value>
</data>
<data name="msg.warn.sessionExpired" xml:space="preserve">
<value>Session has expired.</value>
</data>
<data name="page.caption.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="paging.info.items.suffix" xml:space="preserve">
<value>items</value>
</data>
<data name="paging.info.of" xml:space="preserve">
<value>of</value>
</data>
<data name="paging.info.prefix" xml:space="preserve">
<value>Page</value>
</data>
<data name="view.title.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
</root>
@@ -1,101 +1,255 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
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.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
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.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="application.caption" xml:space="preserve">
<value>Sarand OperationsMgr</value>
</data>
<data name="button.cancel" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="button.close" xml:space="preserve">
<value>Close</value>
</data>
<data name="button.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="button.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="button.nextDataPage" xml:space="preserve">
<value>Next page</value>
</data>
<data name="button.no" xml:space="preserve">
<value>No</value>
</data>
<data name="button.ok" xml:space="preserve">
<value>OK</value>
</data>
<data name="button.prevDataPage" xml:space="preserve">
<value>Prev page</value>
</data>
<data name="button.refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="button.yes" xml:space="preserve">
<value>Yes</value>
</data>
<data name="dataList.header.code" xml:space="preserve">
<value>Code</value>
</data>
<data name="dataList.header.status" xml:space="preserve">
<value>Status</value>
</data>
<data name="dataList.header.utility" xml:space="preserve">
<value>Utility</value>
</data>
<data name="dialog.title.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="form.action.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="form.action.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="form.action.nextDataPage" xml:space="preserve">
<value>NextDataPage</value>
</data>
<data name="form.action.prevDataPage" xml:space="preserve">
<value>PrevDataPage</value>
</data>
<data name="form.action.refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="form.caption.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="label.code" xml:space="preserve">
<value>Code</value>
</data>
<data name="label.company" xml:space="preserve">
<value>Company</value>
</data>
<data name="label.instance" xml:space="preserve">
<value>Instance</value>
</data>
<data name="label.password" xml:space="preserve">
<value>Password</value>
</data>
<data name="label.status" xml:space="preserve">
<value>Status</value>
</data>
<data name="label.type" xml:space="preserve">
<value>Type</value>
</data>
<data name="label.user" xml:space="preserve">
<value>User</value>
</data>
<data name="menu.option.home" xml:space="preserve">
<value>Home</value>
</data>
<data name="menu.option.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="menu.option.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="msg.confirm.logout" xml:space="preserve">
<value>Are you sure that you want to logout?</value>
</data>
<data name="msg.data.noneFound" xml:space="preserve">
<value>No matching data found.</value>
</data>
<data name="msg.data.querying" xml:space="preserve">
<value>Querying data. please wait ...</value>
</data>
<data name="msg.warn.login.credentials.invalid" xml:space="preserve">
<value>Invalid credentials supplied.</value>
</data>
<data name="msg.warn.login.userCode.missing" xml:space="preserve">
<value>User code must be supplied.</value>
</data>
<data name="msg.warn.securityConsole.unavailable" xml:space="preserve">
<value>Failed to retrieve Security Console.</value>
</data>
<data name="msg.warn.session.expired" xml:space="preserve">
<value>Your session has expired.</value>
</data>
<data name="msg.warn.sessionContext.unknown" xml:space="preserve">
<value>Unknown session context.</value>
</data>
<data name="msg.warn.sessionExpired" xml:space="preserve">
<value>Session has expired.</value>
</data>
<data name="page.caption.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="paging.info.items.suffix" xml:space="preserve">
<value>items</value>
</data>
<data name="paging.info.of" xml:space="preserve">
<value>of</value>
</data>
<data name="paging.info.prefix" xml:space="preserve">
<value>Page</value>
</data>
<data name="view.title.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
</root>
@@ -1,101 +1,255 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
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.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
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.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="application.caption" xml:space="preserve">
<value>Sarand OperationsMgr</value>
</data>
<data name="button.cancel" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="button.close" xml:space="preserve">
<value>Close</value>
</data>
<data name="button.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="button.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="button.nextDataPage" xml:space="preserve">
<value>Next page</value>
</data>
<data name="button.no" xml:space="preserve">
<value>No</value>
</data>
<data name="button.ok" xml:space="preserve">
<value>OK</value>
</data>
<data name="button.prevDataPage" xml:space="preserve">
<value>Prev page</value>
</data>
<data name="button.refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="button.yes" xml:space="preserve">
<value>Yes</value>
</data>
<data name="dataList.header.code" xml:space="preserve">
<value>Code</value>
</data>
<data name="dataList.header.status" xml:space="preserve">
<value>Status</value>
</data>
<data name="dataList.header.utility" xml:space="preserve">
<value>Utility</value>
</data>
<data name="dialog.title.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="form.action.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="form.action.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="form.action.nextDataPage" xml:space="preserve">
<value>NextDataPage</value>
</data>
<data name="form.action.prevDataPage" xml:space="preserve">
<value>PrevDataPage</value>
</data>
<data name="form.action.refresh" xml:space="preserve">
<value>Refresh</value>
</data>
<data name="form.caption.login" xml:space="preserve">
<value>Login</value>
</data>
<data name="label.code" xml:space="preserve">
<value>Code</value>
</data>
<data name="label.company" xml:space="preserve">
<value>Company</value>
</data>
<data name="label.instance" xml:space="preserve">
<value>Instance</value>
</data>
<data name="label.password" xml:space="preserve">
<value>Password</value>
</data>
<data name="label.status" xml:space="preserve">
<value>Status</value>
</data>
<data name="label.type" xml:space="preserve">
<value>Type</value>
</data>
<data name="label.user" xml:space="preserve">
<value>User</value>
</data>
<data name="menu.option.home" xml:space="preserve">
<value>Home</value>
</data>
<data name="menu.option.logout" xml:space="preserve">
<value>Logout</value>
</data>
<data name="menu.option.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="msg.confirm.logout" xml:space="preserve">
<value>Are you sure that you want to logout?</value>
</data>
<data name="msg.data.noneFound" xml:space="preserve">
<value>No matching data found.</value>
</data>
<data name="msg.data.querying" xml:space="preserve">
<value>Querying data. please wait ...</value>
</data>
<data name="msg.warn.login.credentials.invalid" xml:space="preserve">
<value>Invalid credentials supplied.</value>
</data>
<data name="msg.warn.login.userCode.missing" xml:space="preserve">
<value>User code must be supplied.</value>
</data>
<data name="msg.warn.securityConsole.unavailable" xml:space="preserve">
<value>Failed to retrieve Security Console.</value>
</data>
<data name="msg.warn.session.expired" xml:space="preserve">
<value>Your session has expired.</value>
</data>
<data name="msg.warn.sessionContext.unknown" xml:space="preserve">
<value>Unknown session context.</value>
</data>
<data name="msg.warn.sessionExpired" xml:space="preserve">
<value>Session has expired.</value>
</data>
<data name="page.caption.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
<data name="paging.info.items.suffix" xml:space="preserve">
<value>items</value>
</data>
<data name="paging.info.of" xml:space="preserve">
<value>of</value>
</data>
<data name="paging.info.prefix" xml:space="preserve">
<value>Page</value>
</data>
<data name="view.title.utilities.utilities" xml:space="preserve">
<value>Utilities</value>
</data>
</root>
@@ -35,4 +35,9 @@
<Folder Include="wwwroot\css\images\" />
<Folder Include="wwwroot\img\icon\" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Localisation\OpnProperties.resx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
</Project>
@@ -0,0 +1,12 @@
@model Sarand.OperationsMgr.Web.Models.Model_Base
@inject Sarand.OperationsMgr.Web.App.OpnLocaliser Localiser
<div id="dlgOpnLogout" class="dialog" title="Logout">
<form id="frmOpnLogout" action="/Home" method="post">
@Html.Hidden("SessionIdx", null, new { @id = "" })
@Html.Hidden("FormAction", @Localiser["form.action.logout"], new { @id = "" })
</form>
<div class="spacer4"></div>
<div>@Localiser["msg.confirm.logout"]</div>
<div class="spacer4"></div>
</div>
@@ -0,0 +1,33 @@
@model Sarand.OperationsMgr.Web.Models.Model_Base
@if (Model.HasMessages)
{
<div class="opn-msg">
@if (Model.ErrorMessages.Count > 0)
{
<div class="err">
@foreach (var message in Model.ErrorMessages)
{
<div class="msg">@message</div>
}
</div>
}
@if (Model.WarningMessages.Count > 0)
{
<div class="wrn">
@foreach (var message in Model.WarningMessages)
{
<div class="msg">@message</div>
}
</div>
}
@if (Model.InfoMessages.Count > 0)
{
<div class="inf">
@foreach (var message in Model.InfoMessages)
{
<div class="msg">@message</div>
}
</div>
}
</div>
}
+121 -61
View File
@@ -1,71 +1,131 @@
@using Sarand.Core.App
@model Sarand.OperationsMgr.Web.Models.Model_Base
@inject Sarand.OperationsMgr.Web.App.OpnLocaliser Localiser
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - SaOperationsMgrWeb</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=no" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />@* IE11 incompatibility eg. 'border-radius' not recognised. Must be at top of head *@
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Script-Type" content="application/javascript" />
<meta name="Author" content="Sarand" />
<title>@ViewData["Title"] - Sarand OperationsMgr</title>
@* Stylesheets *@
<environment names="Development">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/jquery-ui.css" asp-append-version="true" />
</environment>
<environment names="Staging,Production">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css"
asp-fallback-test-class="sr-only"
asp-fallback-test-property="position"
asp-fallback-test-value="absolute" />
<link rel="stylesheet" href="~/css/jquery-ui.min.css" asp-append-version="false" />
</environment>
<link rel="stylesheet" href="~/css/opn-core.css?@Model.HrefVersion" />
@foreach (var cssFile in Model.AdditionalFiles_CSS)
{
<link rel="stylesheet" href="~/@cssFile?@Model.HrefVersion" />
}
@* Scripts *@
<script>
var opn = opn || {};
opn.urlHome = '@Model.RedirectLocation.Home';
opn.urlHomeExp = '@Model.RedirectLocation.Home_SessionExpired';
opn.dlgBtnYes = '@Localiser["button.yes"]';
opn.dlgBtnNo = '@Localiser["button.no"]';
opn.dlgBtnOk = '@Localiser["button.ok"]';
opn.dlgBtnClose = '@Localiser["button.close"]';
opn.dlgBtnCancel = '@Localiser["button.cancel"]';
opn.dlgBtnLogout = '@Localiser["button.logout"]';
opn.msgDataQuerying = '@Localiser.GetJavascriptText("msg.data.querying")';
opn.msgDataNoneFound = '@Localiser.GetJavascriptText("msg.data.noneFound")';
</script>
<environment names="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/js/jquery-ui.js" asp-append-version="true"></script>
</environment>
<environment names="Staging,Production">
<script src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"
asp-fallback-test="window.jQuery">
</script>
<script src="~/lib/bootstrap/dist/js/bootstrap.min.js"
asp-fallback-src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/bootstrap.min.js"
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal">
</script>
<script src="~/js/jquery-ui.min.js" asp-append-version="false"></script>
</environment>
@* @RenderSection("scripts", required: false) *@
<script src="~/js/opn-core.js?@Model.HrefVersion" asp-append-version="false"></script>
@foreach (var jsFile in Model.AdditionalFiles_JS)
{
<script src="~/@jsFile?@Model.HrefVersion" asp-append-version="false"></script>
}
@if (SacsSystem.DebugMode)
{
@Html.ApplicationInsightsJavaScript(TelemetryConfiguration)
}
<environment include="Development">
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
<link rel="stylesheet" href="~/css/site.css" />
</environment>
<environment exclude="Development">
<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/css/bootstrap.min.css"
asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
</environment>
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a asp-page="/Index" class="navbar-brand">SaOperationsMgrWeb</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a asp-page="/Index">Home</a></li>
<li><a asp-page="/About">About</a></li>
<li><a asp-page="/Contact">Contact</a></li>
</ul>
</div>
</div>
</nav>
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>&copy; 2017 - SaOperationsMgrWeb</p>
</footer>
</div>
<environment include="Development">
<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
</environment>
<environment exclude="Development">
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.2.0.min.js"
asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
asp-fallback-test="window.jQuery"
crossorigin="anonymous"
integrity="sha384-K+ctZQ+LL8q6tP7I94W+qzQsfRV2a+AfHIi9k8z8l9ggpc8X+Ytst4yBo/hH+8Fk">
</script>
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.7/bootstrap.min.js"
asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal"
crossorigin="anonymous"
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa">
</script>
<script src="~/js/site.min.js" asp-append-version="true"></script>
</environment>
@* --- H e a d e r --- *@
<div id="opn-header" class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a asp-area="" asp-controller="Home" asp-action="Index" class="navbar-brand">@Localiser["application.caption"]</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li><a asp-area="" asp-controller="Home" asp-action="Index">@Localiser["menu.option.home"]</a></li>
@if (!Model.AwaitingLogin)
{
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">@Localiser["menu.option.utilities"] <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a asp-area="" asp-controller="Utilities" asp-action="Utilities">@Localiser["menu.option.utilities.utilities"]</a></li>
</ul>
</li>
<li><a onclick="opn.doLogout()">@Localiser["menu.option.logout"]</a></li>
}
</ul>
</div>
</div>
<div class="clearb"></div>
</div>
@* --- B o d y --- *@
<div id="opn-body" class="container body-content">
@if (Model.ShowMessagesAtTopOfBody)
{
@await Html.PartialAsync("OpnMessages")
}
@RenderBody()
@await Html.PartialAsync("OpnLogout")
</div>
@* --- F o o t e r --- *@
<footer id="opn-footer">
<div>@ViewData["CopyrightNotice"]</div>
</footer>
<script src="~/js/bootstrap-Toolkit.js"></script>
<div id='opn-please-wait'></div>
@RenderSection("Scripts", required: false)
</body>
</html>
@@ -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"];
}
<div id="opn-panel-utilities">
</div>
@@ -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 ()
{
@@ -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>Summary Utility information</summary>
public class UtilityInfo
{
}
/// <summary>Detailed Utility data</summary>
public class UtilityData : UtilityInfo
{
}
//-------------------------------------------------------------------
// A j a x - A s s e t L i s t
//-------------------------------------------------------------------
public class AjaxResponse_UtilityList : AjaxResponse
{
public List<UtilityData> Utilities { get; set; } = new List<UtilityData>();
}
// Ajax request.
[HttpGet, HttpPost]
public IActionResult GetUtilityList (Models.Model_Utilities_Utilities model)
{
throw new NotImplementedException();
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -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();
}
//-------------------------------------------------------------------
}
//=======================================================================
}
@@ -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.
}
}
@@ -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.
//-------------------------------------------------------------------
}
}
@@ -1,4 +1,13 @@
{
"SessionContexts": {
"TestInstance": {
"Instance": "TEST",
"Caption": "Test Instance",
"StockDatabase": {
"Location": "MsSQL:Sarand109\\Sql2014.SaBusinessMgr_Cadix"
}
}
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
@@ -1,4 +1,13 @@
{
"SessionContexts": {
"TestInstance": {
"Instance": "TEST",
"Caption": "Test Instance",
"StockDatabase": {
"Location": "MsSQL:Sarand109\\SQL2012EXPRESS.SaBusinessMgr_Cadix"
}
}
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
File diff suppressed because it is too large Load Diff
+579
View File
@@ -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 --- */
+340
View File
@@ -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 = $('<div id="dlgAlert"><div id="dlgAlertMsg"></div></div>').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 = $('<div id="dlgConfirm"><div class="spacer2"></div><div id="dlgConfirmMsg"></div></div>').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 = $('<div id="dlgProgress"><div id="dlgProgressMsg"></div></div>').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 = $('<div id="opn-notification"><div class="content"><div class="heading"><div class="close" onclick="opn.hideNotification()">&#10006;</div><div class="title"></div></div><div class="message"></div></div></div>');
$('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'))
$('<p class="p_copy" style="position: absolute; z-index: -1;"></p>').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
//-------------------------------------------------------------
@@ -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 */
/* --------------------------- */
+1
View File
@@ -67,6 +67,7 @@ namespace Sarand.OperationsMgr.Core.App
public enum Instance
{
Unknown = 0,
Test = 10,
}
//-------------------------------------------------------------------
+1 -1
View File
@@ -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)
{
@@ -40,7 +40,6 @@ namespace Sarand.OperationsMgr.App.Consoles
// Register Security Rights.
public override void RegisterSecurityRights ()
{
throw new NotImplementedException();
}
//---------------------------------------------------------------