Odyssey
mCorerequestsReport.prg
1 <?php
2 /*
3 * File: mCorerequestsReport.prg (corerequests_report ported from Mammoth)
4 *
5 * Purpose: display contents of core requests from the cucorerequests table
6 */
7 
8 $monLibrary= dirname(__FILE__) . "/../library";
9 $sharedLibrary= dirname(__FILE__) . "/../../shared/library";
10 require_once("$monLibrary/cu_top.i");
11 require_once("$monLibrary/ck_hticket.i");
12 require_once("$sharedLibrary/cu_func.i");
13 require_once("$sharedLibrary/commonJsFunctions.i");
14 require_once("$monLibrary/monitorView.i");
15 
16 
17 if (!CheckPerm($link, $Hu, basename($_SERVER['SCRIPT_NAME']), $_SERVER['REMOTE_ADDR'])) {
18  // ** Permissions failed
19  // ** redirect to new page
20  header("Location: /hcuadm/hcu_noperm.prg");
21  exit;
22 }
23 
24 printMonitorPageTop("Core Requests Report", $homecuKendoVersion, $cloudfrontDomainName);
25 printMonitorPageMiddle("Core Requests Report");
26 ?>
27 
28 <script type="text/javascript">
29 
30 <?php
31 // Include common functions
32 getShowWaitFunctions();
33 ?>
34 
35  var requestTypes = [
36  {"value":"", "text":"Select Type"},
37  {"value":"I", "text":"I - Account Inquiry"},
38  {"value":"X", "text":"X - Cross Accounts"},
39  {"value":"T", "text":"T - Transactions related"},
40  {"value":"MIR", "text":"MIR - Member Info Inquiry"},
41  {"value":"ETOC", "text":"ETOC - eStatement Table of Contents"},
42  {"value":"ESTM", "text":"ESTM - eStatement Request"},
43  {"value":"NEWAPP", "text":"NEWAPP - Submit New Loan App"},
44  {"value":"INQAPP", "text":"INQAPP - Loan App Inquiry"},
45  ];
46 
47  $(document).ready(function(e) {
48 
49  $.homecuValidator.setup({formValidate:'searchFrm', formStatusField: 'formErrorDiv'});
50 
51  //autocomplete for cu code input
52  $("#cuCode").kendoAutoComplete({
53  minlength: 2,
54  clearButton: false,
55  dataSource: new kendo.data.DataSource({
56  transport: {
57  read: {
58  url: "mCorerequestsReport.data",
59  data: { action: "read_cus"},
60  type: "POST"
61  }
62  },
63  schema: {
64  data: "Results.data"
65  }
66  }),
67  placeholder: "Start typing...",
68  change: function() {
69  var found = false;
70  var value = $("#cuCode").val();
71  var data = this.dataSource.view();
72  for( var i = 0, length = data.length; i < length; i++ ) {
73  if( data[i] === value) {
74  found = true;
75  break;
76  }
77  }
78 
79  if( !found ) {
80  this.value("");
81  alert("Please select a value from the list.");
82  }
83  }
84  });
85 
86  // Hide error div until needed
87  $("#formErrorDiv").hide();
88 
89  $("#requestType").kendoDropDownList({
90  dataTextField: "text",
91  dataValueField: "value",
92  dataSource: requestTypes
93  });
94 
95  $("#timeStart, #timeEnd").kendoDateTimePicker({
96  format: "yyyy-MM-dd HH:mm:ss",
97  });
98 
99  var todayDate = kendo.toString(kendo.parseDate(new Date()), 'yyyy-MM-dd');
100  var endDate = kendo.toString(kendo.parseDate(new Date()), 'yyyy-MM-dd 23:59:59');
101  $("#timeStart").data("kendoDateTimePicker").value(todayDate);
102  $("#timeEnd").data("kendoDateTimePicker").value(endDate);
103 
104  $("#gridRequests").kendoGrid({
105  dataSource: {
106  data: [],
107  pageSize: 10
108  },
109  noRecords: {
110  template: "No core requests were found."
111  },
112  columns: [
113  { field: "cu", title: "Credit Union" },
114  { field: "accountnumber", title: "Member" },
115  { field: "appliance_ip", title: "Appliance IP", hidden: true },
116  { field: "remote_ip", title: "Remote IP", hidden: true },
117  { field: "request_type", title: "Request Type" },
118  { field: "request_url", title: "Request Url", hidden: true, template: kendo.template($("#templateURL").html()) },
119  { field: "request_start", title: "Start Time" },
120  { field: "request_end", title: "End Time", hidden: true },
121  { field: "request_elapsed", title: "Elapsed (including Retry Delays)" },
122  { field: "request_status", title: "Status", template: kendo.template($("#templateStatus").html()) }
123  ],
124  sortable: true,
125  filterable: true,
126  columnMenu: true,
127  pageable: true
128  });
129 
130  $("#search").on("click", function(e) {
131 
132  var cuCode = $("#cuCode").val();
133  var member = $("#member").val();
134  var applianceIp = $("#applianceIp").val();
135  var requestType = $("#requestType").data("kendoDropDownList").value();
136  var timeStart = $("#timeStart").data("kendoDateTimePicker").value();
137  var timeEnd = $("#timeEnd").data("kendoDateTimePicker").value();
138 
139  var error = "";
140  // Validate parameters: Time
141  if (timeEnd != null && timeStart == null) {
142  error = "Start Time is required with End Time";
143  } else if (timeEnd != null && timeStart != null) {
144  // End time cannot be before start time
145  if (timeEnd <= timeStart) {
146  error = "End Time cannot be less than Start Time";
147  }
148  }
149 
150  // Validate CU Code
151  if (cuCode == '') {
152  error = "CU Code is required.";
153  }
154 
155  if (error.length > 0) {
156  $.homecuValidator.displayMessage(error, $.homecuValidator.settings.statusError);
157  return;
158  } else {
159  $.homecuValidator.hideMessage();
160  }
161 
162  var request = {
163  action: "search",
164  cucode: cuCode,
165  member: member,
166  applianceip: applianceIp,
167  requesttype: requestType,
168  timestart: (timeStart == null ? "" : kendo.toString(timeStart, 's')),
169  timeend: (timeEnd == null ? "" : kendo.toString(timeEnd, 's'))
170  };
171 
172  showWaitWindow();
173 
174  // disable the button
175  $(this).prop("disabled", "disabled");
176 
177  $.ajax({
178  type: "POST",
179  url: "mCorerequestsReport.data",
180  data: request
181  })
182  .done(function (data, textStatus, jqXHR) {
183  // Show the result
184  var error = "";
185  if (data.Results.requests) {
186  var requests = data.Results.requests;
187  var dropdown = $("#gridRequests").data("kendoGrid").dataSource.data(requests);
188  $.homecuValidator.hideMessage();
189  } else {
190  error = "Failed to retrieve results";
191  $.homecuValidator.displayMessage(error, $.homecuValidator.settings.statusError);
192  }
193  })
194  .fail(function (jqXHR, textStatus, errorThrown) {
195  $.homecuValidator.displayMessage(errorThrown, $.homecuValidator.settings.statusError);
196  $("#search").removeProp("disabled");
197  })
198  .always(function (jqXHR, textStatus, errorThrown) {
199  hideWaitWindow();
200  $("#search").removeProp("disabled");
201  });
202  });
203 
204  // Setup viewdetails checkbox
205  // Show detail columns when checked.
206  $("#viewDetails").on('change', function(e) {
207  var checked = $(this).prop("checked");
208  var grid = $("#gridRequests").data("kendoGrid");
209  if (checked) {
210  grid.showColumn(2);
211  grid.showColumn(3);
212  grid.showColumn(5);
213  grid.showColumn(7);
214  } else {
215  grid.hideColumn(2);
216  grid.hideColumn(3);
217  grid.hideColumn(5);
218  grid.hideColumn(7);
219  }
220  });
221 
222  });
223 
224 </script>
225 
226 <script type="text/x-kendo-template" id="templateURL">
227  # if (data && data.request_url) { #
228  # var url = decodeURIComponent(data.request_url); #
229  <span>#= url #</span>
230  # } #
231 </script>
232 
233 <script type="text/x-kendo-template" id="templateStatus">
234  # if (data && data.request_status) { #
235  # var request_status = data.request_status; #
236  # if (request_status) { #
237  <span><strong>Code: </strong>#: request_status.status.code #</span><br>
238  <span><strong>Description: </strong>#: request_status.status.desc #</span><br>
239  <span><strong>Extra: </strong>#: request_status.status.extra #</span><br>
240  <span><strong>Packet Size: </strong>#: request_status.status.packetsize #</span><br>
241  <span><strong>Message: </strong>#: request_status.error.messages #</span><br>
242  <span><strong>DB Error: </strong>#: request_status.note.dberror #</span><br>
243  # if (request_status.status.attempted_core_conns) { #
244  <span><strong>Attempted Core Connections: </strong>#: request_status.status.attempted_core_conns #</span><br>
245  # } #
246  <span><strong>Curl Error Code(s): </strong>#: request_status.status.curl_errno #</span><br>
247  # } #
248  # } #
249 
250 </script>
251 
252 <style type="text/css">
253 
254  body {
255  font-family: Arial, Helvetica, sans-serif;
256  background-color: #EFEFEF;
257  font-size: 14px;
258  }
259 
260  * {
261  padding: 0;
262  margin: 0;
263  }
264 
265  [class*='col-'] {
266  float: left;
267  }
268 
269  .row {
270  margin-bottom: 15px;
271  margin-right: 15px;
272  margin-left: 15px;
273  }
274 
275  .row:after {
276  content: "";
277  clear: both;
278  display: table;
279  }
280 
281  .col-1 { width: 8.33%; }
282  .col-2 { width: 16.67%; }
283  .col-3 { width: 25%; }
284  .col-4 { width: 33.33% }
285  .col-5 { width: 41.67%; }
286  .col-6 { width: 50%; }
287  .col-7 { width: 58.33%; }
288  .col-8 { width: 66.67%; }
289  .col-9 { width: 75%; }
290  .col-10 { width: 83.33%; }
291  .col-11 { width: 91.67%; }
292  .col-12 { width: 100%; }
293 
294  .k-grid tbody td {
295  text-overflow: clip; /* prevent the ellipsis behavior */
296  overflow-wrap: break-word;
297  }
298 
299  #timeStart, #timeEnd {
300  margin-top:5px;
301  }
302 
303 </style>
304 
305 <div class="container-fluid" id="searchFrm">
306  <div class="form-horizontal form-widgets well well-sm">
307  <div class="row k-block k-error-colored" id="formErrorDiv"></div>
308 
309  <div class="row">
310  <div class="form-group">
311  <label class="col-2" for="cuCode">Credit Union:</label>
312  <input name="cuCode" id="cuCode" class="k-textbox col-3" maxlength="12">
313  </div>
314  </div>
315 
316  <div class="row">
317  <div class="form-group">
318  <label class="col-2" for="member">Member:</label>
319  <input name="member" id="member" class="k-textbox col-3" maxlength="12">
320  </div>
321  </div>
322 
323  <div class="row">
324  <div class="form-group">
325  <label class="col-2" for="applianceIp">Appliance IP:</label>
326  <input name="applianceIp" id="applianceIp" class="k-textbox col-3">
327  </div>
328  </div>
329 
330  <div class="row">
331  <div class="form-group">
332  <label class="col-2" for="requestType">Request Type:</label>
333  <input name="requestType" id="requestType" class="col-3">
334  </div>
335  </div>
336 
337  <div class="row">
338  <div class="form-group">
339  <label class="col-2">Date:</label>
340  <div class="col-6">
341  <div style="display: inline-block;">
342  <label for="timeStart">From:</label><br>
343  <input type="" name="timeStart" id="timeStart" class="">
344  </div>
345  <div style="display: inline-block;">
346  <label for="timeEnd">To:</label><br>
347  <input type="" name="timeEnd" id="timeEnd" class="">
348  </div>
349  </div>
350  </div>
351  </div>
352 
353  <div class="row">
354  <div class="form-group">
355  <label class="col-2" for="viewDetails">View Details:</label>
356  <div class="col-6">
357  <input type="checkbox" name="viewDetails" id="viewDetails" >
358  </div>
359  </div>
360  </div>
361 
362  <div class="row">
363  <div class="form-group">
364  <div class="col-6">
365  <button class="k-button k-primary" id="search">Search</button>
366  </div>
367  </div>
368  </div>
369 
370  </div>
371 </div>
372 
373 <div class="container-fluid">
374  <div class="row">
375  <div id="gridRequests"></div>
376  </div>
377 </div>
378 
379 <?php printMonitorPageBottom(); ?>