Odyssey
aMemberDelete.prg
1 <?php
2 /**
3  * @package MemberHub
4  * @author MGHandy
5  *
6  * @uses this script facilitates in deleting account transaction history
7  * for this member's sub accounts.
8  *
9  * @uses view and select users in the user hub
10  * @uses view and selected user accounts in the member hub
11  *
12  * @param operation string: requested operation for this script
13  * @param payload string: encryption for the selected member
14  * @param mAccount string: operation= select member account, this
15  * is the requested member account to selected in the member hub.
16  *
17  * @return json
18  */
19 require_once("$admLibrary/aMemberSupport.i");
20 
21 try {
22  $admVars = array();
23  $admOk = array(
24  "operation" => array("filter" => FILTER_SANITIZE_STRING),
25  "payload" => array("filter" => FILTER_SANITIZE_STRING),
26  "mHistory" => array("filter" => FILTER_SANITIZE_STRING)
27  );
28  HCU_ImportVars($admVars, "MEMBER_DELETE", $admOk);
29 
30  $dOperation = isset($admVars["MEMBER_DELETE"]["operation"]) ? $admVars["MEMBER_DELETE"]["operation"] : null;
31  $dPayload = isset($admVars["MEMBER_DELETE"]["payload"]) ? $admVars["MEMBER_DELETE"]["payload"] : null;
32  $dHistory = isset($admVars["MEMBER_DELETE"]["mHistory"]) ? $admVars["MEMBER_DELETE"]["mHistory"] : null;
33 
34  $dMember = $dPayload ?
35  MemberDecrypt($SYSENV, $Cu, $dPayload) :
36  null;
37 
38  $dContext = $dPayload ?
39  MemberContext($SYSENV, $Cu, $dMember['member']) :
40  MemberContext($SYSENV, $Cu);
41 
42  $aryResult = array();
43  $aryReply = array();
44 
45  switch ($dOperation) {
46  case "":
48  break;
49  case "memberReadHistory":
50  header('Content-type: application/json');
51 
52  $dHistory = MemberReadHistory($SYSENV, $dbh, $dContext);
53  $aryResult['data']['history'] = $dHistory['history'];
54  MemberReply($aryResult, $aryReply, $dOperation);
55  break;
56  case "memberDeleteHistory":
57  header('Content-type: application/json');
58 
59  $dValidateHistory = MemberValidateHistory($SYSENV, $dContext, $dHistory);
60  $dDelete = MemberDeleteHistory($SYSENV, $dbh, $dContext, $dValidateHistory);
61  $dHistory = MemberReadHistory($SYSENV, $dbh, $dContext);
62 
63  $aryResult['info'] = isset($dDelete['message']) ? $dDelete['message'] : "";
64  $aryResult['data']['history'] = $dHistory['history'];
65  MemberReply($aryResult, $aryReply, $dOperation);
66  break;
67  default:
68  throw new Exception("Unknown server request: " . $dOperation);
69  break;
70  }
71 
72 } catch (Exception $e) {
73  $aryReply['errors'][] = $e->getMessage();
74  $aryResult['data'] = array();
75  $aryResult['info'] = array();
76 
77  MemberReply($aryResult, $aryReply, $dOperation);
78  exit;
79 }
80 
81 function MemberValidateHistory($pEnv, $pContext, $pHistory) {
82  $cuMember = $pContext['m_account'];
83 
84  $sList = html_entity_decode($pHistory, ENT_QUOTES);
85  $dList = HCU_JsonDecode($sList);
86 
87  $dValidate = array();
88  foreach ($dList as $action => $set) {
89  $dValidate[$action] = array();
90 
91  foreach ($set as $key => $value) {
92  $dValidate[$action][] = array(
93  "_action" => "delete",
94  "accounttype" => prep_save($value['aType'], 25)
95  );
96  }
97  }
98 
99  return $dValidate;
100 }
101 
102 function MemberDeleteHistory($pEnv, $pDbh, $pContext, $pHistory) {
103 
104  $cuTable = $pContext['cu_table'];
105  $cuCode = $pContext['cu_code'];
106  $cuMember = $pContext['m_account'];
107 
108  $cuHistoryLoan = $pHistory['loan'];
109  $cuHistoryDeposit = $pHistory['deposit'];
110 
111  $sqlReturn = array();
112  $sqlDelete = "";
113  $sqlDeleteRs = null;
114  $sqlTrans = "";
115  $sqlTransRs = null;
116 
117  try {
118  // begin transaction
119  $sqlTrans = "BEGIN TRANSACTION";
120  $sqlTransRs = db_query($sqlTrans, $pDbh);
121 
122  // add sql for deposit deletions
123  if (count($cuHistoryDeposit) > 0) {
124  foreach ($cuHistoryDeposit as $key => $value) {
125  $sqlDelete .= "
126  DELETE FROM {$cuTable}accounthistory
127  WHERE accountnumber = '$cuMember'
128  AND accounttype = '{$value['accounttype']}';";
129  }
130  }
131 
132  // add sql for loan deletions
133  if (count($cuHistoryLoan) > 0) {
134  foreach ($cuHistoryLoan as $key => $value) {
135  $sqlDelete .= "
136  DELETE FROM {$cuTable}loanhistory
137  WHERE accountnumber = '$cuMember'
138  AND loannumber = '{$value['accounttype']}';";
139  }
140  }
141 
142  // delete query for deposit and loan accounts
143  $sqlDeleteRs = db_query($sqlDelete, $pDbh);
144  if (!$sqlDeleteRs) {
145  $pEnv['logger']->error(db_last_error());
146  throw new Exception("Failed to delete sub-account history.");
147  }
148 
149  // commit transaction
150  $sqlTrans = "COMMIT TRANSACTION";
151  $sqlTransRs = db_query($sqlTrans, $pDbh);
152 
153  } catch (Exception $e) {
154  // transaction failed
155  $pEnv['logger']->error(db_last_error());
156 
157  // revert transaction
158  $sqlTrans = "ROLLBACK TRANSACTION";
159  $sqlTransRs = db_query($sqlTrans, $pDbh);
160  throw new Exception($e->getMessage());
161  }
162 
163  // send success message
164  if (count($cuHistoryDeposit) > 0) { $sqlReturn['message'][] = "Deposit account history has been deleted successfully."; }
165  if (count($cuHistoryLoan) > 0) { $sqlReturn['message'][] = "Loan account history has been deleted successfully.";}
166  return $sqlReturn;
167 }
168 
169 function MemberReadHistory($pEnv, $pDbh, $pContext) {
170  $cuTable = $pContext['cu_table'];
171  $cuCode = $pContext['cu_code'];
172  $cuMember = $pContext['m_account'];
173 
174  $sqlReturn = array();
175  $sqlData = array();
176  $sqlColumns = "
177  DISTINCT ON (lb.loannumber) lb.loannumber AS a_type,
178  lb.accountnumber AS a_number,
179  lb.description AS a_desc,
180  'Loan' AS a_record";
181  $sqlSub = "
182  SELECT COUNT(*)
183  FROM {$cuTable}loanhistory lh
184  WHERE lh.accountnumber = '$cuMember'
185  AND lh.loannumber = lb.loannumber";
186  $sqlSelect = "
187  SELECT $sqlColumns, ($sqlSub) AS a_count
188  FROM {$cuTable}loanbalance lb
189  WHERE lb.accountnumber = '$cuMember'";
190  $sqlSelectRs = db_query($sqlSelect, $pDbh);
191  if (!$sqlSelectRs) {
192  $pEnv['logger']->error(db_last_error());
193  throw new Exception("Failed to read transaction history for loan accounts.");
194  }
195  $sqlData['loan'] = db_fetch_all($sqlSelectRs);
196 
197  $sqlColumns = "
198  DISTINCT ON (ab.accounttype) ab.accounttype AS a_type,
199  ab.accountnumber AS a_number,
200  ab.description AS a_desc,
201  'Deposit' AS a_record";
202  $sqlSub = "
203  SELECT COUNT(*)
204  FROM {$cuTable}accounthistory ah
205  WHERE ah.accountnumber = '$cuMember'
206  AND ah.accounttype = ab.accounttype";
207  $sqlSelect = "
208  SELECT $sqlColumns, ($sqlSub) AS a_count
209  FROM {$cuTable}accountbalance ab
210  WHERE ab.accountnumber = '$cuMember'";
211  $sqlSelectRs = db_query($sqlSelect, $pDbh);
212  if (!$sqlSelectRs) {
213  $pEnv['logger']->error(db_last_error());
214  throw new Exception("Failed to read transaction history for deposit accounts.");
215  }
216  $sqlData['deposit'] = db_fetch_all($sqlSelectRs);
217  $sqlData['history'] = array();
218 
219  if (is_array($sqlData['deposit'])) { $sqlData['history'] = array_merge($sqlData['history'], $sqlData['deposit']); }
220  if (is_array($sqlData['loan'])) { $sqlData['history'] = array_merge($sqlData['history'], $sqlData['loan']); }
221 
222  $sqlReturn['history'] = $sqlData['history'];
223  return $sqlReturn;
224 }
225 
226 ?>
227 
228 <?php
229 /**
230  * @package PrintMemberDelete
231  * @uses print neccessary html/javascript to run the selected card
232  */
233 function PrintMemberDelete() { ?>
234 <div id="mdHistory">
235  <div id="status"></div>
236 
237  <h3>Deposit Accounts</h3>
238  <div id="mdGridDeposit"></div>
239  &nbsp;
240  <h3>Loan Accounts</h3>
241  <div id="mdGridLoan"></div>
242 
243  <div class="hcu-template">
244  <div class="hcu-edit-buttons k-state-default">
245  <span class="hcu-icon-delete">
246  </span>
247  <a href="##" id="lnkCancel">Cancel</a>
248  &ensp;
249  <a href="##" id="btnUpdate" class="k-button k-primary">
250  <i class="fa fa-trash fa-lg"></i>
251  Delete
252  </a>
253  </div>
254  </div>
255 </div>
256 
257 <div id="mdConfirm">
258  <p>You are about to delete the transaction history for the selected accounts.</p>
259  <p>Do you wish to continue?</p>
260 </div>
261 <?php
262 /**
263  * @package MemberDelete
264  * @uses this object is used to display and interact with the member related users
265  * feature.
266  *
267  * @var Init public: call to initialize data/view/action objects
268  * @var Open public: call to open the mamber search module/window
269  * @var Close public: call to close the member search module/window
270  * @var Data public: call to load payload and member display into
271  * MemberRelated object for later use.
272  *
273  * @var InitDataSources private: initialize all data sources/objects
274  * @var InitDataViews private: initialize all data views/objects
275  * @var InitDataActions private: initialize all user actions on html.
276  *
277  * @var EventOpenWindow private: open kendoDialog/kendoWindow objects
278  * @var EventCloseWindow private: close kendoDialog/kendoWindow objects
279  * @var EventPopWindow private: remove the correct window from the window stack.
280  *
281  * @var Info* private: success/error message display.
282  *
283  * @var Event* private: other event functions explained by name.
284  * Some are entensions of kendo objects, others just help with events of html objects.
285  *
286  * @var Validate* private: validation functions for fors and other user
287  * input interactions.
288  *
289  * @var Action* private: these functions are calls from kendoDialog
290  * actions, each explained by function name.
291  */
292 
293 ?>
294 
295 <script type="text/javascript">
296 var MemberDelete = function() {
297  var mdCardContainer = null;
298  var mdCardWindows = null;
299 
300  var mdPayload = null;
301  var mdCall = null;
302  var mdAction = null;
303 
304  var mdDataSource = null;
305  var mdHistory = null;
306  var mdGridLoan = null;
307  var mdGridDeposit = null;
308  var mdGridDataLoan = null;
309  var mdGridDataDeposit = null;
310  var mdTooltip = null;
311 
312  var mdConfirm = null;
313  var mdCancel = null;
314  var mdDelete = null;
315 
316  var ValidateHistoryDirty = function() {
317  var data = null;
318 
319  data = mdGridDeposit.dataSource.data();
320  for (var i = 0; i < data.length; i++) {
321  if (data[i].aDelete) { return true; }
322  }
323 
324  data = mdGridLoan.dataSource.data();
325  for (var i = 0; i < data.length; i++) {
326  if (data[i].aDelete) { return true; }
327  }
328 
329  return false;
330  }
331 
332  var DataAccountsSort = function(data) {
333  if (data.length < 2) {
334  return data;
335  }
336 
337  var middle = Math.floor(data.length / 2);
338  var left = data.slice(0, middle);
339  var right = data.slice(middle);
340 
341  return DataAccountsMerge(DataAccountsSort(left), DataAccountsSort(right));
342  }
343 
344  var DataAccountsMerge = function(left, right) {
345  var sort = [];
346  var xLeft = 0;
347  var xRight = 0;
348 
349  while (xLeft < left.length && xRight < right.length) {
350  if (left[xLeft].aType < right[xRight].aType) {
351  sort.push(left[xLeft++]);
352  } else {
353  sort.push(right[xRight++]);
354  }
355  }
356 
357  return sort.concat(left.slice(xLeft), right.slice(xRight));
358  }
359 
360  var DataBuildHistory = function(data) {
361  mdGridDataLoan = [];
362  mdGridDataDeposit = [];
363  for (var i = 0; i < data.length; i++) {
364  var account = {
365  aCount: parseInt(data[i].a_count),
366  aDesc: data[i].a_desc ? data[i].a_desc.trim() : null,
367  aNumber: data[i].a_number ? data[i].a_number.trim() : null,
368  aRecord: data[i].a_record ? data[i].a_record.trim() : null,
369  aType: data[i].a_type ? data[i].a_type.trim() : null,
370  aDelete: false
371  };
372 
373  if (account.aRecord == "Loan") {
374  mdGridDataLoan.push(account);
375  } else {
376  mdGridDataDeposit.push(account);
377  }
378  }
379 
380  mdGridDataLoan = DataAccountsSort(mdGridDataLoan);
381  mdGridDataDeposit = DataAccountsSort(mdGridDataDeposit);
382  mdGridLoan.dataSource.data(mdGridDataLoan);
383  mdGridDeposit.dataSource.data(mdGridDataDeposit);
384  $("#dp_DFT").prop("checked", false);
385  $("#ln_DFT").prop("checked", false);
386  }
387 
388  var EventCheckBoxChange = function(e) {
389  var box = $(e.target);
390  var boxId = box.attr("id");
391  var boxGrid = boxId.substring(0, 2);
392  var boxType = boxId.substring(3, boxId.length);
393  var boxValue = box.prop("checked");
394 
395  if (!boxValue) {
396  $("input[id=" + boxGrid + "_DFT]").prop("checked", false);
397  }
398 
399  if (boxType == "DFT") {
400  $("input[id^=" + boxGrid + "_]:not(:disabled)").each(function(e) {
401  if (e > 0) {
402  $(this).prop("checked", boxValue);
403  $(this).trigger("change");
404  }
405  });
406  } else {
407  var row = box.closest("tr");
408  var rowItem = boxGrid == "dp" ?
409  mdGridDeposit.dataItem(row) :
410  mdGridLoan.dataItem(row);
411 
412  rowItem.aDelete = boxValue;
413  }
414 
415  var rowCheckAll = true;
416  $("input[id^=" + boxGrid + "_]").closest(".k-grid").find("tr").each(function(i) {
417  var row = $(this);
418  var rowItem = boxGrid == "dp" ?
419  mdGridDeposit.dataItem(row) :
420  mdGridLoan.dataItem(row);
421 
422  if (!rowItem.aDelete && rowItem.aCount > 0) { rowCheckAll = false; }
423  });
424 
425  if (rowCheckAll) {
426  $("#" + boxGrid + "_DFT").prop("checked", true);
427  }
428  }
429 
430  var EventOpenWindow = function(e) {
431  var windowElement = this.element[0];
432  var windowId = windowElement.id;
433 
434  switch (windowId) {
435 
436  }
437 
438  mdCardWindows.push(this);
439  }
440 
441  var EventCloseWindow = function(e) {
442  var windowElement = this.element[0];
443  var windowId = windowElement.id;
444 
445  switch (mdAction) {
446  case "historyDelete":
447  e.preventDefault();
448  if (ValidateHistoryDirty()) {
449  mdConfirm.open();
450  }
451  break;
452  case "deleteConfirm":
453  var data = null;
454  var memberData = {
455  deposit: [], // deposit
456  loan: [] // loan
457  };
458 
459  data = mdGridDeposit.dataSource.data();
460  for (var i = 0; i < data.length; i++) {
461  var item = data[i];
462  if (item.aDelete) {
463  memberData.deposit.push(item);
464  }
465  }
466 
467  data = mdGridLoan.dataSource.data();
468  for (var i = 0; i < data.length; i++) {
469  var item = data[i];
470  if (item.aDelete) {
471  memberData.loan.push(item);
472  }
473  }
474 
475  var memberRequest = {
476  operation: "memberDeleteHistory",
477  payload: mdPayload,
478  mHistory: JSON.stringify(memberData)
479  }
480 
481  mdDataSource.transport.options.read.type = "POST";
482  mdDataSource.read(memberRequest);
483 
484  EventPopWindow(windowId);
485  break;
486  default:
487  EventPopWindow(windowId);
488  if (windowId === "mdDelete") {
489  // reset validator to hub script
490  $.homecuValidator.setup({
491  formStatusField: "formStatus"
492  });
493  }
494  break;
495  }
496 
497  mdAction = null;
498  }
499 
500  var EventPopWindow = function(windowId) {
501  var popIndex = -1;
502  for (var i = 0; i < mdCardWindows.length; i++) {
503  var openWindow = mdCardWindows[i].element[0];
504  var openId = openWindow.id;
505 
506  if (openId == windowId) {
507  popIndex = i;
508  break;
509  }
510  }
511 
512  if (popIndex > -1) {
513  mdCardWindows.splice(popIndex, 1);
514  }
515  }
516 
517  var InitDataSources = function() {
518  mdDataSource = new kendo.data.DataSource({
519  transport: {
520  read: {
521  url: "main.prg",
522  dataType: "json",
523  contentType: "application/x-www-form-urlencoded",
524  type: "GET",
525  data: {
526  ft: "103107"
527  },
528  cache: false
529  }
530  },
531  requestStart: function(request) {
532  showWaitWindow();
533  },
534  requestEnd: function(response) {
535  setTimeout(hideWaitWindow, 500);
536 
537  if (response.hasOwnProperty("response")) {
538  if (response.response.hasOwnProperty("Results")) {
539  var results = response.response.Results;
540 
541  if (results.hasOwnProperty("error")) {
542  $.homecuValidator.homecuResetMessage = true;
543  $.homecuValidator.displayMessage(results.error, $.homecuValidator.settings.statusError);
544  } else if (results.hasOwnProperty("info")) {
545  $.homecuValidator.homecuResetMessage = true;
546  $.homecuValidator.displayMessage(results.info, $.homecuValidator.settings.statusSuccess);
547  }
548  } else {
549  $.homecuValidator.displayMessage("Error Parsing Server", $.homecuValidator.settings.statusError);
550  }
551  } else {
552  $.homecuValidator.displayMessage("Error Parsing Server", $.homecuValidator.settings.statusError);
553  }
554  },
555  schema: {
556  parse: function(response) {
557  var results = null;
558  var resultData = null;
559  var resultOperation = null;
560 
561  if (response.hasOwnProperty("Results")) {
562  results = response.Results;
563  resultData = results.data;
564  resultOperation = results.operation;
565  }
566 
567  if (results.hasOwnProperty("errors")) {
568  return [];
569  }
570 
571  if (resultData == undefined || resultData == null) {
572  return [];
573  }
574 
575  setTimeout(function() {
576  switch (resultOperation) {
577  case "memberReadHistory":
578  DataBuildHistory(resultData.history);
579  mdMember.cardTitle= "Delete Account History";
580  var template= kendo.template($("#titleTemplate").html());
581  mdHistory.title(template(mdMember)).center().open();
582  break;
583  case "memberDeleteHistory":
584  DataBuildHistory(resultData.history);
585  break;
586  }
587  }, 500);
588  return [];
589  }
590  }
591  });
592  }
593 
594  var InitDataViews = function() {
595  mdHistory = $("#mdHistory").kendoWindow({
596  title: "Delete History",
597  minWidth: 300,
598  maxWidth: 768,
599  maxHeight: 900,
600  modal: true,
601  visible: false,
602  resizable: false,
603  activate: EventOpenWindow,
604  close: EventCloseWindow,
605  open: function(e) {
606  this.wrapper.css({ top: 100 });
607  }
608  }).data("kendoWindow");
609 
610  mdGridDeposit = $("#mdGridDeposit").kendoGrid({
611  dataSource: {
612  data: []
613  },
614  dataBound: function() {
615  $("#mdGridDeposit input[id^=dp_]").off();
616  $("#mdGridDeposit input[id^=dp_]").on("change", EventCheckBoxChange);
617  $(this.tbody).find("tr").each(function(i) {
618  var rowData = mdGridDeposit.dataItem(this);
619  var rowColumns = $(this).find("td");
620 
621  $(this).css("cursor", "pointer");
622  $(this).css("background", "transparent");
623 
624  if (rowData.aCount == 0) {
625  $(rowColumns[0]).find("input").attr("disabled", true);
626  $(rowColumns[0]).addClass("vsgDisabled");
627  $(rowColumns[1]).addClass("vsgDisabled");
628  $(rowColumns[2]).addClass("vsgDisabled");
629  $(rowColumns[3]).addClass("vsgDisabled");
630  }
631  });
632  },
633  change: function() {
634  var row = $(this.select());
635  row.removeClass("k-state-selected");
636  row.find("input[id^=dp_]").trigger("click");
637  },
638  selectable: "row",
639  noRecords: {
640  template: "<span class=\"hcu-secondary\"><span class=\"vsgSecondary\">No Records Found</span></span>"
641  },
642  columns: [
643  { field: "aDelete", width: "25px",
644  template: "<input type=\"checkbox\" style=\"margin-top:-2px;\" id=\"dp_#=aType#\"/>",
645  headerTemplate: "<input type=\"checkbox\" style=\"margin-top: -2px;\" id=\"dp_DFT\"/>" },
646  { field: "aType", title: "Account", width: "150px" },
647  { field: "aDesc", title: "Description",
648  template: "#if(aDesc){# <span>#=aDesc#</span> #}else{# <span>(no description)</span> #}#" }
649  ]
650  }).data("kendoGrid");
651 
652  mdGridLoan = $("#mdGridLoan").kendoGrid({
653  dataSource: {
654  data: []
655  },
656  dataBound: function() {
657  $("#mdGridLoan input[id^=ln_]").off();
658  $("#mdGridLoan input[id^=ln_]").on("change", EventCheckBoxChange);
659  $(this.tbody).find("tr").each(function(i) {
660  var rowData = mdGridLoan.dataItem(this);
661  var rowColumns = $(this).find("td");
662 
663  $(this).css("cursor", "pointer");
664  $(this).css("background", "transparent");
665 
666  if (rowData.aCount == 0) {
667  $(rowColumns[0]).find("input").attr("disabled", true);
668  $(rowColumns[0]).addClass("vsgDisabled");
669  $(rowColumns[1]).addClass("vsgDisabled");
670  $(rowColumns[2]).addClass("vsgDisabled");
671  $(rowColumns[3]).addClass("vsgDisabled");
672  }
673  });
674  },
675  change: function() {
676  var row = $(this.select());
677  row.removeClass("k-state-selected");
678  row.find("input[id^=ln_]").trigger("click");
679  },
680  selectable: "row",
681  noRecords: {
682  template: "<span class=\"hcu-secondary\"><span class=\"vsgSecondary\">No Records Found</span></span>"
683  },
684  columns: [
685  { field: "aDelete", width: "25px",
686  template: "<input type=\"checkbox\" style=\"margin-top:-2px;\" id=\"ln_#=aType#\"/>",
687  headerTemplate: "<input type=\"checkbox\" style=\"margin-top: -2px;\" id=\"ln_DFT\"/>" },
688  { field: "aType", title: "Account", width: "150px" },
689  { field: "aDesc", title: "Description",
690  template: "#if(aDesc){# <span>#=aDesc#</span> #}else{# <span>(no description)</span> #}#" }
691  ]
692  }).data("kendoGrid");
693 
694  mdTooltip = homecuTooltip.defaults;
695  mdTooltip.filter = ".vsgDisabled";
696  mdTooltip.content = "This sub-account has no transaction history";
697  $("#mdGridDeposit").kendoTooltip(mdTooltip);
698  $("#mdGridLoan").kendoTooltip(mdTooltip);
699 
700  mdConfirm = $("#mdConfirm").kendoDialog({
701  title: "Confirm Delete",
702  minWidth: 300,
703  maxWidth: 900,
704  visible: false,
705  resizable: false,
706  show: EventOpenWindow,
707  close: EventCloseWindow,
708  actions: [
709  { text: "No",
710  action: function() { mdAction = "deleteDeny"; }
711  },
712  { text: "Yes", primary: true,
713  action: function() { mdAction = "deleteConfirm"; }
714  }
715  ]
716  }).data("kendoDialog");
717 
718  mdCancel = $("#lnkCancel");
719  mdDelete = $("#btnUpdate");
720  mdStatus = $("#mdStatus");
721  mdStatus.hide();
722  }
723 
724  var InitDataActions = function() {
725  mdCancel.off();
726  mdCancel.on("click", function() { mdAction = "historyCancel"; mdHistory.close(); });
727  mdDelete.off();
728  mdDelete.on("click", function() { mdAction = "historyDelete"; mdHistory.close(); });
729  }
730 
731  this.Data = function(message, member) {
732  mdPayload = message;
733  mdMember = member;
734  }
735 
736  this.Open = function(windowStack) {
737  // setup validator
738  $.homecuValidator.setup({
739  formStatusField: "status",
740  });
741 
742  mdCardWindows = windowStack;
743  var memberRequest = {
744  operation: "memberReadHistory",
745  payload: mdPayload
746  };
747 
748  mdDataSource.transport.options.read.type = "POST";
749  mdDataSource.read(memberRequest);
750  }
751 
752  this.Close = function() {
753  mdHistory.destroy();
754  mdConfirm.destroy();
755  }
756 
757  this.Init = function(hubCall, cardContainer) {
758  mdCall = hubCall;
759  mdCardContainer = cardContainer;
760 
761  InitDataSources();
762  InitDataViews();
763  InitDataActions();
764 
765  mdCall("MemberDelete", this);
766  }
767 }
768 </script>
769 <?php }