Commit 7d0288bd authored by Johannes Bill's avatar Johannes Bill

bugfixing

parent c6d7dd88
...@@ -43,7 +43,7 @@ function Holidays(year) { ...@@ -43,7 +43,7 @@ function Holidays(year) {
}; };
function getEasterSunday() { function getEasterSunday() {
return new Date(2014, 3, 5); return new Date(2014, 3, 20);
} }
function getFixedHolidays(fixedHolidays, object) { function getFixedHolidays(fixedHolidays, object) {
......
...@@ -6,9 +6,10 @@ var holidaysGetter = new Holidays(now.getFullYear()); ...@@ -6,9 +6,10 @@ var holidaysGetter = new Holidays(now.getFullYear());
var includeString = "810a6deb-46f2-4fa8-b779-bb5c2a6b5577"; var includeString = "810a6deb-46f2-4fa8-b779-bb5c2a6b5577";
var excludeString = "bb74c170-b06f-4d2b-ab88-2f6bf9ce8068"; var excludeString = "bb74c170-b06f-4d2b-ab88-2f6bf9ce8068";
var _epochStart = new Date(); //var _epochStart = new Date(2014, 3, 0);
_epochStart.setDate(_epochStart.getDate() - 14); var _epochStart = new Date(2014, 4, 20);
var _epochEnd = new Date(_epochStart.getTime() + 60 * 24 * 3600000); //_epochStart.setDate(_epochStart.getDate() - 30);
var _epochEnd = new Date(_epochStart.getTime() + 90 * 24 * 3600000);
var epocheSpan = [_epochStart, _epochEnd]; var epocheSpan = [_epochStart, _epochEnd];
...@@ -16,12 +17,36 @@ function calculateOpeningHours(json) { ...@@ -16,12 +17,36 @@ function calculateOpeningHours(json) {
var jsonIncl = json[includeString]; var jsonIncl = json[includeString];
var jsonExcl = json[excludeString]; var jsonExcl = json[excludeString];
var resultIncl = [];
var resultExcl = [];
var holidayIncl = [];
var data, option, key;
for(key in jsonIncl) {
data = jsonIncl[key];
option = getOption(data);
if(option == "holiday")
holidayIncl = holidayIncl.concat(getHolidays(data));
else if(option == "vacation") {
resultExcl.push(getOpeningHours(data, option));
}
else
resultIncl.push(getOpeningHours(data, option));
}
for(key in jsonExcl) {
data = jsonExcl[key];
option = getOption(data);
resultExcl.push(getOpeningHours(data, option));
}
resultExcl = tmUtils.orOperator(resultExcl);
var resultIncl = getIntervals(jsonIncl); var allHolidays = getAllHolidays();
var resultExcl = getIntervals(jsonExcl); resultIncl = tmUtils.orOperator(resultIncl);
resultIncl = tmUtils.andNotOperator(resultIncl, allHolidays);
resultIncl = tmUtils.orOperator([resultIncl, holidayIncl]);
var result = tmUtils.andNotOperator(resultIncl, resultExcl); return tmUtils.andNotOperator(resultIncl, resultExcl);
console.log(result);
} }
...@@ -32,11 +57,6 @@ function getIntervals(json) { ...@@ -32,11 +57,6 @@ function getIntervals(json) {
var x = getOpeningHours(json[key]); var x = getOpeningHours(json[key]);
if(x) if(x)
result.push(x); result.push(x);
else {
x = getHolidays(json[key]);
if(x)
holidays.push(x);
}
} }
return tmUtils.orOperator(result); return tmUtils.orOperator(result);
} }
...@@ -88,13 +108,22 @@ function getHolidays(data) { ...@@ -88,13 +108,22 @@ function getHolidays(data) {
} }
var timeSpan = getTimeSpan(data); var timeSpan = getTimeSpan(data);
var holidayId =data["holidayoption"][0]; var holidayId = data["holidayoption"][0];
var days = holidaysGetter.getHoliday(holidayId); var days = holidaysGetter.getHoliday(holidayId);
var intervals = days.map(function(date) { var intervals = days.map(function(date) {
return tmUtils.singleDay(date, timeSpan); return tmUtils.singleDay(date, timeSpan);
}); });
tmUtils.sort(intervals);
return intervals;
}
function getAllHolidays() {
var days = holidaysGetter.getHoliday(0);
var intervals = days.map(function(date) {
return tmUtils.singleDay(date);
});
tmUtils.sort(intervals);
return intervals; return intervals;
} }
...@@ -112,49 +141,63 @@ function getOption(data) { ...@@ -112,49 +141,63 @@ function getOption(data) {
return data["option"][0]; return data["option"][0];
} }
function getOpeningHours(data) { function getOpeningHours(data, option) {
var option = getOption(data); option = option || getOption(data);
var daySpan = getDaySpan(data);
var dateSpan = getDateSpan(data);
var timeSpan = getTimeSpan(data);
switch(option) { switch(option) {
case "default": case "default":
return tmUtils.standardFromTillDay(daySpan, timeSpan, epocheSpan, 7); return getOpeningHoursDefault(data);
case "season": case "season":
return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, 7); return getOpeningHoursSeason(data);
case "repeatable": case "repeatable":
var repeatOption = parseInt(data["repeatoption"]["0"]); return getOpeningHoursRepeatable(data);
var noInMonth; case "vacation":
if(repeatOption <= 4) noInMonth = repeatOption; return getOpeningHoursVacation(data);
else if(repeatOption == 30) noInMonth = -1; default:
if(noInMonth) console.error("no propper option found");
return tmUtils.cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epocheSpan); return [];
switch(repeatOption) {
case 14:
case 21:
case 28:
return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, repeatOption);
default:
console.error("invalid repeatoption");
}
} }
} }
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, 7); return tmUtils.standardFromTillDay(daySpan, timeSpan, epocheSpan, epocheSpan, 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, 7); function getOpeningHoursVacation(data) {
var dateSpan = getDateSpan(data);
return tmUtils.dateSpan(dateSpan);
} }
function getOpeningHoursRepeatable(data) {
var daySpan = getDaySpan(data);
var timeSpan = getTimeSpan(data);
var dateSpan = getDateSpan(data);
var repeatOption = parseInt(data["repeatoption"]["0"]);
var noInMonth;
if(repeatOption <= 4) noInMonth = repeatOption;
else if(repeatOption == 30) noInMonth = -1;
if(noInMonth)
return tmUtils.cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epocheSpan);
else {
switch(repeatOption) {
case 14:
case 21:
case 28:
return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, epocheSpan, repeatOption);
default:
console.error("invalid repeatoption");
}
}
}
calculateOpeningHours(require('./testData/testHof.json')); console.log(calculateOpeningHours(require('./testData/testHof.json')));
\ No newline at end of file \ No newline at end of file
...@@ -26,7 +26,7 @@ t2 = tmUtils.standardFromTillDay([4,4], [{h: 0, m: 0}, {h: 18, m: 0}], [_epochSt ...@@ -26,7 +26,7 @@ t2 = tmUtils.standardFromTillDay([4,4], [{h: 0, m: 0}, {h: 18, m: 0}], [_epochSt
console.log(t1); console.log(t1);
console.log(t2); console.log(t2);
var singleDay = tmUtils.singleDay(new Date()); var singleDay = [tmUtils.singleDay(new Date())];
console.log(singleDay); console.log(singleDay);
var t = tmUtils.orOperator([t1, t2, singleDay]); var t = tmUtils.orOperator([t1, t2, singleDay]);
console.log(t); console.log(t);
......
...@@ -160,6 +160,24 @@ ...@@ -160,6 +160,24 @@
}, },
"bb74c170-b06f-4d2b-ab88-2f6bf9ce8068": { "bb74c170-b06f-4d2b-ab88-2f6bf9ce8068": {
"0": { "0": {
"option": {
"0": "vacation"
},
"dayoption": {
"0": ""
},
"repeatoption": {
"0": "3"
},
"holidayoption": {
"0": ""
},
"opening_day_from": "27.05",
"opening_day_to": "04.06",
"opening_from": "",
"opening_to": ""
},
"1": {
"option": { "option": {
"0": "default" "0": "default"
}, },
...@@ -175,7 +193,7 @@ ...@@ -175,7 +193,7 @@
"opening_day_from": "01.01", "opening_day_from": "01.01",
"opening_day_to": "", "opening_day_to": "",
"opening_from": "10:00", "opening_from": "10:00",
"opening_to": "14:30" "opening_to": "12:30"
} }
}, },
"7ac7d682-2862-443b-83bd-8a3cf837ad8e": { "7ac7d682-2862-443b-83bd-8a3cf837ad8e": {
......
...@@ -23,20 +23,20 @@ function _cyclicInterval(from, until, interval, epochStart, epochEnd) { ...@@ -23,20 +23,20 @@ function _cyclicInterval(from, until, interval, epochStart, epochEnd) {
return resultArray; return resultArray;
} }
function _standard(day, timeFrom, timeUntil, epochStart, epochEnd, distanceDays) { function _standard(day, timeFrom, timeUntil, startDate, endDate, distanceDays) {
var dayDiff = day - epochStart.getDay(); var dayDiff = day - startDate.getDay();
if(dayDiff < 0) if(dayDiff < 0)
dayDiff += 7; dayDiff += 7;
var startDate = new Date(epochStart.getFullYear(), epochStart.getMonth(), var date0 = new Date(startDate.getFullYear(), startDate.getMonth(),
epochStart.getDate() + dayDiff, timeFrom.h, timeFrom.m); startDate.getDate() + dayDiff, timeFrom.h, timeFrom.m);
var endDate = new Date(epochStart.getFullYear(), epochStart.getMonth(), var date1 = new Date(startDate.getFullYear(), startDate.getMonth(),
epochStart.getDate() + dayDiff, timeUntil.h, timeUntil.m); startDate.getDate() + dayDiff, timeUntil.h, timeUntil.m);
return _cyclicInterval(startDate, endDate, distanceDays * 24 * 3600000, epochStart, epochEnd); return _cyclicInterval(date0, date1, distanceDays * 24 * 3600000, startDate, endDate);
} }
function standardFromTillDay(daySpan, timeSpan, dateSpan, 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 dayTill = daySpan[1];
...@@ -58,8 +58,8 @@ function standardFromTillDay(daySpan, timeSpan, dateSpan, daysDistance) { ...@@ -58,8 +58,8 @@ function standardFromTillDay(daySpan, timeSpan, dateSpan, daysDistance) {
result.push([start, end]); result.push([start, end]);
} }
} }
result = sort(result);
result = sortDateIntervals(result); result = andOperator(result, [epochSpan]);
return result; return result;
} }
...@@ -137,7 +137,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) { ...@@ -137,7 +137,7 @@ function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
return result; return result;
} }
function _cyclicFromTillDayOld(dayFrom, dayTill, noInMonth, timeFrom, timeUntil, epochStart, epochEnd) { /*function _cyclicFromTillDayOld(dayFrom, dayTill, noInMonth, timeFrom, timeUntil, epochStart, epochEnd) {
var firstDays = cyclic(dayFrom, noInMonth, timeFrom, timeUntil, epochStart, epochEnd); var firstDays = cyclic(dayFrom, noInMonth, timeFrom, timeUntil, epochStart, epochEnd);
var result = firstDays.slice(); var result = firstDays.slice();
...@@ -151,9 +151,9 @@ function _cyclicFromTillDayOld(dayFrom, dayTill, noInMonth, timeFrom, timeUntil, ...@@ -151,9 +151,9 @@ function _cyclicFromTillDayOld(dayFrom, dayTill, noInMonth, timeFrom, timeUntil,
result.push([start, end]); result.push([start, end]);
} }
} }
sortDateIntervals(result); sort(result);
return result; return result;
} }*/
function _getNextNoInMonthOccurence(day, startDate, noInMonth) { function _getNextNoInMonthOccurence(day, startDate, noInMonth) {
startDate = new Date(startDate); startDate = new Date(startDate);
...@@ -203,16 +203,14 @@ function singleDay(date, timeSpan) { ...@@ -203,16 +203,14 @@ function singleDay(date, timeSpan) {
endDate = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1); endDate = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1);
} }
return [ return [startDate, endDate];
[startDate, endDate]
];
} }
function dateSpan(dateSpan) { function dateSpan(dateSpan) {
var d0 = dateSpan[0]; var d0 = dateSpan[0];
var d1 = dateSpan[1]; var d1 = dateSpan[1];
var startDate = new Date(d0.getFullYear(), d0.getMonth(), d0.getDay()); var startDate = new Date(d0.getFullYear(), d0.getMonth(), d0.getDate());
var endDate = new Date(d1.getFullYear(), d1.getMonth(), d1.getDay() + 1); var endDate = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate());
return [ return [
[startDate, endDate] [startDate, endDate]
]; ];
...@@ -223,12 +221,12 @@ function orOperator(intervals) { ...@@ -223,12 +221,12 @@ function orOperator(intervals) {
for(var i = 0; i < intervals.length; i++) { for(var i = 0; i < intervals.length; i++) {
result = result.concat(intervals[i]); result = result.concat(intervals[i]);
} }
sortDateIntervals(result); sort(result);
mergeOverlaps(result); mergeOverlaps(result);
return result; return result;
} }
function sortDateIntervals(intervals) { function sort(intervals) {
intervals.sort(function(a, b) { intervals.sort(function(a, b) {
return a[0] - b[0]; return a[0] - b[0];
}); });
...@@ -243,7 +241,7 @@ function mergeOverlaps(interval) { ...@@ -243,7 +241,7 @@ function mergeOverlaps(interval) {
var endSecond = interval[i + 1][1]; var endSecond = interval[i + 1][1];
if(endFirst >= startSecond) { if(endFirst >= startSecond) {
interval.splice(i + 1, 1); interval.splice(i + 1, 1);
interval[i][1] = endSecond; interval[i][1] = new Date(Math.max(endFirst, endSecond));
} }
else i++; else i++;
} }
...@@ -314,4 +312,6 @@ module.exports.singleDay = singleDay; ...@@ -314,4 +312,6 @@ module.exports.singleDay = singleDay;
module.exports.orOperator = orOperator; module.exports.orOperator = orOperator;
module.exports.andOperator = andOperator; module.exports.andOperator = andOperator;
module.exports.andNotOperator = andNotOperator; module.exports.andNotOperator = andNotOperator;
module.exports.mergeOverlaps = mergeOverlaps; module.exports.mergeOverlaps = mergeOverlaps;
\ No newline at end of file module.exports.sort = sort;
module.exports.dateSpan = dateSpan;
\ 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