scinote-web/app/assets/javascripts/my_modules/stock.js

120 lines
4.7 KiB
JavaScript

/* global SmartAnnotation I18n MyModuleRepositories GLOBAL_CONSTANTS formatDecimalValue Decimal */
var MyModuleStockConsumption = (function() {
const CONSUMPTION_MODAL = '#consumeRepositoryStockValueModal';
const WARNING_MODAL = '#consumeRepositoryStockValueModalWarning';
function focusStockConsumption() {
// focus and move cursor to end of text
var $stockConsumption = $('#stock_consumption');
$stockConsumption[0].setSelectionRange(
$stockConsumption.val().length,
$stockConsumption.val().length
);
$stockConsumption.focus();
}
function initManageAction() {
$('.task-section').on('click', '.manage-repository-consumed-stock-value-link', function(e) {
e.preventDefault();
$.ajax({
url: $(this).attr('href'),
type: 'GET',
dataType: 'json',
success: (result) => {
var $manageModal = $(CONSUMPTION_MODAL);
$manageModal.find('.modal-content').html(result.html);
$manageModal.modal('show');
focusStockConsumption();
SmartAnnotation.init($(CONSUMPTION_MODAL + ' #comment')[0]);
$('#stock_consumption').on('input', function() {
let initialValue = new Decimal($(this).data('initial-value') || 0);
let initialStock = new Decimal($(this).data('initial-stock'));
let decimals = $(this).data('decimals');
this.value = formatDecimalValue(String(this.value), decimals);
let finalValue = initialValue.minus(new Decimal($(this).val() || 0)).plus(initialStock);
$('.stock-final-container .value')
.text(formatDecimalValue(String(finalValue), $('#stock_consumption').data('decimals')));
$('.stock-final-container').toggleClass('negative', finalValue <= 0);
$(this).closest('.sci-input-container').toggleClass('error', !($(this).val().length && this.value >= 0));
if ($(this).val().length === 0) {
$(this).closest('.sci-input-container')
.attr(
'data-error-text',
I18n.t('repository_stock_values.manage_modal.amount_error')
);
} else if (this.value <= 0) {
$(this).closest('.sci-input-container')
.attr(
'data-error-text',
I18n.t('repository_stock_values.manage_modal.negative_error')
);
}
$('.update-consumption-button').attr('disabled', !($(this).val().length && this.value >= 0));
});
$(CONSUMPTION_MODAL + ' form').on('ajax:success', function() {
MyModuleRepositories.reloadSimpletable();
MyModuleRepositories.reloadFullViewTable();
$manageModal.modal('hide');
$(WARNING_MODAL).modal('hide');
});
$(CONSUMPTION_MODAL + ' #comment').on('keyup change', function() {
$(this).closest('.sci-input-container').toggleClass(
'error',
this.value.length > GLOBAL_CONSTANTS.NAME_MAX_LENGTH
);
$('.update-consumption-button').attr(
'disabled',
this.value.length > GLOBAL_CONSTANTS.NAME_MAX_LENGTH || $('#stock_consumption').val() === ''
);
});
$('.update-consumption-button').on('click', function(event, skipValidation) {
if (parseFloat($('.stock-final-container .value').text()) < 0 && !skipValidation) {
event.preventDefault();
$manageModal.modal('hide');
$(WARNING_MODAL).modal('show');
let units = $(CONSUMPTION_MODAL).find('.consumption-container .units').text();
let value = $('#stock_consumption').val();
$(WARNING_MODAL).find('.modal-body p').html(
I18n.t('my_modules.repository.stock_warning_modal.description_html', { value: `${value} ${units}` })
);
}
});
}
});
});
}
function initWarningModal() {
$(WARNING_MODAL).on('keydown', function(e) {
if (e.key === 'Escape') {
$(WARNING_MODAL).modal('hide');
$(CONSUMPTION_MODAL).modal('show');
focusStockConsumption();
} else if (e.key === 'Enter') {
$('.update-consumption-button').trigger('click', [true]);
}
});
$(WARNING_MODAL).on('click', '.cancel-consumption', function(e) {
$(WARNING_MODAL).modal('hide');
$(CONSUMPTION_MODAL).modal('show');
focusStockConsumption();
}).on('click', '.confirm-consumption-button', function() {
$('.update-consumption-button').trigger('click', [true]);
});
}
return {
init: () => {
initManageAction();
initWarningModal();
}
};
}());
MyModuleStockConsumption.init();