Odyssey
MbrExHcuDMI.i
1 <?php
2 
3 $HcuDMIi = new class()
4 {
5  public function parms_parse($payload) {
6  /*
7  * parms_parse - explode parms into component values
8  * called after reading record from database
9  */
10 
11  list ($dmiloan) = explode(',', $payload);
12  return array('dmiloan' => $dmiloan);
13  }
14 
15  public function parms_validate($parms) {
16  $dms_ok = array('dmiloan' => 'string');
17  dms_import_v2($parms, "HCUPOST", $dms_ok);
18  /*
19  * parms_validate - check entries before attemtping db update
20  * includes readying for db write
21  * called after form post, so import the needed form values
22  */
23  if (empty($parms['HCUPOST']['dmiloan'])) {
24  $errors[] = 'Loan Number Required';
25  } else {
26  if (preg_match("/\D/", $parms['HCUPOST']['dmiloan']) || strlen($parms['HCUPOST']['dmiloan']) <> 10) {
27  $errors[] = "Loan Number must be 10 digits";
28  }
29  }
30  if (sizeof($errors)) {
31  $payload[data] = '';
32  $payload[errors] = $errors;
33  } else {
34 
35  $payload[data] = "{$parms['HCUPOST']['dmiloan']}";
36  }
37  return $payload;
38  }
39 
40  public function printTemplate()
41  { ?>
42  <span id="popupNotification"></span>
43  <div id='gridMsg' style="width: 100%;"></div>
44  <div id="window"></div>
45  <div id="winErr"></div>
46  <?php }
47 
48  public function printGlobals()
49  { ?>
50  var isCreating;
51  var loanData= [];
52  var accountData= [];
53  var newRecord= {}, oldRecord= {};
54 
55  function updateLoanData(record, isOldRecord)
56  {
57  var data= loanData[record.accountnumber.trim()];
58  if (data != null)
59  for(var i=0; i!= data.length; i++)
60  {
61  if (data[i].loannumber.trim() == record.accounttype.trim())
62  {
63  data[i].extkeyid= isOldRecord ? 0 : record.keyid;
64  break;
65  }
66  }
67  }
68  <?php }
69 
70  public function printInit($crudhost, $trustid, $fromUserHub=false)
71  { ?>
72  var windowTemplate= 'Delete loan number <strong>#= dmiloan #</strong> for member <strong>#= accountnumber #</strong>? </p>\
73  <button class="k-button" id="yesButton">Yes</button>\
74  <button class="k-button" id="noButton"> No</button>';
75 
76  var windowError= '#= Message #</p>\
77  <button class="k-button" id="errCloseButton">Close</button>';
78 
79  windowTemplate = kendo.template(windowTemplate);
80  var windowT = $("#window").kendoWindow({
81  title: "Please Confirm",
82  visible: false, //the window will not appear before its .open method is called
83  width: "400px",
84  modal: true,
85  open: function() {
86  if (window.activeWindows != null)
87  window.activeWindows.push(this);
88  },
89  close: function() {
90  if (window.activeWindows != null)
91  window.activeWindows.pop();
92  }
93  }).data("kendoWindow");
94 
95  windowError = kendo.template(windowError);
96  var winErr = $("#winErr").kendoWindow({
97  title: "Error",
98  visible: false, //the window will not appear before its .open method is called
99  actions: ["Close"],
100  modal: true,
101  width: "400px",
102  open: function() {
103  if (window.activeWindows != null)
104  window.activeWindows.push(this);
105  },
106  close: function() {
107  if (window.activeWindows != null)
108  window.activeWindows.pop();
109  }
110  }).data("kendoWindow");
111 
112  var popupNotification = $("#popupNotification").kendoNotification().data("kendoNotification");
113  popupNotification.setOptions({
114  appendTo: "body",
115  stacking: 'up',
116  autoHideAfter: 5000
117  });
118 
119  var crudServiceBaseUrl = "<?php echo $crudhost; ?>?ft=534&trustid=<?php echo $trustid; ?>";
120  <?php if ($fromUserHub) { ?>
121  crudServiceBaseUrl+= "&userid=" + $("#selectedId").text();
122  <?php } ?>
123  dataSource = new kendo.data.DataSource({
124  autoSync: false,
125  batch: false,
126  serverFiltering: false,
127  serverPaging: false,
128  page: 1,
129  pageSize: 20,
130  cache: false,
131  transport: {
132  read: {
133  type: "GET",
134  url: crudServiceBaseUrl + "&action=read",
135  dataType: "json"
136  },
137  update: {
138  type: "POST",
139  url: crudServiceBaseUrl + "&action=update",
140  dataType: "json"
141  },
142  destroy: {
143  type: "POST",
144  url: crudServiceBaseUrl + "&action=delete",
145  dataType: "json"
146  },
147  create: {
148  type: "POST",
149  url: crudServiceBaseUrl + "&action=new",
150  dataType: "json"
151  },
152  parameterMap: function(options, operation) {
153  if (operation !== "read" && options.models) {
154  return {models: kendo.stringify(options.models)};
155  } else if (operation === 'create' || operation === 'update' || operation === 'destroy') {
156  return options;
157  }
158  }
159  },
160  schema: {
161  data: "homecuData",
162  total: function(response)
163  {
164  return response.homecuData.length;
165  },
166  errors: function(response)
167  {
168  return response.homecuErrors != null && response.homecuErrors.length > 0 ? response.homecuErrors : null;
169  },
170  parse: function(response)
171  {
172  var returnValue= response.Results[0];
173  if (returnValue.homecuInfo != null && returnValue.homecuInfo.length > 0)
174  popupNotification.show(returnValue.homecuInfo, "info");
175 
176  // Update loan data so that filters work.
177  switch(returnValue.type)
178  {
179  case "read":
180  loanData= returnValue.loanData;
181  accountData= returnValue.accountData;
182  break;
183  case "delete":
184  updateLoanData(oldRecord, true);
185  break;
186  case "new":
187  newRecord.keyid= returnValue.homecuData.keyid;
188  updateLoanData(newRecord, false);
189  break;
190  case "update":
191  if (oldRecord.accountnumber.trim() != newRecord.accountnumber.trim() || oldRecord.accounttype.trim() != newRecord.accounttype.trim())
192  {
193  updateLoanData(oldRecord, true);
194  updateLoanData(newRecord, false);
195  }
196  break;
197  }
198  return returnValue;
199  },
200  model: {
201  id: "keyid",
202  fields: {
203  keyid: {type: 'number'},
204  userid: {type: "number", editable: false},
205  accountnumber: { type: 'string', validation: {required: { message: "Member Number Required" }}},
206  accounttype: { type: 'string', validation: {required: { message: "HCU Loan Number Required" }} },
207  parms: { type: 'string'},
208  dmiloan: { type: 'string', validation: {required: { message: "DMI Loan ID Required"}} }
209  }
210  }
211  },
212  error: function(e)
213  {
214  grid.cancelRow();
215  winErr.content(windowError({Message: e.errors.join("<br>")})); //send the err data object to the template and render it
216  $("#winErr").closest(".k-window.k-widget").css({<?php printTopCenterCss(200, "", "jsGuts"); ?>});
217  winErr.open();
218  }
219  });
220 
221  var grid= $("#gridMsg").kendoGrid({
222  dataSource: dataSource,
223  pageable: {
224  pageSizes: [10, 20, 50],
225  info: true,
226  refresh: true,
227  messages: {
228  display: "Showing {0}-{1} from {2} data items"
229  }
230  },
231  filterable: true,
232  sortable: true,
233  batch: false,
234  columns: [
235  { field: "userid", title: "User"},
236  { field:"accountnumber", title: "Member", width: "120px", editor: function(container, options) {
237  if (options.model.isNew())
238  {
239  options.model.userid= $("#selectedAccntId").text().trim();
240  options.model.accountnumber= $("#selectedAccnt").text().trim();
241  $(container).html(options.model.accountnumber);
242  }
243  else
244  {
245  var accountDDL= $("<div id='accountDDL'></div>").appendTo(container).kendoDropDownList({
246  dataSource: {
247  data: accountData
248  },
249  dataTextField: "accountnumber",
250  dataValueField: "accountnumber",
251  dataBound: function()
252  {
253  if (options.model.accountnumber > 0)
254  this.value(options.model.accountnumber.trim());
255  else
256  options.model.accountnumber= this.value(); // If defaulted to first
257  },
258  change: function()
259  {
260  options.model.dirty= true;
261  options.model.accountnumber= this.value();
262 
263  var data= loanData[options.model.accountnumber.trim()];
264  if (data != null)
265  $("#hcuLoanDDL").data("kendoDropDownList").dataSource.data($.grep(data, function(n,i) { return n.extkeyid == 0 || n.extkeyid == options.model.keyid; }));
266  }
267  }).data("kendoDropDownList");
268  }
269  }},
270  { field: "accounttype", title:"HCU Loan", width: "100px", editor: function(container, options) {
271  <?php if ($fromUserHub) { // These values are known if coming in through the user hub. ?>
272  if (options.model.isNew())
273  {
274  options.model.userid= $("#selectedAccntId").text().trim();
275  options.model.accountnumber= $("#selectedAccnt").text().trim();
276  }
277  <?php } ?>
278  var data= loanData[options.model.isNew() ? $("#selectedAccnt").text().trim() : options.model.accountnumber.trim()];
279  data= data == null ? [] : (options.model.isNew() ? $.grep(data, function(n,i) { return n.extkeyid == 0; })
280  : $.grep(data, function(n,i) { return n.extkeyid == 0 || n.extkeyid == options.model.keyid; }));
281 
282  if (data.length > 0)
283  {
284  var loanDDL= $("<div id='hcuLoanDDL'></div>").appendTo(container).kendoDropDownList({
285  dataSource: {
286  data: data
287  },
288  dataTextField: "loannumber",
289  dataValueField: "loannumber",
290  dataBound: function()
291  {
292  if (options.model.accounttype != "")
293  this.value(options.model.accounttype.trim());
294  else
295  options.model.accounttype= this.value(); // If defaulted to first
296  },
297  change: function()
298  {
299  options.model.dirty= true;
300  options.model.accounttype= this.value();
301  }
302  }).data("kendoDropDownList");
303  }
304  else
305  $(container).text("No Loans!");
306  }},
307  { field: "dmiloan", title:"DMI Loan", width: "300px" },
308  { command: [{name: "edit", text: "Change"}, {name: "Delete"}], title: "&nbsp;", width: "200px" }],
309  <?php if ($fromUserHub) { ?>
310  toolbar: ["create"],
311  <?php } else { ?>
312  toolbar: [{name: "customCreate", text: "<span class='k-icon k-add'></span> Add New Record"}],
313  <?php } ?>
314  editable: "inline",
315  edit: function(e)
316  {
317  oldRecord= {keyid: e.model.keyid, accounttype: e.model.accounttype, accountnumber: e.model.accountnumber};
318  },
319  save: function(e)
320  {
321  newRecord= {keyid: e.model.keyid, accounttype: e.model.accounttype, accountnumber: e.model.accountnumber};
322  },
323  noRecords: {
324  template: "<tr><td colspan='<?php echo $fromUserHub ? 4 : 3; ?>'>No Records Found!</td></tr>"
325  }
326  }).data("kendoGrid");
327 
328  <?php if (!$fromUserHub) { ?>
329  $("#gridMsg").on("click", ".k-grid-customCreate", function() {
330  searchUser(function(dataItem) {
331  grid.addRow(); // Should have the selected accnt and primary user in the variables ready for the edit function.
332  $(".k-grid-edit-row .k-input:first").focus();
333  });
334  return false;
335  });
336  <?php } ?>
337 
338  $("#winErr").on("click", "#errCloseButton", function() {
339  winErr.close();
340  return false;
341  });
342 
343  var deleteDataItem= null;
344  $("#gridMsg").on("click", ".k-grid-Delete", function(e) {
345  var tr = $(e.target).closest("tr"); //get the row for deletion
346  deleteDataItem = grid.dataItem(tr); //get the row data so it can be referred later
347  windowT.content(windowTemplate(deleteDataItem)); //send the row data object to the template and render it
348  $("#window").closest(".k-window.k-widget").css({<?php printTopCenterCss(200, "", "jsGuts"); ?>});
349  windowT.open();
350  return false;
351  });
352 
353  $("#window").on("click", "#yesButton", function() {
354  dataSource.remove(deleteDataItem) //prepare a "destroy" request
355  dataSource.sync() //actually send the request (might be omitted if the autoSync option is enabled in the dataSource)
356  windowT.close();
357  return false;
358  });
359 
360  $("#window").on("click", "#noButton", function() {
361  windowT.close();
362  return false;
363  });
364  <?php }
365 
366  public function parms_disp4edit($findTab, $searchTab, $crudhost, $Cu, $trustid) {
367  /*
368  * parms_disp4edit - layout screen for display / edit values
369  */
370  $this->printTemplate();
371  printSearchTemplates($searchTab, $findTab);
372  printExtKeyStyle();
373  ?>
374 
375  <script>
376  <?php // Library javascript functions
377  getShowWaitFunctions();
378  searchOutsideHub($searchTab, $findTab);
379  $this->printGlobals(); ?>
380  var activeWindows= [];
381 
382 
383  $(document).ready(function() {
384  <?php $this->printInit($crudhost, $trustid);
385  printClickOverlayEvent();
386  ?>
387  });
388  </script>
389  <?php } // end parms_disp4edit
390 } // end class
391 ?>