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