7 $monLibrary = dirname(__FILE__) .
"/../library";
8 $monIncludes = dirname(__FILE__) .
"/../includes";
9 require_once(
"$monLibrary/cu_top.i");
10 require_once(
"$monLibrary/ck_hticket.i");
11 require_once(
"./mcEstmntMntc.data");
13 if (!CheckPerm($link, $Hu, basename($_SERVER[
'SCRIPT_NAME']), $_SERVER[
'REMOTE_ADDR'])) {
16 header(
"Location: /hcuadm/hcu_noperm.prg");
20 $string = array(
"filter" => FILTER_SANITIZE_STRING);
21 $array = array(
"filter" => FILTER_DEFAULT);
22 $parameters = array();
23 HCU_ImportVars($parameters,
"a", array(
"operation" => $string,
"dataItem" => $array,
"docid" => $string,
"contents" => $array));
24 extract($parameters[
"a"]);
26 $operation = isset($operation) ? trim($operation) :
"";
27 $dataItem = isset($dataItem) ? trim($dataItem) :
"";
28 $docid = isset($docid) ? trim($docid) :
"";
29 $contents = isset($contents) ? trim($contents) :
"";
31 if ($operation !=
"") {
33 case "readEstmntDefinitions":
34 $returnArray = ReadEstmntDefinitions($dbh,
"",
"");
36 case "updateEstmntDefinitionsMntc":
37 $returnArray = UpdateEstmntDefinitionsMntc($dbh, $dataItem);
39 case "removeEstmntDefinitionsMntc":
40 $returnArray = RemoveEstmntDefinitionsMntc($dbh, $docid,
"",
"");
42 case "readEstmntFile":
43 $returnArray = ReadEstmntFileGlobal($dbh, $docid,
false,
"",
"");
45 case "updateEstmntFile":
46 $returnArray = UpdateEstmntFile($dbh, $docid, $contents,
"",
"");
48 case "revertEstmntFile":
49 $returnArray = RevertEstmntFile($dbh, $docid,
"",
"");
52 $returnArray = array(
"status" =>
"001",
"error" =>
"Operation not specified: '$operation'",
"data" => array());
56 header(
'Content-type: application/json');
57 print HCU_JsonEncode($returnArray);
59 PrintMainPage($homecuKendoVersion, $cloudfrontDomainName, $bootstrapVersion, $fontawesomeVersion);
71 function PrintMainPage($homecuKendoVersion, $cloudfrontDomainName, $bootstrapVersion, $fontawesomeVersion) {
72 $pageTitle = GetEstatementText() .
" Maintenance";
73 printMonitorPageTop($pageTitle, $homecuKendoVersion, $cloudfrontDomainName, $bootstrapVersion, $fontawesomeVersion,
true);
74 printMonitorPageMiddle($pageTitle,
null);
90 .k-grid td .k-menu .k-item > .k-link {
92 padding-bottom: 0.5em; <?php
102 <script type=
"text/javascript">
108 var
self =
"<?php echo $_SERVER['PHP_SELF']; ?>";
115 var vendorList =
null;
122 var docnameList =
null;
129 var initialized =
false;
136 var mainGridIndex = 0;
144 function InitMainGrid() {
152 orientation:
"vertical",
153 direction:
"bottom left",
154 select:
function(e) {
155 var grid = $(
"#globalEstatementGrid").data(
"kendoGrid");
156 var tr = $(e.item).closest(
"tr");
157 var dataItem = grid.dataItem(tr);
158 switch ($(e.item).text().trim()) {
162 fileDataSource.read({docid: dataItem.docid});
165 $(
"#deleteDialog").data(
"dataItem", dataItem);
166 $(
"#deleteDialog").data(
"kendoDialog").open().center();
168 case "Edit Settings":
169 $(
"#addWindow").data(
"dataItem", dataItem);
170 $(
"#addWindow").data(
"kendoWindow").title(
"Edit Document").open().center();
181 var globalEstatementGrid = $(
"#globalEstatementGrid").kendoGrid({
205 parameterMap:
function(data, type) {
211 data = {operation:
"updateEstmntDefinitionsMntc", dataItem: kendo.stringify(data.models[0])};
214 data = {operation:
"removeEstmntDefinitionsMntc", docid: data.models[0].docid};
217 data = {operation:
"readEstmntDefinitions"};
230 docid: {type:
"number"},
231 docname: {type:
"string"},
232 sort: {type:
"number"},
233 descr: {type:
"string"},
234 vendor: {type:
"string"},
235 section: {type:
"string"},
236 invalid: {type:
"boolean"}
239 parse:
function (data) {
241 if (data.status !=
"000") {
242 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
243 if (data.operation ==
"create") {
244 return {docid:
"", invalid:
true};
246 }
else if (data.info !=
"") {
247 $.homecuValidator.displayMessage(data.info, $.homecuValidator.settings.statusInfo );
249 if (data.operation ==
"readInit") {
250 vendorList = data.data.vendorData;
251 docnameList = data.data.docnameData;
252 return data.data.gridData;
256 var docnameCBX = $(
"#docnameCBX").data(
"kendoComboBox");
257 var vendorCBX = $(
"#vendorCBX").data(
"kendoComboBox");
258 if (docnameCBX.select() == -1) {
259 var docData = docnameCBX.dataSource.data();
260 docData.push(docnameCBX.value());
262 docnameCBX.dataSource.data(docData);
264 if (vendorCBX.select() == -1) {
265 var vendorData = vendorCBX.dataSource.data();
266 vendorData.push(vendorCBX.value());
268 vendorCBX.dataSource.data(vendorData);
274 group: {field:
"vendor"},
275 filter: {field:
"invalid",
operator:
"neq", value:
true},
276 sort: [{field:
"sort", dir:
"asc"}, {field:
"docname", dir:
"asc"}]
279 {field:
"docname", title:
"Doc Name"},
280 {field:
"sort", title:
"Sort", width: 50},
281 {field:
"descr", title:
"Description"},
282 {field:
"section", title:
"Section"},
283 {title:
"", width: 150,
template:
"<div id='actionMenu_#: window.mainGridIndex #'></div>"},
284 {field:
"vendor", hidden:
true, groupHeaderTemplate:
"#: value #"}
286 rowTemplate: $(
"#rowTemplate").html(),
287 toolbar:
"<a href='\\#' class='k-button addButton'><i class='fa fa-plus'></i> Add</a>",
289 template:
"<tr><td>No records were found</td></tr>" 293 dataBinding:
function (e) {
294 if (e.action ==
"add" || e.action ==
"remove" || e.action ==
"itemchange") {
297 }
else if (initialized) {
298 $(
"#globalEstatementGrid [id^='actionMenu_']").each(
function() { <?php
299 var ddl = $(
this).data(
"kendoMenu");
308 dataBound:
function (e) {
309 $(
"#globalEstatementGrid [id^='actionMenu_']").each(
function() { <?php
310 var ddl = $(
this).kendoMenu(menuDef).data(
"kendoMenu");
314 }).data(
"kendoGrid");
323 function InitDeleteDialog() {
330 var deleteDialog = $(
"<div id='deleteDialog'></div>").appendTo(
"body").kendoDialog({
331 title:
"Confirm Delete",
332 content:
"Are you sure you want to delete this custom content?",
336 {text:
"Yes", primary:
true, action:
function() {
337 var dataItem = $(
"#deleteDialog").data(
"dataItem");
338 var dataSource = $(
"#globalEstatementGrid").data(
"kendoGrid").dataSource;
339 dataSource.remove(dataItem);
344 if (window.activeWindows !=
null) {
345 window.activeWindows.push(
this);
349 if (window.activeWindows !=
null) {
350 window.activeWindows.pop();
353 }).data(
"kendoDialog");
361 var addWindowInitialized =
false;
369 function InitAddWindow() {
375 var addWindow = $(
"<div id='addWindow'></div>").appendTo(
"body").kendoWindow({
380 template: $(
"#addWindowTemplate").html()
385 $.homecuValidator.setup({formValidate:
'addWindowForm', formStatusField:
'addWindowErrorDiv', homecuCustomRules: {
386 duplicateCheck:
function (input) {
387 if ($(input).is(
"[name='duplicateCheck']")) {
388 var docnameCBX = $(
"#docnameCBX").data(
"kendoComboBox");
389 var vendorCBX = $(
"#vendorCBX").data(
"kendoComboBox");
390 var docname = docnameCBX.value().trim();
391 var vendor = vendorCBX.value().trim();
392 var docid = $(
"[name='docid']").val().trim();
393 var data = $(
"#globalEstatementGrid").data(
"kendoGrid").dataSource.data();
394 if ($.grep(data,
function (n, i) {
395 return n.docid != docid && n.docname == docname && n.vendor == vendor;
397 $(input).attr(
"data-duplicateCheck-msg",
"Cannot save a duplicate");
405 if (window.activeWindows !=
null) {
406 window.activeWindows.push(
this);
410 var sectionDDL =
null;
411 var vendorCBX =
null;
412 var docnameCBX =
null;
414 if (!addWindowInitialized) {
415 addWindowInitialized =
true;
417 sortNTB = $(
"#sortNTB").kendoNumericTextBox({
422 }).data(
"kendoNumericTextBox");
424 sectionDDL = $(
"#sectionDDL").kendoDropDownList({
425 dataSource: [
"<?php echo GetEstatementText(); ?>s",
"Credit Card",
"Disclosure",
"Utility"]
426 }).data(
"kendoDropDownList");
428 vendorCBX = $(
"#vendorCBX").kendoComboBox({
429 dataSource: vendorList
430 }).data(
"kendoComboBox");
432 docnameCBX = $(
"#docnameCBX").kendoComboBox({
433 dataSource: docnameList
434 }).data(
"kendoComboBox");
436 sectionDDL = $(
"#sectionDDL").data(
"kendoDropDownList");
437 vendorCBX = $(
"#vendorCBX").data(
"kendoComboBox");
438 sortNTB = $(
"#sortNTB").data(
"kendoNumericTextBox");
439 docnameCBX = $(
"#docnameCBX").data(
"kendoComboBox");
443 var dataItem = $(
"#addWindow").data(
"dataItem");
444 sortNTB.value(dataItem.sort);
445 sectionDDL.value(dataItem.section);
446 vendorCBX.value(dataItem.vendor);
447 $(
"[name='docid']").val(dataItem.docid);
448 $(
"[name='descr']").val(dataItem.descr);
449 docnameCBX.value(dataItem.docname);
454 $.homecuValidator.setup({formValidate:
'estmntForm', formStatusField:
'estmntErrorDiv'});
455 if (window.activeWindows !=
null) {
456 window.activeWindows.pop();
459 }).data(
"kendoWindow");
467 $(
"#globalEstatementGrid").on(
"click",
".addButton",
function() {
468 var dataItem = {docid: 0, docname:
"", sort:
"", descr:
"", vendor:
"", section:
""};
469 $(
"#addWindow").data(
"dataItem", dataItem);
470 addWindow.title(
"Add Document").open().center();
479 $(
"#addWindow").on(
"click",
".cancelBtn",
function() {
489 $(
"#addWindow").on(
"click",
".updateBtn",
function() {
490 if ($.homecuValidator.validate()) {
491 var vendorCBX = $(
"#vendorCBX").data(
"kendoComboBox");
492 if (vendorCBX.select() == -1) {
493 var confirmNewVendorDialog = $(
"#confirmNewVendorDialog").data(
"kendoDialog");
494 if (confirmNewVendorDialog ==
null) {
500 confirmNewVendorDialog = $(
"<div id='confirmNewVendorDialog'></div>").appendTo(
"body").kendoDialog({
501 title:
"Confirm New Vendor",
505 {text:
"Yes", primary:
true, action:
function() {
507 confirmNewVendorDialog.close();
513 if (window.activeWindows !=
null) {
514 window.activeWindows.push(
this);
518 if (window.activeWindows !=
null) {
519 window.activeWindows.pop();
522 }).data(
"kendoDialog");
525 confirmNewVendorDialog.content(
"Are you sure you want to add a new vendor configuration? <br>Configuration is \"" + vendorCBX.value() +
".\"");
526 confirmNewVendorDialog.open().center();
541 function DoUpdateRecord() {
543 var docid = $(
"[name='docid']").val();
544 var docname = $(
"#docnameCBX").data(
"kendoComboBox").value();
545 var sort = $(
"#sortNTB").data(
"kendoNumericTextBox").value();
546 var descr = $(
"[name='descr']").val();
547 var section = $(
"#sectionDDL").val();
548 var vendor = $(
"#vendorCBX").data(
"kendoComboBox").value();
551 var dataSource = $(
"#globalEstatementGrid").data(
"kendoGrid").dataSource;
554 dataSource.add({docname: docname, sort: sort, descr: descr, section: section, vendor: vendor});
556 var gridData = dataSource.data();
557 var indexToUpdate = -1;
558 for(var i = 0, count = gridData.length; i != count; i++) {
559 var row = gridData[i];
560 if (row.docid == docid) {
566 dataSource.at(indexToUpdate).set(
"docname", docname);
567 dataSource.at(indexToUpdate).set(
"sort", sort);
568 dataSource.at(indexToUpdate).set(
"descr", descr);
569 dataSource.at(indexToUpdate).set(
"section", section);
570 dataSource.at(indexToUpdate).set(
"vendor", vendor);
580 var fileDataSource =
null;
588 function InitFileOperations() {
595 fileDataSource =
new kendo.data.DataSource({
603 operation:
"readEstmntFile" 611 operation:
"updateEstmntFile" 619 operation:
"updateEstmntFile" 622 parameterMap:
function(data, type) {
628 data = {operation: data.operation, docid: data.models[0].docid, contents: data.models[0].contents};
643 docid: {type:
"number"},
644 filename: {type:
"string"},
645 contents: {type:
"string"}
648 parse:
function (data) {
650 if (data.status !==
"000") {
651 $.homecuValidator.displayMessage(data.error, $.homecuValidator.settings.statusError );
653 if (data.operation !=
"read") {
654 $(
"#fileWindow").data(
"kendoWindow").close();
657 if (data.info !=
"") {
658 $.homecuValidator.displayMessage(data.info, $.homecuValidator.settings.statusInfo );
661 if (data.operation ==
"read") {
662 var
template = kendo.template($(
"#fileWindowTemplate").html());
663 var dataItem = data.data[0];
664 $(
"#fileWindow").data(
"kendoWindow").content(
template(dataItem)).title(
"Edit File \"" + dataItem.filename +
"\"").open().center();
665 }
else if (data.operation ==
"create" || data.operation ==
"update") {
666 $(
"#fileWindow").data(
"kendoWindow").close();
680 var fileWindow = $(
"<div id='fileWindow'></div>").appendTo(
"body").kendoWindow({
685 if (window.activeWindows !=
null) {
686 window.activeWindows.push(
this);
688 $.homecuValidator.setup({formValidate:
'fileWindowForm', formStatusField:
'fileWindowErrorDiv'});
691 if (window.activeWindows !=
null) {
692 window.activeWindows.pop();
694 $.homecuValidator.setup({formValidate:
'estmntForm', formStatusField:
'estmntErrorDiv'});
696 }).data(
"kendoWindow");
704 $(
"#fileWindow").on(
"click",
".cancelBtn",
function() {
705 $(
"#fileWindow").data(
"kendoWindow").close();
714 $(
"#fileWindow").on(
"click",
".updateBtn",
function() {
715 fileDataSource.at(0).set(
"contents", $(
"#filecontents").val());
716 fileDataSource.sync();
725 var activeWindows = [];
733 $(document).ready(
function() {
734 $.homecuValidator.setup({formValidate:
'estmntForm', formStatusField:
'estmntErrorDiv'});
738 InitFileOperations();
746 $(
"body").on(
"click",
".k-overlay",
function() {
747 if (activeWindows.length > 0) {
748 activeWindows [activeWindows.length - 1].close();
761 <script type=
"type/x-kendo-script" id=
"fileWindowTemplate">
762 <div
class=
"container-fluid hcu-template" id=
"fileWindowForm">
763 <div
id=
"fileWindowErrorDiv"></div>
764 <div
class=
"row hcuSpacer">
765 <textarea
class=
"col-xs-12 k-textbox hcu-all-100" id=
"filecontents">#: contents #</textarea>
767 <div
class=
"hcu-edit-buttons k-state-default">
768 <a
class=
"cancelBtn" href=
"\\#">Cancel</a>
770 <a
class=
"updateBtn k-button k-primary" href=
"\\#"><i
class=
"fa fa-check"></i>Update</a>
782 <script type=
"type/x-kendo-script" id=
"rowTemplate">
783 <tr data-uid=
"#= uid #">
785 <td>#: docname #</td>
788 <td>#: section #</td>
790 <ul
id=
'actionMenu_#: window.mainGridIndex #'>
794 <li>Edit Settings</li>
801 # window.mainGridIndex++; # 810 <script type=
"type/x-kendo-script" id=
"addWindowTemplate">
811 <div
class=
"container-fluid hcu-template" id=
"addWindowForm">
812 <div
id=
'addWindowErrorDiv'></div>
813 <input type=
'hidden' name=
'docid' required>
814 <input type=
'hidden' name=
'duplicateCheck'>
815 <div
class=
"row hcuSpacer hcu-secondary">
816 <div
class=
"col-xs-12 vsgSecondary">You may enter custom text in the Doc Name and Core Vendor controls.</div>
818 <div
class=
"row hcuSpacer">
819 <div
class=
"col-xs-4">
820 <label>Doc Name</label>
822 <div
class=
"col-xs-8">
823 <input
id=
'docnameCBX' name=
'docname' type=
'text' class=
'hcu-all-100' required data-required-msg=
"Doc Name is required">
826 <div
class=
"row hcuSpacer">
827 <div
class=
"col-xs-4">
830 <div
class=
"col-xs-8">
831 <input
id=
'sortNTB' name=
'sort' class=
"hcu-all-100">
834 <div
class=
"row hcuSpacer">
835 <div
class=
"col-xs-4">
836 <label>Description</label>
838 <div
class=
"col-xs-8">
839 <input name=
'descr' class=
'k-textbox hcu-all-100' maxlength=
'250'>
842 <div
class=
"row hcuSpacer">
843 <div
class=
"col-xs-4">
844 <label>Section</label>
846 <div
class=
"col-xs-8">
847 <input
id=
"sectionDDL" name=
'section' required
class=
'hcu-all-100' data-required-msg=
"Section is required">
850 <div
class=
"row hcuSpacer">
851 <div
class=
"col-xs-4">
852 <label>Core Vendor</label>
854 <div
class=
"col-xs-8">
855 <input
id=
"vendorCBX" name=
'vendor' required
class=
'hcu-all-100' data-required-msg=
"Vendor is required">
858 <div
class=
"hcu-edit-buttons k-state-default">
859 <a
class=
"cancelBtn" href=
"\\#">Cancel</a>
861 <a
class=
"updateBtn k-button k-primary" href=
"\\#"><i
class=
"fa fa-check"></i>Update</a>
871 <div
id=
'hideSubmitWait' style=
'position:relative; left:-2000px;top:-2000px;'>
872 <div
id=
'homecuSubmitWait' class=
'k-block' >
873 <div
class=
'k-loading-image'></div>
876 <div
class=
"container-fluid" id=
"estmntForm">
877 <div
id=
"estmntErrorDiv"></div>
878 <div
class=
"row hcuSpacer">
881 <div
class=
"row hcuSpacer">
882 <div
class=
"col-xs-12">
883 <div
id=
"globalEstatementGrid" class=
"hcu-no-td-border"></div>
888 printMonitorPageBottom();