EnVisageOnline/Main/Source/EnVisage/Views/Scenarios/_rates.cshtml

376 lines
14 KiB
Plaintext

@using EnVisage.Code
@using EnVisage.Models
@model RatesModel
@{
ViewBag.Title = "Rates";
}
<div id="erorMsgPlaceholder"></div>
@Html.AntiForgeryToken()
<script type="text/javascript">
var datePickerOptions = {
format: 'm/d/yyyy',
autoclose: true,
startDate: '@(Constants.MIN_SELECTABLE_DATE)', // SA. ENV-1235
endDate: '@(Constants.MAX_SELECTABLE_DATE)' // SA. ENV-1235
};
var _rateDataChanged = false;
function onRateDataChanged() {
_rateDataChanged = true;
}
function resetRateDataChanged() {
_rateDataChanged = false;
}
function isRateDataChanged() {
return _rateDataChanged;
}
function onRateFailure(xhr) {
showErrorModal('Oops!', 'Error occurred while loading rates, please try again later. ErrorCode = 000003');
}
function onRateSuccess(data) {
$('#rateTable').html(data);
$('.validation-summary-errors').html('');
$('.input-validation-error').removeClass('input-validation-error');
$('.field-validation-error').remove();
$(".datepicker").datepicker(datePickerOptions);
checkButtons();
}
function LoadRates(expCatId) {
if (expCatId != null && expCatId != "")
$('#@Html.IdFor(t => t.ExpenditureCategoryId)').val(expCatId);
$('#@Html.IdFor(t => t.Mode)').val('@RatesModel.FormMode.ListRates');
StopEdit();
blockUI();
$('#ratesForm').submit();
}
function DeriveRates() {
blockUI();
$('#@Html.IdFor(t => t.Mode)').val('@RatesModel.FormMode.DeriveRate');
$('#ratesForm').submit();
}
function DeleteRates(selectedExpCatId) {
blockUI();
var url = '@Url.Action("DeleteAllLocalRates", "Scenarios", new { scenarioId = Model.ScenarioId, expenditureCategoryId = "expCatId" })';
var selectedExpCatId = $('#expCatList ul li.active').prop('id');
if (selectedExpCatId != undefined) {
url = url.replace("expCatId", selectedExpCatId);
url = url.replace('&amp;', '&');
//console.log(url);
$.post(url, null, function (data) {
unblockUI();
if (data != null) {
if (data.Status == 'Ok') {
LoadRates(selectedExpCatId);
} else if (data.Status == 'Error') {
console.log(data.Msg);
}
}
});
}
}
function hideButtons() {
$('#rateadd').hide();
$('#deriver').hide();
$('#resetter').hide();
$('#deleter').hide();
}
function checkButtons(scenarioId, expCatId) {
$('#rateadd').removeClass('disabled');
if ($('#localRates tr').length > 1) {
$('#deriver').addClass('disabled');
$('#resetter').removeClass('disabled');
$('#deleter').removeClass('disabled');
} else {
$('#deriver').removeClass('disabled');
$('#resetter').addClass('disabled');
$('#deleter').addClass('disabled');
}
}
function LoadRateEditModal(id, parentId) {
var url = '@Url.Action("EditRate", "Scenarios", new { id = "idval", parentId = Model.ScenarioId, expentureCategoryId = "expCatVal" })';
url = url.replace('idval', id);
url = url.replace('expCatVal', $('#@Html.IdFor(t => t.ExpenditureCategoryId)').val());
url = url.replace('&amp;', '&');
blockUI();
$.ajax({
type: "GET",
url: url,
success: function(data) {
$('#modalAddRate .divForCreate').html(data);
$(".innerForm input").removeData("validator");
$(".innerForm input").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parseDynamicContent('.innerForm');
//$(".datepicker").datepicker();
var tmpValue = $('div.datepicker #RateStartDate').val();
var sDate = new Date(tmpValue);
$('div.datepicker #RateStartDate').datepicker(datePickerOptions).on('changeDate',
function(evt) {
var _tmpValue = $('div.datepicker #RateStartDate').val();
var _sDate = new Date(_tmpValue);
$('div.datepicker #RateEndDate').data('datepicker').setStartDate(_sDate);
});
$('div.datepicker #RateEndDate').datepicker(datePickerOptions).data('datepicker').setStartDate(sDate);
if (id == '00000000-0000-0000-0000-000000000000') {
$("#RateStartDate").attr('disabled', true);
}
$('#rate').find('input[type=checkbox],input[type=text],select,textarea').on("change",
function() {
if (typeof onRateDataChanged === 'function')
onRateDataChanged();
});
$('#modalAddRate').modal("show");
unblockUI();
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
unblockUI();
showErrorModal('Oops!',
'Error occurred while loading rate, please try again later. ErrorCode = 000002');
}
});
}
function editReateConfirmed_Action() {
blockUI();
$(window).off('beforeunload');
var rateStartDate = new Date($('#modalAddRate #RateStartDate').val());
var rateEndDate = new Date($('#modalAddRate #RateEndDate').val());
var scenEndDate = new Date($('#EndDateStr').val());
if (rateStartDate >= rateEndDate) {
$('#modalAddRate .validation-summary-valid').addClass("validation-summary-errors");
$('#modalAddRate .validation-summary-valid').removeClass("validation-summary-valid");
$('#modalAddRate .validation-summary-errors li')
.html("Start date must be prior to end date");
$('#modalAddRate .validation-summary-errors li').css("display", "block");
unblockUI();
setupUnload();
return;
}
if (rateStartDate >= scenEndDate || rateEndDate > scenEndDate) {
$('#modalAddRate .validation-summary-valid').addClass("validation-summary-errors");
$('#modalAddRate .validation-summary-valid').removeClass("validation-summary-valid");
$('#modalAddRate .validation-summary-errors li')
.html("Rate dates must be within scenario duration");
$('#modalAddRate .validation-summary-errors li').css("display", "block");
unblockUI();
setupUnload();
return;
}
$("#RateStartDate").attr('disabled', false);
$('#saveLoader').show();
$('#btnsave').addClass('disabled');
var data = $('#rate').serialize();
var url = '@Url.Action("EditRate", "Scenarios")';
$.ajax({
type: "POST",
url: url,
data: data,
success: function(data) {
handleAjaxResponse(data,
function() {
if ($.isFunction(resetRateDataChanged)) {
resetRateDataChanged();
}
$('#modalAddRate').modal('hide');
window.location.href =
URI(window.location.href.replace(new RegExp(/#\/?\w*/), ''))
.setQuery('tab', 'rateTable');
},
null,
null,
$('form#rate'));
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
if ($.isFunction(resetRateDataChanged)) {
resetRateDataChanged();
}
$('#modalAddRate').modal('hide');
showErrorModal("Rate Saving Error", 'Error saving rate, please try again.');
},
complete: function() {
$('#saveLoader').hide();
unblockUI();
}
});
}
function editRateConfirmed() {
$.validator.unobtrusive.parseDynamicContent('form#rate');
if (!$('form#rate').valid()) {
return;
}
if (!changesMade) {
editReateConfirmed_Action();
} else {
bootbox.confirm({
message: '@Resources.Messages.Scenario_Edit_Confirm',
callback: function(result) {
if (result) {
editReateConfirmed_Action();
}
}
});
}
}
function LoadDeleteRateModal(id) {
var url = '@Url.Action("DeleteRate", "Scenarios", new { id = "idval" })';
url = url.replace('idval', id);
$.ajax({
url: url,
cache: false,
success: function (data) {
$('#modalDeleteRate .divForCreate').html(data);
$('#modalDeleteRate').modal("show");
},
error: function () {
showErrorModal();
},
complete: function () {
unblockUI();
},
});
}
function deleteRateConfirmed_Action() {
$(window).off('beforeunload');
var data = $('#deleteRateForm').serialize();
var url = '@Url.Action("DeleteRate", "Scenarios")';
blockUI();
$.ajax({
url: url,
type: 'post',
data: data,
success: function (data) {
$('#modalDeleteRate').modal('hide');
window.location.href = URI(window.location.href.replace(new RegExp(/#\/?\w*/), '')).setQuery('tab', 'rateTable');
},
error: function () {
showErrorModal();
},
complete: function () {
unblockUI();
}
});
}
function deleteRateConfirmed() {
if (!changesMade) {
deleteRateConfirmed_Action();
}
else {
bootbox.confirm({
message: '@Resources.Messages.Scenario_Edit_Confirm',
callback: function(result) {
if (result) {
deleteRateConfirmed_Action();
}
}
});
}
}
init.push(function () {
$(document).on('hide.bs.modal', '#modalAddRate', function (e) {
if ($(e.target).attr('id') != 'modalAddRate')
return true; // close modal form
if (typeof isRateDataChanged === 'function')
if (isRateDataChanged()) {
var msg = "Rate editing form contains unsaved changes, do you really want to close the form?";
bootbox.confirm(msg, function (result) {
if (result) {
if (typeof resetRateDataChanged === 'function') {
resetRateDataChanged();
}
$('#modalAddRate').modal('hide');
}
});
return false; // DO NOT close modal form
}
return true; // close modal form
});
hideButtons();
@if (!string.IsNullOrWhiteSpace(Model.ErrorMessage))
{
<text>showErrorModal('Sorry', '@Model.ErrorMessage');</text>
}
});
if (window.jQuery) {
$(function() {
@if (!string.IsNullOrWhiteSpace(Model.ErrorMessage))
{
<text>showErrorModal('Sorry', '@Model.ErrorMessage');</text>
}
});
}
</script>
<div class="panel-body" style="border: 0;">
<div class="row">
<div class="col-xs-6 col-md-4">
<div class="panel">
<div class="panel-heading">
<span class="panel-title">Expenditure Categories</span>
</div>
<div class="panel-body" id="expCatList">
<ul class="nav nav-pills nav-stacked">
@foreach (var category in Utils.GetScenarioExpenditures(Model.ScenarioId))
{
<li id="@category.Id" @(category.Id == Model.ExpenditureCategoryId ? "class=active" : "")><a href="javascript:void(0);" onclick="javascript:LoadRates('@category.Id');">@category.Name</a></li>
}
</ul>
</div>
</div>
</div>
@using (Ajax.BeginForm("ProcessRates", "Scenario",
new AjaxOptions
{
HttpMethod = "Post",
OnSuccess = "onRateSuccess",
OnFailure = "onRateFailure(xhr)",
OnComplete = "unblockUI",
}, new { @id = "ratesForm", @class = "innerForm" }))
{
@Html.HiddenFor(t => t.Mode)
@Html.HiddenFor(t => t.ExpenditureCategoryId)
@Html.HiddenFor(t => t.ScenarioId)
@Html.HiddenFor(t => t.EditRateId)
@Html.HiddenFor(t => t.DeleteRateId)
if (RatesModel.FormMode.ListRates == Model.Mode)
{
@Html.Partial("_ratelist", Model)
}
}
</div>
</div>
<div id="modalAddRate" class="modal fade" tabindex="-1" role="dialog" style="display: none;" data-backdrop="static">
<div class="modal-dialog divForCreate">
</div>
</div>
<div id="modalDeleteRate" class="modal fade" tabindex="-1" role="dialog" style="display: none;">
<div class="modal-dialog divForCreate">
</div>
</div>