127 lines
4.2 KiB
JavaScript
127 lines
4.2 KiB
JavaScript
$(function () {
|
||
var modalEl = document.getElementById('tx-modal');
|
||
|
||
if (!modalEl) {
|
||
return;
|
||
}
|
||
|
||
var modal = new bootstrap.Modal(modalEl);
|
||
var $form = $('#tx-form');
|
||
var $error = $('#tx-form-error');
|
||
|
||
function filterCategoryOptions(type) {
|
||
$('#tx-category option[data-type]').each(function () {
|
||
var match = $(this).data('type') === type;
|
||
$(this).prop('hidden', !match).prop('disabled', !match);
|
||
});
|
||
|
||
var $selected = $('#tx-category option:selected');
|
||
if ($selected.data('type') && $selected.data('type') !== type) {
|
||
$('#tx-category').val('');
|
||
}
|
||
}
|
||
|
||
function setType(type) {
|
||
$('#tx-type-tiles .pm-tile').removeClass('selected');
|
||
$('#tx-type-tiles .pm-tile[data-type="' + type + '"]').addClass('selected');
|
||
$('#tx-type-hidden').val(type);
|
||
|
||
var isTransfer = type === 'transfer';
|
||
|
||
$('#tx-category-field').toggle(!isTransfer);
|
||
$('#tx-category').prop('required', !isTransfer);
|
||
if (!isTransfer) {
|
||
filterCategoryOptions(type);
|
||
}
|
||
|
||
var needsF = type === 'expense' || isTransfer;
|
||
$('#tx-account-f-field').toggle(needsF);
|
||
$('#tx-account-f').prop('required', needsF);
|
||
|
||
var needsIn = type === 'income' || isTransfer;
|
||
$('#tx-account-in-field').toggle(needsIn);
|
||
$('#tx-account-in').prop('required', needsIn);
|
||
}
|
||
|
||
function resetForm() {
|
||
$form[0].reset();
|
||
$form.find('[name=id]').val('');
|
||
$error.hide().text('');
|
||
$form.find('[name=date]').val(new Date().toISOString().slice(0, 10));
|
||
setType('expense');
|
||
}
|
||
|
||
function populateEditForm($row) {
|
||
resetForm();
|
||
$form.data('mode', 'edit').attr('action', '/transactions/edit/' + $row.data('id'));
|
||
$form.find('[name=id]').val($row.data('id'));
|
||
$form.find('[name=date]').val($row.data('date'));
|
||
$form.find('[name=summa]').val($row.data('summa'));
|
||
|
||
setType($row.data('type'));
|
||
|
||
$form.find('[name=categorie_id]').val($row.data('categorie-id') || '');
|
||
$form.find('[name=account_f_id]').val($row.data('account-f-id') || '');
|
||
$form.find('[name=account_in_id]').val($row.data('account-in-id') || '');
|
||
|
||
$('#tx-modal-title').text('Редактировать операцию');
|
||
modal.show();
|
||
}
|
||
|
||
$(document).on('click', '.js-tx-add', function () {
|
||
resetForm();
|
||
$form.data('mode', 'create').attr('action', '/transactions/create');
|
||
$('#tx-modal-title').text('Новая операция');
|
||
modal.show();
|
||
});
|
||
|
||
$(document).on('click', '#tx-type-tiles .pm-tile', function () {
|
||
setType($(this).data('type'));
|
||
});
|
||
|
||
$(document).on('click', '.js-tx-edit', function (e) {
|
||
e.preventDefault();
|
||
populateEditForm($(this).closest('.stat-row'));
|
||
});
|
||
|
||
$(document).on('click', '.js-tx-delete', function (e) {
|
||
e.preventDefault();
|
||
|
||
var $row = $(this).closest('.stat-row');
|
||
var csrf = $form.find('[name=csrf_token]').val();
|
||
|
||
if (!window.confirm('Удалить операцию?')) {
|
||
return;
|
||
}
|
||
|
||
$.post('/transactions/delete/' + $row.data('id'), {csrf_token: csrf})
|
||
.done(function () { window.location.reload(); })
|
||
.fail(function () { window.alert('Не удалось удалить операцию'); });
|
||
});
|
||
|
||
$(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');
|
||
}
|
||
});
|
||
|
||
$(document).on('submit', '#tx-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();
|
||
});
|
||
});
|
||
|
||
resetForm();
|
||
});
|