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

little bit config refactoring, added weekview vertical

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