664 lines
33 KiB
Plaintext
664 lines
33 KiB
Plaintext
@using EnVisage.Code
|
|
@using EnVisage.Models
|
|
@using EnVisage.Controllers
|
|
@model PeopleResourceModel
|
|
@{
|
|
ViewBag.Title = "People Resource Details";
|
|
var acModel = new
|
|
{
|
|
DisplayMode = new
|
|
{
|
|
MenuId = "visibilitydropdown_calendar",
|
|
DataSection = "capacityManagementView",
|
|
PageKey = "/PeopleResource/Details",
|
|
BackUrlTitle = "dashboard",
|
|
GroupBy = new
|
|
{
|
|
Hide = true,
|
|
Disabled = false,
|
|
Value = '0'
|
|
},
|
|
CapacityMode = new
|
|
{
|
|
Hide = true,
|
|
Disabled = false,
|
|
Value = '1'
|
|
},
|
|
ShowUpper = new
|
|
{
|
|
Hide = true,
|
|
Disabled = false,
|
|
Value = true
|
|
},
|
|
ShowLower = new
|
|
{
|
|
Hide = true,
|
|
Disabled = false,
|
|
Value = false
|
|
},
|
|
IsCapacityModeActuals = new
|
|
{
|
|
Hide = true,
|
|
Disabled = false,
|
|
Value = true
|
|
}
|
|
},
|
|
Filter = new
|
|
{
|
|
EntityType = CapacityPageInitOption.CalendarEntityType.Resource,
|
|
EntityId = Model.Id,
|
|
ShowFilters = false
|
|
},
|
|
TargetPage = "ResourceDetails"
|
|
};
|
|
}
|
|
@{
|
|
string userIdAsText = User.Identity.GetID();
|
|
string skillsMatrixJson = String.Empty;
|
|
|
|
using (var dbContext = new EnVisageEntities())
|
|
{
|
|
// Create and fill model for initial Skills Matrix loading
|
|
SkillsMatrixPageLoadModel skillsMatrixLoadModel =
|
|
SkillsController.GetPageLoadModel(userIdAsText, ApplicationDashboards.ResourceBoard, dbContext);
|
|
skillsMatrixLoadModel.OpenerType = ApplicationDashboards.ResourceBoard;
|
|
skillsMatrixLoadModel.OpenerId = Model != null && !Model.Id.Equals(Guid.Empty) ? Model.Id.ToString() : String.Empty;
|
|
skillsMatrixLoadModel.ReadOnly = !SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceSkills, AccessLevel.Write);
|
|
skillsMatrixJson = Newtonsoft.Json.JsonConvert.SerializeObject(new
|
|
{
|
|
prefs = "",
|
|
model = skillsMatrixLoadModel
|
|
});
|
|
}
|
|
}
|
|
@{
|
|
// Check if resource has any type of allocations: scenario or actuals
|
|
// Variables will be used in html below
|
|
var resourceIsAllocatedToScenarios = (Model.ResourceScenarioAllocationsInfo != null) && (Model.ResourceScenarioAllocationsInfo.HasAllocations);
|
|
var resourceHasActuals = (Model.ResourceActualsInfo != null) && (Model.ResourceActualsInfo.HasAllocations);
|
|
var resourceHasMixAllocations = (Model.ResourceMixAllocationsInfo != null) && (Model.ResourceMixAllocationsInfo.HasAllocations);
|
|
var resourceHasAnyAllocations = resourceIsAllocatedToScenarios || resourceHasActuals || resourceHasMixAllocations;
|
|
}
|
|
@section stylesheets
|
|
{
|
|
@Styles.Render(String.Format("{0}/{1}", Constants.C_BUNDLE_STYLES_BASE_PATH, "prevu-acstyles"))
|
|
@Styles.Render(String.Format("{0}/{1}", Constants.C_BUNDLE_STYLES_BASE_PATH, "prevu-skillmatrixstyles"))
|
|
}
|
|
@section scripts
|
|
{
|
|
@Scripts.Render(String.Format("{0}/{1}", Constants.C_BUNDLE_SCRIPTS_BASE_PATH, "prevu-angularservices"))
|
|
@Scripts.Render(String.Format("{0}/{1}", Constants.C_BUNDLE_SCRIPTS_BASE_PATH, "prevu-activitycalendar"))
|
|
@Scripts.Render(String.Format("{0}/{1}", Constants.C_BUNDLE_SCRIPTS_BASE_PATH, "prevu-scenariodetails"))
|
|
@Scripts.Render(String.Format("{0}/{1}", Constants.C_BUNDLE_SCRIPTS_BASE_PATH, "prevu-skillsmatrix"))
|
|
@Scripts.Render(String.Format("{0}/{1}", Constants.C_BUNDLE_SCRIPTS_BASE_PATH, "prevu-resourcepage"))
|
|
|
|
<script type="text/javascript">
|
|
var datePickerOptions = {
|
|
format: 'm/d/yyyy',
|
|
autoclose: true,
|
|
startDate: '@(Constants.MIN_SELECTABLE_DATE)',
|
|
endDate: '@(Constants.MAX_SELECTABLE_DATE)'
|
|
};
|
|
|
|
function initPanels() {
|
|
$('.panel').collapsiblePanel();
|
|
|
|
$('#panelInfo').on('hidden.bs.collapse', function () {
|
|
_viewPageState.pageState('setData', ['info-panel', false]);
|
|
_viewPageState.pageState('saveData');
|
|
});
|
|
$('#panelInfo').on('shown.bs.collapse', function () {
|
|
_viewPageState.pageState('setData', ['info-panel', true]);
|
|
_viewPageState.pageState('saveData');
|
|
});
|
|
|
|
$('#panelSkills').on('hidden.bs.collapse', function () {
|
|
_viewPageState.pageState('setData', ['skills-panel', false]);
|
|
_viewPageState.pageState('saveData');
|
|
});
|
|
$('#panelSkills').on('shown.bs.collapse', function () {
|
|
_viewPageState.pageState('setData', ['skills-panel', true]);
|
|
_viewPageState.pageState('saveData');
|
|
});
|
|
|
|
$('#panelTime').on('hidden.bs.collapse', function () {
|
|
$('#divCalendarMenu').hide();
|
|
_viewPageState.pageState('setData', ['time-panel', false]);
|
|
_viewPageState.pageState('saveData');
|
|
});
|
|
$('#panelTime').on('shown.bs.collapse', function () {
|
|
$('#divCalendarMenu').show();
|
|
|
|
if (angular.element(document.getElementById('controller1')).scope().data == null) {
|
|
angular.element(document.getElementById('controller1')).scope().CalendarFilterMode.SelectedItemId = '@Model.Id';
|
|
angular.element(document.getElementById('controller1')).scope().switchResourceFilterMode(true);
|
|
angular.element(document.getElementById('controller1')).scope().loadCalendarData();
|
|
}
|
|
|
|
_viewPageState.pageState('setData', ['time-panel', true]);
|
|
_viewPageState.pageState('saveData');
|
|
});
|
|
|
|
$('#panelNonProjectTimes').on('hidden.bs.collapse', function () {
|
|
_viewPageState.pageState('setData', ['non-project-times-panel', false]);
|
|
_viewPageState.pageState('saveData');
|
|
});
|
|
$('#panelNonProjectTimes').on('shown.bs.collapse', function () {
|
|
_viewPageState.pageState('setData', ['non-project-times-panel', true]);
|
|
_viewPageState.pageState('saveData');
|
|
});
|
|
|
|
$('#panelLoanOuts').on('hidden.bs.collapse', function () {
|
|
_viewPageState.pageState('setData', ['loanouts-panel', false]);
|
|
_viewPageState.pageState('saveData');
|
|
});
|
|
$('#panelLoanOuts').on('shown.bs.collapse', function () {
|
|
_viewPageState.pageState('setData', ['loanouts-panel', true]);
|
|
_viewPageState.pageState('saveData');
|
|
});
|
|
|
|
_viewPageState = $('#resourceDashboard').pageState({
|
|
pageKey: document.location.pathname
|
|
});
|
|
|
|
var showPanel = _viewPageState.data('pageState').$dataset['info-panel'];
|
|
if (showPanel == undefined || showPanel)
|
|
$('#panelInfo').addClass('in').parent().find('[data-toggle=collapse]').removeClass('collapsed');
|
|
else
|
|
$('#panelInfo').removeClass('in').parent().find('[data-toggle=collapse]').addClass('collapsed');
|
|
|
|
showPanel = _viewPageState.data('pageState').$dataset['skills-panel'];
|
|
if (showPanel == undefined || showPanel)
|
|
$('#panelSkills').addClass('in').parent().find('[data-toggle=collapse]').removeClass('collapsed');
|
|
else
|
|
$('#panelSkills').removeClass('in').parent().find('[data-toggle=collapse]').addClass('collapsed');
|
|
|
|
showPanel = _viewPageState.data('pageState').$dataset['time-panel'];
|
|
if (showPanel == undefined || showPanel) {
|
|
$('#divCalendarMenu').show();
|
|
$('#panelTime').addClass('in').parent().find('[data-toggle=collapse]').removeClass('collapsed');
|
|
} else {
|
|
$('#divCalendarMenu').hide();
|
|
$('#panelTime').removeClass('in').parent().find('[data-toggle=collapse]').addClass('collapsed');
|
|
}
|
|
|
|
showPanel = _viewPageState.data('pageState').$dataset['non-project-times-panel'];
|
|
if (showPanel == undefined || showPanel)
|
|
$('#panelNonProjectTimes').addClass('in').parent().find('[data-toggle=collapse]').removeClass('collapsed');
|
|
else
|
|
$('#panelNonProjectTimes').removeClass('in').parent().find('[data-toggle=collapse]').addClass('collapsed');
|
|
|
|
showPanel = _viewPageState.data('pageState').$dataset['loanouts-panel'];
|
|
if (showPanel == undefined || showPanel)
|
|
$('#panelLoanOuts').addClass('in').parent().find('[data-toggle=collapse]').removeClass('collapsed');
|
|
else
|
|
$('#panelLoanOuts').removeClass('in').parent().find('[data-toggle=collapse]').addClass('collapsed');
|
|
|
|
var showHistory = _viewPageState.data('pageState').$dataset['showHistory'];
|
|
if (showHistory) {
|
|
$("#NonProjectTimesHistory")[0].checked = true;
|
|
toggleHistory(true);
|
|
} else {
|
|
$('#divNonProjectTimesHistory').hide();
|
|
}
|
|
|
|
$('#NonProjectTimesHistory').switcher({
|
|
on_state_content: 'Show History',
|
|
off_state_content: 'Hide History'
|
|
}).parent().css("width", "120px");
|
|
|
|
};
|
|
var _npTimeId = '';
|
|
init.push(function () {
|
|
|
|
$('input#@Html.IdFor(x => x.IsActiveEmployee)').switcher({
|
|
on_state_content: 'Active',
|
|
off_state_content: 'Inactive'
|
|
});
|
|
$('input#@Html.IdFor(x => x.IsActiveEmployee)').parent().css("width", "80px");
|
|
$('.datepicker').datepicker(datePickerOptions);
|
|
|
|
initPanels();
|
|
|
|
$('#resourceNPTime').nonProjectTimeGrid({
|
|
url: '@Url.Action("LoadNonProjectTimeList", "PeopleResource")' + '?resourceId=' + URI().query(true).resourceId,
|
|
read: '@(SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceNonProjectTime, AccessLevel.Read))',
|
|
write: '@(SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceNonProjectTime, AccessLevel.Write))',
|
|
permanent: false,
|
|
ishistory: false
|
|
});
|
|
$('#futureNPTime').nonProjectTimeGrid({
|
|
url: '@Url.Action("LoadNonProjectTimeList", "PeopleResource")' + '?resourceId=' + URI().query(true).resourceId,
|
|
read: '@(SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceNonProjectTime, AccessLevel.Read))',
|
|
write: '@(SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceNonProjectTime, AccessLevel.Write))',
|
|
permanent: true,
|
|
ishistory: false
|
|
});
|
|
});
|
|
|
|
function loadHistory() {
|
|
$('#divNonProjectTimesHistory').nonProjectTimeGrid({
|
|
url: '@Url.Action("LoadNonProjectTimeList", "PeopleResource")' + '?resourceId=' + URI().query(true).resourceId,
|
|
read: '@(SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceNonProjectTime, AccessLevel.Read))',
|
|
write: '@(SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceNonProjectTime, AccessLevel.Write))',
|
|
permanent: false,
|
|
ishistory: true
|
|
});
|
|
}
|
|
|
|
function loadNonProjectTime(npTimeId, resourceId) {
|
|
if (npTimeId.length > 0)
|
|
StartEdit('NonProjectTime', npTimeId, null, null, 'erorMsgPlaceholder');
|
|
var url = npTimeId.length > 0 ? "?Id=" + npTimeId + "&resourceId=" + resourceId : "?resourceId=" + resourceId;
|
|
$('#nonProjectTimeReload').load('@Url.Action("LoadNonProjectTime", "PeopleResource")' + url, function (response, status, xh) {
|
|
if (status == "error") {
|
|
$('#nonProjectTimeReload').modal('hide');
|
|
showErrorModal('Loading error', 'We are sorry but there was an error, please try again later.');
|
|
} else {
|
|
initNonProjectTimes(!npTimeId, true);
|
|
_npTimeId = npTimeId;
|
|
$('#editScheduleNonProjectTime').modal('show');
|
|
$('.validation-summary-errors').hide();
|
|
}
|
|
});
|
|
}
|
|
|
|
function editNonProjectTime(aId, npTimeId) {
|
|
if (!CheckLock(aId, 'NonProjectTime', npTimeId))
|
|
return false;
|
|
loadNonProjectTime(npTimeId, '@Model.Id');
|
|
return true;
|
|
}
|
|
|
|
function deleteNonProjectTime(aId, npTimeId) {
|
|
if (!CheckLock(aId, 'NonProjectTime', npTimeId))
|
|
return false;
|
|
if (npTimeId.length > 0)
|
|
StartEdit('NonProjectTime', npTimeId, null, null, 'erorMsgPlaceholder');
|
|
$("#deleteNPTimeId").val(npTimeId);
|
|
$('#modal-warning').on('hidden.bs.modal', function () {
|
|
if (npTimeId.length > 0) {
|
|
StopEdit();
|
|
RemoveLock('NonProjectTime', npTimeId);
|
|
}
|
|
}).modal('show');
|
|
return true;
|
|
}
|
|
|
|
|
|
function toggleTeamListView(element) {
|
|
$(element).parent().children('div.teamsList').toggle(100, function () {
|
|
if ($(this).parent().children('div.header').children('i.icon').hasClass('fa-caret-right')) {
|
|
$(this).parent().children('div.header').children('i.icon').removeClass('fa-caret-right');
|
|
$(this).parent().children('div.header').children('i.icon').addClass('fa-caret-down');
|
|
} else {
|
|
$(this).parent().children('div.header').children('i.icon').removeClass('fa-caret-down');
|
|
$(this).parent().children('div.header').children('i.icon').addClass('fa-caret-right');
|
|
}
|
|
});
|
|
}
|
|
|
|
function OpenInNewWindow() {
|
|
var url = '@Url.Action("Index", "CapacityManagement")' + '?id=@Model.Id';
|
|
window.open(url);
|
|
}
|
|
|
|
$(document).on('hide.bs.modal', '#editScheduleNonProjectTime', function (e) {
|
|
// skip modal hide event from datepickers
|
|
if ($(e.target).attr('id') != 'editScheduleNonProjectTime')
|
|
return true; // close modal form
|
|
// check that form has been changed
|
|
if (typeof isSTDataChanged === 'function')
|
|
// if form has been changed
|
|
if (isSTDataChanged()) {
|
|
// ask user for confirmation of form close
|
|
bootbox.confirm("@Resources.Messages.NonProjectTime_Edit_UnsavedChanges", function (result) {
|
|
if (result) {
|
|
if (typeof resetSTDataChanged === 'function') {
|
|
resetSTDataChanged();
|
|
}
|
|
$('#editScheduleNonProjectTime').modal('hide');
|
|
}
|
|
});
|
|
|
|
return false; // DO NOT close modal form
|
|
}
|
|
return true; // close modal form
|
|
});
|
|
$('#editScheduleNonProjectTime').on('hidden.bs.modal', function () {
|
|
if (_npTimeId.length > 0) {
|
|
StopEdit();
|
|
RemoveLock('NonProjectTime', _npTimeId);
|
|
}
|
|
})
|
|
function toggleHistory(isInit) {
|
|
if ($("#NonProjectTimesHistory")[0].checked) {
|
|
$("#divNonProjectTimesHistory").show();
|
|
if (!$.fn.DataTable.isDataTable($('#divNonProjectTimesHistory').find('table')))
|
|
loadHistory();
|
|
if (!isInit) {
|
|
$('html, body')
|
|
.stop()
|
|
.animate({
|
|
scrollTop: $("#divNonProjectTimesHistory").offset().top
|
|
}, 200);
|
|
}
|
|
} else {
|
|
$("#divNonProjectTimesHistory").hide();
|
|
}
|
|
|
|
_viewPageState.pageState('setData', ['showHistory', $("#NonProjectTimesHistory")[0].checked]);
|
|
_viewPageState.pageState('saveData');
|
|
}
|
|
function deleteNPTimeBegin() {
|
|
blockUI();
|
|
}
|
|
function deleteNPTimeCompleted() {
|
|
unblockUI();
|
|
$('#modal-warning').modal('hide');
|
|
}
|
|
function deleteNPTimeFailure() {
|
|
showErrorModal('Deleting error', 'We are sorry but there was an error, please try again later.');
|
|
}
|
|
function deleteNPTimeSuccess() {
|
|
reloadPage();
|
|
}
|
|
function editPeopleResource() {
|
|
var url = "@Url.Action("Edit", "PeopleResource", new { resourceId = Model.Id })";
|
|
$('#editPeopleResourceForm').load(url, function () {
|
|
$.validator.unobtrusive.parse("#editPeopleResourceForm form");
|
|
$('#editPeopleResourceModal').on('shown.bs.modal', function () {
|
|
initPeopleResourceEditForm();
|
|
});
|
|
$('#editPeopleResourceForm form').data("url", url);
|
|
$('#editPeopleResourceModal').modal('show');
|
|
});
|
|
}
|
|
|
|
function changePeopleResourceExpCat() {
|
|
var url = "@Url.Action("ChangeResourceExpenditure", "PeopleResource", new { resourceId = Model.Id })";
|
|
$('#peopleResourceChangeExpCatForm').load(url, function () {
|
|
$.validator.unobtrusive.parse("#peopleResourceChangeExpCatForm form");
|
|
|
|
$('#PeopleResourceChangeExpCatModal').on('shown.bs.modal', function () {
|
|
initPeopleResourceChangeExpCatForm();
|
|
});
|
|
$('#peopleResourceChangeExpCatForm form').data("url", url);
|
|
$('#PeopleResourceChangeExpCatModal').modal('show');
|
|
});
|
|
}
|
|
|
|
function refreshPeopleResourceInfo() {
|
|
reloadPage();
|
|
}
|
|
</script>
|
|
}
|
|
|
|
<div id="erorMsgPlaceholder"></div>
|
|
<div class="table-light table-responsive" id="resourceDashboard">
|
|
@if (SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceInformation, AccessLevel.Read))
|
|
{
|
|
<div class="panel widget-messages-alt" id="information">
|
|
<div class="panel-heading">
|
|
<span class="panel-title ui-expander">
|
|
<a data-toggle="collapse" data-target="#panelInfo" class="collapsed">
|
|
<i class="panel-title-icon fa fa-info"></i>People Resource Information
|
|
</a>
|
|
</span>
|
|
</div>
|
|
<div id="panelInfo" class="panel-collapse collapse in">
|
|
<div class="panel-body padding-sm">
|
|
<div class="messages-list">
|
|
<div class="form-group">
|
|
@Html.LabelFor(model => model.FirstName, new { @class = "col-sm-2 control-label" })
|
|
<div class="col-sm-10">
|
|
@Html.TextBoxFor(model => model.FirstName, new { @class = "form-control", @readonly = "true" })
|
|
@Html.ValidationMessageFor(model => model.FirstName)
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
@Html.LabelFor(model => model.LastName, new { @class = "col-sm-2 control-label" })
|
|
<div class="col-sm-10">
|
|
@Html.TextBoxFor(model => model.LastName, new { @class = "form-control", @readonly = "true" })
|
|
@Html.ValidationMessageFor(model => model.LastName)
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
@Html.LabelFor(model => model.IsActiveEmployee, new { @class = "col-sm-2 control-label" })
|
|
<div class="col-sm-10">
|
|
@Html.CheckBoxFor(model => model.IsActiveEmployee, new { @class = "switcher-disabled-default", disabled = "disabled" })
|
|
@Html.ValidationMessageFor(model => model.IsActiveEmployee)
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
@Html.LabelFor(model => model.StartDate, new { @class = "col-sm-2 control-label" })
|
|
<div class="col-sm-10">
|
|
@Html.EditorFor(model => model.StartDate, new { @class = "form-control", Disabled = true })
|
|
@Html.ValidationMessageFor(model => model.StartDate)
|
|
</div>
|
|
</div>
|
|
<div class="form-group" style="@(Model.PermanentResource ? "display:none;" : "")">
|
|
@Html.LabelFor(model => model.EndDate, new { @class = "col-sm-2 control-label" })
|
|
<div class="col-sm-10">
|
|
@Html.EditorFor(model => model.EndDate, new { @class = "form-control", Disabled = true })
|
|
@Html.ValidationMessageFor(model => model.EndDate)
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<fieldset id="fsTeams">
|
|
<div class="form-group">
|
|
<label class="col col-sm-2 control-label">Team</label>
|
|
<div class="col col-sm-10 teamsList">
|
|
<label class="control-label">@(Model.Team != null ? Model.Team.Name : "None")</label>
|
|
@if (Model.TeamChangeQueued != null)
|
|
{
|
|
<br /><i>From @(Model.TeamChangeQueued.ChangeDate.ToShortDateString()) this resource will be a member of the Team '@(Model.TeamChangeQueued.Name)'</i>
|
|
}
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div>
|
|
<fieldset id="fsExpenditures">
|
|
<div class="form-group">
|
|
<label class="col col-sm-2 control-label">Expenditure Category</label>
|
|
<div class="col col-sm-10">
|
|
<span>@Model.ExpenditureCategory.GetView().ExpCategoryWithCcName</span>
|
|
@if (SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceInformation, AccessLevel.Write))
|
|
{
|
|
<a class='btn btn-xs btn-success @(resourceHasAnyAllocations ? "disabled" : "")' href="javascript:changePeopleResourceExpCat();" title="Change Expenditure Category" style="position: absolute; margin-left: 6px; top: -2px;"><i class="fa fa-arrow-up"></i> Change</a>
|
|
<div class="padding-xs-vr" style='@(!resourceHasAnyAllocations ? "display: none;" : "")'>
|
|
<i>
|
|
<span>
|
|
Expenditure Category cannot be changed because this Resource has
|
|
@(resourceIsAllocatedToScenarios && resourceHasActuals && resourceHasMixAllocations ? "Allocations in Projects, Mixes and has Actuals." : "")
|
|
@(resourceIsAllocatedToScenarios && resourceHasActuals && !resourceHasMixAllocations ? "Allocations in Projects and Actuals." : "")
|
|
@(resourceIsAllocatedToScenarios && !resourceHasActuals && resourceHasMixAllocations ? "Allocations in Projects and Mixes." : "")
|
|
@(!resourceIsAllocatedToScenarios && resourceHasActuals && resourceHasMixAllocations ? "Allocations in Mixes and Actuals." : "")
|
|
@(resourceIsAllocatedToScenarios && !resourceHasActuals && !resourceHasMixAllocations ? "Allocations in Projects." : "")
|
|
@(!resourceIsAllocatedToScenarios && resourceHasActuals && !resourceHasMixAllocations ? "Actuals." : "")
|
|
@(!resourceIsAllocatedToScenarios && !resourceHasActuals && resourceHasMixAllocations ? "Allocations in Mixes." : "")
|
|
</span><br/>
|
|
<span>Please remove them manually prior to changing the Expenditure Category</span>
|
|
</i>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
@if (SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceInformation, AccessLevel.Write))
|
|
{
|
|
<div class="col col-lg-offset-2 col-sm-10">
|
|
<button class="btn btn-primary" onclick="editPeopleResource()"><i class="fa fa-pencil"></i> Edit</button>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
}
|
|
@if (SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceSkills, AccessLevel.Read))
|
|
{
|
|
<div class="panel widget-messages-alt" id="skills">
|
|
<div class="panel-heading">
|
|
<span class="panel-title ui-expander">
|
|
<a data-toggle="collapse" data-target="#panelSkills" class="collapsed">
|
|
<i class="panel-title-icon fa fa-laptop"></i>Resource Skills
|
|
</a>
|
|
</span>
|
|
</div>
|
|
<div id="panelSkills" class="panel-collapse collapse">
|
|
<div class="panel-body padding-sm" ng-controller="personalSkillsMatrixController" ng-init="init(@skillsMatrixJson)">
|
|
@Html.Partial("../Skills/_personalSkillsMatrix", skillsMatrixJson)
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
<div class="panel widget-messages-alt" id="time" data-section="capacityManagementView">
|
|
<div class="panel-heading">
|
|
<span class="panel-title ui-expander">
|
|
<a data-toggle="collapse" data-target="#panelTime" class="collapsed">
|
|
<i class="panel-title-icon fa fa-clock-o"></i>Resource Time
|
|
</a>
|
|
</span>
|
|
<span class="pull-right"> </span>
|
|
<div class="btn-group btn-group-xs pull-right" id="divCalendarMenu" style="display: none;">
|
|
<button class="btn btn-info dropdown-toggle" type="button" data-toggle="dropdown"><i class="fa fa-bars"></i> <i class="fa fa-caret-down"></i></button>
|
|
<ul class="dropdown-menu-calendar dropdown-menu dropdown-menu-right calendar-options-menu" id="visibilitydropdown_calendar"></ul>
|
|
</div>
|
|
</div>
|
|
<div id="panelTime" class="ac panel-collapse collapse">
|
|
<div class="panel-body padding-sm">
|
|
@Html.Partial("~/Views/ActivityCalendar/_capacityManagement.cshtml", acModel)
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
@if (SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceNonProjectTime, AccessLevel.Read))
|
|
{
|
|
<div class="panel widget-messages-alt" id="tranings">
|
|
<div class="panel-heading">
|
|
<span class="panel-title ui-expander">
|
|
<a data-toggle="collapse" data-target="#panelNonProjectTimes" class="collapsed">
|
|
<i class="panel-title-icon fa fa-rocket"></i>Non-Project Time Schedule
|
|
</a>
|
|
</span>
|
|
</div>
|
|
<div id="panelNonProjectTimes" class="panel-collapse collapse">
|
|
<div class="panel-body padding-sm">
|
|
@if (SecurityManager.CheckSecurityObjectPermission(Areas.RD_ResourceNonProjectTime, AccessLevel.Write))
|
|
{
|
|
<div class="row" style="margin-left:0px;">
|
|
<div class="form-group" style="float:left;margin-top:2px">
|
|
<a class="btn btn-primary" style="margin-bottom: 10px;" href="javascript:;" onclick="loadNonProjectTime('', '@Model.Id');">Schedule Non-Project Time</a>
|
|
</div>
|
|
|
|
<div class="form-group switcher-block" style="float:left;margin-left:10px;">
|
|
<input type="checkbox" id="NonProjectTimesHistory" class="switcher form-control" onchange="toggleHistory(false)" />
|
|
</div>
|
|
</div>
|
|
}
|
|
<div class="table-light table-responsive" id="resourceNPTime">
|
|
<h4>Upcoming</h4>
|
|
@Html.Partial("../PeopleResource/_NPTimeList")
|
|
</div>
|
|
<div class="table-light table-responsive" id="futureNPTime">
|
|
<h4>Permanent</h4>
|
|
@Html.Partial("../PeopleResource/_NPTimeList")
|
|
</div>
|
|
<div class="table-light table-responsive" id="divNonProjectTimesHistory">
|
|
<h4>History</h4>
|
|
@Html.Partial("../PeopleResource/_NPTimeList")
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
|
|
<div class="panel widget-messages-alt" id="loan-outs">
|
|
<div class="panel-heading">
|
|
<span class="panel-title ui-expander">
|
|
<a data-toggle="collapse" data-target="#panelLoanOuts" class="collapsed">
|
|
<i class="panel-title-icon fa fa-envelope"></i>Resource Loan-outs
|
|
</a>
|
|
</span>
|
|
</div>
|
|
<div id="panelLoanOuts" class="panel-collapse collapse">
|
|
<div class="panel-body padding-sm">
|
|
<div class="messages-list">
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@if (SecurityManager.CheckSecurityObjectPermission(Areas.Teams, AccessLevel.Read))
|
|
{
|
|
<div class="form-group" style="margin-bottom: 0;">
|
|
<div class="col-sm-offset-2 col-sm-10">
|
|
<a class="btn btn-primary" href="@(Request.QueryString["viewId"] == null ? Url.Action("Board", "Team", new { teamId = Model.TeamId }) : Url.Action("Board", "View", new { viewId = Request.QueryString["viewId"].ToString() }))"><i class="fa fa-backward"></i> Back to people resources</a>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
|
|
<!-- Modal -->
|
|
<div id="editScheduleNonProjectTime" class="modal fade" tabindex="-1" role="dialog" style="display: none;" data-backdrop="static">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content" id="nonProjectTimeReload">
|
|
</div> <!-- / .modal-content -->
|
|
</div> <!-- / .modal-dialog -->
|
|
</div> <!-- /.modal -->
|
|
<!-- / Modal -->
|
|
<!-- Warning modal alert -->
|
|
<div id="modal-warning" class="modal fade" tabindex="-1" role="dialog" style="display: none;">
|
|
<div class="modal-dialog">
|
|
@using (Ajax.BeginForm(new AjaxOptions()
|
|
{
|
|
HttpMethod = "POST",
|
|
OnBegin = "deleteNPTimeBegin();",
|
|
OnComplete = "deleteNPTimeCompleted();",
|
|
OnFailure = "deleteNPTimeFailure();",
|
|
OnSuccess = "deleteNPTimeSuccess();",
|
|
Url = Url.Action("DeleteNonProjectTime", "PeopleResource")
|
|
}))
|
|
{
|
|
@Html.AntiForgeryToken()
|
|
@Html.HiddenFor(model => model.Id)
|
|
<input type="hidden" id="deleteNPTimeId" name="deleteNPTimeId" />
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
|
|
<h4 class="modal-title">Delete Non-Project Time</h4>
|
|
</div>
|
|
<div class="modal-title"></div>
|
|
<div class="modal-body"><strong>Deleting this non-project time will affect all resources involved. Continue?</strong></div>
|
|
<div class="modal-footer">
|
|
<button type="submit" class="btn btn-danger">OK</button>
|
|
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
|
</div>
|
|
</div> <!-- / .modal-content -->
|
|
}
|
|
</div> <!-- / .modal-dialog -->
|
|
</div> <!-- / .modal -->
|
|
<!-- Modal -->
|
|
<!-- Modal -->
|
|
<div id="createScenario" class="modal fade" tabindex="-1" role="dialog" data-backdrop="static">
|
|
<div class="modal-dialog modal-lg">
|
|
<div class="modal-content" id="reloadForm">
|
|
</div> <!-- / .modal-content -->
|
|
</div> <!-- / .modal-dialog -->
|
|
</div> <!-- /.modal -->
|
|
<!-- / Modal -->
|
|
<!-- Modal -->
|
|
<div id="editPeopleResourceModal" class="modal fade" tabindex="-1" data-width="680" role="dialog" data-backdrop="static">
|
|
<div class="modal-content" id="editPeopleResourceForm">
|
|
</div>
|
|
</div>
|
|
|
|
<div id="PeopleResourceChangeExpCatModal" class="modal fade" tabindex="-1" data-width="680" role="dialog" data-backdrop="static">
|
|
<div class="modal-content" id="peopleResourceChangeExpCatForm">
|
|
</div>
|
|
</div>
|