EnVisageOnline/Main/Source/EnVisage/Views/Project/_details.cshtml

258 lines
12 KiB
Plaintext

@using EnVisage.Code
@using EnVisage.Code.HtmlHelpers
@using Microsoft.AspNet.Identity
@model EnVisage.Models.ProjectModel
<div class="panel no-margin no-border">
<script type="text/javascript">
$('.create').click(function () {
if (!CheckLock(this.id, 'Project', '@Model.Id'))
return false;
$('.divForCreate_@Model.Id').load('@Url.Action("AddNote", "Project", new {Id = Model.Id})', function () {
$(".innerForm input").removeData("validator");
$(".innerForm input").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parseDynamicContent('.innerForm');
$('#btnAddNote').click(function () {
if ($(this).parents('form').valid())
blockUI();
});
});
$('#modalAddNote_@Model.Id').modal("show");
});
function editNote(buttonId, id) {
if (id == null || id == "")
return "";
if (!CheckLock(buttonId, 'Project', '@Model.Id'))
return false;
var text = "@Url.Action( "EditNote", "Project", new { Id = "JSVar" })";
text = text.replace("JSVar", id);
$('.divForCreate_@Model.Id').load(text, function () {
$(".innerForm input").removeData("validator");
$(".innerForm input").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parseDynamicContent('.innerForm');
$('#btnAddNote').click(function () {
if ($(this).parents('form').valid())
blockUI();
});
});
$('#modalAddNote_@Model.Id').modal("show");
};
function deleteNote(buttonId, Id) {
if (Id == null || Id == "")
return "";
if (!CheckLock(buttonId, 'Project', '@Model.Id'))
return false;
bootbox.confirm({
message: "Are you suse you want to delete this note?",
callback: function (result) {
if (result) {
var text = "@Url.Action( "DeleteNote", "Project", new { Id = "JSVar" })";
text = text.replace("JSVar", Id);
blockUI();
$('.divForCreate_@Model.Id').load(text, function (response, status, xhr) {
unblockUI();
if (status == "error") {
showErrorModal('Loading error', 'We are sorry but there was an error, please try again later.');
}
else {
window.location.reload();
}
});
}
},
className: "bootbox-sm"
});
};
function loadScenario(projectId) {
var url = "?Id=" + projectId;
$('#reloadForm').load('@Url.Action("LoadScenario", "Scenarios")' + url, function () {
initScenario();
$('#createScenario').modal('show');
//}
});
}
$(document).on('hide.bs.modal', "div[id^='modalAddNote_']", function (e) {
if ($(e.target).attr('id').indexOf("modalAddNote_") >= 0)
return true; // close modal form
if (typeof isNoteDataChanged === 'function')
if (isNoteDataChanged()) {
if (confirm("Note editing form contains unsaved changes, do you really want to close the form?")) {
if (typeof resetNoteDataChanged === 'function') {
resetNoteDataChanged();
$("div[id^='modalAddNote_']").modal("hide");
}
};
return false; // DO NOT close modal form
}
return true; // close modal form
});
</script>
<div class="panel-body">
<div class="row">
<div class="col-sm-12">
<div class="panel-group no-margin" id="projectDetailsAccordion_@Model.Id">
<div class="panel">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#projectDetailsAccordion_@Model.Id" href="#collapseTwo-info_@Model.Id">
Scenarios
</a>
</div>
<div id="collapseTwo-info_@Model.Id" class="panel-collapse collapse">
<div class="panel-body">
@if (SecurityManager.CheckSecurityObjectPermission(Areas.Scenarios, AccessLevel.Write))
{
<a class="btn btn-primary" href="javascript:;" onclick="loadScenario('@Model.Id');"><i class="fa fa-plus"></i> Add Scenario</a>
<h1></h1>
}
<div class="table-light table-responsive no-margin" id="scenarioslist_@Model.Id">
<table cellpadding="0" cellspacing="0" border="0" class="table table-striped table-bordered no-margin">
<thead>
<tr>
<th>Status</th>
<th>Scenario Type</th>
<th>Name</th>
<th>Freeze Revenue</th>
<th>Projected Revenue</th>
<th>Expected Gross Margin</th>
<th>Calculated Gross Margin</th>
<th>Start Date</th>
<th>End Date</th>
<th>Milestones</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var scenario in Model.Scenarios)
{
if(scenario.Type != ScenarioType.Actuals)
{
<tr>
<td><span id="status_@scenario.Id">@scenario.Status</span></td>
<td>@scenario.Type</td>
<td><a id="aDet_@scenario.Id" class="popover-warning popover-dark" onclick="return CheckLock(this.id, 'Scenario', '@scenario.Id')" href="/Scenarios/Details/@scenario.Id?backUrl=@(Url.Encode(Url.Action("Edit", "Project", new{id=Model.Id})))&backName=project">@scenario.Name</a></td>
<td>@(scenario.FreezeRevenue ? "Yes" : "No")</td>
<td>@(scenario.ProjectedRevenue.HasValue ? scenario.ProjectedRevenue.Value.ToString("#") : string.Empty) </td>
<td>@(scenario.ExpectedGrossMargin.HasValue ? scenario.ExpectedGrossMargin.Value.ToString("p") : string.Empty) </td>
<td>@(scenario.CalculatedGrossMargin.HasValue ? scenario.CalculatedGrossMargin.Value.ToString("p") : string.Empty) </td>
<td>@(scenario.StartDate.HasValue ? scenario.StartDate.Value.ToShortDateString() : string.Empty)</td>
<td>@(scenario.EndDate.HasValue ? scenario.EndDate.Value.ToShortDateString() : string.Empty) </td>
<td>@scenario.Shots</td>
<td>
@if(scenario.Status.HasValue && scenario.Status.Value == ScenarioStatus.Active)
{
<a id='@scenario.Id' onclick="if(CheckLock(this.id, 'Scenario', '@scenario.Id')) {ToggleStatus('@scenario.Id', this);}" data-toggle="popover" data-placement="left" class="btn btn-sm popover-warning popover-dark">Deactivate</a>
}
else if (scenario.Status.HasValue && scenario.Status.Value == ScenarioStatus.Inactive)
{
<a id='@scenario.Id' onclick="if(CheckLock(this.id, 'Scenario', '@scenario.Id')) {ToggleStatus('@scenario.Id', this);}" data-toggle="popover" data-placement="left" class="btn btn-sm btn-success popover-warning popover-dark">Activate</a>
}
<a id="btnDelete_@scenario.Id" onclick="return CheckLock(this.id, 'Scenario', '@scenario.Id')" data-toggle="popover" data-placement="left" class="btn btn-sm btn-danger popover-warning popover-dark" href="@Url.Action("Delete", "Scenarios", new {@id = scenario.Id})"><i class="fa fa-trash-o"></i> Delete</a>
</td>
</tr>
}
}
</tbody>
</table>
</div>
</div>
</div>
</div>
@{
List<Contact> projectContacts = Utils.GetProjectContacts(Model.Id);
}
@if (projectContacts.Count > 0)
{
<div class="panel">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#projectDetailsAccordion_@Model.Id" href="#collapseThree-info_@Model.Id">
Contacts
</a>
</div>
<div id="collapseThree-info_@Model.Id" class="panel-collapse collapse">
<div class="panel-body">
<div class="row">
<div class="col-md-6">
<h4>Internal contacts</h4>
<ul class="list-unstyled">
@foreach (var contact in projectContacts.Where(c => c.Type == ContactType.CompanyContact.GetHashCode()))
{
<li class="padding-sm-vr no-padding-t">
<strong>@(contact.FirstName + " " + contact.LastName)</strong><br/>
@if(!string.IsNullOrEmpty(contact.Email)) {<span><i class="fa fa-envelope"></i> <a href="mailto:@contact.Email">@contact.Email</a></span><br/>}
@if(!string.IsNullOrEmpty(contact.Phone)) {<span><i class="fa fa-phone"></i> @contact.Phone</span>}
</li>
}
</ul>
</div>
<div class="col-md-6">
<h4>External contacts</h4>
<ul class="list-unstyled">
@foreach (var contact in projectContacts.Where(c => c.Type == ContactType.ClientContact.GetHashCode()))
{
<li class="padding-sm-vr no-padding-t">
<strong>@(contact.FirstName + " " + contact.LastName)</strong><br/>
@if(!string.IsNullOrEmpty(contact.Email)) {<span><i class="fa fa-envelope"></i> <a href="mailto:@contact.Email">@contact.Email</a></span><br/>}
@if(!string.IsNullOrEmpty(contact.Phone)) {<span><i class="fa fa-phone"></i> @contact.Phone</span>}
</li>
}
</ul>
</div>
</div>
</div>
</div>
</div>
}
<div class="panel">
<div class="panel-heading">
<a class="accordion-toggle collapsed" data-toggle="collapse" data-parent="#projectDetailsAccordion_@Model.Id" href="#collapseFour-info_@Model.Id">
Notes
</a>
</div>
<div id="collapseFour-info_@Model.Id" class="panel-collapse collapse">
<div class="panel-body">
<a id="aAN_@Model.Id" class="btn btn-primary create popover-warning popover-dark" href="javascript:;"><i class="fa fa-plus"></i> Add Note</a>
<h1></h1>
<div class="table-light table-responsive" style="margin-bottom: 7px;" id="noteslist_@Model.Id">
<table cellpadding="0" cellspacing="0" border="0" class="table table-striped table-bordered no-margin">
<thead>
<tr>
<th>Date</th>
<th>Author</th>
<th>Title</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var note in Model.Notes)
{
<tr>
<td>@((note.DateAdded == null)? "N/A" : note.DateAdded.ToString("d"))</td>
<td>@note.Author.UserName</td>
<td>@note.Title</td>
<td>
<a id="aEN_@(Model.Id)_@note.Id" href="javascript:void(0)" onclick="editNote(this.id, '@note.Id');" data-placement="left" class="btn btn-primary lockable popover-warning popover-dark"><i class="fa fa-edit"></i> Edit</a>
<a id="aDN_@(Model.Id)_@note.Id" href="javascript:void(0)" onclick="deleteNote(this.id, '@note.Id');" data-placement="left" class="btn btn-danger lockable popover-warning popover-dark"><i class="fa fa-trash-o"></i> Delete</a>
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
<div id="modalAddNote_@Model.Id" class="modal fade" tabindex="-1" role="dialog" style="display: none;" data-backdrop="static">
<div class="modal-dialog divForCreate_@Model.Id" style="width:350px;">
@*@Html.Partial("_addNote", new NoteModel(Model.Id)) *@
</div> <!-- / .modal-dialog -->
</div> <!-- / .modal -->
</div>
</div>
</div>
</div>
</div>
</div>