define(["require", "exports"], function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var CalendarModule = (function () {
function CalendarModule(parent) {
this.holidays = [];
this.workingTime = [];
this.parent = parent;
}
CalendarModule.prototype.getCalendarById = function (id) {
var taskCalendars = this.parent.calendarSettings.taskCalendars;
var projectCalendar = this.parent.calendarSettings.projectCalendar;
if (!id) {
return projectCalendar;
}
if (taskCalendars && taskCalendars.length > 0) {
for (var i = 0; i < taskCalendars.length; i++) {
if (taskCalendars[i].calendarId === id) {
return taskCalendars[i];
}
}
}
else {
return projectCalendar;
}
return projectCalendar;
};
CalendarModule.prototype.getDirectEndDate = function (startDate, duration) {
if (duration < 0) {
return startDate;
}
var resultDate = new Date(startDate.getTime());
resultDate.setDate(resultDate.getDate() + (duration - 1));
var exception = this.parent.defaultCalendarContext.getExceptionForDate(resultDate);
var endTime = exception.hasException ? exception.data.endTime : this.parent.defaultEndTime;
var hours = Math.floor(endTime / 3600);
var minutes = Math.floor((endTime % 3600) / 60);
var seconds = endTime % 60;
resultDate.setHours(hours, minutes, seconds, 0);
return resultDate;
};
CalendarModule.prototype.calculateDayWidth = function (ranges, startSec, endSec, perDayWidth) {
var totalSeconds = 0;
for (var _i = 0, ranges_1 = ranges; _i < ranges_1.length; _i++) {
var r = ranges_1[_i];
totalSeconds += (r.to - r.from);
}
var coveredSeconds = 0;
for (var _a = 0, ranges_2 = ranges; _a < ranges_2.length; _a++) {
var r = ranges_2[_a];
if (endSec <= r.from) {
break;
}
Iif (startSec >= r.to) {
continue;
}
var effectiveStart = Math.max(startSec, r.from);
var effectiveEnd = Math.min(endSec, r.to);
Eif (effectiveEnd > effectiveStart) {
coveredSeconds += (effectiveEnd - effectiveStart);
}
}
return (coveredSeconds / totalSeconds) * perDayWidth;
};
CalendarModule.prototype.calculateWidthWithExceptions = function (sDate, eDate, startException, endException) {
var width = 0;
var sameDay = sDate.toDateString() === eDate.toDateString();
var ranges;
if (sameDay) {
ranges = startException.hasException
? startException.data.workingRange
: this.parent.workingTimeRanges;
width = this.calculateDayWidth(ranges, this.parent.dataOperation['getSecondsInDecimal'](sDate), this.parent.dataOperation['getSecondsInDecimal'](eDate), this.parent.perDayWidth);
}
else {
ranges = startException.hasException
? startException.data.workingRange
: this.parent.workingTimeRanges;
width += this.calculateDayWidth(ranges, this.parent.dataOperation['getSecondsInDecimal'](sDate), ranges[ranges.length - 1].to, this.parent.perDayWidth);
var daysBetween = Math.floor((eDate.getTime() - sDate.getTime()) / (1000 * 60 * 60 * 24));
if (daysBetween > 0) {
width += daysBetween * this.parent.perDayWidth;
}
ranges = endException.hasException
? endException.data.workingRange
: this.parent.workingTimeRanges;
width += this.calculateDayWidth(ranges, ranges[0].from, this.parent.dataOperation['getSecondsInDecimal'](eDate), this.parent.perDayWidth);
}
return width;
};
return CalendarModule;
}());
exports.CalendarModule = CalendarModule;
});
|