EnVisageOnline/Main-RMO/Source/EnVisage/Views/Project/ImportActuals.cshtml

368 lines
16 KiB
Plaintext

@using EnVisage.Code.HtmlHelpers
@using Microsoft.AspNet.Identity
@using EnVisage.Code
@model EnVisage.Models.ImportActualsModel
@{
ViewBag.Title = "Import Actuals";
}
<div id="erorMsgPlaceholder"></div>
<script src="@Url.Content("~/Scripts/sliders.js")" type="text/javascript"></script>
@section Scripts
{
<script type="text/javascript">
// Structs and scalar values combined inside object to pass values to js-functions by ref
var slidersData = new Object();
slidersData.allocations = [];
slidersData.sliders = [];
slidersData.movableSliders = [];
slidersData.warnMessage = "By moving this slider, you will adjust previously set values for other parts.";
var first = true;
init.push(function() {
first = true;
$('#btnsave').click(function () {
if ($(this).parents('form').valid())
blockUI();
});
$('#uomHours').switcher({
on_state_content: '# Hours',
off_state_content: '# Resources'
});
$('#uomHours').parent().css("width", "93px");
$('#firstRowHeaders').switcher({
on_state_content: 'Yes',
off_state_content: 'No'
});
$('#firstRowHeaders').parent().css("width", "93px");
$('#resetActuals').switcher({
on_state_content: 'Yes',
off_state_content: 'No'
});
$('#resetActuals').parent().css("width", "93px");
@if(Model != null){
int i = 0; int j = 0;
foreach (var project in Model.Projects)
{
j = 0;
<text>
first = true;
slidersData.allocations['@i'] = {};
slidersData.sliders['@i'] = {};
slidersData.movableSliders['@i'] = {};
</text>
foreach (var part in project.ProjectParts)
{
<text>
var options@(i.ToString() + j.ToString()) = {
orientation: $('body').hasClass('right-to-left') ? "auto right" : 'auto auto',
startDate: '@Html.ValueFor(x => x.Projects[i].ProjectParts[j].StartDate)',
endDate: '@Html.ValueFor(x => x.Projects[i].ProjectParts[j].EndDate)'
};
$('#@Html.ClientIdFor(x => x.Projects[i].ProjectParts[j].StartDate)').parent().datepicker(@("options" + i.ToString() + j.ToString()));
slidersData.allocations['@i']['@part.PartId.ToString()'] = (first) ? 100 : 0;
first = false;
</text>
j++;
}
<text>
first = true;
$('.ui-slider'+'@i').each(function (i, div) {
$(this).slider({
'range': 'min',
'min': 0,
'max': 100,
'value': (first) ? 100 : 0,
change: onDependentChange,
slide: onDependentSlide,
start: onSliderStarted, // Added via ENV-672
stop: onSliderStopped // Added via ENV-672
});
first = false;
});
first = true;
slidersData.sliders['@i'] = $('.ui-slider' + '@i');
slidersData.movableSliders['@i'] = slidersData.sliders['@i'];
</text>
i++;
}
}
$('[id^=Projects_].single-line').addClass('form-control date');
//$('[id^=Projects_].single-line').style({ width: "150px;"});
$('.projectclick').click(function (event) {
onProjectClicked(this);
});
$('.partclick').click(function (event) {
onPartClicked(this);
});
});
// Antoshkin. ENV-672. Event handler for start moving slider event
function onSliderStarted(event, ui) {
registerSliderStartMovement(slidersData);
}
// Antoshkin. ENV-672. Event handler for stop moving slider event
function onSliderStopped(event, ui) {
var index = ui.handle.parentElement.childNodes[1].id.split("_")[1];
slidersData.activeSliderId = ui.handle.parentElement.id.split("_")[0];
slidersData.activeIndex = index;
registerSliderStopMovement(slidersData);
}
function onDependentSlide(event, ui) {
// Antoshkin. Refactored via ENV-672
var index = ui.handle.parentElement.childNodes[1].id.split("_")[1];
slidersData.activeSliderId = ui.handle.parentElement.id.split("_")[0];
slidersData.newActiveSliderValue = parseInt(ui.value);
slidersData.activeIndex = index;
recalculateDependentSliders(slidersData);
}
function onDependentChange(event, ui) {
var value = parseInt(ui.value);
showSliderValue(this, value);
}
function onPartClicked(ui) {
var checked = $(ui).prop('checked');
var id = $(ui).prev().attr('value');
var index = $(ui).attr('id').split('_')[1];
var partindex = $(ui).attr('id').split('_')[4];
var slider = $('#' + id + '_contaner');
if ($(ui).prop('checked')) {
$('.ui-slider' + index + partindex).show();
$('.ui-slider' + index + partindex).slider('enable');
$('[id^=Projects_' + index + '__ProjectParts_' + partindex + '].single-line').prop('disabled', false);
slidersData.sliders[index].push($('.ui-slider' + index + partindex)[0]);
slidersData.movableSliders[index].push($('.ui-slider' + index + partindex)[0]);
if ($('[id^=Projects_' + index + '].projectclick').prop('checked') == false)
$('[id^=Projects_' + index + '].projectclick').prop('checked', true);
}
else {
slidersData.sliders[index] = slidersData.sliders[index].not($('.ui-slider' + index + partindex));
slidersData.movableSliders[index] = slidersData.movableSliders[index].not($('.ui-slider' + index + partindex));
if ($('[id^=Projects_' + index + '].projectclick').prop('checked') == true)
{
var anychecked = false;
$('[id^=Projects_' + index + '].partclick').each(function (i, div) {
if ($(this).prop("checked")) anychecked = true;
});
if (!anychecked) $('[id^=Projects_' + index + '].projectclick').prop('checked', false);
}
//distributing among others
if ($('.ui-slider' + index + partindex).children(".sliderValue").val() > 0 && slidersData.sliders[index].length > 0) {
var valToDistribute = $('.ui-slider' + index + partindex).children(".sliderValue").val();
$(slidersData.sliders[index]).each(function (i, sldr) {
var currid = $(this).attr('id').split('_')[0];
var valToAdd = (slidersData.sliders[index].length == i) ? valToDistribute : Math.ceil(valToDistribute / (slidersData.sliders[index].length - i));
$(this).slider('value', parseInt($(this).children(".sliderValue").val()) + valToAdd);
slidersData.allocations[index][currid] += valToAdd;
valToDistribute -= valToAdd;
});
$('.ui-slider' + index + partindex).slider('value', 0);
slidersData.allocations[index][id] = 0;
}
$('.ui-slider' + index + partindex).slider('disable');
$('.ui-slider' + index + partindex).hide();
$('[id^=Projects_' + index + '__ProjectParts_' + partindex + '].single-line').prop('disabled', true);
}
//raspidarasit znachenie i zablokirovat
}
function onProjectClicked(ui) {
var index = $(ui).attr('id').split('_')[1];
$('[id^=Projects_' + index + '].partclick').prop('checked', $(ui).prop('checked'));
if ($(ui).prop('checked')) {
$('.ui-slider' + index).show();
$('.ui-slider' + index).slider('enable');
$('[id^=Projects_' + index + '].single-line').prop('disabled', false);
}
else {
$('.ui-slider' + index).slider('disable');
$('.ui-slider' + index).hide();
$('[id^=Projects_' + index + '].single-line').prop('disabled', true);
}
}
function datesOverlap() {
var index = $(ui).attr('id').split('_')[1];
$('[id^=Projects_' + index + '].partclick').prop('checked', $(ui).prop('checked'));
if ($(ui).prop('checked')) {
$('.ui-slider' + index).show();
$('.ui-slider' + index).slider('enable');
$('[id^=Projects_' + index + '].single-line').prop('disabled', false);
}
else {
$('.ui-slider' + index).slider('disable');
$('.ui-slider' + index).hide();
$('[id^=Projects_' + index + '].single-line').prop('disabled', true);
}
return true;
}
</script>
}
@using (Html.BeginForm("ImportActuals", "Project", FormMethod.Post, new { @class = "panel form-horizontal", enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="panel-body">
@if (ViewBag.ImportResult == null && ViewBag.ComletedImport == null)
{
<div class="form-group">
<label class="col-sm-2 control-label" for="Name">Actuals Data File</label>
<div class="col-sm-10">
<input type="file" accept="csv" name="fileUpload" id="fileUpload" data-val="true" data-val-required="Please select the file to process" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="Name">First row contains column headers</label>
<div class="col-sm-10">
<input type="checkbox" name="firstRowHeaders" id="firstRowHeaders">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="Name">Replace original values</label>
<div class="col-sm-10">
<input type="checkbox" name="zeroOut" id="resetActuals">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="Name">Import quantity as</label>
<div class=" col-sm-10">
<input type="checkbox" name="uomHours" id="uomHours">
</div>
</div>
@Html.ValidationSummary(false, "")
<div class="form-group" style="margin-bottom: 0;">
<div class="col-sm-offset-2 col-sm-10">
@if (SecurityManager.CheckSecurityObjectPermission(Areas.ImportActuals, AccessLevel.Write))
{
<button type="submit" class="btn btn-success" id="btnsave"><i class="fa fa-save"></i> Import</button>
}
</div>
</div>
}
else
{
int _i = 0;
if(Model != null && ViewBag.ComletedImport == null){
@Html.HiddenFor(x => x.Id)
@Html.HiddenFor(x => x.ResetActuals)
@Html.HiddenFor(x => x.SessionId)
@Html.HiddenFor(x => x.ImportSuccessful)
<div class="table-light table-responsive">
<table class="table dataTable" cellspacing="0" cellpadding="0" border="0">
<thead>
<tr>
<th style="width:2%"> </th>
<th style="width:30%;">Project Name</th>
<th style="width:25%;">Dates</th>
<th style="width:43%;">Distribution</th>
</tr>
</thead>
<tbody>
@foreach (var project in Model.Projects)
{
var _j = 0;
<tr>
<td>
@Html.HiddenFor(x => x.Projects[_i].ActualsScenarioId)
@Html.HiddenFor(x => x.Projects[_i].ProjectId)
@Html.CheckBoxFor(x => x.Projects[_i].Checked, new { @class = "projectclick" })
</td>
<td>
@Html.DisplayTextFor(x => x.Projects[_i].ProjectName)
</td>
<td>
@Html.DisplayTextFor(x => x.Projects[_i].StartDate)
-
@Html.DisplayTextFor(x => x.Projects[_i].EndDate)
</td>
<td>
</td>
</tr>
foreach (var part in project.ProjectParts)
{
<tr>
<td>
@Html.HiddenFor(x => x.Projects[_i].ProjectParts[_j].PartId)
@Html.HiddenFor(x => x.Projects[_i].ProjectParts[_j].ActualsScenarioId)
@Html.CheckBoxFor(x => x.Projects[_i].ProjectParts[_j].Checked, new { @class = "partclick" })
</td>
<td style="padding-left: 30px;">
@Html.DisplayTextFor(x => x.Projects[_i].ProjectParts[_j].PartName)
</td>
<td>
<div style="overflow: hidden;">
<div class="input-daterange input-group date floatdaterange">
@Html.EditorFor(x => x.Projects[_i].ProjectParts[_j].StartDate)
</div>
<div class="pull-left floatdaterange-addon" >To</div>
<div class="input-daterange input-group date floatdaterange">
@Html.EditorFor(x => x.Projects[_i].ProjectParts[_j].EndDate)
</div>
</div>
</td>
<td>
<div id="@part.PartId.ToString()_container" class="ui-slider@_i ui-slider@_i@_j ui-slider">
@Html.HiddenFor(x => x.Projects[_i].ProjectParts[_j].Distribution, new { @class = "sliderValue" })
<span class="sliderTitle">@((_j == 0) ? "100" : "0") %</span>
</div>
</td>
</tr>
_j++;
}
_i++;
}
</tbody>
</table>
</div>
<a href="@Url.Action("ImportActuals", "Project")" class="btn btn-primary" style="margin: 10px 0px;"><i class="fa fa-backward"></i> Back</a>
if (SecurityManager.CheckSecurityObjectPermission(Areas.ImportActuals, AccessLevel.Write))
{
<button type="submit" class="btn btn-success" id="btncomplete" style="margin: 10px 0px;" @((!ViewBag.ImportResult)? "disabled" : "")><i class="fa fa-save"></i> Complete Import</button>
}
}
if (ViewBag.ImportResult != null)
{
if (ViewBag.ImportResult == true)
{
<div class="note note-success"><h4 class="note-title">Data loaded successfully</h4><pre>@ViewBag.ImportLog</pre></div>
}
else
{
<div class="note note-danger"><h4 class="note-title">Data load failed</h4><pre>@ViewBag.ImportLog</pre></div>
}
}
if (ViewBag.ComletedImport != null)
{
if (ViewBag.ComletedImport == true)
{
<div class="note note-success"><h4 class="note-title">Data saved successfully</h4><pre>@ViewBag.ImportLog</pre></div>
}
else
{
<div class="note note-danger"><h4 class="note-title">Data save failed</h4><pre>@ViewBag.ImportLog</pre></div>
}
}
}
</div>
}