diff --git a/DataCenter_Windows/WindowsDataCenter/Interfaces/IRepository.cs b/DataCenter_Windows/WindowsDataCenter/Interfaces/IRepository.cs index 804bb04..3551b49 100644 --- a/DataCenter_Windows/WindowsDataCenter/Interfaces/IRepository.cs +++ b/DataCenter_Windows/WindowsDataCenter/Interfaces/IRepository.cs @@ -12,7 +12,7 @@ namespace Interfaces /// Returns with full list of users, /// plus a total user count. Pagination options are supported. /// - UserList GetUsers(int pageNumber = -1, int pageSize = -1, int groupId = -1); + UserList GetUsers(int pageNumber = -1, int pageSize = -1, int groupId = -1, SortOptions sort = SortOptions.None); /// /// Search the user list for the following string /// diff --git a/DataCenter_Windows/WindowsDataCenter/Interfaces/Interfaces.csproj b/DataCenter_Windows/WindowsDataCenter/Interfaces/Interfaces.csproj index e3b58bc..23a1f0c 100644 --- a/DataCenter_Windows/WindowsDataCenter/Interfaces/Interfaces.csproj +++ b/DataCenter_Windows/WindowsDataCenter/Interfaces/Interfaces.csproj @@ -72,6 +72,7 @@ + diff --git a/DataCenter_Windows/WindowsDataCenter/Interfaces/SortOptions.cs b/DataCenter_Windows/WindowsDataCenter/Interfaces/SortOptions.cs new file mode 100644 index 0000000..240ae66 --- /dev/null +++ b/DataCenter_Windows/WindowsDataCenter/Interfaces/SortOptions.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Interfaces +{ + public enum SortOptions + { + None, + FirstNameAscending, + FirstNameDescending, + LastNameAscending, + LastNameDescending, + } +} diff --git a/DataCenter_Windows/WindowsDataCenter/Interfaces/UserList.cs b/DataCenter_Windows/WindowsDataCenter/Interfaces/UserList.cs index 0cb7171..916e1b0 100644 --- a/DataCenter_Windows/WindowsDataCenter/Interfaces/UserList.cs +++ b/DataCenter_Windows/WindowsDataCenter/Interfaces/UserList.cs @@ -1,30 +1,33 @@ -using System.Collections.Generic; - -namespace Interfaces -{ - public class UserList - { - public UserList() - { - Users = new List(); - PageSize = 10; - } - public string Query { get; set; } - public int UserCount { get { return Users.Count; } } - public int TotalUserCount { get; set; } - public List Users { get; set; } - - public int PageCount - { - get - { - if (TotalUserCount < PageSize) - return 1; - return (TotalUserCount / PageSize); - } - } - public Group GroupFilter { get; set; } - public int PageSize { get; set; } - public int PageNumber { get; set; } - } +using System; +using System.Collections.Generic; + +namespace Interfaces +{ + public class UserList + { + public UserList() + { + Users = new List(); + PageSize = 10; + } + public string Query { get; set; } + public int UserCount { get { return Users.Count; } } + public int TotalUserCount { get; set; } + public List Users { get; set; } + + public SortOptions SelectedSortOption { get; set; } + + public int PageCount + { + get + { + if (TotalUserCount < PageSize) + return 1; + return (int)Math.Ceiling(Convert.ToDouble(TotalUserCount) / Convert.ToDouble(PageSize)); + } + } + public Group GroupFilter { get; set; } + public int PageSize { get; set; } + public int PageNumber { get; set; } + } } \ No newline at end of file diff --git a/DataCenter_Windows/WindowsDataCenter/SQLiteRepository/SQLiteProcedures.cs b/DataCenter_Windows/WindowsDataCenter/SQLiteRepository/SQLiteProcedures.cs index b7c9754..db5d8fb 100644 --- a/DataCenter_Windows/WindowsDataCenter/SQLiteRepository/SQLiteProcedures.cs +++ b/DataCenter_Windows/WindowsDataCenter/SQLiteRepository/SQLiteProcedures.cs @@ -16,20 +16,18 @@ namespace SQLiteRepository nameof(TimeLogDb.CalendarWeek) + "=? and " + nameof(TimeLogDb.Year) + "=?)"; public const string GET_ALL_USERS = - "select * from " + nameof(UserIdentity) + " ut " + "select * from " + nameof(UserIdentity) + " ut " + "where " + "EXISTS( select " + nameof(GroupDb.GroupId) - + " from " + nameof(GroupDb) - + " where " + nameof(GroupDb.GroupName) + " = 'Archived') AND " - + "NOT EXISTS( select * from " + nameof(UserGroupJoinDb) + " ugp where " - + nameof(UserGroupJoinDb.UserId_FK) + " = ut.Id" - + " and " + nameof(UserGroupJoinDb.GroupId_FK) + " = ( " - + "select " + nameof(GroupDb.GroupId) - + " from " + nameof(GroupDb) - + " where " + nameof(GroupDb.GroupName) + " = 'Archived') )" - + "order by " - + nameof(UserIdentity.LastName) + " collate nocase, " - + nameof(UserIdentity.FirstName) + " collate nocase"; + + " from " + nameof(GroupDb) + + " where " + nameof(GroupDb.GroupName) + " = 'Archived') AND " + + "NOT EXISTS( select * from " + nameof(UserGroupJoinDb) + " ugp where " + + nameof(UserGroupJoinDb.UserId_FK) + " = ut.Id" + + " and " + nameof(UserGroupJoinDb.GroupId_FK) + " = ( " + + "select " + nameof(GroupDb.GroupId) + + " from " + nameof(GroupDb) + + " where " + nameof(GroupDb.GroupName) + " = 'Archived') )" + + "order by ? collate nocase ?, ? collate nocase ?"; public const string GET_ALL_USERS_PAGINATE = "select * from " + nameof(UserIdentity) + " ut " @@ -43,18 +41,18 @@ namespace SQLiteRepository + "select " + nameof(GroupDb.GroupId) + " from " + nameof(GroupDb) + " where " + nameof(GroupDb.GroupName) + " = 'Archived') )" - + "order by " - + nameof(UserIdentity.LastName) + " collate nocase, " - + nameof(UserIdentity.FirstName) + " collate nocase " - + "limit ? offset ?"; + + " order by " + + "{0} collate nocase {1}, " + + "{2} collate nocase {3} " + + "limit {4} offset {5}"; public const string GET_ALL_USERS_BY_GROUP = "select u." + nameof(UserIdentity.Id) + ", u." + nameof(UserIdentity.FirstName) + ", u." + nameof(UserIdentity.LastName) + ", u." + nameof(UserIdentity.HoursPerWeek) + ", u." + nameof(UserIdentity.IsContractor) + " from " + nameof(UserIdentity) + " u left join " + nameof(UserGroupJoinDb) + " ugj on ugj." + nameof(UserGroupJoinDb.UserId_FK) + " = u." + - nameof(UserIdentity.Id) + " where ugj." + nameof(UserGroupJoinDb.GroupId_FK) + "=? order by u." + - nameof(UserIdentity.LastName) + " collate nocase, u." + nameof(UserIdentity.LastName) + " collate nocase"; + nameof(UserIdentity.Id) + " where ugj." + nameof(UserGroupJoinDb.GroupId_FK) + "= {0} " + + "order by u.{1} collate nocase {2}, u.{3} collate nocase {4}"; public const string GET_USER_BY_ID = "select * from " + nameof(UserIdentity) + " where " + nameof(UserIdentity.Id) + "=?"; @@ -96,7 +94,18 @@ namespace SQLiteRepository nameof(TimeLogDb.SwipeEventDateTime) + " desc LIMIT 1"; public const string GET_TOTAL_USER_COUNT = - "select Max(" + nameof(UserIdentity.Id) + ") from " + nameof(UserIdentity); + "select count(1) from " + nameof(UserIdentity) + " ut " + + "where " + + "EXISTS( select " + nameof(GroupDb.GroupId) + + " from " + nameof(GroupDb) + + " where " + nameof(GroupDb.GroupName) + " = 'Archived') " + + "AND NOT EXISTS( select * from " + nameof(UserGroupJoinDb) + " ugp where " + + nameof(UserGroupJoinDb.UserId_FK) + " = ut.Id" + + " and " + nameof(UserGroupJoinDb.GroupId_FK) + " = ( " + + "select " + nameof(GroupDb.GroupId) + + " from " + nameof(GroupDb) + + " where " + nameof(GroupDb.GroupName) + " = 'Archived') )"; + //"select Max(" + nameof(UserIdentity.Id) + ") from " + nameof(UserIdentity); public const string GET_USER_CONTRACTED_HOURS = "select " + nameof(UserIdentity.HoursPerWeek) + " From UserIdentity where " + nameof(UserIdentity.Id) + "=?"; diff --git a/DataCenter_Windows/WindowsDataCenter/SQLiteRepository/SQLiteRepository.cs b/DataCenter_Windows/WindowsDataCenter/SQLiteRepository/SQLiteRepository.cs index 44941ca..d977d37 100644 --- a/DataCenter_Windows/WindowsDataCenter/SQLiteRepository/SQLiteRepository.cs +++ b/DataCenter_Windows/WindowsDataCenter/SQLiteRepository/SQLiteRepository.cs @@ -45,10 +45,10 @@ namespace SQLiteRepository CheckForDbUpgrade(); } - public UserList GetUsers(int pageNumber = -1, int pageSize = -1, int groupId = -1) + public UserList GetUsers(int pageNumber = -1, int pageSize = -1, int groupId = -1, SortOptions sort = SortOptions.None) { var ret = new UserList(); - List users = GetUserList(groupId, pageSize, pageNumber); + List users = GetUserList(groupId, pageSize, pageNumber, sort); var userCount = GetUserCount(); @@ -115,7 +115,7 @@ namespace SQLiteRepository ret.Users.Add(userObj); } ret.PageSize = 20; - ret.PageNumber = (int)Math.Ceiling((double)ret.Users.Count/(double)ret.PageSize); + ret.PageNumber = (int)Math.Ceiling((double)ret.Users.Count / (double)ret.PageSize); return ret; } @@ -249,7 +249,7 @@ namespace SQLiteRepository _connection.Query(SQLiteProcedures.GET_CARDS_BY_USER_ID, user.UserId) .Select(IdentifierConverter.ConvertToIdentifierDto).ToList(); var cardsToRemove = currentCards.Exclude(user.AssociatedIdentifiers, x => x.Id).Select(x => x.Id).ToList(); - + #region Update/Create User int userId; @@ -290,7 +290,7 @@ namespace SQLiteRepository #region Update Card/Unique Id entries/associations //make sure all identifiers are associated to the right user - UpdateIdentifierUserId(existingCards.Select(x=>x.Id).ToList(), userId); + UpdateIdentifierUserId(existingCards.Select(x => x.Id).ToList(), userId); //make sure to remove all identifiers that have been deselected in edit are removed from user UpdateIdentifierUserId(cardsToRemove, Constants.UNASSIGNED_CARD_USER_ID); @@ -317,7 +317,7 @@ namespace SQLiteRepository else { _logger.Debug("Using supplied log time: {0}", logTime.ToString("o")); - } + } #endregion var ret = new LogEventResponse(); @@ -336,7 +336,7 @@ namespace SQLiteRepository UpdateIdentifierLastUsed(DateTimeOffset.UtcNow, ident.Id); logId = -1; //dont try to log any timelogs against this card, as it is unassigned to a user. - ret.ProcessResponse=OperationResponse.SUCCESS; + ret.ProcessResponse = OperationResponse.SUCCESS; ret.Direction = LogDirection.UNKNOWN; return ret; } @@ -373,11 +373,11 @@ namespace SQLiteRepository #endregion #region Get the current time (for swiping). and calendar week/year to help recall the data. - + var calendarWeek = GetIso8601CalendarWeek(logTime); var year = logTime.Year; #endregion - + var timeLog = new TimeLogDb { SwipeEventDateTime = DateTime.UtcNow, @@ -397,7 +397,7 @@ namespace SQLiteRepository ret.ProcessResponse = OperationResponse.SUCCESS; return ret; } - + public OperationResponse CreateGroup(Group group, out int groupId) { var query = _connection.Query(SQLiteProcedures.GET_GROUP_BY_NAME, group.Name); @@ -485,8 +485,8 @@ namespace SQLiteRepository public OperationResponse CreateLog(TimeLog log) { log.CalendarWeek = GetIso8601CalendarWeek(log.EventTime.UtcDateTime); - log.Year= log.EventTime.Year; - + log.Year = log.EventTime.Year; + var dbLog = TimeLogConverter.ConvertFromTimeLogDto(log); dbLog.IdentifierId = ConvertSourceToIdentifierId(log.Source); @@ -497,13 +497,13 @@ namespace SQLiteRepository _connection.Insert(dbLog); return OperationResponse.CREATED; } - + public OperationResponse UpdateLog(TimeLog log) { var query = _connection.Query( SQLiteProcedures.GET_TIMELOG_ENTRY, log.Id); - if(!query.Any()) + if (!query.Any()) return OperationResponse.FAILED; if (log.CalendarWeek > 52 || log.CalendarWeek < 1) @@ -516,8 +516,8 @@ namespace SQLiteRepository } _connection.ExecuteScalar( SQLiteProcedures.UPDATE_TIMELOG_ENTRY, - log.UserId, (LogDirectionDb) (int) log.Direction, log.EventTime, log.CalendarWeek, log.Year, - (LogSourceDb) (int) log.Source, log.Id); + log.UserId, (LogDirectionDb)(int)log.Direction, log.EventTime, log.CalendarWeek, log.Year, + (LogSourceDb)(int)log.Source, log.Id); return OperationResponse.UPDATED; } @@ -526,7 +526,7 @@ namespace SQLiteRepository { var query = $"select * from {nameof(PolicyDb)}"; var policies = _connection.Query(query); - + return PolicyConverter.ConvertToPolicyDto(policies.OrderByDescending(x => x.Version).FirstOrDefault()); } @@ -535,7 +535,7 @@ namespace SQLiteRepository { if (string.IsNullOrEmpty(policy.Version)) { - policy.Version = (GetNextPolicyVersion()+1).ToString(); + policy.Version = (GetNextPolicyVersion() + 1).ToString(); } var policyDb = PolicyConverter.ConvertFromPolicyDto(policy); _connection.Insert(policyDb); @@ -555,24 +555,56 @@ namespace SQLiteRepository return _connection.ExecuteScalar(SQLiteProcedures.GET_TOTAL_USER_COUNT); } - private List GetUserList(int groupId = -1, int pageSize=-1, int pageNumber=-1) + private List GetUserList(int groupId = -1, int pageSize = -1, int pageNumber = -1, SortOptions sort = SortOptions.None) { List users; + + var orderByFirst = nameof(UserIdentity.LastName); + var firstOrderDir = "ASC"; + var orderBySecond = nameof(UserIdentity.FirstName); + var secondOrderDir = "ASC"; + + if (sort != SortOptions.None) + { + switch (sort) + { + case SortOptions.FirstNameAscending: + orderByFirst = nameof(UserIdentity.FirstName); + firstOrderDir = "ASC"; + orderBySecond = nameof(UserIdentity.LastName); + secondOrderDir = "ASC"; + break; + case SortOptions.FirstNameDescending: + orderByFirst = nameof(UserIdentity.FirstName); + firstOrderDir = "DESC"; + orderBySecond = nameof(UserIdentity.LastName); + secondOrderDir = "ASC"; + break; + case SortOptions.LastNameDescending: + firstOrderDir = "DESC"; + break; + } + + } if (pageNumber != -1 && pageSize != -1) { - users = _connection.Query(SQLiteProcedures.GET_ALL_USERS_PAGINATE, - pageSize, (pageNumber - 1) * pageSize); + var qString = string.Format(SQLiteProcedures.GET_ALL_USERS_PAGINATE, orderByFirst, firstOrderDir, + orderBySecond, secondOrderDir, pageSize, (pageNumber - 1) * pageSize); + users = _connection.Query(qString); } else if (groupId != -1) { + var qString = string.Format(SQLiteProcedures.GET_ALL_USERS_BY_GROUP, groupId, + orderByFirst, firstOrderDir, + orderBySecond, secondOrderDir); users = - _connection.Query( - SQLiteProcedures.GET_ALL_USERS_BY_GROUP, - groupId); + _connection.Query(qString); } else { - users = _connection.Query(SQLiteProcedures.GET_ALL_USERS); + users = _connection.Query(SQLiteProcedures.GET_ALL_USERS, + orderByFirst, firstOrderDir, + orderBySecond, secondOrderDir); } return users; @@ -620,7 +652,7 @@ namespace SQLiteRepository foreach (var upgradeScript in upgradeScripts) { using (var stream = assembly.GetManifestResourceStream(upgradeScript)) - using(var str = new StreamReader(stream)) + using (var str = new StreamReader(stream)) { var script = str.ReadToEnd(); _logger.Trace("Executing upgrade script with name: {0}", upgradeScript); @@ -633,7 +665,7 @@ namespace SQLiteRepository private void SetDbVersion(string vers) { _connection.DeleteAll(); - _connection.Insert(new DbVersion {VersionNumber = vers}); + _connection.Insert(new DbVersion { VersionNumber = vers }); _logger.Trace("Set Database version to: {0}", vers); } @@ -714,7 +746,7 @@ namespace SQLiteRepository EventTime = x.SwipeEventDateTime, UserId = x.UserId_FK, Year = x.Year - }).OrderBy(x=>x.EventTime.UtcDateTime).ToList(); + }).OrderBy(x => x.EventTime.UtcDateTime).ToList(); var dict = new Dictionary(); var logList = new List(); @@ -726,7 +758,7 @@ namespace SQLiteRepository } //add the logs to the respective day of the week. - foreach (var log in timeLogs.OrderBy(x=>x.EventTime)) + foreach (var log in timeLogs.OrderBy(x => x.EventTime)) { dict[log.EventTime.DayOfWeek].Logs.Add(log); } diff --git a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/Controllers/UsersController.cs b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/Controllers/UsersController.cs index 675c33a..88d73dc 100644 --- a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/Controllers/UsersController.cs +++ b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/Controllers/UsersController.cs @@ -30,17 +30,18 @@ namespace WindowsDataCenter public IHttpActionResult GetUsers([FromUri] string query = "" , [FromUri] int pageSize = -1 , [FromUri] int pageNumber = -1 - , [FromUri] int groupId = -1) + , [FromUri] int groupId = -1 + , [FromUri] SortOptions sort = SortOptions.None) { - _logger.Trace("GetUsers called with arguments >> query: {0}, pageSize: {1}, pageNumber: {2}, groupFilter: {3}", query, pageSize, pageNumber, groupId); + _logger.Trace("GetUsers called with arguments >> query: {0}, pageSize: {1}, pageNumber: {2}, groupFilter: {3}, sort: {4}", query, pageSize, pageNumber, groupId, sort); pageNumber = pageNumber == -1 ? 1 : pageNumber; pageSize = GetPageSize(pageSize); var userList = query != string.Empty ? _repo.Search(query) : groupId != -1 - ? _repo.GetUsers(groupId: groupId) - : _repo.GetUsers(pageNumber, pageSize); + ? _repo.GetUsers(groupId: groupId, sort:sort) + : _repo.GetUsers(pageNumber, pageSize, sort:sort); _logger.Trace("Got UserList from Repository, UserCount: {0}", userList.UserCount); if (query != string.Empty) { @@ -57,6 +58,7 @@ namespace WindowsDataCenter userList.PageNumber = pageNumber; userList.PageSize = pageSize; + userList.SelectedSortOption = sort; _logger.Trace("Returning UserList from GetUsers."); var msg = Request.CreateResponse(HttpStatusCode.OK, userList); diff --git a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/www/index.html b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/www/index.html index dbea1ce..fd89ac2 100644 --- a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/www/index.html +++ b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/www/index.html @@ -86,8 +86,23 @@ - First Name - Last Name + +
+ +
+
+ +
+ First Name + + +
+ +
+
+ +
+ Last Name Contractor diff --git a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/www/spa.js b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/www/spa.js index 1117178..53c13a6 100644 --- a/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/www/spa.js +++ b/DataCenter_Windows/WindowsDataCenter/WindowsDataCenter/www/spa.js @@ -1,4 +1,10 @@ -function DataVM() { +const SortOptions = { + LastAsc: "LastNameAscending", + LastDesc: "LastNameDescending", + FirstAsc: "FirstNameAscending", + FirstDesc: "FirstNameDescending" + }; +function DataVM() { "use strict"; var self = this; self.helpers = new Helpers(); @@ -23,6 +29,7 @@ self.policyChangeDate = ko.observable(null); self.policyChangeAuthor = ko.observable(null); self.policyVersion = ko.observable(null); + self.selectedSort = ko.observable(null); self.apiEndpoints = { root: "http://localhost:8800", getUserList: "/api/users", @@ -156,7 +163,7 @@ var args = [ { key: "groupId", - value: datacreateContextMenu + value: data } ]; var url = self.helpers.createRequestUrl("users", args, false, false); @@ -221,25 +228,32 @@ }); } }; - self.getUserList = function (pageSize, pageNumber, groupId) { - var args = null; + self.getUserList = function (pageSize, pageNumber, groupId, sort) { + var args = []; if (pageSize && pageNumber) { - args = [ + args.push( { key: "pageSize", value: pageSize - }, + }); + args.push( { key: "pageNumber", value: pageNumber - } - ]; - } else if(groupId) { - args = [ + }); + } + if (groupId) { + args.push( { key: "groupId", value: groupId - }]; + }); + } + if (sort) { + args.push({ + key: "sort", + value: sort + }); } var url = self.helpers.createRequestUrl(self.apiEndpoints.getUserList, args, false); $.getJSON(url, function (res) { @@ -261,9 +275,9 @@ self.assignErrorObject(errObj.errorCode, errObj.errorMessage, "getUserList"); }); }; - self.searchUsers = function(query) { + self.searchUsers = function(query, sort) { var url = self.helpers.createRequestUrl(self.apiEndpoints.getUserList, - [{ key: "query", value: query }], false, false); + [{ key: "query", value: query }, {key:"sort",value:sort}], false, false); $.getJSON(url, function(res) { self.userList(res); @@ -426,12 +440,46 @@ maxDate: moment(date).endOf("week") }); }; + function convertSortOption(opt) { + if (!opt) { + return SortOptions.LastAsc; + } + if (opt === "firstAsc") { + return SortOptions.FirstAsc; + } + if (opt === "firstDesc") { + return SortOptions.FirstDesc; + } + if (opt === "lastAsc") { + return SortOptions.LastAsc; + } + if (opt === "lastDesc") { + return SortOptions.LastDesc; + } + }; + self.sortIsActive = function (option) { + if (option === "firstAsc" && self.userList().SelectedSortOption === SortOptions.FirstAsc) { + return true; + } + if (option === "firstDesc" && self.selectedSort() === SortOptions.FirstDesc) { + return true; + } + if (option === "lastAsc" && self.selectedSort() === SortOptions.LastAsc) { + return true; + } + if (option === "lastDesc" && self.selectedSort() === SortOptions.LastDesc) { + return true; + } + return false; + }; Sammy(function () { this.get("#users", function () { var query = this.params.query; var pageSize = this.params.pageSize; var pageNumber = this.params.pageNumber; var groupId = this.params.groupId; + var sort = convertSortOption(this.params.sort); + console.log(sort); self.chosenMenuItemId("Home"); self.groupsList(null); self.chosenUserDetails(null); @@ -444,11 +492,11 @@ } self.getGroups(function (data) { self.groupsList(data); }); if (query) - self.searchUsers(query); + self.searchUsers(query, sort); else if (groupId && groupId > 0) - self.getUserList(null, null, groupId); + self.getUserList(null, null, groupId, sort); else - self.getUserList(pageSize, pageNumber); + self.getUserList(pageSize, pageNumber, null,sort); }); this.get("#userData/:userId", function () { self.chosenMenuItemId("Data"); @@ -528,7 +576,6 @@ this.post("#manualLog", function() { self.createManualLog(self.manualLog()); - $('#manualLogDialog').modal("hide"); //self.goToTimeLogs(self.chosenTimeLogUserId, null, [{ key: "selectedDate", value: self.selectedTimeLogDate() }]); });