Commit eca9e65e authored by Johannes Bill's avatar Johannes Bill

bugfixing

parent 3b39b87e
...@@ -7,23 +7,26 @@ var excludeString = "bb74c170-b06f-4d2b-ab88-2f6bf9ce8068"; ...@@ -7,23 +7,26 @@ var excludeString = "bb74c170-b06f-4d2b-ab88-2f6bf9ce8068";
var _epochStart = new Date(); var _epochStart = new Date();
_epochStart.setDate(_epochStart.getDate() - 14); _epochStart.setDate(_epochStart.getDate() - 14);
var _epochEnd = new Date(_epochStart.getTime() + 60 * 24 * 3600000); var _epochEnd = new Date(_epochStart.getTime() + 60 * 24 * 3600000);
var epocheSpan = [_epochStart, _epochEnd];
function calculateOpeningHours(json) { function calculateOpeningHours(json) {
var jsonIncl = json[includeString]; var jsonIncl = json[includeString];
var jsonExcl = json[excludeString]; var jsonExcl = json[excludeString];
// console.log(jsonExcl);
// console.log(getOpeningHours(jsonExcl[0]));
var resultIncl = getIntervals(jsonIncl); var resultIncl = getIntervals(jsonIncl);
var resultExcl = getIntervals(jsonExcl); var resultExcl = getIntervals(jsonExcl);
console.log(resultIncl);
console.log(resultExcl);
console.log(tmUtils.andNotOperator(resultIncl, resultExcl)); console.log(tmUtils.andNotOperator(resultIncl, resultExcl));
} }
function getIntervals (json) { function getIntervals(json) {
var result = []; var result = [];
for(var key in json) { for(var key in json) {
var x = getOpeningHours(json[key]); var x = getOpeningHours(json[key]);
...@@ -53,19 +56,19 @@ function getDaySpan(dayoption) { ...@@ -53,19 +56,19 @@ function getDaySpan(dayoption) {
function parseTime(time) { function parseTime(time) {
var split = time.split(":"); var split = time.split(":");
return { return {
h: parseInt(split[0]), h: parseInt(split[0]) || 0,
m: parseInt(split[1]) m: parseInt(split[1]) || 0
} }
} }
function parseDate(date) { function parseDate(date, addOneDay) {
if(date.length == 0) if(date.length == 0)
return null; return null;
var year = now.getFullYear(); var year = now.getFullYear();
var split = date.split("."); var split = date.split(".");
var month = parseInt(split[1]) - 1; var month = parseInt(split[1]) - 1;
var day = parseInt(split[0]); var day = parseInt(split[0]) + addOneDay?1:0;
return new Date(year, month, day); return new Date(year, month, day);
} }
...@@ -76,16 +79,16 @@ function getOpeningHours(data) { ...@@ -76,16 +79,16 @@ function getOpeningHours(data) {
var option = data["option"]["0"]; var option = data["option"]["0"];
var startDate = parseDate(data["opening_day_from"]) || _epochStart; var startDate = parseDate(data["opening_day_from"]) || _epochStart;
var endDate = parseDate(data["opening_day_to"]) || _epochEnd; var endDate = parseDate(data["opening_day_to"], true) || _epochEnd;
var dateSpan = [startDate, endDate];
var timeFrom = parseTime(data["opening_from"]); var timeSpan = [parseTime(data["opening_from"]), parseTime(data["opening_to"])];
var timeTill = parseTime(data["opening_to"]);
switch(option) { switch(option) {
case "default": case "default":
return tmUtils.standardFromTillDay(daySpan[0], daySpan[1], timeFrom, timeTill, _epochStart, _epochEnd, 7); return tmUtils.standardFromTillDay(daySpan, timeSpan, epocheSpan, 7);
case "season": case "season":
return tmUtils.standardFromTillDay(daySpan[0], daySpan[1], timeFrom, timeTill, startDate, endDate, 7); return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, 7);
case "repeatable": case "repeatable":
var repeatOption = parseInt(data["repeatoption"]["0"]); var repeatOption = parseInt(data["repeatoption"]["0"]);
var noInMonth; var noInMonth;
...@@ -93,13 +96,13 @@ function getOpeningHours(data) { ...@@ -93,13 +96,13 @@ function getOpeningHours(data) {
else if(repeatOption == 30) noInMonth = -1; else if(repeatOption == 30) noInMonth = -1;
if(noInMonth) if(noInMonth)
return tmUtils.cyclicFromTillDay(daySpan[0], daySpan[1], noInMonth,timeFrom, timeTill, startDate, endDate); return tmUtils.cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epocheSpan);
switch (repeatOption) { switch(repeatOption) {
case 14: case 14:
case 21: case 21:
case 28: case 28:
return tmUtils.standardFromTillDay(daySpan[0], daySpan[1], timeFrom, timeTill, startDate, endDate, repeatOption); return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, repeatOption);
default: default:
throw "invalid repeat option"; throw "invalid repeat option";
} }
...@@ -107,4 +110,4 @@ function getOpeningHours(data) { ...@@ -107,4 +110,4 @@ function getOpeningHours(data) {
// throw "invalid data"; // throw "invalid data";
} }
calculateOpeningHours(require('./testData/hofman.json')); calculateOpeningHours(require('./testData/testHof.json'));
\ No newline at end of file \ No newline at end of file
...@@ -6,7 +6,7 @@ function compareFT(from, till) { ...@@ -6,7 +6,7 @@ function compareFT(from, till) {
} }
function transformTill(from, till) { function transformTill(from, till) {
if(compareFT(from, till) > 0) { if(compareFT(from, till) >= 0) {
return {h: till.h + 24, m: till.m} return {h: till.h + 24, m: till.m}
} }
else return till; else return till;
...@@ -34,7 +34,14 @@ function _standard(day, timeFrom, timeUntil, epochStart, epochEnd, distanceDays) ...@@ -34,7 +34,14 @@ function _standard(day, timeFrom, timeUntil, epochStart, epochEnd, distanceDays)
return _cyclicInterval(startDate, endDate, distanceDays * 24 * 3600000, epochStart, epochEnd); return _cyclicInterval(startDate, endDate, distanceDays * 24 * 3600000, epochStart, epochEnd);
} }
function standardFromTillDay(dayFrom, dayTill, timeFrom, timeUntil, epochStart, epochEnd, daysDistance) { function standardFromTillDay(daySpan, timeSpan, dateSpan, daysDistance) {
var dayFrom = daySpan[0];
var dayTill = daySpan[1];
var timeFrom = timeSpan[0];
var timeUntil = timeSpan[1];
var epochStart = dateSpan[0];
var epochEnd = dateSpan[1];
timeUntil = transformTill(timeFrom, timeUntil); timeUntil = transformTill(timeFrom, timeUntil);
var firstDays = _standard(dayFrom, timeFrom, timeUntil, epochStart, epochEnd, daysDistance); var firstDays = _standard(dayFrom, timeFrom, timeUntil, epochStart, epochEnd, daysDistance);
...@@ -77,7 +84,22 @@ function cyclic(day, noInMonth, timeFrom, timeUntil, epochStart, epochEnd) { ...@@ -77,7 +84,22 @@ function cyclic(day, noInMonth, timeFrom, timeUntil, epochStart, epochEnd) {
return result; return result;
} }
function cyclicFromTillDay(dayFrom, dayTill, noInMonth, timeFrom, timeUntil, epochStart, epochEnd) { function cyclicFromTillDay(daySpan, noInMonth, timeSpan, dateSpan, epochSpan) {
var dayFrom = daySpan[0];
var dayTill = daySpan[1];
var timeFrom = timeSpan[0];
var timeUntil = timeSpan[1];
var epochStart = dateSpan[0];
var epochEnd = dateSpan[1];
//limit dateSpan to epochSpan, to reduce costs
if(epochEnd > epochSpan[1]) epochEnd = epochSpan[1];
if(epochStart < epochSpan[0]) {
var t = epochSpan[0];
//substract 1 month to cover special cases
epochStart = new Date(t.getFullYear(), t.getMonth() - 1, t.getDate())
}
timeUntil = transformTill(timeFrom, timeUntil); timeUntil = transformTill(timeFrom, timeUntil);
var result = []; var result = [];
epochStart = new Date(epochStart); epochStart = new Date(epochStart);
...@@ -106,6 +128,8 @@ function cyclicFromTillDay(dayFrom, dayTill, noInMonth, timeFrom, timeUntil, epo ...@@ -106,6 +128,8 @@ function cyclicFromTillDay(dayFrom, dayTill, noInMonth, timeFrom, timeUntil, epo
} }
} }
} }
result = andOperator(result, [epochSpan]);
return result; return result;
} }
......
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