Odyssey
aMemberImages.prg
1 <?php
2 /**
3  * @package MemberHub
4  * @author MGHandy
5  *
6  * @uses this script facilitates in viewing check images associated
7  * with this member account.
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  *
15  * @return json
16  */
17 require_once("$admLibrary/aMemberSupport.i");
18 require_once(dirname(__FILE__) . "/../../shared/library/hcuTranslate.i");
19 require_once(dirname(__FILE__) . "/../../shared/library/hcuCommon.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  "data" => array("filter" => FILTER_SANITIZE_STRING)
27  );
28  HCU_ImportVars($admVars, "MEMBER_IMAGES", $admOk);
29 
30  $iOperation = isset($admVars["MEMBER_IMAGES"]["operation"]) ? $admVars["MEMBER_IMAGES"]["operation"] : null;
31  $iPayload = isset($admVars["MEMBER_IMAGES"]["payload"]) ? $admVars["MEMBER_IMAGES"]["payload"] : null;
32  $iData = isset($admVars["MEMBER_IMAGES"]["data"]) ? $admVars["MEMBER_IMAGES"]["data"] : null;
33 
34  $iMember = $iPayload ?
35  MemberDecrypt($SYSENV, $Cu, $iPayload) :
36  null;
37 
38  $iContext = $iPayload ?
39  MemberContext($SYSENV, $Cu, $iMember['member']) :
40  MemberContext($SYSENV, $Cu);
41 
42  $aryResult = array();
43  $aryReply = array();
44 
45  switch ($iOperation) {
46  case "":
48  break;
49  case "memberReadData":
50  header('Content-type: application/json');
51 
52  $iAccounts = MemberReadAccounts($SYSENV, $dbh, $iContext);
53  $iRTNumbers = MemberReadRTNumbers($SYSENV, $dbh, $iContext);
54  $iMicrs = MemberReadMicrs($SYSENV, $dbh, $iContext);
55 
56  $aryResult['data']['accounts'] = $iAccounts['accounts'];
57  $aryResult['data']['rtnumbers'] = $iRTNumbers['rtnumbers'];
58  $aryResult['data']['micrs'] = $iMicrs['micrs'];
59  MemberReply($aryResult, $aryReply, $iOperation);
60  break;
61  case "memberReadImage":
62  $iCheck = MemberValidateCheck($SYSENV, $iContext, $iData);
63  $iVendor = MemberReadVendor($SYSENV, $dbh, $iContext);
64  $iImage = $iMember['member']['m_image'];
65 
66  // if vendor has changed while visiting this card
67  // use changed vendor instead.
68  if ($iImage != $iVendor['vendor']['image']) {
69  $iImage = $iVendor['vendor']['image'];
70  }
71 
72  // if credit union not set up, don't get image.
73  if ($iImage == "NO") {
74  throw new Exception("Currently your credit union is not set up to view check images online.");
75  }
76 
77  # pass micr as $sk (sortkey)
78  # for MidAt clients using tracenumber, not micr, for image retrieval
79  /*
80  * changed 12/19/12 if FEDIMAGE, send check_number; if MAC send check_micr; else send ''
81  * so old legacy hacks for FEDIMAGE and MAC still work without breaking new alternate MICR for
82  * WASATCH / ISUCU
83  *
84  * Apparently lost these changes on the switch from ImageSRC to ImageSOLO (Mammoth upgrade)
85  * but really do need them...
86  */
87  $sk='';
88  if ($iImage == 'FEDIMAGE') {
89  $sk = $iCheck['check'];
90  } elseif ($iImage == 'MAC') {
91  $sk = $iCheck['micr'];
92  } else {
93  $sk = '';
94  }
95 
96  $CKINFOPARTS = "{$iContext['cu_code']}|{$iImage}|{$iCheck['check']}|{$iCheck['amount']}|{$iCheck['date']}|{$iCheck['rt']}|{$iCheck['micr']}|{$iContext['m_account']}|$sk";
97  $CKITEM = hcu_encrypturl($CKINFOPARTS, $chk_key);
98  $CKDMSKEY = sha1("{$iContext['cu_code']}{$iImage}{$iCheck['check']}{$iCheck['amount']}{$iCheck['date']}{$iCheck['rt']}{$iCheck['micr']}1{$iContext['m_account']}cierto");
99  $CKURL = "{$http_scheme}://{$_SERVER['HTTP_HOST']}/banking/ImageSOLO.prg?cu=$Cu&CKITEM=$CKITEM&CKHASH=$CKDMSKEY&CKARCHIVE=1&adm=1";
100 
101  $aryResult['data']['url'] = $CKURL;
102  MemberReply($aryResult, $aryReply, $iOperation);
103  break;
104  default:
105  throw new Exception("Unknown server request: " . $iOperation);
106  break;
107  }
108 
109 } catch (Exception $e) {
110  $aryReply['errors'][] = $e->getMessage();
111  $aryResult['data'] = array();
112  $aryResult['info'] = array();
113 
114  MemberReply($aryResult, $aryReply, $iOperation);
115  exit;
116 }
117 
118 function MemberReadVendor($pEnv, $pDbh, $pContext) {
119  $cuTable = $pContext['cu_table'];
120  $cuCode = $pContext['cu_code'];
121 
122  $sqlReturn = array();
123  $sqlSelect = "
124  SELECT TRIM(img) AS image, flagset
125  FROM cuadmin
126  WHERE cu = '$cuCode'";
127  $sqlSelectRs = db_query($sqlSelect, $pDbh);
128  if (!$sqlSelectRs) {
129  $pEnv['logger']->error(db_last_error());
130  throw new Exception("Failed to read check image vendor.");
131  }
132 
133  $sqlReturn['vendor'] = db_fetch_all($sqlSelectRs)[0];
134  return $sqlReturn;
135 }
136 
137 function MemberValidateCheck($pEnv, $pContext, $pCheck) {
138 
139  $hCheck = html_entity_decode($pCheck, ENT_QUOTES);
140  $jCheck = HCU_JsonDecode($hCheck);
141  $jTime = strtotime($jCheck['date']);
142 
143  $mValidate = array(
144  "micr" => prep_save($jCheck['micr'], 17),
145  "check" => intval($jCheck['check']),
146  "amount" => number_format(floatval($jCheck['amount']), 2, '.', ''),
147  "date" => date("m/d/Y", $jTime),
148  "rt" => prep_save($jCheck['rt'], 12)
149  );
150 
151  return $mValidate;
152 }
153 
154 function MemberReadAccounts($pEnv, $pDbh, $pContext) {
155  $cuTable = $pContext['cu_table'];
156  $cuCode = $pContext['cu_code'];
157  $cuMember = $pContext['m_account'];
158 
159  $sqlReturn = array();
160  $sqlColumns = "
161  ab.accounttype AS a_type,
162  ab.description AS a_desc,
163  ab.micraccount AS a_micr";
164  $sqlSelect = "
165  SELECT $sqlColumns
166  FROM {$cuTable}accountbalance ab
167  WHERE ab.accountnumber = '$cuMember'
168  AND ab.deposittype = 'Y'
169  ORDER BY ab.accounttype";
170  $sqlSelectRs = db_query($sqlSelect, $pDbh);
171  if (!$sqlSelectRs) {
172  $pEnv['logger']->error(db_last_error());
173  throw new Exception("Failed to read member sub accounts.");
174  }
175 
176  $sqlReturn['accounts'] = db_fetch_all($sqlSelectRs);
177  return $sqlReturn;
178 }
179 
180 function MemberReadRTNumbers($pEnv, $pDbh, $pContext) {
181  $cuTable = $pContext['cu_table'];
182  $cuCode = $pContext['cu_code'];
183  $cuMember = $pContext['m_account'];
184 
185  $sqlReturn = array();
186 
187  $sqlSelect = "
188  SELECT rt, 'P' AS pri FROM cuadmin WHERE cu ='$cuCode'
189  UNION ALL
190  SELECT rt, 'X' AS pri FROM cualtroute WHERE cu ='$cuCode'
191  ORDER BY 2,1";
192 
193  $sqlSelectRs = db_query($sqlSelect, $pDbh);
194  if (!$sqlSelectRs) {
195  $pEnv['logger']->error(db_last_error());
196  throw new Exception("Failed to read member routing / transit numbers.");
197  }
198 
199  $sqlReturn['rtnumbers'] = db_fetch_all($sqlSelectRs);
200  return $sqlReturn;
201 }
202 
203 function MemberReadMicrs($pEnv, $pDbh, $pContext) {
204  $cuTable = $pContext['cu_table'];
205  $cuCode = $pContext['cu_code'];
206  $cuMember = $pContext['m_account'];
207 
208  $sqlReturn = array();
209  $sqlColumns = "
210  om.startcheck AS o_check,
211  om.rt AS o_rt,
212  om.micraccount AS o_micr,
213  om.accounttype AS o_type";
214  $sqlSelect = "
215  SELECT $sqlColumns
216  FROM cuovermicr om
217  WHERE cu = '{$cuCode}'
218  AND om.accountnumber = '$cuMember'";
219  $sqlSelectRs = db_query($sqlSelect, $pDbh);
220  if (!$sqlSelectRs) {
221  $pEnv['logger']->error(db_last_error());
222  throw new Exception("Failed to read member mict values.");
223  }
224 
225  $sqlReturn['micrs'] = db_fetch_all($sqlSelectRs);
226  return $sqlReturn;
227 }
228 ?>
229 
230 <?php
231 /**
232  * @package PrintMemberImages
233  * @uses print neccessary html/javascript to run the selected card
234  */
235 function PrintMemberImages() { ?>
236 
237 <div id="miImages">
238  <div id="status"></div>
239 
240  <div class="row hcuSpacer">
241  <div class="col-sm-5">
242  <label for="inpAcct">Sub-Account</label>
243  </div>
244  <div class="col-sm-7">
245  <input type="text" id="inpAcct" class="hcu-all-100"
246  data-role="dropdownlist"
247  data-text-field="aView"
248  data-value-field="aType"
249  data-bind="
250  source: sourceAccounts,
251  value: source.aType,
252  events: { change: changeDropDown }">
253  </div>
254  </div>
255 
256  <div class=""
257  data-bind="visible: sourceVisible">
258  <div class="hcuSpacer">
259  <label for="miGrid">MICR Override List</label>
260  <div id="miGrid"
261  data-role="grid"
262  data-no-records="
263  { template: 'No MICR overrides were found for this account' }
264  "
265  data-bind="
266  source: sourceMicrs"
267  data-columns="[
268  { field: 'oCheck', title: 'Starting Check Number' },
269  { field: 'oRt', title: 'Routing &amp; Transit Number' },
270  { field: 'oMicr', title: 'MICR Account Number' }
271  ]"></div>
272  &nbsp;
273  </div>
274 
275  <div class="row hcuSpacer">
276  <div class="col-sm-5">
277  <label for="inpMicr">MICR Account Number</label>
278  </div>
279  <div class="col-sm-7">
280  <input type="text" class="hcu-all-100"
281  id="inpMicr" name="inpMicr"
282  maxlength="17"
283  data-role="numerictextbox"
284  data-spinners="false"
285  data-format="#"
286  data-min="0"
287  data-bind="
288  value: source.aMicr,
289  events: { change: changeInput }"
290  data-required-msg="MICR account number is required"
291  required>
292  </div>
293  </div>
294 
295  <div class="row hcuSpacer">
296  <div class="col-sm-5">
297  <label for="inpCheckNumber">Check Number</label>
298  </div>
299  <div class="col-sm-7">
300  <input type="text" class="hcu-all-100"
301  id="inpCheckNumber" name="inpCheckNumber"
302  maxlength="9"
303  data-role="numerictextbox"
304  data-spinners="false"
305  data-format="#"
306  data-decimals="0"
307  data-min="0"
308  data-bind="
309  events: { change: changeInput }"
310  data-required-msg="Check number is required"
311  required>
312  </div>
313  </div>
314 
315  <div class="row hcuSpacer">
316  <div class="col-sm-5">
317  <label for="inpCheckAmount">Check Amount</label>
318  </div>
319  <div class="col-sm-7">
320  <input type="text" class="hcu-all-100"
321  id="inpCheckAmount" name="inpCheckAmount"
322  maxlength="14"
323  data-role="numerictextbox"
324  data-spinners="false"
325  data-format="c2"
326  data-decimals="2"
327  data-min="0"
328  data-bind="
329  events: { change: changeInput }"
330  data-required-msg="Check amount is required"
331  required>
332  </div>
333  </div>
334 
335  <div class="row hcuSpacer">
336  <div class="col-sm-5">
337  <label for="inpCheckDate">Check Date</label>
338  </div>
339  <div class="col-sm-7">
340  <input type="text" class="hcu-all-100"
341  id="inpCheckDate" name="inpCheckDate"
342  homecu-match="date"
343  data-role="datepicker"
344  data-bind="
345  events: { change: changeInput }"
346  data-required-msg="Check date is required"
347  data-homecuCustomMatch-msg="Check Date is not the correct format"
348  required>
349  </div>
350  </div>
351 
352  <div class="row hcuSpacer">
353  <div class="col-sm-5">
354  <label for="inpCheckRTNumber">Routing &amp; Transit Number</label>
355  </div>
356  <div class="col-sm-7">
357  <input type="text" class="hcu-all-100"
358  id="inpCheckRTNumber" name="inpCheckRTNumber"
359  data-role="dropdownlist"
360  data-text-field="rtNumber"
361  data-value-field="rtNumber"
362  data-bind="
363  source: sourceRTNumbers"
364  data-required-msg="Routing number is required"
365  required>
366  </div>
367  </div>
368  </div>
369 
370  <div class="hcu-template">
371  <div class="hcu-edit-buttons k-state-default">
372  <span class="hcu-icon-delete">
373  <!--<a href="##" id="lnkDelete">
374  <i class="fa fa-trash fa-lg"></i>
375  </a>-->
376  </span>
377  <a href="##" id="lnkCancel">Cancel</a>
378  &ensp;
379  <a href="##" id="btnUpdate" class="k-button k-primary">
380  <i class="fa fa-search fa-lg"></i>
381  View Image
382  </a>
383  </div>
384  </div>
385 </div>
386 
387 <div id="miImageView"></div>
388 <?php
389 /**
390  * @package MemberImages
391  * @uses this object is used to display and interact with the member check images
392  * feature.
393  *
394  * @var Init public: call to initialize data/view/action objects
395  * @var Open public: call to open the mamber search module/window
396  * @var Close public: call to close the member search module/window
397  * @var Data public: call to load payload and member display into
398  * MemberRelated object for later use.
399  *
400  * @var InitDataSources private: initialize all data sources/objects
401  * @var InitDataViews private: initialize all data views/objects
402  * @var InitDataActions private: initialize all user actions on html.
403  *
404  * @var EventOpenWindow private: open kendoDialog/kendoWindow objects
405  * @var EventCloseWindow private: close kendoDialog/kendoWindow objects
406  * @var EventPopWindow private: remove the correct window from the window stack.
407  *
408  * @var Info* private: success/error message display.
409  *
410  * @var Event* private: other event functions explained by name.
411  * Some are entensions of kendo objects, others just help with events of html objects.
412  *
413  * @var Validate* private: validation functions for fors and other user
414  * input interactions.
415  */
416 
417 ?>
418 
419 <script type="text/javascript">
420 //# sourceURL=memberRelated.js
421 var MemberImages = function() {
422  var miCardContainer = null;
423  var miCardWindows = null;
424 
425  var miPayload = null;
426  var miMember = null;
427  var miCall = null;
428  var miAction = null;
429 
430  var miImages = null;
431  var miImagesCancel = null;
432  var miImagesSearch = null;
433  var miObserve = null;
434 
435  var miDataSource = null;
436  var miDataMicrs = null;
437  var miDataAccounts = null;
438  var miDataRTNumbers = null;
439 
440  var miImageView = null;
441 
442  var ShowCheckImage = function(url) {
443  // Empty
444  $("#miImageView").empty();
445  $("#miImageView").kendoWindow({
446  modal: true,
447  visible: false,
448  resizable: false,
449  title: "Check Image",
450  width: 700,
451  height: 600,
452  open: EventOpenWindow,
453  close: EventCloseWindow,
454  content: url,
455  actions: ['Print', 'Close']
456  });
457 
458  $("#miImageView").data("kendoWindow").wrapper
459  .find(".k-i-print").parent().off();
460 
461  $("#miImageView").data("kendoWindow").wrapper
462  .find(".k-i-print").parent().click(function(e) {
463  e.preventDefault();
464  window.open(url);
465  miAction = "checkPrint";
466  });
467 
468 
469  $("#miImageView").data("kendoWindow").center().open();
470  }
471 
472  var DataBuildMicrs = function(data) {
473  miDataMicrs = [];
474  for (var i = 0; i < data.length; i++) {
475  var micr = {};
476 
477  micr.oType = data[i].o_type.trim();
478  micr.oRt = data[i].o_rt.trim();
479  micr.oMicr = data[i].o_micr.trim();
480  micr.oCheck = data[i].o_check.trim();
481 
482  miDataMicrs.push(micr);
483  }
484 
485  miObserve.set("sourceMicrs", miDataMicrs);
486  }
487 
488  var DataBuildAccounts = function(data) {
489  miDataAccounts = [];
490  for (var i = 0; i < data.length; i++) {
491  var acct = {};
492 
493  acct.aDesc = data[i].a_desc.trim();
494  acct.aMicr = data[i].a_micr.trim();
495  acct.aType = data[i].a_type.trim();
496  acct.aView = acct.aType + " - " + acct.aDesc;
497 
498  miDataAccounts.push(acct);
499  }
500 
501  miObserve.set("sourceAccounts", miDataAccounts);
502  miObserve.setUp(miDataAccounts[0]);
503  }
504 
505  var DataBuildRTNumbers = function(data) {
506  miDataRTNumbers = [];
507  for (var i = 0; i < data.length; i++) {
508  var rtnum = {};
509 
510  rtnum.rtNumber = data[i].rt.trim();
511 
512  miDataRTNumbers.push(rtnum);
513  }
514 
515  miObserve.set("sourceRTNumbers", miDataRTNumbers);
516  }
517 
518  var EventSwapImages = function(e) {
519  e.preventDefault();
520 
521  $("#miImageView").load($(this).attr("href"), function(e) {
522  $("#miImageView").find("a#ckViewBtn").off();
523  $("#miImageView").find("a#ckViewBtn").on("click", EventSwapImages);
524  });
525  }
526 
527  var EventOpenWindow = function(e) {
528  var windowElement = this.element[0];
529  var windowId = windowElement.id;
530 
531  switch (windowId) {
532  case "miImageView":
533 
534  break;
535  }
536 
537  miCardWindows.push(this);
538  }
539 
540  var EventCloseWindow = function(e) {
541  var windowElement = this.element[0];
542  var windowId = windowElement.id;
543 
544  switch (miAction) {
545  case "searchSubmit":
546  e.preventDefault();
547  if ($.homecuValidator.validate()) {
548  var memberData = {
549  micr: $("#inpMicr").data("kendoNumericTextBox").value(),
550  check: $("#inpCheckNumber").data("kendoNumericTextBox").value(),
551  amount: $("#inpCheckAmount").data("kendoNumericTextBox").value(),
552  date: $("#inpCheckDate").data("kendoDatePicker").value(),
553  rt: $("#inpCheckRTNumber").data("kendoDropDownList").value()
554  };
555 
556  var request = {
557  operation: "memberReadImage",
558  payload: miPayload,
559  data: JSON.stringify(memberData)
560  };
561 
562  miDataSource.transport.read.type = "POST";
563  miDataSource.read(request);
564  }
565  break;
566  case "checkPrint":
567  e.preventDefault();
568  break;
569  default:
570  EventPopWindow(windowId);
571 
572  // set validator back to hub script
573  $.homecuValidator.setup({
574  formStatusField: "formStatus",
575  formValidate: "cardContainerDiv"
576  });
577  break;
578  }
579 
580  miAction = null;
581  }
582 
583  var EventPopWindow = function(windowId) {
584  var popIndex = -1;
585  for (var i = 0; i < miCardWindows.length; i++) {
586  var openWindow = miCardWindows[i].element[0];
587  var openId = openWindow.id;
588 
589  if (openId == windowId) {
590  popIndex = i;
591  break;
592  }
593  }
594 
595  if (popIndex > -1) {
596  miCardWindows.splice(popIndex, 1);
597  }
598  }
599 
600  var InitDataSources = function() {
601  miDataSource = new kendo.data.DataSource({
602  transport: {
603  read: {
604  url: "main.prg",
605  dataType: "json",
606  contentType: "application/x-www-form-urlencoded",
607  type: "GET",
608  cache: false,
609  data: {
610  ft: "103109"
611  }
612  }
613  },
614  requestStart: function(request) {
615  showWaitWindow();
616  },
617  requestEnd: function(response) {
618  setTimeout(hideWaitWindow, 500);
619 
620  if (response.hasOwnProperty("response")) {
621  if (response.response.hasOwnProperty("Results")) {
622  var results = response.response.Results;
623 
624  if (results.hasOwnProperty("error")) {
625  $.homecuValidator.homecuResetMessage = true;
626  $.homecuValidator.displayMessage(results.error, $.homecuValidator.settings.statusError);
627  } else if (results.hasOwnProperty("info")) {
628  $.homecuValidator.homecuResetMessage = true;
629  $.homecuValidator.displayMessage(results.info, $.homecuValidator.settings.statusSuccess);
630  }
631  } else {
632  $.homecuValidator.displayMessage("Error Parsing Server", $.homecuValidator.settings.statusError);
633  }
634  } else {
635  $.homecuValidator.displayMessage("Error Parsing Server", $.homecuValidator.settings.statusError);
636  }
637  },
638  schema: {
639  parse: function(response) {
640 
641  var results = null;
642  var resultData = null;
643  var resultOperation = null;
644 
645  if (response.hasOwnProperty("Results")) {
646  results = response.Results;
647  resultData = results.data;
648  resultOperation = results.operation;
649  } else {
650  return [];
651  }
652 
653  if (results.hasOwnProperty("errors")) {
654  return [];
655  }
656 
657  if (resultData == undefined || resultData == null) {
658  return [];
659  }
660 
661  setTimeout(function() {
662  switch (resultOperation) {
663  case "memberReadData":
664  DataBuildMicrs(resultData.micrs);
665  DataBuildRTNumbers(resultData.rtnumbers);
666  DataBuildAccounts(resultData.accounts);
667 
668  miMember.cardTitle= "View Check Images";
669  var template= kendo.template($("#titleTemplate").html());
670  miImages.title(template(miMember)).center().open();
671  break;
672  case "memberReadImage":
673  ShowCheckImage(resultData.url);
674  break;
675  }
676  }, 500);
677 
678  return [];
679  }
680  }
681  });
682  }
683 
684  var InitDataViews = function() {
685  miImages = $("#miImages").kendoWindow({
686  title: "View Check Image",
687  modal: true,
688  minWidth: 500,
689  maxWidth: 750,
690  visible: false,
691  resizable: false,
692  activate: EventOpenWindow,
693  close: EventCloseWindow,
694  open: function(e) { this.wrapper.css({ top: 100 }); }
695  }).data("kendoWindow");
696 
697  miImagesCancel = $("#lnkCancel");
698  miImagesSearch = $("#btnUpdate");
699 
700  miObserve = new kendo.observable({
701  sourceAccounts: [],
702  sourceRTNumbers: [],
703  sourceMicrs: [],
704  source: null,
705  sourceVisible: false,
706  setUp: function(account) {
707  if (account) {
708  this.set("source", account);
709  this.set("sourceVisible", true);
710 
711  var filter = { field: "oType", operator: "eq", value: account.aType };
712  $("#miGrid").data("kendoGrid").dataSource.filter(filter);
713  }
714  },
715  changeDropDown: function(e) {
716  var index = e.sender.selectedIndex;
717  var account = miDataAccounts[index];
718  this.setUp(account);
719  },
720  changeInput: function(e) {
721  if (!e.sender.value()) {
722  e.sender.wrapper.css("border", "1px solid #d80000");
723  } else {
724  e.sender.wrapper.css("border", "none");
725  }
726  }
727  });
728 
729  kendo.bind("#miImages", miObserve);
730  miStatus = $("#miStatus");
731  miStatus.hide();
732  }
733 
734  var InitDataActions = function() {
735  miImagesSearch.off();
736  miImagesSearch.on("click", function(e) {
737  miAction = "searchSubmit";
738  miImages.close();
739  });
740 
741  miImagesCancel.off();
742  miImagesCancel.on("click", function(e) {
743  miImages.close();
744  });
745 
746  $("#inpCheckAmount").on("change", function(e) {
747  var input = $(this);
748  var value = input.val();
749  var valueSplit = value.split(".");
750  value = valueSplit[0].substring(0, 11);
751 
752  if (valueSplit[1]) {
753  value += ".";
754  value += valueSplit[1].substring(0, 2);
755  }
756 
757  var kendoInput = $("#inpCheckAmount").data("kendoNumericTextBox");
758  kendoInput.value(value);
759  });
760  }
761 
762  this.Data = function(message, member) {
763  miPayload = message;
764  miMember = member;
765  }
766 
767  this.Open = function(windowStack) {
768  // setup validator
769  $.homecuValidator.setup({
770  formStatusField: "status",
771  formValidate: "miImages"
772  });
773 
774  miCardWindows = windowStack;
775  var memberRequest = {
776  operation: "memberReadData",
777  payload: miPayload
778  };
779 
780  miDataSource.transport.options.read.type = "POST";
781  miDataSource.read(memberRequest);
782  }
783 
784  this.Close = function() {
785  $("#inpAcct").data("kendoDropDownList").destroy();
786  $("#inpCheckRTNumber").data("kendoDropDownList").destroy();
787  $("#inpCheckDate").data("kendoDatePicker").destroy();
788 
789  if ($("#miImageView").data("kendoWindow")) {
790  $("#miImageView").data("kendoWindow").destroy();
791  }
792 
793  miImages.destroy();
794  }
795 
796  this.Init = function(hubCall, cardContainer) {
797  miCall = hubCall;
798  miCardContainer = cardContainer;
799 
800  InitDataSources();
801  InitDataViews();
802  InitDataActions();
803 
804  miCall("MemberImages", this);
805  }
806 }
807 </script>
808 <?php }