Commit efd7ed23 authored by Johannes Bill's avatar Johannes Bill

added days bucketing

parent 05b35c95
var moment = require('moment');
function createWeekView(data, now) {
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 = getDataFromTo(data, startDate, endDate);
var maxNumber = getMaxNoOfItemsPerDay(oHours);
var tableWidth = 2 * maxNumber;
var content = '<table class="weekview-table>"';
content += '<tbody>';
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>';
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>';
}
for (var j = 2 * day.oHours.length; j < tableWidth; j++) {
content += '<td class="weekview-td weekview-empty"></td>';
}
content += '</tr>';
}
content += '</tbody>';
content += '</table>';
return content;
}
function createMonthView(data, now, monthOffset) {
var currentMonth = now.getMonth() + monthOffset;
var startDate = new Date(now.getFullYear(), currentMonth, 1);
var monthDate = new Date(startDate);
startDate.setDate(2 - startDate.getDay());
var endDate = new Date(now.getFullYear(), currentMonth + 1, 1);
if(endDate.getDay() != 1)
endDate.setDate(9 - endDate.getDay());
var oHours = getDataFromTo(data, startDate, endDate);
var content = '<div class="monthview-maindiv"><table class="monthview-table"><thead class="monthview-thead">';
content += '<div class="monthview-month">' + moment(monthDate).format("MMMM") + '<div>';
for(var i = 0; i < 7; i++) {
content += '<th class="monthview-th">' + moment(oHours[i].date).format("dd") + '</th>';
}
content += '</thead>';
for (var i = 0; i < oHours.length; i++) {
var day = oHours[i];
if(i % 7 == 0)
content += '<tr class="monthview-tr">';
if(day.date.getMonth() == currentMonth) {
var cls;
var tooltip;
if(day.oHours.length == 0) {
tooltip = "";
cls = " monthview-empty";
}
else {
cls = " monthview-filled";
tooltip = [];
for (var j = 0; j < day.oHours.length; j++) {
var e = day.oHours[j];
tooltip.push(formatTime(e[0]) + " - " + formatTime(e[1]));
}
tooltip = tooltip.join("<br>");
tooltip = ' data-uk-tooltip title="' + tooltip +'"';
}
content += '<td class="monthview-td' + cls +'"'+ tooltip+'>' + moment(day.date).format("D") + '</td>';
}
else {
content += '<td class="monthview-td monthview-exclude"></td>';
}
if(i % 7 == 6)
content += '</tr>';
}
content += '</table></div>';
return content;
}
function create3MonthView(data, now) {
var content = '<div class="monthview-container">';
for(var i = 0; i < 3; i++) {
content += createMonthView(data, now, i);
}
content += '</div>';
return content;
}
function getMaxNoOfItemsPerDay(oHours) {
var max = 0;
for (var i = 0; i < oHours.length; i++) {
if (oHours[i].oHours.length > max)
max = oHours[i].oHours.length
}
return max;
}
function formatDate(date) {
return moment(date).format("dd L");
}
function formatTime(date) {
return moment(date).format("HH:mm");
}
function getDataFromTo(data, startDate, endDate) {
var dataIdx = 0;
var result = [];
var curDate = new Date(startDate);
while (compareDate(curDate, endDate) < 0) {
var oHours = [];
while (dataIdx < data.length) {
var comp = compareDate(data[dataIdx][0], curDate);
if (comp < 0)
dataIdx++;
else if (comp == 0) {
oHours.push(data[dataIdx]);
dataIdx++;
}
else break;
}
result.push({
date: new Date(curDate),
oHours: oHours
});
curDate.setDate(curDate.getDate() + 1);
}
return result;
}
function compareDate(date1, date2) {
var diff = date1.getFullYear() - date2.getFullYear();
if (diff != 0) return diff;
diff = date1.getMonth() - date2.getMonth();
if (diff != 0) return diff;
diff = date1.getDate() - date2.getDate();
return diff;
}
function parseJSON(json) {
var result = JSON.parse(json);
for (var i = 0; i < result.length; i++) {
var elem = result[i];
elem[0] = new Date(elem[0]);
elem[1] = new Date(elem[1]);
}
return result;
}
moment.lang("de");
var jsonInput = require('./jsonInput');
var data = jsonInput.getData(require('./testData/testHof.json'));
console.log(data);
console.log(createWeekView(data, new Date()));
\ No newline at end of file
......@@ -10,7 +10,7 @@ var _epochStart = new Date();
_epochStart = new Date(_epochStart.getFullYear(), _epochStart.getMonth(), _epochStart.getDate());
//var _epochStart = new Date(2014, 0, 0);
_epochStart.setDate(_epochStart.getDate() - 30);
var _epochEnd = new Date(_epochStart.getTime() + 100 * 24 * 3600000);
var _epochEnd = new Date(_epochStart.getTime() + 130 * 24 * 3600000);
//var _epochEnd = new Date(2015, 0, 0);
var epochSpan = [_epochStart, _epochEnd];
......@@ -188,62 +188,8 @@ function getOpeningHoursRepeatable(data) {
}
}
//TODO falls intervall ueber mitternacht, muss davor getrennt werden
function bucketToDays(data) {
var result = [];
for (var i = 0; i < data.length; i++) {
var e = data[i];
if (current && current.date == e[0].toDateString()) {
current.time.push([e[0].toTimeString(), e[1].toTimeString()]);
}
else {
current = {
date: e[0].toDateString(),
time: [
[e[0].toTimeString(), e[1].toTimeString()]
]
};
result.push(current);
}
}
return result;
}
function daysBucket(data) {
var result = [];
var current;
for (var i = 0; i < data.length; i++) {
var e = data[i];
if(current && compareDay(current[0][0], e[0])) {
current.push([e[0], e[1]]);
}
else {
current = [[e[0], e[1]]];
result.push(current);
}
}
return result;
}
function compareDay(date1, date2) {
if(date1.getFullYear() != date2.getFullYear())
return false;
if(date1.getMonth() != date2.getMonth())
return false;
return date1.getDate() == date2.getDate();
}
module.exports.calculate = function(json) {
var res = calculateOpeningHours(json);
return daysBucket(res);
module.exports.getData = function(json) {
return calculateOpeningHours(json);
};
var data1 = calculateOpeningHours(require('./testData/testHof.json'));
//data1[0][0] = 0;
//console.log(data1);
var bData = daysBucket(data1);
console.log(JSON.stringify(bData));
tmUtils.validate(data1);
\ No newline at end of file
var expect = require("chai").expect;
describe("bla" ,function() {
describe("muh", function() {
it("should maeh", function() {
var date1 = new Date();
var date2 = new Date(date1.getTime());
console.log(date1);
console.log(date2);
console.log(date1 < date2);
expect(date1.getTime()).to.equal(date2.getTime());
})
})
});
\ No newline at end of file
......@@ -2,7 +2,9 @@
"name": "OpeningHours",
"version": "0.0.0",
"main": "holidays.js",
"dependencies": {},
"dependencies": {
"moment": "^2.7.0"
},
"devDependencies": {
"chai": "^1.9.1",
"node-mysql": "^0.3.7"
......
var expect = require("chai").expect;
describe("bla" ,function() {
describe("muh", function() {
it("should maeh", function() {
var date1 = new Date();
var date2 = new Date(date1.getTime());
console.log(date1);
console.log(date2);
console.log(date1 < date2);
expect(date1.getTime()).to.equal(date2.getTime());
})
})
});
\ No newline at end of file
......@@ -90,7 +90,7 @@
"0": "default"
},
"dayoption": {
"0": "8"
"0": "9"
},
"repeatoption": {
"0": ""
......@@ -194,6 +194,24 @@
"opening_day_to": "",
"opening_from": "10:00",
"opening_to": "12:30"
},
"2": {
"option": {
"0": "repeatable"
},
"dayoption": {
"0": "3"
},
"repeatoption": {
"0": "2"
},
"holidayoption": {
"0": ""
},
"opening_day_from": "",
"opening_day_to": "",
"opening_from": "",
"opening_to": ""
}
},
"7ac7d682-2862-443b-83bd-8a3cf837ad8e": {
......
feiertage defaultmaessig abziehen ausser feiertage sind in der ausschlussliste
verbindung feiertag - region
ics import - regeln extrahieren
was passiert bei der zeitumstellung?
\ No newline at end of file
was passiert bei der zeitumstellung?
falls oeffnungszeit z.b. von 21:00 bis 4:00 muss bei 0:00 getrennt werden
Funktionen:
openNow(json, now, gemeindezeugs, lang, asString)
asString=1
Falls geoffnet:
<WochenTag>, jetzt bis <UhrZeit> geoeffnet.
Falls nicht geoffnet:
Am <WochenTag> nicht geoffnet. Wieder geoeffnet am <WochendTag, Datum> ab <UhrZeit>.
asString=0
{
open: true|false,
date: bis|ab
}
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