Merge branch 'CreateAbout-#48#45' into 'master'
Release0.1.4 See merge request !6
This commit is contained in:
commit
7f531b7baf
@ -0,0 +1,11 @@
|
||||
namespace Interfaces
|
||||
{
|
||||
public class AppDetails
|
||||
{
|
||||
public string ApplicationName { get; set; }
|
||||
public string Version { get; set; }
|
||||
public string DataBaseProvider { get; set; }
|
||||
public string LoggerProvider { get; set; }
|
||||
public string ErrorEmailAddress { get; set; }
|
||||
}
|
||||
}
|
||||
@ -40,6 +40,7 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AppDetails.cs" />
|
||||
<Compile Include="DailyLogs.cs" />
|
||||
<Compile Include="ILogger.cs" />
|
||||
<Compile Include="IRepository.cs" />
|
||||
|
||||
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.1.2.0")]
|
||||
[assembly: AssemblyFileVersion("0.1.2.0")]
|
||||
[assembly: AssemblyVersion("0.1.4.0")]
|
||||
[assembly: AssemblyFileVersion("0.1.4.0")]
|
||||
|
||||
@ -19,5 +19,6 @@ namespace Interfaces
|
||||
get { return Math.Round(TimeLogs.Sum(x => x.DailyTotal), 2); }
|
||||
}
|
||||
public float HoursPerWeekMinutes { get; set; }
|
||||
public User UserInformation { get; set; }
|
||||
}
|
||||
}
|
||||
@ -21,5 +21,7 @@ namespace Interfaces
|
||||
}
|
||||
|
||||
public List<Identifier> AssociatedIdentifiers { get; set; }
|
||||
|
||||
public bool State { get; set; }
|
||||
}
|
||||
}
|
||||
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.1.2.0")]
|
||||
[assembly: AssemblyFileVersion("0.1.2.0")]
|
||||
[assembly: AssemblyVersion("0.1.4.0")]
|
||||
[assembly: AssemblyFileVersion("0.1.4.0")]
|
||||
|
||||
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.1.2.0")]
|
||||
[assembly: AssemblyVersion("0.1.4.0")]
|
||||
[assembly: AssemblyFileVersion("0.1.2.0")]
|
||||
|
||||
@ -2,28 +2,50 @@ namespace SQLiteRepository
|
||||
{
|
||||
internal static class SQLiteProcedures
|
||||
{
|
||||
public const string GET_LOGS_IN_LAST_X_MINUTES= "select * from TimeLogDb where "+nameof(TimeLogDb.SwipeEventDateTime)+" > ? AND "+nameof(TimeLogDb.UserId_FK)+"=?";
|
||||
public const string GET_TIMELOGS = "select * from "+nameof(TimeLogDb)+ " where (" + nameof(TimeLogDb.UserId_FK) + "=? AND " + nameof(TimeLogDb.CalendarWeek) + "=? and " + nameof(TimeLogDb.Year) + "=?)";
|
||||
public const string GET_ALL_USERS = "select * from " + nameof(UserIdentity);
|
||||
public const string GET_USER_BY_ID = "select * from " + nameof(UserIdentity) + " where " + nameof(UserIdentity.Id) + "=?";
|
||||
public const string GET_LOGS_IN_LAST_X_MINUTES =
|
||||
"select * from TimeLogDb where " + nameof(TimeLogDb.SwipeEventDateTime) + " > ? AND " +
|
||||
nameof(TimeLogDb.UserId_FK) + "=?";
|
||||
|
||||
public const string GET_CARDS_BY_USER_ID = "select * from " + nameof(CardUniqueId) + " where " + nameof(CardUniqueId.UserId_FK) + "=?";
|
||||
public const string GET_CARDS_BY_UNIQUE_ID = "select * from " + nameof(CardUniqueId) + " where " + nameof(CardUniqueId.CardUId) + "=?";
|
||||
public const string GET_UNASSIGNED_CARD_LIST = "select * from " + nameof(CardUniqueId) + " where " + nameof(CardUniqueId.UserId_FK) + "=?";
|
||||
public const string GET_TIMELOGS =
|
||||
"select * from " + nameof(TimeLogDb) + " where (" + nameof(TimeLogDb.UserId_FK) + "=? AND " +
|
||||
nameof(TimeLogDb.CalendarWeek) + "=? and " + nameof(TimeLogDb.Year) + "=?)";
|
||||
|
||||
public const string GET_USER_BY_FIRST_AND_LAST =
|
||||
"select * from " + nameof(UserIdentity) + " where " + nameof(UserIdentity.FirstName) + " = ? AND " + nameof(UserIdentity.LastName) + " = ?";
|
||||
public const string GET_ALL_USERS =
|
||||
"select * from " + nameof(UserIdentity) + " order by " + nameof(UserIdentity.LastName) + " collate nocase, " +
|
||||
nameof(UserIdentity.FirstName) + " collate nocase";
|
||||
|
||||
public const string UPDATE_CARD_USER_ID = "update " + nameof(CardUniqueId) + " set " + nameof(CardUniqueId.UserId_FK) + "=? where " + nameof(CardUniqueId.Id) + "=?";
|
||||
public const string GET_ALL_USERS_PAGINATE =
|
||||
"select * from " + nameof(UserIdentity) + " order by " + nameof(UserIdentity.LastName) + " collate nocase, " +
|
||||
nameof(UserIdentity.FirstName) + " collate nocase limit ? offset ?";
|
||||
|
||||
public const string SEARCH_USER_LIST = "SELECT * FROM " + nameof(UserIdentity) + " where(" + nameof(UserIdentity.FirstName) + " Like ? OR " + nameof(UserIdentity.LastName) + " Like ?)";
|
||||
public const string GET_USER_BY_ID =
|
||||
"select * from " + nameof(UserIdentity) + " where " + nameof(UserIdentity.Id) + "=?";
|
||||
|
||||
public const string GET_LAST_TIMELOG_DIRECTION = "SELECT * FROM " + nameof(TimeLogDb) + " where " + nameof(TimeLogDb.UserId_FK) + " = ? order by " + nameof(TimeLogDb.SwipeEventDateTime) + " desc LIMIT 1";
|
||||
public const string GET_CARDS_BY_USER_ID =
|
||||
"select * from " + nameof(CardUniqueId) + " where " + nameof(CardUniqueId.UserId_FK) + "=?";
|
||||
|
||||
public const string GET_ALL_USERS_PAGINATE = "select * from "+ nameof(UserIdentity)+" limit ? offset ?";
|
||||
public const string GET_CARDS_BY_UNIQUE_ID =
|
||||
"select * from " + nameof(CardUniqueId) + " where " + nameof(CardUniqueId.CardUId) + "=?";
|
||||
|
||||
public const string GET_TOTAL_USER_COUNT = "select Max("+nameof(UserIdentity.Id)+") from " + nameof(UserIdentity);
|
||||
public const string GET_UNASSIGNED_CARD_LIST =
|
||||
"select * from " + nameof(CardUniqueId) + " where " + nameof(CardUniqueId.UserId_FK) + "=?";
|
||||
|
||||
public const string GET_USER_CONTRACTED_HOURS = "select "+nameof(UserIdentity.HoursPerWeek)+ " From UserIdentity where " + nameof(UserIdentity.Id) + "=?";
|
||||
public const string UPDATE_CARD_USER_ID =
|
||||
"update " + nameof(CardUniqueId) + " set " + nameof(CardUniqueId.UserId_FK) + "=? where " +
|
||||
nameof(CardUniqueId.Id) + "=?";
|
||||
|
||||
public const string SEARCH_USER_LIST =
|
||||
"SELECT * FROM " + nameof(UserIdentity) + " where(" + nameof(UserIdentity.FirstName) + " Like ? OR " +
|
||||
nameof(UserIdentity.LastName) + " Like ?)";
|
||||
|
||||
public const string GET_LAST_TIMELOG_DIRECTION =
|
||||
"SELECT * FROM " + nameof(TimeLogDb) + " where " + nameof(TimeLogDb.UserId_FK) + " = ? order by " +
|
||||
nameof(TimeLogDb.SwipeEventDateTime) + " desc LIMIT 1";
|
||||
|
||||
public const string GET_TOTAL_USER_COUNT =
|
||||
"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) + "=?";
|
||||
}
|
||||
}
|
||||
@ -82,6 +82,8 @@ namespace SQLiteRepository
|
||||
Id = card.Id
|
||||
});
|
||||
}
|
||||
userObj.State = GetUserState(GetLogDirection(user.Id));
|
||||
|
||||
ret.Users.Add(userObj);
|
||||
}
|
||||
if (pageNumber == -1 && pageSize == -1)
|
||||
@ -98,6 +100,17 @@ namespace SQLiteRepository
|
||||
return ret;
|
||||
}
|
||||
|
||||
private bool GetUserState(LogDirectionDb logDirection)
|
||||
{
|
||||
switch (logDirection)
|
||||
{
|
||||
case LogDirectionDb.OUT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public UserList Search(string searchParam)
|
||||
{
|
||||
_logger.Trace("Searching SQLite database for the term: {0}", searchParam);
|
||||
@ -205,6 +218,7 @@ namespace SQLiteRepository
|
||||
_logger.Error(ex, "Error in GetUserContracterHours with Id: {0} and selected date: {1}, Exception: {2}", userId, selectedDate, ex);
|
||||
}
|
||||
|
||||
ret.UserInformation = GetUser(userId);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@ -3,7 +3,8 @@
|
||||
<appSettings>
|
||||
<add key="NLogConfigFilePath" value="Configs/NLogConfig.xml" />
|
||||
<add key="DefaultPageSize" value="20" />
|
||||
<add key="SwipeTimeGap" value="20" />
|
||||
<add key="SwipeTimeGap" value="3" />
|
||||
<add key="BugSubmissionEmailAddress" value="incoming+WattsC/FlexiTimeTrackerTool+24qrefn8e1urhl4iqct7we2jl@gitlab.com"/>
|
||||
</appSettings>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
using System.Configuration;
|
||||
using System.Reflection;
|
||||
using System.Web.Http;
|
||||
using Interfaces;
|
||||
|
||||
namespace WindowsDataCenter
|
||||
{
|
||||
[RoutePrefix("api/app")]
|
||||
public class ApplicationController:ApiController
|
||||
{
|
||||
[Route("")]
|
||||
public IHttpActionResult GetAppDetails()
|
||||
{
|
||||
var ninjectHelper = NinjectHelper.GetInstance();
|
||||
var appDetails = new AppDetails
|
||||
{
|
||||
ApplicationName = "Flexitime Tracker",
|
||||
DataBaseProvider = ninjectHelper.Get<IRepository>().GetType().ToString(),
|
||||
LoggerProvider = ninjectHelper.Get<ILogger>().GetType().ToString(),
|
||||
Version = Assembly.GetEntryAssembly().GetName().Version.ToString(),
|
||||
ErrorEmailAddress = ConfigurationManager.AppSettings["BugSubmissionEmailAddress"] ?? "NONE"
|
||||
};
|
||||
|
||||
return Ok(appDetails);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("0.1.2.0")]
|
||||
[assembly: AssemblyFileVersion("0.1.2.0")]
|
||||
[assembly: AssemblyVersion("0.1.4.0")]
|
||||
[assembly: AssemblyFileVersion("0.1.4.0")]
|
||||
|
||||
@ -147,6 +147,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="CardData.cs" />
|
||||
<Compile Include="Controllers\ApplicationController.cs" />
|
||||
<Compile Include="Controllers\CardsController.cs" />
|
||||
<Compile Include="Configuration.cs" />
|
||||
<Compile Include="Controllers\TimelogController.cs" />
|
||||
|
||||
@ -37,6 +37,9 @@
|
||||
<a class="indent-nav-xs" data-bind="text: $data"></a>
|
||||
</li>
|
||||
<!-- /ko -->
|
||||
<li class="hidden-xs" >
|
||||
<a data-toggle="modal" data-target="#aboutDialog">About</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@ -61,15 +64,24 @@
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-md-1"></th>
|
||||
<th class="col-md-3">First Name</th>
|
||||
<th class="col-md-3">Last Name</th>
|
||||
<th class="col-md-1 text-center">Contractor</th>
|
||||
<th />
|
||||
<th/>
|
||||
<th/>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-bind="foreach: Users">
|
||||
<tr>
|
||||
<td class="valign text-center">
|
||||
<!-- ko if: State -->
|
||||
<span class="label label-success" style="display: block">IN</span>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: !State -->
|
||||
<span class="label label-danger" style="display: block">OUT</span>
|
||||
<!-- /ko -->
|
||||
</td>
|
||||
<td class="valign" data-bind="text: FirstName"></td>
|
||||
<td class="valign" data-bind="text: LastName"></td>
|
||||
<td class="valign text-center"><span data-bind="css:{ 'glyphicon glyphicon-ok': IsContractor}"></span></td>
|
||||
@ -116,6 +128,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="container" data-bind="with: chosenUserDetails">
|
||||
@ -186,12 +199,22 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container" data-bind="with: userTimeLogData">
|
||||
<div class="container" data-bind="with: userTimeLogData">
|
||||
<div class="row">
|
||||
<div class="col-md-2 text-center" style="margin-top: 15px;">
|
||||
<button pageDestination="Users" data-bind="click: $root.returnButtonClick" id="returnButton" class="btn btn-default">
|
||||
<span class="glyphicon glyphicon-chevron-left"></span>Users
|
||||
</button>
|
||||
<br />
|
||||
<br />
|
||||
</div>
|
||||
<h3 class="col-md-offset-1 col-md-9 pull-right">
|
||||
Logs for: <span data-bind="text: UserInformation.FirstName"></span> <span data-bind="text: UserInformation.LastName"></span>
|
||||
</h3>
|
||||
</div>
|
||||
<br/>
|
||||
<br/>
|
||||
<!--<div class="row">
|
||||
|
||||
</div>-->
|
||||
<div class="row">
|
||||
<div class="col-md-3 col-xs-12">
|
||||
<div id="datePickerContainer">
|
||||
@ -232,7 +255,35 @@
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="aboutDialog" class="modal fade" role="dialog" data-bind="with: appDetails">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 data-bind="text: ApplicationName"></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>Version</th>
|
||||
<td data-bind="text: Version"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Database Provider</th>
|
||||
<td data-bind="text: DataBaseProvider"></td>
|
||||
</tr>
|
||||
</table>
|
||||
<br />
|
||||
<a class="btn btn-default" data-bind="attr:{href:'mailto:'+ErrorEmailAddress}">Submit Error Report</a>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer data-bind="with: errorData, css: {footer: $root.errorData()!==null}">
|
||||
<div class="container">
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
var self = this;
|
||||
self.menuOptions = ["Home"];
|
||||
self.chosenMenuItemId = ko.observable();
|
||||
self.appDetails = ko.observable(null);
|
||||
self.userList = ko.observable(null);
|
||||
self.chosenUserDetails = ko.observable(null);
|
||||
self.userTimeLogData = ko.observable(null);
|
||||
@ -16,7 +17,8 @@
|
||||
getUserDetails: "/api/users",
|
||||
editUser: "/api/users/edit",
|
||||
getTimeLogs: "/api/timelogs",
|
||||
getUnassignedCards: "/api/cards/unassigned"
|
||||
getUnassignedCards: "/api/cards/unassigned",
|
||||
getAppDetails: "/api/app"
|
||||
};
|
||||
self.uiPages = {
|
||||
users: "users",
|
||||
@ -231,6 +233,16 @@
|
||||
self.assignErrorObject(errObj.errorCode, errObj.errorMessage, "getUserList");
|
||||
});
|
||||
};
|
||||
self.getAppDetails = function() {
|
||||
var url = self.createRequestUrl(self.apiEndpoints.getAppDetails, null, false, false);
|
||||
$.getJSON(url, function (res) {
|
||||
self.appDetails(res);
|
||||
}).fail(function (response, status, error) {
|
||||
console.log("error - getusers");
|
||||
var errObj = self.processRequestFailure(response, status, error);
|
||||
self.assignErrorObject(errObj.errorCode, errObj.errorMessage, "getUserList");
|
||||
});
|
||||
};
|
||||
self.searchUsers = function(query) {
|
||||
var url = self.createRequestUrl(self.apiEndpoints.getUserList,
|
||||
[{ key: "query", value: query }], false, false);
|
||||
@ -308,6 +320,9 @@
|
||||
self.chosenUserDetails(null);
|
||||
self.userList(null);
|
||||
self.userTimeLogData(null);
|
||||
if (self.appDetails() === null) {
|
||||
self.getAppDetails();
|
||||
}
|
||||
if (query)
|
||||
self.searchUsers(query);
|
||||
else
|
||||
|
||||
@ -3,7 +3,8 @@
|
||||
<appSettings>
|
||||
<add key="NLogConfigFilePath" value="Configs/NLogConfig.xml" />
|
||||
<add key="DefaultPageSize" value="20" />
|
||||
<add key="SwipeTimeGap" value="20" />
|
||||
<add key="SwipeTimeGap" value="3" />
|
||||
<add key="BugSubmissionEmailAddress" value="incoming+WattsC/FlexiTimeTrackerTool+24qrefn8e1urhl4iqct7we2jl@gitlab.com"/>
|
||||
</appSettings>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
|
||||
|
||||
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
[assembly: AssemblyVersion("0.1.4.0")]
|
||||
[assembly: AssemblyFileVersion("0.1.4.0")]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user