all files / base/ calendar-context.js

100% Statements 72/72
95% Branches 19/20
100% Functions 8/8
100% Lines 71/71
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116   46959× 46959× 46959× 46959× 46959× 46959× 46959×   46959× 46959×   46959× 46959× 46959× 13994× 13994× 13994× 13994× 20700× 20700× 20700× 127× 127× 18× 18×     20700× 20682×       46959×   46959× 46959× 82× 82× 82× 82× 82× 82×       82×             82× 82× 82× 82× 82× 82× 82× 82× 82× 164× 164×   82× 82×   82× 82× 82× 164× 164×   82× 82×                             82× 82× 93×       41960348× 41960348× 41960348×              
define(["require", "exports"], function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    var CalendarContext = (function () {
        function CalendarContext(parent, calendar) {
            this.defaultHolidays = [];
            this.sortedDefaultHolidays = [];
            this.exceptionDateSet = new Map();
            this.exceptionsRanges = [];
            this.parent = parent;
            this.calendar = calendar;
            this.initialize();
        }
        CalendarContext.prototype.initialize = function () {
            this.buildDefaultHolidays();
            this.buildExceptionsCollection();
        };
        CalendarContext.prototype.buildDefaultHolidays = function () {
            var holidays = this.calendar['propName'] === 'projectCalendar' ? this.parent.calendarModule.holidays : this.calendar.holidays;
            var overrides = this.calendar.exceptions;
            for (var i = 0; i < holidays.length; i++) {
                var holiday = holidays[i];
                var fromDate = holiday.from ? new Date(holiday.from) : new Date(holiday.to);
                var toDate = holiday.to ? new Date(holiday.to) : new Date(holiday.from);
                for (var d = new Date(fromDate); d <= toDate; d.setDate(d.getDate() + 1)) {
                    var timestamp = new Date(d).setHours(0, 0, 0, 0);
                    var isOverridden = false;
                    for (var j = 0; j < overrides.length; j++) {
                        var overrideDate = new Date(overrides[j].from).setHours(0, 0, 0, 0);
                        if (overrideDate === timestamp) {
                            isOverridden = true;
                            break;
                        }
                    }
                    if (!isOverridden) {
                        this.defaultHolidays.push(timestamp);
                    }
                }
            }
            this.sortedDefaultHolidays = this.defaultHolidays.slice().sort(function (a, b) { return a - b; });
        };
        CalendarContext.prototype.buildExceptionsCollection = function () {
            var overrides = this.calendar.exceptions;
            for (var i = 0; i < overrides.length; i++) {
                var override = overrides[i];
                var fromDate = new Date(override.from);
                var toDate = new Date(override.to);
                var totalDurationDays = Math.floor((toDate.getTime() - fromDate.getTime()) / (1000 * 60 * 60 * 24)) + 1;
                var id = "exception_" + i;
                var effectiveExceptionWorkingTime = override.exceptionWorkingTime &&
                    override.exceptionWorkingTime.length > 0
                    ? override.exceptionWorkingTime
                    : this.calendar.workingTime || this.parent.defaultCalendarContext.calendar.workingTime;
                var range = {
                    id: id,
                    from: fromDate,
                    to: toDate,
                    label: override.label,
                    exceptionWorkingTime: effectiveExceptionWorkingTime
                };
                var workingRanges = [];
                var totalSeconds = 0;
                var nonWorkingHours = [];
                var nonWorking = [];
                var startDate = new Date('10/11/2018');
                var startTimeObj = { startTime: 0 };
                var endTimeObj = { endTime: 0 };
                var seconds = 0;
                for (var j = 0; j < range.exceptionWorkingTime.length; j++) {
                    var currentRange = range.exceptionWorkingTime[j];
                    seconds = seconds + this.parent.dateValidationModule['getWorkingTime']('', currentRange, startDate, totalSeconds, j, nonWorkingHours, workingRanges, nonWorking, startTimeObj, endTimeObj);
                }
                Eif (endTimeObj.endTime / 3600 !== 24) {
                    nonWorking.push({ from: endTimeObj.endTime, to: 86400, isWorking: false, interval: 86400 - endTimeObj.endTime });
                }
                totalSeconds = seconds;
                var dailyWorkingHours = 0;
                for (var _i = 0, _a = range.exceptionWorkingTime; _i < _a.length; _i++) {
                    var timeRange = _a[_i];
                    dailyWorkingHours += timeRange.to - timeRange.from;
                }
                var totalWorkingHours = dailyWorkingHours * totalDurationDays;
                var exceptionRange = {
                    id: id,
                    from: fromDate,
                    to: toDate,
                    workingTime: override.exceptionWorkingTime,
                    label: override.label,
                    secondsPerDay: totalSeconds,
                    workingRange: workingRanges,
                    nonWorkingRange: nonWorking,
                    nonWorkingHours: nonWorkingHours,
                    totalDurationDays: totalDurationDays,
                    totalWorkingHours: totalWorkingHours,
                    startTime: startTimeObj.startTime,
                    endTime: endTimeObj.endTime
                };
                this.exceptionsRanges.push(exceptionRange);
                for (var d = new Date(fromDate); d <= toDate; d.setDate(d.getDate() + 1)) {
                    this.exceptionDateSet.set(new Date(d).setHours(0, 0, 0, 0), exceptionRange);
                }
            }
        };
        CalendarContext.prototype.getExceptionForDate = function (date) {
            var timestamp = new Date(date.getTime()).setHours(0, 0, 0, 0);
            var range = this.exceptionDateSet.get(timestamp);
            return {
                hasException: !!range,
                data: range || null
            };
        };
        return CalendarContext;
    }());
    exports.CalendarContext = CalendarContext;
});