376 lines
14 KiB
Plaintext
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('&', '&');
|
|
//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('&', '&');
|
|
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>
|