Commit c6d7dd88 authored by Johannes Bill's avatar Johannes Bill

bugfixing

parent 875c19cd
function Holidays(year) {
/* var mapping = {
/* var mapping = {
0: "Alle",
101: "Neujahrstag",
106: "Hl. drei Koenige",
......@@ -50,8 +50,8 @@ function Holidays(year) {
var result = object || {};
for(var key in fixedHolidays) {
var dateString = fixedHolidays[key];
var date = parseInt(dateString.slice(0,2));
var month = parseInt(dateString.slice(2,4));
var date = parseInt(dateString.slice(0, 2));
var month = parseInt(dateString.slice(2, 4));
result[key] = new Date(year, month - 1, date);
}
return result;
......@@ -68,10 +68,18 @@ function Holidays(year) {
}
var holidays = getFixedHolidays(fixedHolidays);
var holidays = getVariableHolidaysMap(variableOffsets, holidays);
holidays = getVariableHolidaysMap(variableOffsets, holidays);
this.getHoliday = function(id) {
if(id == 0) {
var result = [];
for(var key in holidays) {
result.push(holidays[key]);
}
return result;
}
if(id in holidays)
return holidays[id];
return [holidays[id]];
console.error("invalid holiday id " + id);
return null;
}
......@@ -79,6 +87,5 @@ function Holidays(year) {
}
var holidays = new Holidays(2014);
console.log(holidays.getHoliday(2));
module.exports = Holidays;
\ No newline at end of file
var tmUtils = require('./timeUtils');
var Holidays = require('./holidays');
var now = new Date();
var holidaysGetter = new Holidays(now.getFullYear());
var includeString = "810a6deb-46f2-4fa8-b779-bb5c2a6b5577";
var excludeString = "bb74c170-b06f-4d2b-ab88-2f6bf9ce8068";
var _epochStart = new Date();
_epochStart.setDate(_epochStart.getDate() - 14);
var _epochEnd = new Date(_epochStart.getTime() + 31 * 24 * 3600000);
var _epochEnd = new Date(_epochStart.getTime() + 60 * 24 * 3600000);
var epocheSpan = [_epochStart, _epochEnd];
......@@ -14,19 +16,15 @@ function calculateOpeningHours(json) {
var jsonIncl = json[includeString];
var jsonExcl = json[excludeString];
var resultIncl = getIntervals(jsonIncl);
var resultExcl = getIntervals(jsonExcl);
var result = tmUtils.andNotOperator(resultIncl, resultExcl);
console.log(result);
}
function getHolidays(data) {
}
function getIntervals(json) {
var result = [];
var holidays = [];
......@@ -35,7 +33,7 @@ function getIntervals(json) {
if(x)
result.push(x);
else {
x = getHolidays(json[key])
x = getHolidays(json[key]);
if(x)
holidays.push(x);
}
......@@ -44,7 +42,8 @@ function getIntervals(json) {
}
function getDaySpan(dayoption) {
function getDaySpan(data) {
var dayoption = parseInt(data["dayoption"]["0"]);
if(dayoption < 7) return [dayoption, dayoption];
switch(dayoption) {
case 7:
......@@ -56,7 +55,7 @@ function getDaySpan(dayoption) {
case 10:
return [1, 6];
default:
throw "Invalid day option";
console.error("Invalid day option");
}
}
......@@ -75,22 +74,51 @@ function parseDate(date, addOneDay) {
var year = now.getFullYear();
var split = date.split(".");
var month = parseInt(split[1]) - 1;
var day = parseInt(split[0]) + addOneDay ? 1 : 0;
var day = parseInt(split[0]) + (addOneDay ? 1 : 0);
return new Date(year, month, day);
}
function getOpeningHours(data) {
function getHolidays(data) {
var option = data["option"]["0"];
if(option != "holiday") {
console.error("data is no holiday");
console.error(data);
return null;
}
var dayoption = parseInt(data["dayoption"]["0"]);
var daySpan = getDaySpan(dayoption);
var timeSpan = getTimeSpan(data);
var holidayId =data["holidayoption"][0];
var days = holidaysGetter.getHoliday(holidayId);
var intervals = days.map(function(date) {
return tmUtils.singleDay(date, timeSpan);
});
return intervals;
}
function getDateSpan(data) {
var startDate = parseDate(data["opening_day_from"]) || _epochStart;
var endDate = parseDate(data["opening_day_to"], true) || _epochEnd;
var dateSpan = [startDate, endDate];
return [startDate, endDate];
}
function getTimeSpan(data) {
return [parseTime(data["opening_from"]), parseTime(data["opening_to"])];
}
function getOption(data) {
return data["option"][0];
}
function getOpeningHours(data) {
var option = getOption(data);
var daySpan = getDaySpan(data);
var dateSpan = getDateSpan(data);
var timeSpan = getTimeSpan(data);
var timeSpan = [parseTime(data["opening_from"]), parseTime(data["opening_to"])];
var result = {type: 0};
switch(option) {
case "default":
return tmUtils.standardFromTillDay(daySpan, timeSpan, epocheSpan, 7);
......@@ -101,7 +129,6 @@ function getOpeningHours(data) {
var noInMonth;
if(repeatOption <= 4) noInMonth = repeatOption;
else if(repeatOption == 30) noInMonth = -1;
if(noInMonth)
return tmUtils.cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epocheSpan);
......@@ -113,9 +140,21 @@ function getOpeningHours(data) {
default:
console.error("invalid repeatoption");
}
}
}
function getOpeningHoursDefault(data) {
var daySpan = getDaySpan(data);
var timeSpan = getTimeSpan(data);
return tmUtils.standardFromTillDay(daySpan, timeSpan, epocheSpan, 7);
}
function getOpeningHoursSeason(data) {
var daySpan = getDaySpan(data);
var timeSpan = getTimeSpan(data);
var dateSpan = getDateSpan(data);
return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, 7);
}
calculateOpeningHours(require('./testData/testHof.json'));
\ No newline at end of file
......@@ -17,16 +17,18 @@ console.log("epochEnd ", _epochEnd);
//console.log(workday);
var t1 = tmUtils.cyclicFromTillDay(1, 1, 1, {h: 9, m: 0}, {h: 0, m: 0}, _epochStart, _epochEnd);
var t2 = tmUtils.cyclicFromTillDay(2, 2, 1, {h: 0, m: 0}, {h: 18, m: 29}, _epochStart, _epochEnd);
var t1 = tmUtils.cyclicFromTillDay([1, 1], 1, [{h: 9, m: 0}, {h: 0, m: 0}], [_epochStart, _epochEnd]);
var t2 = tmUtils.cyclicFromTillDay([2, 2], 1, [{h: 0, m: 0}, {h: 18, m: 29}], [_epochStart, _epochEnd]);
t1 = tmUtils.standardFromTillDay(3,3, {h: 21, m: 0}, {h: 0, m: 0}, _epochStart, _epochEnd, 7);
t2 = tmUtils.standardFromTillDay(4,4, {h: 0, m: 0}, {h: 18, m: 0}, _epochStart, _epochEnd, 7);
t1 = tmUtils.standardFromTillDay([3,3], [{h: 21, m: 0}, {h: 0, m: 0}], [_epochStart, _epochEnd], 7);
t2 = tmUtils.standardFromTillDay([4,4], [{h: 0, m: 0}, {h: 18, m: 0}], [_epochStart, _epochEnd], 7);
console.log(t1);
console.log(t2);
var t = tmUtils.orOperator([t1, t2, tmUtils.singleDay(new Date())]);
var singleDay = tmUtils.singleDay(new Date());
console.log(singleDay);
var t = tmUtils.orOperator([t1, t2, singleDay]);
console.log(t);
console.log(tmUtils.mergeOverlaps(t));
//console.log(tmUtils.orOperator([t,t2]));
\ No newline at end of file
console.log(tmUtils.orOperator([t,t2]));
\ No newline at end of file
......@@ -100,7 +100,7 @@
},
"opening_day_from": "",
"opening_day_to": "",
"opening_from": "9:00",
"opening_from": "09:00",
"opening_to": "18:00"
},
"1": {
......@@ -119,99 +119,27 @@
"opening_day_from": "",
"opening_day_to": "",
"opening_from": "9:00",
"opening_to": "12:00"
},
"2": {
"option": {
"0": "default"
},
"dayoption": {
"0": "2"
},
"repeatoption": {
"0": ""
},
"holidayoption": {
"0": ""
},
"opening_day_from": "",
"opening_day_to": "",
"opening_from": "13:00",
"opening_to": "18:00"
},
"3": {
"option": {
"0": "default"
},
"dayoption": {
"0": "8"
},
"repeatoption": {
"0": ""
},
"holidayoption": {
"0": ""
},
"opening_day_from": "",
"opening_day_to": "",
"opening_from": "9:00",
"opening_to": "18:00"
},
"4": {
"option": {
"0": "repeatable"
},
"dayoption": {
"0": "3"
},
"repeatoption": {
"0": "3"
},
"holidayoption": {
"0": ""
},
"opening_day_from": "",
"opening_day_to": "",
"opening_from": "9:00",
"opening_to": "18:00"
},
"5": {
"2": {
"option": {
"0": "repeatable"
},
"dayoption": {
"0": "4"
},
"repeatoption": {
"0": "14"
},
"holidayoption": {
"0": ""
},
"opening_day_from": "04.01",
"opening_day_to": "",
"opening_from": "9:00",
"opening_to": "18:00"
},
"6": {
"option": {
"0": "season"
},
"dayoption": {
"0": "5"
"0": "9"
},
"repeatoption": {
"0": ""
"0": "1"
},
"holidayoption": {
"0": ""
},
"opening_day_from": "25.05",
"opening_day_to": "30.11",
"opening_day_from": "21.05",
"opening_day_to": "21.06",
"opening_from": "9:00",
"opening_to": "18:00"
},
"7": {
"3": {
"option": {
"0": "holiday"
},
......@@ -222,140 +150,32 @@
"0": ""
},
"holidayoption": {
"0": "0"
"0": "602"
},
"opening_day_from": "",
"opening_day_to": "",
"opening_from": "9:00",
"opening_to": "18:00"
"opening_from": "13:00",
"opening_to": "15:00"
}
},
"bb74c170-b06f-4d2b-ab88-2f6bf9ce8068": {
"0": {
"option": {
"0": "repeatable"
},
"dayoption": {
"0": "1"
},
"repeatoption": {
"0": "3"
},
"holidayoption": {
"0": ""
},
"opening_day_from": "01.01",
"opening_day_to": "",
"opening_from": "",
"opening_to": ""
},
"1": {
"option": {
"0": "season"
},
"dayoption": {
"0": "8"
},
"repeatoption": {
"0": ""
},
"holidayoption": {
"0": ""
},
"opening_day_from": "01.01",
"opening_day_to": "01.02",
"opening_from": "",
"opening_to": ""
},
"2": {
"option": {
"0": "holiday"
},
"dayoption": {
"0": "0"
},
"repeatoption": {
"0": ""
},
"holidayoption": {
"0": "121"
},
"opening_day_from": "01.01",
"opening_day_to": "",
"opening_from": "",
"opening_to": ""
},
"3": {
"option": {
"0": "holiday"
},
"dayoption": {
"0": "0"
},
"repeatoption": {
"0": ""
},
"holidayoption": {
"0": "122"
},
"opening_day_from": "01.01",
"opening_day_to": "",
"opening_from": "",
"opening_to": ""
},
"4": {
"option": {
"0": "holiday"
},
"dayoption": {
"0": "0"
},
"repeatoption": {
"0": ""
},
"holidayoption": {
"0": "123"
},
"opening_day_from": "01.01",
"opening_day_to": "",
"opening_from": "",
"opening_to": ""
},
"5": {
"option": {
"0": "default"
},
"dayoption": {
"0": "0"
"0": "2"
},
"repeatoption": {
"0": ""
"0": "3"
},
"holidayoption": {
"0": ""
},
"opening_day_from": "01.01",
"opening_day_to": "",
"opening_from": "",
"opening_to": ""
},
"6": {
"option": {
"0": "vacation"
},
"dayoption": {
"0": "0"
},
"repeatoption": {
"0": ""
},
"holidayoption": {
"0": ""
},
"opening_day_from": "01.10",
"opening_day_to": "09.10",
"opening_from": "",
"opening_to": ""
"opening_from": "10:00",
"opening_to": "14:30"
}
},
"7ac7d682-2862-443b-83bd-8a3cf837ad8e": {
......
......@@ -86,45 +86,48 @@ function cyclic(day, noInMonth, timeFrom, timeUntil, epochStart, epochEnd) {
}
function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
if(!epochSpan)
epochSpan = dateSpan;
timeSpan = transformTimeSpan(timeSpan);
var dayFrom = daySpan[0];
var dayTill = daySpan[1];
var timeFrom = timeSpan[0];
var timeUntil = timeSpan[1];
var epochStart = dateSpan[0];
var epochEnd = dateSpan[1];
var startDate = dateSpan[0];
var endDate = dateSpan[1];
//limit dateSpan to epochSpan, to reduce costs
if(epochEnd > epochSpan[1]) epochEnd = epochSpan[1];
if(epochStart < epochSpan[0]) {
if(endDate > epochSpan[1]) endDate = epochSpan[1];
if(startDate < epochSpan[0]) {
var t = epochSpan[0];
//substract 1 month to cover special cases
epochStart = new Date(t.getFullYear(), t.getMonth() - 1, t.getDate())
startDate = new Date(t.getFullYear(), t.getMonth() - 1, t.getDate())
}
var result = [];
epochStart = new Date(epochStart);
startDate = new Date(startDate);
while(true) {
var startDate = _getNextNoInMonthOccurence(dayFrom, epochStart, noInMonth);
startDate.setHours(timeFrom.h);
startDate.setMinutes(timeFrom.m);
var endDate = new Date(startDate);
endDate.setHours(timeUntil.h);
endDate.setMinutes(timeUntil.m);
if(endDate > epochEnd)
var date0 = _getNextNoInMonthOccurence(dayFrom, startDate, noInMonth);
date0.setHours(timeFrom.h);
date0.setMinutes(timeFrom.m);
var date1 = new Date(date0);
date1.setHours(timeUntil.h);
date1.setMinutes(timeUntil.m);
if(date1 > endDate)
break;
else {
result.push([startDate, endDate]);
epochStart = new Date(endDate);
epochStart.setDate(epochStart.getDate() + 1);
for(var offset = 1; offset <= dayTill - dayFrom; offset++) {
startDate = new Date(startDate);
endDate = new Date(endDate);
result.push([date0, date1]);
startDate = new Date(date1);
startDate.setDate(startDate.getDate() + 1);
endDate.setDate(endDate.getDate() + 1);
if(endDate <= epochEnd)
result.push([startDate, endDate]);
for(var offset = 1; offset <= dayTill - dayFrom; offset++) {
date0 = new Date(date0);
date1 = new Date(date1);
date0.setDate(date0.getDate() + 1);
date1.setDate(date1.getDate() + 1);
if(date1 <= endDate)
result.push([date0, date1]);
else break;
}
}
......@@ -191,6 +194,7 @@ function _getNextNoInMonthOccurence(day, startDate, noInMonth) {
function singleDay(date, timeSpan) {
var startDate, endDate;
if(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);
}
......@@ -204,6 +208,16 @@ function singleDay(date, timeSpan) {
];
}
function dateSpan(dateSpan) {
var d0 = dateSpan[0];
var d1 = dateSpan[1];
var startDate = new Date(d0.getFullYear(), d0.getMonth(), d0.getDay());
var endDate = new Date(d1.getFullYear(), d1.getMonth(), d1.getDay() + 1);
return [
[startDate, endDate]
];
}
function orOperator(intervals) {
var result = [];
for(var i = 0; i < intervals.length; i++) {
......
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