7 require_once(dirname(__FILE__) .
"/AppAdm.data");
9 $parameters = array(
"operation" =>
"",
"searchIn" =>
"",
"lookFor" =>
"",
"withStatus" =>
"",
"rangeType" =>
"",
"fromDate" =>
"",
"toDate" =>
"",
10 "limit" =>
"",
"offset" =>
"",
"sortBy" =>
"",
"userId" =>
"",
"loanids" =>
"");
11 $string = array(
"filter" => FILTER_SANITIZE_STRING);
12 $json = array(
"filter" => FILTER_DEFAULT);
13 HCU_ImportVars($parameters,
"", array(
"operation" => $string,
"searchIn" => $string,
"lookFor" => $string,
"withStatus" => $string,
"rangeType" => $string,
14 "loanids" => $json,
"fromDate" => $string,
"toDate" => $string,
"limit" => $string,
"offset" => $string,
15 "sortBy" => $string,
"userId" => $string,
"lockSetting" => $string,
"email" => $string,
"password" => $string,
16 "confirm" => $string));
18 $operation = HCU_array_key_value(
"operation", $parameters);
19 $operation = $operation ===
false ?
"" : trim($operation);
20 if ($operation !=
"") {
23 $returnArray = ReadLoanApps($dbh, $Cu, $parameters,
false);
26 $returnArray = DeleteLoanApps($dbh, $Cu, $parameters);
28 case "readApplicantSearch":
29 $returnArray = ReadApplicantSearch($dbh, $Cu, $parameters);
32 $returnArray = ReadApplicant($dbh, $Cu, $parameters);
35 $returnArray = SaveApplicant($dbh, $Cu, $parameters);
38 $returnArray = array(
"status" =>
"999",
"error" =>
"Operation not specified: '$operation'");
41 header(
'Content-type: application/json');
42 print HCU_JsonEncode($returnArray);
44 PrintPage(
"$menu_link?ft=$ft");
58 function PrintPage($self)
68 <script type=
"text/javascript">
70 getShowWaitFunctions(); ?>
86 $(
".tabTitles").on(
"click",
"[data-name]:not(.selected)",
function() {
87 var name = $(
this).attr(
"data-name");
94 ActivateApplicantTab();
97 var prevThis = $(
".tabTitles [data-name].selected");
98 var prevName = $(prevThis).attr(
"data-name");
99 $(prevThis).removeClass(
"selected");
100 $(
this).addClass(
"selected");
101 $(
".tabContents[data-name='" + prevName +
"']").hide();
102 $(
".tabContents[data-name='" + name +
"']").show();
107 ActivateApplicantTab();
116 function ActivateApplicantTab() {
118 SetupApplicantValidation(
"applicantFullForm");
120 $(
"#searchInApplicantDDL").data(
"kendoDropDownList").select(0);
121 $(
"[name='lookForApplicant']").val(
null);
122 $(
"#applicantSearchDiv").show();
123 $(
"#applicantGridDiv").hide();
124 $(
"#applicantManagementDiv").hide();
127 $(
"#applicantFullForm").data(
"action",
"search");
130 function SetupApplicantValidation(
id) {
131 $.homecuValidator.setup({formValidate: id, formStatusField:
"applicantFormValidateDiv", homecuCustomRules: {
139 validatelookfor:
function(input) {
140 if (!$(input).is(
"[name='lookForApplicant']")) {
143 var searchIn = $(
"#searchInApplicantDDL").data(
"kendoDropDownList").value().trim();
144 var value = $(input).val().trim();
146 if (searchIn !=
"" && value ==
"") {
147 $(input).attr(
"data-validatelookfor-msg",
"Search string is required.");
153 if (value.search(/\
"/) >= 0 ) { 154 $(input).attr("data-validatelookfor-msg
", "Username contains invalid characters.
"); 162 matchPassword: function(input) { 163 if (!$(input).is("[name=
'confirm']
")) { 166 var password = $("[name=
'password']
").val().trim(); 167 var confirm = $(input).val().trim(); 169 if (password != "" && password != confirm) { 170 $(input).attr("data-matchPassword-msg
", "Passwords don
't match."); 176 password: function(input) { 177 if (!$(input).is("[name='password
']")) { 181 var password = $(input).val().trim(); 182 var length = password.length; 184 <?php // If the password is not set, then don't validate it. It isn
't being changed. ?> 185 if (password == "") { 189 if (length < 6 || length > 20) { 190 $(input).attr("data-password-msg", "Password must be from 6 to 20 characters long."); 194 if (!/\d/.test(password) && !/\D/.test(password)) { 195 $(input).attr("data-password-msg", "Password must contain both number and letter characters."); 199 if (/"/.test(password)) { 200 $(input).attr("data-password-msg", "There are invalid characters in the password."); 214 function InitApplicant() {
215 var template = $("#applicantTemplate").html();
216 $(".tabContents[data-name='applicant
']").html(template); 218 InitApplicantSearchBar(); 228 function InitApplicantSearchBar() {
236 $("#searchInApplicantDDL").kendoDropDownList({
237 dataSource: <?php echo HCU_JsonEncode(GetApplicantSearchInData()); ?>,
238 dataTextField: "text",
239 dataValueField: "value",
241 var searchIn = this.value();
243 var lookFor = $("[name='lookForApplicant
']"); 244 $(lookFor).data("searchIn", searchIn); 248 $(lookFor).attr("homecu-match", "email"); 249 $(lookFor).attr("data-homecuCustomMatch-msg", "Email address is invalid."); 252 $(lookFor).attr("homecu-match", "number"); 253 $(lookFor).attr("data-homecuCustomMatch-msg", "Account must be a number."); 258 $(lookFor).attr("homecu-match", ""); 269 $("#applicantFullForm").on("submit", function(e) {
271 var applicantSubmitSwitch = $("#applicantFullForm").data("action");
272 if (applicantSubmitSwitch == "search") {
273 if ($.homecuValidator.validate()) {
274 $("#applicantGrid").data("kendoGrid").dataSource.query({page: 1, pageSize: pageSize});
275 $(".applicantManagementDiv").hide();
276 $(".applicantGridDiv").show();
277 <?php // Make sure to reset the page number when the filter changes. ?>
279 } else if (applicantSubmitSwitch == "save") {
280 if ($.homecuValidator.validate()) {
282 parameters.operation = "saveApplicant";
284 parameters.userId = $(".userIdLabel").text().trim();
286 parameters.lockSetting = "noChange";
287 if ($(".lockAccount").hasClass("currentUnlocked")) {
288 if ($(".lockAccount").hasClass("originalUnlocked")) {
289 parameters.lockSetting = "noChange";
291 parameters.lockSetting = "setUnlocked";
293 } else if ($(".lockAccount").hasClass("currentLocked")) {
294 if ($(".lockAccount").hasClass("originalLocked")) {
295 parameters.lockSetting = "noChange";
297 parameters.lockSetting = "setLocked";
301 if ($("[name='password
']:visible").length > 0) { 302 parameters.password = $("[name='password
']").val().trim(); 304 parameters.password = ""; 307 if ($("[name='confirm
']:visible").length > 0) { 308 parameters.confirm = $("[name='confirm
']").val().trim(); 310 parameters.confirm = ""; 313 if ($("[name='email
']:visible").length > 0) { 314 parameters.email = $("[name='email
']").val().trim(); 316 parameters.email = ""; 319 viewDs.read(parameters); 327 <?php // When "enter" happens on an input, make sure that it submits correctly. ?> 328 $("#applicantFullForm").on("focus", "[name='lookForApplicant
']", function() { 329 $("#applicantFullForm").data("action", "search"); 332 $("#applicantFullForm").on("focus", "[name='email
'], [name='confirm
'], [name='password
']", function() { 333 $("#applicantFullForm").data("action", "save"); 336 $("#applicantFullForm").on("click", ".lockAccount a", function() { 337 $("#applicantFullForm").data("action", "save"); 339 var lockAccount = $(this).closest(".lockAccount"); 340 if ($(lockAccount).hasClass("currentLocked")) { 341 $(lockAccount).removeClass("currentLocked").addClass("currentUnlocked").removeClass("notRealChange"); 343 $(lockAccount).removeClass("currentUnlocked").addClass("currentLocked").removeClass("notRealChange"); 348 $("#applicantFullForm").on("click", "#applicantSearchBtn", function() { 349 $("#applicantFullForm").data("action", "search"); 350 $("#applicantFullForm").submit(); 354 $("#applicantFullForm").on("click", "#applicantSaveBtn", function() { 355 $("#applicantFullForm").data("action", "save"); 356 $("#applicantFullForm").submit(); 360 $("#applicantFullForm").on("click", ".gotoLoans", function() { 362 var prevThis = $(".tabTitles [data-name].selected"); 363 var prevName = $(prevThis).attr("data-name"); 364 var name = "loanApps"; 365 $(prevThis).removeClass("selected"); 366 $(".tabTitles [data-name='" + name + "']").addClass("selected"); 367 $(".tabContents[data-name='" + prevName + "']").hide(); 368 $(".tabContents[data-name='" + name + "']").show(); 370 ActivateLoanApps($(".userIdLabel").text().trim()); 382 function InitApplicantGrid() {
389 var grid = $("#applicantGrid").kendoGrid({
394 url: "<?php echo $self; ?>&operation=readApplicantSearch",
409 parameterMap: function(data, type) {
412 data.lookFor = $("[name='lookForApplicant
']").val().trim(); 413 data.searchIn = $("#searchInApplicantDDL").data("kendoDropDownList").value(); 415 <?php // Sort will be custom as well. ?> 418 <?php // Pagination ?> 419 data.limit = data.pageSize; 420 data.offset = data.skip; 421 delete data.pageSize; 433 lnId: {type: "number"}, 434 email: {type: "string"}, 435 failedAttempts: {type: "number"}, 436 loginType: {type: "string"}, 437 username: {type: "string"}, 438 accountnumber: {type: "string"} 451 parse: function (data) {
454 if (data.status != "000") {
455 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError);
456 } else if (data.info != null) {
457 $.homecuValidator.displayMessage(data.info, $.homecuValidator.settings.statusInfo);
460 return data.gridData;
469 {template: "<a href='\\#
' class='viewBtn
'>View</a>", headerTemplate: ""}, 470 {field: "email", headerTemplate: "Email"}, 471 {field: "loginType", headerTemplate: "Login Type"}, 472 {field: "failedAttempts", headerTemplate: "Failed Attempts"}, 473 {field: "accountnumber", headerTemplate: "Account #"}, 474 {field: "username", headerTemplate: "Username"} 477 template: "<tr class='noRecordsDiv
'><td colspan='4
'>No Records Found</td></tr>" 482 alwaysVisible: false <?php // Do not show pagination when there are 30 or less results. ?> 484 }).data("kendoGrid"); 492 viewDs = new kendo.data.DataSource({
495 url: "<?php echo $self; ?>",
499 operation: "readApplicant"
502 parameterMap: function(data, type) {
509 parse: function (data) {
512 if (data.status != "000") {
513 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError);
514 } else if (data.info != null) {
515 $.homecuValidator.displayMessage(data.info, $.homecuValidator.settings.statusInfo);
518 if (data.type == "read") {
520 var template = kendo.template($("#applicantMaintenanceTemplate").html());
521 template = template(data.applicantData);
523 $(".applicantManagementDiv").html(template);
525 $(".applicantGridDiv").hide();
526 $(".applicantManagementDiv").show();
528 $("#applicantFullForm").data("action", "save");
529 <?php // I'm also assuming that an
"enter" at
this point means update. ?>
530 SetupApplicantValidation(
"applicantFullForm");
538 $(
"#applicantGrid").on(
"click",
".viewBtn",
function() {
539 var grid = $(
"#applicantGrid").data(
"kendoGrid");
540 var tr = $(
this).closest(
"tr");
541 var dataItem = grid.dataItem($(tr));
543 viewDs.read({userId: dataItem.lnId});
555 function ActivateLoanApps(userId) {
556 $.homecuValidator.setup({formValidate:
"appLoanSearchForm", formStatusField:
"appLoanFormValidateDiv", homecuCustomRules: {
565 validatelookfor:
function(input) {
566 if (!$(input).is(
"[name='lookFor']")) {
569 var searchIn = $(input).data(
"searchIn");
570 searchIn = searchIn ==
null ?
"" : searchIn.trim();
571 var value = $(input).val().trim();
573 if (searchIn !=
"" && value ==
"") {
574 $(input).attr(
"data-validatelookfor-msg",
"Search string is required.");
580 if (value.search(/\
"/) >= 0 ) { 581 $(input).attr("data-validatelookfor-msg
", "Name contains invalid characters.
"); 586 var allNbrs = /^\d*$/; 587 var ssnTest = /^\d{3}-\d{2}-\d{4}$/; 588 if (allNbrs.test(value) && value.length == 9) { 589 value = (value.substr(0,3) + '-' + value.substr(3,2) + '-' + value.substr(5,4)); 591 if (!ssnTest.test(value)) { 592 $(input).attr("data-validatelookfor-msg
", "SSN has invalid format.
"); 604 $("#searchInDDL
").data("kendoDropDownList
").value(""); 605 $("#lookForDiv
").hide(); 606 $("[name=
'lookFor']
").val(null); 607 $("#statusDDL
").data("kendoDropDownList
").value(""); 608 $("#rangeTypeDDL
").data("kendoDropDownList
").value(""); 609 $("#fromToSearch
").hide(); 610 $("[name=
'fromDate']
").data("kendoDatePicker
").value(null); 611 $("[name=
'toDate']
").data("kendoDatePicker
").value(null); 613 if (userId == null) { 614 $("#forUserIdMsg
").hide(); 615 $("#loanAppGrid
").data("kendoGrid
").dataSource.read(); 617 $("#forUserIdMsg span
").text(userId); 618 $("#forUserIdMsg
").show(); 619 $("#loanAppGrid
").data("kendoGrid
").dataSource.read({userId: userId}); 630 function InitLoanApps() {
632 var template = $("#loanAppTemplate
").html(); 633 $(".tabContents[data-name=
'loanApps']
").html(template); 636 InitLoanAppSearchBar(); 637 InitLoanAppClickEvents(); 646 function InitLoanAppSearchBar() {
654 var fromDatePicker = $("[name=
'fromDate']
").kendoDatePicker({ 655 format: "MM/dd/yyyy
" <?php // Add zeroes so that MTB looks okay. ?> 656 }).data("kendoDatePicker
"); 664 var toDatePicker = $("[name=
'toDate']
").kendoDatePicker({ 665 format: "MM/dd/yyyy
" <?php // Add zeroes so that MTB looks okay. ?> 666 }).data("kendoDatePicker
"); 676 var rangeTypeDDL = $("#rangeTypeDDL
").kendoDropDownList({ 677 dataSource: <?php echo HCU_JsonEncode(GetRangeTypeData()); ?>, 678 dataTextField: "text
", 679 dataValueField: "value
", 681 switch(this.value()) { 683 $("#fromToSearch
").hide(); 684 $("[name=
'fromDate']
").prop("required
", false); 685 $("[name=
'toDate']
").prop("required
", false); 686 fromDatePicker.value(null); 687 toDatePicker.value(null); 690 if ($("#fromToSearch:visible
").length == 0) { <?php // Only care if it isn't visible (ALL) ?> 691 $("[name=
'fromDate']
").prop("required
", true); 692 $("[name=
'toDate']
").prop("required
", true); 693 $("#fromToSearch
").show(); 698 // 05-19 set placeholders when changing unless value is populated 699 SetElementPlaceholders($("#fromDate
"), 'from-' + this.value(), placeholder_map); 700 SetElementPlaceholders($("#toDate
"), 'to-' + this.value(), placeholder_map); 702 }).data("kendoDropDownList
"); 704 rangeTypeDDL.select(0); 715 var placeholder_map = {
716 'email' : 'Enter the borrower email address in the format account@server.com|net|etc.',
717 'dob' : 'Enter the DOB in any date format: MM/YY/YYYY, M.D.YY, etc.',
718 'ssn' : 'Enter the SSN in the format NNN-NN-NNNN.',
719 'name' : 'Enter the last name of the primary borrower.',
720 'account' : 'Enter the loan account number.',
721 'from-submit' : 'Beginning range of apps submitted.',
722 'from-start' : 'Beginning range of apps started.',
723 'from-modified' : 'Beginning range of apps last modified.',
724 'to-submit' : 'Ending range of apps submitted.',
725 'to-start' : 'Ending range of apps started.',
726 'to-modified' : 'Ending range of apps last modified.'
729 var searchInDDL = $("#searchInDDL
").kendoDropDownList({ 730 dataSource: <?php echo HCU_JsonEncode(GetSearchInData()); ?>, 731 dataTextField: "text
", 732 dataValueField: "value
", 735 var searchIn = this.value(); 736 // 05-19 set placeholders when changing unless value is populated 737 SetElementPlaceholders($("#lookForDiv input
"), searchIn, placeholder_map); 741 $("#lookForDiv
").hide(); 744 if ($("#lookForDiv:visible
").length == 0) { <?php // Only care if it isn't visible (ALL) ?> 745 $("[name=
'lookFor']
").val(null); 746 $("#lookForDiv
").show(); 751 var lookFor = $("[name=
'lookFor']
"); 752 $(lookFor).data("searchIn
", searchIn); 756 lookFor.attr("homecu-match
", "email
"); 757 lookFor.attr("data-homecuCustomMatch-msg
", "Email address is invalid.
"); 760 lookFor.attr("homecu-match
", "dateOpenFormat
"); 761 lookFor.attr("data-homecuCustomMatch-msg
", "Date is invalid.
"); 764 lookFor.attr("homecu-match
", "number
"); 765 lookFor.attr("data-homecuCustomMatch-msg
", "Account must be a number.
"); 768 lookFor.attr("homecu-match
", "number
"); 769 lookFor.attr("data-homecuCustomMatch-msg
", "Loan must be a number.
"); 775 lookFor.attr("homecu-match
", ""); 779 }).data("kendoDropDownList
"); 781 searchInDDL.select(0); 789 var statusDDL = $("#statusDDL
").kendoDropDownList({ 790 dataSource: <?php echo HCU_JsonEncode(GetWithStatusData()); ?>, 791 dataTextField: "text
", 792 dataValueField: "value
" 793 }).data("kendoDropDownList
"); 804 var sortByDDL = $("#sortByDDL
").kendoDropDownList({ 805 dataSource: <?php echo HCU_JsonEncode(GetSortByData()); ?>, 806 dataTextField: "text
", 807 dataValueField: "value
" 808 }).data("kendoDropDownList
"); 819 function InitLoanAppClickEvents() {
821 $("#appLoanSearchForm
").on("submit
", function(e) { 822 if ($.homecuValidator.validate()) { 823 $("#forUserIdMsg
").hide(); 824 $("#loanAppGrid
").data("kendoGrid
").dataSource.query({page: 1, pageSize: pageSize}); 825 <?php // Make sure to reset the page number when the filter changes. ?> 832 <?php printCheckboxEvents("#loanAppGrid
"); ?> 834 var inThisEvent = false; 846 $("#loanAppGrid
").on("click
", ".allCheckbox, .rowCheckbox
", function() { 847 if (inThisEvent) { <?php // Prevent this logic from being executed more than once. ?> 851 var actionDDL = $("#actionDDL
").data("kendoDropDownList
"); 853 var checkedList = $("#loanAppGrid .rowCheckbox:checked
"); 854 var numChecked = $(checkedList).length; 855 var list = [{value: "", text: "Action
"}]; 857 switch (numChecked) { 859 actionDDL.enable(false); 862 actionDDL.enable(true); 863 list.push({value: "delete", text: "Delete
"}); 864 list.push({value: "view
", text: "View Application
"}); 867 actionDDL.enable(true); 868 list.push({value: "delete", text: "Delete
"}); 872 actionDDL.dataSource.data(list); 884 $("#loanAppGrid
").on("click
", "tbody tr
", function(e) { 885 if ($(e.target).is(".rowCheckbox
")) { 889 $(this).find(".rowCheckbox
").click(); 898 $("#loanAppGrid
").on("click
", "thead tr
", function(e) { 899 if ($(e.target).is(".allCheckbox
")) { 903 $(this).find(".allCheckbox
").click(); 906 $("#loanAppGrid
").on("click
", ".printBtn
", function(e) { 911 var isInitial = true; 920 function InitLoanAppGrid() {
928 var grid = $("#loanAppGrid
").kendoGrid({ 933 url: "<?php echo $self; ?>&operation=readLoanApps
", 948 parameterMap: function(data, type) {
951 if (isInitial) { <?php // Start out with the default filter. ?>
953 } else if (data.operation == "deleteLoans
") { 954 var gridData = $("#loanAppGrid
").data("kendoGrid
").dataSource.data(); 956 for(var i = 0; i != gridData.length; i++) { 957 if (gridData[i].checked) { 958 loanids.push(gridData[i].respid); 961 data.loanids = kendo.stringify(loanids); 963 RestoreGridSnapshot(gridSnapshot); 965 gridSnapshot = CreateGridSnapshot(); 967 <?php // I'm pretty sure that data is not a complex object so the "deep
" parameter doesn't matter. ?> 968 data = $.extend({}, data, gridSnapshot); 970 <?php // Retain the date object in the snapshot but format as a string for the data call. ?> 971 data.fromDate = data.fromDate == null ? "" : kendo.toString(data.fromDate, "MM/dd/yyyy
"); 972 data.toDate = data.toDate == null ? "" : kendo.toString(data.toDate, "MM/dd/yyyy
"); 974 <?php // Sort will be custom as well. ?> 977 <?php // Pagination ?> 978 data.limit = data.pageSize; 979 data.offset = data.skip; 980 delete data.pageSize; 992 respid: {type: "number
"}, 993 loanappid: {type: "number
"}, 994 start: {type: "date
"}, 995 account: {type: "string"}, 996 status: {type: "string"}, 997 dob: {type: "string"}, 998 title: {type: "string"}, 999 ssn: {type: "string"}, 1000 email: {type: "string"}, 1001 checked: {type: "boolean"}, 1002 name: {type: "string"}, 1003 userid: {type: "number
"} 1016 parse: function (data) {
1019 if (data.status != "000
") { 1020 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError); 1021 } else if (data.info != null) { 1022 $.homecuValidator.displayMessage(data.info, $.homecuValidator.settings.statusInfo); 1025 <?php // Uncheck all checkbox. Will still be checked if delete deletes all loans. ?> 1026 $("#loanAppGrid .allCheckbox
").prop("checked
", false); 1028 return data.gridData; 1031 serverSorting: true, 1037 {headerTemplate: "<input type=
'checkbox' class=
'allCheckbox'>
", width: "45px
"}, 1038 {headerTemplate: "Started <br> Account #
"}, 1039 {headerTemplate: "Status <br> Birth Date
"}, 1040 {headerTemplate: "Type <br> SSN
"}, 1041 {headerTemplate: "Email <br> Name
"} 1044 template: "<tr
class=
'noRecordsDiv'><td colspan=
'4'>No Records Found</td></tr>
" 1048 toolbar: "<div
id=
'actionDDL'></div> <i
class=
'fa fa-print fa-xs printBtn'></i>
", 1050 alwaysVisible: false <?php // Do not show pagination when there are 30 or less results. ?> 1052 rowTemplate: $("#loanAppRowTemplate
").html() 1053 }).data("kendoGrid
"); 1068 var actionDDL = $("#actionDDL
").kendoDropDownList({ 1069 dataSource: [{value: "", text: "Action
"}], 1070 dataTextField: "text
", 1071 dataValueField: "value
", 1072 change: function(e) { 1073 var text = this.value(); 1076 break; <?php // Do nothing. This is the prompt. ?> 1085 }).data("kendoDropDownList
"); 1087 actionDDL.select(0); 1088 actionDDL.enable(false); 1091 var gridSnapshot = {}; 1102 function CreateGridSnapshot() {
1104 var rangeType = $("#rangeTypeDDL
").data("kendoDropDownList
").value(); 1105 var fromDate = $("[name=
'fromDate']
").data("kendoDatePicker
").value(); 1106 var toDate = $("[name=
'toDate']
").data("kendoDatePicker
").value(); 1107 fromDate = fromDate == null || rangeType == "" ? null : fromDate; 1108 toDate = toDate == null || rangeType == "" ? null : toDate; 1110 snapshot.rangeType = rangeType; 1111 snapshot.fromDate = fromDate; 1112 snapshot.toDate = toDate; 1113 snapshot.lookFor = $("[name=
'lookFor']
").val().trim(); 1114 snapshot.withStatus = $("#statusDDL
").data("kendoDropDownList
").value(); 1115 snapshot.searchIn = $("#searchInDDL
").data("kendoDropDownList
").value(); 1116 snapshot.sortBy = $("#sortByDDL
").data("kendoDropDownList
").value(); 1129 function RestoreGridSnapshot(snapshot) {
1130 <?php // == null is equal to === null || === undefined. Setting a control to undefined does nothing but setting it to null clears it. ?>
1131 var fromDate = snapshot.fromDate == null ? null : snapshot.fromDate;
1132 var toDate = snapshot.toDate == null ? null : snapshot.toDate;
1133 var rangeType = snapshot.rangeType == null ? "
" : snapshot.rangeType.trim(); 1134 var lookFor = snapshot.lookFor == null ? "" : snapshot.lookFor.trim(); 1135 var withStatus = snapshot.withStatus == null ? "" : snapshot.withStatus.trim(); 1136 var searchIn = snapshot.searchIn == null ? "" : snapshot.searchIn.trim(); 1137 var sortBy = snapshot.sortBy == null ? "startAD
" : snapshot.sortBy.trim(); 1139 <?php // Actual VALUES reset. ?> 1140 $("[name=
'fromDate']
").data("kendoDatePicker
").value(fromDate); 1141 $("[name=
'toDate']
").data("kendoDatePicker
").value(toDate); 1142 $("#rangeTypeDDL
").data("kendoDropDownList
").value(rangeType); 1143 $("[name=
'lookFor']
").val(lookFor); 1144 $("#statusDDL
").data("kendoDropDownList
").value(withStatus); 1145 $("#searchInDDL
").data("kendoDropDownList
").value(searchIn); 1146 $("#sortByDDL
").data("kendoDropDownList
").value(sortBy); 1148 <?php // Need to also preserve hidden/shown DIVs. ?> 1149 if (searchIn == "") { 1150 $("#lookForDiv
").hide(); 1152 $("#lookForDiv
").show(); 1154 if (rangeType == "") { 1155 $("#fromToSearch
").hide(); 1157 $("#fromToSearch
").show(); 1167 function ConfirmDelete() {
1168 var confirmDeleteDialog = $("#confirmDeleteDialog
").data("kendoDialog
"); 1169 if (confirmDeleteDialog == null) { 1181 confirmDeleteDialog = $("<div
id=
'confirmDeleteDialog'></div>
").appendTo("body
").kendoDialog({ 1183 {text: "No
", action: function() { 1184 confirmDeleteDialog.close(); 1185 var actionDDL = $("#actionDDL
").data("kendoDropDownList
"); 1186 actionDDL.value(""); 1189 {text: "Yes
", primary: true, action: function() { 1190 $("#loanAppGrid
").data("kendoGrid
").dataSource.query({page: 1, pageSize: pageSize, 1191 operation: "deleteLoans
"}); <?php // Make sure to reset the page number when the filter changes. ?> 1192 confirmDeleteDialog.close(); 1193 var actionDDL = $("#actionDDL
").data("kendoDropDownList
"); 1194 actionDDL.value(""); 1199 if (window.activeWindows != null) { 1200 window.activeWindows.push(this); 1204 if (window.activeWindows != null) { 1205 window.activeWindows.pop(); 1211 title: "Confirm Deletion
" 1212 }).data("kendoDialog
"); 1215 var template = kendo.template($("#loanAppDeleteTemplate
").html()); 1216 var gridData = $("#loanAppGrid
").data("kendoGrid
").dataSource.data(); 1217 var selectedLoans = $.grep(gridData, function(n,i) { return n.checked != null && n.checked; }); 1219 confirmDeleteDialog.content(template({selectedLoans: selectedLoans})).open().center(); 1228 function OpenPrintView() {
1229 var gridHTML = $("#loanAppGrid
").clone(); 1230 $(gridHTML).removeClass("pointerGrid
"); 1231 $(gridHTML).find(".k-grid-toolbar, colgroup col:eq(0), .checkboxTD, thead tr th:eq(0)
").remove(); 1232 gridHTML = $(gridHTML).prop("outerHTML
"); 1233 $("#printForm [name=
'shell']
").val("<br><div
class=
'container-fluid'>
" + gridHTML + "</div>
"); 1234 $("#printForm [name=
'title']
").val("View Loan App Grid
"); 1235 $("#printForm
").submit(); 1244 function OpenLoanAppView() {
1245 var grid = $("#loanAppGrid
").data("kendoGrid
"); 1246 var gridData = grid.dataSource.data(); 1248 for(var i = 0; i != gridData.length; i++) { 1249 var record = gridData[i]; 1250 if (record.checked != null && record.checked) { 1252 url = "main.prg?ft=802&view=
" + record.respid + "&app=
" + record.userid; 1254 gridData[i].checked = false; 1259 window.open(url, "_blank
"); 1261 <?php // Need to remove checkboxes. ?> 1262 grid.dataSource.data(gridData); 1263 $("#loanAppGrid .allCheckbox
").prop("checked
", false); 1265 $("#actionDDL
").data("kendoDropDownList
").value(""); 1276 function SetElementPlaceholders(obj, selected, map)
1278 if (! obj.length || obj.val() !== '') {
1281 obj.attr('placeholder', map[selected]);
1285 var activeWindows = [];
1286 $(document).ready(function() {
1287 $('#list-menu').metisMenu();
1289 InitTimeoutDialog();
1290 <?php printClickOverlayEvent(); ?>
1297 function InitTimeoutDialog()
1299 <?php if (!$frm_login) { ?>
1301 timeout: <?php echo intval($SYSENV["ticket
"]["inactive
"]) - 60;?>, 1303 title : 'Your session is about to expire!', 1304 message : 'You will be logged out in {0} seconds.', 1305 question: 'Do you want to stay signed in?', 1306 keep_alive_button_text: 'Yes, Keep me signed in', 1307 sign_out_button_text: 'No, Sign me out', 1309 logout_redirect_url: '<?php echo $menu_link; ?>?ft=70', 1310 keep_alive_url: '<?php echo $menu_link; ?>?ft=999', 1311 restart_on_yes: true, 1312 cookie_name: 'aTicket', 1320 /********************************** 1322 **********************************/ 1331 <script type="text/x-kendo-
template" id="applicantTemplate
"> 1332 <div id="applicantFormValidateDiv
" style="display:none
"></div> 1333 <form class="container-fluid
" id="applicantFullForm
" data-action="search
"> 1334 <div class="well well-sm container-fluid applicantSearchDiv restrictWidthDiv
"> 1335 <div class="col-xs-12 hcuSpacer hcu-no-padding
"> 1336 <div class="container-fluid
"> 1337 <div class="row hcuSpacer
"> 1338 <label class="col-xs-12 col-sm-4
">Search In</label> 1339 <div class="col-xs-12 col-sm-8
"> 1340 <div id="searchInApplicantDDL
" class="hcu-all-100
"></div> 1343 <div class="row hcuSpacer
"> 1344 <label class="col-xs-12 col-sm-4
">Look For</label> 1345 <div class="col-xs-12 col-sm-8
"> 1346 <input type="text
" class="k-input k-textbox hcu-all-100
" name="lookForApplicant
" 1347 homecu-match="email
" 1348 data-homecuCustomMatch-msg="Email address is invalid.
"> 1353 <div class="col-xs-12 hcuSpacer hcu-no-padding
"> 1354 <div class="container hcu-all-100
"> 1356 <div class="col-xs-12
"> 1357 <a href="\\#
" class="k-button k-primary floatRight
" id="applicantSearchBtn
">Search</a> 1364 <div class="applicantGridDiv
" style="display:none;
"> 1365 <div id="applicantGrid
"></div> 1367 <div class="applicantManagementDiv
" style="display:none;
"> 1370 <button type="submit
" style="display:none;
"></button> 1380 <script type="text/x-kendo-
template" id="loanAppTemplate
"> 1381 <div id="appLoanFormValidateDiv
" class="k-block k-error-colored formValidateDiv
" style="display:none
"></div> 1382 <div class="container-fluid
"> 1383 <form id="appLoanSearchForm
"><div class="well well-sm container-fluid appLoanDiv
"><div> 1384 <div class="col-xs-12 hcuSpacer hcu-no-padding
"> 1385 <div class="container-fluid
"> 1386 <div class="row hcuSpacer
"> 1387 <label class="col-xs-12 col-sm-4
">Search In</label> 1388 <div class="col-xs-12 col-sm-8
"><div id="searchInDDL
" class="hcu-all-100
"></div></div> 1390 <div class="row hcuSpacer
" id="lookForDiv
" style="display:none;
"> 1391 <label class="col-xs-12 col-sm-4
">Look For</label> 1392 <div class="col-xs-12 col-sm-8
"> 1393 <input type="text
" class="k-input k-textbox hcu-all-100
" name="lookFor
" data-email-msg="Search is not valid email.
" placeholder="Select from the list above.
"> 1398 <div class="col-xs-12 hcuSpacer hcu-no-padding
"> 1399 <div class="container-fluid
"> 1400 <div class="row hcuSpacer
"> 1401 <label class="col-xs-12 col-sm-4
">Show Loans with Status</label> 1402 <div class="col-xs-12 col-sm-8
"><div id="statusDDL
" class="hcu-all-100
"></div></div> 1406 <div class="col-xs-12 hcuSpacer hcu-no-padding
"> 1407 <div class="container-fluid
"> 1408 <div class="row hcuSpacer
"><label class="col-xs-12 col-sm-4
">Show</label> 1409 <div class="col-xs-12 col-sm-8
"><div id="rangeTypeDDL
" class="hcu-all-100
"></div></div> 1411 <div id="fromToSearch
" style="display:none;
" class="row hcuSpacer
"><label class="col-xs-12 col-sm-4
">From</label> 1412 <div class="col-xs-12 col-sm-8
"> 1413 <?php // Because they are kendo controls, inline styles show up differently then CSS rules (not even with !important). ?> 1414 <input type="text
" id="fromDate
" name="fromDate
" style="width: 40%;
float: left;
" homecu-match="date
" 1415 data-homecuCustomMatch-msg="From date is invalid.
" data-required-msg="From date is required.
" placeholder="From date
"> 1417 <input type="text
" id="toDate
" name="toDate
" style="width: 40%;
float: right;
" homecu-match="date
" 1418 data-homecuCustomMatch-msg="To date is invalid.
" 1419 data-required-msg="To date is required.
" homecu-dategtvalue="fromDate
" homecu-dategttype="field
" 1420 data-homecuCustomDateGTValue-msg="To date must be past from date.
" placeholder="Enter to date.
"> 1425 <div class="col-xs-12 hcuSpacer hcu-no-padding
"> 1426 <div class="container-fluid
"> 1427 <div class="row hcuSpacer
"> 1428 <label class="col-xs-12 col-sm-4
">Sort By</label> 1429 <div class="col-xs-12 col-sm-8
"><div id="sortByDDL
" class="hcu-all-100
"></div></div> 1434 <div class="col-xs-12 hcuSpacer hcu-no-padding
"><div class="container hcu-all-100
"><div class="row
"><div class="col-xs-12
"> 1435 <button type="submit
" class="k-button k-primary floatRight
" id="loanAppSearchBtn
">Search</button> 1436 </div></div></div></div> 1439 <div class="small vsgSecondary
" style="display:none;
" id="forUserIdMsg
">Showing loans for loan app user <span></span>.</div> 1440 <div id="loanAppGrid
" class="hcu-all-100 pointerGrid
"></div> 1441 <form id="auditPrintForm
" method="post
" action="shell.prg
" target="auditPrint
"> 1442 <input type="hidden
" name="shell
" value=""> 1443 <input type="hidden
" name="title
" value=""> 1454 <script type="text/x-kendo-
template" id="loanAppRowTemplate
"> 1455 <tr data-uid='#: uid #'> 1456 <td class="checkboxTD
"> 1457 <input type='checkbox' class='rowCheckbox'> 1460 #= kendo.toString(start, "d
") # <br> 1484 <script type="text/x-kendo-
template" id="loanAppDeleteTemplate
"> 1485 <div class="container-fluid
"> 1487 <div class="container-fluid
"> 1488 <div class="row hcu-no-padding
"> 1489 <div class="col-xs-3 hcu-no-padding
"><label>Name</label></div> 1490 <div class="col-xs-3 hcu-no-padding
"><label>Started On</label></div> 1491 <div class="col-xs-3 hcu-no-padding
"><label>Type</label></div> 1492 <div class="col-xs-3 hcu-no-padding
"><label>Email</label></div> 1496 # for (var i = 0; i != selectedLoans.length; i++) { 1497 var rec = selectedLoans[i]; # 1498 <div class="row hcuSpacer
"> 1499 <div class="container-fluid
"> 1500 <div class="row well well-sm hcu-no-padding
"> 1501 <div class="col-xs-3 hcu-no-padding
">#: rec.name #</div> 1502 <div class="col-xs-3 hcu-no-padding
">#= kendo.toString(rec.start, "g
") #</div> 1503 <div class="col-xs-3 hcu-no-padding
">#: rec.title #</div> 1504 <div class="col-xs-3 hcu-no-padding
">#: rec.email #</div> 1509 <div class="row
"> </div> 1510 <div class="row hcuSpacer
"> 1511 <div class="container-fluid
"> 1513 # var thes = selectedLoans.length == 1 ? "this" : "these
"; 1514 var es = selectedLoans.length == 1 ? "application
" : "applications
"; # 1515 Are you sure you want to delete #: thes # loan #: es #? 1528 <script type="text/x-kendo-
template" id="applicantMaintenanceTemplate
"> 1529 <div class="container-fluid
"> 1530 <div class="h4 hcuSpacer
"> 1535 # var loanText = ""; var loanLink = ""; 1536 switch (numLoanApps) { 1543 loanLink = "(<a href=
'\\#' class=
'gotoLoans'>Go to loans</a>)
"; 1547 loanLink = "(<a href=
'\\#' class=
'gotoLoans'>Go to loans</a>)
"; 1551 <div class="well well-sm container-fluid restrictWidthDiv
"> 1552 <div class="col-xs-12 hcuSpacer hcu-no-padding
"> 1553 <div class="container-fluid
"> 1554 <div class="row hcuSpacer
"> 1555 <label class="col-xs-12
">Applicant ID </label> 1556 <div class="col-xs-12 admIndent userIdLabel
">#: lnId #</div> 1558 <div class="row hcuSpacer
"> 1559 <label class="col-xs-12
">Login Type </label> 1560 <div class="col-xs-12 admIndent
">#: loginType #</div> 1562 <div class="row hcuSpacer
"> 1563 <label class="col-xs-12
">Account \\# </label> 1564 <div class="col-xs-12 admIndent
"># if (accountnumber == "") { # N/A # } else { # #: accountnumber # # } #</div> 1566 <div class="row hcuSpacer
"> 1567 <label class="col-xs-12
">Username </label> 1568 <div class="col-xs-12 admIndent
"># if (username == "") { # N/A # } else { # #: username # # } #</div> 1570 <div class="row hcuSpacer
"> 1571 <label class="col-xs-12
">Number of Loans </label> 1572 <div class="col-xs-12 admIndent
">#: numLoanApps # #= loanText # #= loanLink #</div> 1578 <div class="container-fluid
"> 1579 <div class="h4 hcuSpacer
"> 1584 # var lockedClasses = isLocked ? "originalLocked currentLocked
" : "originalUnlocked currentUnlocked
"; # 1586 <div class="well well-sm container-fluid restrictWidthDiv
"> 1587 <div class="col-xs-12 hcuSpacer hcu-no-padding
"> 1588 <div class="container-fluid
"> 1589 <div class="row hcuSpacer
"> 1590 <label class="col-xs-12 col-sm-4
">Lock User</label> 1591 <div class="col-xs-12 col-sm-8
"> 1592 <div class="lockAccount #: lockedClasses # admAlignBottom
"> 1593 <span class="text col-xs-4 col-md-3 hcu-no-padding
"></span> 1594 <span class="col-xs-5 col-md-1 hcu-no-padding
">(<a href="\\#
"></a>)</span> 1598 # if (canChangeLogin) { # 1599 <div class="row hcuSpacer
"> 1600 <label class="col-xs-12 col-sm-4
">Email</label> 1601 <div class="col-xs-12 col-sm-8
"> 1602 <input class="k-input k-textbox hcu-all-100
" name="email
" value="#: email #
" type="text
" data-homecuCustomMatch-msg="Email is invalid.
" 1603 homecu-match="email
"> 1606 <div class="row hcuSpacer
"> 1607 <label class="col-xs-12 col-sm-4
">Enter Password</label> 1608 <div class="col-xs-12 col-sm-8
"> 1609 <input id="password
" name="password
" type="password
" maxlength="255
" class="hcu-all-100 k-input k-textbox
"> 1612 <div class="row hcuSpacer
"> 1613 <label class="col-xs-12 col-sm-4
">Confirm</label> 1614 <div class="col-xs-12 col-sm-8
"> 1615 <input id="confirm
" name="confirm
" type="password
" maxlength="255
" class="hcu-all-100 k-input k-textbox
"> 1619 <div class="row hcuSpacer
"> 1620 <div class="col-xs-12
"> 1621 <a href="\\#
" class="k-button k-primary floatRight
" id="applicantSaveBtn
">Save</a> 1628 <div class="container-fluid
"> 1629 <div class="h4 hcuSpacer
"> 1633 <div class="well well-sm container-fluid restrictWidthDiv
"> 1634 <div class="col-xs-12 hcuSpacer hcu-no-padding
"> 1635 <div class="container-fluid
"> 1636 <div class="row hcuSpacer
"> 1637 <label class="col-xs-12
">Confidence Word </label> 1638 <div class="col-xs-12 admIndent
">#: confidence #</div> 1641 # if (securityQuestions.length == 0) { # 1642 <div class="row hcuSpacer
"> 1643 (No Security Questions Found.) 1646 for (var i = 0; i != securityQuestions.length; i++) { 1647 var secrec = securityQuestions[i]; # 1648 <div class="row hcuSpacer
"> 1649 <label class="col-xs-12
">#: secrec.question # </label> 1650 <div class="col-xs-12 admIndent
">#: secrec.answer #</div> 1660 /********************************* 1662 **********************************/ 1666 .appLoanDiv > div, .applicantSearchDiv > div { 1670 .restrictWidthDiv > * { 1674 #fromToSearch > div { 1684 /******************************** 1686 *********************************/ 1689 <div class="container-fluid
" id="appAdmDiv
"> 1691 <div class="errorDiv
"></div> 1692 <h2>Online Loan Applications</h2> 1694 <div class=" tabTitles row adm-no-horz-margin
"> 1695 <div class="col-xs-2 selected
" data-name="applicant
"><div><i class="fa fa-user fa-6
"> 1696 <div class="hidden-xs hidden-sm text
"> Applicant</div></i></div></div> 1697 <div class="col-xs-2 lastChild
" data-name="loanApps
"><div><i class="fa fa-tasks fa-6
"> 1698 <div class="hidden-xs hidden-sm text
"> Loan Apps</div></i></div></div> 1701 <div class="form-group tabContents
" data-name="applicant
"></div> 1702 <div class="form-group tabContents
" data-name="loanApps
" style="display:none;
"></div> 1707 <form id="printForm
" method="post
" action="shell.prg
" target="printWindow
"> 1708 <input type="hidden
" name="shell
" value=""> 1709 <input type="hidden
" name="title
" value=""> def main(certificate_path, secret_id, region=None)