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