Commit d1b5b124 authored by Johannes Bill's avatar Johannes Bill

after cb refactor

parent 6a15bb8f
......@@ -3,240 +3,260 @@ var Holidays = require('./holidays');
var now = new Date();
var holidaysGetter = {};
var epochSpan = testEpochSpan();
var startYear;
var endYear;
function setEpocheSpan(_epocheSpan) {
epochSpan = _epocheSpan;
startYear = epochSpan[0].getFullYear();
endYear = epochSpan[1].getFullYear();
for(var year = startYear; year <= endYear; year++) {
if(!holidaysGetter[year])
holidaysGetter[year] = new Holidays(year);
}
}
function testEpochSpan() {
var _epochStart = new Date();
_epochStart = new Date(_epochStart.getFullYear(), _epochStart.getMonth(), _epochStart.getDate());
_epochStart.setDate(_epochStart.getDate() - 30);
var _epochEnd = new Date(_epochStart.getTime() + 130 * 24 * 3600000);
return [_epochStart, _epochEnd];
}
function wrapper(_epochSpan) {
var epochSpan;
var startYear;
var endYear;
setEpocheSpan(_epochSpan);
function setEpocheSpan(newEpochSpan) {
epochSpan = newEpochSpan;
startYear = epochSpan[0].getFullYear();
endYear = epochSpan[1].getFullYear();
for(var year = startYear; year <= endYear; year++) {
if(!holidaysGetter[year])
holidaysGetter[year] = new Holidays(year);
}
}
function calculateOpeningHours(json) {
var includeString = "810a6deb-46f2-4fa8-b779-bb5c2a6b5577";
var excludeString = "bb74c170-b06f-4d2b-ab88-2f6bf9ce8068";
function calculateOpeningHours(json, plz, cb) {
var includeString = "810a6deb-46f2-4fa8-b779-bb5c2a6b5577";
var excludeString = "bb74c170-b06f-4d2b-ab88-2f6bf9ce8068";
var jsonIncl = json[includeString];
var jsonExcl = json[excludeString];
if (!jsonIncl) {
throw new Error('no openinghours model found');
}
var jsonIncl = json[includeString];
var jsonExcl = json[excludeString];
var resultIncl = [];
var resultExcl = [];
var holidayIncl = [];
if (!jsonIncl) {
return cb(new Error('no openinghours model found'));
}
var data, option, key;
for (key in jsonIncl) {
data = jsonIncl[key];
option = getOption(data);
if (option == "holiday")
holidayIncl = holidayIncl.concat(getHolidays(data));
var resultIncl = [];
var resultExcl = [];
var holidayIncl = [];
var data, option, key;
try {
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));
}
if (jsonExcl) {
for (key in jsonExcl) {
data = jsonExcl[key];
option = getOption(data);
resultExcl.push(getOpeningHours(data, option));
else
resultIncl.push(getOpeningHours(data, option));
}
if (jsonExcl) {
for (key in jsonExcl) {
data = jsonExcl[key];
option = getOption(data);
resultExcl.push(getOpeningHours(data, option));
}
resultExcl = tmUtils.orOp(resultExcl);
}
}
catch (err) {
return cb(err);
}
resultExcl = tmUtils.orOp(resultExcl);
}
var allHolidays = getAllHolidays();
getAllHolidays(plz, function (err, allHolidays) {
if (err)
return cb(err);
allHolidays = tmUtils.andOp(allHolidays, [epochSpan]);
holidayIncl = tmUtils.andOp(holidayIncl, [epochSpan]);
allHolidays = tmUtils.andOp(allHolidays, [epochSpan]);
holidayIncl = tmUtils.andOp(holidayIncl, [epochSpan]);
resultIncl = tmUtils.orOp(resultIncl);
resultIncl = tmUtils.andNotOp(resultIncl, allHolidays);
resultIncl = tmUtils.orOp([resultIncl, holidayIncl]);
resultIncl = tmUtils.orOp(resultIncl);
resultIncl = tmUtils.andNotOp(resultIncl, allHolidays);
resultIncl = tmUtils.orOp([resultIncl, holidayIncl]);
var result = resultIncl;
if (jsonExcl)
result = tmUtils.andNotOp(resultIncl, resultExcl);
var result = resultIncl;
if (jsonExcl)
result = tmUtils.andNotOp(resultIncl, resultExcl);
cb(null, result);
});
return result;
}
function getDaySpan(data) {
var dayoption = parseInt(data["dayoption"]["0"]);
if (dayoption < 7) return [dayoption, dayoption];
switch (dayoption) {
case 7:
return [0, 0];
case 8:
return [0, 7];
case 9:
return [1, 5];
case 10:
return [1, 6];
default:
throw new Error("Invalid day option: " + dayoption);
}
}
function parseTime(time) {
var split = time.split(":");
return {
h: parseInt(split[0]) || 0,
m: parseInt(split[1]) || 0
function getDaySpan(data) {
var dayoption = parseInt(data["dayoption"]["0"]);
if (dayoption < 7) return [dayoption, dayoption];
switch (dayoption) {
case 7:
return [0, 0];
case 8:
return [0, 7];
case 9:
return [1, 5];
case 10:
return [1, 6];
default:
throw new Error("Invalid day option: " + dayoption);
}
}
}
function parseTime(time) {
var split = time.split(":");
return {
h: parseInt(split[0]) || 0,
m: parseInt(split[1]) || 0
}
}
function parseDate(date, year, addOneDay) {
if (date.length == 0)
return null;
var _year;
var split = date.split(".");
var month = parseInt(split[1]) - 1;
var day = parseInt(split[0]) + (addOneDay ? 1 : 0);
if(split.length === 3) {
_year = parseInt(split[2]);
}
if(!_year)
_year = year;
function parseDate(date, year, addOneDay) {
if (date.length == 0)
return null;
return new Date(_year, month, day);
}
var _year;
var split = date.split(".");
var month = parseInt(split[1]) - 1;
var day = parseInt(split[0]) + (addOneDay ? 1 : 0);
if (split.length === 3) {
_year = parseInt(split[2]);
}
if (!_year)
_year = year;
function getHolidays(data) {
var option = data["option"]["0"];
if (option != "holiday") {
throw new Error('not holiday: ' + option);
return new Date(_year, month, day);
}
var timeSpan = getTimeSpan(data);
var holidayId = data["holidayoption"][0];
function getHolidays(data) {
var option = data["option"]["0"];
if (option != "holiday") {
throw new Error('not holiday: ' + option);
}
var timeSpan = getTimeSpan(data);
var holidayId = data["holidayoption"][0];
var days = [];
for (var year = startYear; year <= endYear; year++) {
days = days.concat(holidaysGetter[year].getHoliday(holidayId));
}
var days = [];
for(var year = startYear; year <= endYear; year++) {
days = days.concat(holidaysGetter[year].getHoliday(holidayId));
var intervals = days.map(function (date) {
return tmUtils.singleDay(date, timeSpan);
});
tmUtils.sort(intervals);
return intervals;
}
var intervals = days.map(function (date) {
return tmUtils.singleDay(date, timeSpan);
});
tmUtils.sort(intervals);
return intervals;
}
function getAllHolidays(plz, cb) {
var days = [];
var cnt = endYear - startYear + 1;
function _cb(err, result) {
if (err) return cb(err);
days = days.concat(result);
cnt--;
if (cnt === 0) {
var intervals = days.map(function (date) {
return tmUtils.singleDay(date);
});
tmUtils.sort(intervals);
cb(null, intervals);
}
}
function getAllHolidays() {
var days = [];
for(var year = startYear; year <= endYear; year++) {
days = days.concat(holidaysGetter[year].getAllHolidays());
for (var year = startYear; year <= endYear; year++) {
holidaysGetter[year].getAllHolidays(plz, _cb);
}
}
var intervals = days.map(function (date) {
return tmUtils.singleDay(date);
});
tmUtils.sort(intervals);
return intervals;
}
function getDateSpan(data) {
var startDate = parseDate(data["opening_day_from"], now.getFullYear());
var endDate = parseDate(data["opening_day_to"], now.getFullYear(), true);
function getDateSpan(data) {
var startDate = parseDate(data["opening_day_from"], now.getFullYear());
var endDate = parseDate(data["opening_day_to"], now.getFullYear(), true);
if(!startDate)
startDate = epochSpan[0];
if(!endDate)
endDate = epochSpan[1];
if (!startDate)
startDate = epochSpan[0];
if (!endDate)
endDate = epochSpan[1];
//TODO: jahreswechsel beruecksichtigen
return [startDate, endDate];
}
//TODO: jahreswechsel beruecksichtigen
return [startDate, endDate];
}
function getTimeSpan(data) {
return [parseTime(data["opening_from"]), parseTime(data["opening_to"])];
}
function getTimeSpan(data) {
return [parseTime(data["opening_from"]), parseTime(data["opening_to"])];
}
function getOption(data) {
return data["option"][0];
}
function getOption(data) {
return data["option"][0];
}
function getOpeningHours(data, option) {
option = option || getOption(data);
switch (option) {
case "default":
return getOpeningHoursDefault(data);
case "season":
return getOpeningHoursSeason(data);
case "repeatable":
return getOpeningHoursRepeatable(data);
case "vacation":
return getOpeningHoursVacation(data);
case "":
return [];
default:
throw new Error("option not supported: " + option);
return [];
function getOpeningHours(data, option) {
option = option || getOption(data);
switch (option) {
case "default":
return getOpeningHoursDefault(data);
case "season":
return getOpeningHoursSeason(data);
case "repeatable":
return getOpeningHoursRepeatable(data);
case "vacation":
return getOpeningHoursVacation(data);
case "":
return [];
default:
throw new Error("option not supported: " + option);
return [];
}
}
}
function getOpeningHoursDefault(data) {
var daySpan = getDaySpan(data);
var timeSpan = getTimeSpan(data);
return tmUtils.standardFromTillDay(daySpan, timeSpan, epochSpan, epochSpan, 7);
}
function getOpeningHoursDefault(data) {
var daySpan = getDaySpan(data);
var timeSpan = getTimeSpan(data);
return tmUtils.standardFromTillDay(daySpan, timeSpan, epochSpan, epochSpan, 7);
}
function getOpeningHoursSeason(data) {
var daySpan = getDaySpan(data);
var timeSpan = getTimeSpan(data);
var dateSpan = getDateSpan(data);
return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, 7);
}
function getOpeningHoursSeason(data) {
var daySpan = getDaySpan(data);
var timeSpan = getTimeSpan(data);
var dateSpan = getDateSpan(data);
return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, 7);
}
function getOpeningHoursVacation(data) {
var dateSpan = getDateSpan(data);
return tmUtils.dateSpan(dateSpan);
}
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, epochSpan);
else {
switch (repeatOption) {
case 14:
case 21:
case 28:
return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, repeatOption);
default:
throw new Error("invalid repeatoption");
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, epochSpan);
else {
switch (repeatOption) {
case 14:
case 21:
case 28:
return tmUtils.standardFromTillDay(daySpan, timeSpan, dateSpan, epochSpan, repeatOption);
default:
throw new Error("invalid repeatoption");
}
}
}
return {
getData: calculateOpeningHours,
setEpocheSpan: setEpocheSpan
};
}
module.exports = wrapper;
module.exports.getData = calculateOpeningHours;
module.exports.setEpocheSpan = setEpocheSpan;
......@@ -60,46 +60,55 @@ function Holidays(year) {
var holidays = getFixedHolidays(fixedHolidays);
holidays = getVariableHolidaysMap(variableOffsets, holidays);
function plzToBlnd(plz) {
function plzToBlnd(plz, cb) {
}
function isAugsburg(plz) {
function isAugsburg(plz, cb) {
}
function getHolidayKeys(plz, kath, cb) {
function isKath(plz, cb) {
//remove
}
function getHolidayKeys(plz, cb) {
//TODO: remove
var keys = Object.keys(holidays);
return keys;
return cb(null, keys);
//\remove
var blnd = plzToBlnd(plz);
var isAugsburg = isAugsburg(plz);
var isKath = isKath(plz);
var keys = holidayMapping['sureHolidays'];
assert(isAugsburg && blnd == 'BY');
assert(isAugsburg == (blnd == 'BY'));
var blndMap = holidayMapping['region'][blnd];
if (blndMap) {
keys.concat(blndMap['default']);
if (kath && blndMap['kath'])
if (blndMap['kath'] && isKath)
keys.concat(blndMap['kath']);
if (isAugsburg && blndMap['augsburg'])
if (blndMap['augsburg'] && isAugsburg)
keys.concat(blndMap['augsburg']);
}
cb(null, keys);
}
this.getAllHolidays = function (plz, kath) {
var keys = getHolidayKeys(plz, kath);
var result = [];
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var elem = holidays[key];
if(elem)
result.push(elem);
}
return result;
this.getAllHolidays = function (plz, cb) {
getHolidayKeys(plz, function (err, keys) {
if(err)
return cb(err);
var result = [];
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var elem = holidays[key];
if (elem)
result.push(elem);
}
cb(err, result);
});
};
this.getHoliday = function (id) {
......
var http = require('http');
var hostname= "127.0.0.1";
var port= 3001;
var headers = {
"Content-Type": "application/json"
};
var path = '/api/postleitzahlen/findone/?filter[where][plz]=93047';
var headers = {};
headers["Content-Type"] = "application/json";
function request(path, cb) {
var options = {
hostname: hostname,
port: port,
path: path,
method: 'GET',
headers: headers
};
var callback = function (response) {
console.log('bla');
var str = '';
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
cb(null, str);
});
};
var req = http.request(options, callback);
req.on("error", function (err) {
cb(err);
});
var options = {
hostname: "127.0.0.1",
port: 3000,
path: path,
method: 'GET',
headers: headers
};
req.end();
}
var callback = function (response) {
console.log('bla');
var str = '';
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(str);
});
};
var req = http.request(options, callback);
req.on("error", function (error) {
console.error(error);
});
req.end();
function getBundesland(plz, cb) {
}
function getKatholisch(plz, cb) {
}
......@@ -3,13 +3,14 @@ var dateArray = require('../lib/dateArray');
describe("dateArray" ,function() {
describe("calculateOpeningHours", function() {
it("should equal", function() {
it("should equal", function(done) {
var data = require('./testData/testHof.json');
var epocheSpan = [new Date(2014,0,1), new Date(2015,0,1)];
dateArray.setEpocheSpan(epocheSpan);
var oHours =dateArray.getData(data);
var result = JSON.stringify(oHours);
expect(result).to.equal(require('./testData/testHofResult.json')['data']);
dateArray(epocheSpan).getData(data, 93047, function(err, oHours) {
var result = JSON.stringify(oHours);
expect(result).to.equal(require('./testData/testHofResult.json')['data']);
done();
});
})
})
});
\ No newline at end of file
......@@ -5,19 +5,20 @@ var dateView = require('../lib/dateView');
describe("dateView" ,function() {
describe("calculateOpeningHours", function() {
it("should equal", function() {
it("should equal", function(done) {
var data = require('./testData/testHof.json');
var now = new Date(2014, 4, 1);
var epocheSpan = dateView.getPropperEpochSpan(now);
dateArray.setEpocheSpan(epocheSpan);
var oHours =dateArray.getData(data);
var view = dateView.getView(oHours, now);
console.log(view);
var viewRef = fs.readFileSync(__dirname + '/testData/testHofView.html', {
encoding: "utf8"
dateArray(epocheSpan).getData(data, 93047, function(err, oHours) {
var view = dateView.getView(oHours, now);
console.log(view);
var viewRef = fs.readFileSync(__dirname + '/testData/testHofView.html', {
encoding: "utf8"
});
expect(view).to.equal(viewRef);
done();
});
expect(view).to.equal(viewRef);
})
})
});
\ No newline at end of file
var mysql = require('mysql');
var dateArray = require('../lib/dateArray');
var dateView = require('../lib/dateView');
var plz = 93047;
var connection = mysql.createConnection({
host: 'localhost',
......@@ -11,32 +12,37 @@ var connection = mysql.createConnection({
connection.connect();
module.exports.getData = function(now, cb) {
module.exports.getData = function (now, cb) {
var epocheSpan = dateView.getPropperEpochSpan(now);
// console.log(now);
// console.log(epocheSpan);
dateArray.setEpocheSpan(epocheSpan);
// dateArray.setEpocheSpan(epocheSpan);
connection.query('SELECT name, elements FROM cms_zoo_item WHERE type = "company"', function(err, rows) {
connection.query('SELECT name, elements FROM cms_zoo_item WHERE type = "company"', function (err, rows) {
var result = [];
var cnt = 0;
var iters = rows.length;
for (var i = 0; i < rows.length; i++) {
var obj = JSON.parse(rows[i].elements);
var name = rows[i].name;
try {
var data = dateArray.getData(obj);
if (data.length > 0) {
cnt++;
var view = dateView.getView(data, now);
result.push('<div class="name">'+name+"</div> "+view);
}
}
catch (err) {
}
(function() {
var name = rows[i].name;
dateArray(epocheSpan).getData(obj, plz, function (err, data) {
if(err) {
console.log(name, err);
}
else if (data.length > 0) {
cnt++;
var view = dateView.getView(data, now);
result.push('<div class="name">' + name + "</div> " + view);
}
if (--iters == 0) {
console.log("Count: %d", cnt);
cb(result.join('<br>'));
}
});
})();
}
console.log("Count: %d", cnt);
cb(result.join('<br>'));
});
};
......
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