324 lines
12 KiB
JavaScript
Vendored
324 lines
12 KiB
JavaScript
Vendored
$(document).ready(function() {
|
|
var dtLang = (typeof app_locale !== 'undefined' && app_locale === 'fa') ? {
|
|
search: 'جستجو:',
|
|
lengthMenu: 'نمایش _MENU_ ردیف',
|
|
info: 'نمایش _START_ تا _END_ از _TOTAL_ ردیف',
|
|
infoEmpty: 'ردیفی یافت نشد',
|
|
zeroRecords: 'ردیفی یافت نشد',
|
|
paginate: { first: 'اول', last: 'آخر', next: 'بعدی', previous: 'قبلی' }
|
|
} : {};
|
|
|
|
var dtDefaults = {
|
|
pageLength: 10,
|
|
lengthMenu: [[10, 25, 50, -1], [10, 25, 50, 'همه']],
|
|
order: [],
|
|
language: dtLang,
|
|
dom: 'lfrtip',
|
|
deferRender: true,
|
|
autoWidth: false
|
|
};
|
|
|
|
var tabTableMap = {
|
|
'#entities_tab': '#holding_entities_table',
|
|
'#units_tab': '#holding_units_table',
|
|
'#relations_tab': '#holding_relations_table',
|
|
'#assignments_tab': '#holding_assignments_table'
|
|
};
|
|
|
|
function destroyAllHoldingDataTables() {
|
|
$.each(tabTableMap, function(tabHash, tableSelector) {
|
|
var $table = $(tableSelector);
|
|
if ($table.length && $.fn.DataTable.isDataTable($table[0])) {
|
|
$table.DataTable().destroy();
|
|
}
|
|
});
|
|
}
|
|
|
|
function destroyOtherHoldingDataTables(activeTableSelector) {
|
|
$.each(tabTableMap, function(tabHash, tableSelector) {
|
|
if (tableSelector === activeTableSelector) {
|
|
return;
|
|
}
|
|
|
|
var $table = $(tableSelector);
|
|
if ($table.length && $.fn.DataTable.isDataTable($table[0])) {
|
|
$table.DataTable().destroy();
|
|
}
|
|
});
|
|
}
|
|
|
|
function initHoldingDataTable(tableSelector) {
|
|
if (!$.fn.DataTable) {
|
|
return;
|
|
}
|
|
|
|
var $table = $(tableSelector);
|
|
if (!$table.length) {
|
|
return;
|
|
}
|
|
|
|
destroyOtherHoldingDataTables(tableSelector);
|
|
|
|
if ($.fn.DataTable.isDataTable($table[0])) {
|
|
$table.DataTable().columns.adjust().draw(false);
|
|
return;
|
|
}
|
|
|
|
if ($table.find('tbody tr').not('.holding-table-empty').length === 0) {
|
|
return;
|
|
}
|
|
|
|
$table.DataTable(dtDefaults);
|
|
}
|
|
|
|
var tabAdjustTimer = null;
|
|
function scheduleTableInit(tabHash) {
|
|
clearTimeout(tabAdjustTimer);
|
|
tabAdjustTimer = setTimeout(function() {
|
|
var tableSelector = tabTableMap[tabHash];
|
|
if (!tableSelector) {
|
|
destroyAllHoldingDataTables();
|
|
return;
|
|
}
|
|
initHoldingDataTable(tableSelector);
|
|
}, 50);
|
|
}
|
|
|
|
var hash = window.location.hash;
|
|
if (hash && tabTableMap[hash]) {
|
|
$('a[href="' + hash + '"]').tab('show');
|
|
scheduleTableInit(hash);
|
|
}
|
|
|
|
$('a[data-toggle="tab"]').on('shown.bs.tab', function(e) {
|
|
if (e.target.hash) {
|
|
history.replaceState(null, '', e.target.hash);
|
|
scheduleTableInit(e.target.hash);
|
|
}
|
|
});
|
|
|
|
function destroyHoldingDatepickers($container) {
|
|
$container.find('.holding-date-picker').each(function() {
|
|
var $input = $(this);
|
|
if ($input.data('persianDatepicker')) {
|
|
try {
|
|
$input.persianDatepicker('destroy');
|
|
} catch (e) {}
|
|
}
|
|
if ($input.data('datepicker')) {
|
|
try {
|
|
$input.datepicker('destroy');
|
|
} catch (e) {}
|
|
}
|
|
});
|
|
}
|
|
|
|
function syncHoldingDatepickerValues($container) {
|
|
$container.find('.holding-date-picker').each(function() {
|
|
var $input = $(this);
|
|
$input.trigger('blur');
|
|
|
|
if ($input.data('persianDatepicker')) {
|
|
var pdInstance = $input.data('persianDatepicker');
|
|
try {
|
|
if (pdInstance.getState && pdInstance.getState().selected) {
|
|
var selected = pdInstance.getState().selected;
|
|
var formatted = selected.year + '/' +
|
|
String(selected.month).padStart(2, '0') + '/' +
|
|
String(selected.day).padStart(2, '0');
|
|
$input.val(formatted);
|
|
} else if (pdInstance.getSelectedDate) {
|
|
var date = pdInstance.getSelectedDate();
|
|
if (date) {
|
|
$input.val(date.year + '/' +
|
|
String(date.month).padStart(2, '0') + '/' +
|
|
String(date.day).padStart(2, '0'));
|
|
}
|
|
}
|
|
} catch (e) {}
|
|
}
|
|
|
|
if (!$.trim($input.val())) {
|
|
$input.val('');
|
|
}
|
|
});
|
|
}
|
|
|
|
function initHoldingDatepickers($container) {
|
|
destroyHoldingDatepickers($container);
|
|
|
|
var $inputs = $container.find('.holding-date-picker');
|
|
if (!$inputs.length) {
|
|
return;
|
|
}
|
|
|
|
var pickerOptions = {
|
|
autoClose: true,
|
|
initialValue: true,
|
|
observer: true,
|
|
timePicker: { enabled: false }
|
|
};
|
|
|
|
if (typeof initPersianDatepicker === 'function') {
|
|
initPersianDatepicker($inputs, pickerOptions);
|
|
} else if (typeof is_persian_lang !== 'undefined' && is_persian_lang && typeof $.fn.persianDatepicker !== 'undefined') {
|
|
$inputs.persianDatepicker($.extend({
|
|
calendarType: 'persian',
|
|
format: typeof datepicker_date_format !== 'undefined' ? datepicker_date_format : 'YYYY/MM/DD'
|
|
}, pickerOptions));
|
|
} else {
|
|
$inputs.datepicker({
|
|
autoclose: true,
|
|
format: typeof datepicker_date_format !== 'undefined' ? datepicker_date_format : 'yyyy/mm/dd',
|
|
container: $container.closest('.modal'),
|
|
todayHighlight: true
|
|
});
|
|
}
|
|
|
|
$('.datepicker-container').css('z-index', 2000);
|
|
}
|
|
|
|
var holdingModalSelector = '.holding_entity_modal, .holding_unit_modal, .holding_relation_modal, .holding_assignment_modal';
|
|
|
|
$(document).on('shown.bs.modal', holdingModalSelector, function() {
|
|
var $modal = $(this);
|
|
__select2($modal.find('.select2'));
|
|
setTimeout(function() {
|
|
initHoldingDatepickers($modal);
|
|
}, 100);
|
|
});
|
|
|
|
$(document).on('hidden.bs.modal', holdingModalSelector, function() {
|
|
destroyHoldingDatepickers($(this));
|
|
});
|
|
|
|
function applyUserHrmDefaults($modal) {
|
|
var userId = $modal.find('.holding-assignment-user').val();
|
|
var map = window.HOLDING_USER_HRM || {};
|
|
if (!userId || !map[userId]) {
|
|
return;
|
|
}
|
|
var hrm = map[userId];
|
|
if (hrm.org_unit_id) {
|
|
$modal.find('.holding-assignment-org-unit').val(hrm.org_unit_id).trigger('change');
|
|
}
|
|
if (hrm.designation_id) {
|
|
$modal.find('.holding-assignment-designation').val(hrm.designation_id).trigger('change');
|
|
$modal.find('.holding-assignment-title-custom').val('');
|
|
}
|
|
}
|
|
|
|
$(document).on('change', '.holding-assignment-user', function() {
|
|
applyUserHrmDefaults($(this).closest('.modal'));
|
|
});
|
|
|
|
$(document).on('change', '.holding-assignment-designation', function() {
|
|
var $modal = $(this).closest('.modal');
|
|
if ($(this).val()) {
|
|
$modal.find('.holding-assignment-title-custom').val('');
|
|
}
|
|
});
|
|
|
|
function submitHoldingForm(formSelector, modalSelector) {
|
|
$(document).on('submit', formSelector, function(e) {
|
|
e.preventDefault();
|
|
var $form = $(this);
|
|
var $submitBtn = $form.find('button[type="submit"]');
|
|
syncHoldingDatepickerValues($form);
|
|
|
|
$.ajax({
|
|
method: 'POST',
|
|
url: $form.attr('action'),
|
|
data: $form.serialize(),
|
|
dataType: 'json',
|
|
headers: { 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json' },
|
|
success: function(result) {
|
|
if (result.success) {
|
|
$(modalSelector).modal('hide');
|
|
toastr.success(result.msg);
|
|
setTimeout(function() {
|
|
window.location.hash = result.tab ? '#' + result.tab : '';
|
|
window.location.reload();
|
|
}, 600);
|
|
} else {
|
|
toastr.error(result.msg);
|
|
$submitBtn.prop('disabled', false);
|
|
}
|
|
},
|
|
error: function(xhr) {
|
|
var msg = LANG.something_went_wrong;
|
|
if (xhr.responseJSON) {
|
|
if (xhr.responseJSON.msg) {
|
|
msg = xhr.responseJSON.msg;
|
|
} else if (xhr.responseJSON.errors) {
|
|
msg = $.map(xhr.responseJSON.errors, function(v) {
|
|
return v[0];
|
|
}).join('<br>');
|
|
} else if (xhr.responseJSON.message) {
|
|
msg = xhr.responseJSON.message;
|
|
}
|
|
}
|
|
toastr.error(msg);
|
|
$submitBtn.prop('disabled', false);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
submitHoldingForm('#holding_entity_form', '.holding_entity_modal');
|
|
submitHoldingForm('#holding_unit_form', '.holding_unit_modal');
|
|
submitHoldingForm('#holding_relation_form', '.holding_relation_modal');
|
|
submitHoldingForm('#holding_assignment_form', '.holding_assignment_modal');
|
|
|
|
function syncHrm() {
|
|
if (!HOLDING_LANG.sync_hrm_url) return;
|
|
$.ajax({
|
|
method: 'POST',
|
|
url: HOLDING_LANG.sync_hrm_url,
|
|
dataType: 'json',
|
|
headers: { 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json', 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },
|
|
success: function(result) {
|
|
if (result.success) {
|
|
toastr.success(result.msg);
|
|
window.location.hash = '#assignments_tab';
|
|
window.location.reload();
|
|
} else {
|
|
toastr.error(result.msg);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
$('#holding_sync_hrm_form').on('submit', function(e) { e.preventDefault(); syncHrm(); });
|
|
$('#holding_sync_hrm_btn').on('click', function() { syncHrm(); });
|
|
|
|
$(document).on('click', '.holding-delete', function() {
|
|
var url = $(this).data('href');
|
|
var tab = $(this).data('tab') || '';
|
|
swal({
|
|
title: LANG.sure,
|
|
text: typeof HOLDING_LANG !== 'undefined' ? HOLDING_LANG.confirm_delete : LANG.sure,
|
|
icon: 'warning',
|
|
buttons: true,
|
|
dangerMode: true
|
|
}).then(function(willDelete) {
|
|
if (!willDelete) return;
|
|
$.ajax({
|
|
method: 'DELETE',
|
|
url: url,
|
|
dataType: 'json',
|
|
headers: { 'X-Requested-With': 'XMLHttpRequest', 'Accept': 'application/json' },
|
|
success: function(result) {
|
|
if (result.success) {
|
|
toastr.success(result.msg);
|
|
window.location.hash = tab ? '#' + tab : '';
|
|
window.location.reload();
|
|
} else {
|
|
toastr.error(result.msg);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
});
|
|
});
|