7 require_once(
"$admLibrary/aAudit.i");
9 $string = array(
"filter" => HCUFILTER_INPUT_STRING);
10 HCU_ImportVars($SYSENV,
"IMPORTS", array(
"operation" => $string,
"duration" => $string,
"auditUser" => $string,
"loggedInUser" => $string,
"actionType" => $string,
11 "startOn" => $string,
"account" => $string,
"limit" => $string,
"offset" => $string,
"sort" => $string,
"showThis" => $string,
12 "changedOnly" => $string,
"endOn" => $string));
14 $operation = HCU_array_key_value(
"operation", $SYSENV[
"IMPORTS"]);
15 if ($operation !==
false) {
18 $returnArray = GetAuditRecords($dbh, $Cu, $SYSENV[
"IMPORTS"], $SYSENV[
"logger"]);
21 $returnArray = array(
"error" => array(
"Operation not specified: '$operation'"),
"record" => array());
24 header(
'Content-type: application/json');
25 print HCU_JsonEncode($returnArray);
27 PrintPage(
"$menu_link?ft=$ft", GatherPageData($dbh, $Cu));
43 function GatherPageData($dbh, $Cu) {
46 $results = GetAuditTypesList($dbh, $Cu);
47 if ($results[
"status"] !==
"000") {
48 throw new exception($results[
"error"], 1);
50 $types = $results[
"ddl"];
53 array(
"value" =>
"all",
"text" =>
"Banking and Admin User Changes"),
54 array(
"value" =>
"admin",
"text" =>
"Admin User Changes Only"),
55 array(
"value" =>
"banking",
"text" =>
"Banking User Changes")
59 array(
"value" =>
"",
"text" =>
"Print Events"),
60 array(
"value" =>
"selected",
"text" =>
"Selected Events Only"),
61 array(
"value" =>
"changed",
"text" =>
"All Events (Changes Only)"),
62 array(
"value" =>
"all",
"text" =>
"All Events")
66 $returnArray = array(
"status" =>
"000",
"error" =>
"",
"data" => array(
"types" => $types,
"shows" => $shows,
"prints" => $prints));
67 }
catch (exception $e) {
68 $returnArray = array(
"status" => $e->getCode(),
"error" => $e->getMessage());
80 function GetAuditTypesList(){
82 [
"text"=>
'All Types',
"value"=>
''],
83 [
"text"=>
'Account Delete',
"value"=>
'Account Delete'],
84 [
"text"=>
'Activate User',
"value"=>
'Activate User'],
85 [
"text"=>
'Add New Account',
"value"=>
'Add New Account'],
86 [
"text"=>
'Alert Status Update',
"value"=>
'Alert Status Update'],
87 [
"text"=>
'Auto Add User Accounts',
"value"=>
'Auto Add User Accounts'],
88 [
"text"=>
'Correct Restrictions',
"value"=>
'Correct Restrictions'],
89 [
"text"=>
'Delete Account',
"value"=>
'Delete Account'],
90 [
"text"=>
'E-Statement Update',
"value"=>
'E-Statement Update'],
91 [
"text"=>
'Forgot Password',
"value"=>
'Forgot Password'],
92 [
"text"=>
'Group Add',
"value"=>
'Group Add'],
93 [
"text"=>
'Group Deleted',
"value"=>
'Group Deleted'],
94 [
"text"=>
'Member Account Rights Change',
"value"=>
'Member Account Rights Change'],
95 [
"text"=>
'Member Settings',
"value"=>
'Member Settings'],
96 [
"text"=>
'Phone Add',
"value"=>
'Phone Add'],
97 [
"text"=>
'Primary User Access Add',
"value"=>
'Primary User Access Add'],
98 [
"text"=>
'Primary User Access Delete',
"value"=>
'Primary User Access Delete'],
99 [
"text"=>
'Required Profile Update',
"value"=>
'Required Profile Update'],
100 [
"text"=>
'Reset Password',
"value"=>
'Reset Password'],
101 [
"text"=>
'Rights Add',
"value"=>
'Rights Add'],
102 [
"text"=>
'Rights Delete',
"value"=>
'Rights Delete'],
103 [
"text"=>
'Rights Update',
"value"=>
'Rights Update'],
104 [
"text"=>
'Status Update',
"value"=>
'Status Update'],
105 [
"text"=>
'Update Account',
"value"=>
'Update Account'],
106 [
"text"=>
'Update User Security',
"value"=>
'Update User Security'],
107 [
"text"=>
'User Accounts Add',
"value"=>
'User Accounts Add'],
108 [
"text"=>
'User Accounts Update',
"value"=>
'User Accounts Update'],
109 [
"text"=>
'User Add',
"value"=>
'User Add'],
110 [
"text"=>
'User Login Deleted',
"value"=>
'User Login Deleted'],
111 [
"text"=>
'User Member Add',
"value"=>
'User Member Add']
113 $returnArray = array(
"status" =>
"000",
"error" =>
"",
"ddl" => $types);
131 function GetAuditRecords($dbh, $Cu, $parameters, $logger) {
133 extract($parameters);
135 $duration = strtolower(isset($duration) ? trim($duration) :
"");
136 $auditUser = strtolower(isset($auditUser) ? trim($auditUser) :
"");
137 $account = strtolower(isset($account) ? trim($account) :
"");
138 $loggedInUser = strtolower(isset($loggedInUser) ? trim($loggedInUser) :
"");
139 $actionType = strtolower(isset($actionType) ? trim($actionType) :
"");
141 $startOn = isset($startOn) ? trim($startOn) :
"";
142 $endOn = isset($endOn) ? trim($endOn) :
"";
143 $showThis = isset($showThis) ? trim($showThis) :
"";
144 $changedOnly = isset($changedOnly) ? trim($changedOnly) ==
"Y" :
false;
146 $limit = isset($limit) ? intval($limit) : 0;
147 $offset = isset($offset) ? intval($offset) : 0;
148 $limitSQL = $limit == 0 && $offset == 0 ?
"" :
"limit $limit offset $offset";
150 $sort = isset($sort) ? trim($sort) :
"";
153 $sort = HCU_JsonDecode($sort);
154 foreach($sort as $sortItem) {
155 if (!HCU_array_key_exists(
"field", $sortItem) || !HCU_array_key_exists(
"dir", $sortItem)) {
156 throw new exception (
"Sort is invalid.", 24);
158 $field = $sortItem[
"field"];
159 $dir = $sortItem[
"dir"];
161 if (!in_array($dir, array(
"asc",
"desc"))) {
162 throw new exception (
"Sort is invalid.", 25);
165 $field = $field ==
"user" ?
"1" : ($field ==
"account" ?
"2" : $field);
168 $sortSQL[] =
"$field $dir";
171 $sortSQL = count($sortSQL) > 0 ?
"order by " . implode(
", ", $sortSQL) :
"";
173 $outerWhere = array();
174 $innerWhere = array();
176 if ($duration ==
"") {
177 throw new exception(
"Duration is required.", 20);
180 $cuTzString = GetCreditUnionTimezone($dbh, $Cu);
181 $cuTz =
new DateTimeZone($cuTzString);
190 $today =
new DateTime(
"now", $cuTz);
191 $today->setTime(0,0);
192 $today->modify(
"-$duration days");
193 $today = $today->format(
"Y-m-d");
194 $innerWhere[] =
"aut.auditdate >= '$today'";
199 if ($startOn ==
"" && $endOn ==
"") {
200 throw new exception(
"Invalid duration.", 21);
203 if ($startOn !=
"") {
204 $startOnDate = DateTime::createFromFormat(
"Y-m-d", $startOn, $cuTz);
205 if ($startOnDate ===
false) {
206 throw new exception(
"Start On is invalid.", 22);
208 $startOn = $startOnDate->format(
"Y-m-d");
210 $innerWhere[] =
"aut.auditdate >= '$startOn'";
214 $endOnDate = DateTime::createFromFormat(
"Y-m-d", $endOn, $cuTz);
215 if ($endOnDate ===
false) {
216 throw new exception(
"End On is invalid.", 27);
218 $endOnDate->setTime(0,0);
219 $endOnDate->modify(
"+1 days");
220 $endOn = $endOnDate->format(
"Y-m-d");
222 $innerWhere[] =
"aut.auditdate < '$endOn'";
227 throw new exception(
"Duration is invalid.", 23);
235 $innerWhere[] =
"aut.auditsrctype = 'A'";
238 $innerWhere[] =
"aut.auditsrctype = 'U'";
241 throw new exception (
"Show option is invalid.", 28);
244 $auditString =
"aut.auditrecbefore::text || aut.auditrecafter::text";
245 $lowerAuditString =
"lower($auditString)";
247 if ($auditUser !=
"") {
250 $sql =
"select user_id from ${Cu}user where lower(user_name) = '" . prep_save($auditUser, 50) .
"'";
251 $sth = db_query($sql, $dbh);
253 throw new exception (
"user query failed.", 26);
255 $userId = db_num_rows($sth) > 0 ? intval(db_fetch_row($sth, 0)[0]) : -1;
257 $innerWhere[] =
"(aut.user_id = $userId 258 or strpos($lowerAuditString, '\"user_name\":\"" . prep_save($auditUser, 50) .
"') > 0)";
259 $outerWhere[] =
"t.userl ? '" . prep_save($auditUser, 50) .
"'";
261 if ($account !=
"") {
262 $innerWhere[] =
"(aut.accountnumber = '" . prep_save($account, 50) .
"' 263 or strpos($lowerAuditString, '\"accountnumber\":\"" . prep_save($account, 50) .
"') > 0)";
264 $outerWhere[] =
"t.account ? '" . prep_save($account, 50) .
"'";
266 if ($loggedInUser !=
"") {
267 $innerWhere[] =
"lower(aut.auditsrcuser_name) = '" . prep_save($loggedInUser, 50) .
"'";
269 if ($actionType !=
"") {
270 $innerWhere[] =
"lower(aut.auditfulldesc) = '" . prep_save($actionType, 255) .
"'";
275 $unnest =
'unnest(string_to_array(AUDIT, \'"VALUE"\'))';
276 $unnestL = str_replace(
"AUDIT", $lowerAuditString, $unnest);
277 $unnestU = str_replace(
"AUDIT", $auditString, $unnest);
278 $userUnnest = str_replace(
"VALUE",
"user_name", $unnestU);
279 $userUnnestL = str_replace(
"VALUE",
"user_name", $unnestL);
280 $accountUnnest = str_replace(
"VALUE",
"accountnumber", $unnestU);
284 $agg =
'jsonb_agg(trim(case when strpos(COLUMN1, \':"\') = 1 then substr(replace(COLUMN1, \':"\', \'\'), 1, strpos(replace(COLUMN1, \':"\', \'\'), \'"\') - 1) else null end))';
285 $agg .=
' || jsonb_agg(trim(COLUMN2))';
286 $userAgg = str_replace(
"COLUMN2",
"u.user_name", str_replace(
"COLUMN1",
"au.userun", $agg));
287 $userAggL = str_replace(
"COLUMN2",
"lower(u.user_name)", str_replace(
"COLUMN1",
"au.userunl", $agg));
288 $accountAgg = str_replace(
"COLUMN2",
"au.accountnumber", str_replace(
"COLUMN1",
"au.accountun", $agg));
294 $selectCol =
"select string_agg(val, ', ') 295 from (select val->>0, row_number() over (partition by lower(val->>0) order by val->>0 = lower(val->>0)) as rown 296 from jsonb_array_elements(COLUMN::jsonb) as t(val) 297 where val->>0 is not null and trim(val->>0) <> '' 298 order by 1) as u (val) where rown = 1";
300 $selectUser = str_replace(
"COLUMN",
"t.user", $selectCol);
301 $selectAccount = str_replace(
"COLUMN",
"t.account", $selectCol);
303 $select =
"select ($selectUser) as user, ($selectAccount) as account, t.date, t.actioncode, t.srcuser, t.before, t.after, t.script, t.action, t.accountnumber, t.rown ";
305 $sql =
"from (select au.date, au.actioncode, au.srcuser, au.before, au.after, au.script, au.action, au.accountnumber, row_number() over (order by au.date) as rown, 308 $accountAgg as account 310 select aut.auditdate as date, aut.auditaction as actioncode, aut.auditsrcuser_name as srcuser, aut.auditrecbefore as before, aut.auditrecafter as after, 311 aut.accountnumber, aut.auditsrccode_context as script, aut.auditfulldesc as action, aut.user_id, 312 $userUnnest as userun, $userUnnestL as userunl, $accountUnnest as accountun from ${Cu}audituser aut " 313 . ((count($innerWhere) > 0) ?
"where " . implode(
" and ", $innerWhere) :
"") .
" 315 left join ${Cu}user u on au.user_id = u.user_id 316 group by au.date, au.actioncode, au.srcuser, au.before, au.after, au.script, au.action, au.accountnumber) t " 317 . ((count($outerWhere) > 0) ?
"where " . implode(
" and ", $outerWhere) :
"");
319 $countSQL =
"select count(*) $sql";
320 $mainSQL =
"set time zone '$cuTzString'; $select $sql $sortSQL $limitSQL;";
322 $sth = db_query($countSQL, $dbh);
324 throw new exception(
"Count query failed.", 12);
327 $count = intval(db_fetch_row($sth, 0)[0]);
329 $sth = db_query($mainSQL, $dbh);
331 throw new exception(
"Audit query failed.", 13);
334 $auditRecords = array();
335 for($i = 0; $row = db_fetch_assoc($sth, $i); $i++) {
336 $results = ParseUserAuditRow($row, $Cu, $dbh, $changedOnly);
337 if ($results[
"status"] !==
"000") {
338 $logger->error(
"Banking audit is invalid in the database. CU: $Cu, Audit Date: " . $row[
"date"]);
342 unset($row[
"before"]);
343 unset($row[
"after"]);
344 $row[
"details"] = $results[
"details"];
347 $dateTime =
new DateTime($row[
"date"], $cuTz);
348 $row[
"date"] = $dateTime->format(
"Y-m-d H:i:s.u") .
"Z";
350 $auditRecords[] = $row;
353 $returnArray = array(
"status" =>
"000",
"error" =>
"",
"auditRecords" => array(
"total" => $count,
"data" => $auditRecords));
354 }
catch(exception $e) {
355 $returnArray = array(
"status" => $e->getCode(),
"error" => $e->getMessage(),
"auditRecords" => array(
"total" => 0,
"data" => array()));
367 function RemoveEmptyValues($string) {
368 return isset($string) && trim($string) !=
"";
378 function PrintPage($self, $readData) { ?>
379 <script type=
"text/javascript">
381 getShowWaitFunctions(); ?>
388 var isInitial =
true;
399 function AddDays(date, numberofDays) {
400 var d =
new Date(date);
401 return new Date(d.getFullYear(), d.getMonth(), (d.getDate() + numberofDays));
404 var gridDataSource =
null;
405 var printDataSource =
null;
406 var isInitial =
true;
414 function InitDataSources() {
416 url:
"<?php echo $self; ?>&operation=readAudits",
421 var GetDataFromSearch =
function(data) {
422 var duration = $(
"#durationDDL").data(
"kendoDropDownList").value();
423 var startOn = $(
"#startingDatePicker").data(
"kendoDatePicker").value();
424 var endOn = $(
"#endingDatePicker").data(
"kendoDatePicker").value();
425 startOn = startOn ==
null || duration !=
"on" ?
"" : kendo.toString(startOn,
"yyyy-MM-dd");
426 endOn = endOn ==
null || duration !=
"on" ?
"" : kendo.toString(endOn,
"yyyy-MM-dd");
428 data.duration = duration;
429 data.startOn = startOn;
431 data.auditUser = $(
"[name='auditUser']").val().trim();
432 data.loggedInUser = $(
"[name='loggedInUser']").val().trim();
433 data.actionType = $(
"#actionDDL").data(
"kendoDropDownList").value();
434 data.account = $(
"[name='account']").val().trim();
435 data.showThis = $(
"#showDDL").data(
"kendoDropDownList").value();
440 var gridParameterMap =
function(data, type) {
443 if (isInitial) { <?php
444 data.duration =
"30";
445 data.showThis =
"all";
448 data = GetDataFromSearch(data);
452 data.sort = kendo.stringify(data.sort);
455 data.limit = data.pageSize;
456 data.offset = data.skip;
457 delete data.pageSize;
465 var printParameterMap =
function(data, type) {
468 data = GetDataFromSearch(data);
471 data.sort = kendo.stringify(gridDataSource.sort());
479 gridDataSource =
new kendo.data.DataSource({
482 parameterMap: gridParameterMap
488 rown: {type:
"number"},
489 date: {type:
"date"},
490 action: {type:
"string"},
491 actioncode: {type:
"string"},
492 details: {type:
"odata"},
493 user: {type:
"string"},
494 srcuser: {type:
"string"},
495 script: {type:
"string"},
496 checked: {type:
"boolean"},
497 account: {type:
"string"}
502 parse:
function (data) {
505 if (data.status !==
"000") {
506 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError);
509 return data.auditRecords;
518 sort: {field:
"date", dir:
"desc"}
521 printDataSource =
new kendo.data.DataSource({
524 parameterMap: printParameterMap
530 rown: {type:
"number"},
531 date: {type:
"date"},
532 action: {type:
"string"},
533 actioncode: {type:
"string"},
534 details: {type:
"odata"},
535 user: {type:
"string"},
536 srcuser: {type:
"string"},
537 script: {type:
"string"},
538 checked: {type:
"boolean"},
539 account: {type:
"string"}
542 parse:
function (data) {
545 if (data.status !==
"000") {
546 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError);
548 PrintAudits(data.auditRecords.data);
551 $(
"#printDDL").data(
"kendoDropDownList").value(
"");
565 $.homecuValidator.setup({formValidate:
"searchForm", formStatusField:
"formValidateDiv"});
566 if (
"<?php echo $readData["status
"]; ?>" !==
"000") {
567 $.homecuValidator.displayMessage(
"<?php echo $readData["error
"]; ?>", $.homecuValidator.settings.statusError);
569 $.homecuValidator.setup({formValidate:
"searchForm", formStatusField:
"formValidateDiv"});
573 var grid = $(
"#auditGrid").kendoGrid({
574 dataSource: gridDataSource,
576 {
template:
"<input type='checkbox' class='rowCheckbox'>", attributes: {
"class":
"checkboxTD"},
577 headerTemplate:
"<input type='checkbox' class='allCheckbox'>", width:
"45px", sortable:
false, filterable:
false},
578 {field:
"date", title:
"Date", format:
"{0:G}"},
579 {field:
"user", title:
"Banking User"},
580 {field:
"account", title:
"Account"},
581 {field:
"srcuser", title:
"Changed by"},
582 {field:
"action", title:
"Action Type"},
586 template:
"<tr class='noRecordsDiv'><td colspan='4'>No Records Found</td></tr>" 588 detailTemplate: ReturnAuditDetailTemplate,
591 toolbar: $(
"#toolbarTemplate").html(),
593 alwaysVisible:
false <?php
595 }).data(
"kendoGrid");
597 $(
"#auditGrid").on(
"click",
".auditDetailContainer .auditShowAllBtn",
function() {
598 if ($(
this).text().trim() ==
"Show All") {
599 $(
this).closest(
".auditDetailContainer").removeClass(
"hideAA");
600 $(
this).text(
"Show Changed");
602 $(
this).closest(
".auditDetailContainer").addClass(
"hideAA");
603 $(
this).text(
"Show All");
609 <?php printCheckboxEvents(
"#auditGrid"); ?>
611 var printDDL = $(
"#printDDL").kendoDropDownList({
613 data: <?php echo HCU_JsonEncode($readData[
"data"][
"prints"]); ?>,
614 filter: {field:
"value",
operator:
"neq", value:
"selected"}
616 dataTextField:
"text",
617 dataValueField:
"value",
618 change:
function(e) {
619 switch(this.value()) {
623 var shownData = $(
"#auditGrid").data(
"kendoGrid").dataSource.view();
624 var selectedData = $.grep(shownData,
function(n, i) {
return n.checked; });
625 PrintAudits(selectedData);
629 printDataSource.read({changedOnly:
"Y"});
632 printDataSource.read();
636 }).data(
"kendoDropDownList");
638 $(
"#auditGrid").on(
"click",
".allCheckbox,.rowCheckbox",
function() {
639 var checked = $(
this).prop(
"checked");
640 var doFilter =
false;
641 if (checked && $(
this).is(
".rowCheckbox")) {
644 var gridData = $(
"#auditGrid").data(
"kendoGrid");
645 var shownData = grid.dataSource.view();
646 var checkedData = $.grep(shownData,
function(n, i) {
650 doFilter = checkedData.length <= 0;
653 var ddl = $(
"#printDDL").data(
"kendoDropDownList");
655 ddl.dataSource.filter({field:
"value",
operator:
"neq", value:
"selected"});
657 ddl.dataSource.filter(
null);
661 $(
".k-grid-show").click(
function() {
662 if ($(
this).text().trim() ==
"Show Filter") {
663 $(
".auditFilterDiv").show();
664 $(
this).text(
"Hide Filter");
666 $(
".auditFilterDiv").hide();
667 $(
this).text(
"Show Filter");
672 var actionDDL = $(
"#actionDDL").kendoDropDownList({
674 data: <?php echo HCU_JsonEncode($readData[
"data"][
"types"]); ?>
676 dataTextField:
"text",
677 dataValueField:
"value" 678 }).data(
"kendoDropDownList");
680 var showDDL = $(
"#showDDL").kendoDropDownList({
682 data: <?php echo HCU_JsonEncode($readData[
"data"][
"shows"]); ?>
684 dataTextField:
"text",
685 dataValueField:
"value" 686 }).data(
"kendoDropDownList");
688 $(
"#okayBtn").click(
function() {
689 if ($.homecuValidator.validate()) {
690 grid.dataSource.query({page: 1, pageSize: pageSize, sort: grid.dataSource.sort()}); <?php
695 $(
"[name='durationCheck']").click(
function() {
696 var thisElement =
this;
697 startingDatePicker.enable(($(thisElement).data(
"val") +
"").trim() ==
"on");
700 var now =
new Date();
701 now.setHours(0, 0, 0, 0);
702 var all =
new Date();
703 all.setHours(0, 0, 0, 0);
705 all.setMonth((all.getMonth() - 1) % 12);
706 all.setFullYear(all.getFullYear() - 1);
708 var minx =
new Date();
709 minx.setHours(0, 0, 0, 0);
710 var min30 = AddDays(minx, -30);
711 var min60 = AddDays(minx, -60);
712 var min90 = AddDays(minx, -90);
714 var startingDatePicker = $(
"#startingDatePicker").kendoDatePicker({
717 format:
"MM/dd/yyyy", <?php
719 $(
"#durationDDL").data(
"kendoDropDownList").value(
"on"); <?php
721 }).data(
"kendoDatePicker");
723 var endingDatePicker = $(
"#endingDatePicker").kendoDatePicker({
726 format:
"MM/dd/yyyy", <?php
728 $(
"#durationDDL").data(
"kendoDropDownList").value(
"on"); <?php
730 }).data(
"kendoDatePicker");
732 $(
"#startingDatePicker").focus(
function() { <?php
734 startingDatePicker.value(
null);
737 $(
"#endingDatePicker").focus(
function() { <?php
739 endingDatePicker.value(
null);
742 $(
"#startingDatePicker").blur(
function() {
743 if ($(
this).hasClass(
"k-invalid")) {
744 $(startingDatePicker.wrapper).css(
"border",
"1px solid #d80000");
746 $(startingDatePicker.wrapper).css(
"border",
"inherit");
750 $(
"#endingDatePicker").blur(
function() {
751 if ($(
this).hasClass(
"k-invalid")) {
752 $(endingDatePicker.wrapper).css(
"border",
"1px solid #d80000");
754 $(endingDatePicker.wrapper).css(
"border",
"inherit");
758 var durationDDL = $(
"#durationDDL").kendoDropDownList({
761 {text:
"Last 30 days", value:
"30"},
762 {text:
"Last 60 days", value:
"60"},
763 {text:
"Last 90 days", value:
"90"},
764 {text:
"All Available", value:
"all"},
765 {text:
"Custom", value:
"on"}
768 dataTextField:
"text",
769 dataValueField:
"value",
771 switch(this.value()) {
772 case "custom":
break; <?php
773 case "all": startingDatePicker.value(all); endingDatePicker.value(now);
break;
774 case "30": startingDatePicker.value(min30); endingDatePicker.value(now);
break;
775 case "60": startingDatePicker.value(min60); endingDatePicker.value(now);
break;
776 case "90": startingDatePicker.value(min90); endingDatePicker.value(now);
break;
779 }).data(
"kendoDropDownList");
781 startingDatePicker.value(min30); <?php
782 endingDatePicker.value(now); <?php
785 var activeWindows = [];
786 $(document).ready(
function() {
788 <?php printClickOverlayEvent(); ?>
801 function ReturnAuditDetailTemplate(row, isPrinting) {
802 var returnString =
'<div class="auditMaxHeight"><div class="container-fluid auditDetailContainer hideAA">';
804 for (var i = 0, iLength = row.details.length; i != iLength; i++) {
805 var tableRow = row.details[i];
807 var message = tableRow.label + (tableRow.type !=
"mixed" ?
"(" + tableRow.type +
" records)" :
"");
808 returnString +=
'<div class="row form-group"><div class="col-xs-12"><h4 class="h4 hcuSpacerx">' + message +
'</h4></div></div>';
811 if (tableRow.altDesc !=
null && tableRow.altDesc !=
"") {
812 returnString += tableRow.altDesc;
816 for (var j = 0, jLength = tableRow.rows.length; j != jLength; j++) {
817 var rowRow = tableRow.rows[j];
819 if (rowRow.altDesc !=
null && rowRow.altDesc !=
"") {
820 returnString +=
'<div class="row"><div class="col-xs-12">' + rowRow.altDesc +
'</div></div>';
824 var showBefore =
true;
825 var showAfter =
true;
826 switch (rowRow.type) {
827 case "add": showBefore =
false;
break;
828 case "remove": showAfter =
false;
break;
830 var theseClasses = showBefore && showAfter ?
"col-xs-4 col-md-4" :
"col-xs-8 col-md-8";
831 if (tableRow.type ==
"mixed") {
832 var message = rowRow.type +
" record:";
833 returnString +=
'<div class="row form-group"><div class="col-xs-12"><h4 class="h4 hcuSpacerx">' + message +
'</h4></div></div>';
835 returnString +=
'<div class="row form-group mockKendoTable">';
836 if (!isPrinting && i == 0 && j == 0) {
837 returnString +=
'<a href="#" class="auditShowAllBtn">Show All</a><br>';
839 returnString +=
'<div class="th">';
840 returnString +=
'<span class="col-xs-3 col-md-4">Column</span>';
843 returnString +=
'<span class="' + theseClasses +
'">Before</span>';
846 returnString +=
'<span class="' + theseClasses +
'">After</span>';
849 returnString +=
'<div class="clearfix hidden-xs-block"></div>';
850 returnString +=
'</div>'; <?php
852 for (var k = 0, kLength = rowRow.values.length; k != kLength; k++) {
853 var colRow = rowRow.values[k];
854 var same = !isPrinting && colRow.same ?
"aa" :
"";
856 returnString +=
'<div class="tr ' + same +
'">';
857 returnString +=
'<span class="col-xs-3 col-md-4">' + colRow.label +
'</span>';
860 returnString +=
'<span class="' + theseClasses +
'">';
861 if (colRow.before ==
"") {
862 returnString +=
" ";
864 returnString += colRow.before;
866 returnString +=
"</span>";
870 returnString +=
'<span class="' + theseClasses +
'">';
871 if (colRow.after ==
"") {
872 returnString +=
" ";
874 returnString += colRow.after;
876 returnString +=
"</span>";
879 returnString +=
'<div class="clearfix hidden-xs-block"></div>';
880 returnString +=
'</div>'; <?php
883 returnString +=
"</div>"; <?php
887 returnString +=
"</div></div>"; <?php
897 function PrintAudits(gridData) {
898 $(
"<div id='tempAudit' style='display:none;'><div class='container'><div class='row form-group mockKendoTable auditInsertion'></div></div></div>").appendTo(
"body");
900 for(var i = 0; i != gridData.length; i++) {
901 var record = gridData[i];
902 var rowTemplate =
"<div class='tr nobottom'><span class='col-xs-4'>" + record.action +
"</span><span class='col-xs-4'>" 903 + (record.user ==
null ?
" " : record.user) +
"</span>" 904 +
"<span class='col-xs-4'>" + kendo.toString(record.date,
'd')
905 +
"</span></div><div class='tr notop'><span class='col-xs-12'><div class='container-fluid'><div class=' col-xs-12'>" 906 + ReturnAuditDetailTemplate(record,
true) +
"</div></div></span></div>";
907 $(
".auditInsertion").append(rowTemplate);
909 var newWindow = window.open(
"",
"auditPrint");
910 $(
"#auditPrintForm [name='shell']").val($(
"#tempAudit").html());
911 $(
"#auditPrintForm [name='title']").val(
"View User Events");
912 $(
"#auditPrintForm").submit();
913 $(
"#tempAudit").
remove();
917 .auditFilterDiv > div {
921 <script type=
"text/x-kendo-template" id=
"toolbarTemplate">
922 <div
id=
'printDDL' style=
'width:200px;'></div>
923 <a role=
"button" class=
"k-button k-button-icontext k-grid-show" href=
"\#">Show Filter</a>
925 <div
id=
"formValidateDiv" class=
"k-block k-error-colored formValidateDiv" style=
"display:none"></div>
926 <div
class=
"container-fluid">
927 <form
id=
"searchForm"><div
class=
"well well-sm container-fluid auditFilterDiv" style=
"display:none;"><div>
928 <div
class=
"col-xs-12 hcuSpacer hcu-no-padding">
929 <div
class=
"container-fluid">
930 <div
class=
"row hcuSpacer"><label
class=
"col-xs-12 col-sm-5">Date Search Range</label>
931 <div
class=
"col-xs-12 col-sm-7"><div
id=
"durationDDL" class=
"hcu-all-100"></div></div>
933 <div
class=
"row hcuSpacer"><label
class=
"col-xs-12 col-sm-5">From</label>
934 <div
class=
"col-xs-12 col-sm-7">
935 <input type=
"text" id=
"startingDatePicker" homecu-match=
"date" data-homecuCustomMatch-msg=
"Date is invalid."> To
936 <input type=
"text" id=
"endingDatePicker" homecu-match=
"date" data-homecuCustomMatch-msg=
"Date is invalid." 937 homecu-dategtvalue=
"startingDatePicker" homecu-dategttype=
"field" data-homecuCustomDateGTValue-msg=
"Date range is invalid.">
943 <div
class=
"col-xs-12 hcuSpacer hcu-no-padding">
944 <div
class=
"container hcu-all-100">
945 <div
class=
"row hcuSpacer">
946 <label
class=
"col-xs-12 col-sm-5">Changes
for Banking User</label>
947 <div
class=
"col-xs-12 col-sm-7"><input type=
"text" class=
"k-input k-textbox hcu-all-100" name=
"auditUser"></div>
949 <div
class=
"row hcuSpacer">
950 <label
class=
"col-xs-12 col-sm-5">Changes
for Account</label>
951 <div
class=
"col-xs-12 col-sm-7"><input type=
"text" class=
"k-input k-textbox hcu-all-100" name=
"account"></div>
953 <div
class=
"row hcuSpacer">
954 <label
class=
"col-xs-12 col-sm-5">Changed by
User</label>
955 <div
class=
"col-xs-12 col-sm-7"><input type=
"text" class=
"k-input k-textbox hcu-all-100" name=
"loggedInUser"></div>
957 <div
class=
"row hcuSpacer">
958 <label
class=
"col-sm-5 col-xs-12">Action Type</label>
959 <div
class=
"col-sm-7 col-xs-12"><div
id=
"actionDDL" class=
"hcu-all-100"></div></div>
961 <div
class=
"row hcuSpacer">
962 <label
class=
"col-sm-5 col-xs-12">Show</label>
963 <div
class=
"col-sm-7 col-xs-12"><div
id=
"showDDL" class=
"hcu-all-100"></div></div>
968 <div
class=
"col-xs-12 hcuSpacer hcu-no-padding"><div
class=
"container hcu-all-100"><div
class=
"row"><div
class=
"col-xs-12">
969 <a href=
"#" class=
"k-button k-primary floatRight" id=
"okayBtn">Show</a>
970 </div></div></div></div>
972 <div
id=
"auditGrid" class=
"hcu-all-100 pointerGrid"></div>
973 <form
id=
"auditPrintForm" method=
"post" action=
"shell.prg" target=
"auditPrint">
974 <input type=
"hidden" name=
"shell" value=
"">
975 <input type=
"hidden" name=
"title" value=
"">
978 <div
id=
"previewWindow"></div>