www.pdaclientportal.com
Open in
urlscan Pro
66.128.63.175
Public Scan
Submitted URL: https://www.pdaclientportal.com/Account/Login?a=LXw0Lta71hKSUSk5Mbm%2fPkiLULxRX8mAFcIfMaQQd2Z79zYCBaVjcbtGni0aCR0EEy2pmwIocJVS7g...
Effective URL: https://www.pdaclientportal.com/Main/Default.aspx
Submission: On November 08 via manual from US — Scanned from US
Effective URL: https://www.pdaclientportal.com/Main/Default.aspx
Submission: On November 08 via manual from US — Scanned from US
Form analysis
1 forms found in the DOMPOST ./Default.aspx
<form method="post" action="./Default.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="scriptManager1_TSM" id="scriptManager1_TSM" value="">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="">
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="5GZ+YkmoVxQoXdxr1B56FZ4tE54Fw6pgOPGv9OOn2wAR4/DD+zS8HRDbdk6nJ919r9xCjHHcpamC3em3IBVvm6kOAMNUP9kN8InOkK1KDB1jK8Wc6HGIRHpWK7wUpCclXl9Cg3GhSGC27qihmaWLiKt4Apdcedu2k8+hUSZ7NNpACaPTCCWAytdiB+rIF25r8PqbDuAglUiQh1qj/Sn8W7hgPQCpC5FIDhdISRh4Rcz5VLg7UrVjybH4I3Vuam6xFtZK7Gwdkx8G7wIxY0f+XXJ8WjiUiYWlUkgMHprxkhRCIA8VNydPJ/YFxKyLfbnFY6f3myNi5qbhaKjFrd5EJr5PlWnn4YtHFc6uQGA2VzObf7LOqTtmIxC39OSXcmiwyaTU9N7Vf1SACt3/QmDHlATdxq+4dllX/gGlH/8Kmv7NYJkO/tUsYmgWOL25QXaN+/YzXcj8IlGLikgyYphz1HoyD7ENHftC0jjPKZxahSNIJE1JXksa3/VTuIF/lLVwNv3BOyEmhL5ytm70A+AE6Lg0yA3gRJyRduo/luOgoEmDNb77bxEPKZXV1Iqw2ieW6j026r7xTLm95IQWY8F4Fyu3Fu48lATx0eclR9bP/Hr6hw4XigB7ZxgD+d2BS6/AmZ47a1MkgxwvQ5KdnCIxzToR8ByyWPqYLwn5zjI12oHhKy76n4MV4ib2JXEhE6zRazFZvEVCJgDdXVdeaKAVXKOg/jDiiT75205QiiWHr/FdLBeCGOObLtRq6YTBrWV0Rw/UlRV1E4VgiEUdYm4cy64uj3wn09vvEN5kCdvUUl6zRj/i0PxgLAidPGcc2zgrE96x6n7KNw5KpirzjX5Qyw7R30QFo2AwGHjLxXAuFtXc0Mj6HR3IXxV/X38rCzdVC4YdwhUbCdZkIjIit0vnNNfJJEpFxRuYZadcNFhZsZvxVNA3/eLzPOZQnrHE8aaZOh0Mc/XXZRCiFYkTlGskgl7daUaskkjbviG0sbZ+IpF9VjKSn3RRnHUKikiQnvnxKdM7ziadk4iMAiPkq909xKOWPHC5F0T1T6bKKwdB2RyIorvc0Svq/CGxm8KZVy4JyMwUKuWYquBHb58fKuIwAL0uG3k106RIlZ5gF5Nk+IhiM9/wFgQbAnCGWJ53uWiScFMlGd06uNKrepB8jbp6uHBtdcOsP7vY5nyihbo+jxdplGilVMXeosP0DT/M18R8W8+ODKPjCZ3IdL1rFQrF72GqpmzfDR/bVoBEMtLCmcvjWQu53YxY55Sy8bdso32/SfaUIPAauwgB/fjJxjwibTemXgg/Np+GtUKN2h5Nzc6BtewK+k1Yu2xw/fOm7kHDuYuWz58Lxg+iTqoQZUeDgmH5WCyHL9MQxwuWA38Ty/aGqpCl7ByP45UE+0NLjtUiA5SD2+H104lcCv5bzoYtlN63X2LXm2OO5Q2EPBA2BxtW8C788d20XZgCufGDMWm3fZMhzR6lqITV18GKvmP1zEvSMGdCphCwLo7ysYJhCVkexHbrvtMGkJe6LkdPkbHpdnxqtU4CdqwVe58ioNQiA0DaDG8yiSwpq1NZFX6zu6p6J5FeG4ROUBhjSAbK0YEZVKNFAkTz0R1i7yPaY6+XNmnmgFYw/ldyiM9aRX/06qsednIUdK2PMpBqflo12GouFFp+Ach22GXs8JbQksXnpGrYmu9Q/5KIxXnCqQuegr2VTnuKKAWlDNw/iLxBZif4tYxh2jSye70Vzw2efFoIyiVu20KwogysbgDUBWn1wdlZGmtDz0qe1YnWSmPt8PcMOfrnbiUoOE3tBXvf1URr2Ny38ZFNdztA7aXW2IpLFq8g1e7fv0BVJ86hJlR9vb/ztrzMD4cY9NugI0T1UUg1G+tyk7eOUbWwxjMqRF3guEsDD797mI4FuVGFyEDkOeg7sIWML+LIqPC/NQ/bQjpdTKUlfrUglh6JULZ8MSu6OJZX+eJQkv4ZVBOUjEfy+EDLcAc9ZBY6VDZS5zoLD4h7dRh37K+7QTDmsGWwfyO+AhK5KjzavjRYIRaZftwTW5Xv/hQoYrqgtm0cUUjDxztffQu+p3CzhYeRB/6zxD5ByW+SX/+5I45ng/S2rQUReDeEQLK4fWT5xvwcCNTJvjSPZzxuNAGlGP39c7egE9XGVPW+IYEyXmcWBHwS0swVOA6GKY1+QFsRL6H78wOJABRMe1ftiJm5NzuI0JqNPwoHFzi4umcBpJcbGaYtngBFWcNr2JpRTINYxTS1go27Uf+69LCwhfVHrFRWUQdRDwHsn0Aia3QZ2kpn5PyWM5weeWo+pJtuCG45CK0HnIUTBk3WNE7LqBvgMjCsh14Pg/AncqAOKQL8YqqsoatLrLdeUrVkHagbyFSRVz4pxcs+Vhxg5k0AOf87ble7D8PmRFRMgE+jt9+rXTSkzVH5AN39Xs2FkXIU/ylqMwpOibgUyQF71gTMrFmgZajxswip1WB+vAP9YnagcUmRfv96vn6OkIc0TuwbaDbxQR6GO/sHqJeXaJSDi00gIxfuRanyYyDewYPmJqiN+a0X28poowvJXxvAOcwSd/slsLu4ODYfmy+M8A==">
</div>
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
<script src="https://ajax.aspnetcdn.com/ajax/4.6/1/WebForms.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
window.WebForm_PostBackOptions || document.write('<script type="text/javascript" src="/WebResource.axd?d=pynGkmcFUV13He1Qd6_TZJM0Rt4kmKxDVGzrdmhop5Q8hqD820C8onRte3ZI7uwvCUgYhCxVdyhoRCVrzTK7AQ2&t=637811441229275428"><\/script>'); //]]>
</script>
<script src="/ScriptResource.axd?d=x6wALODbMJK5e0eRC_p1LYghWNAWVgoqFT-mrImDKTWDwypPv0QMDEA0seCD01br5abSdamGIMgWXT4fUPldYWnFYr3_fK5EJ1HRc5ZacpaH-LY8GYfSqzIxaBycqKHZ0&t=734d43f5" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
(window.Sys && Sys._Application && Sys.Observer) || document.write(
'<script type="text/javascript" src="/ScriptResource.axd?d=x6wALODbMJK5e0eRC_p1LYghWNAWVgoqFT-mrImDKTWDwypPv0QMDEA0seCD01br5abSdamGIMgWXT4fUPldYWnFYr3_fK5EJ1HRc5ZacpaH-LY8GYfSqzIxaBycqKHZ0&t=734d43f5"><\/script>'); //]]>
</script>
<script src="/ScriptResource.axd?d=P5lTttoqSeZXoYRLQMIScOcYJhdZGHvKqnCBuPGBavJtd8qbfttPHB711z5qDVZw4HTMovsIILQRJ-FWA9NHioml3IHqdzfKPiM4ap3SnsotlzddIAxyvNWvz_2QY3rX0&t=734d43f5" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
(window.Sys && Sys.WebForms) || document.write(
'<script type="text/javascript" src="/ScriptResource.axd?d=P5lTttoqSeZXoYRLQMIScOcYJhdZGHvKqnCBuPGBavJtd8qbfttPHB711z5qDVZw4HTMovsIILQRJ-FWA9NHioml3IHqdzfKPiM4ap3SnsotlzddIAxyvNWvz_2QY3rX0&t=734d43f5"><\/script>'); //]]>
</script>
<script src="../Scripts/jquery-3.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
(window.jQuery) || document.write('<script type="text/javascript" src="../Scripts/jquery-3.4.1.min.js"><\/script>'); //]]>
</script>
<script src="../Scripts/bootstrap.min.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
(window.jQuery().popover) || document.write('<script type="text/javascript" src="../Scripts/bootstrap.min.js"><\/script>'); //]]>
</script>
<script src="../Scripts/jquery-ui-1.12.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
(window.jQuery.ui) || document.write('<script type="text/javascript" src="../Scripts/jquery-ui-1.12.1.min.js"><\/script>'); //]]>
</script>
<script src="../Scripts/flkHelpers/flkHelpers-core.js?v=2.3.2" type="text/javascript"></script>
<script src="../Scripts/site.js?t=21.6.15.1" type="text/javascript"></script>
<script src="../js/plugins.js" type="text/javascript"></script>
<script src="../Scripts/pda-system-messages.js?t=20.8.31.1" type="text/javascript"></script>
<script src="https://d2i2wahzwrm1n5.cloudfront.net/ajaxz/2018.2.710/Common/Core.js" type="text/javascript"></script>
<script src="https://d2i2wahzwrm1n5.cloudfront.net/ajaxz/2018.2.710/Common/jQueryExternal.js" type="text/javascript"></script>
<script src="https://d2i2wahzwrm1n5.cloudfront.net/ajaxz/2018.2.710/Common/jQueryPlugins.js" type="text/javascript"></script>
<script src="../Scripts/kendo/2018.2.620/kendo.all.min.js" type="text/javascript"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js" type="text/javascript"></script>
<script src="../Scripts/gridstack.js" type="text/javascript"></script>
<script src="../Scripts/gridstack.jQueryUI.js" type="text/javascript"></script>
<script src="../Services/General.asmx/js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
var PageMethods = function() {
PageMethods.initializeBase(this);
this._timeout = 0;
this._userContext = null;
this._succeeded = null;
this._failed = null;
}
PageMethods.prototype = {
_get_path: function() {
var p = this.get_path();
if (p) return p;
else return PageMethods._staticInstance.get_path();
},
GetMetricDefinition: function(metricId, succeededCallback, failedCallback, userContext) {
return this._invoke(this._get_path(), 'GetMetricDefinition', false, {
metricId: metricId
}, succeededCallback, failedCallback, userContext);
},
GetAllMetricDefinitionsByUserId: function(succeededCallback, failedCallback, userContext) {
return this._invoke(this._get_path(), 'GetAllMetricDefinitionsByUserId', false, {}, succeededCallback, failedCallback, userContext);
},
LoadBranches: function(succeededCallback, failedCallback, userContext) {
return this._invoke(this._get_path(), 'LoadBranches', false, {}, succeededCallback, failedCallback, userContext);
},
SaveMetricDefinitionForUser: function(metricId, rowId, columnId, succeededCallback, failedCallback, userContext) {
return this._invoke(this._get_path(), 'SaveMetricDefinitionForUser', false, {
metricId: metricId,
rowId: rowId,
columnId: columnId
}, succeededCallback, failedCallback, userContext);
},
DeactivateMetricDefinitionForUser: function(metricId, succeededCallback, failedCallback, userContext) {
return this._invoke(this._get_path(), 'DeactivateMetricDefinitionForUser', false, {
metricId: metricId
}, succeededCallback, failedCallback, userContext);
},
GetMetricData: function(metricId, branchIds, includeRepairable, includeTotalLoss, includeDriveable, includeNondriveable, currentPeriodId, priorPeriodId, succeededCallback, failedCallback, userContext) {
return this._invoke(this._get_path(), 'GetMetricData', false, {
metricId: metricId,
branchIds: branchIds,
includeRepairable: includeRepairable,
includeTotalLoss: includeTotalLoss,
includeDriveable: includeDriveable,
includeNondriveable: includeNondriveable,
currentPeriodId: currentPeriodId,
priorPeriodId: priorPeriodId
}, succeededCallback, failedCallback, userContext);
},
GetMetricSettingsForUser: function(succeededCallback, failedCallback, userContext) {
return this._invoke(this._get_path(), 'GetMetricSettingsForUser', false, {}, succeededCallback, failedCallback, userContext);
},
SaveMetricSettingsForUser: function(SelectedBranches, CurrentPeriodId, PriorPeriodId, IncludeTotalLoss, IncludeRepairable, IncludeDrivable, IncludeNondrivable, succeededCallback, failedCallback, userContext) {
return this._invoke(this._get_path(), 'SaveMetricSettingsForUser', false, {
SelectedBranches: SelectedBranches,
CurrentPeriodId: CurrentPeriodId,
PriorPeriodId: PriorPeriodId,
IncludeTotalLoss: IncludeTotalLoss,
IncludeRepairable: IncludeRepairable,
IncludeDrivable: IncludeDrivable,
IncludeNondrivable: IncludeNondrivable
}, succeededCallback, failedCallback, userContext);
}
}
PageMethods.registerClass('PageMethods', Sys.Net.WebServiceProxy);
PageMethods._staticInstance = new PageMethods();
PageMethods.set_path = function(value) {
PageMethods._staticInstance.set_path(value);
}
PageMethods.get_path = function() {
return PageMethods._staticInstance.get_path();
}
PageMethods.set_timeout = function(value) {
PageMethods._staticInstance.set_timeout(value);
}
PageMethods.get_timeout = function() {
return PageMethods._staticInstance.get_timeout();
}
PageMethods.set_defaultUserContext = function(value) {
PageMethods._staticInstance.set_defaultUserContext(value);
}
PageMethods.get_defaultUserContext = function() {
return PageMethods._staticInstance.get_defaultUserContext();
}
PageMethods.set_defaultSucceededCallback = function(value) {
PageMethods._staticInstance.set_defaultSucceededCallback(value);
}
PageMethods.get_defaultSucceededCallback = function() {
return PageMethods._staticInstance.get_defaultSucceededCallback();
}
PageMethods.set_defaultFailedCallback = function(value) {
PageMethods._staticInstance.set_defaultFailedCallback(value);
}
PageMethods.get_defaultFailedCallback = function() {
return PageMethods._staticInstance.get_defaultFailedCallback();
}
PageMethods.set_enableJsonp = function(value) {
PageMethods._staticInstance.set_enableJsonp(value);
}
PageMethods.get_enableJsonp = function() {
return PageMethods._staticInstance.get_enableJsonp();
}
PageMethods.set_jsonpCallbackParameter = function(value) {
PageMethods._staticInstance.set_jsonpCallbackParameter(value);
}
PageMethods.get_jsonpCallbackParameter = function() {
return PageMethods._staticInstance.get_jsonpCallbackParameter();
}
PageMethods.set_path("Default.aspx");
PageMethods.GetMetricDefinition = function(metricId, onSuccess, onFailed, userContext) {
PageMethods._staticInstance.GetMetricDefinition(metricId, onSuccess, onFailed, userContext);
}
PageMethods.GetAllMetricDefinitionsByUserId = function(onSuccess, onFailed, userContext) {
PageMethods._staticInstance.GetAllMetricDefinitionsByUserId(onSuccess, onFailed, userContext);
}
PageMethods.LoadBranches = function(onSuccess, onFailed, userContext) {
PageMethods._staticInstance.LoadBranches(onSuccess, onFailed, userContext);
}
PageMethods.SaveMetricDefinitionForUser = function(metricId, rowId, columnId, onSuccess, onFailed, userContext) {
PageMethods._staticInstance.SaveMetricDefinitionForUser(metricId, rowId, columnId, onSuccess, onFailed, userContext);
}
PageMethods.DeactivateMetricDefinitionForUser = function(metricId, onSuccess, onFailed, userContext) {
PageMethods._staticInstance.DeactivateMetricDefinitionForUser(metricId, onSuccess, onFailed, userContext);
}
PageMethods.GetMetricData = function(metricId, branchIds, includeRepairable, includeTotalLoss, includeDriveable, includeNondriveable, currentPeriodId, priorPeriodId, onSuccess, onFailed, userContext) {
PageMethods._staticInstance.GetMetricData(metricId, branchIds, includeRepairable, includeTotalLoss, includeDriveable, includeNondriveable, currentPeriodId, priorPeriodId, onSuccess, onFailed, userContext);
}
PageMethods.GetMetricSettingsForUser = function(onSuccess, onFailed, userContext) {
PageMethods._staticInstance.GetMetricSettingsForUser(onSuccess, onFailed, userContext);
}
PageMethods.SaveMetricSettingsForUser = function(SelectedBranches, CurrentPeriodId, PriorPeriodId, IncludeTotalLoss, IncludeRepairable, IncludeDrivable, IncludeNondrivable, onSuccess, onFailed, userContext) {
PageMethods._staticInstance.SaveMetricSettingsForUser(SelectedBranches, CurrentPeriodId, PriorPeriodId, IncludeTotalLoss, IncludeRepairable, IncludeDrivable, IncludeNondrivable, onSuccess, onFailed, userContext);
}
var gtc = Sys.Net.WebServiceProxy._generateTypedConstructor;
Type.registerNamespace('Pda.Data.ClientPortal.Reporting');
if (typeof(Pda.Data.ClientPortal.Reporting.MetricDefinition) === 'undefined') {
Pda.Data.ClientPortal.Reporting.MetricDefinition = gtc("Pda.Data.ClientPortal.Reporting.MetricDefinition");
Pda.Data.ClientPortal.Reporting.MetricDefinition.registerClass('Pda.Data.ClientPortal.Reporting.MetricDefinition');
}
if (typeof(Pda.Data.ClientPortal.Reporting.MetricSettings) === 'undefined') {
Pda.Data.ClientPortal.Reporting.MetricSettings = gtc("Pda.Data.ClientPortal.Reporting.MetricSettings");
Pda.Data.ClientPortal.Reporting.MetricSettings.registerClass('Pda.Data.ClientPortal.Reporting.MetricSettings');
}
//]]>
</script>
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="65401229">
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION"
value="d6LCAyZp8bJJd5cOcFQnkrnWx4N1ZOqfvGYFgI3XsgwR7fbilO9Nx5viKfG/25Pm1zqGPH7E2xuhKWNqQMID5fXI+rfieV24I7ikfr4O26LgIgrIuvlupItBT2Vx7z2vINvYbxW1eLQQxt3cWkDvbL7CAQl+ULxhiAlzM8w2YzDwPdA7wZci3Yvi15SK9BM8aOxTH0RbAzYXduqvYIB7u5BXFBKc/h3s59idnTIorDN/d6OH1MYpJ6qZsmjjgw68+QnM2XJIvfqB7mM0Vs2gE7+pOLF7kW+Vq9UkMU8aA9CbAfZnTciZb9+Y6bSoznMf13nF2U2JrMtle+voTj62g1sApW8omvVJ8X6fulkWYW5vLuj1qWsaiSQMF55dhRmqXjiTgBiyX+KeJyWAPbntfvaUTg2k0nSU9LXdN0q3MQ5Io03dawKaKKSrfBK+Dt4cT/HMmTcWDeAStiKmpGlvzpq0mLx/0dsBs6FrB6KEXLC+LejxdZtOiVFgllbW3lbyPQa/lF8zalKCmmq0ZYik3AmrcLwocN6rECyubyl99/ZGaGLToCRl1u16nabRRCawhrr3vyn8wK2LcRUsgtHcQrOXBg+/GA1WM7Ym0jVWSHA=">
</div>
<script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ctl00$ctl00$scriptManager1', 'form1', [], [], [], 90, 'ctl00$ctl00');
//]]>
</script>
<div id="main-container">
<nav class="navbar">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="../"><img src="../img/logo/AlacrityLogo_A.png" alt="Logo"></a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<span id="cph_MenuBarRight_lbl_User"></span> <li><a id="cph_MenuBarRight_lnk_Preferences" data-toggle="tooltip" title="Preferences" href="../User/Preferences.aspx"><i class="glyphicon glyphicon-cog"></i></a></li>
<li><a data-toggle="tooltip" title="Logout" href="../Logout.aspx"><i class="glyphicon glyphicon-log-out"></i></a></li>
<li><a id="lnk_ContactUs" href="Help.aspx">Contact Us</a></li>
<li><a title="Help" data-toggle="tooltip" data-placement="bottom" href="../Help/FAQs.aspx" target="_blank"><i class="fa fa-question"></i></a></li>
</ul>
<ul class="nav navbar-nav">
</ul>
<ul class="nav navbar-nav">
<li><a class="nav-dashboard" href="Default.aspx"><i class="gi gi-stopwatch"></i> Dashboard</a></li>
<li><a href="../Assignments/Create.aspx"><i class="gi gi-notes"></i> New Assignment</a></li>
<li><a href="../Assignments/ViewAssignments.aspx"><i class="gi gi-notes_2"></i> View Assignments</a></li>
<li><a href="../PaymentPortal/Invoices"><i class="gi gi-credit_card"></i> Pay Invoices</a></li>
</ul>
</div>
</div>
</nav>
<header class="header" style="display: none;">
</header>
<div id="page-content">
<div class="breadcrumb breadcrumb-top">
<div class="nav-sitemap-outer">
<span id="SiteMapPath1"
style="display:inline-block;width:100%;"><a href="#SiteMapPath1_SkipLink"><img alt="Skip Navigation Links" src="/WebResource.axd?d=rKN1opQVoh180LaGjXZZkODH2OlGviGhyOYDnm1BFbko62EDIkS6Gkk0OzC6y2I6q2Vf7sdRrDrgemX3c--kHA2&t=637811441229275428" width="0" height="0" style="border-width:0px;"></a><span>Home</span><a id="SiteMapPath1_SkipLink"></a></span>
</div>
<div class="nav-ddl-outer">
</div>
<br style="clear: both;">
</div>
<div class="main-content">
<!-- same day banner goes here! -->
<span id="cph_Main_cph_Main_lblTest"></span>
<div id="cph_Main_cph_Main_pnlVerifiedUser" class="row">
<div id="AddWidgetButton_Container" class="row form-inline dashboard-form-container">
<div class="checkbox">
<label for="cph_Main_cph_Main_chk_repairable"> <span class="dashboard-form-checkboxes checkbox-inline"><input id="cph_Main_cph_Main_chk_repairable" type="checkbox" name="ctl00$ctl00$cph_Main$cph_Main$chk_repairable"></span> Repairable
</label>
</div>
<div class="checkbox">
<label for="cph_Main_cph_Main_chk_totalLoss"> <span class="dashboard-form-checkboxes checkbox-inline"><input id="cph_Main_cph_Main_chk_totalLoss" type="checkbox" name="ctl00$ctl00$cph_Main$cph_Main$chk_totalLoss"></span> Total Loss
</label>
</div>
<div class="checkbox">
<label for="cph_Main_cph_Main_chk_drivable"> <span class="dashboard-form-checkboxes checkbox-inline"><input id="cph_Main_cph_Main_chk_drivable" type="checkbox" name="ctl00$ctl00$cph_Main$cph_Main$chk_drivable"></span> Drivable </label>
</div>
<div class="checkbox">
<label for="cph_Main_cph_Main_chk_nondrivable"> <span class="dashboard-form-checkboxes checkbox-inline"><input id="cph_Main_cph_Main_chk_nondrivable" type="checkbox" name="ctl00$ctl00$cph_Main$cph_Main$chk_nondrivable"></span>
Non-drivable </label>
</div>
<div class="form-group" style="font-size:14px">
<select name="ctl00$ctl00$cph_Main$cph_Main$ddl_MetricTimePeriod" id="cph_Main_cph_Main_ddl_MetricTimePeriod" class="dashboard-form-dropdowns ddl_timeFrame1 form-control" aria-label="Time Period">
<option value="1">Current Month</option>
<option value="2" disabled="disabled">Prior Month</option>
<option value="3">3-Month-Moving</option>
<option value="4">12-Month-Moving</option>
<option value="5">Year-To-Date</option>
<option value="-1">Current Month (Prior Year)</option>
<option value="-2">Prior Month (Prior Year)</option>
<option value="-3">3-Month-Moving (Prior Year)</option>
<option value="-4">12-Month-Moving (Prior Year)</option>
<option value="-5">Year-To-Date (Prior Year)</option>
</select>
<select name="ctl00$ctl00$cph_Main$cph_Main$ddl_MetricTimePeriod2" id="cph_Main_cph_Main_ddl_MetricTimePeriod2" class="dashboard-form-dropdowns ddl_timeFrame2 form-control">
<option value="1" disabled="disabled">Current Month</option>
<option value="2">Prior Month</option>
<option value="3">3-Month-Moving</option>
<option value="4">12-Month-Moving</option>
<option value="5">Year-To-Date</option>
<option value="-1">Current Month (Prior Year)</option>
<option value="-2">Prior Month (Prior Year)</option>
<option value="-3">3-Month-Moving (Prior Year)</option>
<option value="-4">12-Month-Moving (Prior Year)</option>
<option value="-5">Year-To-Date (Prior Year)</option>
</select>
</div>
<div class="form-group">
<div id="mslChangeBranch_wrapper" style="width: 420px; border-radius: 2px; margin-left: 12px; border-color: #DBE1E8; display:inline-block; " class="dashboard-dropdown-container">
<div class="demo-section k-content">
<div class="k-widget k-multiselect k-multiselect-clearable" unselectable="on" title="" style="">
<div class="k-multiselect-wrap k-floatwrap" unselectable="on">
<ul role="listbox" unselectable="on" class="k-reset" id="mslChangeBranch_taglist"></ul><input class="k-input k-readonly" style="width: 161.094px;" accesskey="" autocomplete="off" role="listbox" title="" aria-expanded="false"
tabindex="0" aria-describedby="mslChangeBranch_taglist" aria-owns="mslChangeBranch_taglist mslChangeBranch_listbox" aria-disabled="false" aria-busy="false"><span unselectable="on"
class="k-icon k-clear-value k-i-close k-hidden" title="clear" role="button" tabindex="-1"></span><span class="k-icon k-i-loading k-hidden"></span>
</div><select id="mslChangeBranch" data-placeholder="Select Your Branch" data-role="multiselect" multiple="multiple" aria-disabled="false" style="display: none;"></select><span
style="font-family: Helvetica; font-size: 16px; font-stretch: 100%; font-style: normal; font-weight: 400; letter-spacing: normal; text-transform: none; line-height: 26.4px; position: absolute; visibility: hidden; top: -3333px; left: -3333px;">Select
Your Branch</span>
</div>
</div>
</div>
</div>
<div class="form-group">
<button id="btnApplyFilters" type="button" class="hidden btn btn-primary">Apply Filters</button>
</div>
<a class="btn btn-primary pull-right" id="add-new-widget" href="#">
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span><span id="AddWidgetText"> Add Metric</span>
</a>
<div class="dropdown positionInViewport collapsed">
<div id="ChartList" class="addWidgetSection">
<div id="dvChartSection">
<span class="spnMetricHeader">Charts</span>
<ul class="ulMetrics">
<li id="14" class="liAddWidget disabled" data-type="Line"> Average Business Cycle Time - Automobile </li>
<li id="4" class="liAddWidget" data-type="HorizontalBar"> Average Supplement Amount </li>
<li id="2" class="liAddWidget" data-type="HorizontalBar"> Gross Average Appraisal </li>
</ul>
</div>
</div>
<div id="SummaryList" class="addWidgetSection">
<div id="dvStatisticSection">
<span class="spnMetricHeader">Metrics</span>
<ul class="ulMetrics">
<li id="5" class="liAddWidget disabled" data-type="Summary"> Appraisal Count </li>
<li id="8" class="liAddWidget disabled" data-type="Summary"> Average Business Cycle Time - Automobile </li>
<li id="12" class="liAddWidget" data-type="Summary"> Average Calendar Cycle Time - Automobile </li>
<li id="3" class="liAddWidget" data-type="Summary"> Average Supplement Amount </li>
<li id="7" class="liAddWidget" data-type="Summary"> Average Supplement Total vs Initial Appraisal </li>
<li id="15" class="liAddWidget" data-type="Summary"> Average Supplement vs Appraisal Counts </li>
<li id="1" class="liAddWidget" data-type="Summary"> Gross Average Appraisal </li>
<li id="6" class="liAddWidget disabled" data-type="Summary"> Supplement Count </li>
</ul>
</div>
</div>
</div>
</div>
<div class="widgetsContainer col-xs-12">
<div style="height: 0">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0" style="visibility: hidden">
<defs>
<linearGradient id="greenGradient" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:rgb(3,166,82);stop-opacity:.8"></stop>
<stop offset="100%" style="stop-color:rgb(248,248,248);stop-opacity:.8"></stop>
</linearGradient>
</defs>
</svg>
</div>
<div style="height: 0">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0" style="visibility: hidden">
<defs>
<linearGradient id="blueGradient" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" style="stop-color:rgb(37,107,222);stop-opacity:.8"></stop>
<stop offset="100%" style="stop-color:rgb(248,248,248);stop-opacity:.8"></stop>
</linearGradient>
</defs>
</svg>
</div>
<script>
var resizeId;
$(window).resize(function() {
clearTimeout(resizeId);
resizeId = setTimeout(doneResizing, 800);
});
var initalWindowWidth = $(window).outerWidth();
function doneResizing() {
if (initalWindowWidth !== $(window).outerWidth()) {
initalWindowWidth = $(window).outerWidth();
let charts = [];
var grid = $('.grid-stack').data('gridstack');
for (let i = 0; i < $(".k-chart").length; i++) {
charts.push($(".k-chart").eq(i).data("kendoChart"));
}
let gridstackItems = []
for (let i = 0; i < $(".grid-stack-item").length; i++) {
gridstackItems.push($(".grid-stack-item").eq(i));
if (window.outerWidth < 1300 && window.outerWidth > 767) {
grid.resize(gridstackItems[i], 6);
grid.compact();
}
if (window.outerWidth > 1320) {
grid.resize(gridstackItems[i], 4);
if (gridstackItems[i].find(".summarycard").hasClass("summarycard")) {
grid.resize(gridstackItems[i], 2);
}
grid.compact();
}
if (window.outerWidth < 1000) {
grid.resize(gridstackItems[i], 12)
if (gridstackItems[i].find(".summarycard").hasClass("summarycard")) {
grid.resize(gridstackItems[i], 6);
}
}
grid.batchUpdate();
grid.commit();
}
setTimeout(function() {
for (var i = 0; i < charts.length; i++) {
let chartid = "#" + charts[i].element[0].id
$(chartid).kendoChart(charts[i].options);
}
}, 850)
}
};
//function resizeGrid() {
// var width = document.body.clientWidth;
// var grid = $('.grid-stack').data('gridstack');
// if (width < 700) {
// grid.setColumn(1);
// } else if (width < 850) {
// grid.setColumn(3);
// } else if (width < 950) {
// grid.setColumn(6);
// } else if (width < 1100) {
// grid.setColumn(8);
// } else {
// grid.setColumn(12);
// }
//}
// var resizeId;
//$(window).resize(function () {
// clearTimeout(resizeId);
// resizeId = setTimeout(resizeGrid, 800);
//});
//$(window).resize(function () {
// resizeGrid();
//});
//$(document).ready(function () {
// resizeGrid();
//});
// set the metric to inactive for this user
function DeactivateMetricDefinitionForUser(metricId) {
let params = '{"metricId":"' + metricId + '"}';
$.ajax({
type: "POST",
async: true,
url: "Default.aspx/DeactivateMetricDefinitionForUser",
data: params,
contentType: "application/json; charset=utf-8",
dataType: "JSON",
success: function(response) {},
error: function(response) {
console.log("DeactivateMetricDefinitionForUser failed and returned: " + response);
},
});
};
// find the position for the newly created widget
function GetNewWidgetPosition() {
// get total widgets available
let count = $(".grid-stack").children().length;
// get the rows and columns for the widgets available
let rows = [],
columns = [];
let widgetMatrix = [rows, columns];
let result = {
x: 0,
y: 0
};
if (count > 0) {
// widgets exist
for (let i = 0; i < $(".grid-stack-item").length; i++) {
let row = $(".grid-stack-item").eq(i).attr("data-gs-x");
let column = $(".grid-stack-item").eq(i).attr("data-gs-y");
rows.push(row);
columns.push(column);
}
// get the last x and y values of the last widget
let latestRowUsed = parseInt(widgetMatrix[0].slice(-1)[0]);
let latestColumnUsed = parseInt(widgetMatrix[1].slice(-1)[0]);
// check if there is room on the latest row used
if (latestRowUsed == 9) {
// if there is no room, bump down to row below the last widget
latestRowUsed = 0
// add 6 columns for this new widget
latestColumnUsed = latestColumnUsed + 6;
} else {
// there is room on this row, add 3 rows for the new widget
latestRowUsed = latestRowUsed + 3;
}
// set the x and y properties of the result to be returned
result.x = latestRowUsed;
result.y = latestColumnUsed;
}
return result;
}
function SaveMetricDefinitionForUser(metricId, rowId, columnId) {
$.ajax({
type: "POST",
url: "Default.aspx/SaveMetricDefinitionForUser",
data: JSON.stringify({
metricId: metricId,
rowId: rowId,
columnId: columnId
}),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(response) {},
error: function(response) {
console.log("SaveMetricDefinitionForUser failed and returned: " + response);
},
});
}
</script>
</div>
<div data-bind="component: {name: 'dashboard-grid', params: $data}">
<div class="grid-stack grid-stack-instance-8683 grid-stack-animate" data-bind="foreach: {data: widgets, afterRender: afterAddWidget}" data-gs-current-height="6" style="height: 580px;">
<div class="grid-stack-item ui-draggable ui-resizable ui-resizable-autohide ui-resizable-disabled ui-state-disabled"
data-bind="attr: {'data-gs-x': $data.x, 'data-gs-y': $data.y, 'data-gs-width': $data.widgetWidth, 'data-gs-height': $data.widgetHeight, id:$data.id, 'data-gs-auto-position': $data.auto_position }" data-gs-x="0" data-gs-y="0"
data-gs-width="4" data-gs-height="6" id="divkendoChart14" aria-disabled="true">
<div class="grid-stack-item-content">
<div class="deleteButton" style="z-index:1500; position:absolute; left:93%;" data-bind="click: $root.deleteWidget">X</div>
<div class="loader"></div>
<div data-bind="if: $data.isStatistic"></div>
<div class="block_wrapper" data-bind="if: $data.Chart">
<div class="block chartBlock" style="width: 99%; height:574px; position:relative;">
<div class="loader"></div>
<div class="chart-title linegraph-title">12 Month Moving </div>
<div class="chart k-chart linechart" data-bind="attr: {id: $data.id2}" id="divkendoChart14_1" data-role="chart" style="position: relative; height: 505px;"><svg
style="width: 100%; height: 100%; overflow: hidden; left: 0px; top: -0.75px;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<defs>
<clipPath id="kdef1">
<path d="M35 55 L 479.5 55 479.5 440 35 440Z" stroke="#000" stroke-linejoin="miter" fill="none"></path>
</clipPath>
<clipPath id="kdef2">
<path d="M12 4 L 488 4 488 500 12 500Z" stroke="#000" stroke-linejoin="miter" fill="none"></path>
</clipPath>
</defs>
<g>
<path d="M0 0 L 500 0 500 505 0 505Z" stroke="none" fill="#F8F8F8"></path>
<path d="M35 55 L 479.5 55 479.5 440 35 440Z" stroke="none" fill="#fff" fill-opacity="0"></path>
<g>
<g>
<path d="M75.5 55.5 L 75.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
<path d="M116.5 55.5 L 116.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
<path d="M156.5 55.5 L 156.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
<path d="M197.5 55.5 L 197.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
<path d="M237.5 55.5 L 237.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
<path d="M277.5 55.5 L 277.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
<path d="M318.5 55.5 L 318.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
<path d="M358.5 55.5 L 358.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
<path d="M399.5 55.5 L 399.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
<path d="M439.5 55.5 L 439.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
<path d="M480.5 55.5 L 480.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
</g>
<g>
<path d="M35.5 385.5 L 480.5 385.5" stroke="#dfdfdf" stroke-width="1" fill="none"></path>
<path d="M35.5 330.5 L 480.5 330.5" stroke="#dfdfdf" stroke-width="1" fill="none"></path>
<path d="M35.5 275.5 L 480.5 275.5" stroke="#dfdfdf" stroke-width="1" fill="none"></path>
<path d="M35.5 220.5 L 480.5 220.5" stroke="#dfdfdf" stroke-width="1" fill="none"></path>
<path d="M35.5 165.5 L 480.5 165.5" stroke="#dfdfdf" stroke-width="1" fill="none"></path>
<path d="M35.5 110.5 L 480.5 110.5" stroke="#dfdfdf" stroke-width="1" fill="none"></path>
<path d="M35.5 55.5 L 480.5 55.5" stroke="#dfdfdf" stroke-width="1" fill="none"></path>
</g>
<g>
<g>
<g>
<path d="M35.5 440.5 L 480.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
</g>
</g>
</g>
<g clip-path="url(#kdef1)">
<g clip-path="url(#kdef2)">
<g>
<path
d="M35 440 C 48.456 440 61.953 440 75.409 440 88.865 440 102.362 440 115.818 440 129.274 440 142.771 440 156.227 440 169.683 440 183.18 440 196.636 440 210.093 440 223.589 440 237.045 440 250.502 440 263.998 440 277.455 440 290.911 440 304.407 440 317.864 440 331.32 440 344.816 440 358.273 440 371.729 440 385.226 440 398.682 440 412.138 440 425.635 440 439.091 440 452.547 440 466.044 440 479.5 440 L 479.5 440 35 440"
stroke="none" fill="url(#greenGradient)" fill-opacity="0.4"></path>
<path
d="M35 440 C 48.456 440 61.953 440 75.409 440 88.865 440 102.362 440 115.818 440 129.274 440 142.771 440 156.227 440 169.683 440 183.18 440 196.636 440 210.093 440 223.589 440 237.045 440 250.502 440 263.998 440 277.455 440 290.911 440 304.407 440 317.864 440 331.32 440 344.816 440 358.273 440 371.729 440 385.226 440 398.682 440 412.138 440 425.635 440 439.091 440 452.547 440 466.044 440 479.5 440"
stroke="#03A652" stroke-width="1" stroke-linecap="butt" stroke-opacity="1" fill="none"></path>
</g>
<g>
<path
d="M35 440 C 48.456 440 61.953 440 75.409 440 88.865 440 102.362 440 115.818 440 129.274 440 142.771 440 156.227 440 169.683 440 183.18 440 196.636 440 210.093 440 223.589 440 237.045 440 250.502 440 263.998 440 277.455 440 290.911 440 304.407 440 317.864 440 331.32 440 344.816 440 358.273 440 371.729 440 385.226 440 398.682 440 412.138 440 425.635 440 439.091 440 452.547 440 466.044 440 479.5 440 L 479.5 440 35 440"
stroke="none" fill="url(#blueGradient)" fill-opacity="0.4"></path>
<path
d="M35 440 C 48.456 440 61.953 440 75.409 440 88.865 440 102.362 440 115.818 440 129.274 440 142.771 440 156.227 440 169.683 440 183.18 440 196.636 440 210.093 440 223.589 440 237.045 440 250.502 440 263.998 440 277.455 440 290.911 440 304.407 440 317.864 440 331.32 440 344.816 440 358.273 440 371.729 440 385.226 440 398.682 440 412.138 440 425.635 440 439.091 440 452.547 440 466.044 440 479.5 440"
stroke="#256BDE" stroke-width="0.5" stroke-linecap="butt" stroke-opacity="1" fill="none"></path>
</g>
<g>
<path
d="M35 165 C 48.456 165 61.953 165 75.409 165 88.865 165 102.362 165 115.818 165 129.274 165 142.771 165 156.227 165 169.683 165 183.18 165 196.636 165 210.093 165 223.589 165 237.045 165 250.502 165 263.998 165 277.455 165 290.911 165 304.407 165 317.864 165 331.32 165 344.816 165 358.273 165 371.729 165 385.226 165 398.682 165 412.138 165 425.635 165 439.091 165 452.547 165 466.044 165 479.5 165 L 479.5 440 35 440"
stroke="none" fill="none"></path>
<path
d="M35 165 C 48.456 165 61.953 165 75.409 165 88.865 165 102.362 165 115.818 165 129.274 165 142.771 165 156.227 165 169.683 165 183.18 165 196.636 165 210.093 165 223.589 165 237.045 165 250.502 165 263.998 165 277.455 165 290.911 165 304.407 165 317.864 165 331.32 165 344.816 165 358.273 165 371.729 165 385.226 165 398.682 165 412.138 165 425.635 165 439.091 165 452.547 165 466.044 165 479.5 165"
stroke="red" stroke-width="0.5" stroke-linecap="butt" stroke-opacity="1" fill="none"></path>
</g>
<circle cx="35" cy="440" r="3.75" stroke="url(#greenGradient)" stroke-width="0" stroke-opacity="1" fill="#03A652" fill-opacity="1"></circle>
<circle cx="35" cy="440" r="3.75" stroke="url(#blueGradient)" stroke-width="0" stroke-opacity="1" fill="#256BDE" fill-opacity="1"></circle>
<circle cx="75.409" cy="440" r="3.75" stroke="url(#greenGradient)" stroke-width="0" stroke-opacity="1" fill="#03A652" fill-opacity="1"></circle>
<circle cx="75.409" cy="440" r="3.75" stroke="url(#blueGradient)" stroke-width="0" stroke-opacity="1" fill="#256BDE" fill-opacity="1"></circle>
<circle cx="115.818" cy="440" r="3.75" stroke="url(#greenGradient)" stroke-width="0" stroke-opacity="1" fill="#03A652" fill-opacity="1"></circle>
<circle cx="115.818" cy="440" r="3.75" stroke="url(#blueGradient)" stroke-width="0" stroke-opacity="1" fill="#256BDE" fill-opacity="1"></circle>
<circle cx="156.227" cy="440" r="3.75" stroke="url(#greenGradient)" stroke-width="0" stroke-opacity="1" fill="#03A652" fill-opacity="1"></circle>
<circle cx="156.227" cy="440" r="3.75" stroke="url(#blueGradient)" stroke-width="0" stroke-opacity="1" fill="#256BDE" fill-opacity="1"></circle>
<circle cx="196.636" cy="440" r="3.75" stroke="url(#greenGradient)" stroke-width="0" stroke-opacity="1" fill="#03A652" fill-opacity="1"></circle>
<circle cx="196.636" cy="440" r="3.75" stroke="url(#blueGradient)" stroke-width="0" stroke-opacity="1" fill="#256BDE" fill-opacity="1"></circle>
<circle cx="237.045" cy="440" r="3.75" stroke="url(#greenGradient)" stroke-width="0" stroke-opacity="1" fill="#03A652" fill-opacity="1"></circle>
<circle cx="237.045" cy="440" r="3.75" stroke="url(#blueGradient)" stroke-width="0" stroke-opacity="1" fill="#256BDE" fill-opacity="1"></circle>
<circle cx="277.455" cy="440" r="3.75" stroke="url(#greenGradient)" stroke-width="0" stroke-opacity="1" fill="#03A652" fill-opacity="1"></circle>
<circle cx="277.455" cy="440" r="3.75" stroke="url(#blueGradient)" stroke-width="0" stroke-opacity="1" fill="#256BDE" fill-opacity="1"></circle>
<circle cx="317.864" cy="440" r="3.75" stroke="url(#greenGradient)" stroke-width="0" stroke-opacity="1" fill="#03A652" fill-opacity="1"></circle>
<circle cx="317.864" cy="440" r="3.75" stroke="url(#blueGradient)" stroke-width="0" stroke-opacity="1" fill="#256BDE" fill-opacity="1"></circle>
<circle cx="358.273" cy="440" r="3.75" stroke="url(#greenGradient)" stroke-width="0" stroke-opacity="1" fill="#03A652" fill-opacity="1"></circle>
<circle cx="358.273" cy="440" r="3.75" stroke="url(#blueGradient)" stroke-width="0" stroke-opacity="1" fill="#256BDE" fill-opacity="1"></circle>
<circle cx="398.682" cy="440" r="3.75" stroke="url(#greenGradient)" stroke-width="0" stroke-opacity="1" fill="#03A652" fill-opacity="1"></circle>
<circle cx="398.682" cy="440" r="3.75" stroke="url(#blueGradient)" stroke-width="0" stroke-opacity="1" fill="#256BDE" fill-opacity="1"></circle>
<circle cx="439.091" cy="440" r="3.75" stroke="url(#greenGradient)" stroke-width="0" stroke-opacity="1" fill="#03A652" fill-opacity="1"></circle>
<circle cx="439.091" cy="440" r="3.75" stroke="url(#blueGradient)" stroke-width="0" stroke-opacity="1" fill="#256BDE" fill-opacity="1"></circle>
<circle cx="479.5" cy="440" r="3.75" stroke="url(#greenGradient)" stroke-width="0" stroke-opacity="1" fill="#03A652" fill-opacity="1"></circle>
<circle cx="479.5" cy="440" r="3.75" stroke="url(#blueGradient)" stroke-width="0" stroke-opacity="1" fill="#256BDE" fill-opacity="1"></circle>
</g>
</g>
<g><text style="font:11px Helvetica;white-space:pre;" x="25" y="467" stroke="none" fill="#3E3E58" fill-opacity="1">Nov</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="65.40899999999999" y="467" stroke="none" fill="#3E3E58" fill-opacity="1">Dec</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="106.818" y="467" stroke="none" fill="#3E3E58" fill-opacity="1">Jan</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="146.727" y="467" stroke="none" fill="#3E3E58" fill-opacity="1">Feb</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="187.136" y="467" stroke="none" fill="#3E3E58" fill-opacity="1">Mar</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="228.545" y="467" stroke="none" fill="#3E3E58" fill-opacity="1">Apr</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="266.95500000000004" y="467" stroke="none" fill="#3E3E58" fill-opacity="1">May</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="308.864" y="467" stroke="none" fill="#3E3E58" fill-opacity="1">Jun</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="351.273" y="467" stroke="none" fill="#3E3E58" fill-opacity="1">Jul</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="388.682" y="467" stroke="none" fill="#3E3E58" fill-opacity="1">Aug</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="429.091" y="467" stroke="none" fill="#3E3E58" fill-opacity="1">Sep</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="471" y="467" stroke="none" fill="#3E3E58" fill-opacity="1">Oct</text></g>
<g>
<g>
<path d="M35.5 55.5 L 35.5 440.5" stroke="#B8B8B8" stroke-width="1" fill="none"></path>
</g>
</g>
<g><text style="font:11px Helvetica;white-space:pre;" x="12" y="444" stroke="none" fill="#3E3E58" fill-opacity="1">0</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="12" y="389" stroke="none" fill="#3E3E58" fill-opacity="1">1</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="12" y="334" stroke="none" fill="#3E3E58" fill-opacity="1">2</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="12" y="279" stroke="none" fill="#3E3E58" fill-opacity="1">3</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="12" y="224" stroke="none" fill="#3E3E58" fill-opacity="1">4</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="12" y="169" stroke="none" fill="#3E3E58" fill-opacity="1">5</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="12" y="114" stroke="none" fill="#3E3E58" fill-opacity="1">6</text></g>
<g><text style="font:11px Helvetica;white-space:pre;" x="12" y="59" stroke="none" fill="#3E3E58" fill-opacity="1">7</text></g>
<g>
<path d="M35 154 L 45 154" stroke="none" fill="none"></path>
<circle cx="122.5" cy="154" r="76.5" stroke="#8e8e8e" stroke-width="1" fill="none"></circle>
<g><text style="font:12px Arial, Helvetica, sans-serif;white-space:pre;" x="49" y="158" stroke="none" fill="red" fill-opacity="1">Industry Standard is 5 Days</text></g>
</g>
</g>
<g>
<g><text style="font:16px Helvetica;white-space:pre;" x="22" y="28" stroke="none" fill="#3E3E58" fill-opacity="1">Average Business Cycle Time - Automobile</text></g>
</g>
<g></g>
<g>
<g>
<g transform="matrix(1,0,0,1,21.5,479)">
<path d="M0 4 L 15 4 15 7 0 7Z" stroke="url(#greenGradient)" stroke-width="0" fill="url(#greenGradient)"></path>
<g><text style="font:10px Helvetica;white-space:pre;" x="26" y="9" stroke="none" fill="#3E3E58" fill-opacity="1">Nov 2021 - Oct 2022</text></g>
<path style="cursor:pointer;" d="M0 0 L 118 0 118 11 0 11Z" stroke="none" fill="#fff" fill-opacity="0"></path>
</g>
<g transform="matrix(1,0,0,1,199.5,479)">
<path d="M0 4 L 15 4 15 7 0 7Z" stroke="url(#blueGradient)" stroke-width="0" fill="url(#blueGradient)"></path>
<g><text style="font:10px Helvetica;white-space:pre;" x="26" y="9" stroke="none" fill="#3E3E58" fill-opacity="1">Nov 2020 - Oct 2021</text></g>
<path style="cursor:pointer;" d="M0 0 L 118 0 118 11 0 11Z" stroke="none" fill="#fff" fill-opacity="0"></path>
</g>
<g transform="matrix(1,0,0,1,377.5,479)">
<path d="M0 4 L 15 4 15 7 0 7Z" stroke="none" fill="none"></path>
<g><text style="font:10px Helvetica;white-space:pre;" x="26" y="9" stroke="none" fill="#3E3E58" fill-opacity="1">Industry Average</text></g>
<path style="cursor:pointer;" d="M0 0 L 101 0 101 11 0 11Z" stroke="none" fill="#fff" fill-opacity="0"></path>
</g>
</g>
</g>
<g></g>
</g>
</svg></div>
<div class="table-wraper" data-bind="if: needTable">
<div class="datatable k-grid k-widget k-display-block gridforlinechart" data-bind="attr: {id: $data.tableId}" id="divkendoChart14_1_3" data-role="grid" style="">
<div class="k-grid-header" style="padding-right: 0px;">
<div class="k-grid-header-wrap k-auto-scrollable">
<table role="grid">
<colgroup>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
</colgroup>
<thead role="rowgroup">
<tr role="row">
<th scope="col" role="columnheader" data-field="blank" aria-haspopup="true" rowspan="1" data-title=" " data-index="0" id="2503eca3-8a87-45a8-bd33-5ba827e5ec90" class="k-header"> </th>
<th scope="col" role="columnheader" data-field="month1" aria-haspopup="true" rowspan="1" data-title="Nov" data-index="1" id="ace09d81-8784-4aad-8cc2-f54bd9936071" class="k-header">Nov</th>
<th scope="col" role="columnheader" data-field="month2" aria-haspopup="true" rowspan="1" data-title="Dec" data-index="2" id="5597dab4-54d8-4269-a73f-774a9e126001" class="k-header">Dec</th>
<th scope="col" role="columnheader" data-field="month3" aria-haspopup="true" rowspan="1" data-title="Jan" data-index="3" id="84742754-cc59-4859-bb04-99efb049b035" class="k-header">Jan</th>
<th scope="col" role="columnheader" data-field="month4" aria-haspopup="true" rowspan="1" data-title="Feb" data-index="4" id="8399fc0a-8fe5-4c36-9c11-f47d0a2b071f" class="k-header">Feb</th>
<th scope="col" role="columnheader" data-field="month5" aria-haspopup="true" rowspan="1" data-title="Mar" data-index="5" id="db383066-4185-43ed-8130-f4222c6b27e0" class="k-header">Mar</th>
<th scope="col" role="columnheader" data-field="month6" aria-haspopup="true" rowspan="1" data-title="Apr" data-index="6" id="16be3911-0402-4fcb-924e-52eb9fa78949" class="k-header">Apr</th>
<th scope="col" role="columnheader" data-field="month7" aria-haspopup="true" rowspan="1" data-title="May" data-index="7" id="6900a845-2cad-4549-8116-6e44f60c89c5" class="k-header">May</th>
<th scope="col" role="columnheader" data-field="month8" aria-haspopup="true" rowspan="1" data-title="Jun" data-index="8" id="3ae2e3be-7f33-471d-aab8-ae1afa77206f" class="k-header">Jun</th>
<th scope="col" role="columnheader" data-field="month9" aria-haspopup="true" rowspan="1" data-title="Jul" data-index="9" id="177553e0-4586-4f2b-9e04-f47048146e04" class="k-header">Jul</th>
<th scope="col" role="columnheader" data-field="month10" aria-haspopup="true" rowspan="1" data-title="Aug" data-index="10" id="104c08d7-0afe-487d-ac81-5c6e543ce2ca" class="k-header">Aug</th>
<th scope="col" role="columnheader" data-field="month11" aria-haspopup="true" rowspan="1" data-title="Sep" data-index="11" id="115791c3-f097-4a8a-8e5b-cdc183301a32" class="k-header">Sep</th>
<th scope="col" role="columnheader" data-field="month12" aria-haspopup="true" rowspan="1" data-title="Oct" data-index="12" id="007db191-afac-4b15-bacc-689fe3fbec5c" class="k-header">Oct</th>
</tr>
</thead>
</table>
</div>
</div>
<div class="k-grid-content k-auto-scrollable">
<table role="grid">
<colgroup>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
<col>
</colgroup>
<tbody role="rowgroup">
<tr data-uid="4536c039-f0f4-4695-a0f1-e805053b4cf1" role="row">
<td class="" role="gridcell">Prior</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
</tr>
<tr class="k-alt" data-uid="271d2882-618d-418a-aa2c-1cfef7b38a2a" role="row">
<td class="" role="gridcell">Last</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
<td class="" role="gridcell">0</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="scale" data-bind="text: scaleDescrpiton">*** This Table is on a 1 x 1 scale</div>
</div>
</div>
</div>
</div>
<div class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se" style="z-index: 90; display: none;"></div>
</div>
<div class="grid-stack-item ui-draggable ui-resizable ui-resizable-autohide ui-resizable-disabled ui-state-disabled"
data-bind="attr: {'data-gs-x': $data.x, 'data-gs-y': $data.y, 'data-gs-width': $data.widgetWidth, 'data-gs-height': $data.widgetHeight, id:$data.id, 'data-gs-auto-position': $data.auto_position }" data-gs-x="4" data-gs-y="0"
data-gs-width="2" data-gs-height="3" id="divkendoChart8" aria-disabled="true">
<div class="grid-stack-item-content">
<div class="deleteButton" style="z-index:1500; position:absolute; left:93%;" data-bind="click: $root.deleteWidget">X</div>
<div data-bind="if: $data.isStatistic">
<div class="summarycard widget" style="width: 99%; height: 275.5px;">
<h1 data-bind="text: $data.title">Average Business Cycle Time - Automobile</h1>
<h2 class="summarycard-statistic1-header1"> <span class="summarycard-statistic-bold"> <span data-bind="text: $data.unit"></span> <span id="stat1" data-bind="text: $data.summarydata1">0</span> <span
data-bind="text: $data.unitafter">Days</span> </span> <span class="timeperiodname" data-bind="text: $data.timeperiodname1">Nov 2022 MTD</span> </h2>
<h2 class="summarycard-statistic2-header2"> <span class="summarycard-statistic-bold"> <span data-bind="text: $data.unit"></span> <span id="stat2" data-bind="text: $data.summarydata2">0</span> <span
data-bind="text: $data.unitafter">Days</span> </span> <span class="timeperiodname" data-bind="text: $data.timeperiodname2">Oct 2022</span> </h2>
<div class="summarycard-description-dollarchange summarycard-description-precentage" data-bind="style: {color: displaycolor}" style="color: black;"> </div>
<p class="summarycard-description-precentage" data-bind="style: {color: displaycolor}" style="color: black;"><i class="material-icons" data-bind="text: statisticIcon; style: {color: displaycolor}"></i> <span class="datachange"
data-bind="text: $data.change"></span> <span data-bind="text: $data.precentagechangestring">No change</span> </p>
</div>
</div>
<div class="block_wrapper" data-bind="if: $data.Chart"></div>
</div>
<div class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se" style="z-index: 90; display: none;"></div>
</div>
<div class="grid-stack-item ui-draggable ui-resizable ui-resizable-autohide ui-resizable-disabled ui-state-disabled"
data-bind="attr: {'data-gs-x': $data.x, 'data-gs-y': $data.y, 'data-gs-width': $data.widgetWidth, 'data-gs-height': $data.widgetHeight, id:$data.id, 'data-gs-auto-position': $data.auto_position }" data-gs-x="6" data-gs-y="0"
data-gs-width="2" data-gs-height="3" id="divkendoChart5" aria-disabled="true">
<div class="grid-stack-item-content">
<div class="deleteButton" style="z-index:1500; position:absolute; left:93%;" data-bind="click: $root.deleteWidget">X</div>
<div data-bind="if: $data.isStatistic">
<div class="summarycard widget" style="width: 99%; height: 275.5px;">
<h1 data-bind="text: $data.title">Appraisal Count</h1>
<h2 class="summarycard-statistic1-header1"> <span class="summarycard-statistic-bold"> <span data-bind="text: $data.unit"></span> <span id="stat1" data-bind="text: $data.summarydata1">0</span> <span
data-bind="text: $data.unitafter"></span> </span> <span class="timeperiodname" data-bind="text: $data.timeperiodname1">Nov 2022 MTD</span> </h2>
<h2 class="summarycard-statistic2-header2"> <span class="summarycard-statistic-bold"> <span data-bind="text: $data.unit"></span> <span id="stat2" data-bind="text: $data.summarydata2">0</span> <span
data-bind="text: $data.unitafter"></span> </span> <span class="timeperiodname" data-bind="text: $data.timeperiodname2">Oct 2022</span> </h2>
<div class="summarycard-description-dollarchange summarycard-description-precentage" data-bind="style: {color: displaycolor}" style="color: black;"> </div>
<p class="summarycard-description-precentage" data-bind="style: {color: displaycolor}" style="color: black;"><i class="material-icons" data-bind="text: statisticIcon; style: {color: displaycolor}"></i> <span class="datachange"
data-bind="text: $data.change"></span> <span data-bind="text: $data.precentagechangestring">No change</span> </p>
</div>
</div>
<div class="block_wrapper" data-bind="if: $data.Chart"></div>
</div>
<div class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se" style="z-index: 90; display: none;"></div>
</div>
<div class="grid-stack-item ui-draggable ui-resizable ui-resizable-autohide ui-resizable-disabled ui-state-disabled"
data-bind="attr: {'data-gs-x': $data.x, 'data-gs-y': $data.y, 'data-gs-width': $data.widgetWidth, 'data-gs-height': $data.widgetHeight, id:$data.id, 'data-gs-auto-position': $data.auto_position }" data-gs-x="6" data-gs-y="3"
data-gs-width="2" data-gs-height="3" id="divkendoChart6" aria-disabled="true">
<div class="grid-stack-item-content">
<div class="deleteButton" style="z-index:1500; position:absolute; left:93%;" data-bind="click: $root.deleteWidget">X</div>
<div data-bind="if: $data.isStatistic">
<div class="summarycard widget" style="width: 99%; height: 275.5px;">
<h1 data-bind="text: $data.title">Supplement Count</h1>
<h2 class="summarycard-statistic1-header1"> <span class="summarycard-statistic-bold"> <span data-bind="text: $data.unit"></span> <span id="stat1" data-bind="text: $data.summarydata1">0</span> <span
data-bind="text: $data.unitafter"></span> </span> <span class="timeperiodname" data-bind="text: $data.timeperiodname1">Nov 2022 MTD</span> </h2>
<h2 class="summarycard-statistic2-header2"> <span class="summarycard-statistic-bold"> <span data-bind="text: $data.unit"></span> <span id="stat2" data-bind="text: $data.summarydata2">0</span> <span
data-bind="text: $data.unitafter"></span> </span> <span class="timeperiodname" data-bind="text: $data.timeperiodname2">Oct 2022</span> </h2>
<div class="summarycard-description-dollarchange summarycard-description-precentage" data-bind="style: {color: displaycolor}" style="color: black;"> </div>
<p class="summarycard-description-precentage" data-bind="style: {color: displaycolor}" style="color: black;"><i class="material-icons" data-bind="text: statisticIcon; style: {color: displaycolor}"></i> <span class="datachange"
data-bind="text: $data.change"></span> <span data-bind="text: $data.precentagechangestring">No change</span> </p>
</div>
</div>
<div class="block_wrapper" data-bind="if: $data.Chart"></div>
</div>
<div class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se" style="z-index: 90; display: none;"></div>
</div>
</div>
</div>
<div id="dvUpdatedWrapper"></div>
<div id="dvKendoChart_1"></div>
<script type="text/javascript">
// register kendo component
// https://knockoutjs.com/documentation/component-registration.html
ko.components.register('dashboard-grid', {
viewModel: {
createViewModel: function(controller, componentInfo) {
var ViewModel = function(controller, componentInfo) { /// controller is an object whose key/value pairs are the parameters
var grid = null; /// componentInfo is the element the component is being injected to /// when the create viewModel gets called the template will have already been injected into this element just not yet data bound.
this.widgets = controller.widgets;
this.afterAddWidget = function(items) {
if (grid == null) {
grid = $(componentInfo.element).find('.grid-stack').gridstack({ /// the jquery gridstack config
auto: false,
animate: true,
disableResize: true,
float: true,
}).data('gridstack');
grid.batchUpdate();
}
var item = items.find(function(i) {
return i.nodeType == 1
});
grid.addWidget(item);
ko.utils.domNodeDisposal.addDisposeCallback(item, function() {
grid.removeWidget(item);
});
};
};
return new ViewModel(controller, componentInfo);
}
},
// custom template
// https://knockoutjs.com/documentation/component-overview.html
template: /// the ui template of the charts are defined here. more of the details are defined in the controller
['<div class="grid-stack" data-bind="foreach: {data: widgets, afterRender: afterAddWidget}">',
' <div class="grid-stack-item" data-bind="attr: {\'data-gs-x\': $data.x, \'data-gs-y\': $data.y, \'data-gs-width\': $data.widgetWidth, \'data-gs-height\': $data.widgetHeight, id:$data.id, \'data-gs-auto-position\': $data.auto_position }">',
' <div class="grid-stack-item-content">', ' <div class="deleteButton" style="z-index:1500; position:absolute; left:93%;" data-bind="click: $root.deleteWidget">X</div>', ' <div class="loader"></div>',
' <div data-bind="if: $data.isStatistic">', ' <div class="summarycard widget" style="width: 99%; height: 275.5px;">', ' <h1 data-bind="text: $data.title"> Metric Title Here </h1>',
' <h2 class="summarycard-statistic1-header1"> <span class="summarycard-statistic-bold"> <span data-bind="text: $data.unit"></span> <span id="stat1" data-bind="text: $data.summarydata1">2.5</span> <span data-bind="text: $data.unitafter"> </span> </span> <span class="timeperiodname" data-bind="text: $data.timeperiodname1">for selected time </span> </h2>',
' <h2 class="summarycard-statistic2-header2"> <span class="summarycard-statistic-bold"> <span data-bind="text: $data.unit"></span> <span id="stat2" data-bind="text: $data.summarydata2">2.2</span> <span data-bind="text: $data.unitafter"> </span> </span> <span class="timeperiodname" data-bind="text: $data.timeperiodname2">for 2nd selected </span> </h2>',
' <div class="summarycard-description-dollarchange summarycard-description-precentage" data-bind="style: {color: displaycolor}"> </div>',
' <p class="summarycard-description-precentage" data-bind="style: {color: displaycolor}"><i class="material-icons" data-bind="text: statisticIcon; style: {color: displaycolor}"> </i> <span class="datachange" data-bind="text: $data.change"> </span> <span data-bind="text: $data.precentagechangestring"> 00%</span> </p>',
' </div>', ' </div>', ' <div class="block_wrapper" data-bind="if: $data.Chart">', ' <div class="block chartBlock" style="width: 99%; height:574px; position:relative;">',
' <div class="loader"></div>', ' <div class="chart-title" >12 Month Moving </div>', ' <div class="chart" data-bind="attr: {id: $data.id2}"></div>',
' <div class="table-wraper" data-bind="if: needTable">', ' <div class="datatable" data-bind="attr: {id: $data.tableId}"></div>',
' <div class="scale" data-bind="text: scaleDescrpiton">', ' </div>', ' </div>', ' </div>', ' </div>', ' </div>', ' </div>', '</div> '
].join('')
});
var Controller = function(widgets) { /// this is the controller object that was passed into the knockOut.js config
var self = this;
// widget binding
// https://knockoutjs.com/documentation/template-binding.html
this.widgets = ko.observableArray(widgets);
// function to create a new widget
this.addNewWidget = function(id, isNew, isChart, RowId, ColumnId) {
let = numID = id.replace("divkendoChart", "");
$(".liAddWidget#" + numID).addClass("disabled");
let id2 = id + "_1";
let tableId = id2 + "_3"; // id for all tables that will be used to build kendo
let auto_position = false;
// need to check if adding a new widget or if widget is being loaded on page load
// if it's newly added it gets a position here.
let position = {};
if (RowId == undefined && ColumnId == undefined) {
auto_position = true;
let position = GetNewWidgetPosition();
RowId = position.x;
ColumnId = position.y;
SaveMetricDefinitionForUser(numID, RowId, ColumnId)
}
let widgetHeight;
let widgetWidth
let scaleDescrpiton = "";
let needTable = false;
let isStatistic = null;
if (isChart == false) {
isStatistic = true; //intialize for summary
widgetHeight = 3;
widgetWidth = 2;
if (window.outerWidth >= 1000 && window.outerWidth <= 1500) {
widgetWidth = 6;
}
if (window.outerWidth <= 1000) {
widgetWidth = 12;
}
}
if (isChart == true) {
// it will be a chart widget
widgetHeight = 6;
widgetWidth = 4;
needTable = true;
if (window.outerWidth >= 1000 && window.outerWidth <= 1500) {
widgetWidth = 6;
}
if (window.outerWidth <= 1000) {
widgetWidth = 12;
}
//if (data.seriesDefaults.type == "bar" && data.seriesDefaults.stack == undefined || data.seriesDefaults.type == "line") {
// needTable = true;
//}
//// scale for column graph
//if (data.seriesDefaults.type == "bar" && data.seriesDefaults.stack == undefined ) {
// scaleDescrpiton = "***This Table is on a 1 x 1,000 scale";
//}
//if (data.seriesDefaults.type == "area") { // check if id belongs to line graph
// needTable = true;
// scaleDescrpiton = "*** This Table is on a 1 x 1 scale";
//}
//if (data.seriesDefaults.stack !== undefined) { // check if id belongs to a stacked graph and change the sacle description to none
// scaleDescrpiton = "";
// needTable = false;
//}
}
this.widgets.push({
x: RowId,
y: ColumnId,
id: id,
id2: id2,
tableId: tableId,
auto_position: auto_position,
class: "widget-icon pull-left themed-background2 animation-fadeIn",
widgetHeight: widgetHeight,
widgetWidth: widgetWidth,
isStatistic: ko.observable(isStatistic),
Chart: ko.observable(isChart),
needTable: ko.observable(needTable),
scaleDescrpiton: ko.observable(scaleDescrpiton),
title: ko.observable(""),
unit: ko.observable(""),
unitafter: ko.observable(""),
timeperiodname1: ko.observable(""),
timeperiodname2: ko.observable(""),
summarydata1: ko.observable(""),
summarydata2: ko.observable(""),
precentagechangestring: ko.observable(""),
statisticIcon: ko.observable(""),
change: ko.observable(""),
displaycolor: ko.observable("black"),
});
$(".dropdown.positionInViewport").removeClass("expanded").addClass("collapsed");
return false;
};
this.deleteWidget = function(item) {
let metricId = item.id.replace("divkendoChart", "");
DeactivateMetricDefinitionForUser(metricId);
self.widgets.remove(item);
let liElementMetricId = "#" + metricId;
$(liElementMetricId).removeClass("disabled");
return false;
};
this.addNewSummary = function(data) {
let title = data.title;
let unit = "";
let unitafter = "";
let summarydata1 = "";
let summarydata2 = "";
let precentagechangestring = "";
let statisticIcon = "";
let change = "";
let displaycolor = "black";
let id = "#divkendoChart" + data.MetricId
let stat1 = data.series[0].Data;
let stat2 = data.series[1].Data;
$(id).find(".loader").remove()
if (stat1 > stat2) {
statisticIcon = "trending_up";
}
if (stat1 < stat2) {
statisticIcon = "trending_down";
}
if (data.title.includes('Average Supplement') || data.title.includes('Average Appraisal')) {
unit = "$";
}
if (data.title.includes('Time')) {
unit = "";
unitafter = "Days";
}
if (data.title.includes('Average Percent') || data.title.includes('Dollars Percent')) {
unitafter = "%";
}
if (data.title.includes('Appraisal Count') && data.title.includes("vs Appraisal Count") !== true) {
unit = "";
unitafter = "";
}
if (data.title.includes('Average Refinish Hours')) {
unit = "";
unitafter = "Hours";
}
if (data.title.includes('Supplement vs Appraisal Count')) {
unitafter = "%";
unit = "";
}
let changeWoutCommas = Math.floor(data.series[0].Data) - Math.floor(data.series[1].Data)
// determine the display color of the increase / decrease
if (changeWoutCommas > 0) {
displaycolor = "green";
}
if (changeWoutCommas < 0) {
displaycolor = "red";
}
// TO prevent 0 from appearing on the card when there is no change
change = changeWoutCommas.toLocaleString().toString();
if (change == 0) {
change = "";
}
// inputs the two numbers that display on the summary cards and accounts for nulls
if (data.series[0].Data == null || data.series[0].Data.toFixed(2) == "0.00") {
summarydata1 = "0";
} else {
summarydata1 = Number(data.series[0].Data).toLocaleString('en', {
minimumFractionDigits: 2,
maximumFractionDigits: 2
})
}
if (data.series[1].Data == null || data.series[1].Data.toFixed(2) == "0.00") {
summarydata2 = "0"
} else {
summarydata2 = Number(data.series[1].Data).toLocaleString('en', {
minimumFractionDigits: 2,
maximumFractionDigits: 2
})
}
/// this next part will determine the precentage increase / decrease on the summary cards
let firstValue = Math.round(data.series[1].Data);
let nextValue = Math.round(data.series[0].Data);
let difference = nextValue - firstValue;
let precentagechange = (difference / firstValue) * 100;
let precentagechangeroundeddown = Math.round(precentagechange);
if (Math.sign(difference) == 1) {
precentagechangestring = '(' + precentagechangeroundeddown.toLocaleString().toString() + '%)'
}
if (Math.sign(difference) == -1) {
let precentagechangeroundeddown = Math.round(-1 * precentagechange)
precentagechangestring = '(' + precentagechangeroundeddown.toLocaleString().toString() + '%)'
}
if (nextValue == 0 && firstValue >= 1) {
let precentagechangeroundeddown = Math.round(precentagechange);
precentagechangestring = '(' + precentagechangeroundeddown.toLocaleString().toString() + '%)'
}
if (firstValue == 0 && nextValue >= 1) {
let precentagechangeroundeddown = Math.round(precentagechange);
precentagechangestring = '(' + precentagechangeroundeddown.toLocaleString().toString() + '%)'
}
if (firstValue == nextValue) {
precentagechangestring = "No change"
statisticIcon = "";
change = "";
}
let widgetArray = self.widgets();
let addToWidget = widgetArray.find(obj => {
return obj.id == "divkendoChart" + data.MetricId
})
addToWidget.title(title);
addToWidget.change(change);
addToWidget.unit(unit);
addToWidget.unitafter(unitafter);
addToWidget.timeperiodname1(data.series[0].Name.Group);
addToWidget.timeperiodname2(data.series[1].Name.Group);
addToWidget.summarydata1(summarydata1);
addToWidget.summarydata2(summarydata2);
addToWidget.precentagechangestring(precentagechangestring);
addToWidget.statisticIcon(statisticIcon);
addToWidget.displaycolor(displaycolor);
}
};
var widgets = [];
var controller = new Controller(widgets);
ko.applyBindings(controller);
$('#add-new-widget').click(function(e) {
e.preventDefault();
e.stopPropagation();
if ($(".dropdown.positionInViewport").hasClass("collapsed")) {
$(".dropdown.positionInViewport").removeClass("collapsed").addClass("expanded");
} else {
$(".dropdown.positionInViewport").removeClass("expanded").addClass("collapsed");
}
});
$('html').click(function() {
$(".dropdown.positionInViewport").removeClass("expanded").addClass("collapsed");
});
$(".liAddWidget").click(function(e) {
let metID = Number($(this)[0].id);
if ($(this).attr("data-type") != "Summary") {
BuildWidgetElement(true, null, null, true, metID);
getMetricData(metID, true);
} else {
BuildWidgetElement(true, null, null, false, metID);
getMetricData(metID, false);
}
});
function updateChartData(metricData) {
// if this is undefined then it's a chart.
if (metricData.seriesDefaults !== undefined) {
// round all of the data to get rid of decimals that make the data look bad for the tables in the cycle time graphs
let seriesData1Rounded = roundData(0, metricData)
let seriesData2Rounded = roundData(1, metricData)
// scale the other data to a 1 x 10,000 scale so that the content nicely fits in the table cells
let scaledGraphData1 = [];
var v;
for (v = 0; v < metricData.series[0].data.length; v++) {
if (metricData.series[0].data[v] == "0" || metricData.series[0].data[v] == null) {
scaledGraphData1.push("0")
} else {
let scaledData = (metricData.series[0].data[v] / 1000)
let scaledDataRounded = scaledData.toFixed(1)
if (scaledDataRounded == 0.00) {
scaledDataRounded = 0;
scaledGraphData1.push(scaledDataRounded);
} else {
scaledDataRounded = scaledDataRounded + "K"
scaledGraphData1.push(scaledDataRounded);
}
}
}
// scale the other data to a 1 x 10,000 scale so that the content nicely fits in the table cells
let scaledGraphData2 = [];
var v;
for (v = 0; v < metricData.series[1].data.length; v++) {
if (metricData.series[1].data[v] == "0" || metricData.series[1].data[v] == null) {
scaledGraphData2.push("0")
} else {
let scaledData = (metricData.series[1].data[v] / 1000)
let scaledDataRounded = scaledData.toFixed(1)
if (scaledDataRounded == 0.00) {
scaledDataRounded = 0;
scaledGraphData2.push(scaledDataRounded);
} else {
scaledDataRounded = scaledDataRounded + "K"
scaledGraphData2.push(scaledDataRounded);
}
}
}
let charts = [];
for (let i = 0; i < $(".k-chart").length; i++) {
charts.push($(".k-chart").eq(i).data("kendoChart"));
}
for (let i = 0; i < charts.length; i++) { // start redrawing the charts on the correct cards
if (charts[i].options.title.text == metricData.title.text) {
metricData.series[0].name = metricData.series[0].name.replace(/'/g, "");
metricData.series[1].name = metricData.series[1].name.replace(/'/g, "20");
if (metricData.seriesDefaults.stack !== undefined) { //checks for columns graphs that are stacked to 100%
metricData.series[0].stack = metricData.series[0].stack.replace(/'/g, "");
metricData.series[1].stack = metricData.series[1].stack.replace(/'/g, "");
metricData.series[2].stack = metricData.series[2].stack.replace(/'/g, "");
metricData.series[3].stack = metricData.series[3].stack.replace(/'/g, "20");
metricData.series[4].stack = metricData.series[4].stack.replace(/'/g, "20");
metricData.series[5].stack = metricData.series[5].stack.replace(/'/g, "20");
}
let chartid = "#" + charts[i].element[0].id
$(chartid).kendoChart(metricData);
if (metricData.seriesDefaults.type == "bar" && metricData.seriesDefaults.stack == undefined && charts[i].options.seriesDefaults.type == "bar" && charts[i].seriesDefaults.stack == undefined) {
let tableId = "#" + charts[i].element[0].id + "_3";
$(tableId).kendoGrid({
dataSource: [{
blank: "Prior", //
month1: scaledGraphData1[0],
month2: scaledGraphData1[1],
month3: scaledGraphData1[2],
month4: scaledGraphData1[3],
month5: scaledGraphData1[4],
month6: scaledGraphData1[5],
month7: scaledGraphData1[6],
month8: scaledGraphData1[7],
month9: scaledGraphData1[8],
month10: scaledGraphData1[9],
month11: scaledGraphData1[10],
month12: scaledGraphData1[11],
}, {
blank: "Last",
month1: scaledGraphData2[0],
month2: scaledGraphData2[1],
month3: scaledGraphData2[2],
month4: scaledGraphData2[3],
month5: scaledGraphData2[4],
month6: scaledGraphData2[5],
month7: scaledGraphData2[6],
month8: scaledGraphData2[7],
month9: scaledGraphData2[8],
month10: scaledGraphData2[9],
month11: scaledGraphData2[10],
month12: scaledGraphData2[11],
}],
});
var grid = $(tableId).data("kendoGrid");
grid.refresh();
}
if (metricData.seriesDefaults.type == "area" && charts[i].options.seriesDefaults.type == "area") {
let tableId = "#" + charts[i].element[0].id + "_3";
$(tableId).kendoGrid({
dataSource: [{
blank: "Prior", //
month1: seriesData1Rounded[0],
month2: seriesData1Rounded[1],
month3: seriesData1Rounded[2],
month4: seriesData1Rounded[3],
month5: seriesData1Rounded[4],
month6: seriesData1Rounded[5],
month7: seriesData1Rounded[6],
month8: seriesData1Rounded[7],
month9: seriesData1Rounded[8],
month10: seriesData1Rounded[9],
month11: seriesData1Rounded[10],
month12: seriesData1Rounded[11],
}, {
blank: "Last",
month1: seriesData2Rounded[0],
month2: seriesData2Rounded[1],
month3: seriesData2Rounded[2],
month4: seriesData2Rounded[3],
month5: seriesData2Rounded[4],
month6: seriesData2Rounded[5],
month7: seriesData2Rounded[6],
month8: seriesData2Rounded[7],
month9: seriesData2Rounded[8],
month10: seriesData2Rounded[9],
month11: seriesData2Rounded[10],
month12: seriesData2Rounded[11],
}],
});
var grid = $(tableId).data("kendoGrid");
grid.refresh();
}
}
} //end of 4 loop
} else if (metricData.type == "Summary") {
var i;
for (i = 0; i < controller.widgets().length; i++) {
if (controller.widgets()[i].title() == metricData.title) {
controller.widgets()[i].timeperiodname1(metricData.series[0].Name.Group);
controller.widgets()[i].timeperiodname2(metricData.series[1].Name.Group);
//controller.widgets()[i].summarydata1(Math.round(metricData.series[0].Data));
//controller.widgets()[i].
(Math.round(metricData.series[1].Data));
if (metricData.series[0].Data == null || metricData.series[0].Data.toFixed(2) == "0.00") {
controller.widgets()[i].summarydata1("0");
} else {
controller.widgets()[i].summarydata1(Number(metricData.series[0].Data).toLocaleString('en', {
minimumFractionDigits: 2,
maximumFractionDigits: 2
}));
}
if (metricData.series[1].Data == null || metricData.series[1].Data.toFixed(2) == "0.00") {
controller.widgets()[i].summarydata2("0");
} else {
controller.widgets()[i].summarydata2(Number(metricData.series[1].Data).toLocaleString('en', {
minimumFractionDigits: 2,
maximumFractionDigits: 2
}));
}
let firstValue = Math.round(metricData.series[1].Data);
let nextValue = Math.round(metricData.series[0].Data);
let difference = nextValue - firstValue
let precentagechange = (difference / firstValue) * 100;
let precentagechangeroundeddown = Math.round(precentagechange)
if (Math.sign(difference) == 1) {
precentagechangestring = '(' + precentagechangeroundeddown.toLocaleString().toString() + '%)'
}
if (Math.sign(difference) == -1) {
let precentagechangeroundeddown = Math.round(-1 * precentagechange)
precentagechangestring = '(' + precentagechangeroundeddown.toLocaleString().toString() + '%)'
}
if (nextValue == 0 && firstValue >= 1) {
let precentagechangeroundeddown = Math.round(precentagechange);
precentagechangestring = '(' + precentagechangeroundeddown.toLocaleString().toString() + '%)'
}
if (firstValue == 0 && nextValue >= 1) {
let precentagechangeroundeddown = Math.round(precentagechange);
precentagechangestring = '(' + precentagechangeroundeddown.toLocaleString().toString() + '%)'
}
if (firstValue == nextValue) {
precentagechangestring = "No change"
}
controller.widgets()[i].precentagechangestring(precentagechangestring);
let stat1 = metricData.series[0].Data
let stat2 = metricData.series[1].Data
if (stat1 > stat2) {
statisticIcon = "trending_up";
}
if (stat1 < stat2) {
statisticIcon = "trending_down";
}
if (firstValue == nextValue) {
statisticIcon = "";
}
controller.widgets()[i].statisticIcon(statisticIcon);
let change = Math.floor(metricData.series[0].Data) - Math.floor(metricData.series[1].Data)
if (change == 0) {
let change = ""
controller.widgets()[i].change(change);
} else {
controller.widgets()[i].change(change);
}
if (change > 0) {
controller.widgets()[i].displaycolor("green");
}
if (change < 0) {
controller.widgets()[i].displaycolor("red");
}
if (change == 0) {
controller.widgets()[i].displaycolor("black");
}
}
}
}
};
</script>
</div>
</div>
</div>
</div>
<footer class="text-center"> © 2016 - 2022 Alacrity Solutions · All Rights Reserved </footer>
<script>
</script>
<script type="text/javascript">
var OldWidgets = [];
$(document).ready(function() {
//FIRST
loadAllMetricSettings();
for (let i = 0; i < $(".grid-stack-item").length; i++) {
let mID = $(".grid-stack-item").eq(i).attr("id");
let rID = $(".grid-stack-item").eq(i).attr("data-gs-x");
let cID = $(".grid-stack-item").eq(i).attr("data-gs-y");
OldWidgets.push({
id: mID,
rowID: rID,
colID: cID
});
}
$('.grid-stack').on('change', function(event, items) {
// set time out incase you have to wait for the resize to stop before you get cordinates to save
window.setTimeout(function() {
let NewWidgets = [];
for (let i = 0; i < $(".grid-stack-item").length; i++) {
let mID = $(".grid-stack-item").eq(i).attr("id").replace("divkendoChart", "");
let rID = $(".grid-stack-item").eq(i).attr("data-gs-x");
let cID = $(".grid-stack-item").eq(i).attr("data-gs-y");
NewWidgets.push({
id: mID,
rowID: rID,
colID: cID
});
if (OldWidgets.length == 0) {
SaveMetricDefinitionForUser(NewWidgets[i].id, NewWidgets[i].rowID, NewWidgets[i].colID);
} else {
if (NewWidgets[i].rowID != OldWidgets[i].rowID || NewWidgets[i].colID != OldWidgets[i].colID) {
SaveMetricDefinitionForUser(NewWidgets[i].id, NewWidgets[i].rowID, NewWidgets[i].colID);
}
}
}
}, 60)
})
});
</script>
<script type="text/javascript">
// format data for kendo chart, then build the kendo chart
function InitiateKendoChart(config, kendoWidgetElementId, viewModel) {
let id = "#divkendoChart" + config.MetricId;
$(id).find(".loader").remove();
let graphWidgetId = "#" + "divkendoChart" + kendoWidgetElementId + "_1";
let tableId = graphWidgetId + "_3";
$(graphWidgetId).kendoChart(config);
// shorten the names of the months to 3 letter words
let abverivatedCategories = [];
var i;
for (i = 0; i < config.categoryAxis.categories.length; i++) {
abverivatedCategories.push(config.categoryAxis.categories[i].slice(0, 3))
}
let seriesData1Rounded = roundData(0, config);
let seriesData2Rounded = roundData(1, config);
let dataSet = {
title: config.title,
name1: config.series[0].name,
name2: config.series[1].name,
data1: seriesData1Rounded,
data2: seriesData2Rounded,
categories: abverivatedCategories,
type: config.seriesDefaults.type
}
if (config.seriesDefaults.type == "bar" && config.seriesDefaults.stack == undefined) {
// scale data to a 1 x 1,000 scale so that the content nicely fits in the table cells
let scaledGraphData1 = [];
var v;
for (v = 0; v < config.series[0].data.length; v++) {
if (config.series[0].data[v] == "0" || config.series[0].data[v] == null) {
scaledGraphData1.push("0")
} else {
let scaledData = (config.series[0].data[v] / 1000)
let scaledDataRounded = scaledData.toFixed(1)
if (scaledDataRounded == 0.00) {
scaledDataRounded = 0;
scaledGraphData1.push(scaledDataRounded);
} else {
scaledDataRounded = scaledDataRounded + "K"
scaledGraphData1.push(scaledDataRounded);
}
}
}
dataSet.scaledGraphData1 = scaledGraphData1
// scale the other data to a 1 x 1,000 scale so that the content nicely fits in the table cells
let scaledGraphData2 = [];
var v;
for (v = 0; v < config.series[1].data.length; v++) {
if (config.series[1].data[v] == "0" || config.series[1].data[v] == null) {
scaledGraphData2.push("0")
} else {
let scaledData = (config.series[1].data[v] / 1000)
let scaledDataRounded = scaledData.toFixed(1)
if (scaledDataRounded == 0.00) {
scaledDataRounded = 0;
scaledGraphData2.push(scaledDataRounded);
} else {
scaledDataRounded = scaledDataRounded + "K"
scaledGraphData2.push(scaledDataRounded);
}
}
}
dataSet.scaledGraphData2 = scaledGraphData2
}
BuildKendoChart(dataSet, kendoWidgetElementId, config);
};
// build the kendo chart
function BuildKendoChart(chartData, kendoWidgetElementId, metricData) {
// format the id with the pound sign for jQuery
let graphWidgetId = "#" + "divkendoChart" + kendoWidgetElementId + "_1";
let tableId = graphWidgetId + "_3";
metricData.series[0].name = metricData.series[0].name.replace(/'/g, "");
metricData.series[1].name = metricData.series[1].name.replace(/'/g, "20");
$(graphWidgetId).find(".loader").remove()
if (metricData.seriesDefaults.type == "bar" && metricData.seriesDefaults.stack == undefined) {
//$(graphWidgetId).kendoChart(metricData);
// create the kendo chart with properties
$(graphWidgetId).addClass("horizontalchart");
$(".horizontalchart > svg > g > g:nth-child(6) > g > g:nth-child(1) > path:nth-child(1)").attr("stroke-width", 3); // need to find new selector
$(".horizontalchart > svg > g > g:nth-child(6) > g > g:nth-child(2) > path:nth-child(1)").attr("stroke-width", 3); // need to find new selector
$(tableId).kendoGrid({
columns: [{
field: "blank", //
title: " ", //
}, {
field: "month1", //
title: chartData.categories[0],
}, {
field: "month2", //
title: chartData.categories[1],
}, {
field: "month3", //
title: chartData.categories[2],
}, {
field: "month4", //
title: chartData.categories[3],
}, {
field: "month5", //
title: chartData.categories[4],
}, {
field: "month6", //
title: chartData.categories[5],
}, {
field: "month7", //
title: chartData.categories[6],
}, {
field: "month8", //
title: chartData.categories[7],
}, {
field: "month9", //
title: chartData.categories[8],
}, {
field: "month10", //
title: chartData.categories[9],
}, {
field: "month11", //
title: chartData.categories[10],
}, {
field: "month12", //
title: chartData.categories[11],
}, ],
dataSource: {
data: [{
blank: "Prior", //
month1: chartData.scaledGraphData1[0],
month2: chartData.scaledGraphData1[1],
month3: chartData.scaledGraphData1[2],
month4: chartData.scaledGraphData1[3],
month5: chartData.scaledGraphData1[4],
month6: chartData.scaledGraphData1[5],
month7: chartData.scaledGraphData1[6],
month8: chartData.scaledGraphData1[7],
month9: chartData.scaledGraphData1[8],
month10: chartData.scaledGraphData1[9],
month11: chartData.scaledGraphData1[10],
month12: chartData.scaledGraphData1[11],
}, {
blank: "Last",
month1: chartData.scaledGraphData2[0],
month2: chartData.scaledGraphData2[1],
month3: chartData.scaledGraphData2[2],
month4: chartData.scaledGraphData2[3],
month5: chartData.scaledGraphData2[4],
month6: chartData.scaledGraphData2[5],
month7: chartData.scaledGraphData2[6],
month8: chartData.scaledGraphData2[7],
month9: chartData.scaledGraphData2[8],
month10: chartData.scaledGraphData2[9],
month11: chartData.scaledGraphData2[10],
month12: chartData.scaledGraphData2[11],
}]
},
});
$(tableId).addClass("gridforhorizontalchart") // add styles to chart
$(tableId).siblings(".scale").html("*** This Table is on a 1 x 1,000 scale");
}
if (metricData.seriesDefaults.type == "area") {
//$(graphWidgetId).kendoChart(metricData);
$(graphWidgetId).addClass('linechart');
$(graphWidgetId).prev().addClass('linegraph-title')
//$(".linechart > svg > g > g:nth-child(6) > g > g:nth-child(1) > path:nth-child(1)").attr("stroke-width", 3);
//$(".linechart > svg > g > g:nth-child(6) > g > g:nth-child(2) > path:nth-child(1)").attr("stroke-width", 3);
//$('.linechart > svg > g > g:nth-child(3) > g:nth-child(2) > path:nth-child(5)').attr("stroke", "red");
$('.linechart > svg > g > g:nth-child(3) > g:nth-child(23) > text').after('<text style="font:11px Montserrat;white-space:pre;" x="61" y="116.667" stroke="none" fill="red" fill-opacity="1">industry Standard is 5 days</text>');
$(tableId).kendoGrid({
columns: [{
field: "blank", //
title: " ", //
}, {
field: "month1", //
title: chartData.categories[0],
}, {
field: "month2", //
title: chartData.categories[1],
}, {
field: "month3", //
title: chartData.categories[2],
}, {
field: "month4", //
title: chartData.categories[3],
}, {
field: "month5", //
title: chartData.categories[4],
}, {
field: "month6", //
title: chartData.categories[5],
}, {
field: "month7", //
title: chartData.categories[6],
}, {
field: "month8", //
title: chartData.categories[7],
}, {
field: "month9", //
title: chartData.categories[8],
}, {
field: "month10", //
title: chartData.categories[9],
}, {
field: "month11", //
title: chartData.categories[10],
}, {
field: "month12", //
title: chartData.categories[11],
}, ],
dataSource: { // this data will not be scaled like it was for the bar graph
data: [{
blank: "Prior", //
month1: chartData.data1[0],
month2: chartData.data1[1],
month3: chartData.data1[2],
month4: chartData.data1[3],
month5: chartData.data1[4],
month6: chartData.data1[5],
month7: chartData.data1[6],
month8: chartData.data1[7],
month9: chartData.data1[8],
month10: chartData.data1[9],
month11: chartData.data1[10],
month12: chartData.data1[11],
}, {
blank: "Last",
month1: chartData.data2[0],
month2: chartData.data2[1],
month3: chartData.data2[2],
month4: chartData.data2[3],
month5: chartData.data2[4],
month6: chartData.data2[5],
month7: chartData.data2[6],
month8: chartData.data2[7],
month9: chartData.data2[8],
month10: chartData.data2[9],
month11: chartData.data2[10],
month12: chartData.data2[11],
}]
},
});
$(tableId).addClass('gridforlinechart');
$(tableId).siblings(".scale").html("*** This Table is on a 1 x 1 scale");
}
if (metricData.seriesDefaults.stack !== undefined) { // for stacked 100% column graphs
metricData.series[0].stack = metricData.series[0].stack.replace(/'/g, "");
metricData.series[1].stack = metricData.series[1].stack.replace(/'/g, "");
metricData.series[2].stack = metricData.series[2].stack.replace(/'/g, "");
metricData.series[3].stack = metricData.series[3].stack.replace(/'/g, "20");
metricData.series[4].stack = metricData.series[4].stack.replace(/'/g, "20");
metricData.series[5].stack = metricData.series[5].stack.replace(/'/g, "20");
//// build stacked graph
//$(graphWidgetId).kendoChart(metricData);
$(graphWidgetId).addClass('columnGraph');
}
};
// round all of the data to get rid of decimals that make the data look bad
function roundData(num, metricData) {
let seriesDataRounded = [];
var i;
for (i = 0; i < metricData.series[num].data.length; i++) {
if (metricData.series[num].data[i] == null) {
seriesDataRounded.push("0")
} else {
let roundedToTwoDecimal = metricData.series[num].data[i].toFixed(2)
if (roundedToTwoDecimal == 0.00) {
let roundedToZero = 0;
seriesDataRounded.push(roundedToZero);
} else {
seriesDataRounded.push(roundedToTwoDecimal)
}
}
}
return seriesDataRounded
};
const repairableCB = document.getElementById('cph_Main_cph_Main_chk_repairable');
repairableCB.addEventListener('click', function FiltersForRepairable() {
if ($("#btnApplyFilters").hasClass("hidden")) {
$("#btnApplyFilters").removeClass("hidden")
}
if (!this.checked) totalLossCB.checked = true;
});
const totalLossCB = document.getElementById('cph_Main_cph_Main_chk_totalLoss');
totalLossCB.addEventListener('click', function FiltersForTotalLoss() {
if ($("#btnApplyFilters").hasClass("hidden")) {
$("#btnApplyFilters").removeClass("hidden")
}
if (!this.checked) repairableCB.checked = true;
});
const drivableCB = document.getElementById('cph_Main_cph_Main_chk_drivable');
drivableCB.addEventListener('click', function FiltersForDrivable() {
if ($("#btnApplyFilters").hasClass("hidden")) {
$("#btnApplyFilters").removeClass("hidden")
}
if (!this.checked) nonDrivableCheckbox.checked = true;
});
const nonDrivableCheckbox = document.getElementById('cph_Main_cph_Main_chk_nondrivable');
nonDrivableCheckbox.addEventListener('click', function autofillFiltersForNonDrivable() {
if ($("#btnApplyFilters").hasClass("hidden")) {
$("#btnApplyFilters").removeClass("hidden")
}
if (!this.checked) drivableCB.checked = true;
});
const currentPeriodDDL = document.getElementById('cph_Main_cph_Main_ddl_MetricTimePeriod');
currentPeriodDDL.addEventListener('change', function onCurrentPeriodDDL_Change() {
if ($("#btnApplyFilters").hasClass("hidden")) {
$("#btnApplyFilters").removeClass("hidden")
}
$("#cph_Main_cph_Main_ddl_MetricTimePeriod2 > option").prop("disabled", false);
$("#cph_Main_cph_Main_ddl_MetricTimePeriod2 > option[value='" + currentPeriodDDL.value + "']").attr("disabled", "disabled");
});
const previousPeriodDDL = document.getElementById('cph_Main_cph_Main_ddl_MetricTimePeriod2');
previousPeriodDDL.addEventListener('change', function onPreviousPeriodDDL_Change() {
if ($("#btnApplyFilters").hasClass("hidden")) {
$("#btnApplyFilters").removeClass("hidden")
}
$("#cph_Main_cph_Main_ddl_MetricTimePeriod > option").prop("disabled", false);
$("#cph_Main_cph_Main_ddl_MetricTimePeriod > option[value='" + previousPeriodDDL.value + "']").attr("disabled", "disabled");
});
function onChange(e) {
if ($("#btnApplyFilters").hasClass("hidden")) {
$("#btnApplyFilters").removeClass("hidden")
}
let val = e.sender.value();
};
$("#btnApplyFilters").on("click", function() {
updateMetrics();
saveMetricSettingsForUser();
$(this).addClass("hidden");
});
function saveMetricSettingsForUser() {
let msl = $("#mslChangeBranch").data("kendoMultiSelect");
let branches = msl.value();
PageMethods.SaveMetricSettingsForUser(branches, currentPeriodDDL.value, previousPeriodDDL.value, totalLossCB.checked, repairableCB.checked, drivableCB.checked, nonDrivableCheckbox.checked, function successforSaveMetricSettingsForUser(
response) {}, function(response) {
console.log("SaveMetricSettingsForUser FAILED and returned response: " + response);
});
}
function validateFilters() {
let msl = $("#mslChangeBranch").data("kendoMultiSelect");
if (repairableCB.checked == false && totalLossCB.checked == false) {
alert("You must select either Repairable or Total Loss checkboxes");
$(".repairableCheckboxAsterisk").removeClass("hidden");
} else if (drivableCB.checked == false && nonDrivableCheckbox.checked == false) {
alert("You must select either Drivable or Non-drivable checkboxes");
$(".drivableCheckboxAsterisk").removeClass("hidden");
} else if (currentPeriodDDL.value == "" || previousPeriodDDL.value == "") {
alert("You must choose a Current Period and a Previous Period");
$(".ddlAsterisk").removeClass("hidden");
} else if (currentPeriodDDL.value == previousPeriodDDL.value) {
alert("Current Period and Previous Period must be different");
} else if (msl.value().length == 0) {
alert("You must choose at least one district/branch");
} else {
$(".repairableCheckboxAsterisk").addClass("hidden");
$(".drivableCheckboxAsterisk").addClass("hidden");
$(".ddlAsterisk").addClass("hidden");
$(".mslAsterisk").addClass("hidden");
saveMetricSettingsForUser();
updateMetrics();
}
};
function updateMetrics() {
for (let i = 0; i < $(".grid-stack-item").length; i++) {
let currID = Number($(".grid-stack-item").eq(i).attr("id").replace("divkendoChart", ""));
let msl = $("#mslChangeBranch").data("kendoMultiSelect");
let branches = msl.value();
PageMethods.GetMetricData(currID, branches, repairableCB.checked, totalLossCB.checked, drivableCB.checked, nonDrivableCheckbox.checked, currentPeriodDDL.value, previousPeriodDDL.value, function sucessforGetMetricData(res) {
if (res.Data.Configuration == undefined) {
updateChartData(res.Data);
} else {
if (!res || !res.IsSuccess || !res.Data) {
$("#message").text(!res.Message ? "An unknown error occurred" : res.Message);
} else {
let config = JSON.parse(res.Data.Configuration);
if (config.series.length !== res.Data.SeriesData.length) throw new Error("Configuration series length and series data lengths do not match.");
if (typeof config.title === "undefined" || config.title === null) config.title = {};
config.title.text = res.Data.Title;
config.categoryAxis.categories = res.Data.Categories;
for (let i = 0; i < config.series.length; i++) {
config.series[i].data = res.Data.SeriesData[i]
config.series[i].name = res.Data.Series[i].Name;
if (config.seriesDefaults.stack !== undefined) { // if this is true it's a stacked column graph
config.series[i].stack = res.Data.Series[i].Stack
}
}
updateChartData(config);
}
}
}, function(response) {
console.log("UPDATEMETRICS FAILED! Response: " + response);
});
}
};
function loadAllMetricSettings() {
PageMethods.LoadBranches(function(response) {
$("#mslChangeBranch").kendoMultiSelect({
change: onChange,
dataTextField: "Value",
dataValueField: "Key",
dataSource: new kendo.data.DataSource({
type: "json",
data: response
})
});
loadUserMetricSettings();
}, function(response) {
console.log("loadAllMetricSettings failed with response: " + response);
});
};
function loadUserMetricSettings() {
PageMethods.GetMetricSettingsForUser(function(response) {
let msl = $("#mslChangeBranch").data("kendoMultiSelect");
if (response.Data == null) {
repairableCB.checked = true;
totalLossCB.checked = true;
drivableCB.checked = true;
nonDrivableCheckbox.checked = true;
currentPeriodDDL.value = 1;
previousPeriodDDL.value = 2;
msl.value([]);
} else {
repairableCB.checked = response.Data.IncludeRepairable;
totalLossCB.checked = response.Data.IncludeTotalLoss;
drivableCB.checked = response.Data.IncludeDrivable;
nonDrivableCheckbox.checked = response.Data.IncludeNondrivable;
currentPeriodDDL.value = response.Data.CurrentPeriodId;
previousPeriodDDL.value = response.Data.PriorPeriodId;
msl.value(response.Data.SelectedBranches);
$("#cph_Main_cph_Main_ddl_MetricTimePeriod2 > option[value='" + currentPeriodDDL.value + "']").attr("disabled", "disabled");
$("#cph_Main_cph_Main_ddl_MetricTimePeriod > option[value='" + previousPeriodDDL.value + "']").attr("disabled", "disabled");
}
PageMethods.GetAllMetricDefinitionsByUserId(GetMetricDefinitionsForUser_OnSuccess, GetMetricDefinitionsForUser_OnError);
});
};
function BuildWidgetElement(isNew, rowId, colId, isChart, metId) {
let generatedKendoWidgetId = "divkendoChart" + metId;
controller.addNewWidget(generatedKendoWidgetId, isNew, isChart, rowId, colId);
};
function getMetricData(metId, isChart) {
let msl = $("#mslChangeBranch").data("kendoMultiSelect");
let branches = msl.value();
PageMethods.GetMetricData(metId, branches, repairableCB.checked, totalLossCB.checked, drivableCB.checked, nonDrivableCheckbox.checked, currentPeriodDDL.value, previousPeriodDDL.value, function sucessforGetMetricData(res) {
//let isNew = true;
if (res.Data.Configuration == undefined && isChart == false) {
controller.addNewSummary(res.Data);
} else if (!res || !res.IsSuccess || !res.Data) {
$("#message").text(!res.Message ? "An unknown error occurred" : res.Message);
} else {
let config = JSON.parse(res.Data.Configuration);
if (config.series.length !== res.Data.SeriesData.length) throw new Error("Configuration series length and series data lengths do not match.");
if (typeof config.title === "undefined" || config.title === null) config.title = {};
config.title.text = res.Data.Title;
config.categoryAxis.categories = res.Data.Categories;
for (let i = 0; i < config.series.length; i++) {
let des = config.series[i];
let src = res.Data.Series[i];
des.name = src.Name;
if (src.Stack) des.stack = src.Stack;
des.data = src.Data;
//config.series[i].data = res.Data.SeriesData[i];
//config.series[i].name = res.Data.Series[i].Name;
//if (config.seriesDefaults.stack !== undefined) { // if this is true it's a stacked column graph to 100%
// config.series[i].stack = res.Data.Series[i].Stack
//}
}
InitiateKendoChart(config, metId, res.Data);
}
var grid = $('.grid-stack').data('gridstack');
if (grid !== null && (typeof grid !== 'undefined')) grid.commit();
}, function GetMetricData_OnError(error) {
console.log("GETMETRICDATA FAILED! Response: " + error);
});
};
function GetMetricDefinitionsForUser_OnSuccess(res) {
if (!res || !res.IsSuccess || !res.Data) {
//TODO- Error messaging
} else {
for (let i = 0; i < res.Data.length; i++) {
dataItem = res.Data[i];
BuildWidgetElement(false, dataItem.RowId, dataItem.ColumnId, dataItem.IsChart, dataItem.MetricId);
}
for (let i = 0; i < res.Data.length; i++) {
dataItem = res.Data[i];
getMetricData(dataItem.MetricId, dataItem.IsChart);
}
//window.setTimeout(function () {
// var grid = $('.grid-stack').data('gridstack');
// grid.commit();
//}, 200)
}
};
function GetMetricDefinitionsForUser_OnError(error) {
//TODO- Error messaging
console.error(error);
};
</script>
<script type="text/javascript">
//<![CDATA[
window.__TsmHiddenField = $get('scriptManager1_TSM'); //]]>
</script>
</form>
Text Content
Toggle navigation * * * Contact Us * * Dashboard * New Assignment * View Assignments * Pay Invoices Home Repairable Total Loss Drivable Non-drivable Current Month Prior Month 3-Month-Moving 12-Month-Moving Year-To-Date Current Month (Prior Year) Prior Month (Prior Year) 3-Month-Moving (Prior Year) 12-Month-Moving (Prior Year) Year-To-Date (Prior Year) Current Month Prior Month 3-Month-Moving 12-Month-Moving Year-To-Date Current Month (Prior Year) Prior Month (Prior Year) 3-Month-Moving (Prior Year) 12-Month-Moving (Prior Year) Year-To-Date (Prior Year) Select Your Branch Apply Filters Add Metric Charts * Average Business Cycle Time - Automobile * Average Supplement Amount * Gross Average Appraisal Metrics * Appraisal Count * Average Business Cycle Time - Automobile * Average Calendar Cycle Time - Automobile * Average Supplement Amount * Average Supplement Total vs Initial Appraisal * Average Supplement vs Appraisal Counts * Gross Average Appraisal * Supplement Count X 12 Month Moving NovDecJanFebMarAprMayJunJulAugSepOct01234567Industry Standard is 5 DaysAverage Business Cycle Time - AutomobileNov 2021 - Oct 2022Nov 2020 - Oct 2021Industry Average NovDecJanFebMarAprMayJunJulAugSepOct Prior000000000000Last000000000000 *** This Table is on a 1 x 1 scale X AVERAGE BUSINESS CYCLE TIME - AUTOMOBILE 0 DAYS NOV 2022 MTD 0 DAYS OCT 2022 No change X APPRAISAL COUNT 0 NOV 2022 MTD 0 OCT 2022 No change X SUPPLEMENT COUNT 0 NOV 2022 MTD 0 OCT 2022 No change © 2016 - 2022 Alacrity Solutions · All Rights Reserved No data found.