Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
opening-hours
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
regionalkauf
opening-hours
Commits
1c0daf67
Commit
1c0daf67
authored
Jul 29, 2014
by
Johannes Bill
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
little bit config refactoring, added weekview vertical
parent
8ead1f9e
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
189 additions
and
72 deletions
+189
-72
config.json
config.json
+8
-8
index.js
index.js
+25
-17
blndRelDbRequest.js
lib/blndRelDbRequest.js
+0
-2
dateArray.js
lib/dateArray.js
+17
-9
dateView.js
lib/dateView.js
+117
-25
holidays.js
lib/holidays.js
+1
-2
dataBaseQuery.js
serverTest/dataBaseQuery.js
+10
-7
index.js
serverTest/routes/index.js
+1
-0
index.ejs
serverTest/views/index.ejs
+6
-0
dateViewTest.js
test/dateViewTest.js
+1
-1
todo
todo
+3
-1
No files found.
config.json
View file @
1c0daf67
{
"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
index.js
View file @
1c0daf67
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
)
{
var
dateArray
=
require
(
'./lib/dateArray'
);
var
dateView
=
require
(
'./lib/dateView'
);
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
();
});
cb
(
null
,
fResult
);
})
}
}
module
.
exports
.
getOHIndex
=
getOHIndex
;
module
.
exports
.
dataArray
=
dateArray
;
module
.
exports
.
dateView
=
dateView
;
return
{
getOHIndex
:
getOHIndex
,
dateArray
:
dateArray
,
dateView
:
dateView
}
};
lib/blndRelDbRequest.js
View file @
1c0daf67
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
)
{
...
...
lib/dateArray.js
View file @
1c0daf67
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
,
allHoliday
Interval
s
);
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
...
...
lib/dateView.js
View file @
1c0daf67
...
...
@@ -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,79 @@ 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'
+
cls
+
'">'
+
formatTime
(
oHour
[
0
])
+
"–"
+
formatTime
(
oHour
[
1
])
+
'</td>'
;
}
for
(
var
j
=
day
.
oHours
.
length
;
j
<
tableWidth
;
j
++
)
{
content
+=
'<td class="weekview-td weekview-empty'
+
cls
+
'"></td>'
;
}
content
+=
'</tr>'
;
}
content
+=
'</tbody>'
;
content
+=
'</table></div>'
;
return
content
;
}
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
];
content
+=
'<td class="weekview-td weekview-filled">'
+
formatTime
(
oHour
[
0
])
+
'</td>'
;
content
+=
'<td class="weekview-td weekview-filled">'
+
formatTime
(
oHour
[
1
])
+
'</td>'
;
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
=
2
*
day
.
oHours
.
length
;
j
<
tableWidth
;
j
++
)
{
content
+=
'<td class="weekview-td weekview-empty"></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>'
;
}
...
...
@@ -35,7 +101,19 @@ function createWeekView(data, now) {
return
content
;
}
function
createMonthView
(
data
,
now
,
monthOffset
)
{
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
(
data
Obj
,
now
)
{
var
content
=
'<div class="monthview-container">'
;
for
(
var
i
=
0
;
i
<
3
;
i
++
)
{
content
+=
createMonthView
(
data
,
now
,
i
);
content
+=
createMonthView
(
data
Obj
,
now
,
i
);
}
content
+=
'</div>'
;
return
content
;
}
function
getView
(
data
,
now
)
{
function
getView
(
data
Obj
,
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
lib/holidays.js
View file @
1c0daf67
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);
serverTest/dataBaseQuery.js
View file @
1c0daf67
...
...
@@ -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
,
data
Obj
)
{
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
);
...
...
serverTest/routes/index.js
View file @
1c0daf67
...
...
@@ -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
});
...
...
serverTest/views/index.ejs
View file @
1c0daf67
...
...
@@ -15,6 +15,12 @@
.monthview-empty
{
background-color
:
lightcoral
;
}
.monthview-today
{
background-color
:
#5e70f0
;
}
.monthview-holiday
{
background-color
:
#ecf037
;
}
.name
{
font-size
:
20px
;
}
...
...
test/dateViewTest.js
View file @
1c0daf67
...
...
@@ -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
)
{
...
...
todo
View file @
1c0daf67
...
...
@@ -45,3 +45,5 @@ openingHoursView(json, now, regionalCode, lang)
openNow auch nach absprache, nur mit json incl
evtl ical export
!!!!holiday klasse, falls feiertag, klasse fuer aktuellen tag
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment