· 9 years ago · Oct 31, 2016, 06:36 PM
1'use strict';
2
3
4(function($, global, undefined) {
5
6 var NOT_STARTED = 'NOT_STARTED';
7 var IN_PROGRESS = 'IN_PROGRESS';
8 var COMPLETED = 'COMPLETED';
9 var WORKORDERS_BY_PAGE = 20;
10
11 var refreshCount = 0;
12 var refreshTimer = null;
13 var state;
14
15 var storageKeyState = "workorder_filterstate";
16
17 $(document).ready(function() {
18 WorkOrder.App.topbarInitialize(function () {
19
20 console.log("Topbar is ready - starting app");
21 WorkOrder.Service.setAuthToken(topbar.getAuthToken());
22 WorkOrder.Service.init(WorkOrder.App.getAWSRestAPI(), WorkOrder.App.getAWSBucket(), WorkOrder.App.getAWSElastic() ,topbar.getAuthToken());
23
24 $('#workOrdersContainer').html('<img class="fa-spinner-center" src="/newstron/resources/images/mid_spinner.gif">');
25 doLoad();
26 // refresh the table every 15 seconds. This is for the demo and not hugely efficient
27 // refreshTimer = setInterval(doLoad, 15000);
28 });
29 // todo: don't do anything else outside here because we haven't guaranteed the topbar is loaded
30 });
31
32 function doLoad() {
33 refreshCount++;
34 if (refreshCount > 20) clearInterval(refreshTimer);
35 WorkOrder.Service.loadTypesWorkOrders(function(data) {
36 WorkOrder.Service.setWorkOrderTypes(data['Items']);
37 bindActions();
38 renderList();
39 });
40 }
41
42 function renderList(){
43 $('#filter-location').show();
44 $('#btn-main').show();
45 $('#btn-view').hide();
46 $('#btn-new').html('');
47 var $object = $('.selector-list-item[data-state=COMPLETED]');
48
49 var stateStorage = loadFiltersOptionsOnPageLoad();
50 if (stateStorage !== null) {
51 if (stateStorage.state && !stateStorage.substate){
52 $object = $('.selector-list-item[data-state='+stateStorage.state+']');
53 }else{
54 setCompletionReason();
55 $object = $('.selector-list-item[data-state='+stateStorage.state+']');
56 $object.addClass('filter-active');
57 $object = $('.selector-sublist-item[data-state='+stateStorage.substate+']');
58 }
59 }
60 $object.attr('data-from', 'refresh');
61 $object.trigger( "click" );
62 }
63
64
65 function showSummarizer(data) {
66
67 var stepStateSummary = {};
68
69 data.Items.map(function (workOrder) {
70 if (workOrder.workOrderInfo.hasOwnProperty("detail") && workOrder.workOrderInfo.detail.hasOwnProperty("_stepStates")) {
71 var _stepStates = workOrder.workOrderInfo.detail._stepStates;
72
73 for (var key in _stepStates) {
74 var stepName = key;
75 var stepInfo = _stepStates[key];
76
77 if (stepInfo.state != null) {
78 var id = stepName + "_" + stepInfo.state;
79 var name = stepName + "<br>" + stepInfo.state;
80
81 if (stepStateSummary.hasOwnProperty(id)) {
82 // exists, increment the count
83 stepStateSummary[id].count ++;
84 } else {
85 // needs a new summary object
86 if (stepInfo.hasOwnProperty("summarizable") && stepInfo.summarizable[stepInfo.state]) {
87 stepStateSummary[id] = {
88 "name": name,
89 "count": 1,
90 "icon": stepInfo.icon
91 };
92 }
93 }
94 }
95 }
96 }
97 });
98
99 var summarizerBlocksUsed = 0;
100 for (var key in stepStateSummary) {
101 if (summarizerBlocksUsed > 6) continue;
102 var obj = stepStateSummary[key];
103 var count = obj.count;
104 var name = obj.name.toUpperCase();
105
106 $("#stepStateSummarizerTable > tbody > tr").append('<td class="dashBox"><span class="dashValue" id="transcoded">'+count+'</span><br>'+name+'</td>');
107 summarizerBlocksUsed ++;
108 }
109 }
110
111 function gotoPage(page) {
112 var _from = (page !== 1) ? WORKORDERS_BY_PAGE * page : page-1;
113 sessionStorage.currentPage = page;
114 WorkOrder.Model.listWorkOrdersByPage(WORKORDERS_BY_PAGE, _from, function (data) {
115 var pages = data.Total/WORKORDERS_BY_PAGE;
116
117 if (pages % 1 !== 0) {
118 pages = Math.ceil(pages);
119 sessionStorage.totalPages = pages;
120 var pagesIndexes = new Array(pages).join().split(',').map(function(item, index){ return ++index;})
121 data.pages = pagesIndexes;
122 }
123 //data = WorkOrder.Utils.sortByProperty(data, 'id');
124 data.Items.map(function (workOrder) {
125 workOrder = WorkOrder.Utils.formatWorkOrderObject(workOrder);
126 });
127 WorkOrder.App.setWorkOrdersList(data);
128 WorkOrder.App.render(data, 'templates/index.html', '#workOrdersTable', '#workOrdersContainer', function(){
129 try {
130 if (state === COMPLETED){
131 setCompletionReason();
132 }
133 showSummarizer(data);
134 } catch (e) {
135 console.log(e);
136 } finally {
137 bindActions();
138 $("a[data-pagenumber = " + page + "]").parent("li").addClass("active");
139 }
140 });
141 });
142 }
143
144 function bindActions() {
145 // bind create action
146 $('.pageBtn').on('click', function(event) {
147 event.stopImmediatePropagation();
148 $('#workOrdersContainer').html('<img class="fa-spinner-center" src="/newstron/resources/images/mid_spinner.gif">')
149 gotoPage(parseInt(this.dataset.pagenumber))
150 });
151
152 $('.navigationBtn').on('click', function(event) {
153 event.stopImmediatePropagation();
154 $('#workOrdersContainer').html('<img class="fa-spinner-center" src="/newstron/resources/images/mid_spinner.gif">')
155 console.log(this);
156 switch (this.id) {
157 case "start":
158 gotoPage(1);
159 break;
160 case "previous":
161 if (parseInt(sessionStorage.currentPage) > 1) {
162 gotoPage(parseInt(sessionStorage.currentPage) - 1);
163 }
164 break;
165 case "next":
166 if (parseInt(sessionStorage.currentPage) < parseInt(sessionStorage.totalPages)) {
167 gotoPage(parseInt(sessionStorage.currentPage) + 1);
168 }
169 break;
170 case "end":
171 gotoPage(parseInt(sessionStorage.totalPages));
172 break;
173 default:
174 gotoPage(1);
175 }
176 });
177
178 $('#createBtn').on('click', function(event) {
179 event.stopImmediatePropagation();
180 WorkOrder.Model.selectTypeWorkOrder();
181 });
182
183 $('#btncreatewo').on('click', function(event) {
184 event.stopImmediatePropagation();
185 var type = $("#selwotype option:selected").val();
186 var url = window.location.href;
187 url = url.substring(0, url.lastIndexOf("/") + 1);
188 url += 'workorder.html?action=new&wotype=' + type;
189 WorkOrder.Utils.pushState('?action=new&wotype=' + type);
190 window.location.href = url;
191
192 //renderCreate(type);
193 });
194
195 $('.selector-list-item').on('click', function(event) {
196 event.stopImmediatePropagation();
197 state = this.dataset.state;
198 // validate source, if refresh functionality, don't show spinner, see renderList function; click in option filter, show spinner
199 var _from = this.dataset.from;
200 if (_from !== 'refresh'){
201 $('#workOrdersContainer').html('<img class="fa-spinner-center" src="/newstron/resources/images/mid_spinner.gif">');
202 }
203 this.dataset.from = '';
204 setFiltersStorage(state, '');
205 gotoPage(1)
206 });
207
208 $('.selector-sublist-item').on('click', function(event) {
209 event.stopImmediatePropagation();
210 var substate = this.dataset.state;
211 // validate source, if refresh functionality, don't show spinner, see renderList function; click in option filter, show spinner
212 var _from = this.dataset.from;
213 if (_from !== 'refresh'){
214 $('#workOrdersContainer').html('<img class="fa-spinner-center" src="/newstron/resources/images/mid_spinner.gif">');
215 }
216 this.dataset.from = '';
217 setFiltersStorage(COMPLETED, substate);
218 WorkOrder.Model.filterByStateSubstate(this, COMPLETED, substate, function (data) {
219 data = WorkOrder.Utils.sortByProperty(data, 'id');
220 data.Items.map(function (workOrder) {
221 workOrder = WorkOrder.Utils.formatWorkOrderObject(workOrder);
222 });
223 WorkOrder.App.render(data, 'templates/index.html', '#workOrdersTable', '#workOrdersContainer', function(){
224 showSummarizer(data);
225 });
226 });
227 });
228
229 $('.detail-name').on('click', function(event) {
230 event.stopImmediatePropagation();
231 });
232
233 }
234
235 function setFiltersStorage(state, substate) {
236 var objectState = {
237 "state": state,
238 "substate": substate
239 };
240 topbar.persistBrowserStateToWebStorage(storageKeyState, JSON.stringify(objectState));
241 }
242
243 function loadFiltersOptionsOnPageLoad() {
244 var filterStorage;
245 try {
246 filterStorage = JSON.parse(topbar.getBrowserStateFromWebStorage(storageKeyState));
247 } catch (e) {
248 filterStorage = null;
249 }
250 return filterStorage;
251 }
252
253 function setCoreStates() {
254 var coreState = WorkOrder.App.coreStates();
255 var $list = $("#quark-filter-1");
256 $list.empty();
257 Object.keys(coreState).forEach(function (key) {
258 var value = coreState[key];
259 var li = '<li data-state="' + key + '" class="selector-list-item quark-filter-item-clickable quark-filter-item " >' + value + '</li>';
260 $list.append(li);
261 });
262 }
263
264 function setCompletionReason(){
265 var completionReason = WorkOrder.App.completionReason();
266 var $list = $("#quark-filter-2");
267 $list.empty();
268 Object.keys(completionReason).forEach(function (key) {
269 var value = completionReason[key];
270 var li = '<li data-state="' + key + '" class="selector-sublist-item quark-filter-item-clickable quark-filter-item " >' + value + '</li>';
271 $list.append(li);
272 });
273 bindActions();
274 }
275
276
277
278 })(jQuery, window);