52 lines
1.9 KiB
JavaScript
52 lines
1.9 KiB
JavaScript
$(function () {
|
||
var $form = $('#budgets-form');
|
||
|
||
if (!$form.length) {
|
||
return;
|
||
}
|
||
|
||
var $error = $('#budgets-form-error');
|
||
var csrf = $form.find('[name=csrf_token]').val();
|
||
var year = $form.find('[name=year]').val();
|
||
|
||
// Кнопки «Сохранить» больше нет — каждая ячейка сохраняется сама по себе при потере
|
||
// фокуса (change), формульная связанная статья пересчитывается на сервере и подставляется
|
||
// в свою (readonly) ячейку сразу, без перезагрузки страницы.
|
||
$(document).on('submit', '#budgets-form', function (e) {
|
||
e.preventDefault();
|
||
});
|
||
|
||
$(document).on('change', '.plan-input:not([readonly])', function () {
|
||
var $input = $(this);
|
||
var match = ($input.attr('name') || '').match(/^plan\[(\d+)\]\[(\d+)\]$/);
|
||
|
||
if (!match) {
|
||
return;
|
||
}
|
||
|
||
$error.hide().text('');
|
||
|
||
var data = {csrf_token: csrf, year: year};
|
||
data['plan[' + match[1] + '][' + match[2] + ']'] = $input.val();
|
||
|
||
$.post($form.attr('action'), data)
|
||
.done(function (response) {
|
||
if (!response.recalculated) {
|
||
return;
|
||
}
|
||
|
||
$.each(response.recalculated, function (categorieId, months) {
|
||
$.each(months, function (month, summ) {
|
||
$('input[name="plan[' + categorieId + '][' + month + ']"]').val(summ);
|
||
});
|
||
});
|
||
})
|
||
.fail(function (xhr) {
|
||
var errors = xhr.responseJSON && xhr.responseJSON.errors;
|
||
var message = errors ? Object.values(errors).join(' ') : 'Не удалось сохранить значение';
|
||
|
||
$error.text(message).show();
|
||
});
|
||
});
|
||
});
|