Commit dd40e13c authored by Johannes Bill's avatar Johannes Bill

added validate function

added validate function

removed new holiday

removed new holiday
parent a80c76ee
......@@ -42,8 +42,12 @@ function Holidays(year) {
602: 50
};
var easterSundays = {
2014: new Date(2014, 3, 20)
};
function getEasterSunday() {
return new Date(2014, 3, 20);
return easterSundays[year];
}
function getFixedHolidays(fixedHolidays, object) {
......@@ -86,6 +90,4 @@ function Holidays(year) {
}
var holidays = new Holidays(2014);
module.exports = Holidays;
\ No newline at end of file
......@@ -10,8 +10,8 @@ var excludeString = "bb74c170-b06f-4d2b-ab88-2f6bf9ce8068";
var _epochStart = new Date(2014, 0, 0);
//_epochStart.setDate(_epochStart.getDate() - 30);
//var _epochEnd = new Date(_epochStart.getTime() + 500 * 24 * 3600000);
var _epochEnd = new Date(2016, 0, 0);
var epocheSpan = [_epochStart, _epochEnd];
var _epochEnd = new Date(2015, 0, 0);
var epochSpan = [_epochStart, _epochEnd];
function calculateOpeningHours(json) {
......@@ -49,19 +49,6 @@ function calculateOpeningHours(json) {
return tmUtils.andNotOperator(resultIncl, resultExcl);
}
function getIntervals(json) {
var result = [];
var holidays = [];
for(var key in json) {
var x = getOpeningHours(json[key]);
if(x)
result.push(x);
}
return tmUtils.orOperator(result);
}
function getDaySpan(data) {
var dayoption = parseInt(data["dayoption"]["0"]);
if(dayoption < 7) return [dayoption, dayoption];
......@@ -128,8 +115,8 @@ function getAllHolidays() {
}
function getDateSpan(data) {
var startDate = parseDate(data["opening_day_from"]) || _epochStart;
var endDate = parseDate(data["opening_day_to"], true) || _epochEnd;
var startDate = parseDate(data["opening_day_from"]) || epochSpan[0];
var endDate = parseDate(data["opening_day_to"], true) || epochSpan[1];
return [startDate, endDate];
}
......@@ -154,7 +141,7 @@ function getOpeningHours(data, option) {
case "vacation":
return getOpeningHoursVacation(data);
default:
console.error("no propper option found");
console.error("option %s not supported", option);
return [];
}
}
......@@ -162,14 +149,14 @@ function getOpeningHours(data, option) {
function getOpeningHoursDefault(data) {
var daySpan = getDaySpan(data);
var timeSpan = getTimeSpan(data);
return tmUtils.standardFromTillDay(daySpan, timeSpan, epocheSpan, epocheSpan, 7);
return tmUtils.standardFromTillDay(daySpan, timeSpan, epochSpan, epochSpan, 7);
}
function getOpeningHoursSeason(data) {
var daySpan = getDaySpan(data);
var timeSpan = getTimeSpan(data);
var dateSpan = getDateSpan(data);
return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, epocheSpan, 7);
return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, 7);
}
function getOpeningHoursVacation(data) {
......@@ -187,18 +174,20 @@ function getOpeningHoursRepeatable(data) {
if(repeatOption <= 4) noInMonth = repeatOption;
else if(repeatOption == 30) noInMonth = -1;
if(noInMonth)
return tmUtils.cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epocheSpan);
return tmUtils.cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan);
else {
switch(repeatOption) {
case 14:
case 21:
case 28:
return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, epocheSpan, repeatOption);
return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, repeatOption);
default:
console.error("invalid repeatoption");
}
}
}
var data = calculateOpeningHours(require('./testData/testHof.json'));
console.log(data);
\ No newline at end of file
var data1 = calculateOpeningHours(require('./testData/testHof.json'));
//data1[0][0] = 0;
console.log(data1);
tmUtils.validate(data1);
\ No newline at end of file
......@@ -134,10 +134,10 @@
"holidayoption": {
"0": ""
},
"opening_day_from": "21.05",
"opening_day_to": "21.06",
"opening_from": "9:00",
"opening_to": "18:00"
"opening_day_from": "",
"opening_day_to": "",
"opening_from": "10:00",
"opening_to": "13:00"
},
"3": {
"option": {
......
var assert = require('assert');
function compareTimeSpan(timeSpan) {
var from = timeSpan[0];
var till = timeSpan[1];
......@@ -39,7 +41,7 @@ function _standard(day, timeFrom, timeUntil, startDate, endDate, distanceDays) {
function standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, daysDistance) {
timeSpan = transformTimeSpan(timeSpan);
var dayFrom = daySpan[0];
var dayTill = daySpan[1];
var dayTo = daySpan[1];
var timeFrom = timeSpan[0];
var timeUntil = timeSpan[1];
var epochStart = dateSpan[0];
......@@ -48,7 +50,7 @@ function standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, daysDistanc
var firstDays = _standard(dayFrom, timeFrom, timeUntil, epochStart, epochEnd, daysDistance);
var result = firstDays.slice();
for(var offset = 1; offset <= dayTill - dayFrom; offset++) {
for(var offset = 1; offset <= dayTo - dayFrom; offset++) {
for(var i = 0; i < firstDays.length; i++) {
var start = new Date(firstDays[i][0]);
var end = new Date(firstDays[i][1]);
......@@ -91,7 +93,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
timeSpan = transformTimeSpan(timeSpan);
var dayFrom = daySpan[0];
var dayTill = daySpan[1];
var dayTo = daySpan[1];
var timeFrom = timeSpan[0];
var timeUntil = timeSpan[1];
var startDate = dateSpan[0];
......@@ -121,7 +123,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
result.push([date0, date1]);
startDate = new Date(date1);
startDate.setDate(startDate.getDate() + 1);
for(var offset = 1; offset <= dayTill - dayFrom; offset++) {
for(var offset = 1; offset <= dayTo - dayFrom; offset++) {
date0 = new Date(date0);
date1 = new Date(date1);
date0.setDate(date0.getDate() + 1);
......@@ -184,7 +186,7 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) {
}
/**
* return a timespan on one day, if not timespan is given,
* return a timespan on one day, if no timespan is given,
* the whole day is returned
*
* @param date
......@@ -194,7 +196,7 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) {
function singleDay(date, timeSpan) {
var startDate, endDate;
if(timeSpan) {
transformTimeSpan(timeSpan);
timeSpan = transformTimeSpan(timeSpan);
startDate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), timeSpan[0].h, timeSpan[0].m);
endDate = new Date(date.getFullYear(), date.getMonth(), date.getDate(), timeSpan[1].h, timeSpan[1].m);
}
......@@ -297,7 +299,12 @@ function invert(interval, epochStart, epochEnd) {
result.push([start, epochEnd]);
return result;
}
/**
* "substracts" interval2 from interval1
* @param interval1
* @param interval2
* @returns {*}
*/
function andNotOperator(interval1, interval2) {
var epochStart = new Date(Math.min(interval1[0][0], interval2[0][0]));
var epochEnd = new Date(Math.max(interval1[interval1.length - 1][1], interval2[interval2.length - 1][1]));
......@@ -306,6 +313,17 @@ function andNotOperator(interval1, interval2) {
return andOperator(interval1, interval2);
}
function validate(interval) {
assert(interval instanceof Array, "has to be array");
for (var i = 0; i < interval.length; i++) {
var element = interval[i];
assert(element instanceof Array, "has to be array");
assert(element[0] instanceof Date, "has to be date");
assert(element[1] instanceof Date, "has to be date");
assert(element[0].getTime() <= element[1].getTime(), "start has to be <= end");
}
}
module.exports.standardFromTillDay = standardFromTillDay;
module.exports.cyclicFromTillDay = cyclicFromTillDay;
module.exports.singleDay = singleDay;
......@@ -315,3 +333,4 @@ module.exports.andNotOperator = andNotOperator;
module.exports.mergeOverlaps = mergeOverlaps;
module.exports.sort = sort;
module.exports.dateSpan = dateSpan;
module.exports.validate = validate;
\ No newline at end of file
......@@ -3,3 +3,5 @@ feiertage defaultmaessig abziehen ausser feiertage sind in der ausschlussliste
verbindung feiertag - region
ics import - regeln extrahieren
was passiert bei der zeitumstellung?
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment