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

bugfixing

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