Feature: Job Queues
Also UI style, theme and element changes
This commit is contained in:
@@ -6,19 +6,19 @@
|
||||
@using System.Web.Mvc
|
||||
@using System.Web.Mvc.Html;
|
||||
@using Disco.Services.Web;
|
||||
@helper FriendlyDate(DateTime d, string ElementId = null)
|
||||
{<span @(ElementId == null ? null : new HtmlString(string.Format("id=\"{0}\" ", ElementId)))title="@d.ToFullDateTime()" data-discodatetime="@d.ToSortable()" data-datetimeformatted="@d.ToJavaScript()" class="date nowrap">@d.FromNow()</span>}
|
||||
@helper FriendlyDate(DateTime? d, string NullValue = "n/a", string ElementId = null)
|
||||
{<span @(ElementId == null ? null : new HtmlString(string.Format("id=\"{0}\" ", ElementId)))title="@d.ToFullDateTime(NullValue)" data-discodatetime="@d.ToSortable()" data-datetimeformatted="@d.ToJavaScript()" class="date nowrap">@d.FromNow(NullValue)</span>}
|
||||
@helper FriendlyDate(DateTime d, string ElementId = null, bool WithoutSuffix = false)
|
||||
{<span @(ElementId == null ? null : new HtmlString(string.Format("id=\"{0}\" ", ElementId)))title="@d.ToFullDateTime()" data-discodatetime="@d.ToSortable()" data-datetimeformatted="@d.ToJavaScript()" class="date nowrap">@d.FromNow(WithoutSuffix)</span>}
|
||||
@helper FriendlyDate(DateTime? d, string NullValue = "n/a", string ElementId = null, bool WithoutSuffix = false)
|
||||
{<span @(ElementId == null ? null : new HtmlString(string.Format("id=\"{0}\" ", ElementId)))title="@d.ToFullDateTime(NullValue)" data-discodatetime="@d.ToSortable()" data-datetimeformatted="@d.ToJavaScript()" class="date nowrap">@d.FromNow(WithoutSuffix, NullValue)</span>}
|
||||
@helper RadioButtonList(string id, List<System.Web.Mvc.SelectListItem> items, int columns = 1)
|
||||
{
|
||||
@ItemList("radio", id, items, columns)
|
||||
}
|
||||
@helper CheckBoxList(string id, List<System.Web.Mvc.SelectListItem> items, int columns = 1, bool alignEven = true, int? forceUniqueIds = null)
|
||||
@helper CheckBoxList(string id, List<System.Web.Mvc.SelectListItem> items, int columns = 1, bool alignEven = true, int? forceUniqueIds = null, bool htmlEncodeText = true)
|
||||
{
|
||||
@ItemList("checkbox", id, items, columns, alignEven, forceUniqueIds)
|
||||
@ItemList("checkbox", id, items, columns, alignEven, forceUniqueIds, htmlEncodeText)
|
||||
}
|
||||
@helper ItemList(string inputType, string id, List<System.Web.Mvc.SelectListItem> items, int columns = 1, bool alignEven = true, int? forceUniqueIds = null)
|
||||
@helper ItemList(string inputType, string id, List<System.Web.Mvc.SelectListItem> items, int columns = 1, bool alignEven = true, int? forceUniqueIds = null, bool htmlEncodeText = true)
|
||||
{
|
||||
int itemsPerColumn = items.Count / columns;
|
||||
int columnWidth = (100 / columns);
|
||||
@@ -37,7 +37,10 @@
|
||||
itemNextId++;
|
||||
var itemId = forceUniqueIds.HasValue ? string.Format("{0}_{1}_{2}", id, item.Value, forceUniqueIds++) : string.Format("{0}_{1}", id, item.Value);
|
||||
<li>
|
||||
<input id="@itemId" name="@id" value="@item.Value" type="@inputType" @(item.Selected ? new HtmlString("checked=\"checked\" ") : null)/><label for="@itemId">@item.Text</label></li>
|
||||
<input id="@itemId" name="@id" value="@item.Value" type="@inputType" @(item.Selected ? new HtmlString("checked=\"checked\" ") : null)/><label for="@itemId">@if (htmlEncodeText)
|
||||
{ @item.Text }
|
||||
else
|
||||
{ @(new HtmlString(item.Text)) }</label></li>
|
||||
}
|
||||
}
|
||||
</ul>
|
||||
@@ -46,23 +49,23 @@
|
||||
</tr>
|
||||
</table>
|
||||
}
|
||||
@helper FriendlyDateAndUser(DateTime? d, User u, string DateNullValue = "n/a")
|
||||
@helper FriendlyDateAndUser(DateTime? d, User u, string DateNullValue = "n/a", bool WithoutSuffix = false)
|
||||
{
|
||||
@FriendlyDate(d, DateNullValue);
|
||||
@FriendlyUser(u, null, "by");
|
||||
@FriendlyDate(d, DateNullValue, WithoutSuffix: WithoutSuffix);
|
||||
@FriendlyUser(u, null, " by");
|
||||
}
|
||||
@helper FriendlyDateAndUser(DateTime d, User u)
|
||||
@helper FriendlyDateAndUser(DateTime d, User u, bool WithoutSuffix = false)
|
||||
{
|
||||
@FriendlyDate(d);
|
||||
@FriendlyUser(u, null, "by");
|
||||
@FriendlyDate(d, WithoutSuffix: WithoutSuffix);
|
||||
@FriendlyUser(u, null, " by");
|
||||
}
|
||||
@helper FriendlyDateAndTitleUser(DateTime? d, User u, string DateNullValue = "n/a")
|
||||
@helper FriendlyDateAndTitleUser(DateTime? d, User u, string DateNullValue = "n/a", bool WithoutSuffix = false)
|
||||
{
|
||||
<span title="@d.ToFullDateTime(DateNullValue) by @u" data-discodatetime="@d.ToSortable()" class="date nowrap">@d.FromNow(DateNullValue)</span>
|
||||
<span title="@d.ToFullDateTime(DateNullValue) by @u" data-discodatetime="@d.ToSortable()" class="date nowrap">@d.FromNow(WithoutSuffix, DateNullValue)</span>
|
||||
}
|
||||
@helper FriendlyDateAndTitleUser(DateTime d, User u)
|
||||
@helper FriendlyDateAndTitleUser(DateTime d, User u, bool WithoutSuffix = false)
|
||||
{
|
||||
<span title="@d.ToFullDateTime() by @u" data-discodatetime="@d.ToSortable()" class="date nowrap">@d.FromNow()</span>
|
||||
<span title="@d.ToFullDateTime() by @u" data-discodatetime="@d.ToSortable()" class="date nowrap">@d.FromNow(WithoutSuffix)</span>
|
||||
}
|
||||
@helper FriendlyUser(User u, string nullValue = null, string prepend = null)
|
||||
{
|
||||
|
||||
@@ -70,7 +70,7 @@ namespace Disco.Web
|
||||
public class CommonHelpers : System.Web.WebPages.HelperPage
|
||||
{
|
||||
|
||||
public static System.Web.WebPages.HelperResult FriendlyDate(DateTime d, string ElementId = null)
|
||||
public static System.Web.WebPages.HelperResult FriendlyDate(DateTime d, string ElementId = null, bool WithoutSuffix = false)
|
||||
{
|
||||
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
@@ -121,7 +121,7 @@ WriteLiteralTo(@__razor_helper_writer, "\" class=\"date nowrap\">");
|
||||
|
||||
|
||||
#line 10 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, d.FromNow());
|
||||
WriteTo(@__razor_helper_writer, d.FromNow(WithoutSuffix));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
@@ -131,16 +131,16 @@ WriteLiteralTo(@__razor_helper_writer, "</span>");
|
||||
|
||||
|
||||
#line 10 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static System.Web.WebPages.HelperResult FriendlyDate(DateTime? d, string NullValue = "n/a", string ElementId = null)
|
||||
public static System.Web.WebPages.HelperResult FriendlyDate(DateTime? d, string NullValue = "n/a", string ElementId = null, bool WithoutSuffix = false)
|
||||
{
|
||||
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
@@ -191,7 +191,7 @@ WriteLiteralTo(@__razor_helper_writer, "\" class=\"date nowrap\">");
|
||||
|
||||
|
||||
#line 12 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, d.FromNow(NullValue));
|
||||
WriteTo(@__razor_helper_writer, d.FromNow(WithoutSuffix, NullValue));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
@@ -201,13 +201,13 @@ WriteLiteralTo(@__razor_helper_writer, "</span>");
|
||||
|
||||
|
||||
#line 12 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static System.Web.WebPages.HelperResult RadioButtonList(string id, List<System.Web.Mvc.SelectListItem> items, int columns = 1)
|
||||
@@ -241,7 +241,7 @@ WriteTo(@__razor_helper_writer, ItemList("radio", id, items, columns));
|
||||
}
|
||||
|
||||
|
||||
public static System.Web.WebPages.HelperResult CheckBoxList(string id, List<System.Web.Mvc.SelectListItem> items, int columns = 1, bool alignEven = true, int? forceUniqueIds = null)
|
||||
public static System.Web.WebPages.HelperResult CheckBoxList(string id, List<System.Web.Mvc.SelectListItem> items, int columns = 1, bool alignEven = true, int? forceUniqueIds = null, bool htmlEncodeText = true)
|
||||
{
|
||||
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
@@ -255,14 +255,14 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
|
||||
#line 19 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, ItemList("checkbox", id, items, columns, alignEven, forceUniqueIds));
|
||||
WriteTo(@__razor_helper_writer, ItemList("checkbox", id, items, columns, alignEven, forceUniqueIds, htmlEncodeText));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 19 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
@@ -272,7 +272,7 @@ WriteTo(@__razor_helper_writer, ItemList("checkbox", id, items, columns, alignEv
|
||||
}
|
||||
|
||||
|
||||
public static System.Web.WebPages.HelperResult ItemList(string inputType, string id, List<System.Web.Mvc.SelectListItem> items, int columns = 1, bool alignEven = true, int? forceUniqueIds = null)
|
||||
public static System.Web.WebPages.HelperResult ItemList(string inputType, string id, List<System.Web.Mvc.SelectListItem> items, int columns = 1, bool alignEven = true, int? forceUniqueIds = null, bool htmlEncodeText = true)
|
||||
{
|
||||
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
@@ -384,21 +384,54 @@ WriteLiteralTo(@__razor_helper_writer, "/><label for=\"");
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
WriteLiteralTo(@__razor_helper_writer, "\">");
|
||||
|
||||
|
||||
|
||||
#line 40 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, item.Text);
|
||||
WriteLiteralTo(@__razor_helper_writer, "\">");
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 40 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
if (htmlEncodeText)
|
||||
{
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 41 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, item.Text);
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 41 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 43 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, new HtmlString(item.Text));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 43 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
}
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
WriteLiteralTo(@__razor_helper_writer, "</label></li>\r\n");
|
||||
|
||||
|
||||
|
||||
#line 41 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 44 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
}
|
||||
|
||||
|
||||
@@ -409,7 +442,7 @@ WriteLiteralTo(@__razor_helper_writer, " </ul>\r\n
|
||||
|
||||
|
||||
|
||||
#line 45 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 48 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
}
|
||||
|
||||
#line default
|
||||
@@ -419,7 +452,7 @@ WriteLiteralTo(@__razor_helper_writer, " </tr>\r\n </table>\r\n");
|
||||
|
||||
|
||||
|
||||
#line 48 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 51 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
@@ -429,87 +462,42 @@ WriteLiteralTo(@__razor_helper_writer, " </tr>\r\n </table>\r\n");
|
||||
}
|
||||
|
||||
|
||||
public static System.Web.WebPages.HelperResult FriendlyDateAndUser(DateTime? d, User u, string DateNullValue = "n/a")
|
||||
public static System.Web.WebPages.HelperResult FriendlyDateAndUser(DateTime? d, User u, string DateNullValue = "n/a", bool WithoutSuffix = false)
|
||||
{
|
||||
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
|
||||
|
||||
#line 50 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 53 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 51 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, FriendlyDate(d, DateNullValue));
|
||||
#line 54 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, FriendlyDate(d, DateNullValue, WithoutSuffix: WithoutSuffix));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 51 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
;
|
||||
#line 54 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
;
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 52 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, FriendlyUser(u, null, "by"));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 52 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
;
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static System.Web.WebPages.HelperResult FriendlyDateAndUser(DateTime d, User u)
|
||||
{
|
||||
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
|
||||
|
||||
#line 55 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 56 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, FriendlyDate(d));
|
||||
WriteTo(@__razor_helper_writer, FriendlyUser(u, null, " by"));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 56 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
;
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 57 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, FriendlyUser(u, null, "by"));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 57 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
;
|
||||
#line 55 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
;
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
@@ -519,13 +507,58 @@ WriteTo(@__razor_helper_writer, FriendlyUser(u, null, "by"));
|
||||
}
|
||||
|
||||
|
||||
public static System.Web.WebPages.HelperResult FriendlyDateAndTitleUser(DateTime? d, User u, string DateNullValue = "n/a")
|
||||
public static System.Web.WebPages.HelperResult FriendlyDateAndUser(DateTime d, User u, bool WithoutSuffix = false)
|
||||
{
|
||||
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
|
||||
|
||||
#line 58 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 59 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, FriendlyDate(d, WithoutSuffix: WithoutSuffix));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 59 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
;
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 60 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, FriendlyUser(u, null, " by"));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 60 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
;
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static System.Web.WebPages.HelperResult FriendlyDateAndTitleUser(DateTime? d, User u, string DateNullValue = "n/a", bool WithoutSuffix = false)
|
||||
{
|
||||
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
|
||||
|
||||
#line 63 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
@@ -535,7 +568,7 @@ WriteLiteralTo(@__razor_helper_writer, " <span title=\"");
|
||||
|
||||
|
||||
|
||||
#line 61 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 64 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, d.ToFullDateTime(DateNullValue));
|
||||
|
||||
#line default
|
||||
@@ -545,7 +578,7 @@ WriteLiteralTo(@__razor_helper_writer, " by ");
|
||||
|
||||
|
||||
|
||||
#line 61 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 64 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, u);
|
||||
|
||||
#line default
|
||||
@@ -555,7 +588,7 @@ WriteLiteralTo(@__razor_helper_writer, "\" data-discodatetime=\"");
|
||||
|
||||
|
||||
|
||||
#line 61 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 64 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, d.ToSortable());
|
||||
|
||||
#line default
|
||||
@@ -565,8 +598,8 @@ WriteLiteralTo(@__razor_helper_writer, "\" class=\"date nowrap\">");
|
||||
|
||||
|
||||
|
||||
#line 61 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, d.FromNow(DateNullValue));
|
||||
#line 64 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, d.FromNow(WithoutSuffix, DateNullValue));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
@@ -575,7 +608,7 @@ WriteLiteralTo(@__razor_helper_writer, "</span>\r\n");
|
||||
|
||||
|
||||
|
||||
#line 62 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 65 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
@@ -585,13 +618,13 @@ WriteLiteralTo(@__razor_helper_writer, "</span>\r\n");
|
||||
}
|
||||
|
||||
|
||||
public static System.Web.WebPages.HelperResult FriendlyDateAndTitleUser(DateTime d, User u)
|
||||
public static System.Web.WebPages.HelperResult FriendlyDateAndTitleUser(DateTime d, User u, bool WithoutSuffix = false)
|
||||
{
|
||||
return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
|
||||
|
||||
#line 64 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 67 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
@@ -601,7 +634,7 @@ WriteLiteralTo(@__razor_helper_writer, " <span title=\"");
|
||||
|
||||
|
||||
|
||||
#line 65 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 68 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, d.ToFullDateTime());
|
||||
|
||||
#line default
|
||||
@@ -611,7 +644,7 @@ WriteLiteralTo(@__razor_helper_writer, " by ");
|
||||
|
||||
|
||||
|
||||
#line 65 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 68 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, u);
|
||||
|
||||
#line default
|
||||
@@ -621,7 +654,7 @@ WriteLiteralTo(@__razor_helper_writer, "\" data-discodatetime=\"");
|
||||
|
||||
|
||||
|
||||
#line 65 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 68 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, d.ToSortable());
|
||||
|
||||
#line default
|
||||
@@ -631,8 +664,8 @@ WriteLiteralTo(@__razor_helper_writer, "\" class=\"date nowrap\">");
|
||||
|
||||
|
||||
|
||||
#line 65 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, d.FromNow());
|
||||
#line 68 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, d.FromNow(WithoutSuffix));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
@@ -641,7 +674,7 @@ WriteLiteralTo(@__razor_helper_writer, "</span>\r\n");
|
||||
|
||||
|
||||
|
||||
#line 66 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 69 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
@@ -657,7 +690,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
|
||||
|
||||
#line 68 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 71 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
if (u != null)
|
||||
{
|
||||
@@ -666,7 +699,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 71 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 74 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, prepend);
|
||||
|
||||
#line default
|
||||
@@ -677,7 +710,7 @@ WriteLiteralTo(@__razor_helper_writer, " <span title=\"");
|
||||
|
||||
|
||||
|
||||
#line 71 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 74 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, u);
|
||||
|
||||
#line default
|
||||
@@ -687,7 +720,7 @@ WriteLiteralTo(@__razor_helper_writer, "\">");
|
||||
|
||||
|
||||
|
||||
#line 71 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 74 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, u.Id);
|
||||
|
||||
#line default
|
||||
@@ -697,7 +730,7 @@ WriteLiteralTo(@__razor_helper_writer, "</span>\r\n");
|
||||
|
||||
|
||||
|
||||
#line 72 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 75 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -709,7 +742,7 @@ WriteLiteralTo(@__razor_helper_writer, " <span>");
|
||||
|
||||
|
||||
|
||||
#line 75 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 78 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, nullValue);
|
||||
|
||||
#line default
|
||||
@@ -719,7 +752,7 @@ WriteLiteralTo(@__razor_helper_writer, "</span>\r\n");
|
||||
|
||||
|
||||
|
||||
#line 76 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 79 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
}
|
||||
|
||||
#line default
|
||||
@@ -736,7 +769,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
|
||||
|
||||
#line 79 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 82 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
for (int index = 0; index < BreadCrumbs.Count; index++)
|
||||
{
|
||||
@@ -751,7 +784,7 @@ WriteLiteralTo(@__razor_helper_writer, " <span>></span>\r\n");
|
||||
|
||||
|
||||
|
||||
#line 86 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 89 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
}
|
||||
if (breadCrumb.Item2 == null)
|
||||
{
|
||||
@@ -760,14 +793,14 @@ WriteLiteralTo(@__razor_helper_writer, " <span>></span>\r\n");
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 89 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 92 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, breadCrumb.Item1);
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 89 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 92 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
}
|
||||
else
|
||||
@@ -777,14 +810,14 @@ WriteTo(@__razor_helper_writer, breadCrumb.Item1);
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 93 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 96 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, Html.GetPageHelper().ActionLink(breadCrumb.Item1, breadCrumb.Item2));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 93 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 96 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
}
|
||||
}
|
||||
@@ -803,21 +836,21 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
|
||||
|
||||
#line 98 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 101 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 99 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 102 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, Title);
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 99 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 102 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
@@ -834,7 +867,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
|
||||
|
||||
#line 102 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 105 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
for (int index = 0; index < BreadCrumbs.Count; index++)
|
||||
{
|
||||
@@ -846,14 +879,14 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 108 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 111 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, new HtmlString(" > "));
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 108 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 111 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
}
|
||||
|
||||
@@ -861,14 +894,14 @@ WriteTo(@__razor_helper_writer, new HtmlString(" > "));
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 110 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 113 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, breadCrumb.Item1);
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 110 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 113 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
}
|
||||
|
||||
@@ -886,21 +919,21 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
|
||||
|
||||
#line 114 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 117 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 115 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 118 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, Title);
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
|
||||
#line 115 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 118 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
@@ -917,7 +950,7 @@ return new System.Web.WebPages.HelperResult(__razor_helper_writer => {
|
||||
|
||||
|
||||
|
||||
#line 118 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 121 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
Html.GetPageHelper().BundleDeferred("~/ClientScripts/Modules/Disco-jQueryExtensions");
|
||||
|
||||
#line default
|
||||
@@ -927,7 +960,7 @@ WriteLiteralTo(@__razor_helper_writer, " <span id=\"");
|
||||
|
||||
|
||||
|
||||
#line 119 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 122 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, BulkSelectContainerId);
|
||||
|
||||
#line default
|
||||
@@ -937,7 +970,7 @@ WriteLiteralTo(@__razor_helper_writer, "\" class=\"checkboxBulkSelectContainer\"
|
||||
|
||||
|
||||
|
||||
#line 120 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 123 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
if (string.IsNullOrWhiteSpace(ParentJQuerySelector))
|
||||
{
|
||||
|
||||
@@ -948,7 +981,7 @@ WriteLiteralTo(@__razor_helper_writer, " <script type=\"text/javascri
|
||||
|
||||
|
||||
|
||||
#line 122 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 125 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, BulkSelectContainerId);
|
||||
|
||||
#line default
|
||||
@@ -958,7 +991,7 @@ WriteLiteralTo(@__razor_helper_writer, "\').checkboxBulkSelect(); });</script>\r
|
||||
|
||||
|
||||
|
||||
#line 123 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 126 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -970,7 +1003,7 @@ WriteLiteralTo(@__razor_helper_writer, " <script type=\"text/javascri
|
||||
|
||||
|
||||
|
||||
#line 126 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 129 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, BulkSelectContainerId);
|
||||
|
||||
#line default
|
||||
@@ -980,7 +1013,7 @@ WriteLiteralTo(@__razor_helper_writer, "\').checkboxBulkSelect({ parentSelector:
|
||||
|
||||
|
||||
|
||||
#line 126 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 129 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
WriteTo(@__razor_helper_writer, ParentJQuerySelector);
|
||||
|
||||
#line default
|
||||
@@ -990,7 +1023,7 @@ WriteLiteralTo(@__razor_helper_writer, "\' }); });</script>\r\n");
|
||||
|
||||
|
||||
|
||||
#line 127 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 130 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
}
|
||||
|
||||
#line default
|
||||
@@ -1000,7 +1033,7 @@ WriteLiteralTo(@__razor_helper_writer, " </span>\r\n");
|
||||
|
||||
|
||||
|
||||
#line 129 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
#line 132 "..\..\App_Code\CommonHelpers.cshtml"
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
@@ -56,7 +56,10 @@ namespace Disco.Web
|
||||
// Initialize Expressions
|
||||
BI.Expressions.Expression.InitializeExpressions();
|
||||
|
||||
// Initialize Warranty Providers Plugins
|
||||
// Initialize Job Queues
|
||||
Disco.Services.Jobs.JobQueues.JobQueueService.Initialize(Database);
|
||||
|
||||
// Initialize Plugins
|
||||
Disco.Services.Plugins.Plugins.InitalizePlugins(Database);
|
||||
|
||||
// Initialize Scheduled Tasks
|
||||
|
||||
@@ -138,7 +138,7 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
return Update(id, pScope, Scope, redirect);
|
||||
}
|
||||
[DiscoAuthorize(Claims.Config.DocumentTemplate.Configure)]
|
||||
public virtual ActionResult UpdateSubTypes(string id, List<string> SubTypes = null)
|
||||
public virtual ActionResult UpdateJobSubTypes(string id, List<string> JobSubTypes = null, bool redirect = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -146,13 +146,19 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
throw new ArgumentNullException("id");
|
||||
var documentTemplate = Database.DocumentTemplates.Find(id);
|
||||
|
||||
UpdateSubTypes(documentTemplate, SubTypes);
|
||||
UpdateJobSubTypes(documentTemplate, JobSubTypes);
|
||||
|
||||
return Json("OK", JsonRequestBehavior.AllowGet);
|
||||
if (redirect)
|
||||
return RedirectToAction(MVC.Config.DocumentTemplate.Index(documentTemplate.Id));
|
||||
else
|
||||
return Json("OK", JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return Json(string.Format("Error: {0}", ex.Message), JsonRequestBehavior.AllowGet);
|
||||
if (redirect)
|
||||
throw;
|
||||
else
|
||||
return Json(string.Format("Error: {0}", ex.Message), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -224,7 +230,7 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
|
||||
Database.SaveChanges();
|
||||
}
|
||||
private void UpdateSubTypes(Disco.Models.Repository.DocumentTemplate documentTemplate, List<string> SubTypes)
|
||||
private void UpdateJobSubTypes(Disco.Models.Repository.DocumentTemplate documentTemplate, List<string> JobSubTypes)
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
|
||||
@@ -236,10 +242,10 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
}
|
||||
|
||||
// Add New
|
||||
if (SubTypes != null && SubTypes.Count > 0)
|
||||
if (JobSubTypes != null && JobSubTypes.Count > 0)
|
||||
{
|
||||
var subTypes = new List<Disco.Models.Repository.JobSubType>();
|
||||
foreach (var stId in SubTypes)
|
||||
foreach (var stId in JobSubTypes)
|
||||
{
|
||||
var typeId = stId.Substring(0, stId.IndexOf("_"));
|
||||
var subTypeId = stId.Substring(stId.IndexOf("_") + 1);
|
||||
|
||||
@@ -1690,9 +1690,9 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
if (j != null)
|
||||
{
|
||||
if (j.CanForceClose())
|
||||
if (j.CanCloseForced())
|
||||
{
|
||||
j.OnForceClose(Database, CurrentUser, Reason);
|
||||
j.OnCloseForced(Database, CurrentUser, Reason);
|
||||
|
||||
Database.SaveChanges();
|
||||
if (redirect.HasValue && redirect.Value)
|
||||
@@ -1715,9 +1715,9 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
if (j != null)
|
||||
{
|
||||
if (j.CanClose())
|
||||
if (j.CanCloseNormally())
|
||||
{
|
||||
j.OnClose(CurrentUser);
|
||||
j.OnCloseNormally(CurrentUser);
|
||||
|
||||
Database.SaveChanges();
|
||||
if (redirect)
|
||||
|
||||
@@ -18,8 +18,6 @@ namespace Disco.Web.Areas.API.Controllers
|
||||
Database.DiscoConfiguration.JobPreferences.LongRunningJobDaysThreshold = LongRunningJobDaysThreshold;
|
||||
Database.SaveChanges();
|
||||
|
||||
Disco.Web.Controllers.JobController.ReInitializeLongRunningJobList(Database);
|
||||
|
||||
if (redirect)
|
||||
return RedirectToAction(MVC.Config.JobPreferences.Index());
|
||||
else
|
||||
|
||||
@@ -0,0 +1,393 @@
|
||||
using Disco.BI.Interop.ActiveDirectory;
|
||||
using Disco.Models.Interop.ActiveDirectory;
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Jobs.JobQueues;
|
||||
using Disco.Services.Web;
|
||||
using Disco.BI.Extensions;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Disco.Web.Areas.API.Controllers
|
||||
{
|
||||
public partial class JobQueueController : AuthorizedDatabaseController
|
||||
{
|
||||
const string pName = "name";
|
||||
const string pDescription = "description";
|
||||
const string pIcon = "icon";
|
||||
const string pIconColour = "iconcolour";
|
||||
const string pPriority = "priority";
|
||||
const string pDefaultSLAExpiry = "defaultslaexpiry";
|
||||
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult Update(int id, string key, string value = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
Authorization.Require(Claims.Config.JobQueue.Configure);
|
||||
|
||||
try
|
||||
{
|
||||
if (id < 0)
|
||||
throw new ArgumentOutOfRangeException("id");
|
||||
if (string.IsNullOrEmpty(key))
|
||||
throw new ArgumentNullException("key");
|
||||
var jobQueue = Database.JobQueues.Find(id);
|
||||
if (jobQueue != null)
|
||||
{
|
||||
switch (key.ToLower())
|
||||
{
|
||||
case pName:
|
||||
UpdateName(jobQueue, value);
|
||||
break;
|
||||
case pDescription:
|
||||
UpdateDescription(jobQueue, value);
|
||||
break;
|
||||
case pPriority:
|
||||
UpdatePriority(jobQueue, value);
|
||||
break;
|
||||
case pIcon:
|
||||
UpdateIcon(jobQueue, value);
|
||||
break;
|
||||
case pIconColour:
|
||||
UpdateIconColour(jobQueue, value);
|
||||
break;
|
||||
case pDefaultSLAExpiry:
|
||||
UpdateDefaultSLAExpiry(jobQueue, value);
|
||||
break;
|
||||
default:
|
||||
throw new Exception("Invalid Update Key");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Invalid Job Queue Id");
|
||||
}
|
||||
if (redirect.HasValue && redirect.Value)
|
||||
return RedirectToAction(MVC.Config.JobQueue.Index(jobQueue.Id));
|
||||
else
|
||||
return Json("OK", JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (redirect.HasValue && redirect.Value)
|
||||
throw;
|
||||
else
|
||||
return Json(string.Format("Error: {0}", ex.Message), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
}
|
||||
|
||||
#region Update Shortcut Methods
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult UpdateName(int id, string QueueName = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
return Update(id, pName, QueueName, redirect);
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult UpdateDescription(int id, string Description = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
return Update(id, pDescription, Description, redirect);
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult UpdatePriority(int id, string Priority = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
return Update(id, pPriority, Priority, redirect);
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult UpdateDefaultSLAExpiry(int id, string DefaultSLAExpiry = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
return Update(id, pDefaultSLAExpiry, DefaultSLAExpiry, redirect);
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult UpdateIcon(int id, string Icon = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
return Update(id, pIcon, Icon, redirect);
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult UpdateIconColour(int id, string IconColour = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
return Update(id, pIconColour, IconColour, redirect);
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult UpdateIconAndColour(int id, string Icon = null, string IconColour = null, bool redirect = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (id < 0)
|
||||
throw new ArgumentOutOfRangeException("id");
|
||||
|
||||
var jobQueue = Database.JobQueues.Find(id);
|
||||
if (jobQueue != null)
|
||||
{
|
||||
UpdateIconAndColour(jobQueue, Icon, IconColour);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Json("Invalid Job Queue Id", JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
if (redirect)
|
||||
return RedirectToAction(MVC.Config.JobQueue.Index(jobQueue.Id));
|
||||
else
|
||||
return Json("OK", JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (redirect)
|
||||
throw;
|
||||
else
|
||||
return Json(string.Format("Error: {0}", ex.Message), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult UpdateSubjects(int id, string[] Subjects = null, bool redirect = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (id < 0)
|
||||
throw new ArgumentOutOfRangeException("id");
|
||||
|
||||
var jobQueue = Database.JobQueues.Find(id);
|
||||
if (jobQueue != null)
|
||||
{
|
||||
UpdateSubjects(jobQueue, Subjects);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Json("Invalid Job Queue Id", JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
if (redirect)
|
||||
return RedirectToAction(MVC.Config.JobQueue.Index(jobQueue.Id));
|
||||
else
|
||||
return Json("OK", JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (redirect)
|
||||
throw;
|
||||
else
|
||||
return Json(string.Format("Error: {0}", ex.Message), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult UpdateJobSubTypes(int id, List<string> JobSubTypes = null, bool redirect = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
var jobQueue = Database.JobQueues.Find(id);
|
||||
if (jobQueue != null)
|
||||
{
|
||||
UpdateJobSubTypes(jobQueue, JobSubTypes);
|
||||
}
|
||||
else
|
||||
{
|
||||
return Json("Invalid Job Queue Id", JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
|
||||
if (redirect)
|
||||
return RedirectToAction(MVC.Config.JobQueue.Index(jobQueue.Id));
|
||||
else
|
||||
return Json("OK", JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (redirect)
|
||||
throw;
|
||||
else
|
||||
return Json(string.Format("Error: {0}", ex.Message), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Update Properties
|
||||
private void UpdateIconAndColour(JobQueue jobQueue, string Icon, string IconColour)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(Icon))
|
||||
throw new ArgumentNullException("Icon");
|
||||
if (string.IsNullOrWhiteSpace(IconColour))
|
||||
throw new ArgumentNullException("IconColour");
|
||||
|
||||
jobQueue.Icon = Icon;
|
||||
jobQueue.IconColour = IconColour;
|
||||
JobQueueService.UpdateJobQueue(Database, jobQueue);
|
||||
}
|
||||
private void UpdateIcon(JobQueue jobQueue, string Icon)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(Icon))
|
||||
throw new ArgumentNullException("Icon");
|
||||
|
||||
jobQueue.Icon = Icon;
|
||||
JobQueueService.UpdateJobQueue(Database, jobQueue);
|
||||
}
|
||||
private void UpdateIconColour(JobQueue jobQueue, string IconColour)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(IconColour))
|
||||
throw new ArgumentNullException("IconColour");
|
||||
|
||||
jobQueue.IconColour = IconColour;
|
||||
JobQueueService.UpdateJobQueue(Database, jobQueue);
|
||||
}
|
||||
|
||||
private void UpdateName(JobQueue jobQueue, string Name)
|
||||
{
|
||||
jobQueue.Name = Name;
|
||||
JobQueueService.UpdateJobQueue(Database, jobQueue);
|
||||
}
|
||||
|
||||
private void UpdateDescription(JobQueue jobQueue, string Description)
|
||||
{
|
||||
jobQueue.Description = Description;
|
||||
JobQueueService.UpdateJobQueue(Database, jobQueue);
|
||||
}
|
||||
|
||||
private void UpdatePriority(JobQueue jobQueue, string Priority)
|
||||
{
|
||||
JobQueuePriority priority;
|
||||
|
||||
if (!Enum.TryParse<JobQueuePriority>(Priority, out priority))
|
||||
throw new ArgumentException("Invalid Priority Value", "Priority");
|
||||
|
||||
jobQueue.Priority = priority;
|
||||
JobQueueService.UpdateJobQueue(Database, jobQueue);
|
||||
}
|
||||
|
||||
private void UpdateDefaultSLAExpiry(JobQueue jobQueue, string DefaultSLAExpiry)
|
||||
{
|
||||
int? defaultSLAExpiry = null;
|
||||
|
||||
if (!string.IsNullOrEmpty(DefaultSLAExpiry))
|
||||
{
|
||||
int intValue;
|
||||
|
||||
if (!int.TryParse(DefaultSLAExpiry, out intValue))
|
||||
throw new ArgumentException("Invalid Default SLA Expiry Value", "DefaultSLAPriority");
|
||||
|
||||
if (intValue < 0)
|
||||
throw new ArgumentException("Default SLA Expiry Value must be greater than zero", "DefaultSLAPriority");
|
||||
|
||||
// if intValue == 0, then no SLA.
|
||||
if (intValue > 0)
|
||||
defaultSLAExpiry = intValue;
|
||||
}
|
||||
|
||||
jobQueue.DefaultSLAExpiry = defaultSLAExpiry;
|
||||
JobQueueService.UpdateJobQueue(Database, jobQueue);
|
||||
}
|
||||
|
||||
private void UpdateSubjects(JobQueue jobQueue, string[] Subjects)
|
||||
{
|
||||
string subjectIds = null;
|
||||
|
||||
// Validate Subjects
|
||||
if (Subjects != null && Subjects.Length > 0)
|
||||
{
|
||||
var subjects = Subjects.Where(s => !string.IsNullOrWhiteSpace(s)).Select(s => s.Trim()).Select(s => new Tuple<string, IActiveDirectoryObject>(s, ActiveDirectory.GetObject(s))).ToList();
|
||||
var invalidSubjects = subjects.Where(s => s.Item2 == null).ToList();
|
||||
|
||||
if (invalidSubjects.Count > 0)
|
||||
throw new ArgumentException(string.Format("Subjects not found: {0}", string.Join(", ", invalidSubjects)), "Subjects");
|
||||
|
||||
var proposedSubjects = subjects.Select(s => s.Item2.SamAccountName).OrderBy(s => s).ToArray();
|
||||
|
||||
subjectIds = string.Join(",", proposedSubjects);
|
||||
|
||||
if (string.IsNullOrEmpty(subjectIds))
|
||||
subjectIds = null;
|
||||
}
|
||||
|
||||
if (jobQueue.SubjectIds != subjectIds)
|
||||
{
|
||||
jobQueue.SubjectIds = subjectIds;
|
||||
JobQueueService.UpdateJobQueue(Database, jobQueue);
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateJobSubTypes(Disco.Models.Repository.JobQueue jobQueue, List<string> JobSubTypes)
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
|
||||
// Remove All Existing
|
||||
if (jobQueue.JobSubTypes != null)
|
||||
{
|
||||
foreach (var st in jobQueue.JobSubTypes.ToArray())
|
||||
jobQueue.JobSubTypes.Remove(st);
|
||||
}
|
||||
|
||||
// Add New
|
||||
if (JobSubTypes != null && JobSubTypes.Count > 0)
|
||||
{
|
||||
var subTypes = new List<Disco.Models.Repository.JobSubType>();
|
||||
foreach (var stId in JobSubTypes)
|
||||
{
|
||||
var typeId = stId.Substring(0, stId.IndexOf("_"));
|
||||
var subTypeId = stId.Substring(stId.IndexOf("_") + 1);
|
||||
var subType = Database.JobSubTypes.FirstOrDefault(jst => jst.JobTypeId == typeId && jst.Id == subTypeId);
|
||||
subTypes.Add(subType);
|
||||
}
|
||||
jobQueue.JobSubTypes = subTypes;
|
||||
}
|
||||
Database.SaveChanges();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Actions
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Delete)]
|
||||
public virtual ActionResult Delete(int id, Nullable<bool> redirect = false)
|
||||
{
|
||||
try
|
||||
{
|
||||
var jq = Database.JobQueues.Find(id);
|
||||
if (jq != null)
|
||||
{
|
||||
|
||||
var status = JobQueueDeleteTask.ScheduleNow(id);
|
||||
status.SetFinishedUrl(Url.Action(MVC.Config.JobQueue.Index(null)));
|
||||
|
||||
if (redirect.HasValue && redirect.Value)
|
||||
return RedirectToAction(MVC.Config.Logging.TaskStatus(status.SessionId));
|
||||
else
|
||||
return Json("OK", JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
throw new Exception("Invalid Job Queue Id");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (redirect.HasValue && redirect.Value)
|
||||
throw;
|
||||
else
|
||||
return Json(string.Format("Error: {0}", ex.Message), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult SearchSubjects(string term)
|
||||
{
|
||||
var groupResults = BI.Interop.ActiveDirectory.ActiveDirectory.SearchGroups(term).Cast<IActiveDirectoryObject>();
|
||||
var userResults = BI.Interop.ActiveDirectory.ActiveDirectory.SearchUsers(term).Cast<IActiveDirectoryObject>();
|
||||
|
||||
var results = groupResults.Concat(userResults).OrderBy(r => r.SamAccountName)
|
||||
.Select(r => Models.JobQueue.SubjectItem.FromActiveDirectoryObject(r)).ToList();
|
||||
|
||||
return Json(results, JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult Subject(string Id)
|
||||
{
|
||||
var subject = ActiveDirectory.GetObject(Id);
|
||||
|
||||
if (subject == null || !(subject is ActiveDirectoryUserAccount || subject is ActiveDirectoryGroup))
|
||||
return Json(null, JsonRequestBehavior.AllowGet);
|
||||
else
|
||||
return Json(Models.JobQueue.SubjectItem.FromActiveDirectoryObject(subject), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,234 @@
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Jobs.JobQueues;
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.Services.Web;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace Disco.Web.Areas.API.Controllers
|
||||
{
|
||||
public partial class JobQueueJobController : AuthorizedDatabaseController
|
||||
{
|
||||
const string pAddedComment = "addedcomment";
|
||||
const string pRemovedComment = "removedcomment";
|
||||
const string pSla = "sla";
|
||||
const string pPriority = "priority";
|
||||
|
||||
public virtual ActionResult Update(int id, string key, string value = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (id < 0)
|
||||
throw new ArgumentOutOfRangeException("id");
|
||||
if (string.IsNullOrEmpty(key))
|
||||
throw new ArgumentNullException("key");
|
||||
var jobQueueJob = Database.JobQueueJobs.Include("Job").FirstOrDefault(jqj => jqj.Id == id);
|
||||
if (jobQueueJob != null)
|
||||
{
|
||||
switch (key.ToLower())
|
||||
{
|
||||
case pAddedComment:
|
||||
UpdateAddedComment(jobQueueJob, value);
|
||||
break;
|
||||
case pRemovedComment:
|
||||
UpdateRemovedComment(jobQueueJob, value);
|
||||
break;
|
||||
case pSla:
|
||||
UpdateSla(jobQueueJob, value);
|
||||
break;
|
||||
case pPriority:
|
||||
UpdatePriority(jobQueueJob, value);
|
||||
break;
|
||||
default:
|
||||
throw new Exception("Invalid Update Key");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Invalid Job Queue Job Id");
|
||||
}
|
||||
if (redirect.HasValue && redirect.Value)
|
||||
return Redirect(string.Format("{0}#jobDetailTab-Queues", Url.Action(MVC.Job.Show(jobQueueJob.JobId))));
|
||||
else
|
||||
return Json("OK", JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (redirect.HasValue && redirect.Value)
|
||||
throw;
|
||||
else
|
||||
return Json(string.Format("Error: {0}", ex.Message), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
}
|
||||
|
||||
#region Update Shortcut Methods
|
||||
[DiscoAuthorizeAny(Claims.Job.Properties.JobQueueProperties.EditAnyComments, Claims.Job.Properties.JobQueueProperties.EditOwnComments)]
|
||||
public virtual ActionResult UpdateAddedComment(int id, string AddedComment = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
return Update(id, pAddedComment, AddedComment, redirect);
|
||||
}
|
||||
[DiscoAuthorizeAny(Claims.Job.Properties.JobQueueProperties.EditAnyComments, Claims.Job.Properties.JobQueueProperties.EditOwnComments)]
|
||||
public virtual ActionResult UpdateRemovedComment(int id, string RemovedComment = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
return Update(id, pRemovedComment, RemovedComment, redirect);
|
||||
}
|
||||
[DiscoAuthorizeAny(Claims.Job.Properties.JobQueueProperties.EditAnySLA, Claims.Job.Properties.JobQueueProperties.EditOwnSLA)]
|
||||
public virtual ActionResult UpdateSla(int id, string SLA = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
return Update(id, pSla, SLA, redirect);
|
||||
}
|
||||
[DiscoAuthorizeAny(Claims.Job.Properties.JobQueueProperties.EditAnyPriority, Claims.Job.Properties.JobQueueProperties.EditOwnPriority)]
|
||||
public virtual ActionResult UpdatePriority(int id, string Priority = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
return Update(id, pPriority, Priority, redirect);
|
||||
}
|
||||
[DiscoAuthorizeAny(Claims.Job.Properties.JobQueueProperties.EditAnySLA, Claims.Job.Properties.JobQueueProperties.EditOwnSLA,
|
||||
Claims.Job.Properties.JobQueueProperties.EditAnyPriority, Claims.Job.Properties.JobQueueProperties.EditOwnPriority)]
|
||||
public virtual ActionResult UpdateSlaAndPriority(int id, string Sla = null, string Priority = null, Nullable<bool> redirect = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (id < 0)
|
||||
throw new ArgumentOutOfRangeException("id");
|
||||
|
||||
var jobQueueJob = Database.JobQueueJobs.Include("Job").FirstOrDefault(jqj => jqj.Id == id);
|
||||
if (jobQueueJob != null)
|
||||
{
|
||||
UpdateSla(jobQueueJob, Sla);
|
||||
UpdatePriority(jobQueueJob, Priority);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Exception("Invalid Job Queue Job Id");
|
||||
}
|
||||
if (redirect.HasValue && redirect.Value)
|
||||
return Redirect(string.Format("{0}#jobDetailTab-Queues", Url.Action(MVC.Job.Show(jobQueueJob.JobId))));
|
||||
else
|
||||
return Json("OK", JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (redirect.HasValue && redirect.Value)
|
||||
throw;
|
||||
else
|
||||
return Json(string.Format("Error: {0}", ex.Message), JsonRequestBehavior.AllowGet);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Update Properties
|
||||
private void UpdateAddedComment(JobQueueJob jobQueueJob, string AddedComment)
|
||||
{
|
||||
if (!jobQueueJob.CanEditAddedComment())
|
||||
throw new InvalidOperationException("Editing added comment for job queue job is Denied");
|
||||
|
||||
jobQueueJob.OnEditAddedComment(AddedComment);
|
||||
Database.SaveChanges();
|
||||
}
|
||||
private void UpdateRemovedComment(JobQueueJob jobQueueJob, string RemovedComment)
|
||||
{
|
||||
if (!jobQueueJob.CanEditRemovedComment())
|
||||
throw new InvalidOperationException("Editing removed comment for job queue job is Denied");
|
||||
|
||||
jobQueueJob.OnEditRemovedComment(RemovedComment);
|
||||
Database.SaveChanges();
|
||||
}
|
||||
private void UpdateSla(JobQueueJob jobQueueJob, string Sla)
|
||||
{
|
||||
if (!jobQueueJob.CanEditSla())
|
||||
throw new InvalidOperationException("Editing SLA for job queue job is Denied");
|
||||
|
||||
if (!string.IsNullOrEmpty(Sla))
|
||||
{
|
||||
DateTime SLADate;
|
||||
if (DateTime.TryParse(Sla, out SLADate))
|
||||
{
|
||||
jobQueueJob.OnEditSla(SLADate);
|
||||
Database.SaveChanges();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ArgumentException("Unable to Parse SLA Date", "SLA");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
jobQueueJob.OnEditSla(null);
|
||||
Database.SaveChanges();
|
||||
}
|
||||
}
|
||||
private void UpdatePriority(JobQueueJob jobQueueJob, string Priority)
|
||||
{
|
||||
if (!jobQueueJob.CanEditPriority())
|
||||
throw new InvalidOperationException("Editing Priority for job queue job is Denied");
|
||||
|
||||
JobQueuePriority priority;
|
||||
|
||||
if (!Enum.TryParse<JobQueuePriority>(Priority, out priority))
|
||||
throw new ArgumentException("Invalid Priority Value", "Priority");
|
||||
|
||||
jobQueueJob.OnEditPriority(priority);
|
||||
Database.SaveChanges();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Actions
|
||||
|
||||
[DiscoAuthorizeAny(Claims.Job.Actions.AddAnyQueues, Claims.Job.Actions.AddOwnQueues)]
|
||||
public virtual ActionResult AddJob(int id, int JobId, string Comment, int? SLAExpiresMinutes, JobQueuePriority Priority)
|
||||
{
|
||||
DateTime? SLAExpires = (SLAExpiresMinutes.HasValue && SLAExpiresMinutes.Value > 0) ? DateTime.Now.AddMinutes(SLAExpiresMinutes.Value) : (DateTime?)null;
|
||||
|
||||
var jobQueueToken = JobQueueService.GetQueue(id);
|
||||
if (jobQueueToken == null)
|
||||
throw new ArgumentException("Invalid Job Queue Id", "id");
|
||||
|
||||
var job = Database.Jobs.Include("JobQueues").FirstOrDefault(j => j.Id == JobId);
|
||||
if (job == null)
|
||||
throw new ArgumentException("Invalid Job Id", "JobId");
|
||||
|
||||
if (!job.CanAddQueue(jobQueueToken.JobQueue))
|
||||
throw new InvalidOperationException("Adding job to queue is Denied");
|
||||
|
||||
var jobQueueJob = job.OnAddQueue(Database, jobQueueToken.JobQueue, CurrentUser, Comment, SLAExpires, Priority);
|
||||
Database.SaveChanges();
|
||||
|
||||
return Redirect(string.Format("{0}#jobDetailTab-Queues", Url.Action(MVC.Job.Show(job.Id))));
|
||||
}
|
||||
|
||||
[DiscoAuthorizeAny(Claims.Job.Actions.RemoveAnyQueues, Claims.Job.Actions.RemoveOwnQueues)]
|
||||
public virtual ActionResult RemoveJob(int id, string Comment, bool? CloseJob = null)
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
|
||||
var jobQueueJob = Database.JobQueueJobs.Find(id);
|
||||
if (jobQueueJob == null)
|
||||
throw new ArgumentException("Invalid Job Queue Job Id", "id");
|
||||
|
||||
if (!jobQueueJob.CanRemove())
|
||||
throw new InvalidOperationException("Removing job from queue is Denied");
|
||||
|
||||
var job = Database.Jobs.Find(jobQueueJob.JobId);
|
||||
if (job == null)
|
||||
throw new ArgumentException("Invalid Job Id", "JobId");
|
||||
|
||||
jobQueueJob.OnRemove(CurrentUser, Comment);
|
||||
Database.SaveChanges();
|
||||
|
||||
if (CloseJob.HasValue && CloseJob.Value && job.CanCloseNormally())
|
||||
{
|
||||
job.OnCloseNormally(CurrentUser);
|
||||
Database.SaveChanges();
|
||||
}
|
||||
|
||||
return Redirect(string.Format("{0}#jobDetailTab-Queues", Url.Action(MVC.Job.Show(job.Id))));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using Disco.Models.BI.Search;
|
||||
using Disco.Models.Services.Jobs.JobLists;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
@@ -18,7 +20,7 @@ namespace Disco.Web.Areas.API.Models.DocumentTemplate
|
||||
label = string.Format("{0} - {1} - {2}", item.SerialNumber, item.ComputerName, item.DeviceModelDescription)
|
||||
};
|
||||
}
|
||||
public static ImporterUndetectedDataIdLookupModel FromSearchResultItem(Disco.Models.BI.Job.JobTableModel.JobTableItemModel item)
|
||||
public static ImporterUndetectedDataIdLookupModel FromSearchResultItem(JobTableItemModel item)
|
||||
{
|
||||
return new ImporterUndetectedDataIdLookupModel
|
||||
{
|
||||
@@ -26,7 +28,7 @@ namespace Disco.Web.Areas.API.Models.DocumentTemplate
|
||||
label = string.Format("{0} ({1}; {2})", item.Id, item.DeviceSerialNumber, item.UserDisplayName)
|
||||
};
|
||||
}
|
||||
public static ImporterUndetectedDataIdLookupModel FromSearchResultItem(Disco.Models.BI.Search.UserSearchResultItem item)
|
||||
public static ImporterUndetectedDataIdLookupModel FromSearchResultItem(UserSearchResultItem item)
|
||||
{
|
||||
return new ImporterUndetectedDataIdLookupModel
|
||||
{
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
using Disco.Models.Interop.ActiveDirectory;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
|
||||
namespace Disco.Web.Areas.API.Models.JobQueue
|
||||
{
|
||||
public class SubjectItem
|
||||
{
|
||||
public string Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Type { get; set; }
|
||||
|
||||
public static SubjectItem FromActiveDirectoryObject(IActiveDirectoryObject ADObject)
|
||||
{
|
||||
return new Models.JobQueue.SubjectItem()
|
||||
{
|
||||
Id = ADObject.SamAccountName,
|
||||
Name = ADObject.Name,
|
||||
Type = ADObject is ActiveDirectoryGroup ? "group" : "user"
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -104,6 +104,16 @@ namespace Disco.Web.Areas.Config
|
||||
"Config/AuthorizationRole/{id}",
|
||||
new { controller = "AuthorizationRole", action = "Index", id = UrlParameter.Optional }
|
||||
);
|
||||
context.MapRoute(
|
||||
"Config_JobQueue_Create",
|
||||
"Config/JobQueue/Create",
|
||||
new { controller = "JobQueue", action = "Create", id = UrlParameter.Optional }
|
||||
);
|
||||
context.MapRoute(
|
||||
"Config_JobQueue",
|
||||
"Config/JobQueue/{id}",
|
||||
new { controller = "JobQueue", action = "Index", id = UrlParameter.Optional }
|
||||
);
|
||||
|
||||
context.MapRoute(
|
||||
"Config_Plugins",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Disco.Models.Authorization;
|
||||
using Disco.Models.Services.Authorization;
|
||||
using Disco.Models.UI.Config.AuthorizationRole;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Authorization.Roles;
|
||||
@@ -92,7 +92,7 @@ namespace Disco.Web.Areas.Config.Controllers
|
||||
}
|
||||
else
|
||||
{
|
||||
ModelState.AddModelError("Name", "Am Authorization Role with this name already exists.");
|
||||
ModelState.AddModelError("Name", "An Authorization Role with this name already exists.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace Disco.Web.Areas.Config.Controllers
|
||||
{
|
||||
var m = new Models.DocumentTemplate.ShowModel()
|
||||
{
|
||||
DocumentTemplate = Database.DocumentTemplates.Include("JobSubTypes").Where(at => at.Id == id).FirstOrDefault()
|
||||
DocumentTemplate = Database.DocumentTemplates.Include("JobSubTypes").FirstOrDefault(at => at.Id == id)
|
||||
};
|
||||
m.TemplateExpressions = m.DocumentTemplate.ExtractPdfExpressions(Database);
|
||||
m.UpdateModel(Database);
|
||||
|
||||
@@ -0,0 +1,121 @@
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Models.Services.Jobs.JobQueues;
|
||||
using Disco.Models.UI.Config.JobQueue;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Jobs.JobQueues;
|
||||
using Disco.Services.Plugins.Features.UIExtension;
|
||||
using Disco.Services.Web;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace Disco.Web.Areas.Config.Controllers
|
||||
{
|
||||
public partial class JobQueueController : AuthorizedDatabaseController
|
||||
{
|
||||
[DiscoAuthorize(Claims.Config.JobQueue.Show)]
|
||||
public virtual ActionResult Index(int? id)
|
||||
{
|
||||
if (id.HasValue)
|
||||
{
|
||||
// Show
|
||||
var jq = Database.JobQueues.Include("JobSubTypes").FirstOrDefault(q => q.Id == id.Value);
|
||||
|
||||
if (jq == null)
|
||||
throw new ArgumentException("Invalid Job Queue Id");
|
||||
|
||||
var token = JobQueueToken.FromJobQueue(jq);
|
||||
var subjects = token.SubjectIds == null ? new List<Models.JobQueue.ShowModel.SubjectDescriptor>() :
|
||||
token.SubjectIds.Select(subjectId => Disco.BI.Interop.ActiveDirectory.ActiveDirectory.GetObject(subjectId))
|
||||
.Where(item => item != null)
|
||||
.Select(item => Models.JobQueue.ShowModel.SubjectDescriptor.FromActiveDirectoryObject(item))
|
||||
.OrderBy(item => item.Name).ToList();
|
||||
|
||||
var totalJobCount = Database.JobQueueJobs.Where(jqj => jqj.JobQueueId == id.Value).Select(jqj => jqj.Job).Distinct().Count();
|
||||
var openJobCount = Database.JobQueueJobs.Count(jqj => jqj.JobQueueId == id.Value && !jqj.RemovedDate.HasValue);
|
||||
|
||||
var m = new Models.JobQueue.ShowModel()
|
||||
{
|
||||
Token = token,
|
||||
Subjects = subjects,
|
||||
TotalJobCount = totalJobCount,
|
||||
OpenJobCount = openJobCount,
|
||||
CanDelete = openJobCount == 0
|
||||
};
|
||||
|
||||
if (Authorization.Has(Claims.Config.JobQueue.Configure))
|
||||
{
|
||||
m.JobTypes = Database.JobTypes.Include("JobSubTypes").ToList();
|
||||
}
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<ConfigJobQueueShowModel>(this.ControllerContext, m);
|
||||
|
||||
return View(MVC.Config.JobQueue.Views.Show, m);
|
||||
}
|
||||
else
|
||||
{
|
||||
// List Index
|
||||
var jqs = Database.JobQueues.ToList()
|
||||
.Select(jq => JobQueueToken.FromJobQueue(jq)).Cast<IJobQueueToken>().ToList();
|
||||
|
||||
var m = new Models.JobQueue.IndexModel()
|
||||
{
|
||||
Tokens = jqs
|
||||
};
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<ConfigJobQueueIndexModel>(this.ControllerContext, m);
|
||||
|
||||
return View(m);
|
||||
}
|
||||
}
|
||||
|
||||
[DiscoAuthorizeAll(Claims.Config.JobQueue.Create, Claims.Config.JobQueue.Configure)]
|
||||
public virtual ActionResult Create()
|
||||
{
|
||||
// Default Queue
|
||||
var m = new Models.JobQueue.CreateModel()
|
||||
{
|
||||
JobQueue = new Disco.Models.Repository.JobQueue()
|
||||
{
|
||||
Icon = JobQueueService.RandomIcon(),
|
||||
IconColour = JobQueueService.RandomIconColour(),
|
||||
Priority = JobQueuePriority.Normal
|
||||
}
|
||||
};
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<ConfigJobQueueCreateModel>(this.ControllerContext, m);
|
||||
|
||||
return View(m);
|
||||
}
|
||||
|
||||
[DiscoAuthorizeAll(Claims.Config.JobQueue.Create, Claims.Config.JobQueue.Configure), HttpPost]
|
||||
public virtual ActionResult Create(Models.JobQueue.CreateModel model)
|
||||
{
|
||||
if (ModelState.IsValid)
|
||||
{
|
||||
// Check for Existing
|
||||
var existing = Database.JobQueues.Where(m => m.Name == model.JobQueue.Name).FirstOrDefault();
|
||||
if (existing == null)
|
||||
{
|
||||
var token = JobQueueService.CreateJobQueue(Database, model.JobQueue);
|
||||
|
||||
return RedirectToAction(MVC.Config.JobQueue.Index(token.JobQueue.Id));
|
||||
}
|
||||
else
|
||||
{
|
||||
ModelState.AddModelError("Name", "A Job Queue with this name already exists.");
|
||||
}
|
||||
}
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<ConfigJobQueueCreateModel>(this.ControllerContext, model);
|
||||
|
||||
return View(model);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ using System.Linq;
|
||||
using System.Web;
|
||||
using Disco.Data.Repository;
|
||||
using Disco.Models.UI.Config.AuthorizationRole;
|
||||
using Disco.Models.Authorization;
|
||||
using Disco.Models.Services.Authorization;
|
||||
|
||||
namespace Disco.Web.Areas.Config.Models.AuthorizationRole
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Disco.Models.Authorization;
|
||||
using Disco.Models.Services.Authorization;
|
||||
using Disco.Models.Interop.ActiveDirectory;
|
||||
using Disco.Models.UI.Config.AuthorizationRole;
|
||||
using Disco.Web.Models.Shared;
|
||||
|
||||
@@ -16,17 +16,7 @@ namespace Disco.Web.Areas.Config.Models.DocumentTemplate
|
||||
|
||||
public List<Disco.BI.Expressions.Expression> TemplateExpressions { get; set; }
|
||||
|
||||
public List<string> Types { get; set; }
|
||||
public List<string> SubTypes { get; set; }
|
||||
|
||||
public List<Disco.Models.Repository.JobType> JobTypes { get; set; }
|
||||
public List<Disco.Models.Repository.JobSubType> JobSubTypes { get; set; }
|
||||
|
||||
public ShowModel()
|
||||
{
|
||||
this.Types = new List<string>();
|
||||
this.SubTypes = new List<string>();
|
||||
}
|
||||
|
||||
public List<string> Scopes
|
||||
{
|
||||
@@ -53,23 +43,7 @@ namespace Disco.Web.Areas.Config.Models.DocumentTemplate
|
||||
}
|
||||
|
||||
if (this.JobTypes == null)
|
||||
JobTypes = Database.JobTypes.ToList();
|
||||
if (this.JobSubTypes == null)
|
||||
JobSubTypes = Database.JobSubTypes.ToList();
|
||||
|
||||
if (DocumentTemplate != null)
|
||||
{
|
||||
if (DocumentTemplate.JobSubTypes != null)
|
||||
{
|
||||
foreach (var jst in DocumentTemplate.JobSubTypes)
|
||||
{
|
||||
if (!Types.Contains(jst.JobTypeId))
|
||||
Types.Add(jst.JobTypeId);
|
||||
SubTypes.Add(string.Format("{0}_{1}", jst.JobTypeId, jst.Id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
JobTypes = Database.JobTypes.Include("JobSubTypes").ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using Disco.Models.UI.Config.JobQueue;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
|
||||
namespace Disco.Web.Areas.Config.Models.JobQueue
|
||||
{
|
||||
public class CreateModel : ConfigJobQueueCreateModel
|
||||
{
|
||||
public Disco.Models.Repository.JobQueue JobQueue { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using Disco.Models.Services.Jobs.JobQueues;
|
||||
using Disco.Models.UI.Config.JobQueue;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
|
||||
namespace Disco.Web.Areas.Config.Models.JobQueue
|
||||
{
|
||||
public class IndexModel : ConfigJobQueueIndexModel
|
||||
{
|
||||
public List<IJobQueueToken> Tokens { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
using Disco.Models.Interop.ActiveDirectory;
|
||||
using Disco.Models.Services.Jobs.JobQueues;
|
||||
using Disco.Models.UI.Config.JobQueue;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
|
||||
namespace Disco.Web.Areas.Config.Models.JobQueue
|
||||
{
|
||||
public class ShowModel : ConfigJobQueueShowModel
|
||||
{
|
||||
public IJobQueueToken Token { get; set; }
|
||||
|
||||
public List<SubjectDescriptor> Subjects { get; set; }
|
||||
|
||||
public class SubjectDescriptor
|
||||
{
|
||||
public bool IsGroup { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Id { get; set; }
|
||||
|
||||
public static SubjectDescriptor FromActiveDirectoryObject(IActiveDirectoryObject ADObject)
|
||||
{
|
||||
var item = new SubjectDescriptor()
|
||||
{
|
||||
Id = ADObject.SamAccountName,
|
||||
Name = ADObject.Name
|
||||
};
|
||||
|
||||
if (ADObject is ActiveDirectoryGroup)
|
||||
item.IsGroup = true;
|
||||
|
||||
return item;
|
||||
}
|
||||
}
|
||||
|
||||
public int OpenJobCount { get; set; }
|
||||
public int TotalJobCount { get; set; }
|
||||
|
||||
public List<Disco.Models.Repository.JobType> JobTypes { get; set; }
|
||||
|
||||
public bool CanDelete { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
@model Disco.Web.Areas.Config.Models.AuthorizationRole.ShowModel
|
||||
@using Disco.Models.Authorization;
|
||||
@using Disco.Models.Services.Authorization;
|
||||
@{
|
||||
Authorization.Require(Claims.DiscoAdminAccount);
|
||||
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Authorization Roles", MVC.Config.AuthorizationRole.Index(null), Model.Token.Role.Name);
|
||||
|
||||
@@ -28,13 +28,13 @@ namespace Disco.Web.Areas.Config.Views.AuthorizationRole
|
||||
using System.Web.WebPages;
|
||||
using Disco;
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.Models.Repository;
|
||||
|
||||
#line 2 "..\..\Areas\Config\Views\AuthorizationRole\Show.cshtml"
|
||||
using Disco.Models.Authorization;
|
||||
using Disco.Models.Services.Authorization;
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Web;
|
||||
using Disco.Web;
|
||||
@@ -190,14 +190,14 @@ WriteLiteral(">\r\n");
|
||||
#line hidden
|
||||
WriteLiteral(" <li");
|
||||
|
||||
WriteAttribute("class", Tuple.Create(" class=\"", 2187), Tuple.Create("\"", 2227)
|
||||
WriteAttribute("class", Tuple.Create(" class=\"", 2196), Tuple.Create("\"", 2236)
|
||||
|
||||
#line 51 "..\..\Areas\Config\Views\AuthorizationRole\Show.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 2195), Tuple.Create<System.Object, System.Int32>(sg.IsGroup ? "group" : "user"
|
||||
, Tuple.Create(Tuple.Create("", 2204), Tuple.Create<System.Object, System.Int32>(sg.IsGroup ? "group" : "user"
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 2195), false)
|
||||
, 2204), false)
|
||||
);
|
||||
|
||||
WriteLiteral(">");
|
||||
@@ -241,15 +241,15 @@ WriteLiteral("></i>");
|
||||
#line hidden
|
||||
WriteLiteral(" <a");
|
||||
|
||||
WriteAttribute("href", Tuple.Create(" href=\"", 2757), Tuple.Create("\"", 2827)
|
||||
WriteAttribute("href", Tuple.Create(" href=\"", 2766), Tuple.Create("\"", 2836)
|
||||
|
||||
#line 57 "..\..\Areas\Config\Views\AuthorizationRole\Show.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 2764), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.User.Show(sg.Id))
|
||||
, Tuple.Create(Tuple.Create("", 2773), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.User.Show(sg.Id))
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 2764), false)
|
||||
, Tuple.Create(Tuple.Create("", 2799), Tuple.Create("#UserDetailTab-Authorization", 2799), true)
|
||||
, 2773), false)
|
||||
, Tuple.Create(Tuple.Create("", 2808), Tuple.Create("#UserDetailTab-Authorization", 2808), true)
|
||||
);
|
||||
|
||||
WriteLiteral("><i");
|
||||
@@ -342,14 +342,14 @@ WriteLiteral(">\r\n");
|
||||
#line hidden
|
||||
WriteLiteral(" <li");
|
||||
|
||||
WriteAttribute("class", Tuple.Create(" class=\"", 3878), Tuple.Create("\"", 3918)
|
||||
WriteAttribute("class", Tuple.Create(" class=\"", 3887), Tuple.Create("\"", 3927)
|
||||
|
||||
#line 71 "..\..\Areas\Config\Views\AuthorizationRole\Show.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 3886), Tuple.Create<System.Object, System.Int32>(sg.IsGroup ? "group" : "user"
|
||||
, Tuple.Create(Tuple.Create("", 3895), Tuple.Create<System.Object, System.Int32>(sg.IsGroup ? "group" : "user"
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 3886), false)
|
||||
, 3895), false)
|
||||
);
|
||||
|
||||
WriteLiteral(" data-subjectid=\"");
|
||||
@@ -464,14 +464,14 @@ WriteLiteral(">Add</a>\r\n </div>\r\n
|
||||
|
||||
WriteLiteral(" id=\"Config_AuthRoles_Subjects_Update_Dialog_Form\"");
|
||||
|
||||
WriteAttribute("action", Tuple.Create(" action=\"", 5163), Tuple.Create("\"", 5260)
|
||||
WriteAttribute("action", Tuple.Create(" action=\"", 5172), Tuple.Create("\"", 5269)
|
||||
|
||||
#line 86 "..\..\Areas\Config\Views\AuthorizationRole\Show.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 5172), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.AuthorizationRole.UpdateSubjects(Model.Token.Role.Id, null, true))
|
||||
, Tuple.Create(Tuple.Create("", 5181), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.AuthorizationRole.UpdateSubjects(Model.Token.Role.Id, null, true))
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 5172), false)
|
||||
, 5181), false)
|
||||
);
|
||||
|
||||
WriteLiteral(" method=\"post\"");
|
||||
|
||||
@@ -78,10 +78,10 @@
|
||||
</div>
|
||||
</td>
|
||||
}
|
||||
@if (Authorization.HasAny(Claims.Config.JobPreferences.Show, Claims.Config.DocumentTemplate.Show, Claims.Config.Plugin.Show))
|
||||
@if (Authorization.HasAny(Claims.Config.JobPreferences.Show, Claims.Config.JobQueue.Show, Claims.Config.DocumentTemplate.Show, Claims.Config.Plugin.Show))
|
||||
{
|
||||
<td>
|
||||
@if (Authorization.HasAny(Claims.Config.JobPreferences.Show))
|
||||
@if (Authorization.HasAny(Claims.Config.JobPreferences.Show, Claims.Config.JobQueue.Show))
|
||||
{
|
||||
<div class="pageMenuArea noSeperator">
|
||||
<h2>Jobs</h2>
|
||||
@@ -92,6 +92,13 @@
|
||||
Configure general preferences related to jobs.
|
||||
</div>
|
||||
}
|
||||
@if (Authorization.Has(Claims.Config.JobQueue.Show))
|
||||
{
|
||||
<i class="fa fa-cog"></i>@Html.ActionLinkClass("Job Queues", MVC.Config.JobQueue.Index(), "config")
|
||||
<div class="pageMenuBlurb">
|
||||
Create and manage job queues including priorities and queue members.
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
@@ -525,7 +525,7 @@ WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 81 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
if (Authorization.HasAny(Claims.Config.JobPreferences.Show, Claims.Config.DocumentTemplate.Show, Claims.Config.Plugin.Show))
|
||||
if (Authorization.HasAny(Claims.Config.JobPreferences.Show, Claims.Config.JobQueue.Show, Claims.Config.DocumentTemplate.Show, Claims.Config.Plugin.Show))
|
||||
{
|
||||
|
||||
|
||||
@@ -541,7 +541,7 @@ WriteLiteral(" <td>\r\n");
|
||||
#line hidden
|
||||
|
||||
#line 84 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
if (Authorization.HasAny(Claims.Config.JobPreferences.Show))
|
||||
if (Authorization.HasAny(Claims.Config.JobPreferences.Show, Claims.Config.JobQueue.Show))
|
||||
{
|
||||
|
||||
|
||||
@@ -605,12 +605,62 @@ WriteLiteral(">\r\n Configure general preferences
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 95 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
if (Authorization.Has(Claims.Config.JobQueue.Show))
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <i");
|
||||
|
||||
WriteLiteral(" class=\"fa fa-cog\"");
|
||||
|
||||
WriteLiteral("></i>");
|
||||
|
||||
|
||||
#line 97 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 97 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
Write(Html.ActionLinkClass("Job Queues", MVC.Config.JobQueue.Index(), "config"));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 97 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <div");
|
||||
|
||||
WriteLiteral(" class=\"pageMenuBlurb\"");
|
||||
|
||||
WriteLiteral(">\r\n Create and manage job queues including priorit" +
|
||||
"ies and queue members.\r\n </div>\r\n");
|
||||
|
||||
|
||||
#line 101 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </div>\r\n");
|
||||
|
||||
|
||||
#line 96 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 103 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
}
|
||||
|
||||
|
||||
@@ -619,13 +669,13 @@ WriteLiteral(" </div>\r\n");
|
||||
WriteLiteral("\r\n");
|
||||
|
||||
|
||||
#line 98 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 105 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 98 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 105 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
if (Authorization.HasAny(Claims.Config.DocumentTemplate.Show, Claims.Config.Plugin.Show))
|
||||
{
|
||||
|
||||
@@ -639,13 +689,13 @@ WriteLiteral(" class=\"pageMenuArea\"");
|
||||
WriteLiteral(">\r\n <h2>Features</h2>\r\n");
|
||||
|
||||
|
||||
#line 102 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 109 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 102 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 109 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
if (Authorization.Has(Claims.Config.DocumentTemplate.Show))
|
||||
{
|
||||
|
||||
@@ -659,20 +709,20 @@ WriteLiteral(" class=\"fa fa-cog\"");
|
||||
WriteLiteral("></i>");
|
||||
|
||||
|
||||
#line 104 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 111 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 104 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 111 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
Write(Html.ActionLinkClass("Document Templates", MVC.Config.DocumentTemplate.Index(), "config"));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 104 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 111 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
|
||||
|
||||
|
||||
@@ -687,7 +737,7 @@ WriteLiteral(">\r\n Create, Update and Bulk Gener
|
||||
" </div>\r\n");
|
||||
|
||||
|
||||
#line 109 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 116 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
}
|
||||
|
||||
|
||||
@@ -696,7 +746,7 @@ WriteLiteral(">\r\n Create, Update and Bulk Gener
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 110 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 117 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
if (Authorization.Has(Claims.Config.Plugin.Show))
|
||||
{
|
||||
|
||||
@@ -710,20 +760,20 @@ WriteLiteral(" class=\"fa fa-cog\"");
|
||||
WriteLiteral("></i>");
|
||||
|
||||
|
||||
#line 112 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 119 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 112 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 119 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
Write(Html.ActionLinkClass("Plugins", MVC.Config.Plugins.Index(), "config"));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 112 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 119 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
|
||||
|
||||
|
||||
@@ -737,7 +787,7 @@ WriteLiteral(">\r\n Manage extensions to the Disc
|
||||
" </div>\r\n");
|
||||
|
||||
|
||||
#line 116 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 123 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
}
|
||||
|
||||
|
||||
@@ -746,7 +796,7 @@ WriteLiteral(">\r\n Manage extensions to the Disc
|
||||
WriteLiteral(" </div>\r\n");
|
||||
|
||||
|
||||
#line 118 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 125 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
}
|
||||
|
||||
|
||||
@@ -755,7 +805,7 @@ WriteLiteral(" </div>\r\n");
|
||||
WriteLiteral(" </td>\r\n");
|
||||
|
||||
|
||||
#line 120 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 127 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
}
|
||||
|
||||
|
||||
@@ -764,7 +814,7 @@ WriteLiteral(" </td>\r\n");
|
||||
WriteLiteral(" </tr>\r\n</table>\r\n");
|
||||
|
||||
|
||||
#line 123 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 130 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
|
||||
if (Model.UpdateAvailable)
|
||||
{
|
||||
@@ -782,14 +832,14 @@ WriteLiteral(" class=\"fa fa-cloud-download info\"");
|
||||
|
||||
WriteLiteral("></i>\r\n <div>An updated version of Disco is available</div>\r\n <a");
|
||||
|
||||
WriteAttribute("href", Tuple.Create(" href=\"", 6652), Tuple.Create("\"", 6688)
|
||||
WriteAttribute("href", Tuple.Create(" href=\"", 7166), Tuple.Create("\"", 7202)
|
||||
|
||||
#line 129 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 6659), Tuple.Create<System.Object, System.Int32>(Model.UpdateResponse.UrlLink
|
||||
#line 136 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 7173), Tuple.Create<System.Object, System.Int32>(Model.UpdateResponse.UrlLink
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 6659), false)
|
||||
, 7173), false)
|
||||
);
|
||||
|
||||
WriteLiteral(" class=\"button small alert\"");
|
||||
@@ -799,7 +849,7 @@ WriteLiteral(" target=\"_blank\"");
|
||||
WriteLiteral(">Download v");
|
||||
|
||||
|
||||
#line 129 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 136 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
Write(Model.UpdateResponse.Version);
|
||||
|
||||
|
||||
@@ -816,13 +866,13 @@ WriteLiteral(@" <script>
|
||||
");
|
||||
|
||||
|
||||
#line 137 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 144 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 137 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 144 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
|
||||
if (Model.UpdateResponse.VersionReleasedTimestamp < DateTime.Now.AddDays(-14))
|
||||
{
|
||||
@@ -838,7 +888,7 @@ WriteLiteral("\r\n updateAvailableContainer.effect(\"shake\", { t
|
||||
WriteLiteral("\r\n");
|
||||
|
||||
|
||||
#line 143 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 150 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
}
|
||||
|
||||
|
||||
@@ -847,7 +897,7 @@ WriteLiteral("\r\n");
|
||||
WriteLiteral("\r\n });\r\n })();\r\n </script>\r\n");
|
||||
|
||||
|
||||
#line 148 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
#line 155 "..\..\Areas\Config\Views\Config\Index.cshtml"
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -166,125 +166,143 @@
|
||||
});
|
||||
});
|
||||
|
||||
var $trJobTypes = $('#trJobTypes');
|
||||
var $trJobTypeActions = $('#trJobTypeActions');
|
||||
var $jobTypes = $trJobTypes.find('input[type="checkbox"]');
|
||||
$jobTypes.change(jobTypesChange);
|
||||
var $JobSubTypes = $('#Config_DocumentTemplates_JobSubTypes');
|
||||
|
||||
function scopeChange() {
|
||||
if ($scope.val() == 'Job') {
|
||||
$trJobTypes.show();
|
||||
$trJobTypeActions.show();
|
||||
jobTypesChange();
|
||||
$JobSubTypes.slideDown('fast');
|
||||
} else {
|
||||
$trJobTypes.hide();
|
||||
$trJobTypeActions.hide();
|
||||
$jobTypes.filter(':checked').each(function () {
|
||||
$(this).prop('checked', false);
|
||||
});
|
||||
$('.jobSubTypes').hide().find('input[type="checkbox"]:checked').each(function () {
|
||||
$(this).prop('checked', false);
|
||||
});
|
||||
$JobSubTypes.slideUp('fast');
|
||||
}
|
||||
}
|
||||
|
||||
function jobTypesChange() {
|
||||
$('.jobSubTypes').hide();
|
||||
$jobTypes.filter(':checked').each(function () {
|
||||
$('#trJobSubType' + $(this).val()).show();
|
||||
});
|
||||
}
|
||||
|
||||
$('#TypeAction_Save').click(function () {
|
||||
var data = { SubTypes: [] };
|
||||
var $ajaxLoading = $('#TypeAction_Save').next('.ajaxLoading').show();
|
||||
|
||||
$jobTypes.filter(':checked').each(function () {
|
||||
var $this = $(this);
|
||||
$('#trJobSubType' + $this.val()).find('input[type="checkbox"]:checked').each(function () {
|
||||
data.SubTypes.push($(this).val());
|
||||
});
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: '@Url.Action(MVC.API.DocumentTemplate.UpdateSubTypes(Model.DocumentTemplate.Id))',
|
||||
dataType: 'json',
|
||||
type: 'POST',
|
||||
traditional: true,
|
||||
data: data,
|
||||
success: function (d) {
|
||||
if (d == 'OK') {
|
||||
$ajaxLoading.hide().next('.ajaxOk').show().delay('fast').fadeOut('slow');
|
||||
scopeChange();
|
||||
} else {
|
||||
$ajaxLoading.hide();
|
||||
alert('Unable to update job types: ' + d);
|
||||
}
|
||||
},
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
alert('Unable to update job types: ' + textStatus);
|
||||
$ajaxLoading.hide();
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
scopeChange();
|
||||
});
|
||||
</script>
|
||||
}
|
||||
else
|
||||
{
|
||||
@Model.DocumentTemplate.Scope
|
||||
<div>@Model.DocumentTemplate.Scope</div>
|
||||
}
|
||||
@if (canConfig || (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.Job))
|
||||
{
|
||||
<div id="Config_DocumentTemplates_JobSubTypes" @(Model.DocumentTemplate.Scope != DocumentTemplate.DocumentTemplateScopes.Job ? "style=\"display: none;\" " : null)>
|
||||
<h4>Filter:</h4>
|
||||
<div>
|
||||
@if (Model.DocumentTemplate.JobSubTypes.Count > 0)
|
||||
{
|
||||
<ul>
|
||||
@foreach (var jobType in Model.DocumentTemplate.JobSubTypes.GroupBy(jst => jst.JobType).OrderBy(jtg => jtg.Key.Description))
|
||||
{
|
||||
<li>
|
||||
@jobType.Key.Description
|
||||
<ul>
|
||||
@if (jobType.Count() == Model.JobTypes.FirstOrDefault(jt => jt.Id == jobType.Key.Id).JobSubTypes.Count)
|
||||
{
|
||||
<li><span class="smallMessage">[All Sub Types]</span></li>
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var jobSubType in jobType)
|
||||
{
|
||||
<li>@jobSubType.Description</li>
|
||||
}
|
||||
}
|
||||
</ul>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="smallMessage"><No Filter></span>
|
||||
}
|
||||
</div>
|
||||
@if (canConfig)
|
||||
{
|
||||
<a id="Config_DocumentTemplates_JobSubTypes_Update" href="#" class="button small">Update</a>
|
||||
<div id="Config_DocumentTemplates_JobSubTypes_Update_Dialog" class="dialog" title="Job Type Filter">
|
||||
@using (Html.BeginForm(MVC.API.DocumentTemplate.UpdateJobSubTypes(Model.DocumentTemplate.Id, null, true)))
|
||||
{
|
||||
var selectedTypes = Model.DocumentTemplate.JobSubTypes.Select(jst => jst.JobType).Distinct().ToList();
|
||||
foreach (var jt in Model.JobTypes)
|
||||
{
|
||||
<div class="jobTypes">
|
||||
<h4>
|
||||
<input id="Types_@(jt.Id)" class="jobType" type="checkbox" value="@(jt.Id)" @(selectedTypes.Contains(jt) ? "checked=\"checked\"" : null) /><label for="Types_@(jt.Id)">@jt.Description</label></h4>
|
||||
<div id="SubTypes_@(jt.Id)" class="jobSubTypes">
|
||||
@CommonHelpers.CheckboxBulkSelect(string.Format("CheckboxBulkSelect_{0}", jt.Id), "div")
|
||||
@CommonHelpers.CheckBoxList("JobSubTypes", jt.JobSubTypes.OrderBy(jst => jst.Description).ToSelectListItems(Model.DocumentTemplate.JobSubTypes), 2)
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
<script>
|
||||
(function () {
|
||||
var dialog;
|
||||
|
||||
function showDialog() {
|
||||
if (!dialog) {
|
||||
dialog = $('#Config_DocumentTemplates_JobSubTypes_Update_Dialog').dialog({
|
||||
resizable: false,
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 750,
|
||||
height: 620,
|
||||
buttons: {
|
||||
"Save Changes": saveChanges,
|
||||
Cancel: cancel
|
||||
}
|
||||
});
|
||||
|
||||
dialog.find('.jobSubTypes').hide();
|
||||
dialog.on('change', 'input.jobType', function () {
|
||||
var $this = $(this);
|
||||
if ($this.is(':checked'))
|
||||
$('#SubTypes_' + $this.val()).slideDown('fast');
|
||||
else
|
||||
$('#SubTypes_' + $this.val()).slideUp('fast');
|
||||
}).find('input.jobType:checked').each(function () {
|
||||
$('#SubTypes_' + $(this).val()).show();
|
||||
});
|
||||
}
|
||||
|
||||
dialog.dialog('open');
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function cancel() {
|
||||
dialog.dialog("disable");
|
||||
dialog.dialog("option", "buttons", null);
|
||||
|
||||
// Refresh Page
|
||||
window.location.href = window.location.href;
|
||||
}
|
||||
|
||||
function saveChanges() {
|
||||
var form = dialog.find('form');
|
||||
|
||||
$('input.jobType:unchecked').each(function () {
|
||||
$('#SubTypes_' + $(this).val()).find('input').prop('checked', false);
|
||||
});
|
||||
|
||||
form.submit();
|
||||
|
||||
dialog.dialog("disable");
|
||||
dialog.dialog("option", "buttons", null);
|
||||
}
|
||||
|
||||
$(function () {
|
||||
$('#Config_DocumentTemplates_JobSubTypes_Update').click(showDialog);
|
||||
});
|
||||
|
||||
})();
|
||||
</script>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
@if (canConfig || (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.Job))
|
||||
{
|
||||
<tr id="trJobTypes">
|
||||
<th class="name">Types:
|
||||
</th>
|
||||
<td class="value">
|
||||
@CommonHelpers.CheckBoxList("Types", Model.JobTypes.ToSelectListItems(Model.Types), 2)
|
||||
</td>
|
||||
</tr>
|
||||
foreach (var jt in Model.JobTypes)
|
||||
{
|
||||
<tr id="trJobSubType@(jt.Id)" class="jobSubTypes">
|
||||
<th class="name">
|
||||
@jt.Description<br />
|
||||
Sub Types<br />
|
||||
@if (canConfig)
|
||||
{
|
||||
@CommonHelpers.CheckboxBulkSelect(string.Format("CheckboxBulkSelect_{0}", jt.Id))
|
||||
}
|
||||
</th>
|
||||
<td class="value">
|
||||
@CommonHelpers.CheckBoxList("SubTypes", Model.JobSubTypes.Where(jst => jst.JobTypeId == jt.Id).ToList().ToSelectListItems(Model.SubTypes), 2)
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
if (canConfig)
|
||||
{
|
||||
<tr id="trJobTypeActions">
|
||||
<th class="name"></th>
|
||||
<td class="value">
|
||||
<a id="TypeAction_Save" href="#" class="button">Save Job Types</a>@AjaxHelpers.AjaxLoader()
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
else if (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.Job)
|
||||
{
|
||||
<script>
|
||||
$(function () {
|
||||
$('.jobSubTypes').hide().find('input[type="checkbox"]').prop('disabled', true);
|
||||
$('#trJobTypes').find('input[type="checkbox"]').prop('disabled', true).filter(':checked').each(function () {
|
||||
$('#trJobSubType' + $(this).val()).show();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
}
|
||||
}
|
||||
<tr>
|
||||
<th>Template PDF
|
||||
</th>
|
||||
|
||||
@@ -29,6 +29,7 @@ namespace Disco.Web.Areas.Config.Views.DocumentTemplate
|
||||
using Disco;
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Services;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Web;
|
||||
using Disco.Web;
|
||||
@@ -421,60 +422,10 @@ WriteLiteral(@">
|
||||
Write(Url.Action(MVC.API.DocumentTemplate.UpdateScope(Model.DocumentTemplate.Id)));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\',\r\n dataType: \'json\',\r\n " +
|
||||
" data: data,\r\n success: function (d) {\r\n " +
|
||||
" if (d == \'OK\') {\r\n " +
|
||||
" $ajaxLoading.hide().next(\'.ajaxOk\').show().delay(\'fast\').fadeOut(\'slow" +
|
||||
"\');\r\n scopeChange();\r\n " +
|
||||
" } else {\r\n $ajaxLoading." +
|
||||
"hide();\r\n alert(\'Unable to update scope: " +
|
||||
"\' + d);\r\n }\r\n " +
|
||||
"},\r\n error: function (jqXHR, textStatus, errorThr" +
|
||||
"own) {\r\n alert(\'Unable to update scope: \' + t" +
|
||||
"extStatus);\r\n $ajaxLoading.hide();\r\n " +
|
||||
" }\r\n });\r\n " +
|
||||
" });\r\n\r\n var $trJobTypes = $(\'#trJobTypes\');\r\n " +
|
||||
" var $trJobTypeActions = $(\'#trJobTypeActions\');\r\n " +
|
||||
" var $jobTypes = $trJobTypes.find(\'input[type=\"checkbox\"]\');\r\n " +
|
||||
" $jobTypes.change(jobTypesChange);\r\n\r\n functi" +
|
||||
"on scopeChange() {\r\n if ($scope.val() == \'Job\') {\r\n " +
|
||||
" $trJobTypes.show();\r\n " +
|
||||
" $trJobTypeActions.show();\r\n jobTypesChange();\r" +
|
||||
"\n } else {\r\n $trJobTyp" +
|
||||
"es.hide();\r\n $trJobTypeActions.hide();\r\n " +
|
||||
" $jobTypes.filter(\':checked\').each(function () {\r\n " +
|
||||
" $(this).prop(\'checked\', false);\r\n " +
|
||||
" });\r\n $(\'.jobSubTypes\').hide().find(" +
|
||||
"\'input[type=\"checkbox\"]:checked\').each(function () {\r\n " +
|
||||
" $(this).prop(\'checked\', false);\r\n });\r\n" +
|
||||
" }\r\n }\r\n\r\n " +
|
||||
" function jobTypesChange() {\r\n $(\'.jobSubTypes\').h" +
|
||||
"ide();\r\n $jobTypes.filter(\':checked\').each(function (" +
|
||||
") {\r\n $(\'#trJobSubType\' + $(this).val()).show();\r" +
|
||||
"\n });\r\n }\r\n\r\n " +
|
||||
" $(\'#TypeAction_Save\').click(function () {\r\n va" +
|
||||
"r data = { SubTypes: [] };\r\n var $ajaxLoading = $(\'#T" +
|
||||
"ypeAction_Save\').next(\'.ajaxLoading\').show();\r\n\r\n $jo" +
|
||||
"bTypes.filter(\':checked\').each(function () {\r\n va" +
|
||||
"r $this = $(this);\r\n $(\'#trJobSubType\' + $this.va" +
|
||||
"l()).find(\'input[type=\"checkbox\"]:checked\').each(function () {\r\n " +
|
||||
" data.SubTypes.push($(this).val());\r\n " +
|
||||
" });\r\n });\r\n\r\n $.aj" +
|
||||
"ax({\r\n url: \'");
|
||||
|
||||
|
||||
#line 210 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(Url.Action(MVC.API.DocumentTemplate.UpdateSubTypes(Model.DocumentTemplate.Id)));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(@"',
|
||||
dataType: 'json',
|
||||
type: 'POST',
|
||||
traditional: true,
|
||||
data: data,
|
||||
success: function (d) {
|
||||
if (d == 'OK') {
|
||||
@@ -482,247 +433,440 @@ WriteLiteral(@"',
|
||||
scopeChange();
|
||||
} else {
|
||||
$ajaxLoading.hide();
|
||||
alert('Unable to update job types: ' + d);
|
||||
alert('Unable to update scope: ' + d);
|
||||
}
|
||||
},
|
||||
error: function (jqXHR, textStatus, errorThrown) {
|
||||
alert('Unable to update job types: ' + textStatus);
|
||||
alert('Unable to update scope: ' + textStatus);
|
||||
$ajaxLoading.hide();
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
scopeChange();
|
||||
var $JobSubTypes = $('#Config_DocumentTemplates_JobSubTypes');
|
||||
|
||||
function scopeChange() {
|
||||
if ($scope.val() == 'Job') {
|
||||
$JobSubTypes.slideDown('fast');
|
||||
} else {
|
||||
$JobSubTypes.slideUp('fast');
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
");
|
||||
|
||||
|
||||
#line 235 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 180 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 238 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(Model.DocumentTemplate.Scope);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <div>");
|
||||
|
||||
|
||||
#line 238 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
#line 183 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(Model.DocumentTemplate.Scope);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("</div>\r\n");
|
||||
|
||||
|
||||
#line 184 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </td>\r\n </tr>\r\n");
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 242 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 242 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
if (canConfig || (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.Job))
|
||||
{
|
||||
#line 185 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
if (canConfig || (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.Job))
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <tr");
|
||||
WriteLiteral(" <div");
|
||||
|
||||
WriteLiteral(" id=\"trJobTypes\"");
|
||||
WriteLiteral(" id=\"Config_DocumentTemplates_JobSubTypes\"");
|
||||
|
||||
WriteLiteral(">\r\n <th");
|
||||
|
||||
WriteLiteral(" class=\"name\"");
|
||||
|
||||
WriteLiteral(">Types:\r\n </th>\r\n <td");
|
||||
|
||||
WriteLiteral(" class=\"value\"");
|
||||
|
||||
WriteLiteral(">\r\n");
|
||||
|
||||
WriteLiteral(" ");
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 248 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(CommonHelpers.CheckBoxList("Types", Model.JobTypes.ToSelectListItems(Model.Types), 2));
|
||||
#line 187 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(Model.DocumentTemplate.Scope != DocumentTemplate.DocumentTemplateScopes.Job ? "style=\"display: none;\" " : null);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n </td>\r\n </tr>\r\n");
|
||||
WriteLiteral(">\r\n <h4>Filter:</h4>\r\n <div>\r\n");
|
||||
|
||||
|
||||
#line 251 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
foreach (var jt in Model.JobTypes)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <tr");
|
||||
|
||||
WriteAttribute("id", Tuple.Create(" id=\"", 12488), Tuple.Create("\"", 12513)
|
||||
, Tuple.Create(Tuple.Create("", 12493), Tuple.Create("trJobSubType", 12493), true)
|
||||
|
||||
#line 253 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 12505), Tuple.Create<System.Object, System.Int32>(jt.Id
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 12505), false)
|
||||
);
|
||||
|
||||
WriteLiteral(" class=\"jobSubTypes\"");
|
||||
|
||||
WriteLiteral(">\r\n <th");
|
||||
|
||||
WriteLiteral(" class=\"name\"");
|
||||
|
||||
WriteLiteral(">\r\n");
|
||||
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 255 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(jt.Description);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("<br />\r\n Sub Types<br />\r\n");
|
||||
|
||||
|
||||
#line 257 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
#line 190 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 257 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
if (canConfig)
|
||||
{
|
||||
#line 190 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
if (Model.DocumentTemplate.JobSubTypes.Count > 0)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <ul>\r\n");
|
||||
|
||||
|
||||
#line 193 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 193 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
foreach (var jobType in Model.DocumentTemplate.JobSubTypes.GroupBy(jst => jst.JobType).OrderBy(jtg => jtg.Key.Description))
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <li>\r\n");
|
||||
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 196 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(jobType.Key.Description);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n <ul>\r\n");
|
||||
|
||||
|
||||
#line 198 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 198 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
if (jobType.Count() == Model.JobTypes.FirstOrDefault(jt => jt.Id == jobType.Key.Id).JobSubTypes.Count)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <li><span");
|
||||
|
||||
WriteLiteral(" class=\"smallMessage\"");
|
||||
|
||||
WriteLiteral(">[All Sub Types]</span></li>\r\n");
|
||||
|
||||
|
||||
#line 201 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var jobSubType in jobType)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <li>");
|
||||
|
||||
|
||||
#line 206 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(jobSubType.Description);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("</li>\r\n");
|
||||
|
||||
|
||||
#line 207 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </ul>\r\n " +
|
||||
" </li>\r\n");
|
||||
|
||||
|
||||
#line 211 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </ul>\r\n");
|
||||
|
||||
|
||||
#line 213 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <span");
|
||||
|
||||
WriteLiteral(" class=\"smallMessage\"");
|
||||
|
||||
WriteLiteral("><No Filter></span>\r\n");
|
||||
|
||||
|
||||
#line 217 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </div>\r\n");
|
||||
|
||||
|
||||
#line 219 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 259 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(CommonHelpers.CheckboxBulkSelect(string.Format("CheckboxBulkSelect_{0}", jt.Id)));
|
||||
#line 219 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
if (canConfig)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 259 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
}
|
||||
WriteLiteral(" <a");
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </th>\r\n <td");
|
||||
|
||||
WriteLiteral(" class=\"value\"");
|
||||
|
||||
WriteLiteral(">\r\n");
|
||||
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 263 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(CommonHelpers.CheckBoxList("SubTypes", Model.JobSubTypes.Where(jst => jst.JobTypeId == jt.Id).ToList().ToSelectListItems(Model.SubTypes), 2));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n </td>\r\n </tr> \r\n");
|
||||
|
||||
|
||||
#line 266 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
if (canConfig)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <tr");
|
||||
|
||||
WriteLiteral(" id=\"trJobTypeActions\"");
|
||||
|
||||
WriteLiteral(">\r\n <th");
|
||||
|
||||
WriteLiteral(" class=\"name\"");
|
||||
|
||||
WriteLiteral("></th>\r\n <td");
|
||||
|
||||
WriteLiteral(" class=\"value\"");
|
||||
|
||||
WriteLiteral(">\r\n <a");
|
||||
|
||||
WriteLiteral(" id=\"TypeAction_Save\"");
|
||||
WriteLiteral(" id=\"Config_DocumentTemplates_JobSubTypes_Update\"");
|
||||
|
||||
WriteLiteral(" href=\"#\"");
|
||||
|
||||
WriteLiteral(" class=\"button\"");
|
||||
WriteLiteral(" class=\"button small\"");
|
||||
|
||||
WriteLiteral(">Save Job Types</a>");
|
||||
WriteLiteral(">Update</a>\r\n");
|
||||
|
||||
WriteLiteral(" <div");
|
||||
|
||||
WriteLiteral(" id=\"Config_DocumentTemplates_JobSubTypes_Update_Dialog\"");
|
||||
|
||||
WriteLiteral(" class=\"dialog\"");
|
||||
|
||||
WriteLiteral(" title=\"Job Type Filter\"");
|
||||
|
||||
WriteLiteral(">\r\n");
|
||||
|
||||
|
||||
#line 272 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(AjaxHelpers.AjaxLoader());
|
||||
#line 223 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 223 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
using (Html.BeginForm(MVC.API.DocumentTemplate.UpdateJobSubTypes(Model.DocumentTemplate.Id, null, true)))
|
||||
{
|
||||
var selectedTypes = Model.DocumentTemplate.JobSubTypes.Select(jst => jst.JobType).Distinct().ToList();
|
||||
foreach (var jt in Model.JobTypes)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n </td>\r\n </tr>\r\n");
|
||||
WriteLiteral(" <div");
|
||||
|
||||
WriteLiteral(" class=\"jobTypes\"");
|
||||
|
||||
WriteLiteral(">\r\n <h4>\r\n " +
|
||||
" <input");
|
||||
|
||||
WriteAttribute("id", Tuple.Create(" id=\"", 12011), Tuple.Create("\"", 12030)
|
||||
, Tuple.Create(Tuple.Create("", 12016), Tuple.Create("Types_", 12016), true)
|
||||
|
||||
#line 230 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 12022), Tuple.Create<System.Object, System.Int32>(jt.Id
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 12022), false)
|
||||
);
|
||||
|
||||
WriteLiteral(" class=\"jobType\"");
|
||||
|
||||
WriteLiteral(" type=\"checkbox\"");
|
||||
|
||||
WriteAttribute("value", Tuple.Create(" value=\"", 12063), Tuple.Create("\"", 12079)
|
||||
|
||||
#line 230 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 12071), Tuple.Create<System.Object, System.Int32>(jt.Id
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 12071), false)
|
||||
);
|
||||
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 275 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
else if (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.Job)
|
||||
{
|
||||
#line 230 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(selectedTypes.Contains(jt) ? "checked=\"checked\"" : null);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(@" <script>
|
||||
$(function () {
|
||||
$('.jobSubTypes').hide().find('input[type=""checkbox""]').prop('disabled', true);
|
||||
$('#trJobTypes').find('input[type=""checkbox""]').prop('disabled', true).filter(':checked').each(function () {
|
||||
$('#trJobSubType' + $(this).val()).show();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
");
|
||||
WriteLiteral(" /><label");
|
||||
|
||||
WriteAttribute("for", Tuple.Create(" for=\"", 12150), Tuple.Create("\"", 12170)
|
||||
, Tuple.Create(Tuple.Create("", 12156), Tuple.Create("Types_", 12156), true)
|
||||
|
||||
#line 230 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 12162), Tuple.Create<System.Object, System.Int32>(jt.Id
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 12162), false)
|
||||
);
|
||||
|
||||
WriteLiteral(">");
|
||||
|
||||
|
||||
#line 286 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
}
|
||||
#line 230 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(jt.Description);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <tr>\r\n <th>Template PDF\r\n </th>\r\n <td>\r\n" +
|
||||
"");
|
||||
WriteLiteral("</label></h4>\r\n <div");
|
||||
|
||||
WriteAttribute("id", Tuple.Create(" id=\"", 12246), Tuple.Create("\"", 12268)
|
||||
, Tuple.Create(Tuple.Create("", 12251), Tuple.Create("SubTypes_", 12251), true)
|
||||
|
||||
#line 231 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 12260), Tuple.Create<System.Object, System.Int32>(jt.Id
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 12260), false)
|
||||
);
|
||||
|
||||
WriteLiteral(" class=\"jobSubTypes\"");
|
||||
|
||||
WriteLiteral(">\r\n");
|
||||
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 232 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(CommonHelpers.CheckboxBulkSelect(string.Format("CheckboxBulkSelect_{0}", jt.Id), "div"));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n");
|
||||
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 233 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(CommonHelpers.CheckBoxList("JobSubTypes", jt.JobSubTypes.OrderBy(jst => jst.Description).ToSelectListItems(Model.DocumentTemplate.JobSubTypes), 2));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n </div>\r\n " +
|
||||
" </div> \r\n");
|
||||
|
||||
|
||||
#line 236 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </div>\r\n");
|
||||
|
||||
WriteLiteral(" <script>\r\n (function (" +
|
||||
") {\r\n var dialog;\r\n\r\n " +
|
||||
" function showDialog() {\r\n if " +
|
||||
"(!dialog) {\r\n dialog = $(\'#Config_Doc" +
|
||||
"umentTemplates_JobSubTypes_Update_Dialog\').dialog({\r\n " +
|
||||
" resizable: false,\r\n " +
|
||||
" modal: true,\r\n autoOpen: " +
|
||||
"false,\r\n width: 750,\r\n " +
|
||||
" height: 620,\r\n " +
|
||||
" buttons: {\r\n " +
|
||||
" \"Save Changes\": saveChanges,\r\n " +
|
||||
" Cancel: cancel\r\n }\r\n " +
|
||||
" });\r\n\r\n " +
|
||||
" dialog.find(\'.jobSubTypes\').hide();\r\n " +
|
||||
" dialog.on(\'change\', \'input.jobType\', function () {\r\n " +
|
||||
" var $this = $(this);\r\n " +
|
||||
" if ($this.is(\':checked\'))\r\n " +
|
||||
" $(\'#SubTypes_\' + $this.val()).slideDown(\'fast\');\r\n " +
|
||||
" else\r\n " +
|
||||
" $(\'#SubTypes_\' + $this.val()).slideUp(\'fast\');\r\n " +
|
||||
" }).find(\'input.jobType:checked\').each(function () {\r\n " +
|
||||
" $(\'#SubTypes_\' + $(this).val()).sh" +
|
||||
"ow();\r\n });\r\n " +
|
||||
" }\r\n\r\n dialog.dialog(\'open" +
|
||||
"\');\r\n\r\n return false;\r\n " +
|
||||
" }\r\n\r\n function cancel() {\r\n" +
|
||||
" dialog.dialog(\"disable\");\r\n " +
|
||||
" dialog.dialog(\"option\", \"buttons\", null);\r\n\r\n " +
|
||||
" // Refresh Page\r\n " +
|
||||
" window.location.href = window.location.href;\r\n " +
|
||||
" }\r\n\r\n function saveChanges() {\r\n " +
|
||||
" var form = dialog.find(\'form\');\r\n\r\n " +
|
||||
" $(\'input.jobType:unchecked\').each(function () {" +
|
||||
"\r\n $(\'#SubTypes_\' + $(this).val()).fi" +
|
||||
"nd(\'input\').prop(\'checked\', false);\r\n });" +
|
||||
"\r\n\r\n form.submit();\r\n\r\n " +
|
||||
" dialog.dialog(\"disable\");\r\n " +
|
||||
" dialog.dialog(\"option\", \"buttons\", null);\r\n " +
|
||||
" }\r\n\r\n $(function () {\r\n " +
|
||||
" $(\'#Config_DocumentTemplates_JobSubTypes_Update\').clic" +
|
||||
"k(showDialog);\r\n });\r\n\r\n " +
|
||||
" })();\r\n </script>\r\n");
|
||||
|
||||
|
||||
#line 301 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </div>\r\n");
|
||||
|
||||
|
||||
#line 303 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </td>\r\n </tr>\r\n <tr>\r\n <th>Template PDF\r\n " +
|
||||
" </th>\r\n <td>\r\n");
|
||||
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 292 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 310 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(Html.ActionLink("Download Template", MVC.API.DocumentTemplate.Template(Model.DocumentTemplate.Id)));
|
||||
|
||||
|
||||
@@ -731,13 +875,13 @@ WriteLiteral(" ");
|
||||
WriteLiteral("\r\n");
|
||||
|
||||
|
||||
#line 293 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 311 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 293 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 311 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
if (canConfig && Authorization.Has(Claims.Config.DocumentTemplate.Upload))
|
||||
{
|
||||
|
||||
@@ -747,7 +891,7 @@ WriteLiteral("\r\n");
|
||||
WriteLiteral(" <br />\r\n");
|
||||
|
||||
|
||||
#line 296 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 314 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
using (Html.BeginForm(MVC.API.DocumentTemplate.Template(Model.DocumentTemplate.Id, true, null), FormMethod.Post, new { enctype = "multipart/form-data" }))
|
||||
{
|
||||
|
||||
@@ -777,7 +921,7 @@ WriteLiteral(" value=\"Upload\"");
|
||||
WriteLiteral(" />\r\n");
|
||||
|
||||
|
||||
#line 300 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 318 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
|
||||
|
||||
@@ -801,7 +945,7 @@ WriteLiteral(@">
|
||||
");
|
||||
|
||||
|
||||
#line 312 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 330 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
|
||||
|
||||
@@ -811,7 +955,7 @@ WriteLiteral(" </td>\r\n </tr>\r\n <tr>\r\n
|
||||
":\r\n </th>\r\n <td>");
|
||||
|
||||
|
||||
#line 318 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 336 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
if (canConfig && Authorization.Has(Claims.Config.DocumentTemplate.ConfigureFilterExpression))
|
||||
{
|
||||
|
||||
@@ -819,42 +963,42 @@ WriteLiteral(" </td>\r\n </tr>\r\n <tr>\r\n
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 320 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 338 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(Html.TextBoxFor(model => model.DocumentTemplate.FilterExpression));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 320 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 338 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 321 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 339 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(AjaxHelpers.AjaxRemove());
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 321 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 339 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 322 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 340 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(AjaxHelpers.AjaxLoader());
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 322 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 340 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
|
||||
@@ -886,7 +1030,7 @@ WriteLiteral(">\r\n $(function () {\r\n
|
||||
" url: \'");
|
||||
|
||||
|
||||
#line 349 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 367 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(Url.Action(MVC.API.DocumentTemplate.UpdateFilterExpression(Model.DocumentTemplate.Id)));
|
||||
|
||||
|
||||
@@ -916,7 +1060,7 @@ WriteLiteral(@"',
|
||||
");
|
||||
|
||||
|
||||
#line 370 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 388 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -933,7 +1077,7 @@ WriteLiteral(" class=\"smallMessage\"");
|
||||
WriteLiteral("><None Specified></span>\r\n");
|
||||
|
||||
|
||||
#line 376 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 394 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -950,7 +1094,7 @@ WriteLiteral(">\r\n");
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 380 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 398 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(Model.DocumentTemplate.FilterExpression);
|
||||
|
||||
|
||||
@@ -959,7 +1103,7 @@ WriteLiteral(" ");
|
||||
WriteLiteral("\r\n </div>\r\n");
|
||||
|
||||
|
||||
#line 382 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 400 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -970,7 +1114,7 @@ WriteLiteral(" </td>\r\n </tr>\r\n </table>\r\n</div>\r\n<h
|
||||
"/h2>\r\n");
|
||||
|
||||
|
||||
#line 389 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 407 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(Html.Partial(MVC.Config.DocumentTemplate.Views._ExpressionsTable, Model.TemplateExpressions));
|
||||
|
||||
|
||||
@@ -1032,13 +1176,13 @@ WriteLiteral(" class=\"actionBar\"");
|
||||
WriteLiteral(">\r\n");
|
||||
|
||||
|
||||
#line 428 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 446 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 428 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 446 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
if (Authorization.Has(Claims.Config.Show))
|
||||
{
|
||||
|
||||
@@ -1046,14 +1190,14 @@ WriteLiteral(">\r\n");
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 430 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 448 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(Html.ActionLinkButton("Expression Browser", MVC.Config.DocumentTemplate.ExpressionBrowser()));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 430 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 448 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
}
|
||||
|
||||
@@ -1063,7 +1207,7 @@ WriteLiteral(">\r\n");
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 432 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 450 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
if (canBulkGenerate)
|
||||
{
|
||||
|
||||
@@ -1086,16 +1230,16 @@ WriteLiteral(" id=\"dialogBulkGenerate\"");
|
||||
|
||||
WriteLiteral(" class=\"hiddenDialog\"");
|
||||
|
||||
WriteAttribute("title", Tuple.Create(" title=\"", 20927), Tuple.Create("\"", 20978)
|
||||
, Tuple.Create(Tuple.Create("", 20935), Tuple.Create("Bulk", 20935), true)
|
||||
, Tuple.Create(Tuple.Create(" ", 20939), Tuple.Create("Generate:", 20940), true)
|
||||
WriteAttribute("title", Tuple.Create(" title=\"", 23181), Tuple.Create("\"", 23232)
|
||||
, Tuple.Create(Tuple.Create("", 23189), Tuple.Create("Bulk", 23189), true)
|
||||
, Tuple.Create(Tuple.Create(" ", 23193), Tuple.Create("Generate:", 23194), true)
|
||||
|
||||
#line 435 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
, Tuple.Create(Tuple.Create(" ", 20949), Tuple.Create<System.Object, System.Int32>(Model.DocumentTemplate.Id
|
||||
#line 453 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
, Tuple.Create(Tuple.Create(" ", 23203), Tuple.Create<System.Object, System.Int32>(Model.DocumentTemplate.Id
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 20950), false)
|
||||
, 23204), false)
|
||||
);
|
||||
|
||||
WriteLiteral(">\r\n <div");
|
||||
@@ -1126,13 +1270,13 @@ WriteLiteral(" class=\"example3 code\"");
|
||||
WriteLiteral("></div>\r\n </div>\r\n </div>\r\n");
|
||||
|
||||
|
||||
#line 447 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 465 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 447 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 465 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id), FormMethod.Post))
|
||||
{
|
||||
|
||||
@@ -1162,7 +1306,7 @@ WriteLiteral(" data-val-required=\"Identifiers are required\"");
|
||||
WriteLiteral("></textarea>\r\n");
|
||||
|
||||
|
||||
#line 451 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 469 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
|
||||
|
||||
@@ -1171,7 +1315,7 @@ WriteLiteral("></textarea>\r\n");
|
||||
WriteLiteral(" </div>\r\n");
|
||||
|
||||
|
||||
#line 453 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 471 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
|
||||
|
||||
@@ -1211,7 +1355,7 @@ WriteLiteral(" <script>\r\n $(function () {\r\n
|
||||
" </script>\r\n");
|
||||
|
||||
|
||||
#line 505 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 523 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
}
|
||||
|
||||
|
||||
@@ -1220,7 +1364,7 @@ WriteLiteral(" <script>\r\n $(function () {\r\n
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 506 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 524 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
if (Authorization.Has(Claims.Config.DocumentTemplate.Delete))
|
||||
{
|
||||
|
||||
@@ -1228,14 +1372,14 @@ WriteLiteral(" ");
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 508 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 526 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
Write(Html.ActionLinkButton("Delete", MVC.API.DocumentTemplate.Delete(Model.DocumentTemplate.Id, true), "buttonDelete"));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 508 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
#line 526 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
@model Disco.Web.Areas.Config.Models.JobQueue.CreateModel
|
||||
@{
|
||||
Authorization.RequireAll(Claims.Config.JobQueue.Create, Claims.Config.JobQueue.Configure);
|
||||
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Job Queues", MVC.Config.JobQueue.Index(null), "Create");
|
||||
}
|
||||
@using (Html.BeginForm())
|
||||
{
|
||||
@Html.HiddenFor(m => m.JobQueue.Icon)
|
||||
@Html.HiddenFor(m => m.JobQueue.IconColour)
|
||||
@Html.HiddenFor(m => m.JobQueue.Priority)
|
||||
<div class="form" style="width: 450px">
|
||||
<table>
|
||||
<tr>
|
||||
<th>
|
||||
Name:
|
||||
</th>
|
||||
<td>
|
||||
@Html.EditorFor(model => model.JobQueue.Name)<br />@Html.ValidationMessageFor(model => model.JobQueue.Name)
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
Description:
|
||||
</th>
|
||||
<td>
|
||||
@Html.EditorFor(model => model.JobQueue.Description)<br />@Html.ValidationMessageFor(model => model.JobQueue.Description)
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p class="actions">
|
||||
<input type="submit" class="button" value="Create" />
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$('#JobQueue_Name').focus().select();
|
||||
});
|
||||
</script>
|
||||
}
|
||||
@@ -0,0 +1,186 @@
|
||||
#pragma warning disable 1591
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.34003
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Disco.Web.Areas.Config.Views.JobQueue
|
||||
{
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using System.Web.Helpers;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Mvc.Ajax;
|
||||
using System.Web.Mvc.Html;
|
||||
using System.Web.Routing;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.WebPages;
|
||||
using Disco;
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Web;
|
||||
using Disco.Web;
|
||||
using Disco.Web.Extensions;
|
||||
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
|
||||
[System.Web.WebPages.PageVirtualPathAttribute("~/Areas/Config/Views/JobQueue/Create.cshtml")]
|
||||
public partial class Create : Disco.Services.Web.WebViewPage<Disco.Web.Areas.Config.Models.JobQueue.CreateModel>
|
||||
{
|
||||
public Create()
|
||||
{
|
||||
}
|
||||
public override void Execute()
|
||||
{
|
||||
|
||||
#line 2 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
|
||||
Authorization.RequireAll(Claims.Config.JobQueue.Create, Claims.Config.JobQueue.Configure);
|
||||
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Job Queues", MVC.Config.JobQueue.Index(null), "Create");
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n");
|
||||
|
||||
|
||||
#line 6 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
using (Html.BeginForm())
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 8 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
Write(Html.HiddenFor(m => m.JobQueue.Icon));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 8 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 9 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
Write(Html.HiddenFor(m => m.JobQueue.IconColour));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 9 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 10 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
Write(Html.HiddenFor(m => m.JobQueue.Priority));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 10 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <div");
|
||||
|
||||
WriteLiteral(" class=\"form\"");
|
||||
|
||||
WriteLiteral(" style=\"width: 450px\"");
|
||||
|
||||
WriteLiteral(">\r\n <table>\r\n <tr>\r\n <th>\r\n N" +
|
||||
"ame:\r\n </th>\r\n <td>\r\n");
|
||||
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 18 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
Write(Html.EditorFor(model => model.JobQueue.Name));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("<br />");
|
||||
|
||||
|
||||
#line 18 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
Write(Html.ValidationMessageFor(model => model.JobQueue.Name));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n </td>\r\n </tr>\r\n <tr>\r\n <th" +
|
||||
">\r\n Description:\r\n </th>\r\n <td>" +
|
||||
"\r\n");
|
||||
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 26 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
Write(Html.EditorFor(model => model.JobQueue.Description));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("<br />");
|
||||
|
||||
|
||||
#line 26 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
Write(Html.ValidationMessageFor(model => model.JobQueue.Description));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n </td>\r\n </tr>\r\n </table>\r\n <p");
|
||||
|
||||
WriteLiteral(" class=\"actions\"");
|
||||
|
||||
WriteLiteral(">\r\n <input");
|
||||
|
||||
WriteLiteral(" type=\"submit\"");
|
||||
|
||||
WriteLiteral(" class=\"button\"");
|
||||
|
||||
WriteLiteral(" value=\"Create\"");
|
||||
|
||||
WriteLiteral(" />\r\n </p>\r\n </div>\r\n");
|
||||
|
||||
WriteLiteral(" <script");
|
||||
|
||||
WriteLiteral(" type=\"text/javascript\"");
|
||||
|
||||
WriteLiteral(">\r\n $(function () {\r\n $(\'#JobQueue_Name\').focus().select();\r\n " +
|
||||
" });\r\n </script>\r\n");
|
||||
|
||||
|
||||
#line 39 "..\..\Areas\Config\Views\JobQueue\Create.cshtml"
|
||||
}
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore 1591
|
||||
@@ -0,0 +1,50 @@
|
||||
@model Disco.Web.Areas.Config.Models.JobQueue.IndexModel
|
||||
@{
|
||||
Authorization.RequireAll(Claims.Config.JobQueue.Create, Claims.Config.JobQueue.Configure);
|
||||
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Job Queues", MVC.Config.JobQueue.Index(null));
|
||||
}
|
||||
<div id="Config_JobQueues_Index">
|
||||
@if (Model.Tokens.Count == 0)
|
||||
{
|
||||
<div class="form" style="width: 450px; padding: 100px 0;">
|
||||
<h2>No job queues are configured</h2>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<table class="tableData">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Priority</th>
|
||||
<th>Linked Groups/Users</th>
|
||||
</tr>
|
||||
@foreach (var item in Model.Tokens)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
<a href="@Url.Action(MVC.Config.JobQueue.Index(item.JobQueue.Id))">
|
||||
<i class="fa fa-@(item.JobQueue.Icon) fa-lg d-@(item.JobQueue.IconColour)"></i>
|
||||
@item.JobQueue.Name
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<i class="fa d-priority-@(item.JobQueue.Priority.ToString().ToLower())" title="@(item.JobQueue.Priority.ToString()) Priority"></i>
|
||||
</td>
|
||||
<td>
|
||||
@if (item.SubjectIds.Count == 0)
|
||||
{
|
||||
<span class="smallMessage"><None></span>
|
||||
}
|
||||
else
|
||||
{
|
||||
@(string.Join(", ", item.SubjectIds.OrderBy(i => i)))
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</table>
|
||||
}
|
||||
<div class="actionBar">
|
||||
@Html.ActionLinkButton("Create Job Queue", MVC.Config.JobQueue.Create())
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,269 @@
|
||||
#pragma warning disable 1591
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.34003
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace Disco.Web.Areas.Config.Views.JobQueue
|
||||
{
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Web;
|
||||
using System.Web.Helpers;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Mvc.Ajax;
|
||||
using System.Web.Mvc.Html;
|
||||
using System.Web.Routing;
|
||||
using System.Web.Security;
|
||||
using System.Web.UI;
|
||||
using System.Web.WebPages;
|
||||
using Disco;
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Web;
|
||||
using Disco.Web;
|
||||
using Disco.Web.Extensions;
|
||||
|
||||
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
|
||||
[System.Web.WebPages.PageVirtualPathAttribute("~/Areas/Config/Views/JobQueue/Index.cshtml")]
|
||||
public partial class Index : Disco.Services.Web.WebViewPage<Disco.Web.Areas.Config.Models.JobQueue.IndexModel>
|
||||
{
|
||||
public Index()
|
||||
{
|
||||
}
|
||||
public override void Execute()
|
||||
{
|
||||
|
||||
#line 2 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
|
||||
Authorization.RequireAll(Claims.Config.JobQueue.Create, Claims.Config.JobQueue.Configure);
|
||||
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Job Queues", MVC.Config.JobQueue.Index(null));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n<div");
|
||||
|
||||
WriteLiteral(" id=\"Config_JobQueues_Index\"");
|
||||
|
||||
WriteLiteral(">\r\n");
|
||||
|
||||
|
||||
#line 7 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 7 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
if (Model.Tokens.Count == 0)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <div");
|
||||
|
||||
WriteLiteral(" class=\"form\"");
|
||||
|
||||
WriteLiteral(" style=\"width: 450px; padding: 100px 0;\"");
|
||||
|
||||
WriteLiteral(">\r\n <h2>No job queues are configured</h2>\r\n </div> \r\n");
|
||||
|
||||
|
||||
#line 12 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <table");
|
||||
|
||||
WriteLiteral(" class=\"tableData\"");
|
||||
|
||||
WriteLiteral(">\r\n <tr>\r\n <th>Name</th>\r\n <th>Priority<" +
|
||||
"/th>\r\n <th>Linked Groups/Users</th>\r\n </tr>\r\n");
|
||||
|
||||
|
||||
#line 21 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 21 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
foreach (var item in Model.Tokens)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <tr>\r\n <td>\r\n <a");
|
||||
|
||||
WriteAttribute("href", Tuple.Create(" href=\"", 852), Tuple.Create("\"", 915)
|
||||
|
||||
#line 25 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 859), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.Config.JobQueue.Index(item.JobQueue.Id))
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 859), false)
|
||||
);
|
||||
|
||||
WriteLiteral(">\r\n <i");
|
||||
|
||||
WriteAttribute("class", Tuple.Create(" class=\"", 949), Tuple.Create("\"", 1020)
|
||||
, Tuple.Create(Tuple.Create("", 957), Tuple.Create("fa", 957), true)
|
||||
, Tuple.Create(Tuple.Create(" ", 959), Tuple.Create("fa-", 960), true)
|
||||
|
||||
#line 26 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 963), Tuple.Create<System.Object, System.Int32>(item.JobQueue.Icon
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 963), false)
|
||||
, Tuple.Create(Tuple.Create(" ", 984), Tuple.Create("fa-lg", 985), true)
|
||||
, Tuple.Create(Tuple.Create(" ", 990), Tuple.Create("d-", 991), true)
|
||||
|
||||
#line 26 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 993), Tuple.Create<System.Object, System.Int32>(item.JobQueue.IconColour
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 993), false)
|
||||
);
|
||||
|
||||
WriteLiteral("></i>\r\n");
|
||||
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 27 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
Write(item.JobQueue.Name);
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n </a>\r\n </td>\r\n <t" +
|
||||
"d>\r\n <i");
|
||||
|
||||
WriteAttribute("class", Tuple.Create(" class=\"", 1186), Tuple.Create("\"", 1254)
|
||||
, Tuple.Create(Tuple.Create("", 1194), Tuple.Create("fa", 1194), true)
|
||||
, Tuple.Create(Tuple.Create(" ", 1196), Tuple.Create("d-priority-", 1197), true)
|
||||
|
||||
#line 31 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 1208), Tuple.Create<System.Object, System.Int32>(item.JobQueue.Priority.ToString().ToLower()
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 1208), false)
|
||||
);
|
||||
|
||||
WriteAttribute("title", Tuple.Create(" title=\"", 1255), Tuple.Create("\"", 1308)
|
||||
|
||||
#line 31 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
, Tuple.Create(Tuple.Create("", 1263), Tuple.Create<System.Object, System.Int32>(item.JobQueue.Priority.ToString()
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
, 1263), false)
|
||||
, Tuple.Create(Tuple.Create(" ", 1299), Tuple.Create("Priority", 1300), true)
|
||||
);
|
||||
|
||||
WriteLiteral("></i>\r\n </td>\r\n <td>\r\n");
|
||||
|
||||
|
||||
#line 34 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 34 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
if (item.SubjectIds.Count == 0)
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <span");
|
||||
|
||||
WriteLiteral(" class=\"smallMessage\"");
|
||||
|
||||
WriteLiteral("><None></span>\r\n");
|
||||
|
||||
|
||||
#line 37 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 40 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
Write(string.Join(", ", item.SubjectIds.OrderBy(i => i)));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
|
||||
#line 40 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </td>\r\n </tr>\r\n");
|
||||
|
||||
|
||||
#line 44 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" </table>\r\n");
|
||||
|
||||
|
||||
#line 46 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
}
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral(" <div");
|
||||
|
||||
WriteLiteral(" class=\"actionBar\"");
|
||||
|
||||
WriteLiteral(">\r\n");
|
||||
|
||||
WriteLiteral(" ");
|
||||
|
||||
|
||||
#line 48 "..\..\Areas\Config\Views\JobQueue\Index.cshtml"
|
||||
Write(Html.ActionLinkButton("Create Job Queue", MVC.Config.JobQueue.Create()));
|
||||
|
||||
|
||||
#line default
|
||||
#line hidden
|
||||
WriteLiteral("\r\n </div>\r\n</div>\r\n");
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma warning restore 1591
|
||||
@@ -0,0 +1,657 @@
|
||||
@model Disco.Web.Areas.Config.Models.JobQueue.ShowModel
|
||||
@using Disco.Services.Jobs.JobQueues;
|
||||
@{
|
||||
Authorization.Require(Claims.Config.JobQueue.Show);
|
||||
|
||||
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Job Queues", MVC.Config.JobQueue.Index(null), Model.Token.JobQueue.ToString());
|
||||
|
||||
var canConfig = Authorization.Has(Claims.Config.JobQueue.Configure);
|
||||
var canDelete = (Authorization.Has(Claims.Config.JobQueue.Delete) && Model.CanDelete);
|
||||
|
||||
Html.BundleDeferred("~/ClientScripts/Modules/Disco-PropertyChangeHelpers");
|
||||
}
|
||||
<div id="Config_JobQueues_Show" class="form" style="width: 550px">
|
||||
<table>
|
||||
<tr>
|
||||
<th style="width: 150px">Id:
|
||||
</th>
|
||||
<td>
|
||||
@Html.DisplayFor(model => model.Token.JobQueue.Id)
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Name:
|
||||
</th>
|
||||
<td>@if (canConfig)
|
||||
{@Html.EditorFor(model => model.Token.JobQueue.Name)
|
||||
@AjaxHelpers.AjaxSave()
|
||||
@AjaxHelpers.AjaxLoader()
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
document.DiscoFunctions.PropertyChangeHelper(
|
||||
$('#Token_JobQueue_Name'),
|
||||
'Invalid Name',
|
||||
'@(Url.Action(MVC.API.JobQueue.UpdateName(Model.Token.JobQueue.Id)))',
|
||||
'QueueName'
|
||||
);
|
||||
});
|
||||
</script>
|
||||
}
|
||||
else
|
||||
{
|
||||
@Model.Token.JobQueue.Name
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Description:
|
||||
</th>
|
||||
<td>@if (canConfig)
|
||||
{@Html.EditorFor(model => model.Token.JobQueue.Description)
|
||||
@AjaxHelpers.AjaxSave()
|
||||
@AjaxHelpers.AjaxLoader()
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
document.DiscoFunctions.PropertyChangeHelper(
|
||||
$('#Token_JobQueue_Description'),
|
||||
'Invalid Description',
|
||||
'@(Url.Action(MVC.API.JobQueue.UpdateDescription(Model.Token.JobQueue.Id)))',
|
||||
'Description'
|
||||
);
|
||||
});
|
||||
</script>
|
||||
}
|
||||
else
|
||||
{
|
||||
<pre>
|
||||
@Model.Token.JobQueue.Description
|
||||
</pre>
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Statistics:
|
||||
</th>
|
||||
<td>
|
||||
<div><strong>@Model.OpenJobCount job@(Model.OpenJobCount != 1 ? "s" : null) open</strong></div>
|
||||
<div>@Model.TotalJobCount total job@(Model.TotalJobCount != 1 ? "s" : null)</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Icon:
|
||||
</th>
|
||||
<td>
|
||||
<i id="Config_JobQueues_Icon" data-icon="@(Model.Token.JobQueue.Icon)" data-colour="@(Model.Token.JobQueue.IconColour)" class="fa fa-@(Model.Token.JobQueue.Icon) fa-4x d-@(Model.Token.JobQueue.IconColour)"></i>
|
||||
@if (canConfig)
|
||||
{
|
||||
<div>
|
||||
<a id="Config_JobQueues_Icon_Update" href="#" class="button small">Update</a>
|
||||
<div id="Config_JobQueues_Icon_Update_Dialog" class="dialog" title="Job Queue Icon">
|
||||
<div>
|
||||
<div class="icons">
|
||||
@foreach (var icon in JobQueueService.Icons)
|
||||
{
|
||||
<i data-icon="@(icon.Key)" class="fa fa-@(icon.Key)" title="@icon.Value"></i>
|
||||
}
|
||||
</div>
|
||||
<div class="colours">
|
||||
@foreach (var colour in JobQueueService.IconColours)
|
||||
{
|
||||
<i data-colour="@(colour.Key)" class="fa fa-square d-@(colour.Key)" title="@colour.Value"></i>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function () {
|
||||
var dialog, icon, colours, icons;
|
||||
|
||||
function showDialog() {
|
||||
if (!dialog) {
|
||||
dialog = $('#Config_JobQueues_Icon_Update_Dialog').dialog({
|
||||
resizable: false,
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 750,
|
||||
height: 600,
|
||||
buttons: {
|
||||
"Save": save,
|
||||
Cancel: cancel
|
||||
}
|
||||
});
|
||||
|
||||
colours = dialog.find('.colours');
|
||||
icons = dialog.find('.icons');
|
||||
|
||||
colours.on('click', 'i', selectColour);
|
||||
icons.on('click', 'i', selectIcon);
|
||||
}
|
||||
|
||||
colours.find('i[data-colour="' + icon.attr('data-colour') + '"]').each(selectColour);
|
||||
icons.find('i[data-icon="' + icon.attr('data-icon') + '"]').each(selectIcon);
|
||||
|
||||
dialog.dialog('open');
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function selectColour() {
|
||||
var $this = $(this),
|
||||
colourCode = $this.attr('data-colour'),
|
||||
previousColourCode = icons.attr('data-colour');
|
||||
|
||||
|
||||
colours.find('i').removeClass('selected fa-check-square').addClass('fa-square');
|
||||
$this.removeClass('fa-square').addClass('fa-check-square selected');
|
||||
|
||||
if (previousColourCode)
|
||||
icons.removeClass('d-' + previousColourCode);
|
||||
icons.attr('data-colour', colourCode)
|
||||
icons.addClass('d-' + colourCode);
|
||||
}
|
||||
function selectIcon() {
|
||||
var $this = $(this),
|
||||
iconCode = $this.attr('data-icon');
|
||||
|
||||
icons.find('i').removeClass('selected');
|
||||
$this.addClass('selected');
|
||||
}
|
||||
|
||||
function save() {
|
||||
var url = '@(Url.Action(MVC.API.JobQueue.UpdateIconAndColour(id: Model.Token.JobQueue.Id, redirect: true)))',
|
||||
data = {
|
||||
Icon: icons.find('i.selected').attr('data-icon'),
|
||||
IconColour: colours.find('i.selected').attr('data-colour')
|
||||
};
|
||||
window.location.href = url + '&' + $.param(data);
|
||||
|
||||
dialog.dialog("disable");
|
||||
dialog.dialog("option", "buttons", null);
|
||||
}
|
||||
|
||||
function cancel() {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
|
||||
$(function () {
|
||||
icon = $('#Config_JobQueues_Icon');
|
||||
$('#Config_JobQueues_Icon_Update').click(showDialog);
|
||||
});
|
||||
}());
|
||||
</script>
|
||||
</div>
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Priority:
|
||||
</th>
|
||||
<td>@if (canConfig)
|
||||
{
|
||||
var priorityValue = Model.Token.JobQueue.Priority.ToString();
|
||||
var priorityItems = Enum.GetNames(typeof(JobQueuePriority)).Select(i => new SelectListItem() { Text = i, Value = i, Selected = (i == priorityValue) }).ToList();
|
||||
<i class="fa d-priority-@(priorityValue.ToLower())" title="@(priorityValue) Priority"></i>
|
||||
@Html.DropDownListFor(m => m.Token.JobQueue.Priority, priorityItems)
|
||||
@AjaxHelpers.AjaxSave()
|
||||
@AjaxHelpers.AjaxLoader()
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
var element = $('#Token_JobQueue_Priority');
|
||||
|
||||
document.DiscoFunctions.PropertyChangeHelper(
|
||||
element,
|
||||
'Invalid Priority',
|
||||
'@(Url.Action(MVC.API.JobQueue.UpdatePriority(Model.Token.JobQueue.Id)))',
|
||||
'Priority'
|
||||
);
|
||||
|
||||
element.change(function () {
|
||||
var icon = element.closest('td').find('i').first();
|
||||
icon[0].className = '';
|
||||
icon.addClass('fa d-priority-' + element.val().toLowerCase()).attr('title', element.val() + ' Priority');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
}
|
||||
else
|
||||
{
|
||||
@Model.Token.JobQueue.Priority.ToString()
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Default SLA:
|
||||
</th>
|
||||
<td>@if (canConfig)
|
||||
{
|
||||
var slaOptions = JobQueueService.SlaOptions.Select(o => new SelectListItem() { Text = o.Value, Value = o.Key.ToString() }).ToList();
|
||||
|
||||
if (this.Model.Token.JobQueue.DefaultSLAExpiry.HasValue)
|
||||
{
|
||||
var slaValue = this.Model.Token.JobQueue.DefaultSLAExpiry.Value;
|
||||
if (JobQueueService.SlaOptions.Where(o => o.Key == slaValue).Count() == 0)
|
||||
{
|
||||
string slaValueText;
|
||||
if (slaValue % (60 * 24 * 7 * 4) == 0)
|
||||
{ slaValueText = string.Format("{0} months", slaValue / (60 * 24 * 7 * 4)); }
|
||||
else if (slaValue % (60 * 24 * 7) == 0)
|
||||
{ slaValueText = string.Format("{0} weeks", slaValue / (60 * 24 * 7)); }
|
||||
else if (slaValue % (60 * 24) == 0)
|
||||
{ slaValueText = string.Format("{0} days", slaValue / (60 * 24)); }
|
||||
else if (slaValue % (60) == 0)
|
||||
{ slaValueText = string.Format("{0} hours", slaValue / 60); }
|
||||
else
|
||||
{ slaValueText = string.Format("{0} minutes", slaValue); }
|
||||
|
||||
slaOptions.Insert(0, new SelectListItem() { Text = string.Format("{0} <Custom>", slaValueText), Value = slaValue.ToString() });
|
||||
}
|
||||
}
|
||||
@Html.DropDownListFor(m => m.Token.JobQueue.DefaultSLAExpiry, slaOptions)
|
||||
@AjaxHelpers.AjaxSave()
|
||||
@AjaxHelpers.AjaxLoader()
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
document.DiscoFunctions.PropertyChangeHelper(
|
||||
$('#Token_JobQueue_DefaultSLAExpiry'),
|
||||
'Invalid Default SLA',
|
||||
'@(Url.Action(MVC.API.JobQueue.UpdateDefaultSLAExpiry(Model.Token.JobQueue.Id)))',
|
||||
'DefaultSLAExpiry'
|
||||
);
|
||||
});
|
||||
</script>
|
||||
}
|
||||
else
|
||||
{
|
||||
if (this.Model.Token.JobQueue.DefaultSLAExpiry.HasValue)
|
||||
{
|
||||
var slaValue = this.Model.Token.JobQueue.DefaultSLAExpiry.Value;
|
||||
var slaOption = JobQueueService.SlaOptions.Where(o => o.Key == slaValue).ToArray();
|
||||
if (slaOption.Length > 0)
|
||||
{
|
||||
@slaOption[0].Value
|
||||
}
|
||||
else
|
||||
{
|
||||
<text><None></text>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<text><None></text>
|
||||
}
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Member Groups/Users:</th>
|
||||
<td>
|
||||
@if (Model.Token.SubjectIds.Count == 0)
|
||||
{
|
||||
<span class="smallMessage">None Associated</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<ul id="Config_JobQueues_Subjects" class="none">
|
||||
@foreach (var sg in Model.Subjects)
|
||||
{
|
||||
var displayName = sg.Id == sg.Name ? sg.Id : string.Format("{0} [{1}]", sg.Name, sg.Id);
|
||||
<li class="@(sg.IsGroup ? "group" : "user")">@if (sg.IsGroup)
|
||||
{
|
||||
<i class="fa fa-users fa-lg"></i>@displayName
|
||||
}
|
||||
else
|
||||
{
|
||||
<a href="@(Url.Action(MVC.User.Show(sg.Id)))"><i class="fa fa-user fa-lg"></i>@displayName</a>
|
||||
}</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
@if (canConfig)
|
||||
{
|
||||
<div>
|
||||
<a id="Config_JobQueues_Subjects_Update" href="#" class="button small">Update</a>
|
||||
<div id="Config_JobQueues_Subjects_Update_Dialog" class="dialog" title="Job Queue Member Groups/Users">
|
||||
<div id="Config_JobQueues_Subjects_Update_Dialog_ListContainer">
|
||||
<span id="Config_JobQueues_Subjects_Update_Dialog_None" class="smallMessage">None Associated</span>
|
||||
<ul id="Config_JobQueues_Subjects_Update_Dialog_List" class="none">
|
||||
@foreach (var sg in Model.Subjects)
|
||||
{
|
||||
var displayName = sg.Id == sg.Name ? sg.Id : string.Format("{0} [{1}]", sg.Name, sg.Id);
|
||||
<li class="@(sg.IsGroup ? "group" : "user")" data-subjectid="@sg.Id">@if (sg.IsGroup)
|
||||
{
|
||||
<i class="fa fa-users fa-lg"></i>@displayName
|
||||
}
|
||||
else
|
||||
{
|
||||
<i class="fa fa-user fa-lg"></i>@displayName
|
||||
}<i class="fa fa-times-circle remove"></i></li>
|
||||
}
|
||||
</ul>
|
||||
</div>
|
||||
<div id="Config_JobQueues_Subjects_Update_Dialog_AddContainer">
|
||||
<input type="text" id="Config_JobQueues_Subjects_Update_Dialog_TextAdd" />
|
||||
<a id="Config_JobQueues_Subjects_Update_Dialog_Add" href="#" class="button small">Add</a>
|
||||
</div>
|
||||
<form id="Config_JobQueues_Subjects_Update_Dialog_Form" action="@(Url.Action(MVC.API.JobQueue.UpdateSubjects(Model.Token.JobQueue.Id, null, true)))" method="post"></form>
|
||||
</div>
|
||||
<script>
|
||||
(function () {
|
||||
var dialog, textAdd, list, noSubjects, form;
|
||||
|
||||
function showDialog() {
|
||||
if (!dialog) {
|
||||
dialog = $('#Config_JobQueues_Subjects_Update_Dialog').dialog({
|
||||
resizable: false,
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 350,
|
||||
height: 420,
|
||||
buttons: {
|
||||
"Save Changes": saveChanges,
|
||||
Cancel: cancel
|
||||
}
|
||||
});
|
||||
|
||||
dialog.on('click', '.remove', remove);
|
||||
|
||||
list = $('#Config_JobQueues_Subjects_Update_Dialog_List');
|
||||
noSubjects = $('#Config_JobQueues_Subjects_Update_Dialog_None');
|
||||
|
||||
textAdd = $('#Config_JobQueues_Subjects_Update_Dialog_TextAdd');
|
||||
|
||||
textAdd.watermark('Search Subjects')
|
||||
.autocomplete({
|
||||
source: '@(Url.Action(MVC.API.JobQueue.SearchSubjects()))',
|
||||
minLength: 2,
|
||||
focus: function (e, ui) {
|
||||
textAdd.val(ui.item.Id);
|
||||
return false;
|
||||
},
|
||||
select: function (e, ui) {
|
||||
textAdd.val(ui.item.Id).blur();
|
||||
return false;
|
||||
}
|
||||
}).data('ui-autocomplete')._renderItem = function (ul, item) {
|
||||
return $("<li></li>")
|
||||
.data("item.autocomplete", item)
|
||||
.append("<a><strong>" + item.Name + "</strong><br>" + item.Id + " (" + item.Type + ")</a>")
|
||||
.appendTo(ul);
|
||||
};
|
||||
|
||||
$('#Config_JobQueues_Subjects_Update_Dialog_Add').click(add);
|
||||
}
|
||||
|
||||
dialog.dialog('open');
|
||||
|
||||
updateNoSubjects();
|
||||
return false;
|
||||
}
|
||||
|
||||
function cancel() {
|
||||
$(this).dialog("close");
|
||||
|
||||
list.find('li').each(function () {
|
||||
$this = $(this);
|
||||
if ($this.is('[data-subjectstatus="new"]')) {
|
||||
$this.remove();
|
||||
} else {
|
||||
if ($this.is('[data-subjectstatus="removed"]')) {
|
||||
$this.show();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function remove() {
|
||||
$this = $(this).closest('li');
|
||||
|
||||
if ($this.is('[data-subjectstatus="new"]')) {
|
||||
$this.remove();
|
||||
} else {
|
||||
$this.attr('data-subjectstatus', 'removed').hide();
|
||||
}
|
||||
|
||||
updateNoSubjects();
|
||||
}
|
||||
|
||||
function add() {
|
||||
|
||||
var id = textAdd.val();
|
||||
|
||||
$.ajax({
|
||||
url: '@Url.Action(MVC.API.JobQueue.Subject())',
|
||||
method: 'get',
|
||||
data: { Id: id }
|
||||
}).done(function (response) {
|
||||
if (response) {
|
||||
if (list.find('li[data-subjectid="' + response.Id + '"]').length == 0) {
|
||||
|
||||
var liIcon = $('<i>').addClass('fa fa-lg');
|
||||
if (response.Type === 'user')
|
||||
liIcon.addClass('fa-user');
|
||||
else
|
||||
liIcon.addClass('fa-users');
|
||||
|
||||
var li = $('<li>')
|
||||
.append(liIcon)
|
||||
.append($('<span>').text(response.Id == response.Name ? response.Id : response.Name + ' [' + response.Id + ']'))
|
||||
.append($('<i>').addClass('fa fa-times-circle remove'))
|
||||
.addClass(response.Type)
|
||||
.attr('data-subjectid', response.Id)
|
||||
.attr('data-subjectstatus', 'new');
|
||||
|
||||
list.append(li);
|
||||
|
||||
updateNoSubjects();
|
||||
} else {
|
||||
alert('That subject has already been added');
|
||||
}
|
||||
} else {
|
||||
alert('Unknown Id');
|
||||
}
|
||||
}).fail(function (jqXHR, textStatus, errorThrown) {
|
||||
alert('Error: ' + errorThrown);
|
||||
});
|
||||
}
|
||||
|
||||
function updateNoSubjects() {
|
||||
if (list.find('li:visible').length > 0)
|
||||
noSubjects.hide();
|
||||
else
|
||||
noSubjects.show();
|
||||
}
|
||||
|
||||
function saveChanges() {
|
||||
var form = $('#Config_JobQueues_Subjects_Update_Dialog_Form').empty();
|
||||
|
||||
list.find('li[data-subjectstatus!="removed"]').each(function () {
|
||||
var subjectId = $(this).attr('data-subjectid');
|
||||
|
||||
form.append($('<input>').attr({
|
||||
'name': 'Subjects',
|
||||
'type': 'hidden'
|
||||
}).val(subjectId));
|
||||
|
||||
}).get();
|
||||
|
||||
form.submit();
|
||||
|
||||
dialog.dialog("disable");
|
||||
dialog.dialog("option", "buttons", null);
|
||||
}
|
||||
|
||||
$(function () {
|
||||
$('#Config_JobQueues_Subjects_Update').click(showDialog);
|
||||
});
|
||||
|
||||
})();
|
||||
</script>
|
||||
</div>
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Automatically Add Jobs:</th>
|
||||
<td>
|
||||
<div>
|
||||
@if (Model.Token.JobQueue.JobSubTypes.Count > 0)
|
||||
{
|
||||
<ul>
|
||||
@foreach (var jobType in Model.Token.JobQueue.JobSubTypes.GroupBy(jst => jst.JobType).OrderBy(jtg => jtg.Key.Description))
|
||||
{
|
||||
<li>
|
||||
@jobType.Key.Description
|
||||
<ul>
|
||||
@if (jobType.Count() == Model.JobTypes.FirstOrDefault(jt => jt.Id == jobType.Key.Id).JobSubTypes.Count)
|
||||
{
|
||||
<li><span class="smallMessage">[All Sub Types]</span></li>
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var jobSubType in jobType)
|
||||
{
|
||||
<li>@jobSubType.Description</li>
|
||||
}
|
||||
}
|
||||
</ul>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
else
|
||||
{
|
||||
<text><None></text>
|
||||
}
|
||||
</div>
|
||||
@if (canConfig)
|
||||
{
|
||||
<a id="Config_JobQueues_JobSubTypes_Update" href="#" class="button small">Update</a>
|
||||
<div id="Config_JobQueues_JobSubTypes_Update_Dialog" class="dialog" title="Job Queue Automatic Types">
|
||||
@using (Html.BeginForm(MVC.API.JobQueue.UpdateJobSubTypes(Model.Token.JobQueue.Id, null, true)))
|
||||
{
|
||||
var selectedTypes = Model.Token.JobQueue.JobSubTypes.Select(jst => jst.JobType).Distinct().ToList();
|
||||
foreach (var jt in Model.JobTypes)
|
||||
{
|
||||
<div id="trJobType@(jt.Id)" class="jobTypes">
|
||||
<h4>
|
||||
<input id="Types_@(jt.Id)" class="jobType" type="checkbox" value="@(jt.Id)" @(selectedTypes.Contains(jt) ? "checked=\"checked\"" : null) /><label for="Types_@(jt.Id)">@jt.Description</label></h4>
|
||||
<div id="SubTypes_@(jt.Id)" class="jobSubTypes">
|
||||
@CommonHelpers.CheckboxBulkSelect(string.Format("CheckboxBulkSelect_{0}", jt.Id), "div")
|
||||
@CommonHelpers.CheckBoxList("JobSubTypes", jt.JobSubTypes.OrderBy(jst => jst.Description).ToSelectListItems(Model.Token.JobQueue.JobSubTypes), 2)
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
<script>
|
||||
(function () {
|
||||
var dialog;
|
||||
|
||||
function showDialog() {
|
||||
if (!dialog) {
|
||||
dialog = $('#Config_JobQueues_JobSubTypes_Update_Dialog').dialog({
|
||||
resizable: false,
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
width: 750,
|
||||
height: 620,
|
||||
buttons: {
|
||||
"Save Changes": saveChanges,
|
||||
Cancel: cancel
|
||||
}
|
||||
});
|
||||
|
||||
dialog.find('.jobSubTypes').hide();
|
||||
dialog.on('change', 'input.jobType', function () {
|
||||
var $this = $(this);
|
||||
if ($this.is(':checked'))
|
||||
$('#SubTypes_' + $this.val()).slideDown('fast');
|
||||
else
|
||||
$('#SubTypes_' + $this.val()).slideUp('fast');
|
||||
}).find('input.jobType:checked').each(function () {
|
||||
$('#SubTypes_' + $(this).val()).show();
|
||||
});
|
||||
}
|
||||
|
||||
dialog.dialog('open');
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function cancel() {
|
||||
dialog.dialog("disable");
|
||||
dialog.dialog("option", "buttons", null);
|
||||
|
||||
// Refresh Page
|
||||
window.location.href = window.location.href;
|
||||
}
|
||||
|
||||
function saveChanges() {
|
||||
var form = dialog.find('form');
|
||||
|
||||
$('input.jobType:unchecked').each(function () {
|
||||
$('#SubTypes_' + $(this).val()).find('input').prop('checked', false);
|
||||
});
|
||||
|
||||
form.submit();
|
||||
|
||||
dialog.dialog("disable");
|
||||
dialog.dialog("option", "buttons", null);
|
||||
}
|
||||
|
||||
$(function () {
|
||||
$('#Config_JobQueues_JobSubTypes_Update').click(showDialog);
|
||||
});
|
||||
|
||||
})();
|
||||
</script>
|
||||
}
|
||||
<div style="padding: 0.7em 0.7em;" class="ui-state-highlight ui-corner-all">
|
||||
<i class="fa fa-info-circle information"></i> When jobs of these types are created, they will automatically be added into this queue.
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
@if (canDelete)
|
||||
{
|
||||
<div class="actionBar">
|
||||
@Html.ActionLinkButton("Delete", MVC.API.JobQueue.Delete(Model.Token.JobQueue.Id, true), "Config_JobQueues_Actions_Delete_Button")
|
||||
<div id="Config_JobQueues_Actions_Delete_Dialog" title="Delete this Job Queue?">
|
||||
<p>
|
||||
<i class="fa fa-exclamation-triangle fa-lg warning"></i>
|
||||
This item will be permanently deleted and cannot be recovered.<br />
|
||||
<br />
|
||||
Are you sure?
|
||||
</p>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
var button = $('#Config_JobQueues_Actions_Delete_Button');
|
||||
var buttonDialog = $('#Config_JobQueues_Actions_Delete_Dialog');
|
||||
var buttonLink = button.attr('href');
|
||||
button.attr('href', '#');
|
||||
button.click(function () {
|
||||
buttonDialog.dialog('open');
|
||||
return false;
|
||||
});
|
||||
buttonDialog.dialog({
|
||||
resizable: false,
|
||||
modal: true,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
"Delete": function () {
|
||||
var $this = $(this);
|
||||
$this.dialog("disable");
|
||||
$this.dialog("option", "buttons", null);
|
||||
window.location.href = buttonLink;
|
||||
},
|
||||
Cancel: function () {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -15,6 +15,7 @@
|
||||
<add namespace="Disco" />
|
||||
<add namespace="Disco.BI.Extensions" />
|
||||
<add namespace="Disco.Models.Repository" />
|
||||
<add namespace="Disco.Services" />
|
||||
<add namespace="Disco.Services.Authorization" />
|
||||
<add namespace="Disco.Services.Web" />
|
||||
<add namespace="Disco.Web" />
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@{
|
||||
Layout = MVC.Shared.Views._Layout;
|
||||
Html.BundleDeferred("~/Style/Config");
|
||||
ViewContext.ViewData["MenuArea"] = MVC.Config.Name;
|
||||
}
|
||||
@@ -48,6 +48,7 @@ namespace Disco.Web.Areas.Config.Views
|
||||
|
||||
Layout = MVC.Shared.Views._Layout;
|
||||
Html.BundleDeferred("~/Style/Config");
|
||||
ViewContext.ViewData["MenuArea"] = MVC.Config.Name;
|
||||
|
||||
|
||||
#line default
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
<namespaces>
|
||||
<add namespace="Disco.BI.Extensions" />
|
||||
<add namespace="Disco.Models.Repository" />
|
||||
<add namespace="Disco.Services" />
|
||||
<add namespace="Disco.Services.Authorization" />
|
||||
<add namespace="Disco.Services.Web" />
|
||||
<add namespace="Disco.Web" />
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
@{
|
||||
Layout = MVC.Shared.Views._PublicLayout;
|
||||
ViewContext.ViewData["MenuArea"] = MVC.Public.Name;
|
||||
}
|
||||
@@ -46,6 +46,7 @@ namespace Disco.Web.Areas.Public.Views
|
||||
#line 1 "..\..\Areas\Public\Views\_ViewStart.cshtml"
|
||||
|
||||
Layout = MVC.Shared.Views._PublicLayout;
|
||||
ViewContext.ViewData["MenuArea"] = MVC.Public.Name;
|
||||
|
||||
|
||||
#line default
|
||||
|
||||
@@ -41952,7 +41952,7 @@ jQuery.fn.DataTable.defaults.aLengthMenu = [[10, 20, 50, -1], [10, 20, 50, "All"
|
||||
|
||||
function subMenuShow() {
|
||||
var $this = $(this);
|
||||
var $subMenu = $this.children('ul.subMenu');
|
||||
var $subMenu = $this.children('ul');
|
||||
var hideToken = $this.data('menuHideToken');
|
||||
|
||||
if (hideToken)
|
||||
@@ -41963,7 +41963,7 @@ jQuery.fn.DataTable.defaults.aLengthMenu = [[10, 20, 50, -1], [10, 20, 50, "All"
|
||||
}
|
||||
function subMenuHide() {
|
||||
var $this = $(this);
|
||||
var $subMenu = $this.children('ul.subMenu');
|
||||
var $subMenu = $this.children('ul');
|
||||
|
||||
var hideToken = window.setTimeout(function () {
|
||||
$subMenu.hide();
|
||||
@@ -41974,7 +41974,7 @@ jQuery.fn.DataTable.defaults.aLengthMenu = [[10, 20, 50, -1], [10, 20, 50, "All"
|
||||
function subMenuTouchDown(e, preventClick) {
|
||||
var $this = $(this);
|
||||
var $link = $this.children('a');
|
||||
var $subMenu = $this.children('ul.subMenu');
|
||||
var $subMenu = $this.children('ul');
|
||||
|
||||
if (!$subMenu.is(':visible')) {
|
||||
|
||||
@@ -41998,17 +41998,17 @@ jQuery.fn.DataTable.defaults.aLengthMenu = [[10, 20, 50, -1], [10, 20, 50, "All"
|
||||
if (Modernizr.hasEvent('pointerdown')) {
|
||||
// Pointer Events
|
||||
$menu
|
||||
.on('pointerover', 'li.hasSubMenu', function (e) {
|
||||
.on('pointerover', 'li.d-sm', function (e) {
|
||||
if (e.originalEvent.pointerType !== 'touch') {
|
||||
subMenuShow.call(this);
|
||||
}
|
||||
})
|
||||
.on('pointerout', 'li.hasSubMenu', function (e) {
|
||||
.on('pointerout', 'li.d-sm', function (e) {
|
||||
if (e.originalEvent.pointerType !== 'touch') {
|
||||
subMenuHide.call(this);
|
||||
}
|
||||
})
|
||||
.on('pointerdown', 'li.hasSubMenu', function (e) {
|
||||
.on('pointerdown', 'li.d-sm', function (e) {
|
||||
if (e.originalEvent.pointerType === 'touch') {
|
||||
return subMenuTouchDown.call(this, e, true);
|
||||
}
|
||||
@@ -42016,23 +42016,23 @@ jQuery.fn.DataTable.defaults.aLengthMenu = [[10, 20, 50, -1], [10, 20, 50, "All"
|
||||
$(document).on('pointerdown', function (e) {
|
||||
if (e.originalEvent.pointerType === 'touch') {
|
||||
if ($(e.target).closest('#menu').length == 0)
|
||||
$menu.find('li.hasSubMenu>ul.subMenu:visible').hide();
|
||||
$menu.find('li.d-sm>ul.subMenu:visible').hide();
|
||||
}
|
||||
});
|
||||
} else if (Modernizr.hasEvent('mspointerdown')) {
|
||||
// MS Pointer Events
|
||||
$menu
|
||||
.on('MSPointerOver', 'li.hasSubMenu', function (e) {
|
||||
.on('MSPointerOver', 'li.d-sm', function (e) {
|
||||
if (e.originalEvent.pointerType !== e.originalEvent.MSPOINTER_TYPE_TOUCH) {
|
||||
subMenuShow.call(this);
|
||||
}
|
||||
})
|
||||
.on('MSPointerOut', 'li.hasSubMenu', function (e) {
|
||||
.on('MSPointerOut', 'li.d-sm', function (e) {
|
||||
if (e.originalEvent.pointerType !== e.originalEvent.MSPOINTER_TYPE_TOUCH) {
|
||||
subMenuHide.call(this);
|
||||
}
|
||||
})
|
||||
.on('MSPointerDown', 'li.hasSubMenu', function (e) {
|
||||
.on('MSPointerDown', 'li.d-sm', function (e) {
|
||||
if (e.originalEvent.pointerType === e.originalEvent.MSPOINTER_TYPE_TOUCH) {
|
||||
return subMenuTouchDown.call(this, e, true);
|
||||
}
|
||||
@@ -42040,22 +42040,22 @@ jQuery.fn.DataTable.defaults.aLengthMenu = [[10, 20, 50, -1], [10, 20, 50, "All"
|
||||
$(document).on('MSPointerDown', function (e) {
|
||||
if (e.originalEvent.pointerType === e.originalEvent.MSPOINTER_TYPE_TOUCH) {
|
||||
if ($(e.target).closest('#menu').length == 0)
|
||||
$menu.find('li.hasSubMenu>ul.subMenu:visible').hide();
|
||||
$menu.find('li.d-sm>ul.subMenu:visible').hide();
|
||||
}
|
||||
});
|
||||
} else if (Modernizr.touch) {
|
||||
// Touch Events
|
||||
$menu
|
||||
.on('mouseover', 'li.hasSubMenu', subMenuShow)
|
||||
.on('mouseout', 'li.hasSubMenu', subMenuHide)
|
||||
.on('touchstart', 'li.hasSubMenu', function (e) {
|
||||
.on('mouseover', 'li.d-sm', subMenuShow)
|
||||
.on('mouseout', 'li.d-sm', subMenuHide)
|
||||
.on('touchstart', 'li.d-sm', function (e) {
|
||||
return subMenuTouchDown.call(this, e, false);
|
||||
});
|
||||
} else {
|
||||
// Mouse Events
|
||||
$menu
|
||||
.on('mouseover', 'li.hasSubMenu', subMenuShow)
|
||||
.on('mouseout', 'li.hasSubMenu', subMenuHide);
|
||||
.on('mouseover', 'li.d-sm', subMenuShow)
|
||||
.on('mouseout', 'li.d-sm', subMenuHide);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,13 @@
|
||||
/// <reference path="modernizr-2.6.2.js" />
|
||||
/// <reference path="jquery-2.0.3.js" />
|
||||
/// <reference path="jquery.validate.js" />
|
||||
/// <reference path="jquery.validate.unobtrusive.js" />
|
||||
/// <reference path="disco.unobtrusiveValidation.extensions.js" />
|
||||
/// <reference path="jquery-ui-1.10.3.js" />
|
||||
/// <reference path="jquery.watermark.js" />
|
||||
/// <reference path="jquery.dataTables.js" />
|
||||
/// <reference path="moment.js" />
|
||||
/// <reference path="moment.en-au.js" />
|
||||
/// <reference path="disco.moment.extensions.js" />
|
||||
/// <reference path="disco.dataTables.extensions.js" />
|
||||
/// <reference path="disco.uicore.js" />
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
function subMenuShow() {
|
||||
var $this = $(this);
|
||||
var $subMenu = $this.children('ul.subMenu');
|
||||
var $subMenu = $this.children('ul');
|
||||
var hideToken = $this.data('menuHideToken');
|
||||
|
||||
if (hideToken)
|
||||
@@ -31,7 +31,7 @@
|
||||
}
|
||||
function subMenuHide() {
|
||||
var $this = $(this);
|
||||
var $subMenu = $this.children('ul.subMenu');
|
||||
var $subMenu = $this.children('ul');
|
||||
|
||||
var hideToken = window.setTimeout(function () {
|
||||
$subMenu.hide();
|
||||
@@ -42,7 +42,7 @@
|
||||
function subMenuTouchDown(e, preventClick) {
|
||||
var $this = $(this);
|
||||
var $link = $this.children('a');
|
||||
var $subMenu = $this.children('ul.subMenu');
|
||||
var $subMenu = $this.children('ul');
|
||||
|
||||
if (!$subMenu.is(':visible')) {
|
||||
|
||||
@@ -66,17 +66,17 @@
|
||||
if (Modernizr.hasEvent('pointerdown')) {
|
||||
// Pointer Events
|
||||
$menu
|
||||
.on('pointerover', 'li.hasSubMenu', function (e) {
|
||||
.on('pointerover', 'li.d-sm', function (e) {
|
||||
if (e.originalEvent.pointerType !== 'touch') {
|
||||
subMenuShow.call(this);
|
||||
}
|
||||
})
|
||||
.on('pointerout', 'li.hasSubMenu', function (e) {
|
||||
.on('pointerout', 'li.d-sm', function (e) {
|
||||
if (e.originalEvent.pointerType !== 'touch') {
|
||||
subMenuHide.call(this);
|
||||
}
|
||||
})
|
||||
.on('pointerdown', 'li.hasSubMenu', function (e) {
|
||||
.on('pointerdown', 'li.d-sm', function (e) {
|
||||
if (e.originalEvent.pointerType === 'touch') {
|
||||
return subMenuTouchDown.call(this, e, true);
|
||||
}
|
||||
@@ -84,23 +84,23 @@
|
||||
$(document).on('pointerdown', function (e) {
|
||||
if (e.originalEvent.pointerType === 'touch') {
|
||||
if ($(e.target).closest('#menu').length == 0)
|
||||
$menu.find('li.hasSubMenu>ul.subMenu:visible').hide();
|
||||
$menu.find('li.d-sm>ul.subMenu:visible').hide();
|
||||
}
|
||||
});
|
||||
} else if (Modernizr.hasEvent('mspointerdown')) {
|
||||
// MS Pointer Events
|
||||
$menu
|
||||
.on('MSPointerOver', 'li.hasSubMenu', function (e) {
|
||||
.on('MSPointerOver', 'li.d-sm', function (e) {
|
||||
if (e.originalEvent.pointerType !== e.originalEvent.MSPOINTER_TYPE_TOUCH) {
|
||||
subMenuShow.call(this);
|
||||
}
|
||||
})
|
||||
.on('MSPointerOut', 'li.hasSubMenu', function (e) {
|
||||
.on('MSPointerOut', 'li.d-sm', function (e) {
|
||||
if (e.originalEvent.pointerType !== e.originalEvent.MSPOINTER_TYPE_TOUCH) {
|
||||
subMenuHide.call(this);
|
||||
}
|
||||
})
|
||||
.on('MSPointerDown', 'li.hasSubMenu', function (e) {
|
||||
.on('MSPointerDown', 'li.d-sm', function (e) {
|
||||
if (e.originalEvent.pointerType === e.originalEvent.MSPOINTER_TYPE_TOUCH) {
|
||||
return subMenuTouchDown.call(this, e, true);
|
||||
}
|
||||
@@ -108,22 +108,22 @@
|
||||
$(document).on('MSPointerDown', function (e) {
|
||||
if (e.originalEvent.pointerType === e.originalEvent.MSPOINTER_TYPE_TOUCH) {
|
||||
if ($(e.target).closest('#menu').length == 0)
|
||||
$menu.find('li.hasSubMenu>ul.subMenu:visible').hide();
|
||||
$menu.find('li.d-sm>ul.subMenu:visible').hide();
|
||||
}
|
||||
});
|
||||
} else if (Modernizr.touch) {
|
||||
// Touch Events
|
||||
$menu
|
||||
.on('mouseover', 'li.hasSubMenu', subMenuShow)
|
||||
.on('mouseout', 'li.hasSubMenu', subMenuHide)
|
||||
.on('touchstart', 'li.hasSubMenu', function (e) {
|
||||
.on('mouseover', 'li.d-sm', subMenuShow)
|
||||
.on('mouseout', 'li.d-sm', subMenuHide)
|
||||
.on('touchstart', 'li.d-sm', function (e) {
|
||||
return subMenuTouchDown.call(this, e, false);
|
||||
});
|
||||
} else {
|
||||
// Mouse Events
|
||||
$menu
|
||||
.on('mouseover', 'li.hasSubMenu', subMenuShow)
|
||||
.on('mouseout', 'li.hasSubMenu', subMenuHide);
|
||||
.on('mouseover', 'li.d-sm', subMenuShow)
|
||||
.on('mouseout', 'li.d-sm', subMenuHide);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1426
-958
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<bundle minify="true" runOnBuild="true">
|
||||
<file>/ClientSource/Style/normalize.css</file>
|
||||
<file>/ClientSource/Style/jQueryUI/jquery-ui.css</file>
|
||||
<file>/ClientSource/Style/FontAwesome/font-awesome.css</file>
|
||||
<file>/ClientSource/Style/Site.css</file>
|
||||
<file>/ClientSource/Style/jQueryUIExtensions.css</file>
|
||||
</bundle>
|
||||
@@ -0,0 +1,5 @@
|
||||
@import "normalize";
|
||||
@import "jQueryUI/jquery-ui";
|
||||
@import "FontAwesome/font-awesome";
|
||||
@import "Site";
|
||||
@import "jQueryUIExtensions";
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -15,7 +15,10 @@
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
.tableData > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
.tableData > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
.tableData > tfoot > tr > th,
|
||||
.tableData > tfoot > tr > td {
|
||||
@@ -30,7 +33,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.tableDataDark th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
.tableDataContainer {
|
||||
@@ -144,7 +147,10 @@ table.expressionsTable > tbody > tr > th {
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
table.expressionsTable > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
table.expressionsTable > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
table.expressionsTable > tfoot > tr > th,
|
||||
table.expressionsTable > tfoot > tr > td {
|
||||
@@ -173,7 +179,10 @@ table.expressionsTable td.parseError {
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
#deviceComponents > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
#deviceComponents > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
#deviceComponents > tfoot > tr > th,
|
||||
#deviceComponents > tfoot > tr > td {
|
||||
@@ -550,6 +559,33 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.eventType {
|
||||
padding: 2px;
|
||||
height: 430px;
|
||||
}
|
||||
#Config_DocumentTemplates_JobSubTypes {
|
||||
border: 1px dashed #d8d8d8;
|
||||
background-color: #ffffff;
|
||||
padding: 4px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
#Config_DocumentTemplates_JobSubTypes > h4 {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
#Config_DocumentTemplates_JobSubTypes #Config_DocumentTemplates_JobSubTypes_Update {
|
||||
margin-top: 4px;
|
||||
}
|
||||
#Config_DocumentTemplates_JobSubTypes_Update_Dialog #Config_DocumentTemplates_JobSubTypes_Update_Dialog_Types {
|
||||
margin: 0 0 8px 0;
|
||||
}
|
||||
#Config_DocumentTemplates_JobSubTypes_Update_Dialog .jobTypes {
|
||||
padding: 6px 0;
|
||||
}
|
||||
#Config_DocumentTemplates_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes {
|
||||
background-color: #f2f2f2;
|
||||
border-left: 4px solid #d8d8d8;
|
||||
padding: 4px 0 4px 8px;
|
||||
margin: 4px 0 0 6px;
|
||||
}
|
||||
#Config_DocumentTemplates_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer {
|
||||
font-size: .8em;
|
||||
}
|
||||
#dialogBulkGenerate .brief {
|
||||
margin: 0 0 8px 0;
|
||||
}
|
||||
@@ -786,7 +822,7 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.eventType {
|
||||
}
|
||||
#plugins #pageMenu td .pageMenuArea > a,
|
||||
#plugins #pageMenu td .pageMenuArea > h3 {
|
||||
color: #515151;
|
||||
color: #333333;
|
||||
}
|
||||
#plugins #pageMenu td .pageMenuArea > a:hover,
|
||||
#plugins #pageMenu td .pageMenuArea > h3:hover {
|
||||
@@ -814,7 +850,7 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.eventType {
|
||||
#pluginCatalog .pluginItem > h2:first-child i {
|
||||
font-size: .9em;
|
||||
padding-right: 4px;
|
||||
color: #515151;
|
||||
color: #333333;
|
||||
}
|
||||
#pluginCatalog .pluginItem > h2:first-child a {
|
||||
float: right;
|
||||
@@ -866,9 +902,6 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.eventType {
|
||||
#Config_AuthRoles_Subjects_Update_Dialog {
|
||||
display: none;
|
||||
}
|
||||
#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_None {
|
||||
display: none;
|
||||
}
|
||||
#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_ListContainer {
|
||||
height: 280px;
|
||||
overflow-y: auto;
|
||||
@@ -905,3 +938,120 @@ div.logEventsViewport table.logEventsViewport > tbody > tr > td.eventType {
|
||||
#Config_AuthRoles_Subjects_Update_Dialog #Config_AuthRoles_Subjects_Update_Dialog_List li .remove:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
#Config_JobQueues_Index i {
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
}
|
||||
#Config_JobQueues_Icon {
|
||||
display: block;
|
||||
margin: 0 0 10px 10px;
|
||||
}
|
||||
#Config_JobQueues_Icon_Update_Dialog {
|
||||
display: none;
|
||||
}
|
||||
#Config_JobQueues_Icon_Update_Dialog div.colours {
|
||||
text-align: center;
|
||||
font-size: 30px;
|
||||
}
|
||||
#Config_JobQueues_Icon_Update_Dialog div.colours i {
|
||||
cursor: pointer;
|
||||
padding: 1px;
|
||||
opacity: .9;
|
||||
}
|
||||
#Config_JobQueues_Icon_Update_Dialog div.colours i:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
#Config_JobQueues_Icon_Update_Dialog div.colours i.selected {
|
||||
opacity: 1;
|
||||
}
|
||||
#Config_JobQueues_Icon_Update_Dialog div.icons {
|
||||
text-align: center;
|
||||
font-size: 34px;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #d1d1d1;
|
||||
margin: 6px 0 14px 0;
|
||||
}
|
||||
#Config_JobQueues_Icon_Update_Dialog div.icons i {
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
padding: 6px 0px;
|
||||
color: #333333;
|
||||
opacity: .6;
|
||||
}
|
||||
#Config_JobQueues_Icon_Update_Dialog div.icons i:hover {
|
||||
opacity: .9;
|
||||
color: inherit;
|
||||
}
|
||||
#Config_JobQueues_Icon_Update_Dialog div.icons i.selected {
|
||||
opacity: 1;
|
||||
color: inherit;
|
||||
}
|
||||
#Config_JobQueues_JobSubTypes_Update {
|
||||
margin: 8px 0;
|
||||
}
|
||||
#Config_JobQueues_JobSubTypes_Update_Dialog #Config_JobQueues_JobSubTypes_Update_Dialog_Types {
|
||||
margin: 0 0 8px 0;
|
||||
}
|
||||
#Config_JobQueues_JobSubTypes_Update_Dialog .jobTypes {
|
||||
padding: 6px 0;
|
||||
}
|
||||
#Config_JobQueues_JobSubTypes_Update_Dialog .jobTypes .jobSubTypes {
|
||||
background-color: #f2f2f2;
|
||||
border-left: 4px solid #d8d8d8;
|
||||
padding: 4px 0 4px 8px;
|
||||
margin: 4px 0 0 6px;
|
||||
}
|
||||
#Config_JobQueues_JobSubTypes_Update_Dialog .checkboxBulkSelectContainer {
|
||||
font-size: .8em;
|
||||
}
|
||||
#Config_JobQueues_Subjects li,
|
||||
#Config_JobQueues_Subjects_Update_Dialog_List li {
|
||||
padding: 4px 0 4px 4px;
|
||||
}
|
||||
#Config_JobQueues_Subjects li i.fa-user,
|
||||
#Config_JobQueues_Subjects_Update_Dialog_List li i.fa-user,
|
||||
#Config_JobQueues_Subjects li i.fa-users,
|
||||
#Config_JobQueues_Subjects_Update_Dialog_List li i.fa-users {
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
}
|
||||
#Config_JobQueues_Subjects_Update_Dialog {
|
||||
display: none;
|
||||
}
|
||||
#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_ListContainer {
|
||||
height: 280px;
|
||||
overflow-y: auto;
|
||||
background-color: #ffffff;
|
||||
border: 1px solid #d8d8d8;
|
||||
}
|
||||
#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_None {
|
||||
padding-top: 15px;
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_AddContainer {
|
||||
padding-top: 10px;
|
||||
padding-left: 10px;
|
||||
}
|
||||
#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li {
|
||||
cursor: pointer;
|
||||
}
|
||||
#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li:hover {
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li:hover .remove {
|
||||
opacity: .8;
|
||||
}
|
||||
#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li .remove {
|
||||
margin-top: 2px;
|
||||
padding-right: 6px;
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
opacity: 0;
|
||||
color: #e51400;
|
||||
font-size: 1.3em;
|
||||
}
|
||||
#Config_JobQueues_Subjects_Update_Dialog #Config_JobQueues_Subjects_Update_Dialog_List li .remove:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
@@ -570,6 +570,41 @@ div.logEventsViewport {
|
||||
}
|
||||
|
||||
// Document Templates
|
||||
#Config_DocumentTemplates_JobSubTypes {
|
||||
border: 1px dashed @TableDataDarkBorderColour;
|
||||
background-color: @white;
|
||||
padding: 4px;
|
||||
margin-top: 6px;
|
||||
|
||||
& > h4 {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
#Config_DocumentTemplates_JobSubTypes_Update {
|
||||
margin-top: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
#Config_DocumentTemplates_JobSubTypes_Update_Dialog {
|
||||
#Config_DocumentTemplates_JobSubTypes_Update_Dialog_Types {
|
||||
margin: 0 0 8px 0;
|
||||
}
|
||||
|
||||
.jobTypes {
|
||||
padding: 6px 0;
|
||||
|
||||
.jobSubTypes {
|
||||
background-color: @FormBackgroundOddColour;
|
||||
border-left: 4px solid @TableDataDarkBorderColour;
|
||||
padding: 4px 0 4px 8px;
|
||||
margin: 4px 0 0 6px;
|
||||
}
|
||||
}
|
||||
|
||||
.checkboxBulkSelectContainer {
|
||||
font-size: .8em;
|
||||
}
|
||||
}
|
||||
|
||||
#dialogBulkGenerate {
|
||||
.brief {
|
||||
margin: 0 0 8px 0;
|
||||
@@ -984,10 +1019,6 @@ div.logEventsViewport {
|
||||
#Config_AuthRoles_Subjects_Update_Dialog {
|
||||
display: none;
|
||||
|
||||
#Config_AuthRoles_Subjects_Update_Dialog_None {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#Config_AuthRoles_Subjects_Update_Dialog_ListContainer {
|
||||
height: 280px;
|
||||
overflow-y: auto;
|
||||
@@ -1034,3 +1065,151 @@ div.logEventsViewport {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Config_JobQueues_Index {
|
||||
i {
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
#Config_JobQueues_Icon {
|
||||
display: block;
|
||||
margin: 0 0 10px 10px;
|
||||
}
|
||||
|
||||
#Config_JobQueues_Icon_Update_Dialog {
|
||||
display: none;
|
||||
|
||||
div.colours {
|
||||
text-align: center;
|
||||
font-size: 30px;
|
||||
|
||||
i {
|
||||
cursor: pointer;
|
||||
padding: 1px;
|
||||
opacity: .9;
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
&.selected {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
div.icons {
|
||||
text-align: center;
|
||||
font-size: 34px;
|
||||
background-color: @white;
|
||||
border: 1px solid @BackgroundColour;
|
||||
margin: 6px 0 14px 0;
|
||||
|
||||
i {
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
padding: 6px 0px;
|
||||
color: @HeaderBackgroundColour;
|
||||
opacity: .6;
|
||||
|
||||
&:hover {
|
||||
opacity: .9;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
&.selected {
|
||||
opacity: 1;
|
||||
color: inherit;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Config_JobQueues_JobSubTypes_Update {
|
||||
margin: 8px 0;
|
||||
}
|
||||
|
||||
#Config_JobQueues_JobSubTypes_Update_Dialog {
|
||||
#Config_JobQueues_JobSubTypes_Update_Dialog_Types {
|
||||
margin: 0 0 8px 0;
|
||||
}
|
||||
|
||||
.jobTypes {
|
||||
padding: 6px 0;
|
||||
|
||||
.jobSubTypes {
|
||||
background-color: @FormBackgroundOddColour;
|
||||
border-left: 4px solid @TableDataDarkBorderColour;
|
||||
padding: 4px 0 4px 8px;
|
||||
margin: 4px 0 0 6px;
|
||||
}
|
||||
}
|
||||
|
||||
.checkboxBulkSelectContainer {
|
||||
font-size: .8em;
|
||||
}
|
||||
}
|
||||
|
||||
#Config_JobQueues_Subjects, #Config_JobQueues_Subjects_Update_Dialog_List {
|
||||
li {
|
||||
padding: 4px 0 4px 4px;
|
||||
|
||||
i.fa-user, i.fa-users {
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Config_JobQueues_Subjects_Update_Dialog {
|
||||
display: none;
|
||||
|
||||
#Config_JobQueues_Subjects_Update_Dialog_ListContainer {
|
||||
height: 280px;
|
||||
overflow-y: auto;
|
||||
background-color: @white;
|
||||
border: 1px solid @TableDataDarkBorderColour;
|
||||
}
|
||||
|
||||
#Config_JobQueues_Subjects_Update_Dialog_None {
|
||||
padding-top: 15px;
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#Config_JobQueues_Subjects_Update_Dialog_AddContainer {
|
||||
padding-top: 10px;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
#Config_JobQueues_Subjects_Update_Dialog_List {
|
||||
li {
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background-color: @TableDataBorderColour;
|
||||
|
||||
.remove {
|
||||
opacity: .8;
|
||||
}
|
||||
}
|
||||
|
||||
.remove {
|
||||
margin-top: 2px;
|
||||
padding-right: 6px;
|
||||
float: right;
|
||||
cursor: pointer;
|
||||
opacity: 0;
|
||||
color: @StatusRemove;
|
||||
font-size: 1.3em;
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -2,7 +2,7 @@
|
||||
@BackgroundColour: #D1D1D1;
|
||||
@BackgroundColourGradient: #f2f2f2;
|
||||
@BackgroundColourLight: #fafafa;
|
||||
@HeaderBackgroundColour: #515151;
|
||||
@HeaderBackgroundColour: #333;
|
||||
|
||||
@HyperLinkColour: #335A87;
|
||||
@HyperLinkHoverColour: lighten(@HyperLinkColour, 20%);
|
||||
@@ -15,14 +15,18 @@
|
||||
@ButtonBorderAlertColour: #990000;
|
||||
|
||||
@MenuHoverColour: lighten(@HyperLinkHoverColour, 30%);
|
||||
@MenuHoverBackgroundColour: #111;
|
||||
@MenuActiveBackgroundColour: #222;
|
||||
@ActionBarBorder: @BackgroundColour;
|
||||
@ActionBarBackgound: @BackgroundColourGradient;
|
||||
|
||||
@FormBorderColour: @ButtonColour;
|
||||
@FormBackgroundOddColour: @BackgroundColourGradient;
|
||||
@FormBackgroundEvenColour: @white;
|
||||
@PlaceholderColour: #888;
|
||||
@TableDataBorderColour: #f4f4f4;
|
||||
@TableDataDarkBorderColour: #d8d8d8;
|
||||
@TableDataDarkBackgroundColour: #eee;
|
||||
@TableDataRowBackgroundColor: hsl(hue(@TableDataBorderColour), saturation(@TableDataBorderColour), 99%);
|
||||
|
||||
@SubtleColour: #ededed;
|
||||
@@ -53,6 +57,35 @@
|
||||
@StatusAwaitingRepair: @ButtonColour;
|
||||
@StatusAwaitingUser: @StatusWarning;
|
||||
@StatusAwaitingProcessing: #6a00ff;
|
||||
@StatusSlaWarning: @StatusWarning;
|
||||
@StatusSlaExpired: @StatusError;
|
||||
|
||||
// Priority
|
||||
@PriorityHigh: @StatusAlert;
|
||||
@PriorityNormal: @StatusSuccess;
|
||||
@PriorityLow: @ButtonColour;
|
||||
|
||||
// Theme Colours
|
||||
@ThemeLime: #A4C400;
|
||||
@ThemeGreen: #60A917;
|
||||
@ThemeEmerald: #008A00;
|
||||
@ThemeTeal: #00ABA9;
|
||||
@ThemeCyan: #1BA1E2;
|
||||
@ThemeCobalt: #0050EF;
|
||||
@ThemeIndigo: #6A00FF;
|
||||
@ThemeViolet: #AA00FF;
|
||||
@ThemePink: #F472D0;
|
||||
@ThemeMagenta: #D80073;
|
||||
@ThemeCrimson: #A20025;
|
||||
@ThemeRed: #E51400;
|
||||
@ThemeOrange: #FA6800;
|
||||
@ThemeAmber: #F0A30A;
|
||||
@ThemeYellow: #E3C800;
|
||||
@ThemeBrown: #825A2C;
|
||||
@ThemeOlive: #6D8764;
|
||||
@ThemeSteel: #647689;
|
||||
@ThemeMauve: #76608A;
|
||||
@ThemeSienna: #A0522D;
|
||||
|
||||
// Border Radius Mixins
|
||||
.border-radius(@radius: 5px) {
|
||||
|
||||
@@ -15,7 +15,10 @@
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
.tableData > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
.tableData > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
.tableData > tfoot > tr > th,
|
||||
.tableData > tfoot > tr > td {
|
||||
@@ -30,7 +33,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.tableDataDark th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
.tableDataContainer {
|
||||
@@ -113,9 +116,6 @@
|
||||
#Device_Show #Device_Show_Subjects > tbody > tr > td:not(:last-child) {
|
||||
border-right: 1px dashed #aaa;
|
||||
}
|
||||
#Device_Show #Device_Show_Subjects .dialog {
|
||||
display: none;
|
||||
}
|
||||
#Device_Show #Device_Show_Subjects #Device_Show_Details table.verticalHeadings > tbody > tr > td:first-child {
|
||||
width: 104px;
|
||||
font-weight: bold;
|
||||
@@ -239,7 +239,10 @@
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
#DeviceDetailTab-DetailsContainer > table > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
#DeviceDetailTab-DetailsContainer > table > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
#DeviceDetailTab-DetailsContainer > table > tfoot > tr > th,
|
||||
#DeviceDetailTab-DetailsContainer > table > tfoot > tr > td {
|
||||
@@ -326,7 +329,7 @@
|
||||
padding: 3px;
|
||||
}
|
||||
#deviceShowResources #Attachments div.attachmentInput span.action {
|
||||
color: #515151;
|
||||
color: #333333;
|
||||
display: block;
|
||||
margin: 0 4px 0 0;
|
||||
font-size: 1.5em;
|
||||
@@ -395,7 +398,10 @@
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
#deviceImportReview #devices > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
#deviceImportReview #devices > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
#deviceImportReview #devices > tfoot > tr > th,
|
||||
#deviceImportReview #devices > tfoot > tr > td {
|
||||
|
||||
@@ -47,10 +47,6 @@
|
||||
border-right: 1px dashed #aaa;
|
||||
}
|
||||
|
||||
.dialog {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#Device_Show_Details {
|
||||
|
||||
table.verticalHeadings {
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -15,7 +15,10 @@
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
.tableData > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
.tableData > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
.tableData > tfoot > tr > th,
|
||||
.tableData > tfoot > tr > td {
|
||||
@@ -30,7 +33,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.tableDataDark th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
.tableDataContainer {
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
.tableData{border:solid 1px #f4f4f4;border-collapse:collapse}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff}.tableData>tbody>tr:nth-child(odd)>td{background-color:#fcfcfc}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4}.tableData>tbody>tr:hover>td{background-color:#f4f4f4}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff}.tableDataDark th{background-color:#d8d8d8;border:solid 1px #d8d8d8}.tableDataContainer{background-color:#fff}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer}.subtleUntilHover{-moz-opacity:.3;opacity:.3}.subtleUntilHover:hover{-moz-opacity:1;opacity:1}body{padding:0}#main{background-color:#fff;overflow:auto;padding:0;-moz-border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}
|
||||
.tableData{border:solid 1px #f4f4f4;border-collapse:collapse}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff}.tableData>tbody>tr:nth-child(odd)>td{background-color:#fcfcfc}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4}.tableData>tbody>tr:hover>td{background-color:#fefefe}.tableData>tbody>tr:hover:nth-child(odd)>td{background-color:#fafafa}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8}.tableDataContainer{background-color:#fff}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer}.subtleUntilHover{-moz-opacity:.3;opacity:.3}.subtleUntilHover:hover{-moz-opacity:1;opacity:1}body{padding:0}#main{background-color:#fff;overflow:auto;padding:0;-moz-border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}
|
||||
@@ -15,7 +15,10 @@
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
.tableData > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
.tableData > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
.tableData > tfoot > tr > th,
|
||||
.tableData > tfoot > tr > td {
|
||||
@@ -30,7 +33,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.tableDataDark th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
.tableDataContainer {
|
||||
@@ -92,6 +95,12 @@
|
||||
#layout_PageHeading #Job_Show_Status span.icon {
|
||||
margin-right: 6px;
|
||||
}
|
||||
#layout_PageHeading #Job_Show_QueueStatus {
|
||||
display: inline-block;
|
||||
float: right;
|
||||
height: 50px;
|
||||
font-size: 0.6em;
|
||||
}
|
||||
#Job_Show #Job_Show_Subjects {
|
||||
table-layout: fixed;
|
||||
}
|
||||
@@ -113,9 +122,6 @@
|
||||
#Job_Show #Job_Show_Subjects > tbody > tr > td:not(:last-child) {
|
||||
border-right: 1px dashed #aaa;
|
||||
}
|
||||
#Job_Show #Job_Show_Subjects .dialog {
|
||||
display: none;
|
||||
}
|
||||
#Job_Show #Job_Show_Subjects #Job_Show_Job #Job_Show_Job_Type > table {
|
||||
table-layout: fixed;
|
||||
}
|
||||
@@ -306,7 +312,7 @@
|
||||
resize: none;
|
||||
}
|
||||
#jobShowResources #Comments div.commentInput span.action {
|
||||
color: #515151;
|
||||
color: #333333;
|
||||
font-size: 1.5em;
|
||||
display: block;
|
||||
margin: 0;
|
||||
@@ -397,7 +403,7 @@
|
||||
padding: 5px;
|
||||
}
|
||||
#jobShowResources #Attachments div.attachmentInput span.action {
|
||||
color: #515151;
|
||||
color: #333333;
|
||||
display: block;
|
||||
margin: 0 4px 0 0;
|
||||
font-size: 1.5em;
|
||||
@@ -411,6 +417,129 @@
|
||||
background-color: #ededed;
|
||||
border: 1px solid #cccccc;
|
||||
}
|
||||
#Job_Show_Job_Actions_AddQueue_Dialog {
|
||||
height: 400px;
|
||||
}
|
||||
#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker {
|
||||
position: absolute;
|
||||
width: 250px;
|
||||
height: 300px;
|
||||
overflow-y: auto;
|
||||
background-color: #fcfcfc;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker > div {
|
||||
background-color: #ffffff;
|
||||
border-bottom: 1px solid #ddd;
|
||||
padding: 6px 0 6px 6px;
|
||||
cursor: pointer;
|
||||
}
|
||||
#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker > div:hover {
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker > div.selected,
|
||||
#Job_Show_Job_Actions_AddQueue_Dialog .queuePicker > div.selected:hover {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
#Job_Show_Job_Actions_AddQueue_Dialog .details {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 280px;
|
||||
top: 40px;
|
||||
}
|
||||
#Job_Show_Job_Actions_AddQueue_Dialog .details h4 {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
#Job_Show_Job_Actions_AddQueue_Dialog .details #Priority {
|
||||
margin-bottom: 10px;
|
||||
min-width: 200px;
|
||||
}
|
||||
#Job_Show_Job_Actions_AddQueue_Dialog .details #SLAExpiresMinutes {
|
||||
margin-bottom: 10px;
|
||||
min-width: 200px;
|
||||
}
|
||||
#Job_Show_Job_Actions_AddQueue_Dialog .details #Comment {
|
||||
min-width: 280px;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues {
|
||||
border: solid 1px #d8d8d8;
|
||||
border-collapse: collapse;
|
||||
table-layout: fixed;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues td {
|
||||
border: solid 1px #d8d8d8;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues th {
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues i.fa-edit {
|
||||
float: right;
|
||||
margin-top: 4px;
|
||||
font-size: 1.1em;
|
||||
cursor: pointer;
|
||||
display: none;
|
||||
color: #335a87;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues i.fa-edit:hover {
|
||||
color: #5e8cc2;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues td:hover i.fa-edit {
|
||||
display: inline-block;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues th.name {
|
||||
width: 200px;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues th.sla {
|
||||
width: 130px;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues tr.removed td {
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues td.name {
|
||||
vertical-align: middle;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues td.name .fa-stack {
|
||||
line-height: 1.6em;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues td.added .when,
|
||||
#jobDetailTab-Queues #jobQueues td.removed .when {
|
||||
font-style: italic;
|
||||
margin-top: 4px;
|
||||
font-size: .9em;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues td.added .comments,
|
||||
#jobDetailTab-Queues #jobQueues td.removed .comments {
|
||||
white-space: pre-line;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues td.removed.na {
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues td.sla {
|
||||
vertical-align: middle;
|
||||
}
|
||||
#jobDetailTab-Queues #jobQueues td.sla.overdue {
|
||||
color: #e51400;
|
||||
}
|
||||
#jobDetailTab-Queues > .none {
|
||||
text-align: center;
|
||||
padding: 30px 0;
|
||||
font-style: italic;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#Job_Show_Queues_Actions_EditAddedComment_Dialog h4,
|
||||
#Job_Show_Queues_Actions_EditRemovedComment_Dialog h4,
|
||||
#Job_Show_Queues_Actions_EditSla_Dialog h4 {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
#Job_Show_Queues_Actions_EditAddedComment_Dialog_Comment {
|
||||
width: 280px;
|
||||
}
|
||||
#Job_Show_Queues_Actions_EditRemovedComment_Dialog_Comment {
|
||||
width: 280px;
|
||||
}
|
||||
#jobComponents {
|
||||
border: solid 1px #d8d8d8;
|
||||
border-collapse: collapse;
|
||||
@@ -420,7 +549,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#jobComponents th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
#jobComponents tr th.actions {
|
||||
@@ -458,7 +587,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#jobNonWarrantyFinance th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
#jobNonWarrantyFinance tr th {
|
||||
@@ -474,7 +603,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#jobNonWarrantyRepairs th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
#jobNonWarrantyRepairs tr th {
|
||||
@@ -490,7 +619,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#jobNonWarrantyInsurance th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
#jobNonWarrantyInsurance tr th {
|
||||
@@ -509,7 +638,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
#jobFlags th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
#jobFlags tr th {
|
||||
@@ -534,6 +663,9 @@
|
||||
width: 600px;
|
||||
height: 250px;
|
||||
}
|
||||
#createJob_Container {
|
||||
margin: 0 -20px;
|
||||
}
|
||||
#createJob_Container img.modelImage {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
@@ -552,7 +684,7 @@
|
||||
padding: 2px 4px;
|
||||
}
|
||||
#createJob_Container #createJob_SubTypes {
|
||||
margin: -1px 0 0 35px;
|
||||
margin: -1px 0 0 20px;
|
||||
border: 1px solid #ccc;
|
||||
border-top: none;
|
||||
padding: 2px 4px;
|
||||
@@ -563,40 +695,49 @@
|
||||
}
|
||||
#createJob_Container #createJob_Type li,
|
||||
#createJob_Container #createJob_SubTypes li {
|
||||
margin: 2px 8px 2px 0;
|
||||
margin: 2px 0;
|
||||
padding: 0 0 0 4px;
|
||||
}
|
||||
#createJob_Container #createJob_Type li i,
|
||||
#createJob_Container #createJob_SubTypes li i {
|
||||
display: none;
|
||||
cursor: default;
|
||||
font-weight: normal;
|
||||
}
|
||||
#createJob_Container #createJob_Type li:hover i,
|
||||
#createJob_Container #createJob_SubTypes li:hover i {
|
||||
display: inline-block;
|
||||
}
|
||||
#createJob_Container #createJob_Type li.highlight,
|
||||
#createJob_Container #createJob_SubTypes li.highlight {
|
||||
background-color: #cddbec;
|
||||
font-weight: 600;
|
||||
color: #000000;
|
||||
}
|
||||
#createJob_Container #createJob_Type li.highlight i,
|
||||
#createJob_Container #createJob_SubTypes li.highlight i {
|
||||
display: inline-block;
|
||||
}
|
||||
#createJob_Container #createJob_CommentsContainer #Comments {
|
||||
width: 100%;
|
||||
min-width: 500px;
|
||||
}
|
||||
#createJob_Container #createJob_QuickLogAutoCloseContainer {
|
||||
border: 1px solid #ccc;
|
||||
background-color: #f2f2f2;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
#createJob_Container #createJob_QuickLogAutoCloseContainer h3 {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
#createJob_Container #createJob_QuickLogAutoCloseContainer input {
|
||||
margin-left: 4px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
#createJob_Container #createJob_QuickLogTaskTimeContainer {
|
||||
display: none;
|
||||
margin: -1px 0 0 35px;
|
||||
border: 1px solid #ccc;
|
||||
border-top: none;
|
||||
padding: 2px 4px;
|
||||
margin: 4px 0 0 25px;
|
||||
padding: 4px 4px;
|
||||
background-color: #f2f2f2;
|
||||
border-left: 4px solid #d8d8d8;
|
||||
}
|
||||
#createJob_Container #createJob_QuickLogTaskTimeContainer h3 {
|
||||
margin-bottom: 4px;
|
||||
#createJob_Container #createJob_QuickLogTaskTimeContainer h4 {
|
||||
display: inline-block;
|
||||
padding-right: 10px;
|
||||
}
|
||||
#createJob_Container #createJob_QuickLogTaskTimeContainer label {
|
||||
margin-right: 20px;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+1
-1
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
||||
div.page div.column1 {
|
||||
div.page div.column1 {
|
||||
width: 44%;
|
||||
padding-right: 1%;
|
||||
float: left;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
html,
|
||||
html,
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
@@ -15,7 +15,10 @@
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
.tableData > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
.tableData > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
.tableData > tfoot > tr > th,
|
||||
.tableData > tfoot > tr > td {
|
||||
@@ -30,7 +33,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.tableDataDark th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
.tableDataContainer {
|
||||
|
||||
@@ -19,8 +19,13 @@
|
||||
border: solid 1px @TableDataBorderColour;
|
||||
}
|
||||
|
||||
& > tbody > tr:hover > td {
|
||||
background-color: @TableDataBorderColour;
|
||||
& > tbody > tr:hover {
|
||||
& > td {
|
||||
background-color: darken(@white, 0.5%);
|
||||
}
|
||||
&:nth-child(odd) > td {
|
||||
background-color: darken(@TableDataRowBackgroundColor, 1%);
|
||||
}
|
||||
}
|
||||
|
||||
& > tfoot > tr > th, & > tfoot > tr > td {
|
||||
@@ -41,7 +46,7 @@
|
||||
|
||||
th
|
||||
{
|
||||
background-color: @TableDataDarkBorderColour;
|
||||
background-color: @TableDataDarkBackgroundColour;
|
||||
border: solid 1px @TableDataDarkBorderColour;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
.tableData{border:solid 1px #f4f4f4;border-collapse:collapse}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff}.tableData>tbody>tr:nth-child(odd)>td{background-color:#fcfcfc}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4}.tableData>tbody>tr:hover>td{background-color:#f4f4f4}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff}.tableDataDark th{background-color:#d8d8d8;border:solid 1px #d8d8d8}.tableDataContainer{background-color:#fff}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer}.subtleUntilHover{-moz-opacity:.3;opacity:.3}.subtleUntilHover:hover{-moz-opacity:1;opacity:1}
|
||||
.tableData{border:solid 1px #f4f4f4;border-collapse:collapse}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff}.tableData>tbody>tr:nth-child(odd)>td{background-color:#fcfcfc}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4}.tableData>tbody>tr:hover>td{background-color:#fefefe}.tableData>tbody>tr:hover:nth-child(odd)>td{background-color:#fafafa}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8}.tableDataContainer{background-color:#fff}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer}.subtleUntilHover{-moz-opacity:.3;opacity:.3}.subtleUntilHover:hover{-moz-opacity:1;opacity:1}
|
||||
@@ -15,7 +15,10 @@
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
.tableData > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
.tableData > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
.tableData > tfoot > tr > th,
|
||||
.tableData > tfoot > tr > td {
|
||||
@@ -30,7 +33,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.tableDataDark th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
.tableDataContainer {
|
||||
@@ -96,7 +99,7 @@ body.layout {
|
||||
header,
|
||||
#header {
|
||||
position: relative;
|
||||
background-color: #515151;
|
||||
background-color: #333333;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 34px;
|
||||
@@ -119,20 +122,23 @@ header nav,
|
||||
height: 34px;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
header nav ul#menu,
|
||||
#header nav ul#menu {
|
||||
height: 30px;
|
||||
padding: 2px 2px;
|
||||
margin: 0;
|
||||
height: 26px;
|
||||
padding: 0;
|
||||
margin: 8px 0 0 8px;
|
||||
list-style: none;
|
||||
z-index: 100000;
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
}
|
||||
header nav ul#menu > li,
|
||||
#header nav ul#menu > li {
|
||||
display: inline-block;
|
||||
z-index: 100000;
|
||||
font-size: 13.200000000000001px;
|
||||
line-height: 19.200000000000003px;
|
||||
}
|
||||
header nav ul#menu > li.moveRight,
|
||||
#header nav ul#menu > li.moveRight {
|
||||
@@ -141,8 +147,8 @@ header nav ul#menu > li.moveRight,
|
||||
header nav ul#menu > li > a,
|
||||
#header nav ul#menu > li > a {
|
||||
display: inline-block;
|
||||
padding: 5px 10px 3px 10px;
|
||||
height: 22px;
|
||||
padding: 2px 10px 4px 10px;
|
||||
height: 20px;
|
||||
color: #ffffff;
|
||||
font-weight: 400;
|
||||
text-transform: uppercase;
|
||||
@@ -150,12 +156,15 @@ header nav ul#menu > li > a,
|
||||
}
|
||||
header nav ul#menu > li > a:active,
|
||||
#header nav ul#menu > li > a:active {
|
||||
color: #cddbec;
|
||||
text-decoration: none;
|
||||
}
|
||||
header nav ul#menu > li.active > a,
|
||||
#header nav ul#menu > li.active > a {
|
||||
background-color: #222222;
|
||||
}
|
||||
header nav ul#menu > li:hover > a,
|
||||
#header nav ul#menu > li:hover > a {
|
||||
color: #cddbec;
|
||||
background-color: #111111;
|
||||
text-decoration: none;
|
||||
}
|
||||
header nav ul#menu > li > ul,
|
||||
@@ -164,7 +173,7 @@ header nav ul#menu > li > ul,
|
||||
display: none;
|
||||
list-style: none;
|
||||
position: absolute;
|
||||
margin: 2px 0 0 0;
|
||||
margin: 0;
|
||||
border-left: 1px solid #d1d1d1;
|
||||
border-bottom: 1px solid #d1d1d1;
|
||||
border-right: 1px solid #d1d1d1;
|
||||
@@ -178,18 +187,16 @@ header nav ul#menu > li > ul li,
|
||||
position: relative;
|
||||
background-position: top;
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
header nav ul#menu > li > ul li:not(:first-child),
|
||||
#header nav ul#menu > li > ul li:not(:first-child) {
|
||||
border-top: 1px solid #e6e6e6;
|
||||
}
|
||||
header nav ul#menu > li > ul li:first-child,
|
||||
#header nav ul#menu > li > ul li:first-child {
|
||||
border-top: 1px solid #d1d1d1;
|
||||
}
|
||||
header nav ul#menu > li > ul li:hover,
|
||||
#header nav ul#menu > li > ul li:hover {
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
header nav ul#menu > li > ul li:hover:not(:first-child),
|
||||
#header nav ul#menu > li > ul li:hover:not(:first-child) {
|
||||
border-top: 1px solid #d9d9d9;
|
||||
background-color: #e6e6e6;
|
||||
}
|
||||
header nav ul#menu > li > ul li a,
|
||||
#header nav ul#menu > li > ul li a {
|
||||
@@ -207,19 +214,19 @@ header nav ul#menu > li > ul li a:active,
|
||||
#header nav ul#menu > li > ul li a:active {
|
||||
text-decoration: none;
|
||||
}
|
||||
header nav ul#menu > li > ul li i.fa,
|
||||
#header nav ul#menu > li > ul li i.fa {
|
||||
header nav ul#menu > li > ul li i.fa-caret-right,
|
||||
#header nav ul#menu > li > ul li i.fa-caret-right {
|
||||
cursor: pointer;
|
||||
color: #848484;
|
||||
color: #666666;
|
||||
font-size: 16px;
|
||||
position: absolute;
|
||||
display: block;
|
||||
right: 12px;
|
||||
top: 7px;
|
||||
}
|
||||
header nav ul#menu > li > ul li:hover i.fa,
|
||||
#header nav ul#menu > li > ul li:hover i.fa {
|
||||
color: #515151;
|
||||
header nav ul#menu > li > ul li:hover i.fa-caret-right,
|
||||
#header nav ul#menu > li > ul li:hover i.fa-caret-right {
|
||||
color: #333333;
|
||||
}
|
||||
header nav ul#menu > li > ul ul,
|
||||
#header nav ul#menu > li > ul ul {
|
||||
@@ -229,7 +236,9 @@ header nav ul#menu > li > ul ul,
|
||||
top: -1px;
|
||||
left: 180px;
|
||||
background-color: #f2f2f2;
|
||||
border: 1px solid #d1d1d1;
|
||||
border-left: 1px solid #d1d1d1;
|
||||
border-right: 1px solid #d1d1d1;
|
||||
border-bottom: 1px solid #d1d1d1;
|
||||
padding: 0;
|
||||
min-width: 180px;
|
||||
box-shadow: 2px 2px 5px rgba(209, 209, 209, 0.5);
|
||||
@@ -361,13 +370,14 @@ footer a:hover,
|
||||
color: #5e8cc2;
|
||||
text-decoration: none;
|
||||
}
|
||||
p,
|
||||
ul {
|
||||
p {
|
||||
margin: 0 0 20px 0;
|
||||
line-height: 1.6em;
|
||||
}
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0 0 0 25px;
|
||||
list-style: square;
|
||||
line-height: 1.6em;
|
||||
}
|
||||
header,
|
||||
@@ -554,7 +564,10 @@ table.genericData > tbody > tr > th {
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
table.genericData > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
table.genericData > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
table.genericData > tfoot > tr > th,
|
||||
table.genericData > tfoot > tr > td {
|
||||
@@ -717,7 +730,7 @@ table.genericData td.id a {
|
||||
background-image: none;
|
||||
}
|
||||
.jobStatus {
|
||||
color: #515151;
|
||||
color: #333333;
|
||||
}
|
||||
.jobStatus.Closed {
|
||||
color: #9e9e9e;
|
||||
@@ -739,7 +752,7 @@ table.genericData td.id a {
|
||||
color: #6a00ff;
|
||||
}
|
||||
.deviceStatus {
|
||||
color: #515151;
|
||||
color: #333333;
|
||||
}
|
||||
.deviceStatus.Decommissioned {
|
||||
color: #9e9e9e;
|
||||
@@ -771,7 +784,10 @@ table.jobTable > tbody > tr > th {
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
table.jobTable > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
table.jobTable > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
table.jobTable > tfoot > tr > th,
|
||||
table.jobTable > tfoot > tr > td {
|
||||
@@ -789,6 +805,34 @@ table.jobTable td.id a,
|
||||
table.jobTable th.id a {
|
||||
padding: 0 6px;
|
||||
}
|
||||
table.jobTable tr.statusSlaWarning td {
|
||||
background-color: #fdeed1;
|
||||
}
|
||||
table.jobTable tr.statusSlaWarning td:not(:last-child) {
|
||||
border-right: 1px solid #f8e9cb;
|
||||
}
|
||||
table.jobTable tr.statusSlaExpired td {
|
||||
background-color: #ffd7d3;
|
||||
}
|
||||
table.jobTable tr.statusSlaExpired td:not(:last-child) {
|
||||
border-right: 1px solid #fad2ce;
|
||||
}
|
||||
table.jobTable tr:nth-child(odd).statusSlaWarning td {
|
||||
background-color: #fcedcf !important;
|
||||
}
|
||||
table.jobTable tr:nth-child(odd).statusSlaExpired td {
|
||||
background-color: #fed6d2 !important;
|
||||
}
|
||||
table.jobTable tr:hover.statusSlaWarning td {
|
||||
background-color: #fbebca !important;
|
||||
}
|
||||
table.jobTable tr:hover.statusSlaExpired td {
|
||||
background-color: #fed1cd !important;
|
||||
}
|
||||
table.jobTable div.queues {
|
||||
display: inline-block;
|
||||
float: right;
|
||||
}
|
||||
table.jobTable td.dates,
|
||||
table.jobTable th.dates {
|
||||
width: 130px;
|
||||
@@ -817,9 +861,13 @@ table.deviceTable tr.decommissioned {
|
||||
background-color: #ededed;
|
||||
}
|
||||
textarea {
|
||||
min-height: 75px;
|
||||
font-size: 12px;
|
||||
font-family: "Segoe UI", Arial, Verdana, Tahoma, sans-serif;
|
||||
border: 1px solid #ccc;
|
||||
min-height: 75px;
|
||||
padding: 2px;
|
||||
color: #444;
|
||||
width: 200px;
|
||||
}
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
@@ -996,6 +1044,99 @@ div.form > table table.sub > tbody > tr > th.name {
|
||||
border-right: none;
|
||||
padding-right: 0;
|
||||
}
|
||||
.d-priority-high {
|
||||
color: #fa6800;
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
}
|
||||
.d-priority-high:before {
|
||||
content: "\f12a";
|
||||
}
|
||||
.d-priority-normal {
|
||||
color: #60a917;
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
}
|
||||
.d-priority-normal:before {
|
||||
content: "\f068";
|
||||
}
|
||||
.d-priority-low {
|
||||
color: #1e6dab;
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
}
|
||||
.d-priority-low:before {
|
||||
content: "\f063";
|
||||
}
|
||||
.fa-stack .d-priority-high,
|
||||
.fa-stack .d-priority-normal,
|
||||
.fa-stack .d-priority-low {
|
||||
width: 100%;
|
||||
font-size: .8em;
|
||||
margin-left: .5em;
|
||||
margin-top: .4em;
|
||||
opacity: .6;
|
||||
}
|
||||
.d-lime {
|
||||
color: #a4c400;
|
||||
}
|
||||
.d-green {
|
||||
color: #60a917;
|
||||
}
|
||||
.d-emerald {
|
||||
color: #008a00;
|
||||
}
|
||||
.d-teal {
|
||||
color: #00aba9;
|
||||
}
|
||||
.d-cyan {
|
||||
color: #1ba1e2;
|
||||
}
|
||||
.d-cobalt {
|
||||
color: #0050ef;
|
||||
}
|
||||
.d-indigo {
|
||||
color: #6a00ff;
|
||||
}
|
||||
.d-violet {
|
||||
color: #aa00ff;
|
||||
}
|
||||
.d-pink {
|
||||
color: #f472d0;
|
||||
}
|
||||
.d-magenta {
|
||||
color: #d80073;
|
||||
}
|
||||
.d-crimson {
|
||||
color: #a20025;
|
||||
}
|
||||
.d-red {
|
||||
color: #e51400;
|
||||
}
|
||||
.d-orange {
|
||||
color: #fa6800;
|
||||
}
|
||||
.d-amber {
|
||||
color: #f0a30a;
|
||||
}
|
||||
.d-yellow {
|
||||
color: #e3c800;
|
||||
}
|
||||
.d-brown {
|
||||
color: #825a2c;
|
||||
}
|
||||
.d-olive {
|
||||
color: #6d8764;
|
||||
}
|
||||
.d-steel {
|
||||
color: #647689;
|
||||
}
|
||||
.d-mauve {
|
||||
color: #76608a;
|
||||
}
|
||||
.d-sienna {
|
||||
color: #a0522d;
|
||||
}
|
||||
table.subtleHighlight {
|
||||
border: 1px solid #cccccc;
|
||||
background-color: #ededed;
|
||||
|
||||
@@ -47,18 +47,21 @@ header, #header {
|
||||
height: 34px;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-size: 1.1em;
|
||||
|
||||
ul#menu {
|
||||
height: 30px;
|
||||
padding: 2px 2px;
|
||||
margin: 0;
|
||||
height: 26px;
|
||||
padding: 0;
|
||||
margin: 8px 0 0 8px;
|
||||
list-style: none;
|
||||
z-index: 100000;
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
|
||||
& > li {
|
||||
display: inline-block;
|
||||
z-index: 100000;
|
||||
font-size: @FontSizeDefault * 1.1;
|
||||
line-height: @FontSizeDefault * 1.6;
|
||||
|
||||
&.moveRight {
|
||||
margin-left: 40px;
|
||||
@@ -66,21 +69,24 @@ header, #header {
|
||||
|
||||
& > a {
|
||||
display: inline-block;
|
||||
padding: 5px 10px 3px 10px;
|
||||
height: 22px;
|
||||
padding: 2px 10px 4px 10px;
|
||||
height: 20px;
|
||||
color: @white;
|
||||
font-weight: 400;
|
||||
text-transform: uppercase;
|
||||
text-decoration: none;
|
||||
|
||||
&:active {
|
||||
color: @MenuHoverColour;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.active > a {
|
||||
background-color: @MenuActiveBackgroundColour;
|
||||
}
|
||||
|
||||
&:hover > a {
|
||||
color: @MenuHoverColour;
|
||||
background-color: @MenuHoverBackgroundColour;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
@@ -89,7 +95,7 @@ header, #header {
|
||||
display: none;
|
||||
list-style: none;
|
||||
position: absolute;
|
||||
margin: 2px 0 0 0;
|
||||
margin: 0;
|
||||
border-left: 1px solid @BackgroundColour;
|
||||
border-bottom: 1px solid @BackgroundColour;
|
||||
border-right: 1px solid @BackgroundColour;
|
||||
@@ -102,16 +108,14 @@ header, #header {
|
||||
position: relative;
|
||||
background-position: top;
|
||||
background-repeat: repeat-x;
|
||||
border-top: 1px solid hsla(hue(@BackgroundColour), saturation(@BackgroundColour), 90%, 1);
|
||||
|
||||
&:not(:first-child) {
|
||||
border-top: 1px solid hsla(hue(@BackgroundColour), saturation(@BackgroundColour), 90%, 1);
|
||||
&:first-child {
|
||||
border-top: 1px solid @BackgroundColour;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
&:not(:first-child) {
|
||||
border-top: 1px solid hsla(hue(@BackgroundColour), saturation(@BackgroundColour), 85%, 1);
|
||||
}
|
||||
|
||||
border-top: 1px solid hsla(hue(@BackgroundColour), saturation(@BackgroundColour), 85%, 1);
|
||||
background-color: hsla(hue(@BackgroundColour), saturation(@BackgroundColour), 90%, 1);
|
||||
}
|
||||
|
||||
@@ -131,7 +135,7 @@ header, #header {
|
||||
}
|
||||
}
|
||||
|
||||
i.fa {
|
||||
i.fa-caret-right {
|
||||
cursor: pointer;
|
||||
color: lighten(@HeaderBackgroundColour, 20%);
|
||||
font-size: 16px;
|
||||
@@ -141,7 +145,7 @@ header, #header {
|
||||
top: 7px;
|
||||
}
|
||||
|
||||
&:hover i.fa {
|
||||
&:hover i.fa-caret-right {
|
||||
color: @HeaderBackgroundColour;
|
||||
}
|
||||
}
|
||||
@@ -153,7 +157,9 @@ header, #header {
|
||||
top: -1px;
|
||||
left: 180px;
|
||||
background-color: hsla(hue(@BackgroundColour), saturation(@BackgroundColour), 95%, 1);
|
||||
border: 1px solid @BackgroundColour;
|
||||
border-left: 1px solid @BackgroundColour;
|
||||
border-right: 1px solid @BackgroundColour;
|
||||
border-bottom: 1px solid @BackgroundColour;
|
||||
padding: 0;
|
||||
min-width: 180px;
|
||||
box-shadow: 2px 2px 5px fade(@BackgroundColour, 50%);
|
||||
@@ -291,13 +297,15 @@ footer, #footer {
|
||||
}
|
||||
|
||||
// Element Resets
|
||||
p, ul {
|
||||
p {
|
||||
margin: 0 0 20px 0;
|
||||
line-height: 1.6em;
|
||||
}
|
||||
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0 0 0 25px;
|
||||
list-style: square;
|
||||
line-height: 1.6em;
|
||||
}
|
||||
|
||||
@@ -734,7 +742,47 @@ table.jobTable {
|
||||
}
|
||||
}
|
||||
|
||||
td.status, th.status {
|
||||
tr {
|
||||
&.statusSlaWarning td {
|
||||
background-color: mix(lighten(@StatusSlaWarning, 32%), @white, 50%);
|
||||
|
||||
&:not(:last-child) {
|
||||
border-right: 1px solid average(lighten(@StatusSlaWarning, 32%), @TableDataBorderColour);
|
||||
}
|
||||
}
|
||||
|
||||
&.statusSlaExpired td {
|
||||
background-color: mix(lighten(@StatusSlaExpired, 38%), @white, 50%);
|
||||
|
||||
&:not(:last-child) {
|
||||
border-right: 1px solid average(lighten(@StatusSlaExpired, 38%), @TableDataBorderColour);
|
||||
}
|
||||
}
|
||||
|
||||
&:nth-child(odd) {
|
||||
&.statusSlaWarning td {
|
||||
background-color: mix(lighten(@StatusSlaWarning, 32%), @TableDataRowBackgroundColor, 50%) !important;
|
||||
}
|
||||
|
||||
&.statusSlaExpired td {
|
||||
background-color: mix(lighten(@StatusSlaExpired, 38%), @TableDataRowBackgroundColor, 50%) !important;
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
&.statusSlaWarning td {
|
||||
background-color: darken(mix(lighten(@StatusSlaWarning, 32%), @TableDataRowBackgroundColor, 50%), 1%) !important;
|
||||
}
|
||||
|
||||
&.statusSlaExpired td {
|
||||
background-color: darken(mix(lighten(@StatusSlaExpired, 38%), @TableDataRowBackgroundColor, 50%), 1%) !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
div.queues {
|
||||
display: inline-block;
|
||||
float: right;
|
||||
}
|
||||
|
||||
td.dates, th.dates {
|
||||
@@ -769,9 +817,13 @@ table.deviceTable {
|
||||
}
|
||||
|
||||
textarea {
|
||||
min-height: 75px;
|
||||
font-size: 12px;
|
||||
font-family: @FontFamilyBody;
|
||||
border: 1px solid #ccc;
|
||||
min-height: 75px;
|
||||
padding: 2px;
|
||||
color: #444;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
input[type="text"], input[type="password"], input[type="file"], input[type="number"] {
|
||||
@@ -973,6 +1025,127 @@ div.form {
|
||||
}
|
||||
}
|
||||
|
||||
// Priority Colours
|
||||
.d-priority-high {
|
||||
color: @PriorityHigh;
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
|
||||
&:before {
|
||||
content: "\f12a";
|
||||
}
|
||||
}
|
||||
|
||||
.d-priority-normal {
|
||||
color: @PriorityNormal;
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
|
||||
&:before {
|
||||
content: "\f068";
|
||||
}
|
||||
}
|
||||
|
||||
.d-priority-low {
|
||||
color: @PriorityLow;
|
||||
width: 1.2857142857142858em;
|
||||
text-align: center;
|
||||
|
||||
&:before {
|
||||
content: "\f063";
|
||||
}
|
||||
}
|
||||
|
||||
.fa-stack .d-priority-high, .fa-stack .d-priority-normal, .fa-stack .d-priority-low {
|
||||
width: 100%;
|
||||
font-size: .8em;
|
||||
margin-left: .5em;
|
||||
margin-top: .4em;
|
||||
opacity: .6;
|
||||
}
|
||||
|
||||
// Theme Colours
|
||||
.d-lime {
|
||||
color: @ThemeLime;
|
||||
}
|
||||
|
||||
.d-green {
|
||||
color: @ThemeGreen;
|
||||
}
|
||||
|
||||
.d-emerald {
|
||||
color: @ThemeEmerald;
|
||||
}
|
||||
|
||||
.d-teal {
|
||||
color: @ThemeTeal;
|
||||
}
|
||||
|
||||
.d-cyan {
|
||||
color: @ThemeCyan;
|
||||
}
|
||||
|
||||
.d-cobalt {
|
||||
color: @ThemeCobalt;
|
||||
}
|
||||
|
||||
.d-indigo {
|
||||
color: @ThemeIndigo;
|
||||
}
|
||||
|
||||
.d-violet {
|
||||
color: @ThemeViolet;
|
||||
}
|
||||
|
||||
.d-pink {
|
||||
color: @ThemePink;
|
||||
}
|
||||
|
||||
.d-magenta {
|
||||
color: @ThemeMagenta;
|
||||
}
|
||||
|
||||
.d-crimson {
|
||||
color: @ThemeCrimson;
|
||||
}
|
||||
|
||||
.d-red {
|
||||
color: @ThemeRed;
|
||||
}
|
||||
|
||||
.d-orange {
|
||||
color: @ThemeOrange;
|
||||
}
|
||||
|
||||
.d-amber {
|
||||
color: @ThemeAmber;
|
||||
}
|
||||
|
||||
.d-yellow {
|
||||
color: @ThemeYellow;
|
||||
}
|
||||
|
||||
.d-brown {
|
||||
color: @ThemeBrown;
|
||||
}
|
||||
|
||||
.d-olive {
|
||||
color: @ThemeOlive;
|
||||
}
|
||||
|
||||
.d-steel {
|
||||
color: @ThemeSteel;
|
||||
}
|
||||
|
||||
.d-mauve {
|
||||
color: @ThemeMauve;
|
||||
}
|
||||
|
||||
.d-sienna {
|
||||
color: @ThemeSienna;
|
||||
}
|
||||
|
||||
|
||||
table.subtleHighlight {
|
||||
border: 1px solid @SubtleBorderColour;
|
||||
background-color: @SubtleColour;
|
||||
@@ -1150,4 +1323,4 @@ textarea.block {
|
||||
li {
|
||||
font-size: 0.9em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
||||
div.simileAjax-bubble-container {
|
||||
div.simileAjax-bubble-container {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
border: none;
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
||||
.timeline-container {
|
||||
.timeline-container {
|
||||
border: 1px solid #aaa;
|
||||
}
|
||||
.timeline-event-label {
|
||||
|
||||
@@ -15,7 +15,10 @@
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
.tableData > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
.tableData > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
.tableData > tfoot > tr > th,
|
||||
.tableData > tfoot > tr > td {
|
||||
@@ -30,7 +33,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.tableDataDark th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
.tableDataContainer {
|
||||
@@ -96,9 +99,6 @@
|
||||
#User_Show #User_Show_Subjects > tbody > tr > td:not(:last-child) {
|
||||
border-right: 1px dashed #aaa;
|
||||
}
|
||||
#User_Show #User_Show_Subjects .dialog {
|
||||
display: none;
|
||||
}
|
||||
#User_Show #User_Show_Subjects #User_Show_Details {
|
||||
width: 330px;
|
||||
}
|
||||
@@ -360,7 +360,7 @@
|
||||
padding: 3px;
|
||||
}
|
||||
#userShowResources #Attachments div.attachmentInput span.action {
|
||||
color: #515151;
|
||||
color: #333333;
|
||||
display: block;
|
||||
margin: 0 4px 0 0;
|
||||
font-size: 1.5em;
|
||||
|
||||
@@ -27,10 +27,6 @@
|
||||
border-right: 1px dashed #aaa;
|
||||
}
|
||||
|
||||
.dialog {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#User_Show_Details {
|
||||
width: 330px;
|
||||
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
@@ -15,7 +15,10 @@
|
||||
border: solid 1px #f4f4f4;
|
||||
}
|
||||
.tableData > tbody > tr:hover > td {
|
||||
background-color: #f4f4f4;
|
||||
background-color: #fefefe;
|
||||
}
|
||||
.tableData > tbody > tr:hover:nth-child(odd) > td {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
.tableData > tfoot > tr > th,
|
||||
.tableData > tfoot > tr > td {
|
||||
@@ -30,7 +33,7 @@
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.tableDataDark th {
|
||||
background-color: #d8d8d8;
|
||||
background-color: #eeeeee;
|
||||
border: solid 1px #d8d8d8;
|
||||
}
|
||||
.tableDataContainer {
|
||||
@@ -76,7 +79,21 @@
|
||||
opacity: 1;
|
||||
}
|
||||
.watermark {
|
||||
color: #888 !important;
|
||||
color: #888888 !important;
|
||||
}
|
||||
::-webkit-input-placeholder {
|
||||
color: #888888;
|
||||
}
|
||||
::-moz-placeholder {
|
||||
color: #888888;
|
||||
}
|
||||
/* firefox 19+ */
|
||||
:-ms-input-placeholder {
|
||||
color: #888888;
|
||||
}
|
||||
/* ie */
|
||||
input:-moz-placeholder {
|
||||
color: #888888;
|
||||
}
|
||||
.ui-autocomplete-loading {
|
||||
background: #ffffff url(data:image/gif;base64,R0lGODlhEAALAPQAAP///zNah+Hm7dng6O7x9DddiTNah1d3nJqtw3+Xs8fS3k5vlm6JqaGzx4KatcrU4FFymDZciHGMq+ru8t/l7Pb3+V9+oeLo7vT2+MTP3LLB0dTc5fHz9gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA) /*Images/Status/loading.gif*/ right center no-repeat;
|
||||
@@ -104,11 +121,12 @@
|
||||
text-align: left;
|
||||
}
|
||||
.ui-timepicker-div dl dt {
|
||||
height: 25px;
|
||||
margin-bottom: -25px;
|
||||
float: left;
|
||||
clear: left;
|
||||
padding: 0 0 0 5px;
|
||||
}
|
||||
.ui-timepicker-div dl dd {
|
||||
margin: 0 10px 10px 65px;
|
||||
margin: 0 10px 10px 45%;
|
||||
}
|
||||
.ui-timepicker-div td {
|
||||
font-size: 90%;
|
||||
@@ -119,6 +137,20 @@
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.ui-timepicker-rtl {
|
||||
direction: rtl;
|
||||
}
|
||||
.ui-timepicker-rtl dl {
|
||||
text-align: right;
|
||||
padding: 0 5px 0 0;
|
||||
}
|
||||
.ui-timepicker-rtl dl dt {
|
||||
float: right;
|
||||
clear: right;
|
||||
}
|
||||
.ui-timepicker-rtl dl dd {
|
||||
margin: 0 45% 10px 10px;
|
||||
}
|
||||
@-moz-keyframes progressBarKeyframes {
|
||||
from {
|
||||
background-position-x: 0px;
|
||||
@@ -171,9 +203,12 @@
|
||||
{
|
||||
font-weight: bold;
|
||||
}*/
|
||||
.page .dialog {
|
||||
display: none;
|
||||
}
|
||||
.ui-dialog {
|
||||
padding: 0;
|
||||
border-color: #515151;
|
||||
border-color: #333333;
|
||||
background: #fcfcfc;
|
||||
box-shadow: rgba(20, 20, 20, 0.7) 0px 0px 50px;
|
||||
}
|
||||
@@ -182,7 +217,7 @@
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
border-bottom-color: #d1d1d1;
|
||||
background: #515151;
|
||||
background: #333333;
|
||||
color: #fff;
|
||||
font-size: 1.1em;
|
||||
font-weight: normal;
|
||||
|
||||
@@ -2,8 +2,25 @@
|
||||
|
||||
// Watermark
|
||||
.watermark {
|
||||
color: #888 !important;
|
||||
color: @PlaceholderColour !important;
|
||||
}
|
||||
|
||||
::-webkit-input-placeholder {
|
||||
color: @PlaceholderColour;
|
||||
}
|
||||
|
||||
::-moz-placeholder {
|
||||
color: @PlaceholderColour;
|
||||
}
|
||||
/* firefox 19+ */
|
||||
:-ms-input-placeholder {
|
||||
color: @PlaceholderColour;
|
||||
}
|
||||
/* ie */
|
||||
input:-moz-placeholder {
|
||||
color: @PlaceholderColour;
|
||||
}
|
||||
|
||||
// Autocomplete
|
||||
.ui-autocomplete-loading {
|
||||
background: white url(data:image/gif;base64,R0lGODlhEAALAPQAAP///zNah+Hm7dng6O7x9DddiTNah1d3nJqtw3+Xs8fS3k5vlm6JqaGzx4KatcrU4FFymDZciHGMq+ru8t/l7Pb3+V9+oeLo7vT2+MTP3LLB0dTc5fHz9gAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27ifDgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeRvsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjothLOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAsAAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00kj5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpyHCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAABS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7AAAAAAAAAAAA) /*Images/Status/loading.gif*/ right center no-repeat;
|
||||
@@ -23,13 +40,8 @@
|
||||
* html .ui-autocomplete {
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
// timepicker
|
||||
// .ui-timepicker-div .ui-widget-header{ margin-bottom: 8px; }
|
||||
// .ui-timepicker-div dl{ text-align: left; }
|
||||
// .ui-timepicker-div dl dt{ height: 25px; }
|
||||
// .ui-timepicker-div dl dd{ margin: -25px 0 10px 65px; }
|
||||
// .ui-timepicker-div td { font-size: 90%; }
|
||||
// New Timepicker CSS (2012-09-11)
|
||||
.ui-timepicker-div .ui-widget-header {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
@@ -39,12 +51,13 @@
|
||||
}
|
||||
|
||||
.ui-timepicker-div dl dt {
|
||||
height: 25px;
|
||||
margin-bottom: -25px;
|
||||
float: left;
|
||||
clear: left;
|
||||
padding: 0 0 0 5px;
|
||||
}
|
||||
|
||||
.ui-timepicker-div dl dd {
|
||||
margin: 0 10px 10px 65px;
|
||||
margin: 0 10px 10px 45%;
|
||||
}
|
||||
|
||||
.ui-timepicker-div td {
|
||||
@@ -58,6 +71,24 @@
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.ui-timepicker-rtl {
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
.ui-timepicker-rtl dl {
|
||||
text-align: right;
|
||||
padding: 0 5px 0 0;
|
||||
}
|
||||
|
||||
.ui-timepicker-rtl dl dt {
|
||||
float: right;
|
||||
clear: right;
|
||||
}
|
||||
|
||||
.ui-timepicker-rtl dl dd {
|
||||
margin: 0 45% 10px 10px;
|
||||
}
|
||||
|
||||
|
||||
// Progress Bar
|
||||
@-moz-keyframes progressBarKeyframes {
|
||||
@@ -89,6 +120,7 @@
|
||||
background-position-x: 47px;
|
||||
}
|
||||
}
|
||||
|
||||
.ui-progressbar-value {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAYCAYAAAC8/X7cAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QwYAwcRFZ4/TAAAAmtJREFUWMO1l+lu2kAQx/+WlqMYCGmMzRGwcUhoVbWq1Ifq2+RF+hJ9hVRpohLuCB9AwAaqfqiPfjBEhtrcO5/wrGf2N4eXWeb223cXlCSeyUHIJGi5hzqagPny9ZZKAOfyZ9TyaWrw940u5noXJB4lJ3eeqXzCtUAP/qHZgzXpIx4lILFIcACuCzBM+HOY7kz6iGs+uRHABcAcCP/YUWAZCpbcJBZWgaDGYjbs7gJp8QOqC/igBACezr+2/nv5TtBavavCmvQ9+IWexMhqAMsNwiQICgDSpRpknl7bPPU0WIYCf8u77qYK7CHp4g2kbIoafLM/hGWqCGIl8chxAaQKVZQ5evBtdQTbUBDGeVQFkvkrlC9YavAdbQw7JPOvAUQPrADLlVDm6WW+q49hmRq28R3UQgmuiEvujBr882ACZzrALmx7t9Cb8xyK2Qw1+P7QgDMfYlcu0lZfdm+brAg5EoNm/DnZH5NfWsoLfg+7e9kQy3Z2g+dFiLm3sB06s19LHWOut/e22ykAlhch5S9gu3Tgm8oYc611kO3WAJKCBLnAwaGV+cEMZr9xsP3GAJK5CuQCR61tmoMZzN7jUT6I7QQHwAoVXBWzsCldd5r6FGbv4Wg/gRVgs2VUL3lqmW9o5kngvQrYzsoxmOBF3IgF2I77Oj2HTdOuTxc6va6tP+kzTDv3/9mE7YUtvlcqwAoSagt4GlLXZzDbP07qk/y1be+D5UXUpAK1o7KuTTFp3Z3cL7FsBylBwju5dNRRuV5+v+6XOoXRvltcQlwwDBNwhfX029b9z94wx5Xw/kj4jRfw5xHM3k9qs9M/9mQP+uNoCX0AAAAASUVORK5CYII=) /*Images\Status\progressBar.png*/;
|
||||
background-position: 0px 0;
|
||||
@@ -121,6 +153,12 @@
|
||||
font-weight: bold;
|
||||
}*/
|
||||
|
||||
// Initially hide dialogs
|
||||
|
||||
.page .dialog {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ui-dialog {
|
||||
padding: 0;
|
||||
border-color: @HeaderBackgroundColour;
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+95
-145
@@ -1,13 +1,10 @@
|
||||
/*! normalize.css v2.1.3 | MIT License | git.io/normalize */
|
||||
|
||||
/* ==========================================================================
|
||||
HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined in IE 8/9.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
@@ -20,299 +17,252 @@ main,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct `inline-block` display not defined in IE 8/9.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
video {
|
||||
display: inline-block;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9.
|
||||
* Hide the `template` element in IE, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Base
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
font-family: sans-serif;
|
||||
/* 1 */
|
||||
|
||||
-ms-text-size-adjust: 100%;
|
||||
/* 2 */
|
||||
|
||||
-webkit-text-size-adjust: 100%;
|
||||
/* 2 */
|
||||
|
||||
}
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background: transparent;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `outline` inconsistency between Chrome and other browsers.
|
||||
*/
|
||||
|
||||
a:focus {
|
||||
outline: thin dotted;
|
||||
outline: thin dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Typography
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct font family set oddly in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, serif;
|
||||
font-size: 1em;
|
||||
font-family: monospace, serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability of pre-formatted text in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
white-space: pre-wrap;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set consistent quote types.
|
||||
*/
|
||||
|
||||
q {
|
||||
quotes: "\201C" "\201D" "\2018" "\2019";
|
||||
quotes: "\201C" "\201D" "\2018" "\2019";
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow displayed oddly in IE 9.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Figures
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari 5.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
border: 0;
|
||||
/* 1 */
|
||||
|
||||
padding: 0;
|
||||
/* 2 */
|
||||
|
||||
}
|
||||
/**
|
||||
* 1. Correct font family not being inherited in all browsers.
|
||||
* 2. Correct font size not being inherited in all browsers.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font-family: inherit; /* 1 */
|
||||
font-size: 100%; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
font-family: inherit;
|
||||
/* 1 */
|
||||
|
||||
font-size: 100%;
|
||||
/* 2 */
|
||||
|
||||
margin: 0;
|
||||
/* 3 */
|
||||
|
||||
}
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
button,
|
||||
input {
|
||||
line-height: normal;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
|
||||
* Correct `select` style inheritance in Firefox 4+ and Opera.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
@@ -320,87 +270,87 @@ select {
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
html input[type="button"],
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
-webkit-appearance: button;
|
||||
/* 2 */
|
||||
|
||||
cursor: pointer;
|
||||
/* 3 */
|
||||
|
||||
}
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
box-sizing: border-box;
|
||||
/* 1 */
|
||||
|
||||
padding: 0;
|
||||
/* 2 */
|
||||
|
||||
}
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
box-sizing: content-box;
|
||||
}
|
||||
-webkit-appearance: textfield;
|
||||
/* 1 */
|
||||
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box;
|
||||
/* 2 */
|
||||
|
||||
box-sizing: content-box;
|
||||
}
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari 5 and Chrome
|
||||
* on OS X.
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Remove default vertical scrollbar in IE 8/9.
|
||||
* 2. Improve readability and alignment in all browsers.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto; /* 1 */
|
||||
vertical-align: top; /* 2 */
|
||||
}
|
||||
overflow: auto;
|
||||
/* 1 */
|
||||
|
||||
vertical-align: top;
|
||||
/* 2 */
|
||||
|
||||
}
|
||||
/* ==========================================================================
|
||||
Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
+406
@@ -0,0 +1,406 @@
|
||||
/*! normalize.css v2.1.3 | MIT License | git.io/normalize */
|
||||
|
||||
/* ==========================================================================
|
||||
HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined in IE 8/9.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct `inline-block` display not defined in IE 8/9.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
video {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9.
|
||||
* Hide the `template` element in IE, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Base
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `outline` inconsistency between Chrome and other browsers.
|
||||
*/
|
||||
|
||||
a:focus {
|
||||
outline: thin dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Typography
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct font family set oddly in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability of pre-formatted text in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set consistent quote types.
|
||||
*/
|
||||
|
||||
q {
|
||||
quotes: "\201C" "\201D" "\2018" "\2019";
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow displayed oddly in IE 9.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Figures
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari 5.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct font family not being inherited in all browsers.
|
||||
* 2. Correct font size not being inherited in all browsers.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
font-family: inherit; /* 1 */
|
||||
font-size: 100%; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
button,
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
|
||||
* Correct `select` style inheritance in Firefox 4+ and Opera.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari 5 and Chrome
|
||||
* on OS X.
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Remove default vertical scrollbar in IE 8/9.
|
||||
* 2. Improve readability and alignment in all browsers.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto; /* 1 */
|
||||
vertical-align: top; /* 2 */
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}a{background:transparent}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}mark{background:#ff0;color:#000}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"“" "”" "‘" "’"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}
|
||||
@@ -1,6 +1,8 @@
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Models.Services.Jobs.JobLists;
|
||||
using Disco.Models.UI.Device;
|
||||
using Disco.Services;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Plugins;
|
||||
using Disco.Services.Plugins.Features.UIExtension;
|
||||
@@ -150,7 +152,7 @@ namespace Disco.Web.Controllers
|
||||
|
||||
if (Authorization.Has(Claims.Device.ShowJobs))
|
||||
{
|
||||
m.Jobs = new Disco.Models.BI.Job.JobTableModel()
|
||||
m.Jobs = new JobTableModel()
|
||||
{
|
||||
ShowStatus = true,
|
||||
ShowDevice = false,
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.BI.JobBI;
|
||||
using Disco.Data.Repository;
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Models.Services.Jobs.JobLists;
|
||||
using Disco.Models.UI.Job;
|
||||
using Disco.Services;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Jobs.JobLists;
|
||||
using Disco.Services.Jobs.JobQueues;
|
||||
using Disco.Services.Plugins.Features.UIExtension;
|
||||
using Disco.Services.Plugins.Features.WarrantyProvider;
|
||||
using Disco.Services.Users;
|
||||
@@ -21,84 +24,18 @@ namespace Disco.Web.Controllers
|
||||
|
||||
#region Index
|
||||
|
||||
|
||||
#region Managed Job Lists
|
||||
private static object jobListCreationLock = new object();
|
||||
|
||||
private static ManagedJobList jobList_OpenJobs;
|
||||
private static ManagedJobList jobList_LongRunning;
|
||||
|
||||
internal static ManagedJobList ReInitializeLongRunningJobList(DiscoDataContext Database)
|
||||
{
|
||||
if (jobList_LongRunning == null)
|
||||
return InitializeLongRunningJobList(Database);
|
||||
else
|
||||
{
|
||||
var longRunningThreshold = DateTime.Today.AddDays(Database.DiscoConfiguration.JobPreferences.LongRunningJobDaysThreshold * -1);
|
||||
|
||||
return jobList_LongRunning.ReInitialize(Database, q => q.Where(j => j.ClosedDate == null && j.OpenedDate < longRunningThreshold));
|
||||
}
|
||||
}
|
||||
internal static ManagedJobList InitializeLongRunningJobList(DiscoDataContext Database)
|
||||
{
|
||||
if (jobList_LongRunning == null)
|
||||
{
|
||||
lock (jobListCreationLock)
|
||||
{
|
||||
if (jobList_LongRunning == null)
|
||||
{
|
||||
var longRunningThreshold = DateTime.Today.AddDays(Database.DiscoConfiguration.JobPreferences.LongRunningJobDaysThreshold * -1);
|
||||
|
||||
jobList_LongRunning = new ManagedJobList()
|
||||
{
|
||||
Name = "Long Running Jobs",
|
||||
FilterFunction = q => q.Where(j => j.ClosedDate == null && j.OpenedDate < longRunningThreshold),
|
||||
SortFunction = q => q.OrderBy(j => j.Id),
|
||||
ShowStatus = true
|
||||
}.Initialize(Database);
|
||||
}
|
||||
}
|
||||
}
|
||||
return jobList_LongRunning;
|
||||
}
|
||||
internal static ManagedJobList InitializeOpenJobList(DiscoDataContext Database)
|
||||
{
|
||||
if (jobList_OpenJobs == null)
|
||||
{
|
||||
lock (jobListCreationLock)
|
||||
{
|
||||
if (jobList_OpenJobs == null)
|
||||
{
|
||||
jobList_OpenJobs = new ManagedJobList()
|
||||
{
|
||||
Name = "Open Jobs Awaiting Technician Action",
|
||||
FilterFunction = q => q.Where(j => j.ClosedDate == null && !j.WaitingForUserAction.HasValue
|
||||
&& !(j.JobTypeId == JobType.JobTypeIds.HNWar && (j.JobMetaNonWarranty.RepairerLoggedDate.HasValue && j.JobMetaNonWarranty.IsInsuranceClaim && !j.JobMetaInsurance.ClaimFormSentDate.HasValue))
|
||||
&& !(j.JobTypeId == JobType.JobTypeIds.HNWar && (j.JobMetaNonWarranty.RepairerLoggedDate.HasValue && !j.JobMetaNonWarranty.RepairerCompletedDate.HasValue))
|
||||
&& !(j.JobTypeId == JobType.JobTypeIds.HNWar && (j.JobMetaNonWarranty.RepairerLoggedDate.HasValue && j.JobMetaNonWarranty.AccountingChargeAddedDate.HasValue && !j.JobMetaNonWarranty.AccountingChargePaidDate.HasValue))
|
||||
&& !(j.JobTypeId == JobType.JobTypeIds.HWar && (j.JobMetaWarranty.ExternalLoggedDate.HasValue && !j.JobMetaWarranty.ExternalCompletedDate.HasValue))
|
||||
&& (j.DeviceHeld == null || j.DeviceReturnedDate != null || j.DeviceReadyForReturn == null)),
|
||||
SortFunction = q => q.OrderBy(j => j.Id),
|
||||
ShowStatus = true
|
||||
}.Initialize(Database);
|
||||
}
|
||||
}
|
||||
}
|
||||
return jobList_OpenJobs;
|
||||
}
|
||||
#endregion
|
||||
|
||||
public virtual ActionResult Index()
|
||||
{
|
||||
var m = new Models.Job.IndexModel();
|
||||
|
||||
InitializeOpenJobList(Database);
|
||||
InitializeLongRunningJobList(Database);
|
||||
if (Authorization.Has(Claims.Job.Lists.MyJobs))
|
||||
m.MyJobs = ManagedJobList.MyJobsTable(Authorization);
|
||||
|
||||
if (Authorization.Has(Claims.Job.Lists.AwaitingTechnicianAction))
|
||||
m.OpenJobs = jobList_OpenJobs;
|
||||
if (Authorization.Has(Claims.Job.Lists.LongRunningJobs))
|
||||
m.LongRunningJobs = jobList_LongRunning;
|
||||
{
|
||||
var longRunningThreshold = DateTime.Today.AddDays(Database.DiscoConfiguration.JobPreferences.LongRunningJobDaysThreshold * -1);
|
||||
m.LongRunningJobs = ManagedJobList.OpenJobsTable(q => q.Where(j => j.OpenedDate < longRunningThreshold).OrderBy(j => j.Id));
|
||||
}
|
||||
if (Authorization.Has(Claims.Job.ShowDailyChart))
|
||||
m.DailyOpenedClosedStatistics = Disco.BI.JobBI.Statistics.DailyOpenedClosed.Data(Database, true);
|
||||
|
||||
@@ -110,13 +47,41 @@ namespace Disco.Web.Controllers
|
||||
#endregion
|
||||
|
||||
#region Lists
|
||||
[DiscoAuthorize(Claims.Job.Lists.JobQueueLists)]
|
||||
public virtual ActionResult Queue(int id)
|
||||
{
|
||||
var queueToken = JobQueueService.GetQueue(id);
|
||||
|
||||
if (queueToken == null)
|
||||
throw new ArgumentException("Invalid Job Queue Id", "id");
|
||||
|
||||
var m = new Models.Job.ListModel() { Title = string.Format("Queue: {0}", queueToken.JobQueue.Name) };
|
||||
m.JobTable = ManagedJobList.OpenJobsTable(q => q.Where(j => j.ActiveJobQueues.Any(jqj => jqj.QueueId == queueToken.JobQueue.Id)));
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<JobListModel>(this.ControllerContext, m);
|
||||
|
||||
return View(Views.List, m);
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Job.Lists.AllOpen)]
|
||||
public virtual ActionResult AllOpen()
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
var m = new Models.Job.ListModel() { Title = "All Open Jobs" };
|
||||
m.JobTable = new Disco.Models.BI.Job.JobTableModel() { ShowStatus = true };
|
||||
m.JobTable.Fill(Database, BI.JobBI.Searching.BuildJobTableModel(Database).Where(j => j.ClosedDate == null).OrderBy(j => j.Id));
|
||||
m.JobTable = ManagedJobList.OpenJobsTable(q => q.OrderBy(j => j.Id));
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<JobListModel>(this.ControllerContext, m);
|
||||
|
||||
return View(Views.List, m);
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Job.Lists.AwaitingTechnicianAction)]
|
||||
public virtual ActionResult AwaitingTechnicianAction()
|
||||
{
|
||||
var m = new Models.Job.ListModel() { Title = "Jobs Awaiting Technician Action" };
|
||||
|
||||
m.JobTable = ManagedJobList.OpenJobsTable(ManagedJobList.AwaitingTechnicianActionFilter);
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<JobListModel>(this.ControllerContext, m);
|
||||
@@ -127,13 +92,12 @@ namespace Disco.Web.Controllers
|
||||
[DiscoAuthorize(Claims.Job.Lists.DevicesReadyForReturn)]
|
||||
public virtual ActionResult DevicesReadyForReturn()
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
var m = new Models.Job.ListModel() { Title = "Jobs with Devices Ready for Return" };
|
||||
m.JobTable = new Disco.Models.BI.Job.JobTableModel() { ShowStatus = true };
|
||||
m.JobTable.Fill(Database, BI.JobBI.Searching.BuildJobTableModel(Database).Where(j => !j.WaitingForUserAction.HasValue
|
||||
|
||||
m.JobTable = ManagedJobList.OpenJobsTable(q => q.Where(j => !j.WaitingForUserAction.HasValue
|
||||
&& j.DeviceHeld != null && j.DeviceReturnedDate == null && j.DeviceReadyForReturn != null &&
|
||||
((!j.JobMetaNonWarranty.AccountingChargeRequiredDate.HasValue && !j.JobMetaNonWarranty.AccountingChargeAddedDate.HasValue) || j.JobMetaNonWarranty.AccountingChargePaidDate.HasValue)
|
||||
&& j.ClosedDate == null).OrderBy(j => j.Id));
|
||||
((!j.JobMetaNonWarranty_AccountingChargeRequiredDate.HasValue && !j.JobMetaNonWarranty_AccountingChargeAddedDate.HasValue) || j.JobMetaNonWarranty_AccountingChargePaidDate.HasValue))
|
||||
.OrderBy(j => j.Id));
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<JobListModel>(this.ControllerContext, m);
|
||||
@@ -144,14 +108,12 @@ namespace Disco.Web.Controllers
|
||||
[DiscoAuthorize(Claims.Job.Lists.DevicesAwaitingRepair)]
|
||||
public virtual ActionResult DevicesAwaitingRepair()
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
var m = new Models.Job.ListModel() { Title = "Jobs with Devices Awaiting Repair" };
|
||||
m.JobTable = new Disco.Models.BI.Job.JobTableModel() { ShowStatus = true };
|
||||
m.JobTable.Fill(Database, BI.JobBI.Searching.BuildJobTableModel(Database).Where(j => j.ClosedDate == null &&
|
||||
(
|
||||
(j.JobMetaNonWarranty.RepairerLoggedDate != null && j.JobMetaNonWarranty.RepairerCompletedDate == null) ||
|
||||
(j.JobMetaWarranty.ExternalLoggedDate != null && j.JobMetaWarranty.ExternalCompletedDate == null)
|
||||
)).OrderBy(j => j.Id));
|
||||
|
||||
m.JobTable = ManagedJobList.OpenJobsTable(q => q.Where(j =>
|
||||
(j.JobMetaNonWarranty_RepairerLoggedDate != null && j.JobMetaNonWarranty_RepairerCompletedDate == null) ||
|
||||
(j.JobMetaWarranty_ExternalLoggedDate != null && j.JobMetaWarranty_ExternalCompletedDate == null)
|
||||
).OrderBy(j => j.Id));
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<JobListModel>(this.ControllerContext, m);
|
||||
@@ -163,16 +125,13 @@ namespace Disco.Web.Controllers
|
||||
[DiscoAuthorize(Claims.Job.Lists.AwaitingFinance)]
|
||||
public virtual ActionResult AwaitingFinance()
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
var m = new Models.Job.ListModel() { Title = "Jobs Awaiting Finance" };
|
||||
m.JobTable = new Disco.Models.BI.Job.JobTableModel() { ShowStatus = true };
|
||||
m.JobTable.Fill(Database, BI.JobBI.Searching.BuildJobTableModel(Database).Where(j => j.ClosedDate == null &&
|
||||
(
|
||||
(j.JobTypeId == JobType.JobTypeIds.HNWar && (j.JobMetaNonWarranty.IsInsuranceClaim && !j.JobMetaInsurance.ClaimFormSentDate.HasValue)) ||
|
||||
(j.JobTypeId == JobType.JobTypeIds.HNWar && (j.JobMetaNonWarranty.AccountingChargeRequiredDate.HasValue && (!j.JobMetaNonWarranty.AccountingChargeAddedDate.HasValue && !j.JobMetaNonWarranty.AccountingChargePaidDate.HasValue))) ||
|
||||
(j.JobTypeId == JobType.JobTypeIds.HNWar && (!j.JobMetaNonWarranty.AccountingChargeAddedDate.HasValue || !j.JobMetaNonWarranty.AccountingChargePaidDate.HasValue)) ||
|
||||
m.JobTable = ManagedJobList.OpenJobsTable(q => q.Where(j =>
|
||||
(j.JobTypeId == JobType.JobTypeIds.HNWar && (j.JobMetaNonWarranty_IsInsuranceClaim.Value && !j.JobMetaInsurance_ClaimFormSentDate.HasValue)) ||
|
||||
(j.JobTypeId == JobType.JobTypeIds.HNWar && (j.JobMetaNonWarranty_AccountingChargeRequiredDate.HasValue && (!j.JobMetaNonWarranty_AccountingChargeAddedDate.HasValue && !j.JobMetaNonWarranty_AccountingChargePaidDate.HasValue))) ||
|
||||
(j.JobTypeId == JobType.JobTypeIds.HNWar && (!j.JobMetaNonWarranty_AccountingChargeAddedDate.HasValue || !j.JobMetaNonWarranty_AccountingChargePaidDate.HasValue)) ||
|
||||
(j.JobTypeId == JobType.JobTypeIds.UMgmt && Job.UserManagementFlags.Infringement_BreachFinancialAgreement == (j.Flags & Job.UserManagementFlags.Infringement_BreachFinancialAgreement))
|
||||
)));
|
||||
));
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<JobListModel>(this.ControllerContext, m);
|
||||
@@ -183,13 +142,11 @@ namespace Disco.Web.Controllers
|
||||
[DiscoAuthorizeAll(Claims.Job.Lists.AwaitingFinance, Claims.Job.Lists.AwaitingFinanceCharge)]
|
||||
public virtual ActionResult AwaitingFinanceCharge()
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
var m = new Models.Job.ListModel() { Title = "Jobs Awaiting Finance - Accounting Charge" };
|
||||
m.JobTable = new Disco.Models.BI.Job.JobTableModel() { ShowStatus = true };
|
||||
m.JobTable.Fill(Database, BI.JobBI.Searching.BuildJobTableModel(Database).Where(j => j.ClosedDate == null &&
|
||||
(j.JobTypeId == JobType.JobTypeIds.HNWar && (j.JobMetaNonWarranty.AccountingChargeRequiredDate.HasValue && (!j.JobMetaNonWarranty.AccountingChargeAddedDate.HasValue && !j.JobMetaNonWarranty.AccountingChargePaidDate.HasValue)))
|
||||
m.JobTable = ManagedJobList.OpenJobsTable(q => q.Where(j =>
|
||||
j.JobTypeId == JobType.JobTypeIds.HNWar && (j.JobMetaNonWarranty_AccountingChargeRequiredDate.HasValue && (!j.JobMetaNonWarranty_AccountingChargeAddedDate.HasValue && !j.JobMetaNonWarranty_AccountingChargePaidDate.HasValue))
|
||||
).OrderBy(j => j.Id));
|
||||
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<JobListModel>(this.ControllerContext, m);
|
||||
|
||||
@@ -199,11 +156,9 @@ namespace Disco.Web.Controllers
|
||||
[DiscoAuthorizeAll(Claims.Job.Lists.AwaitingFinance, Claims.Job.Lists.AwaitingFinancePayment)]
|
||||
public virtual ActionResult AwaitingFinancePayment()
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
var m = new Models.Job.ListModel() { Title = "Jobs Awaiting Finance - Accounting Payment" };
|
||||
m.JobTable = new Disco.Models.BI.Job.JobTableModel() { ShowStatus = true };
|
||||
m.JobTable.Fill(Database, BI.JobBI.Searching.BuildJobTableModel(Database).Where(j => j.ClosedDate == null &&
|
||||
(j.JobTypeId == JobType.JobTypeIds.HNWar && (!j.JobMetaNonWarranty.AccountingChargeAddedDate.HasValue || !j.JobMetaNonWarranty.AccountingChargePaidDate.HasValue))
|
||||
m.JobTable = ManagedJobList.OpenJobsTable(q => q.Where(j =>
|
||||
j.JobTypeId == JobType.JobTypeIds.HNWar && (!j.JobMetaNonWarranty_AccountingChargeAddedDate.HasValue || !j.JobMetaNonWarranty_AccountingChargePaidDate.HasValue)
|
||||
).OrderBy(j => j.Id));
|
||||
|
||||
// UI Extensions
|
||||
@@ -215,11 +170,9 @@ namespace Disco.Web.Controllers
|
||||
[DiscoAuthorizeAll(Claims.Job.Lists.AwaitingFinance, Claims.Job.Lists.AwaitingFinanceInsuranceProcessing)]
|
||||
public virtual ActionResult AwaitingFinanceInsuranceProcessing()
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
var m = new Models.Job.ListModel() { Title = "Jobs Awaiting Finance - Insurance Processing" };
|
||||
m.JobTable = new Disco.Models.BI.Job.JobTableModel() { ShowStatus = true };
|
||||
m.JobTable.Fill(Database, BI.JobBI.Searching.BuildJobTableModel(Database).Where(j => j.ClosedDate == null &&
|
||||
(j.JobTypeId == JobType.JobTypeIds.HNWar && (j.JobMetaNonWarranty.IsInsuranceClaim && !j.JobMetaInsurance.ClaimFormSentDate.HasValue))
|
||||
m.JobTable = ManagedJobList.OpenJobsTable(q => q.Where(j =>
|
||||
j.JobTypeId == JobType.JobTypeIds.HNWar && (j.JobMetaNonWarranty_IsInsuranceClaim.Value && !j.JobMetaInsurance_ClaimFormSentDate.HasValue)
|
||||
).OrderBy(j => j.Id));
|
||||
|
||||
// UI Extensions
|
||||
@@ -231,11 +184,9 @@ namespace Disco.Web.Controllers
|
||||
[DiscoAuthorizeAll(Claims.Job.Lists.AwaitingFinance, Claims.Job.Lists.AwaitingFinanceAgreementBreach)]
|
||||
public virtual ActionResult AwaitingFinanceAgreementBreach()
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
var m = new Models.Job.ListModel() { Title = "Jobs Awaiting Finance - Agreement Breach" };
|
||||
m.JobTable = new Disco.Models.BI.Job.JobTableModel() { ShowStatus = true };
|
||||
m.JobTable.Fill(Database, BI.JobBI.Searching.BuildJobTableModel(Database).Where(j => j.ClosedDate == null &&
|
||||
(j.JobTypeId == JobType.JobTypeIds.UMgmt && Job.UserManagementFlags.Infringement_BreachFinancialAgreement == (j.Flags & Job.UserManagementFlags.Infringement_BreachFinancialAgreement))
|
||||
m.JobTable = ManagedJobList.OpenJobsTable(q => q.Where(j =>
|
||||
j.JobTypeId == JobType.JobTypeIds.UMgmt && Job.UserManagementFlags.Infringement_BreachFinancialAgreement == (j.Flags & Job.UserManagementFlags.Infringement_BreachFinancialAgreement)
|
||||
).OrderBy(j => j.Id));
|
||||
|
||||
// UI Extensions
|
||||
@@ -248,11 +199,12 @@ namespace Disco.Web.Controllers
|
||||
[DiscoAuthorize(Claims.Job.Lists.AwaitingUserAction)]
|
||||
public virtual ActionResult AwaitingUserAction()
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
var m = new Models.Job.ListModel() { Title = "Jobs Awaiting User Action" };
|
||||
m.JobTable = new Disco.Models.BI.Job.JobTableModel() { ShowStatus = true };
|
||||
m.JobTable.Fill(Database, BI.JobBI.Searching.BuildJobTableModel(Database).Where(j => (j.WaitingForUserAction.HasValue || (j.JobMetaNonWarranty.AccountingChargeAddedDate != null && j.JobMetaNonWarranty.AccountingChargePaidDate == null))
|
||||
&& j.ClosedDate == null).OrderBy(j => j.Id));
|
||||
m.JobTable = ManagedJobList.OpenJobsTable(q => q.Where(j =>
|
||||
j.WaitingForUserAction.HasValue ||
|
||||
(j.JobMetaNonWarranty_AccountingChargeAddedDate != null && j.JobMetaNonWarranty_AccountingChargePaidDate == null) ||
|
||||
(j.JobMetaNonWarranty_AccountingChargeRequiredDate != null && j.JobMetaNonWarranty_AccountingChargePaidDate == null)
|
||||
).OrderBy(j => j.Id));
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<JobListModel>(this.ControllerContext, m);
|
||||
@@ -263,9 +215,8 @@ namespace Disco.Web.Controllers
|
||||
[DiscoAuthorize(Claims.Job.Lists.RecentlyClosed)]
|
||||
public virtual ActionResult RecentlyClosed()
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
var m = new Models.Job.ListModel() { Title = "Recently Closed Jobs" };
|
||||
m.JobTable = new Disco.Models.BI.Job.JobTableModel() { ShowStatus = true };
|
||||
m.JobTable = new JobTableModel() { ShowStatus = true };
|
||||
|
||||
var dateTimeNow = DateTime.Now;
|
||||
var closedThreshold = dateTimeNow.AddDays(-2);
|
||||
@@ -284,10 +235,12 @@ namespace Disco.Web.Controllers
|
||||
[DiscoAuthorize(Claims.Job.Lists.Locations)]
|
||||
public virtual ActionResult Locations()
|
||||
{
|
||||
Database.Configuration.LazyLoadingEnabled = true;
|
||||
var m = new Models.Job.ListModel() { Title = "Held Device Locations" };
|
||||
m.JobTable = new Disco.Models.BI.Job.JobTableModel() { ShowStatus = true, ShowLocation = true, ShowTechnician = false, ShowType = false };
|
||||
m.JobTable.Fill(Database, BI.JobBI.Searching.BuildJobTableModel(Database).Where(j => j.ClosedDate == null && j.DeviceHeld.HasValue && !j.DeviceReturnedDate.HasValue).OrderBy(j => j.DeviceHeldLocation));
|
||||
|
||||
m.JobTable = ManagedJobList.OpenJobsTable(q => q.Where(j => j.DeviceHeld.HasValue && !j.DeviceReturnedDate.HasValue).OrderBy(j => j.DeviceHeldLocation));
|
||||
m.JobTable.ShowLocation = true;
|
||||
m.JobTable.ShowTechnician = false;
|
||||
m.JobTable.ShowType = false;
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<JobListModel>(this.ControllerContext, m);
|
||||
@@ -345,7 +298,8 @@ namespace Disco.Web.Controllers
|
||||
}
|
||||
|
||||
if ((!m.Job.ClosedDate.HasValue && m.Job.OpenedDate < DateTime.Today.AddDays(Database.DiscoConfiguration.JobPreferences.LongRunningJobDaysThreshold * -1)) ||
|
||||
(m.Job.ClosedDate.HasValue && m.Job.OpenedDate.AddDays(Database.DiscoConfiguration.JobPreferences.LongRunningJobDaysThreshold) < m.Job.ClosedDate.Value)){
|
||||
(m.Job.ClosedDate.HasValue && m.Job.OpenedDate.AddDays(Database.DiscoConfiguration.JobPreferences.LongRunningJobDaysThreshold) < m.Job.ClosedDate.Value))
|
||||
{
|
||||
m.LongRunning = m.Job.ClosedDate.HasValue ? m.Job.ClosedDate.Value - m.Job.OpenedDate : DateTime.Now - m.Job.OpenedDate;
|
||||
}
|
||||
|
||||
@@ -355,6 +309,14 @@ namespace Disco.Web.Controllers
|
||||
if (Authorization.Has(Claims.Job.Actions.GenerateDocuments))
|
||||
m.AvailableDocumentTemplates = m.Job.AvailableDocumentTemplates(Database, UserService.CurrentUser, DateTime.Now);
|
||||
|
||||
// Available Job Queues
|
||||
IEnumerable<JobQueueToken> jobQueues = null;
|
||||
if (Authorization.Has(Claims.Job.Actions.AddAnyQueues))
|
||||
jobQueues = JobQueueService.GetQueues();
|
||||
else if (Authorization.Has(Claims.Job.Actions.AddOwnQueues))
|
||||
jobQueues = JobQueueService.UsersQueues(CurrentUser);
|
||||
m.AvailableQueues = jobQueues == null ? null : jobQueues.Select(qt => qt.JobQueue).Where(q => m.Job.CanAddQueue(q)).ToList();
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<JobShowModel>(this.ControllerContext, m);
|
||||
|
||||
@@ -409,7 +371,7 @@ namespace Disco.Web.Controllers
|
||||
// Set Opened Date in the past
|
||||
j.OpenedDate = DateTime.Now.AddMinutes(-1 * m.QuickLogTaskTimeMinutes.Value);
|
||||
// Close Job
|
||||
j.OnClose(currentUser);
|
||||
j.OnCloseNormally(currentUser);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.Models.Services.Jobs.JobLists;
|
||||
using Disco.Models.UI.User;
|
||||
using Disco.Services;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Authorization.Roles;
|
||||
using Disco.Services.Plugins.Features.UIExtension;
|
||||
@@ -53,7 +55,7 @@ namespace Disco.Web.Controllers
|
||||
|
||||
if (Authorization.Has(Claims.User.ShowJobs))
|
||||
{
|
||||
m.Jobs = new Disco.Models.BI.Job.JobTableModel()
|
||||
m.Jobs = new JobTableModel()
|
||||
{
|
||||
ShowStatus = true,
|
||||
ShowDevice = true,
|
||||
|
||||
+78
-30
@@ -189,10 +189,14 @@
|
||||
</Compile>
|
||||
<Compile Include="Areas\API\Controllers\AuthorizationRoleController.cs" />
|
||||
<Compile Include="Areas\API\Controllers\JobPreferencesController.cs" />
|
||||
<Compile Include="Areas\API\Controllers\JobQueueController.cs" />
|
||||
<Compile Include="Areas\API\Controllers\JobQueueJobController.cs" />
|
||||
<Compile Include="Areas\API\Controllers\PluginController.cs" />
|
||||
<Compile Include="Areas\API\Models\AuthorizationRole\SubjectItem.cs" />
|
||||
<Compile Include="Areas\API\Models\JobQueue\SubjectItem.cs" />
|
||||
<Compile Include="Areas\Config\Controllers\AuthorizationRoleController.cs" />
|
||||
<Compile Include="Areas\Config\Controllers\JobPreferencesController.cs" />
|
||||
<Compile Include="Areas\Config\Controllers\JobQueueController.cs" />
|
||||
<Compile Include="Areas\Config\Models\AuthorizationRole\CreateModel.cs" />
|
||||
<Compile Include="Areas\Config\Models\AuthorizationRole\IndexModel.cs" />
|
||||
<Compile Include="Areas\Config\Models\AuthorizationRole\ShowModel.cs" />
|
||||
@@ -204,6 +208,9 @@
|
||||
<Compile Include="Areas\Config\Models\DocumentTemplate\ImportStatusModel.cs" />
|
||||
<Compile Include="Areas\Config\Models\Enrolment\StatusModel.cs" />
|
||||
<Compile Include="Areas\Config\Models\JobPreferences\IndexModel.cs" />
|
||||
<Compile Include="Areas\Config\Models\JobQueue\CreateModel.cs" />
|
||||
<Compile Include="Areas\Config\Models\JobQueue\IndexModel.cs" />
|
||||
<Compile Include="Areas\Config\Models\JobQueue\ShowModel.cs" />
|
||||
<Compile Include="Areas\Config\Models\Plugins\InstallModel.cs" />
|
||||
<Compile Include="Areas\Config\Views\AuthorizationRole\Create.generated.cs">
|
||||
<DependentUpon>Create.cshtml</DependentUpon>
|
||||
@@ -225,6 +232,21 @@
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Index.cshtml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Areas\Config\Views\JobQueue\Create.generated.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Create.cshtml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Areas\Config\Views\JobQueue\Index.generated.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Index.cshtml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Areas\Config\Views\JobQueue\Show.generated.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Show.cshtml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Areas\Config\Views\Plugins\Install.generated.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
@@ -509,6 +531,11 @@
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
</Compile>
|
||||
<Compile Include="Views\Job\JobParts\Queues.generated.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Queues.cshtml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Views\Shared\DisplayTemplates\AccessDeniedException.generated.cs">
|
||||
<DependentUpon>AccessDeniedException.cshtml</DependentUpon>
|
||||
<AutoGen>True</AutoGen>
|
||||
@@ -896,6 +923,18 @@
|
||||
<Generator>RazorGenerator</Generator>
|
||||
<LastGenOutput>Index.generated.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Include="Areas\Config\Views\JobQueue\Show.cshtml">
|
||||
<Generator>RazorGenerator</Generator>
|
||||
<LastGenOutput>Show.generated.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Include="Areas\Config\Views\JobQueue\Index.cshtml">
|
||||
<Generator>RazorGenerator</Generator>
|
||||
<LastGenOutput>Index.generated.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Include="Areas\Config\Views\JobQueue\Create.cshtml">
|
||||
<Generator>RazorGenerator</Generator>
|
||||
<LastGenOutput>Create.generated.cs</LastGenOutput>
|
||||
</None>
|
||||
<None Include="Areas\Config\Views\Plugins\Install.cshtml">
|
||||
<Generator>RazorGenerator</Generator>
|
||||
<LastGenOutput>Install.generated.cs</LastGenOutput>
|
||||
@@ -933,6 +972,7 @@
|
||||
<None Include="ClientSource\Scripts\Core\disco.uicore.js" />
|
||||
<None Include="ClientSource\Scripts\Core\moment.en-au.js" />
|
||||
<None Include="ClientSource\Scripts\Core\moment.js" />
|
||||
<None Include="ClientSource\Scripts\Core\_references.js" />
|
||||
<Content Include="ClientSource\Scripts\Modules\Disco-AjaxHelperIcons.min.js">
|
||||
<DependentUpon>Disco-AjaxHelperIcons.js.bundle</DependentUpon>
|
||||
</Content>
|
||||
@@ -1108,16 +1148,17 @@
|
||||
<Content Include="ClientSource\Scripts\Modules\tinymce.min.js">
|
||||
<DependentUpon>tinymce.js.bundle</DependentUpon>
|
||||
</Content>
|
||||
<None Include="ClientSource\Style\BundleSite.css">
|
||||
<DependentUpon>BundleSite.css.bundle</DependentUpon>
|
||||
</None>
|
||||
<None Include="ClientSource\Scripts\Modules\tinymce\themes\simple\theme.js" />
|
||||
<Content Include="ClientSource\Style\BundleSite.min.css">
|
||||
<DependentUpon>BundleSite.css.bundle</DependentUpon>
|
||||
</Content>
|
||||
<None Include="ClientSource\Style\BundleSite.css">
|
||||
<DependentUpon>BundleSite.less</DependentUpon>
|
||||
</None>
|
||||
<None Include="ClientSource\Style\BundleSite.less" />
|
||||
<None Include="ClientSource\Style\Config.css">
|
||||
<DependentUpon>Config.less</DependentUpon>
|
||||
</None>
|
||||
<Content Include="ClientSource\Style\BundleSite.min.css">
|
||||
<DependentUpon>BundleSite.less</DependentUpon>
|
||||
</Content>
|
||||
<Content Include="ClientSource\Style\Config.min.css">
|
||||
<DependentUpon>Config.less</DependentUpon>
|
||||
</Content>
|
||||
@@ -1231,15 +1272,15 @@
|
||||
<Content Include="ClientSource\Style\Job.min.css">
|
||||
<DependentUpon>Job.less</DependentUpon>
|
||||
</Content>
|
||||
<None Include="ClientSource\Style\jQueryUIExtensions.css">
|
||||
<DependentUpon>jQueryUIExtensions.less</DependentUpon>
|
||||
</None>
|
||||
<Content Include="ClientSource\Style\jQueryUIExtensions.min.css">
|
||||
<DependentUpon>jQueryUIExtensions.less</DependentUpon>
|
||||
</Content>
|
||||
<None Include="ClientSource\Style\jQueryUI\dynatree\icons.gif" />
|
||||
<None Include="ClientSource\Style\jQueryUI\dynatree\loading.gif" />
|
||||
<None Include="ClientSource\Style\jQueryUI\dynatree\ui.dynatree.css" />
|
||||
<None Include="ClientSource\Style\jQueryUIExtensions.css">
|
||||
<DependentUpon>jQueryUIExtensions.less</DependentUpon>
|
||||
</None>
|
||||
<None Include="ClientSource\Style\jQueryUIExtensions.min.css">
|
||||
<DependentUpon>jQueryUIExtensions.less</DependentUpon>
|
||||
</None>
|
||||
<Content Include="ClientSource\Style\jQueryUI\dynatree\ui.dynatree.min.css">
|
||||
<DependentUpon>ui.dynatree.css</DependentUpon>
|
||||
</Content>
|
||||
@@ -1257,7 +1298,14 @@
|
||||
<None Include="ClientSource\Style\jQueryUI\images\ui-icons_454545_256x240.png" />
|
||||
<None Include="ClientSource\Style\jQueryUI\images\ui-icons_888888_256x240.png" />
|
||||
<None Include="ClientSource\Style\jQueryUI\images\ui-icons_cd0a0a_256x240.png" />
|
||||
<None Include="ClientSource\Style\jQueryUI\jquery-ui.css" />
|
||||
<None Include="ClientSource\Style\jQueryUI\jquery-ui.less" />
|
||||
<None Include="ClientSource\Style\normalize.less" />
|
||||
<None Include="ClientSource\Style\normalize.css">
|
||||
<DependentUpon>normalize.less</DependentUpon>
|
||||
</None>
|
||||
<None Include="ClientSource\Style\normalize.min.css">
|
||||
<DependentUpon>normalize.less</DependentUpon>
|
||||
</None>
|
||||
<Content Include="ClientSource\Style\Public\HeldDevices.css">
|
||||
<DependentUpon>HeldDevices.less</DependentUpon>
|
||||
</Content>
|
||||
@@ -1290,18 +1338,6 @@
|
||||
<None Include="ClientSource\Style\Shadowbox\shadowbox.min.css">
|
||||
<DependentUpon>shadowbox.css</DependentUpon>
|
||||
</None>
|
||||
<None Include="ClientSource\Style\Shared.css">
|
||||
<DependentUpon>Shared.less</DependentUpon>
|
||||
</None>
|
||||
<None Include="ClientSource\Style\Shared.min.css">
|
||||
<DependentUpon>Shared.less</DependentUpon>
|
||||
</None>
|
||||
<None Include="ClientSource\Style\Site.css">
|
||||
<DependentUpon>Site.less</DependentUpon>
|
||||
</None>
|
||||
<Content Include="ClientSource\Style\Site.min.css">
|
||||
<DependentUpon>Site.less</DependentUpon>
|
||||
</Content>
|
||||
<None Include="ClientSource\Style\Timeline\disco.timelineextensions.css">
|
||||
<DependentUpon>disco.timelineextensions.less</DependentUpon>
|
||||
</None>
|
||||
@@ -1312,6 +1348,18 @@
|
||||
<None Include="ClientSource\Style\Timeline\graphics.min.css">
|
||||
<DependentUpon>graphics.css</DependentUpon>
|
||||
</None>
|
||||
<None Include="ClientSource\Style\Shared.css">
|
||||
<DependentUpon>Shared.less</DependentUpon>
|
||||
</None>
|
||||
<None Include="ClientSource\Style\Shared.min.css">
|
||||
<DependentUpon>Shared.less</DependentUpon>
|
||||
</None>
|
||||
<None Include="ClientSource\Style\Site.css">
|
||||
<DependentUpon>Site.less</DependentUpon>
|
||||
</None>
|
||||
<None Include="ClientSource\Style\Site.min.css">
|
||||
<DependentUpon>Site.less</DependentUpon>
|
||||
</None>
|
||||
<Content Include="ClientSource\Style\Timeline\images\blue-circle.png" />
|
||||
<None Include="ClientSource\Style\Timeline\images\bubble-arrow-point-down.png" />
|
||||
<None Include="ClientSource\Style\Timeline\images\bubble-arrow-point-left.png" />
|
||||
@@ -1366,8 +1414,7 @@
|
||||
<Content Include="ClientSource\Style\User.min.css">
|
||||
<DependentUpon>User.less</DependentUpon>
|
||||
</Content>
|
||||
<None Include="ClientSource\Style\jQueryUI\old_jquery-ui.css" />
|
||||
<Content Include="ClientSource\Style\FontAwesome\font-awesome.css" />
|
||||
<None Include="ClientSource\Style\FontAwesome\font-awesome.less" />
|
||||
<Content Include="favicon.ico" />
|
||||
<Content Include="ClientSource\Style\FontAwesome\fontawesome-webfont.svg" />
|
||||
<Content Include="Global.asax" />
|
||||
@@ -1396,9 +1443,6 @@
|
||||
<None Include="ClientSource\Scripts\Modules\Disco-AjaxHelperIcons.min.js.map">
|
||||
<DependentUpon>Disco-AjaxHelperIcons.js.bundle</DependentUpon>
|
||||
</None>
|
||||
<None Include="ClientSource\Style\BundleSite.css.bundle">
|
||||
<SubType>Designer</SubType>
|
||||
</None>
|
||||
<None Include="ClientSource\Style\Timeline.css.bundle" />
|
||||
<Content Include="ClientSource\Style\FontAwesome\fontawesome-webfont.woff" />
|
||||
<Content Include="ClientSource\Style\FontAwesome\fontawesome-webfont.ttf" />
|
||||
@@ -1523,6 +1567,10 @@
|
||||
<Generator>RazorGenerator</Generator>
|
||||
<LastGenOutput>Create_Redirect.generated.cs</LastGenOutput>
|
||||
</None>
|
||||
<Content Include="Views\Job\JobParts\Queues.cshtml">
|
||||
<Generator>RazorGenerator</Generator>
|
||||
<LastGenOutput>Queues.generated.cs</LastGenOutput>
|
||||
</Content>
|
||||
<None Include="Views\Job\JobParts\_Subject.cshtml">
|
||||
<Generator>RazorGenerator</Generator>
|
||||
<LastGenOutput>_Subject.generated.cs</LastGenOutput>
|
||||
|
||||
@@ -8,6 +8,7 @@ using Disco.BI.Extensions;
|
||||
using Disco.Models.UI.Device;
|
||||
using Disco.Web.Extensions;
|
||||
using Disco.Services.Plugins;
|
||||
using Disco.Models.Services.Jobs.JobLists;
|
||||
|
||||
namespace Disco.Web.Models.Device
|
||||
{
|
||||
@@ -20,7 +21,7 @@ namespace Disco.Web.Models.Device
|
||||
public PluginFeatureManifest DeviceProfileCertificateProvider { get; set; }
|
||||
|
||||
public List<Disco.Models.Repository.DeviceBatch> DeviceBatches { get; set; }
|
||||
public Disco.Models.BI.Job.JobTableModel Jobs { get; set; }
|
||||
public JobTableModel Jobs { get; set; }
|
||||
public List<Disco.Models.Repository.DeviceCertificate> Certificates { get; set; }
|
||||
|
||||
public string OrganisationUnit { get; set; }
|
||||
|
||||
@@ -37,13 +37,11 @@ namespace Disco.Web.Models.Job
|
||||
public Disco.Models.Repository.Device Device { get; set; }
|
||||
public Disco.Models.Repository.User User { get; set; }
|
||||
public List<Disco.Models.Repository.JobType> JobTypes { get; set; }
|
||||
public List<Disco.Models.Repository.JobSubType> JobSubTypes { get; set; }
|
||||
|
||||
public void UpdateModel(DiscoDataContext Database)
|
||||
{
|
||||
if (this.JobTypes == null)
|
||||
JobTypes = Database.JobTypes.ToList();
|
||||
if (this.JobSubTypes == null)
|
||||
JobSubTypes = Database.JobSubTypes.ToList();
|
||||
JobTypes = Database.JobTypes.Include("JobSubTypes.JobQueues").ToList();
|
||||
|
||||
if (!string.IsNullOrEmpty(DeviceSerialNumber))
|
||||
{
|
||||
@@ -68,7 +66,6 @@ namespace Disco.Web.Models.Job
|
||||
{
|
||||
case Disco.Models.Repository.JobType.JobTypeIds.UMgmt:
|
||||
JobTypes.Remove(jobType);
|
||||
JobSubTypes.RemoveAll(jst => jst.JobType == jobType);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -88,7 +85,6 @@ namespace Disco.Web.Models.Job
|
||||
case Disco.Models.Repository.JobType.JobTypeIds.HWar:
|
||||
case Disco.Models.Repository.JobType.JobTypeIds.SImg:
|
||||
JobTypes.Remove(jobType);
|
||||
JobSubTypes.RemoveAll(jst => jst.JobType == jobType);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -134,7 +130,7 @@ namespace Disco.Web.Models.Job
|
||||
if (SubTypes != null)
|
||||
{
|
||||
var subTypes = this.SubTypes;
|
||||
return this.JobSubTypes.Where(m => subTypes.Contains(String.Format("{0}_{1}", m.JobTypeId, m.Id))).ToList();
|
||||
return this.JobTypes.SelectMany(jt => jt.JobSubTypes).Where(m => subTypes.Contains(String.Format("{0}_{1}", m.JobTypeId, m.Id))).ToList();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -3,13 +3,14 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Disco.Models.UI.Job;
|
||||
using Disco.Models.Services.Jobs.JobLists;
|
||||
|
||||
namespace Disco.Web.Models.Job
|
||||
{
|
||||
public class IndexModel : JobIndexModel
|
||||
{
|
||||
public Disco.Models.BI.Job.JobTableModel OpenJobs { get; set; }
|
||||
public Disco.Models.BI.Job.JobTableModel LongRunningJobs { get; set; }
|
||||
public JobTableModel MyJobs { get; set; }
|
||||
public JobTableModel LongRunningJobs { get; set; }
|
||||
|
||||
public List<Disco.Models.BI.Job.Statistics.DailyOpenedClosedItem> DailyOpenedClosedStatistics { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,21 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using Disco.Models.Services.Jobs.JobLists;
|
||||
using Disco.Models.UI.Job;
|
||||
using System.Linq;
|
||||
|
||||
namespace Disco.Web.Models.Job
|
||||
{
|
||||
public class ListModel : JobListModel
|
||||
{
|
||||
public string Title { get; set; }
|
||||
public Disco.Models.BI.Job.JobTableModel JobTable { get; set; }
|
||||
public JobTableModel JobTable { get; set; }
|
||||
|
||||
public string PageTitle
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.Format("{0} ({1})", Title, JobTable.Items.Count);
|
||||
return string.Format("{0} ({1})", Title, JobTable.Items.Count());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ namespace Disco.Web.Models.Job
|
||||
|
||||
public List<Disco.Models.Repository.DocumentTemplate> AvailableDocumentTemplates { get; set; }
|
||||
public List<Disco.Models.Repository.JobSubType> UpdatableJobSubTypes { get; set; }
|
||||
public List<Disco.Models.Repository.JobQueue> AvailableQueues { get; set; }
|
||||
|
||||
public List<SelectListItem> DocumentTemplatesSelectListItems
|
||||
{
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
using Disco.Models.UI.Search;
|
||||
using System;
|
||||
using Disco.Models.BI.Search;
|
||||
using Disco.Models.Services.Jobs.JobLists;
|
||||
using Disco.Models.UI.Search;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
|
||||
namespace Disco.Web.Models.Search
|
||||
{
|
||||
@@ -12,8 +11,8 @@ namespace Disco.Web.Models.Search
|
||||
public string Term { get; set; }
|
||||
public bool Success { get; set; }
|
||||
public string ErrorMessage { get; set; }
|
||||
public List<Disco.Models.BI.Search.DeviceSearchResultItem> Devices { get; set; }
|
||||
public Disco.Models.BI.Job.JobTableModel Jobs { get; set; }
|
||||
public List<Disco.Models.BI.Search.UserSearchResultItem> Users { get; set; }
|
||||
public List<DeviceSearchResultItem> Devices { get; set; }
|
||||
public JobTableModel Jobs { get; set; }
|
||||
public List<UserSearchResultItem> Users { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using Disco.Models.Authorization;
|
||||
using Disco.Models.Services.Authorization;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
@@ -1,22 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web;
|
||||
using System.Web.Mvc;
|
||||
using Disco.BI;
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.Models.Interop.ActiveDirectory;
|
||||
using Disco.Models.Services.Authorization;
|
||||
using Disco.Models.Services.Jobs.JobLists;
|
||||
using Disco.Models.UI.User;
|
||||
using Disco.Web.Extensions;
|
||||
using Disco.Models.Authorization;
|
||||
using Disco.Web.Models.Shared;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace Disco.Web.Models.User
|
||||
{
|
||||
public class ShowModel : UserShowModel
|
||||
{
|
||||
public Disco.Models.Repository.User User { get; set; }
|
||||
public Disco.Models.BI.Job.JobTableModel Jobs { get; set; }
|
||||
public JobTableModel Jobs { get; set; }
|
||||
public List<Disco.Models.Repository.DocumentTemplate> DocumentTemplates { get; set; }
|
||||
public IAuthorizationToken AuthorizationToken { get; set; }
|
||||
public IClaimNavigatorItem ClaimNavigator { get; set; }
|
||||
|
||||
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
|
||||
//
|
||||
// You can specify all the values or you can default the Revision and Build Numbers
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("1.2.1128.1503")]
|
||||
[assembly: AssemblyFileVersion("1.2.1128.1503")]
|
||||
[assembly: AssemblyVersion("1.2.1229.1537")]
|
||||
[assembly: AssemblyFileVersion("1.2.1229.1537")]
|
||||
+961
-20
File diff suppressed because it is too large
Load Diff
@@ -7,6 +7,6 @@
|
||||
@Html.Partial(MVC.Shared.Views._JobTable, Model.Jobs)
|
||||
</div>
|
||||
<script>
|
||||
$('#DeviceDetailTabItems').append('<li><a href="#DeviceDetailTab-Jobs">Jobs [@(Model.Jobs.Items.Count)]</a></li>');
|
||||
$('#DeviceDetailTabItems').append('<li><a href="#DeviceDetailTab-Jobs">Jobs [@(Model.Jobs.Items.Count())]</a></li>');
|
||||
</script>
|
||||
</div>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user