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