19 require_once(
"$admLibrary/aBankingCalendar.i");
24 "operation" => array(
"filter" => FILTER_SANITIZE_STRING),
25 "calendar" => array(
"filter" => FILTER_SANITIZE_STRING)
27 HCU_ImportVars($admVars,
"CALENDAR", $admOk);
29 $cOperation = isset($admVars[
"CALENDAR"][
"operation"]) ? $admVars[
"CALENDAR"][
"operation"] :
null;
30 $cCalendar = isset($admVars[
"CALENDAR"][
"calendar"]) ? $admVars[
"CALENDAR"][
"calendar"] :
null;
35 switch ($cOperation) {
37 PrintBankingCalendar();
40 $yearCurrent = date(
"Y");
41 $yearNext = date(
"Y") + 1;
42 $yearLast = date(
"Y") - 1;
44 $dataCurrent = BankingCalendarRead($SYSENV, $dbh, $Cu, $yearCurrent);
45 $dataLast = BankingCalendarRead($SYSENV, $dbh, $Cu, $yearLast);
46 $dataNext = BankingCalendarRead($SYSENV, $dbh, $Cu, $yearNext);
48 $fechaPasado = $dataLast[
'calendar'][
'dates'];
49 $fechaAhora = $dataCurrent[
'calendar'][
'dates'];
50 $fechaSiguiente = $dataNext[
'calendar'][
'dates'];
54 $aryResult[
'data'][$yearCurrent] = $fechaAhora && substr(trim($fechaAhora), 0, 1) !=
"{" ? HCU_JsonDecode($fechaAhora) : null;
55 $aryResult[
'data'][$yearLast] = $fechaPasado && substr(trim($fechaPasado), 0, 1) !=
"{" ? HCU_JsonDecode($fechaPasado) : null;
56 $aryResult[
'data'][$yearNext] = $fechaSiguiente && substr(trim($fechaSiguiente), 0, 1) !=
"{" ? HCU_JsonDecode($fechaSiguiente) : null;
58 BankingCalendarReplay($aryResult, $aryReply, $cOperation);
60 case "updateCalendar":
61 $calendarValidate = BankingCalendarValidate($SYSENV, $cCalendar,
true);
62 $calendarYear = $calendarValidate[
'validate'][
'year'];
63 $calendarDates = $calendarValidate[
'validate'][
'dates'];
65 $calendarExists = BankingCalendarRead($SYSENV, $dbh, $Cu, $calendarYear);
66 $calendarUpdate =
null;
67 if ($calendarExists[
'calendar']) {
68 $calendarUpdate = BankingCalendarUpdate($SYSENV, $dbh, $Cu, $calendarYear, $calendarDates);
70 $calendarUpdate = BankingCalendarCreate($SYSENV, $dbh, $Cu, $calendarYear, $calendarDates);
73 $aryResult[
'info'] = $calendarUpdate[
'message'];
74 $aryResult[
'data'] = $calendarUpdate[
'calendar'];
75 BankingCalendarReplay($aryResult, $aryReply, $cOperation);
78 throw new Exception(
"Unknown server request: " . $cOperation);
81 }
catch (Exception $e) {
82 $aryReply[
'error'][] = $e->getMessage();
83 $aryResult[
'data'] = array();
84 $aryResult[
'info'] = array();
86 BankingCalendarReplay($aryResult, $aryReply, $cOperation);
93 function PrintBankingCalendar() { ?>
95 <script type=
"text/javascript">
96 <?php getShowWaitFunctions(); ?>
98 var yearCurrent =
new Date().getFullYear();
99 var yearLast = yearCurrent -1;
100 var yearNext = yearCurrent +1;
102 var calendarData = {};
103 var calendarDataSource =
null;
105 var window_stack = [];
107 function InitDataSources() {
109 calendarDataSource =
new kendo.data.DataSource({
114 contentType:
"application/x-www-form-urlencoded",
122 requestStart:
function(request) {
125 requestEnd:
function(response) {
126 setTimeout(hideWaitWindow, 500);
128 if (response.hasOwnProperty(
"response")) {
129 if (response.response.hasOwnProperty(
"Results")) {
130 var results = response.response.Results;
132 if (results.hasOwnProperty(
"error")) {
133 $.homecuValidator.homecuResetMessage =
true;
134 $.homecuValidator.displayMessage(results.error, $.homecuValidator.settings.statusError);
135 }
else if (results.hasOwnProperty(
"info")) {
136 $.homecuValidator.homecuResetMessage =
true;
137 $.homecuValidator.displayMessage(results.info, $.homecuValidator.settings.statusSuccess);
140 $.homecuValidator.displayMessage(
"Error Parsing Server", $.homecuValidator.settings.statusError);
143 $.homecuValidator.displayMessage(
"Error Parsing Server", $.homecuValidator.settings.statusError);
147 parse:
function(data) {
149 var resultData =
null;
150 var resultOperation =
null;
152 if (data.hasOwnProperty(
"Results")) {
153 results = data.Results;
154 resultData = results.data;
155 resultOperation = results.operation;
158 if (results.hasOwnProperty(
"error")) {
162 if (resultData ===
null || resultData === undefined) {
166 switch (resultOperation) {
168 calendarData[yearCurrent] = resultData[yearCurrent] ?
169 resultData[yearCurrent] : [];
170 calendarData[yearLast] = resultData[yearLast] ?
171 resultData[yearLast] : [];
172 calendarData[yearNext] = resultData[yearNext] ?
173 resultData[yearNext] : [];
175 BuildCalendar(yearCurrent);
176 ResetCalendar(yearCurrent);
178 case "updateCalendar":
192 calendarData[yearLast] = [];
193 calendarData[yearCurrent] = [];
194 calendarData[yearNext] = [];
197 current: yearCurrent,
203 function InitDataViews() {
207 BuildCalendar(yearCurrent);
208 ResetCalendar(yearCurrent);
211 $(
"#yearSelect").kendoDropDownList({
213 { value: yearLast, text: yearLast },
214 { value: yearCurrent, text: yearCurrent },
215 { value: yearNext, text: yearNext }
217 dataValueField:
"value",
218 dataTextField:
"text",
220 select:
function(e) {
221 if (yearChanged.changed ===
false) {
222 if (HasChanges(
false)) {
224 yearChanged.selected = e.dataItem.value;
225 yearChanged.changed =
true;
226 $(
"#dialogDiscard").data(
"kendoDialog").open();
230 change:
function(e) {
233 BuildCalendar(this.value());
234 ResetCalendar(this.value());
236 yearChanged.changed =
false;
237 yearChanged.current = parseInt(this.value());
239 }).trigger(
"change");
241 $(
"#btnUpdate").on(
"click",
function(e) {
242 if (HasChanges(
true)) {
244 operation:
"updateCalendar",
245 calendar: JSON.stringify({
246 year: yearChanged.current,
247 dates: calendarData[yearChanged.current]
251 calendarDataSource.transport.options.read.type =
"POST";
252 calendarDataSource.read(_request);
256 $(
"#lnkCancel").on(
"click",
function(e) {
257 if (HasChanges(
false)) {
258 $(
"#dialogReset").data(
"kendoDialog").open();
262 $(
"#dialogDiscard").kendoDialog({
263 title:
"Discard Changes",
268 window_stack.push(
this);
272 yearChanged.changed =
false;
276 action:
function() { }
279 text:
"Yes", primary:
true,
281 $(
"#yearSelect").data(
"kendoDropDownList").value(yearChanged.selected);
282 $(
"#yearSelect").data(
"kendoDropDownList").trigger(
"change");
288 $(
"#dialogReset").kendoDialog({
289 title:
"Discard Changes",
294 window_stack.push(
this);
301 action:
function() { }
304 text:
"Yes", primary:
true,
308 var _year = yearChanged.current;
309 BuildCalendar(_year);
310 ResetCalendar(_year);
317 function HasChanges(update) {
318 var _hasChanges =
false;
319 var _year = yearChanged.current;
320 var _yearData = calendarData[_year];
323 $(
"div[id^=calendar]").find(
"table tbody td").each(
function(i) {
325 var _cellSelected = _cell.hasClass(
"local-date-selected");
330 var _dateString = _cell.find(
"a").attr(
"title");
332 var _date = kendo.toString(
new Date(_dateString),
"yyyy-MM-dd");
333 var _dateIndex = $.inArray(_date, _yearData);
336 if (_dateIndex === -1) {
341 _yearData.push(_date);
345 if (_dateIndex !== -1) {
350 _yearData.splice(_dateIndex, 1);
361 function BuildCalendar(year) {
362 var _year = parseInt(year);
364 $(
"div[id^=calendar]").each(
function(i) {
365 var _calendar = $(
this);
367 if (_calendar.data(
"kendoCalendar") !== undefined) {
368 _calendar.data(
"kendoCalendar").destroy();
373 _calendar.kendoCalendar({
375 min:
new Date(_year, i, 1),
376 max: LastDayOfMonth(_year, i),
377 change:
function(e) {
378 var _cell = this._cell;
379 var _selected = _cell.hasClass(
"k-state-selected");
382 _cell.removeClass(
"k-state-selected");
385 disableDates:
function(date) {
387 var _weekday = date.getDay();
388 var _year = date.getFullYear();
392 if (_year == yearLast) {
396 if (_weekday == 0 || _weekday == 6) {
404 _calendar.find(
"table tbody td").on(
"click",
function() {
406 var _cellSelected = _cell.hasClass(
"local-date-selected");
407 var _dateString = _cell.find(
"a").attr(
"title");
408 var _year = yearChanged.current;
409 _year = parseInt(_year);
413 if (_dateString === undefined) {
416 var _weekday = _dateString.split(
",")[0];
417 if (_weekday ===
"Saturday" || _weekday ===
"Sunday") {
423 if (_year === yearLast) {
428 _cell.removeClass(
"local-date-selected");
430 _cell.addClass(
"local-date-selected");
436 function ResetCalendar(year) {
437 var _year = parseInt(year);
438 var _yearData = calendarData[_year];
441 $(
"div[id^=calendar]").find(
"table tbody td").each(
function(i) {
443 var _dateString = _cell.find(
"a").attr(
"title");
446 var _date = kendo.toString(
new Date(_dateString),
"yyyy-MM-dd");
447 var _dateIndex = $.inArray(_date, _yearData);
449 if (_dateIndex !== -1) {
450 _cell.addClass(
"local-date-selected");
456 function LastDayOfMonth(year, month) {
457 var _days = 32 -
new Date(year, month, 32).getDate();
458 return new Date(year, month, _days);
461 $(document).ready(
function() {
466 calendarDataSource.transport.options.read.type =
"POST";
467 calendarDataSource.read({
468 operation:
"readCalendar" 472 $(document).on(
"click",
".k-overlay",
function () {
473 if(window_stack.length > 0) {
474 window_stack[window_stack.length-1].close();
480 <style type=
"text/css">
487 input[type=
"checkbox"] {
491 div[
id^=
"calendar"] .k-nav-prev,
492 div[
id^=
"calendar"] .k-nav-next {
496 div[
id^=
"calendar"] .local-date-selected {
497 border-color: #1a87cd;
498 background-color: #1984c8;
502 div[
id^=
"calendar"] .local-date-selected a,
503 div[
id^=
"calendar"] .local-date-selected.k-today a {
510 <div
class=
"container-fluid" id=
"bankingCalendar">
511 <div
class=
"well well-sm col-sm-12">
517 <div
class=
"col-sm-12">
518 <div
class=
"hcu-secondary">
519 <div
class=
"vsgSecondary">
520 <span>Use the calendar below to mark non-business days or holidays by clicking the day. </span>
524 <div
class=
"col-sm-12">
525 <input
id=
"yearSelect">
532 <div
class=
"col-sm-4">
533 <div
class=
"hcu-all-100" id=
"calendarJanuary"></div>
536 <div
class=
"col-sm-4">
537 <div
class=
"hcu-all-100" id=
"calendarFebruary"></div>
540 <div
class=
"col-sm-4">
541 <div
class=
"hcu-all-100" id=
"calendarMarch"></div>
545 <div
class=
"col-sm-4">
546 <div
class=
"hcu-all-100" id=
"calendarApril"></div>
549 <div
class=
"col-sm-4">
550 <div
class=
"hcu-all-100" id=
"calendarMay"></div>
553 <div
class=
"col-sm-4">
554 <div
class=
"hcu-all-100" id=
"calendarJune"></div>
558 <div
class=
"col-sm-4">
559 <div
class=
"hcu-all-100" id=
"calendarJuly"></div>
562 <div
class=
"col-sm-4">
563 <div
class=
"hcu-all-100" id=
"calendarAugust"></div>
566 <div
class=
"col-sm-4">
567 <div
class=
"hcu-all-100" id=
"calendarSeptember"></div>
571 <div
class=
"col-sm-4">
572 <div
class=
"hcu-all-100" id=
"calendarOctober"></div>
575 <div
class=
"col-sm-4">
576 <div
class=
"hcu-all-100" id=
"calendarNovember"></div>
579 <div
class=
"col-sm-4">
580 <div
class=
"hcu-all-100" id=
"calendarDecember"></div>
585 <div
class=
"hcu-template">
586 <div
class=
"hcu-edit-buttons k-state-default">
587 <a href=
"##" id=
"lnkCancel" style=
"" 588 data-bind=
"events:{ click: scheduleCancel }">Cancel</a>
590 <a href=
"##" id=
"btnUpdate" class=
"k-button k-primary" 592 events:{ click: scheduleSave }">
593 <i
class=
"fa fa-check fa-lg"></i>Update
599 <div
id=
"dialogDiscard">
600 <p>You are about to change years, any changes to
this calendar will be lost.</p>
601 <p>Do you wish to
continue?</p>
604 <div
id=
"dialogReset">
605 <p>You are about to reset
this calendar to the original data.</p>
606 <p>Do you wish to
continue?</p>