127 lines
4.3 KiB
JavaScript
127 lines
4.3 KiB
JavaScript
$(function () {
|
||
var modalEl = document.getElementById('account-modal');
|
||
|
||
if (!modalEl) {
|
||
return;
|
||
}
|
||
|
||
var modal = new bootstrap.Modal(modalEl);
|
||
var $form = $('#account-form');
|
||
var $error = $('#account-form-error');
|
||
var $rate = $('#account-rate-field');
|
||
var archiveEl = document.getElementById('archive-modal');
|
||
var archiveModal = archiveEl ? new bootstrap.Modal(archiveEl) : null;
|
||
|
||
function toggleRateField() {
|
||
$rate.toggle($form.find('[name=type_acc]').val() === 'savings');
|
||
}
|
||
|
||
function resetForm() {
|
||
$form[0].reset();
|
||
$form.find('[name=id]').val('');
|
||
$error.hide().text('');
|
||
toggleRateField();
|
||
}
|
||
|
||
$(document).on('click', '.js-account-add', function () {
|
||
resetForm();
|
||
$form.data('mode', 'create').attr('action', '/accounts/create');
|
||
$('#account-modal-title').text('Новый счёт');
|
||
$('#account-rate-group').show();
|
||
modal.show();
|
||
});
|
||
|
||
$(document).on('click', '.js-account-archive-open', function () {
|
||
if (archiveModal) {
|
||
archiveModal.show();
|
||
}
|
||
});
|
||
|
||
$(document).on('click', '.js-account-restore', function () {
|
||
var $row = $(this).closest('.archive-row');
|
||
var csrf = $form.find('[name=csrf_token]').val();
|
||
|
||
$.post('/accounts/restore/' + $row.data('id'), {csrf_token: csrf})
|
||
.done(function () {
|
||
window.location.reload();
|
||
})
|
||
.fail(function () {
|
||
window.alert('Не удалось восстановить счёт');
|
||
});
|
||
});
|
||
|
||
$(document).on('click', '.js-account-edit', function (e) {
|
||
e.preventDefault();
|
||
|
||
var $card = $(this).closest('.room-card');
|
||
|
||
resetForm();
|
||
$form.data('mode', 'edit').attr('action', '/accounts/edit/' + $card.data('id'));
|
||
$form.find('[name=title]').val($card.data('title'));
|
||
$form.find('[name=type_acc]').val($card.data('type'));
|
||
$form.find('[name=summa]').val($card.data('summa'));
|
||
$form.find('[name=currency]').val($card.data('currency'));
|
||
$form.find('[name=description]').val($card.data('description'));
|
||
$form.find('[name=include_in_total]').prop('checked', !!$card.data('include'));
|
||
$('#account-modal-title').text('Редактировать счёт');
|
||
// ставка правится не здесь — см. бюджет_текущий_план.md → Account_rates
|
||
$('#account-rate-group').hide();
|
||
toggleRateField();
|
||
modal.show();
|
||
});
|
||
|
||
$(document).on('click', '.js-account-delete', function (e) {
|
||
e.preventDefault();
|
||
|
||
var $card = $(this).closest('.room-card');
|
||
var title = $card.data('title');
|
||
var csrf = $form.find('[name=csrf_token]').val();
|
||
|
||
if (!window.confirm('Архивировать счёт «' + title + '»?')) {
|
||
return;
|
||
}
|
||
|
||
$.post('/accounts/delete/' + $card.data('id'), {csrf_token: csrf})
|
||
.done(function () {
|
||
window.location.reload();
|
||
})
|
||
.fail(function () {
|
||
window.alert('Не удалось архивировать счёт');
|
||
});
|
||
});
|
||
|
||
$(document).on('change', '[name=type_acc]', function () {
|
||
toggleRateField();
|
||
|
||
if ($form.data('mode') === 'create') {
|
||
$('#account-include').prop('checked', $(this).val() !== 'savings');
|
||
}
|
||
});
|
||
|
||
$(document).on('submit', '#account-form', function (e) {
|
||
e.preventDefault();
|
||
$error.hide().text('');
|
||
|
||
$.post($form.attr('action'), $form.serialize())
|
||
.done(function () {
|
||
window.location.reload();
|
||
})
|
||
.fail(function (xhr) {
|
||
var errors = xhr.responseJSON && xhr.responseJSON.errors;
|
||
var message = errors ? Object.values(errors).join(' ') : 'Не удалось сохранить счёт';
|
||
|
||
$error.text(message).show();
|
||
});
|
||
});
|
||
|
||
$(document).on('click', '.room-menu-btn', function () {
|
||
$(this).closest('.room-menu').toggleClass('open');
|
||
});
|
||
|
||
$(document).on('click', function (e) {
|
||
if (!$(e.target).closest('.room-menu').length) {
|
||
$('.room-menu.open').removeClass('open');
|
||
}
|
||
});
|
||
});
|