Commit d1b5b124 authored by Johannes Bill's avatar Johannes Bill

after cb refactor

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