diff --git a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/WindowsDataCenter.csproj b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/WindowsDataCenter.csproj
index 8a64e5c..b82810b 100644
--- a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/WindowsDataCenter.csproj
+++ b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/WindowsDataCenter.csproj
@@ -225,4 +225,4 @@
-->
-
\ No newline at end of file
+
diff --git a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/WindowsDataCenter.csproj.user b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/WindowsDataCenter.csproj.user
index 5283ef1..ca1d04b 100644
--- a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/WindowsDataCenter.csproj.user
+++ b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/WindowsDataCenter.csproj.user
@@ -1,6 +1,6 @@
- ShowAllFiles
+ ProjectFiles
\ No newline at end of file
diff --git a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/packages.config b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/packages.config
index 847a32e..064e162 100644
--- a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/packages.config
+++ b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/packages.config
@@ -17,4 +17,4 @@
-
\ No newline at end of file
+
diff --git a/DataCenter_Windows/WindowsDataCenter/WindowsDataServiceHost/WindowsDataServiceHost.csproj b/DataCenter_Windows/WindowsDataCenter/WindowsDataServiceHost/WindowsDataServiceHost.csproj
index 726578d..25b977a 100644
--- a/DataCenter_Windows/WindowsDataCenter/WindowsDataServiceHost/WindowsDataServiceHost.csproj
+++ b/DataCenter_Windows/WindowsDataCenter/WindowsDataServiceHost/WindowsDataServiceHost.csproj
@@ -33,13 +33,41 @@
4
+
+ ..\packages\Microsoft.Owin.3.0.1\lib\net45\Microsoft.Owin.dll
+ True
+
..\packages\Microsoft.Owin.Host.HttpListener.3.0.1\lib\net45\Microsoft.Owin.Host.HttpListener.dll
True
+
+ ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll
+ True
+
+
+ ..\packages\Owin.1.0\lib\net40\Owin.dll
+ True
+
+
+ ..\packages\RazorEngine.3.7.2\lib\net45\RazorEngine.dll
+ True
+
+
+ ..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll
+ True
+
+
+ ..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll
+ True
+
+
+ ..\packages\Microsoft.AspNet.Razor.3.0.0\lib\net45\System.Web.Razor.dll
+ True
+
diff --git a/DataCenter_Windows/WindowsDataCenter/WindowsDataServiceHost/packages.config b/DataCenter_Windows/WindowsDataCenter/WindowsDataServiceHost/packages.config
index 90449b0..b50cb7b 100644
--- a/DataCenter_Windows/WindowsDataCenter/WindowsDataServiceHost/packages.config
+++ b/DataCenter_Windows/WindowsDataCenter/WindowsDataServiceHost/packages.config
@@ -3,5 +3,6 @@
+
\ No newline at end of file
diff --git a/TestData/generate.js b/TestData/generate.js
index c7f703a..e41a16c 100644
--- a/TestData/generate.js
+++ b/TestData/generate.js
@@ -1,16 +1,28 @@
module.exports = function(){
- var fakeTimeDataCount = 4000, maxUserCount = 120;
+ var fakeTimeDataCount = 4000, maxUserCount = 120, unassignedCardCount = 4, maxValidCardCount = 150;
var faker = require("faker");
var _ = require("lodash");
var directions = ["in", "out"];
+ var validCards = _.times(maxValidCardCount, function(n){
+ return{
+ id:n,
+ Id:n,
+ UserId_FK: faker.random.number(maxUserCount),
+ IsSelected: true,
+ CardUId: faker.random.uuid()
+ };
+ });
var usersData = _.times(maxUserCount, function (n)
{
return {
- id: n,
- //timestamp: faker.date.past(),
- userId: n,
- firstName: faker.name.firstName(),
- lastName: faker.name.lastName()
+ id: n, //needed for the /users/id endpoint
+ Id: n,
+ UserId: n,
+ FirstName: faker.name.firstName(),
+ LastName: faker.name.lastName(),
+ HoursPerWeek: 37.0,
+ AssociatedCardCount: _.filter(validCards, {'UserId_FK': n}).length,
+ AssociatedCards: _.filter(validCards, {'UserId_FK': n})
}
}
);
@@ -18,22 +30,38 @@ module.exports = function(){
{
return {
id: n,
- userId: faker.random.number(maxUserCount),
- timestamp: faker.date.past(),
- direction: directions[faker.random.number(1)]
+ Id: n,
+ UserId: faker.random.number(maxUserCount),
+ Timestamp: faker.date.past(),
+ Direction: directions[faker.random.number(1)]
+ }
}
- }
- );
- var userDataObject = {users: _.orderBy(usersData, ["lastName", "firstName"],["asc", "asc"])};
+ );
+ //var userDataObject = {users: _.orderBy(usersData, ["lastName", "firstName"],["asc", "asc"])};
+ var unassignedTestCards = _.times(unassignedCardCount, function(n)
+ {
+ return {
+ id: n,
+ Id: n,
+ UserId: -1,
+ IsSelected: false, //needed for knockout checked binding.
+ CardUId: faker.random.uuid()
+ }
+ });
return {
- userSwipeData: _.orderBy(userSwipeDataPoints, ["id"], ["asc"]),
+ timelogs: _.orderBy(userSwipeDataPoints, ["id"], ["asc"]),
//users: _.orderBy(data, ["userId", "asc"]),
users: _.orderBy(usersData, ["lastName", "firstName"],["asc", "asc"]),
//weather: _.orderBy(data, ["timestamp"],["asc"]),
stats: _.countBy(userSwipeDataPoints, "userId"),
+ timelogtest: {
+ Logs: _.orderBy(userSwipeDataPoints, "Timestamp", "asc")
+ },
userstest: {
- users: _.orderBy(usersData, ["lastName", "firstName"],["asc", "asc"])
- }
+ UserCount: maxUserCount,
+ Users: _.orderBy(usersData, ["lastName", "firstName"],["asc", "asc"])
+ },
+ unassignedCards: { data: unassignedTestCards}
}
}
/*
diff --git a/UI/DataFormats/Time log viewer/timelogdata format.js b/UI/DataFormats/Time log viewer/timelogdata format.js
new file mode 100644
index 0000000..ee7f556
--- /dev/null
+++ b/UI/DataFormats/Time log viewer/timelogdata format.js
@@ -0,0 +1,75 @@
+//so the user gets this data from /timelogs?userId=x
+//however, given the data below could be over many years and therefore, thousands of data points.. some consideration should be given for reduced format.
+// consideration should be to have a calendarWeek argument, i.e.: /timelogs?userId=x&calendarWeek=y.
+// If no calendarWeek argument is provided, then it should default to the current calendarweek.
+{
+ availableYears: [2017],
+ data: [
+ 2017: [ //year of the logs collection
+ 1:[ //calendar week of year.
+ {
+ LogId: n,
+ UserId: faker.random.number(maxUserCount),
+ Timestamp: faker.date.past(),
+ Direction: directions[faker.random.number(1)]
+ },
+ {
+ LogId: n,
+ UserId: faker.random.number(maxUserCount),
+ Timestamp: faker.date.past(),
+ Direction: directions[faker.random.number(1)]
+ },
+ {
+ LogId: n,
+ UserId: faker.random.number(maxUserCount),
+ Timestamp: faker.date.past(),
+ Direction: directions[faker.random.number(1)]
+ },
+ {
+ LogId: n,
+ UserId: faker.random.number(maxUserCount),
+ Timestamp: faker.date.past(),
+ Direction: directions[faker.random.number(1)]
+ },
+ {
+ LogId: n,
+ UserId: faker.random.number(maxUserCount),
+ Timestamp: faker.date.past(),
+ Direction: directions[faker.random.number(1)]
+ }
+ ],
+ 2:[
+ {
+ LogId: n,
+ UserId: faker.random.number(maxUserCount),
+ Timestamp: faker.date.past(),
+ Direction: directions[faker.random.number(1)]
+ },
+ {
+ LogId: n,
+ UserId: faker.random.number(maxUserCount),
+ Timestamp: faker.date.past(),
+ Direction: directions[faker.random.number(1)]
+ },
+ {
+ LogId: n,
+ UserId: faker.random.number(maxUserCount),
+ Timestamp: faker.date.past(),
+ Direction: directions[faker.random.number(1)]
+ },
+ {
+ LogId: n,
+ UserId: faker.random.number(maxUserCount),
+ Timestamp: faker.date.past(),
+ Direction: directions[faker.random.number(1)]
+ },
+ {
+ LogId: n,
+ UserId: faker.random.number(maxUserCount),
+ Timestamp: faker.date.past(),
+ Direction: directions[faker.random.number(1)]
+ }
+ ]
+ ],
+ ]
+}
\ No newline at end of file
diff --git a/UI/ViewTimeTool.png b/UI/ViewTimeTool.png
new file mode 100644
index 0000000..3902ffb
Binary files /dev/null and b/UI/ViewTimeTool.png differ