Odyssey
hcuMobilePayPayment.prg
1 <?php
2  /*
3  * File: hcuMobilePayPayment.prg
4  *
5  * Purpose: This script will show the main processing payments/transfers
6  * pages for mobile banking.
7  * Added: Recurring payment features
8  *
9  * Created by KKL
10  * Updated by ENR
11  *
12  */
13 
14  $serviceViewFromCUAdmin = (isset($serviceViewFromCUAdmin) ? $serviceViewFromCUAdmin : false);
15  if (!$serviceViewFromCUAdmin) {
16  // ** SET SCRIPT LEVEL VARIABLES
17  $serviceShowInfo = true;
18  $serviceLoadMenu = true;
19  $serviceShowMenu = true;
20  $serviceLiveCheck = true;
21  // ** INCLUDE MAIN GLOBAL SCRIPT -- Handles security / global variable values
22  require_once(dirname(__FILE__) . '/../library/hcuService.i');
23  }
24 
25  require_once(dirname(__FILE__) . '/hcuMobilePay.plugin');
26  require_once(dirname(__FILE__) . '../../../shared/library/cutrusted.i');
27  /*
28  * ** CHECK USER FEATURE PERMISSIONS **
29  * NOTE: DOES NOT RETURN ON FAILURE
30  */
31 
32  PermCheckFeatureScreen($dbh, $HB_ENV, $MC, FEATURE_BASIC);
33 
34  // ** INSERT BUSINESS LOGIC FOR THIS FORM
35  $inputVars = array();
36  $varOk = array("mp_token"=>"string", "mp_type"=>"string", "datemodel"=>"string", "allowp2p"=>"string");
37  HCU_ImportVars( $inputVars, "", $varOk );
38  //0217 copy paste start
39  // extract the encrypted stuff
40  if ( strpos( $inputVars['mp_token'], "=" ) !== false ||
41  strpos( $inputVars['mp_token'], "+" ) !== false ) {
42  // already decoded
43  $decodedToken = $inputVars['mp_token'];
44  $encodedToken = urlencode( $inputVars['mp_token'] );
45  } else {
46  $encodedToken = $inputVars['mp_token'];
47  $decodedToken = urldecode( $inputVars['mp_token'] );
48  }
49 
50  $commonString = hcu_decrypturl( $decodedToken, $HB_ENV['2factorkey']);
51 
52  parse_str( $commonString, $commonParms );
53 
54  $mpVendorKey = $commonParms["mpVendor"];
55  $mpAccount = $commonParms["mpAccount"];
56  $mpDateModel = strtolower($commonParms["mpDateModel"]);
57  $mpToken = $commonParms["mpToken"];
58  $mobilePayName = $commonParms["mpName"];
59  //pulling permission from vendor/cu to allow P2P type Payees
60  $allowP2P = $commonParms["allowp2p"];
61 
62  $frequencyList = GetBillingFreq($HB_ENV["MC"]);
63 
64  // extras need to be in an array
65  $extrasString = str_replace( "|", "&", $commonParms["mpExtras"] );
66  $extrasString = str_replace( ":", "=", $extrasString );
67  parse_str( $extrasString, $mpExtras );
68 
69  $mpType = $inputVars["mp_type"];
70 
71  //pulling permission from trusted details for Recurring Payment controls
72  if ( HCU_array_key_value('Recur', $mpExtras) == 1 ) {
73  $allowRecur = "true";
74  } else {
75  $allowRecur = "false";
76  }
77 
78  if (strlen( $mpToken )) {
79  // ** SUCCESS -- FETCH REQUESTED TRANSACTIONS
80  $mobilePayParams = array();
81  $mobilePayParams["MP_VENDOR"] = $mpVendorKey;
82  $mobilePayParams["MP_ACTION"] = $mpType == "Scheduled" ? "MP_SCHEDULED" : "MP_HISTORY";
83  $mobilePayParams["MP_ACCOUNT"] = $mpAccount;
84  $mobilePayParams["Token"] = $mpToken;
85 
86  // turn the extra options into a string like: key1:value1|key2:value2|key3:value3...
87  $extrasString = "";
88  foreach ($mpExtras as $key => $val) {
89  if ( strlen( $extrasString ) > 0 ) $extrasString .= "|";
90  $extrasString .= "$key:$val";
91  }
92 
93  // set up common parameters
94  $commonURL = "mpToken=$mpToken&mpVendor=$mpVendorKey&mpDateModel=$mpDateModel&mpName=$mobilePayName&mpExtras=$extrasString&allowp2p=$allowP2P&mpAccount=$mpAccount";
95  $encryptedCommonURL = hcu_encrypturl( $commonURL, $HB_ENV['2factorkey'] );
96  $encodedCommonURL = urlencode( $encryptedCommonURL );
97 
98  } else {
99  // no token
100  // show error message
101  $serviceErrorMsg = $MC->msg('Feature Not Set', HCU_DISPLAY_AS_HTML);
102  $serviceErrorCode = '915';
103  require_once(dirname(__FILE__) . '/../includes/hcuErrorPage.i');
104  // ** DO NOT CONTINUE
105  exit;
106  }
107 
108  //this is the header and side menu
109  // ** INCLUDE PRE CONTENT SCRIPT
110  require_once(dirname(__FILE__) . '/../includes/hcuPreContent.i');
111 ?>
112 <!-- kendo mobile -->
113 <style>
114 .btn-group-wrap {
115  text-align: center;
116 }
117 
118 .btn-group {
119  text-align: center;
120 }
121 
122 .k-radio-label {
123  padding-bottom: .5em;
124  font-weight: normal;
125 }
126 
127 h6 {
128  font-weight: bold;
129  padding-bottom: .5em;
130 }
131 
132 #payNum {
133  padding-bottom: .5em;
134 }
135 
136 </style>
137 
138 <div id="confirmationWindow"></div>
139  <div id="confirmSaveTemplate"></div>
140  <!-- Edit Payment -->
141  <div id="editPaymentWindow" name="editPaymentWindow" class="container-fluid"><!-- DISPLAY NONE -->
142  <div class="row" style="margin: 10px 0px 10px 0px;">
143  <span class="hcu-breadcrumbs"><a href='hcuMobilePay.prg?mp_token=<?php echo $encodedCommonURL ?>&<?php echo $HB_ENV['cuquery'] ?>' class="tabReturnBtn"><?php echo $mobilePayName . " " . $MC->msg("Menu", HCU_DISPLAY_AS_HTML) ?></a> / <span class="realname"><?php if ($mpType == "Payment") : ?><?php echo $MC->msg("New Payment", HCU_DISPLAY_AS_HTML) ?><?php else : ?><?php echo $MC->msg("New Transfer", HCU_DISPLAY_AS_HTML) ?><?php endif; ?></span></span>
144  </div>
145  <div class="row">
146  <div class="k-content col-xs-12 " style="max-width: 600px;">
147  <div id="editPaymentFormStatus" class="homecu-formStatus k-block k-error-colored" style="display:none; margin-bottom:10px;max-width:800px;"></div>
148  <div id='editErrors'></div>
149  <div class="form-horizontal form-widgets well well-sm">
150  <!-- Pay or Transfer to -->
151  <div class="form-group">
152  <div class="">
153  <label class="col-sm-12" for="payTo" id="editPayTo">
154  </label>
155  <div class="col-sm-12">
156  <input id='payTo' class='distinctAcct hcu-all-100' name='payTo'
157  data-role='dropdownlist'
158  data-bind='value: bpToId, events:{change: setDirty}'
159  data-required-msg="<?php echo $MC->msg("Payee is required", HCU_DISPLAY_AS_HTML) ?>"
160  required />
161  </div>
162  </div>
163  </div>
164  <!-- from ACCOUNT -->
165  <div class="form-group">
166  <div class="">
167  <label class="col-sm-12" for="toFrom" id="editToFrom"><?php echo $MC->msg("Account", HCU_DISPLAY_AS_HTML)?>
168  </label>
169  <div class="col-sm-12">
170  <input id='toFrom' class='distinctAcct hcu-all-100' name='toFrom'
171  data-role='dropdownlist'
172  data-bind='value: bpFromId, events:{change: setDirty}'
173  data-required-msg="<?php echo $MC->msg("Account is required", HCU_DISPLAY_AS_HTML)?>"
174  required />
175  </div>
176  </div>
177  </div>
178  <!-- AMOUNT -->
179  <div class="form-group">
180  <div class="">
181  <label class="col-sm-12" for="payAmount"><?php echo $MC->msg('Amount', HCU_DISPLAY_AS_HTML); ?>
182  <span class="hcu-required-field"><sup>*</sup></span></label>
183  <div class="col-sm-12">
184  <input type="number" id="payAmount" name="payAmount" class="hcu-all-100"
185  placeholder="<?php echo $MC->msg('Amount', HCU_DISPLAY_AS_HTML); ?>"
186  data-bind="value: bpAmt, events:{change: setDirty}"
187  data-required-msg="<?php echo $MC->msg('Amount Missing', HCU_DISPLAY_AS_HTML); ?>"
188  required />
189  </div>
190  </div>
191  </div>
192  <!-- Process Date -->
193  <div class="form-group">
194  <div class="">
195  <label class="col-sm-12" for="payDate" id="editPayDate"><?php echo $MC->msg('Transfer On', HCU_DISPLAY_AS_HTML); ?>
196  </label><span class="fa fa-question-circle-o" id="edit_date_help"></span>
197  <div class="col-sm-12">
198  <input class="hcu-all-100" type="text" placeholder="eg. MM/DD/YYYY" id="payDate" name="payDate"
199  data-role='datepicker'
200  data-bind="value: bpDate, events:{change: setDirty}"
201  data-format='MM/dd/yyyy'
202  data-required-msg="<?php echo $MC->msg('Process Date Missing', HCU_DISPLAY_AS_HTML); ?>"
203  onkeydown="return false;"
204  required />
205  </div>
206  </div>
207  </div>
208  <?php if ( $allowRecur == 'true' ) : ?>
209  <!-- Billing Frequency -->
210  <div class="form-group">
211  <div class="">
212  <label class="col-sm-12" for="billFreq" id="editBillFreq"><?php echo $MC->msg('Payment Frequency', HCU_DISPLAY_AS_HTML); ?>
213  </label>
214  <div class="col-sm-12">
215  <input id='billFreq' class='distinctAcct hcu-all-100' name='billFreq'
216  data-role='dropdownlist'
217  data-bind='value: bpFreq, events:{change: setDirty}'
218  data-required-msg="<?php echo $MC->msg('Payment Frequency Missing', HCU_DISPLAY_AS_HTML); ?>"
219  required />
220  </div>
221  </div>
222  </div>
223  <!-- Payment Duration -->
224  <div class="form-group">
225  <div class="">
226  <div class="col-sm-12">
227  <div class="row">
228  <div class="col-sm-12">
229  <h6 id="editDuration"><?php echo $MC->msg('Duration', HCU_DISPLAY_AS_HTML); ?></h6>
230  </div>
231  </div>
232  </div>
233  <div class="col-sm-12">
234  <div class="row">
235  <div class="col-sm-6">
236  <input class="k-radio" type="radio" id="rdNvr" name="duration" value="never"/>
237  <label class="k-radio-label" for="rdNvr"><?php echo $MC->msg('Never Stop', HCU_DISPLAY_AS_HTML); ?></label>
238  </div>
239  </div>
240  <div class="row">
241  <div class="col-sm-6">
242  <input class="k-radio" type="radio" id="rdNum" name="duration" value="number"/>
243  <label class="k-radio-label" for="rdNum"><?php echo $MC->msg('Until Payments', HCU_DISPLAY_AS_HTML); ?></label>
244  </div>
245  <div class="col-sm-3" style="padding-bottom:.5em;">
246  <input class="hcu-all-100" type="number" id="payNum" name="payNum"
247  data-bind="value: bpPayNum, events:{change: setDirty}"
248  data-required-msg="<?php echo $MC->msg('Number Payments Missing', HCU_DISPLAY_AS_HTML); ?>"
249  />
250  </div>
251  </div>
252  <div class="row">
253  <div class="col-sm-6">
254  <input class="k-radio" type="radio" id="rdEnd" name="duration" value="date"/>
255  <label class="k-radio-label" for="rdEnd"><?php echo $MC->msg('Until Date', HCU_DISPLAY_AS_HTML); ?></label>
256  </div>
257  <div class="col-sm-6">
258  <input class="hcu-all-100" type="text" placeholder="eg. MM/DD/YYYY" id="endDate" name="endDate"
259  data-role='datepicker'
260  data-bind="value: bpEndDate, events:{change: setDirty}"
261  data-format='MM/dd/yyyy'
262  data-required-msg="<?php echo $MC->msg('End Date Missing', HCU_DISPLAY_AS_HTML); ?>"
263  onkeydown="return false;"
264  />
265  </div>
266  </div>
267  </div>
268  <span class="k-invalid-msg" data-for="duration"></span>
269  </div>
270  </div>
271  <?php endif; ?>
272  <?php if ( strtolower($mpDateModel) == "due") : ?>
273  <!-- proccess date label for due date model -->
274  <div class="form-group">
275  <div class="">
276  <label class="col-sm-12" for="payDate" id="editPayDueDate"><?php echo $MC->msg('Process Date', HCU_DISPLAY_AS_HTML); ?></label>
277  <div class="col-xs-12 col-sm-1">
278  <label class="col-sm-12 " for="payDate" id="valuePayDueDate" data-bind="value: bpDueModelProcessDate"></label>
279  </div>
280  </div>
281  </div>
282  <?php endif; ?>
283  <!-- kim -->
284  <!-- ACTION BUTTONS -->
285  <div class="hcu-template">
286  <div class="hcu-edit-buttons k-state-default">
287  <a href="hcuMobilePay.prg?mp_token=<?php echo $encodedCommonURL ?>&<?php echo $HB_ENV['cuquery'] ?>" id="lnkCancel" style=""><?php echo $MC->msg("Cancel", HCU_DISPLAY_AS_HTML)?></a>
288  &emsp;
289  <a href="##" id="btnAddPayment" class="k-button k-primary">
290  <i class="fa fa-check fa-lg"></i><?php echo $MC->msg("Add", HCU_DISPLAY_AS_HTML)?>
291  </a>
292  </div>
293  </div>
294  </div>
295  </div>
296  </div>
297  <script id="confirmationTemplate" type="text/x-kendo-tmpl">
298  <div id="confirmationStatus"></div>
299  <div id="responseDiv">
300  <div class="local-transfer-msg">
301  <?php echo $MC->msg('Payment Saved', HCU_DISPLAY_AS_JS); ?>
302  <?php echo $MC->msg('Bill Pay Confirmation', HCU_DISPLAY_AS_JS); ?> #=confNum #
303  </div>
304  </div>
305  </script>
306 <script>
307 var windowStack = [];
308 var dataPayTo = [];
309 var dataPayFrom = [];
310 var dsGetAccounts = [];
311 var dsGetPayees = [];
312 var dsGetPayFrom = [];
313 var dsGetDates = [];
314 
315 var mindate;
316 var maxdate;
317 var maxindex;
318 var confirmSaveDialog;
319 
320 var editPaymentModel;
321 var processDates;
322 var dateModelValue = "<?php echo($mpDateModel) ?>";
323 var mpType = "<?php echo $mpType; ?>";
324 
325 var lblPlaceHolder = "";
326  <?php if ( $mpType == "Payment") : ?>
327  lblPlaceHolder = "<?php echo $MC->msg("Select Payee", HCU_DISPLAY_AS_HTML)?>";
328  <?php else : ?>
329  lblPlaceHolder = "<?php echo $MC->msg("Select Transfer", HCU_DISPLAY_AS_HTML)?>";
330  <?php endif; ?>
331 
332 var freqTypes = <?php echo HCU_JsonEncode($frequencyList); ?>;
333 
334 <?php
335  // 11/19: only attach a tooltip if there is a date model. Which there should always be.
336  if (! empty($mpDateModel)) {
337 ?>
338  homecuTooltip.bind({
339  edit_date_help: <?php echo "'" . EditDateHelpIcon($mpDateModel, $MC) . "'"; ?>
340  });
341 <?php
342  }
343 ?>
344 
345 //set fields as required according to radio button selection
346 $("input:radio[name=duration]").change( function() {
347  var selectedOption = $("input:radio[name=duration]:checked").val();
348  if ( selectedOption == 'number' ) {
349  //set number of payments to required
350  $("#payNum").attr('required', true);
351  $("#endDate").attr('required', false);
352  } else if ( selectedOption == 'date' ) {
353  //set end date to required
354  $("#endDate").attr('required', true);
355  $("#payNum").attr('required', false);
356  } else {
357  $("#endDate").attr('required', false);
358  $("#payNum").attr('required', false);
359  }
360  editPaymentModel.set("bpDuration", selectedOption);
361 });
362 
363 function InitDataSources() {
364 
365  //adding datasource to frequency types field
366  $("#billFreq").kendoDropDownList({
367  dataTextField: "name",
368  dataValueField: "value",
369  dataSource: freqTypes,
370  change: function(e) {
371  var dropdown = this;
372  var dropdownValue = dropdown.value();
373  editPaymentModel.set("bpFreq", dropdownValue);
374 
375  //if only paying once, disable duration controls
376  if ( dropdownValue == "Once" ) {
377  //reset duration to empty
378  editPaymentModel.set("bpDuration", "");
379  $("input[name=duration]").attr('disabled',true);
380  $("#payNum").attr('disabled',true);
381  $("#endDate").data('kendoDatePicker').enable(false);
382  //clear out any previous values
383  $("#rdNum").prop("checked", false);
384  $("#rdNvr").prop("checked", false);
385  $("#rdEnd").prop("checked", false);
386  } else {
387  $("input[name=duration]").attr('disabled',false);
388  $("input:radio[name=duration]").attr("required", true);
389 
390  //add data required message for radio buttons
391  $("input:radio[name=duration]").attr("data-required-msg", "<?php echo $MC->msg("Duration Required", HCU_DISPLAY_AS_JS) ?>");
392  $("input:radio[name=duration]").attr("validationMessage", "<?php echo $MC->msg("Duration Required", HCU_DISPLAY_AS_JS) ?>");
393  $("#payNum").attr('disabled',false);
394  $("#endDate").data('kendoDatePicker').enable(true);
395  }
396  },
397  optionLabel: {value: "", name: "<?php echo $MC->msg("Frequency Select", HCU_DISPLAY_AS_JS) ?>"},
398  });
399 
400  $("#payNum").kendoNumericTextBox({
401  format: "n0",
402  value: 0,
403  decimals: 0,
404  step: 1,
405  spinners: false,
406  min: 1,
407  max: 1000,
408  change: function(e){
409  var textbox = this;
410  var textboxValue = textbox.value();
411  editPaymentModel.set("bpPayNum", textboxValue);
412 
413  //select the correct radio button
414  $("#rdNum").prop("checked", true);
415  //set model value
416  var selectedOption = $("input:radio[name=duration]:checked").val();
417  editPaymentModel.set("bpDuration", selectedOption);
418  },
419 
420  });
421 
422  $("#endDate").kendoDatePicker({
423  value: new Date(),
424  min: mindate,
425  change: function(e){
426  var datePicker = this;
427  var dateValue = datePicker.value();
428  editPaymentModel.set("bpEndDate", dateValue);
429  //select the correct radio button
430  $("#rdEnd").prop("checked", true);
431  //set model value
432  var selectedOption = $("input:radio[name=duration]:checked").val();
433  editPaymentModel.set("bpDuration", selectedOption);
434  },
435  });
436 
437  dsGetPayees = new kendo.data.DataSource ({
438  data: dataPayTo,
439  schema: {
440  model: {
441  id: "TxnId",
442  fields: {
443  TxnId: { type: "number" },
444  Date: { type: "string" },
445  ToName: { type: "string" },
446  Amount: { type: "number" }
447  }
448  }
449  }
450  });
451 
452  dsGetDates = new kendo.data.DataSource ({
453  transport: {
454  read: {
455  url: "hcuMobilePay.data?cu=<?php echo $HB_ENV['cu']; ?>&mp_token=<?php echo $encodedToken ?>&mp_type=DATES&<?php echo $HB_ENV['cuquery'] ?>",
456  contentType: 'application/x-www-form-urlencoded',
457  type: 'POST',
458  data: {},
459  pageable: true,
460  cache: false
461  }
462  },
463  requestStart: function( e ) {
464  ShowWaitWindow();
465  },
466  requestEnd: function( e ) {
467  CloseWaitWindow();
468  <?php if ( strtolower($mpDateModel) == "due") : ?>
469  //for due date model show delivery by dates
470  mindate = kendo.toString(e.response.homecuData.data.PaymentDates[0].Due, "yyyy-MM-dd");
471  maxindex = e.response.homecuData.data.PaymentDates.length -1;
472  maxdate = kendo.toString(e.response.homecuData.data.PaymentDates[maxindex].Due, "yyyy-MM-dd");
473  <?php else : ?>
474  mindate = kendo.toString(e.response.homecuData.data.PaymentDates[0].Proc, "yyyy-MM-dd");
475  maxindex = e.response.homecuData.data.PaymentDates.length -1;
476  maxdate = kendo.toString(e.response.homecuData.data.PaymentDates[maxindex].Proc, "yyyy-MM-dd");
477  <?php endif; ?>
478  $("#payDate").kendoDatePicker({
479  value: new Date(),
480  min: mindate,
481  max: maxdate,
482  disableDates: function (date) {
483  var bpDates = [];
484  bpDates = e.response.homecuData.data.PaymentDates;
485  var bpFormatDates = [];
486  var i, s, len = bpDates.length;
487  for (i=0; i<len; ++i) {
488  if (i in bpDates) {
489  <?php if ( strtolower($mpDateModel) == "due") : ?>
490  // for due date model show delivery by dates
491  s = bpDates[i]["Due"];
492  s = s.replace(/-/g, '/') // using 'g' to replace globally
493  // s = s.replace(/-/, '/'); // replace 2nd "-" with "/"
494  <?php else : ?>
495  s = bpDates[i]["Proc"];
496  <?php endif; ?>
497  bpFormatDates.push(new Date(s));
498  }
499  }
500  if (date && compareDates(date, bpFormatDates)) {
501  return false;
502  } else {
503  return true;
504  }
505  },
506  change: function () {
507  var processDate = new Date();
508  processDate = editPaymentModel.bpDate;
509  <?php if ( strtolower($mpDateModel) == "due" ) : ?>
510  // for due date model show delivery by dates
511  var sDate = processDates[kendo.toString(processDate, "yyyy/MM/dd")];
512  $("#valuePayDueDate").text(sDate);
513  editPaymentModel.bpDueModelProcessDate = sDate;
514  <?php endif; ?>
515  $("#endDate").attr("placeholder", "<?php echo $MC->msg("Select Date", HCU_DISPLAY_AS_JS) ?>");
516  endMinDate = kendo.toString(kendo.date.addDays(processDate, 1), "yyyy/MM/dd");
517  $("#endDate").kendoDatePicker({
518  value: new Date(),
519  min: endMinDate,
520  change: function(e){
521  var datePicker = this;
522  var dateValue = datePicker.value();
523  editPaymentModel.set("bpEndDate", dateValue);
524  //select the correct radio button
525  $("#rdEnd").prop("checked", true);
526  //set model value
527  var selectedOption = $("input:radio[name=duration]:checked").val();
528  editPaymentModel.set("bpDuration", selectedOption);
529  },
530  disableDates: ["sa", "su"]
531  });
532  $("#endDate").data("kendoDatePicker").enable(true);
533  }
534  });
535  var error = null;
536  // see if there is an error
537  if ( e.response && e.response.homecuErrors )
538  error = e.response.homecuErrors;
539  if ( error && error.length > 0 ) {
540  e.preventDefault();
541  $.homecuValidator.displayMessage(error, $.homecuValidator.settings.statusError);
542  } else {
543  // not sure
544  }
545  },
546  // code to run if the request fails; the raw request and
547  // status codes are passed to the function
548  error: function( e ) {
549  alert( "Transport error" );
550  },
551  schema: {
552  model: {
553  fields: {
554  Proc: { type: "date" },
555  Date: { type: "date" }
556  }
557  },
558  data: "homecuData.data.PaymentDates"
559  }
560  });
561 
562  dsGetPayFrom = new kendo.data.DataSource ({
563  data: dataPayFrom
564  });
565 
566  //pulling user account information
567  dsGetAccounts = new kendo.data.DataSource ({
568  transport: {
569  read: {
570  url: "hcuMobilePay.data?cu=<?php echo $HB_ENV['cu']; ?>&mp_token=<?php echo $encodedToken ?>&mp_type=Accounts&<?php echo $HB_ENV['cuquery'] ?>",
571  contentType: 'application/x-www-form-urlencoded',
572  type: 'POST',
573  data: {},
574  pageable: true,
575  cache: false
576  }
577  },
578  requestStart: function( e ) {
579  ShowWaitWindow();
580  },
581  requestEnd: function( e ) {
582  CloseWaitWindow();
583  var error = null;
584  // see if there is an error
585  if ( e.response && e.response.homecuErrors )
586  error = e.response.homecuErrors;
587  if ( error && error.length > 0 ) {
588  e.preventDefault();
589  $.homecuValidator.displayMessage(error, $.homecuValidator.settings.statusError);
590  } else {
591  // not sure
592  }
593  },
594  // code to run if the request fails; the raw request and
595  // status codes are passed to the function
596  error: function( e ) {
597  alert( "Transport error" );
598  },
599  schema: {
600  model: {
601  id: "TxnId",
602  fields: {
603  TxnId: { type: "number" },
604  Date: { type: "string" },
605  ToName: { type: "string" },
606  Amount: { type: "number" }
607  }
608  },
609  data: function (response) {
610  /* PARSE RESPONSE DATA */
611  var returnData = Array();
612  try {
613  if (response.homecuData) {
614  //Get Accounts List
615  dataPayFrom = (response.homecuData.source ? response.homecuData.source : []);
616  dsGetPayFrom.data(dataPayFrom);
617 
618  //Get Payees List
619  dataPayTo = (response.homecuData.dest ? response.homecuData.dest : []);
620  dsGetPayees.data(dataPayTo);
621 
622  if (editPaymentModel.bpTxnId > 0){
623  dsGetPayees.filter ({
624  "field": "ToId",
625  "operator": "eq",
626  "value": editPaymentModel.bpToId
627  });
628  }
629 
630  if ( mpType == "Payment" ){
631  $("#btnAddPayment").text("<?php echo $MC->msg("Add", HCU_DISPLAY_AS_HTML)?> <?php echo $MC->msg("ACH Payment", HCU_DISPLAY_AS_HTML)?>")
632  } else {
633  $("#btnAddPayment").text("<?php echo $MC->msg("Add", HCU_DISPLAY_AS_HTML)?> <?php echo $MC->msg("Transfer", HCU_DISPLAY_AS_HTML)?>")
634  }
635  // var saveValue = "Add " + mpType;
636  // $("#btnAddPayment").text(saveValue);
637  returnData = response.homecuData;
638  } else if (response.homecuErrors) {
639  //error has been handled
640  } else {
641  throw "Error Parsing Result From Server";
642  }
643  } catch (err) {
644  // ** Need to report the message to the main screen
645  /* *** REPORT THE ERROR *** */
646  alert(err);
647  returnData = [];
648  }
649  return [response];
650  },
651  }
652  });
653 
654  $("#payTo").kendoDropDownList({
655  optionLabel: lblPlaceHolder,
656  dataSource: dsGetPayees,
657  dataTextField: "Name",
658  dataValueField: "ToId",
659  change: function(e) {
660  var value = this.value();
661  // Use the value of the widget
662  <?php if ( strtolower($mpDateModel) == "due" || strtolower($mpDateModel) == "payeeprocess") : ?>
663  dsGetDates.options.transport.read.data.vPayeeId = value;
664  if (value.length > 0){
665  $("#payDate").attr("placeholder", "<?php echo $MC->msg("Select Date", HCU_DISPLAY_AS_JS) ?>");
666  dsGetDates.read();
667  $("#payDate").data("kendoDatePicker").enable(true);
668 
669  } else {
670  //disable dates and give label to select payee
671  $("#payDate").kendoDatePicker({
672  value: new Date(),
673  disableDates: function (date) { return true},
674  });
675  $("#endDate").kendoDatePicker({
676  value: new Date(),
677  disableDates: function (date) { return true},
678  });
679  <?php if ( $mpType == "Transfer") : ?>
680  $("#payDate").attr("placeholder", "<?php echo $MC->msg("Select To Account", HCU_DISPLAY_AS_JS) ?>");
681  <?php else : ?>
682  $("#payDate").attr("placeholder", "<?php echo $MC->msg("Select Payee First", HCU_DISPLAY_AS_JS) ?>");
683  <?php endif; ?>
684  $("#valuePayDueDate").text("");
685  }
686  <?php endif; ?>
687  }
688  });
689 
690  $("#toFrom").kendoDropDownList({
691  optionLabel: "<?php echo $MC->msg("ACH Select Account", HCU_DISPLAY_AS_JS) ?>",
692  dataSource: dsGetPayFrom,
693  dataTextField: "Name",
694  dataValueField: "FromId",
695  });
696 
697 }
698 
699 // Confirmation dialog
700 $("#confirmationWindow").kendoDialog({
701  title: "<?php echo $MC->msg("Success", HCU_DISPLAY_AS_JS) ?>",
702  width: "85%",
703  maxWidth: "768px",
704  minWidth: "300px",
705  modal: true,
706  closable: false,
707  visible: false,
708  resizable: false,
709  actions: [
710  {
711  text: "<?php echo $MC->msg('Close', HCU_DISPLAY_AS_JS); ?>",
712  primary: true
713  }
714  ],
715  show: function(e) {
716  windowStack.push(this);
717  },
718  close: function(e) {
719  windowStack.pop();
720 
721  // Reset validator to use page status field.
722  $.homecuValidator.settings.formStatusField = "formStatus";
723  $.homecuValidator.settings.formInfoTitle = "";
724 
725  //redirect back to new payment
726  window.location = 'hcuMobilePayPayment.prg?mp_token=<?php echo $encodedToken ?>&mp_type=<?php echo $mpType ?>&<?php echo $HB_ENV['cuquery'] ?>';
727  }
728  });
729 
730 // this is used with the add/edit payment information
731 editPaymentModel = kendo.observable({
732  bpTxnId: "",
733  bpFromId: "",
734  bpToId: "",
735  bpAmt: "",
736  bpDate: "",
737  bpDueModelProcessDate : "",
738  bpFreq: "",
739  bpPayNum: "",
740  bpEndDate: "",
741  bpDuration: "",
742  dirtyFlag: false,
743  ResetModel: function() {
744  this.set( "bpFromId", "" );
745  this.set( "bpToId", "" );
746  this.set( "bpAmt", "" );
747  <?php if ( strtolower($mpDateModel) == "due") : ?>
748  this.set( "bpDate", "" );
749  this.set ("bpDueModelProcessDate", "");
750  <?php else : ?>
751  this.set( "bpDate", "" );
752  <?php endif; ?>
753  this.set( "bpTxnId", 0 );
754  this.set( "bpFreq", "" );
755  this.set( "bpPayNum", "" );
756  this.set( "bpEndDate", "" );
757  this.set( "bpDuration", "" );
758  //unchecking radio buttons
759  $("#rdNum").prop("checked", false);
760  $("#rdNvr").prop("checked", false);
761  $("#rdEnd").prop("checked", false);
762  this.set( "dirtyFlag", false );
763  },
764  setDirty: function(e) {
765  this.set( "dirtyFlag", true );
766  },
767  ClearDirty: function() {
768  this.set( "dirtyFlag", false );
769  },
770  Save: function() {
771  dsPayment.options.transport.read.data.toid = this.bpToId;
772  dsPayment.options.transport.read.data.fromid = this.bpFromId;
773  dsPayment.options.transport.read.data.amount = this.bpAmt;
774  <?php if ( $mpType == "Payment") : ?>
775  dsPayment.options.transport.read.data.paymentType = "Payment";
776  <?php else : ?>
777  dsPayment.options.transport.read.data.paymentType = "Transfer";
778  <?php endif; ?>
779  <?php if ( strtolower($mpDateModel) == "due") : ?>
780  dsPayment.options.transport.read.data.paydate = kendo.toString(this.bpDueModelProcessDate,"yyyy-MM-dd");
781  <?php else : ?>
782  dsPayment.options.transport.read.data.paydate = kendo.toString(this.bpDate,"yyyy-MM-dd");
783  <?php endif; ?>
784  dsPayment.options.transport.read.data.freq = this.bpFreq;
785  dsPayment.options.transport.read.data.paynum = this.bpPayNum;
786  dsPayment.options.transport.read.data.enddate = kendo.toString(this.bpEndDate,"yyyy-MM-dd");
787  dsPayment.options.transport.read.data.duration = this.bpDuration;
788  dsPayment.read();
789  }
790 });
791 
792 function PaymentSave() {
793  var confirmBtn;
794  var msgConfirm;
795  var type;
796  <?php if ($mpType == "Payment") : ?>
797  confirmBtn = "<?php echo $MC->msg("Confirm New Payment", HCU_DISPLAY_AS_JS) ?>" ;
798  type = "<?php echo $MC->msg("Pay", HCU_DISPLAY_AS_JS) ?>";
799  <?php else : ?>
800  confirmBtn = "<?php echo $MC->msg("Confirm New Transfer", HCU_DISPLAY_AS_JS)?>" ;
801  type = "<?php echo $MC->msg("Transfer", HCU_DISPLAY_AS_JS) ?>"
802  <?php endif; ?>
803 
804  <?php if ( $allowRecur == "true" ) : ?>
805  msgConfirm = type + " <b>" + kendo.toString(editPaymentModel.bpAmt, "c2") +
806  "</b> " + ($("#billFreq").data("kendoDropDownList").text()).toLowerCase() + " <?php echo $MC->msg("To", HCU_DISPLAY_AS_JS) ?> <b>".toLowerCase() + $("#payTo").data("kendoDropDownList").text() +
807  "</b> <?php echo $MC->msg("From Account", HCU_DISPLAY_AS_JS) ?> <b>".toLowerCase() + $("#toFrom").data("kendoDropDownList").text();
808 
809  //changing message according to duration of recurrring payment
810  if ( editPaymentModel.bpDuration == "never" ) {
811  msgConfirm += "</b> <?php echo $MC->msg("starting on", HCU_DISPLAY_AS_JS) ?> <b>" + kendo.toString(editPaymentModel.bpDate,"MM/dd/yyyy") +
812  "</b> <?php echo $MC->msg("until", HCU_DISPLAY_AS_JS) ?> <?php echo $MC->msg("Cancelled", HCU_DISPLAY_AS_JS) ?>".toLowerCase() + "?";
813  } else if ( editPaymentModel.bpDuration == "number" ) {
814  msgConfirm += "</b> <?php echo $MC->msg("starting on", HCU_DISPLAY_AS_JS) ?> <b>" + kendo.toString(editPaymentModel.bpDate,"MM/dd/yyyy") +
815  "</b> <?php echo $MC->msg("for", HCU_DISPLAY_AS_JS) ?> <b>" + editPaymentModel.bpPayNum + "</b> <?php echo $MC->msg("Payments", HCU_DISPLAY_AS_JS) ?>".toLowerCase() + "?";
816  } else if ( editPaymentModel.bpDuration == "date" ) {
817  msgConfirm += "</b> <?php echo $MC->msg("starting on", HCU_DISPLAY_AS_JS) ?> <b>" + kendo.toString(editPaymentModel.bpDate,"MM/dd/yyyy") +
818  "</b> <?php echo $MC->msg("until", HCU_DISPLAY_AS_JS) ?> <b>" + kendo.toString(editPaymentModel.bpEndDate,"MM/dd/yyyy") + "</b>." ;
819  } else {
820  msgConfirm += "</b> <?php echo $MC->msg("on", HCU_DISPLAY_AS_JS) ?> <b>" + kendo.toString(editPaymentModel.bpDate,"MM/dd/yyyy") + "</b>.";
821  }
822 
823  <?php else : ?>
824  msgConfirm = type + " <b>" + kendo.toString(editPaymentModel.bpAmt, "c2") +
825  "</b> <?php echo $MC->msg("To", HCU_DISPLAY_AS_JS) ?> <b>" + $("#payTo").data("kendoDropDownList").text() + "</b> <?php echo $MC->msg("From Account", HCU_DISPLAY_AS_JS) ?> <b>" +
826  $("#toFrom").data("kendoDropDownList").text() + "</b> <?php echo $MC->msg("on", HCU_DISPLAY_AS_JS) ?> <b>" + kendo.toString(editPaymentModel.bpDate,"MM/dd/yyyy") + "</b>.";
827  <?php endif; ?>
828 
829  confirmSaveDialog = $('#confirmSaveTemplate').kendoDialog({
830  width: "85%",
831  title: "<?php echo $MC->msg("Save", HCU_DISPLAY_AS_JS) ?> ",
832  maxWidth: "500px",
833  minWidth: "300px",
834  closable: false,
835  modal: true,
836  visible: false,
837  resizable: false,
838  content: msgConfirm,
839  show: function(e) {
840  // add the close function to the window stack
841  windowStack.push(function(e) {
842  confirmSaveDialog.close(e);
843  });
844  },
845  close: function(e) {
846  // remove the close function from the window windowStack
847  windowStack.pop();
848  },
849  actions: [
850  { text: '<?php echo $MC->msg("Close", HCU_DISPLAY_AS_HTML)?>',
851  action: function(e) {
852  // ** Close the current confirmSaveDialog
853  }
854  },
855  { text: confirmBtn,
856  primary: true,
857  action: function(e) {
858  //save payment or transfer
859  if ( $.homecuValidator.validate() ) {
860  editPaymentModel.Save();
861  }
862  }
863  }
864  ]
865  }).data("kendoDialog");
866  confirmSaveDialog.open();
867 }
868 
869 function compareDates(xdate, mdates) {
870  for (var i = 0; i < mdates.length; i++) {
871  if (mdates[i].getDate() == xdate.getDate() &&
872  mdates[i].getMonth() == xdate.getMonth() &&
873  mdates[i].getYear() == xdate.getYear()) {
874  return true
875  }
876  }
877 }
878 
879 function ShowSuccess(confirmationNum) {
880  var confirmationTemplate = kendo.template($("#confirmationTemplate").html());
881  var data = { confNum: confirmationNum };
882  var confirmationDisplay = confirmationTemplate(data);
883  $("#confirmationWindow").data("kendoDialog").content(confirmationDisplay);
884  $("#confirmationWindow").data("kendoDialog").open();
885  editPaymentModel.ResetModel();
886 }
887 
888 function newPayment (){
889 
890  editPaymentModel.ResetModel();
891  editPaymentModel.bpTypeLabel = "<?php echo $MC->msg("Payment", HCU_DISPLAY_AS_JS) ?>";
892  $.homecuValidator.setup({formValidate: "editPaymentWindow",
893  formErrorTitle: "<?php echo $MC->msg("Error Occurred", HCU_DISPLAY_AS_JS) ?>",
894  formStatusField: "editPaymentFormStatus"});
895 
896  <?php if ( $mpType == "Transfer") : ?>
897  $("#editPayTo").text("<?php echo $MC->msg("ACH To Account", HCU_DISPLAY_AS_JS) ?>");
898  $("#editToFrom").text("<?php echo $MC->msg("From Account", HCU_DISPLAY_AS_JS) ?>");
899  $("#editPayDate").text("<?php echo $MC->msg("Process Date", HCU_DISPLAY_AS_JS) ?>");
900  $("#payTo").attr("data-required-msg", "<?php echo $MC->msg("Transfer To Account Missing", HCU_DISPLAY_AS_JS) ?>");
901  $("#toFrom").attr("data-required-msg", "<?php echo $MC->msg("Transfer From Account Missing", HCU_DISPLAY_AS_JS) ?>");
902  $("#payAmount").attr("data-required-msg", "<?php echo $MC->msg("Transfer Amount Missing", HCU_DISPLAY_AS_JS) ?>");
903  $("#payDate").attr("data-required-msg", "<?php echo $MC->msg("Process Date Missing", HCU_DISPLAY_AS_JS) ?>");
904  <?php else : ?>
905 
906  $("#editPayTo").text("<?php echo $MC->msg("ACH Payee", HCU_DISPLAY_AS_JS) ?>");
907  $("#editToFrom").text("<?php echo $MC->msg("Account", HCU_DISPLAY_AS_JS) ?>");
908 
909  <?php if ( strtolower($mpDateModel) == "due") : ?>
910  $("#editPayDate").text("<?php echo $MC->msg("Deliver By Date", HCU_DISPLAY_AS_JS) ?>");
911  $("#editPayDueDate").text("<?php echo $MC->msg("Process Date", HCU_DISPLAY_AS_JS) ?>");
912  <?php else : ?>
913  $("#editPayDate").text("<?php echo $MC->msg("Process Date", HCU_DISPLAY_AS_JS) ?>");
914  <?php endif; ?>
915 
916  $("#payTo").attr("data-required-msg", "<?php echo $MC->msg("Payee Missing", HCU_DISPLAY_AS_JS) ?>");
917  $("#toFrom").attr("data-required-msg", "<?php echo $MC->msg("Account is required", HCU_DISPLAY_AS_HTML)?>");
918  $("#payAmount").attr("data-required-msg", "<?php echo $MC->msg("Payment Amount Missing", HCU_DISPLAY_AS_JS) ?>");
919  $("#payDate").attr("data-required-msg", "<?php echo $MC->msg("Process Date Missing", HCU_DISPLAY_AS_JS) ?>");
920  <?php endif; ?>
921 
922  $("#payDate").attr("autocomplete", "off").kendoDatePicker();
923 
924  //adding required stars
925  $("#editPayTo").append('<span class="hcu-required-field"><sup>*</sup></span>');
926  $("#editToFrom").append('<span class="hcu-required-field"><sup>*</sup></span>');
927  $("#editPayDate").append('<span class="hcu-required-field"><sup>*</sup></span>');
928 
929  <?php if ( $allowRecur == 'true' ) : ?>
930  $("#editBillFreq").append('<span class="hcu-required-field"><sup>*</sup></span>');
931  $("#endDate").attr("autocomplete", "off").kendoDatePicker();
932  $("#editBillFreq").text("<?php echo $MC->msg('Payment Frequency', HCU_DISPLAY_AS_HTML); ?>");
933  $("#endDate").kendoDatePicker({
934  value: new Date(),
935  disableDates: function (date) { return true },
936  });
937  $("#endDate").data("kendoDatePicker").enable(false);
938  <?php endif; ?>
939 
940  <?php if ( $mpType == "Payment") : ?>
941  dsGetAccounts.options.transport.read.data.paymentType = "Payment";
942  <?php else : ?>
943  dsGetAccounts.options.transport.read.data.paymentType = "Transfer";
944  <?php endif; ?>
945 
946  dsGetAccounts.read();
947 
948  <?php if ( strtolower($mpDateModel) == "process") : ?>
949  $("#payDate").attr("placeholder", "<?php echo $MC->msg("Process Date Select", HCU_DISPLAY_AS_JS) ?>");
950  dsGetDates.read();
951  <?php else: ?>
952  //disabling entire date picker control at beginning
953  $("#payDate").kendoDatePicker({
954  value: new Date(),
955  disableDates: function (date) { return true },
956  });
957  $("#payDate").data("kendoDatePicker").enable(false);
958 
959  <?php if ( $mpType == "Transfer") : ?>
960  $("#payDate").attr("placeholder", "<?php echo $MC->msg("Select To Account", HCU_DISPLAY_AS_JS) ?>");
961  <?php else : ?>
962  $("#payDate").attr("placeholder", "<?php echo $MC->msg("Select Payee First", HCU_DISPLAY_AS_JS) ?>");
963  $("#endDate").attr("placeholder", "<?php echo $MC->msg("Select Process Date First", HCU_DISPLAY_AS_JS) ?>");
964  <?php endif; ?>
965 
966  <?php endif; ?>
967 
968  kendo.bind($("#editPaymentWindow"), editPaymentModel);
969 
970  $("#payAmount").val(0);
971 
972  $("#payAmount").kendoNumericTextBox({
973  format: "c",
974  value: 0,
975  decimals: 2,
976  step: 0,
977  spinners: false,
978  min: .01,
979  max: 9999999,
980  placeholder: '<?php echo $MC->msg('Amount', HCU_DISPLAY_AS_JS); ?>'
981  });
982 
983  $("#btnAddPayment").click( function() {
984  if ( $.homecuValidator.validate() ) {
985  PaymentSave ();
986  }
987  });
988 
989 }
990 
991  var dsPayment = new kendo.data.DataSource({
992  transport: {
993  read: {
994  url: 'hcuMobilePay.data?cu=<?php echo $HB_ENV['cu']; ?>&mp_token=<?php echo $encodedToken ?>&mp_type=AddPayment&<?php echo $HB_ENV['cuquery'] ?>',
995  dataType: "json",
996  contentType: "application/x-www-form-urlencoded",
997  type: "POST",
998  data: {},
999  cache: false
1000  }
1001  },
1002  schema: {
1003  parse: function(response) {
1004  var display = [];
1005  if ( response.homecuData ) {
1006  for (var i = 0; i < response.homecuData.length; i++) {
1007  display.push(response.homecuData[i]);
1008  }
1009  }
1010  return display;
1011  },
1012  },
1013  requestStart: function( e ) {
1014  ShowWaitWindow();
1015  },
1016  requestEnd: function( e ) {
1017  var error = null;
1018  //ENR - not needed
1019  //dsAcctHistory.read();
1020  CloseWaitWindow();
1021  // see if there is an error
1022  if ( e.response && e.response.homecuErrors )
1023  error = e.response.homecuErrors;
1024  if ( error && error.length > 0 ) {
1025  e.preventDefault();
1026  $.homecuValidator.displayMessage(error, $.homecuValidator.settings.statusError);
1027  } else {
1028  var confirmationNum = e.response.homecuData.data.Confirmation;
1029  //show that payment was saved.
1030  ShowSuccess(confirmationNum);
1031  }
1032  },
1033  // code to run if the request fails; the raw request and
1034  // status codes are passed to the function
1035  error: function( e ) {
1036  alert( "<?php echo $MC->msg("Transport error", HCU_DISPLAY_AS_JS); ?>: " + e.status );
1037  }
1038  });
1039 
1040  $(document).on("click", ".k-overlay", function (e) {
1041  if(windowStack.length > 0) {
1042  // get the close function from the stack, without poping it (the close will pop it)
1043  var fn = windowStack[windowStack.length - 1];
1044  var ret = fn(e);
1045  }
1046  });
1047 
1048  $(document).ready(function () {
1049  $.homecuValidator.setup({editPaymentFormStatus: "<?php echo $MC->msg("Error Occurred", HCU_DISPLAY_AS_JS) ?>"});
1050 
1051  InitDataSources();
1052  newPayment();
1053  });
1054 
1055 </script>
1056 <?php
1057  /*
1058  * ** END CONTENT
1059  */
1060 
1061 
1062  // ** INCLUDE POST CONTENT SCRIPT
1063  require_once(dirname(__FILE__) . '/../includes/hcuPostContent.i');
1064 
1065 /**
1066  * 11/19: Helper to output a tooltip help message for the Process Date field.
1067  * @param string $mpDateModel due|process|payeeprocess
1068  * @param object $MC translation dictionary object
1069  * @return string
1070  */
1071  function EditDateHelpIcon($mpDateModel, $MC)
1072  {
1073  if (strtolower($mpDateModel) == 'due') {
1074  return $MC->msg('Process Date Due Help', HCU_DISPLAY_AS_JS);
1075  }
1076  if ((strtolower($mpDateModel) == 'process') || (strtolower($mpDateModel) == 'payeeprocess')) {
1077  return $MC->msg('Process Date Payee Help', HCU_DISPLAY_AS_JS);
1078  }
1079 
1080  // Should never happen, lots of logic above getting $mpDateModel
1081  return '';
1082 
1083  }
1084 
1085 ?>