Commit 1c0daf67 authored by Johannes Bill's avatar Johannes Bill

little bit config refactoring, added weekview vertical

parent 8ead1f9e
{ {
"restApiHost": "127.0.0.1", "restApiHost": "127.0.0.1",
"restApiPort": 3001, "restApiPort": 3001,
"mysqlConfig": { "mysqlConfig": {
"host": "127.0.0.1", "host": "127.0.0.1",
"user": "root", "user": "root",
"password": "ntgf42raUpaD", "password": "bla",
"database": "holidays" "database": "holidays"
} }
} }
\ No newline at end of file
var dateArray = require('./lib/dateArray'); module.exports = function(config) {
var dateView = require('./lib/dateView'); var _config = require('./config.json');
if(config) _config["mysqlConfig"] = config;
function getOHIndex(incl, excl, date, plz, cb) { var dateArray = require('./lib/dateArray');
date = new Date(date.getFullYear(), date.getMonth(), date.getDate()); var dateView = require('./lib/dateView');
var epochSpan = [new Date(date.getFullYear(), date.getMonth(), date.getDate() - 7),
new Date(date.getFullYear(), date.getMonth(), date.getDate() + 2)];
dateArray(epochSpan).getData([incl, excl], plz, function(err, result) {
if(err) return cb(err);
var fResult = result.filter(function(elem) {
return elem[0].getTime() >= date.getTime();
});
cb(null, fResult); function getOHIndex(incl, excl, date, plz, cb) {
}) date = new Date(date.getFullYear(), date.getMonth(), date.getDate());
} var epochSpan = [new Date(date.getFullYear(), date.getMonth(), date.getDate() - 7),
new Date(date.getFullYear(), date.getMonth(), date.getDate() + 2)];
dateArray(epochSpan).getData([incl, excl], plz, function(err, result) {
if(err) return cb(err);
result = result.intervals;
var fResult = result.filter(function(elem) {
return elem[0].getTime() >= date.getTime();
});
module.exports.getOHIndex = getOHIndex; cb(null, fResult);
module.exports.dataArray = dateArray; })
module.exports.dateView = dateView; }
return {
getOHIndex: getOHIndex,
dateArray: dateArray,
dateView: dateView
}
};
var mysql = require('mysql'); var mysql = require('mysql');
var config = require('../config.json'); var config = require('../config.json');
var blndMapping = { var blndMapping = {
"Baden-Württemberg": "BW", "Baden-Württemberg": "BW",
"Niedersachsen": "NI", "Niedersachsen": "NI",
...@@ -20,7 +19,6 @@ var blndMapping = { ...@@ -20,7 +19,6 @@ var blndMapping = {
"Mecklenburg-Vorpommern": "MV", "Mecklenburg-Vorpommern": "MV",
"Thüringen": "TH" "Thüringen": "TH"
}; };
console.log(config["mysqlConfig"]);
var connection = mysql.createConnection(config["mysqlConfig"]); var connection = mysql.createConnection(config["mysqlConfig"]);
module.exports.getBundesland = function(plz, cb) { module.exports.getBundesland = function(plz, cb) {
......
var tmUtils = require('./timeUtils'); var tmUtils = require('./timeUtils');
var Holidays = require('./holidays');
var now = new Date(); var now = new Date();
var holidaysGetter = {}; var holidaysGetter = {};
var Holidays = require('./holidays');
function wrapper(_epochSpan) { function wrapper(_epochSpan) {
...@@ -14,8 +14,8 @@ function wrapper(_epochSpan) { ...@@ -14,8 +14,8 @@ function wrapper(_epochSpan) {
epochSpan = 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);
} }
} }
...@@ -23,7 +23,7 @@ function wrapper(_epochSpan) { ...@@ -23,7 +23,7 @@ function wrapper(_epochSpan) {
function calculateOpeningHours(json, plz, cb) { function calculateOpeningHours(json, plz, cb) {
var jsonIncl; var jsonIncl;
var jsonExcl; var jsonExcl;
if(Array.isArray(json)) { if (Array.isArray(json)) {
jsonIncl = json[0]; jsonIncl = json[0];
jsonExcl = json[1]; jsonExcl = json[1];
} }
...@@ -73,18 +73,21 @@ function wrapper(_epochSpan) { ...@@ -73,18 +73,21 @@ function wrapper(_epochSpan) {
if (err) if (err)
return cb(err); return cb(err);
allHolidays = tmUtils.andOp(allHolidays, [epochSpan]); var allHolidayIntervals = allHolidays.intervals;
allHolidayIntervals = tmUtils.andOp(allHolidayIntervals, [epochSpan]);
holidayIncl = tmUtils.andOp(holidayIncl, [epochSpan]); holidayIncl = tmUtils.andOp(holidayIncl, [epochSpan]);
resultIncl = tmUtils.orOp(resultIncl); resultIncl = tmUtils.orOp(resultIncl);
resultIncl = tmUtils.andNotOp(resultIncl, allHolidays); resultIncl = tmUtils.andNotOp(resultIncl, allHolidayIntervals);
resultIncl = tmUtils.orOp([resultIncl, holidayIncl]); resultIncl = tmUtils.orOp([resultIncl, holidayIncl]);
var result = resultIncl; var result = resultIncl;
if (jsonExcl) if (jsonExcl)
result = tmUtils.andNotOp(resultIncl, resultExcl); result = tmUtils.andNotOp(resultIncl, resultExcl);
cb(null, result); cb(null, {intervals: result,
holidays: allHolidays.days});
}); });
...@@ -159,9 +162,10 @@ function wrapper(_epochSpan) { ...@@ -159,9 +162,10 @@ function wrapper(_epochSpan) {
var cnt = endYear - startYear + 1; var cnt = endYear - startYear + 1;
var errRec = false; var errRec = false;
function _cb(err, result) { function _cb(err, result) {
if (errRec) return; if (errRec) return;
if (err){ if (err) {
errRec = true; errRec = true;
return cb(err); return cb(err);
} }
...@@ -173,7 +177,10 @@ function wrapper(_epochSpan) { ...@@ -173,7 +177,10 @@ function wrapper(_epochSpan) {
return tmUtils.singleDay(date); return tmUtils.singleDay(date);
}); });
tmUtils.sort(intervals); tmUtils.sort(intervals);
cb(null, intervals); cb(null, {
days: days,
intervals: intervals
});
} }
} }
...@@ -263,6 +270,7 @@ function wrapper(_epochSpan) { ...@@ -263,6 +270,7 @@ function wrapper(_epochSpan) {
} }
} }
} }
return { return {
getData: calculateOpeningHours, getData: calculateOpeningHours,
setEpocheSpan: setEpocheSpan setEpocheSpan: setEpocheSpan
......
...@@ -2,14 +2,16 @@ var moment = require('moment'); ...@@ -2,14 +2,16 @@ var moment = require('moment');
moment.lang("de"); moment.lang("de");
function createWeekView(data, now) { function createWeekView(dataObj, now) {
var data = dataObj.intervals;
var holidays = dataObj.holidays;
var noOfDays = 7; var noOfDays = 7;
var offset = 3; var offset = 3;
var startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate() - offset); var startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate() - offset);
var endDate = new Date(now.getFullYear(), now.getMonth(), now.getDate() + noOfDays - offset); var endDate = new Date(now.getFullYear(), now.getMonth(), now.getDate() + noOfDays - offset);
var oHours = transformData(data, startDate, endDate); var oHours = transformData(data, startDate, endDate);
var maxNumber = getMaxNoOfItemsPerDay(oHours); var maxNumber = getMaxNoOfItemsPerDay(oHours);
var tableWidth = 2 * maxNumber; var tableWidth = maxNumber;
var content = '<div class="weekview-container"><table class="weekview-table">'; var content = '<div class="weekview-container"><table class="weekview-table">';
content += '<tbody>'; content += '<tbody>';
...@@ -17,15 +19,24 @@ function createWeekView(data, now) { ...@@ -17,15 +19,24 @@ function createWeekView(data, now) {
for (var i = 0; i < noOfDays; i++) { for (var i = 0; i < noOfDays; i++) {
var day = oHours[i]; var day = oHours[i];
content += '<tr class="weekview-tr">'; content += '<tr class="weekview-tr">';
content += '<td class="weekview-td-first">' + formatDate(day.date) + '</td>'; var datString = formatDate(day.date);
var cls = '';
if (dayInHolidays(day.date, holidays)) {
cls += " weekview-holiday";
}
if (compareDate(day.date, now) == 0) {
cls += " weekview-today";
}
content += '<td class="weekview-td-first' + cls + '">' + datString[0] + '</td><td class="weekview-td-first' + cls + '">' + datString[1] + '</td>';
for (var j = 0; j < day.oHours.length; j++) { for (var j = 0; j < day.oHours.length; j++) {
var oHour = day.oHours[j]; var oHour = day.oHours[j];
content += '<td class="weekview-td weekview-filled">' + formatTime(oHour[0]) + '</td>'; content += '<td class="weekview-td weekview-filled' + cls + '">' + formatTime(oHour[0]) + "–" + formatTime(oHour[1]) + '</td>';
content += '<td class="weekview-td weekview-filled">' + formatTime(oHour[1]) + '</td>';
} }
for (var j = 2 * day.oHours.length; j < tableWidth; j++) { for (var j = day.oHours.length; j < tableWidth; j++) {
content += '<td class="weekview-td weekview-empty"></td>'; content += '<td class="weekview-td weekview-empty' + cls + '"></td>';
} }
content += '</tr>'; content += '</tr>';
} }
...@@ -35,7 +46,74 @@ function createWeekView(data, now) { ...@@ -35,7 +46,74 @@ function createWeekView(data, now) {
return content; return content;
} }
function createMonthView(data, now, monthOffset) { function createWeekViewVertical(dataObj, now) {
var data = dataObj.intervals;
var holidays = dataObj.holidays;
var noOfDays = 7;
var offset = 3;
var startDate = new Date(now.getFullYear(), now.getMonth(), now.getDate() - offset);
var endDate = new Date(now.getFullYear(), now.getMonth(), now.getDate() + noOfDays - offset);
var oHours = transformData(data, startDate, endDate);
var maxNumber = getMaxNoOfItemsPerDay(oHours);
var tableWidth = maxNumber;
var content = '<div class="weekviewV-container"><table class="weekviewV-table">';
content += '<tbody>';
var columns = [];
for (var i = 0; i < noOfDays; i++) {
var column = [];
columns.push(column);
var day = oHours[i];
var cls = '';
if (dayInHolidays(day.date, holidays)) {
cls += " weekview-holiday";
}
if (compareDate(day.date, now) == 0) {
cls += " weekview-today";
}
var datString = formatDate(day.date);
column.push('<td class="weekviewV-td-first' + cls + '">' + datString[0] + '</td>');
column.push('<td class="weekviewV-td-first' + cls + '">' + datString[1] + '</td>');
for (var j = 0; j < day.oHours.length; j++) {
var oHour = day.oHours[j];
column.push('<td class="weekviewV-td weekviewV-filled' + cls + '">' + formatTime(oHour[0]) + "–" + formatTime(oHour[1]) + '</td>');
}
for (var j = day.oHours.length; j < tableWidth; j++) {
column.push('<td class="weekviewV-td weekviewV-empty' + cls + '"></td>');
}
}
for (var j = 0; j < tableWidth + 2; j++) {
content += '<tr class="weekviewV-tr">';
for (var i = 0; i < noOfDays; i++) {
content += columns[i][j];
}
content += '</tr>';
}
content += '</tbody>';
content += '</table></div>';
return content;
}
function dayInHolidays(day, holidays) {
for (var i = 0; i < holidays.length; i++) {
if (compareDate(day, holidays[i]) == 0) {
return true;
}
}
return false;
}
function createMonthView(dataObj, now, monthOffset) {
var data = dataObj.intervals;
var holidays = dataObj.holidays;
var currentMonth = now.getMonth() + monthOffset; var currentMonth = now.getMonth() + monthOffset;
var startDate = new Date(now.getFullYear(), currentMonth, 1); var startDate = new Date(now.getFullYear(), currentMonth, 1);
var monthDate = new Date(startDate); var monthDate = new Date(startDate);
...@@ -65,14 +143,21 @@ function createMonthView(data, now, monthOffset) { ...@@ -65,14 +143,21 @@ function createMonthView(data, now, monthOffset) {
content += '<tr class="monthview-tr">'; content += '<tr class="monthview-tr">';
if (day.date.getMonth() == currentMonth) { if (day.date.getMonth() == currentMonth) {
var cls; var cls = "";
var tooltip; var tooltip;
if (dayInHolidays(day.date, holidays)) {
cls += " monthview-holiday"
}
if (compareDate(day.date, now) == 0) {
cls += " monthview-today";
}
if (day.oHours.length == 0) { if (day.oHours.length == 0) {
tooltip = ""; tooltip = "";
cls = " monthview-empty"; cls += " monthview-empty";
} }
else { else {
cls = " monthview-filled"; cls += " monthview-filled";
tooltip = []; tooltip = [];
for (var j = 0; j < day.oHours.length; j++) { for (var j = 0; j < day.oHours.length; j++) {
var e = day.oHours[j]; var e = day.oHours[j];
...@@ -96,19 +181,20 @@ function createMonthView(data, now, monthOffset) { ...@@ -96,19 +181,20 @@ function createMonthView(data, now, monthOffset) {
return content; return content;
} }
function create3MonthView(data, now) { function create3MonthView(dataObj, now) {
var content = '<div class="monthview-container">'; var content = '<div class="monthview-container">';
for (var i = 0; i < 3; i++) { for (var i = 0; i < 3; i++) {
content += createMonthView(data, now, i); content += createMonthView(dataObj, now, i);
} }
content += '</div>'; content += '</div>';
return content; return content;
} }
function getView(data, now) { function getView(dataObj, now) {
var content = '<div class="view-container">'; var content = '<div class="view-container">';
content += createWeekView(data, now); content += createWeekView(dataObj, now);
content += create3MonthView(data, now); content += createWeekViewVertical(dataObj, now);
content += create3MonthView(dataObj, now);
content += '</div>'; content += '</div>';
return content; return content;
} }
...@@ -123,14 +209,15 @@ function getMaxNoOfItemsPerDay(oHours) { ...@@ -123,14 +209,15 @@ function getMaxNoOfItemsPerDay(oHours) {
} }
function formatDate(date) { function formatDate(date) {
return moment(date).format("dd ll"); var mom = moment(date);
return [mom.format("dddd"), mom.format("ll") ];
} }
function formatTime(date) { function formatTime(date) {
var hours = date.getHours().toString(); var hours = date.getHours().toString();
var minutes = date.getMinutes().toString(); var minutes = date.getMinutes().toString();
if(hours.length < 2) hours = '0' + hours; if (hours.length < 2) hours = '0' + hours;
if(minutes.length < 2) minutes = '0' + minutes; if (minutes.length < 2) minutes = '0' + minutes;
return hours + ':' + minutes; return hours + ':' + minutes;
// return moment(date).format("HH:mm"); // return moment(date).format("HH:mm");
} }
...@@ -171,29 +258,33 @@ function compareDate(date1, date2) { ...@@ -171,29 +258,33 @@ function compareDate(date1, date2) {
} }
function getPropperEpochSpan(now) { function getPropperEpochSpan(now) {
var epochStart = new Date(now.getFullYear(), now.getMonth(), - 10); var epochStart = new Date(now.getFullYear(), now.getMonth(), -10);
var epochEnd = new Date(now.getFullYear(), now.getMonth() + 3, 1); var epochEnd = new Date(now.getFullYear(), now.getMonth() + 3, 1);
return [epochStart, epochEnd]; return [epochStart, epochEnd];
} }
function asString(data, now) { function asString(data, now) {
var mNow = moment(now); data = data.intervals;
if (data.length == 0) {
return ["Jetzt geöffnet", "nächter Öffnungstermin unbekannt"];
}
// var mNow = moment(now);
var open = false; var open = false;
var nowT = now.getTime(); var nowT = now.getTime();
var idx = 0; var idx = 0;
while(nowT >= data[idx][0].getTime() && idx < data.length) { while (nowT >= data[idx][0].getTime() && idx < data.length) {
if(data[idx][1].getTime() >= nowT) if (data[idx][1].getTime() >= nowT)
open = true; open = true;
idx++; idx++;
} }
if(open) { if (open) {
idx--; idx--;
return ["Jetzt geöffnet", "geöffnet bis " + moment(data[idx][1]).format("LT")]; return ["Jetzt geöffnet", "geöffnet bis " + moment(data[idx][1]).format("LT")];
} }
else { else {
var retStr = "Jetzt nicht geöffnet"; var retStr = "Jetzt nicht geöffnet";
if(idx == data.length) { if (idx == data.length) {
return [retStr, "nächter Öffnungstermin unbekannt"]; return [retStr, "nächter Öffnungstermin unbekannt"];
} }
else { else {
...@@ -205,6 +296,7 @@ function asString(data, now) { ...@@ -205,6 +296,7 @@ function asString(data, now) {
module.exports.asString = asString; module.exports.asString = asString;
module.exports.weekView = createWeekView; module.exports.weekView = createWeekView;
module.exports.weekViewV = createWeekViewVertical;
module.exports.monthView = create3MonthView; module.exports.monthView = create3MonthView;
module.exports.getView = getView; module.exports.getView = getView;
module.exports.getPropperEpochSpan = getPropperEpochSpan; module.exports.getPropperEpochSpan = getPropperEpochSpan;
\ No newline at end of file
var holidayMapping = require('./holidayMapping.json'); var holidayMapping = require('./holidayMapping.json');
var easterSunday = require('./easterSunday'); var easterSunday = require('./easterSunday');
var restRequest = require('./blndRelDbRequest'); var restRequest = require('./blndRelDbRequest');
var SimplQueue = require('./simplQueue');
var easterSundays = {}; var easterSundays = {};
var fixedHolidays = { var fixedHolidays = {
...@@ -186,4 +185,4 @@ function Holidays(year) { ...@@ -186,4 +185,4 @@ function Holidays(year) {
module.exports = Holidays; module.exports = Holidays;
var hds = new Holidays(2014); //var hds = new Holidays(2014);
...@@ -18,24 +18,27 @@ module.exports.getData = function (now, cb) { ...@@ -18,24 +18,27 @@ module.exports.getData = function (now, cb) {
// console.log(epocheSpan); // console.log(epocheSpan);
// dateArray.setEpocheSpan(epocheSpan); // dateArray.setEpocheSpan(epocheSpan);
connection.query('SELECT name, elements FROM cms_zoo_item WHERE type = "company" LIMIT 50', function (err, rows) { connection.query('SELECT name, elements FROM cms_zoo_item WHERE type in ("pos", "company") LIMIT 100', function (err, rows) {
console.log(rows.length);
var result = []; var result = [];
var cnt = 0; var cnt = 0;
var iters = rows.length; 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() { (function () {
var name = rows[i].name; var name = rows[i].name;
dateArray(epocheSpan).getData(obj, plz, function (err, data) { dateArray(epocheSpan).getData(obj, plz, function (err, dataObj) {
if(err) { if (err) {
console.log(name, err); console.log(name, err);
} }
else if (data.length > 0) { else if (dataObj) {
var data = dataObj.intervals;
cnt++; cnt++;
var view = dateView.getView(data, now); var view = dateView.getView(dataObj, now);
result.push('<div class="name">' + name + "</div> " + view); var asString = dateView.asString(dataObj, now);
result.push('<div class="name">' + name + "</div> " + asString + view);
} }
if (--iters == 0) { if (--iters == 0) {
console.log("Count: %d", cnt); console.log("Count: %d", cnt);
......
...@@ -15,6 +15,7 @@ router.get('/', function(req, res) { ...@@ -15,6 +15,7 @@ router.get('/', function(req, res) {
now = new Date(); now = new Date();
} }
console.log('bla');
var time0 = process.hrtime(); var time0 = process.hrtime();
db.getData(now, function(result) { db.getData(now, function(result) {
res.render('index', { body: result }); res.render('index', { body: result });
......
...@@ -15,6 +15,12 @@ ...@@ -15,6 +15,12 @@
.monthview-empty { .monthview-empty {
background-color: lightcoral; background-color: lightcoral;
} }
.monthview-today {
background-color: #5e70f0;
}
.monthview-holiday {
background-color: #ecf037;
}
.name { .name {
font-size: 20px; font-size: 20px;
} }
......
...@@ -3,7 +3,7 @@ var dateArray = require('../lib/dateArray'); ...@@ -3,7 +3,7 @@ var dateArray = require('../lib/dateArray');
var fs = require('fs'); var fs = require('fs');
var now = new Date(2014, 4, 1); var now = new Date(2014, 7, 13);
dateArray(dateView.getPropperEpochSpan(now)).getData(require('../mochaTests/testData/testHof.json'), 0, function(err, data) { dateArray(dateView.getPropperEpochSpan(now)).getData(require('../mochaTests/testData/testHof.json'), 0, function(err, data) {
......
...@@ -44,4 +44,6 @@ openingHoursView(json, now, regionalCode, lang) ...@@ -44,4 +44,6 @@ openingHoursView(json, now, regionalCode, lang)
openNow auch nach absprache, nur mit json incl openNow auch nach absprache, nur mit json incl
evtl ical export evtl ical export
\ No newline at end of file
!!!!holiday klasse, falls feiertag, klasse fuer aktuellen tag
\ 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