// Глобальные переменные и операции if (!window.location.origin) { window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port : ''); } var curUrl = window.location.pathname.split('/'); window.onunload = function() { localStorage['JustCRM_lastURL'] = document.location; }; // Запоминаем последнего клиента, который был просмотрен в справочнике клиентов, или call-центра // При это это не должна быть дочерняя страница, например почтовый клиент if (curUrl.length > 2 && curUrl.length < 5 && (curUrl[1] == 'clients' || curUrl[1] == 'callcenter')) sessionStorage['JustCRM_lastClient_id'] = curUrl[3]; // Если указано, что необходимо вернуться по определенному URL, то определяем глобальную переменную и удаляем куки if (getCookie('toBack')) { var toBack = getCookie('toBack'); deleteCookie('toBack'); } // Изменение в функционале ядра jQuery // Регистронезависимый метод contains $.expr[":"].contains = $.expr.createPseudo(function(arg) { return function(elem) { return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; }; }); // Событие появления элемента (function($) { var defaults = { callback: function() {}, runOnLoad: true, frequency: 100, previousVisibility: null }; var methods = {}; methods.checkVisibility = function(element, options) { if (jQuery.contains(document, element[0])) { var previousVisibility = options.previousVisibility; var isVisible = element.is(':visible'); options.previousVisibility = isVisible; if (previousVisibility == null) { if (options.runOnLoad) { options.callback(element, isVisible); } } else if (previousVisibility !== isVisible) { options.callback(element, isVisible); } setTimeout(function() { methods.checkVisibility(element, options); }, options.frequency); } }; $.fn.visibilityChanged = function(options) { var settings = $.extend({}, defaults, options); return this.each(function() { methods.checkVisibility($(this), settings); }); }; })(jQuery); // Изменение в функционале ядра jQuery - Конец $(function() { // Глобальный таймер событий setInterval(function() { // Запрос на число новыйх сообщений в чате var urii = window.location; var urlMessage = urii.protocol + '//' + urii.hostname + '/api/chat1/sse/apiChat.php?GUID=' + guid + '&allNewMessage=true'; $.ajax({ url: urlMessage, type: 'GET', data: '', cache: false, success: function(respond, textStatus, jqXHR) { if (respond != '0') { $('#addMessengerMarker').text(respond).show(); } else { $('#addMessengerMarker').text('0').hide(); } }, error: function(jqxhr, status, errorMsg) { console.log(jqxhr, status, errorMsg); }, complete: function() {} }); }, 3000); // Распознавание адреса $('.search-map').on('click', function() { send_request($(this).parent().prev('input').val(), 'data-exchange', 'send_request_dadata'); var waiting = setInterval(function() { if (typeof(dataResult) != 'undefined' && typeof(dataResult.suggestions) != 'undefined' && typeof(dataResult.suggestions[0]) != 'undefined') { if (typeof(dataResult.error) != 'undefined') { clearTimeout(waiting); dataResult = {}; } popup('good', 'Успешно!', 'Адрес распознан и обработан!', true, false); $('#order-delivery-address').val(dataResult.suggestions[0].unrestricted_value); $('#order-delivery-coords').val(dataResult.suggestions[0].data.geo_lat + ',' + dataResult.suggestions[0].data.geo_lon); clearTimeout(waiting); dataResult = {}; $('#order-delivery-address').trigger('input'); } }, 100); }); // Распознавание адреса с целью определения региона $('.search-map1').on('click', function() { send_request($(this).parent().prev('input').val(), 'data-exchange', 'send_request_dadata'); var waiting = setInterval(function() { if (typeof(dataResult) != 'undefined' && typeof(dataResult.suggestions) != 'undefined' && typeof(dataResult.suggestions[0]) != 'undefined') { if (typeof(dataResult.error) != 'undefined') { clearTimeout(waiting); dataResult = {}; } popup('good', 'Успешно!', 'Адрес распознан и обработан!', true, false); $('#address').val(dataResult.suggestions[0].unrestricted_value); $('#address_city').val(dataResult.suggestions[0].data.city); clearTimeout(waiting); dataResult = {}; } if (typeof(dataResult) != 'undefined' && typeof(dataResult.suggestions) != 'undefined' && typeof(dataResult.suggestions[0]) == 'undefined') { popup('bad', 'Внимание!', 'Не удалось распознать адрес!
Введите координаты вручную.', true, false); clearTimeout(waiting); dataResult = {}; } }, 100); }); // Пикеры даты и времени и прочее... $('.date').datepicker({ minDate: '0', beforeShow: function(input, obj) { $(input).after($(input).datepicker('widget')); } }); $('.date1').datepicker({ beforeShow: function(input, obj) { $(input).after($(input).datepicker('widget')); } }); $('.date11').datepicker(); $('.date2').datepicker({ minDate: '1', beforeShow: function(input, obj) { $(input).after($(input).datepicker('widget')); } }); $('.time').on('click', function() { $(this).clockInput(false); }); // Закрываем таймпикер, если кликнули вне его пределов $(document).click(function(event) { if ($(event.target).closest('.time').length == 0 && $(event.target).closest('.jq-ci').length == 0) { $('.jq-ci').remove(); } }); $('.select22').select2(); // Часы digitalClock(); // Тек. год в футер $('#yearCur').text(new Date().getFullYear()); // Textarea c HTML-форматированием if ($('.editableHTML')) { $('.editableHTML').each(function(index, element) { $(element).parent('div').append('
'); }); $('.editable').each(function(index, element) { $(element).html($(element).prev().text()); this.contentEditable = true; }); } $(document).on('change keyup focus', '.editable', function() { $(this).prev('.editableHTML').html($(this).html()); }); // // Выделение пункта меню в зависимости от модуля // if (typeof(module) == 'undefined') module = 'main'; // $('[data-menu="' + module + '"]').children('.point').css({ 'background': '#8018a7', 'color': '#ffffff' }).children('i').css({ 'color': '#ffffff' }); // Выделение пункта меню в зависимости от модуля if (typeof(module) == 'undefined' || module.length === 0) module = 'tasks'; var currentModule = ($('[data-menu="' + module + '"]').length > 0) ? $('[data-menu="' + module + '"]') : $('[data-menu="' + module + '/' + submodule + '"]'); if (currentModule.length === 0) currentModule = $('[data-menu="' + module + '_' + moduleFilter + '"]'); currentModule.children('.point').addClass('selected').css({ 'background': '#8018a7', 'color': '#ffffff' }).children('i').css({ 'color': '#ffffff' }); // Если это меню с подпунктами // Раскладываем подменю currentModule.closest('[data-sub-menu]').css('display', 'inline'); // Не переходить по ссылке, если есть субменю, а раскрыть/сложить его $('[data-main-menu]').on('click', function(e) { e.preventDefault(); if ($(this).next('[data-sub-menu]').css('display') == 'inline') { $(this).next('[data-sub-menu]').hide(); return; } $('[data-sub-menu]').hide(); $(this).next('[data-sub-menu]').show(); }); // Если это пункты меню с переходом в один раздел (работают как фильтры) $('[data-menu]').on('click', function(e) { if ($(this).attr('href').indexOf('_filter') !== -1) { if (e.target.tagName == 'I') return; e.preventDefault(); var hrefFilter = $(this).attr('href').split('_'); location.href = hrefFilter[0] + '?filter_parametres=' + hrefFilter[1] + '_' + hrefFilter[2]; } }); // Панель статистики менеджера $('#my_stats').on('click', function(e) { $('#manager-stat').show(); }); $('#manager-stat-close').on('click', function(e) { $('#manager-stat').hide(); }); // Скрыть/показать главное меню if (getCookie("hideMenu") == "true") { //$('#main-page .c').last().css({'padding-left':'1.8em'}); $('#slide').css({ 'display': 'block' }); } $('body').on('click', '#slideOut', function() { $('#main-page .c').last().css({ 'padding-left': '0.7em' }); $('#menu-cell').addClass('menu-hide'); $('#slideIn').fadeIn(250); $('#slide').css({ 'left': '-14.5em', 'display': 'block' }); setCookie("hideMenu", "true"); }); $('body').on('click', '#slideIn', function() { $('#main-page .c').last().css({ 'padding-left': '0.5em' }); $('#menu-cell').removeClass('menu-hide').removeClass('menu-over'); $('#slideOut').fadeIn(100); $('#slideIn').fadeOut(100); $('#slide').css({ 'display': 'none' }); setCookie("hideMenu", "false"); }); $('#slide').on('mouseenter', function() { $('#main-page .c').last().css({ 'padding-left': '1.8em' }); $('#slideOut').fadeOut(100); $('#slideIn').fadeOut(100); $('#menu-cell').removeClass('menu-hide').addClass('menu-over'); $('#slide').css({ 'left': 0 }); $(document).mousemove(function(e) { if (e.pageX >= 320) { $('#slide').css({ 'left': '-14.5em', 'display': 'block' }); $('#slideIn').fadeIn(100); $('#menu-cell').addClass('menu-hide'); $(document).unbind('mousemove'); } }); }); // Добавление задачи $('#add_tasks').on('click', function() { if (document.location.pathname.indexOf('/_') >= 0) { setTimeout(function() { $('[name="tasks_object_url"').val(document.location); var name = $('body').find('h2').first().text(); if (!$('#tasks_object_dop').length) $('#tasks_object').append(''); $('#_tasks_object').val(name); }, 250); } }); // Если в исполнители выбрали всех, то выбираем всех $('.select22-select-all').on('click', function() { $('.select22 > option').prop('selected', true); $('.select22').trigger('change'); }); $('.select22-unselect-all').on('click', function() { $('.select22 > option').prop('selected', false); $('.select22').trigger('change'); }); // Выбор иконки статуса $('body').on('change', '.status-select', function() { var val = $(this).val(); var i = $(this).parent().find('i'); var color = JSON.parse(i.attr('data-color')); var icon = JSON.parse(i.attr('data-icon')); i.css({ 'color': color[val] }); i.attr('class', 'fa fa-' + icon[val] + ' fa-lg status'); $(this).css({ 'border-color': color[val] }); }); // Перехватываем нажания клавиш $(window).on('keydown', function(e) { if (e.which === 13) { var butt = $(document).find('[rel="yesconfirm"]'); butt.trigger('click'); } }); // Очистка переменных сессии фильтра без отправки формы $('body').on('click', '#clear', function() { var uri = window.location; uri.href = uri.protocol + '//' + uri.hostname + '/' + module + '/clear'; }); // Редактирование списка телефонов $('body').on('click', '.select-edit', function(e) { var content = ''; var phone = ''; var obj = $(this).parent().prevAll("select"); var type = JSON.parse(obj.attr('data-type')); var id = obj.attr('id'); var json = obj.parents('form').find('#' + id + 'JSON').val(); var data = (json) ? json : '[["","0"]]'; data = JSON.parse(data.replace(/\s+/g, '')); // Формируем контент для вывода редактирования списка со свойствами $.each(data, function(key, value) { var content1 = ''; var content2 = ''; var option = ''; phone = (!value[0]) ? '' : value[0]; var lastPhoneNumber = ''; if (getCookie('last_client')) lastPhoneNumber = ''; content1 += '
' + '
' + '' + lastPhoneNumber + '
' + '
' + '' + '' + '' + '
'; content += content1 + option + content2; }); // Показываем всплывающее сообщение c телефонами popup('atten', 'Редактирование', '
' + '' + '
' + content + '
' + '
', true, false, id, 'save_select', 'phone_form'); drag('select-edit'); }); // Добавить телефон $('body').on('click', '.add-select', function(e) { drag('select-edit'); if ($('#select-edit').children('section').length === 10) { popup('bad', '', 'Максимум 10 номеров.', true, false); return; } var obj = $(this).parents('section'); var objNew = obj.clone(); objNew.find('input').val(''); obj.after(objNew); }); // Удалить телефон $('body').on('click', '.del-select', function(e) { if ($('#select-edit').children('section').length === 1) { popup('bad', '', 'Минимум 1 строка.', true, false); return; } $(this).parents('section').remove(); }); // Подстановка номера телефона для звонка $('#phone').on('change', function() { $(this).siblings('span').attr('data-call', $('option:selected', this).val()); }); // Вставить в поле последний входящий телефон $(document).on('click', '.add-phone', function() { $(this).parent('div').children('input').val(getCookie('last_client')); }); // Открываем страницу с контентом по имени и id $('body').on('click', '[data-id]', function(e) { e.stopPropagation(); //$(this).attr('data-id'); // Для элемента формы, когда надо выбрать строку (например radio) if (e.target.className.indexOf('select') !== -1) return; var uri = window.location; var m = ($(this).attr('data-module')) ? $(this).attr('data-module') : module; uri.href = uri.protocol + '//' + uri.hostname + '/' + m + '/' + $(this).attr('data-id'); }); // Копирование записи $('body').on('click', '[data-copy]', function(e) { e.stopPropagation(); popup('atten', 'Внимание!', 'Запись будет скопирована.', true, false, $(this).attr('data-copy') + ' | ' + $(this).attr('data-table'), 'send_request', 'data-exchange', 'data-copy'); }); // Удаление записи $('body').on('click', '[data-trash]', function(e) { e.stopPropagation(); popup('atten', 'Внимание!', 'Данное действие необратимо!
Вы подтверждаете удаление записи?', true, false, $(this).attr('data-trash') + ' | ' + $(this).attr('data-table'), 'send_request', 'data-exchange', 'data-trash'); }); // Удаление записи $('body').on('click', '[data-trash-science]', function(e) { e.stopPropagation(); popup('atten', 'Внимание!', 'Данное действие необратимо!
Вы подтверждаете удаление записи?', true, false, $(this).attr('data-trash-science') + ' | ' + $(this).attr('data-table'), 'send_request', 'data-exchange', 'data-trash-science'); }); // Удаление записи без отправки на пред. документ $('body').on('click', '[data-trash-no-back]', function(e) { e.stopPropagation(); popup('atten', 'Внимание!', 'Данное действие необратимо!
Вы подтверждаете удаление записи?', true, false, $(this).attr('data-trash-no-back') + ' | ' + $(this).attr('data-table'), 'send_request', 'data-exchange', 'data-trash-no-back'); }); // Редактирование записи $('body').on('click', '[data-edit]', function(e) { e.stopPropagation(); var formFormType = $(this).parents('table').attr('data-form-type'); var formName = $(this).parents('table').attr('data-form'); var formType = $(this).parents('table').attr('data-type'); var url = $(this).attr('data-edit'); var uri = window.location; var formType = (formFormType) ? '/' + formFormType : ''; uri.href = uri.protocol + '//' + uri.hostname + '/' + module + '/' + formName + '/' + url + formType; }); // Если задана переменная и есть такая форма, то отображаем её if (typeof curUrl[2] !== 'undefined') { if ($('#' + curUrl[2] + ' article').length > 0) { popup('form', '', curUrl[2], false, false); $('.status-select').change(); } } // Если задана переменная in-form, то также отображаем данную форму // Может использоваться в нетипичных случаях, например в почтовом клиенте, размещенным в карточке клиента var inForm = findGetParameter('in-form'); if (inForm && $('#' + inForm).length > 0) { popup('form', '', inForm, false, false); $('.status-select').change(); } // Проигрывание аудио-записи $('.play-record').on('click', function() { $(this).html(''); }); //---- Аккордеон и виджет $('.accordion h3').click(function() { closeOpen($(this)); saveWidgetStatus($(this).parents('.accordion'), $(this)); }); function closeOpen(t) { var hS = t.parent('section').outerHeight() - 20; // Зависит от padding var h = t.next('div').children('.spanContent').height() + hS; var curGroup = t.parents('.accordion').attr('data-group'); $('.accordion[data-group="' + curGroup + '"]').each(function(index, element) { $(element).find('.acrdCont').css('height', '0px'); }) $('.accordion h3').removeClass('next'); t.addClass('next'); var hN = t.next('div'); if (hN.height() < 50) { hN.css('height', h); } } // Активируем перетаскивание виджета с сортировкой $('.drag').on('mousedown', function() { $('.drags').sortable({ revert: true, stop: dragReorder }).disableSelection(); $('.drags').sortable('enable'); }); // Изменение размера виджета $('.resize').click(function() { $(this).parents('.accordion').toggleClass('half-size'); resizeWidget(this); saveWidgetStatus($(this).parents('.accordion'), $(this)); }); // Скрытие виджета $('.hides').click(function() { var cur = $(this).parents('.accordion'); cur.addClass('accordion-hide'); saveWidgetStatus(cur, $(this)); // Выводим в соседнем табе настройки видимости виджетов var check = '' + cur.children('section').find('h3').text() + ''; $('.config').append(check); }); // Аккордеон и виджет считываем информацию if ($('.drags')) { if (!localStorage['JustCRM_accordion']) localStorage['JustCRM_accordion'] = '{}'; var curStat = JSON.parse(localStorage['JustCRM_accordion']); if (curStat[curUrl[1]]) { var pageObj = curStat[curUrl[1]]; for (key in pageObj) { for (k in pageObj[key]) { var cur = $('[rel="' + k + '"]'); // Устанавливаем порядковый индекс отображения виджета cur.attr('data-index', pageObj[key][k].index); // Размер по ширине if (pageObj[key][k].size === true) cur.addClass('half-size'); // Сложен/разложен if (pageObj[key][k].slideopen === true) closeOpen(cur.children('section').find('h3')); // Скрыт/отображен if (pageObj[key][k].visible === false) { cur.addClass('accordion-hide'); // Выводим в соседнем табе настройки видимости виджетов var check = '' + cur.children('section').find('h3').text() + ''; $('.config').append(check); } } } } else { $('.accordion h3').first().trigger('click'); } // Сортируем виджеты по индексам и отображаем var widjet = $('.drags'), widjetObj = widjet.children('.accordion'); widjetObj.sort(function(a, b) { var an = a.getAttribute('data-index'), bn = b.getAttribute('data-index'); if (an > bn) return 1; if (an < bn) return -1; return 0; }); widjetObj.detach().appendTo(widjet); } // Запись данных о состоянии виджета function saveWidgetStatus(obj, action) { var curAccordion = {}; if (localStorage['JustCRM_accordion']) curAccordion = JSON.parse(localStorage['JustCRM_accordion']); if (!curAccordion[curUrl[1]]) curAccordion[curUrl[1]] = {}; if (!curAccordion[curUrl[1]][obj.attr('data-group')]) curAccordion[curUrl[1]][obj.attr('data-group')] = {}; if (!curAccordion[curUrl[1]][obj.attr('data-group')][obj.attr('rel')]) curAccordion[curUrl[1]][obj.attr('data-group')][obj.attr('rel')] = {}; var visible = (obj.find('.acrdCont').height() !== 0) ? false : true; if (action.get(0).tagName != 'H3') visible = curAccordion[curUrl[1]][obj.attr('data-group')][obj.attr('rel')].slideopen; curAccordion[curUrl[1]][obj.attr('data-group')][obj.attr('rel')] = { 'size': obj.hasClass('half-size'), 'visible': obj.is(':visible'), 'slideopen': visible, 'index': obj.index() } obj.attr('data-index', obj.index()); // Сворачиваем виджеты в группе if (action.get(0).tagName == 'H3') { for (var key in curAccordion[curUrl[1]][obj.attr('data-group')]) { if (obj.attr('rel') != key) { curAccordion[curUrl[1]][obj.attr('data-group')][key].slideopen = 'false'; } } } localStorage['JustCRM_accordion'] = JSON.stringify(curAccordion); } function dragReorder() { $('.drags').sortable('disable'); $('.drags').children('.accordion').each(function(index, element) { saveWidgetStatus($(element), $(this)); }); } function resizeWidget(obj) { var curObj = $(obj).parents('.accordion').find('.acrdCont'); if (obj.scrollHeight > obj.clientHeight && curObj.height() > 0) { curObj.css({ 'height': $(obj).parents('.accordion').find('.spanContent').height() + 20 }); } } // Показываем нужный виджет при клике на панели скрытых $('body').on('click', '.view', function() { var hideAccordion = {}; hideAccordion = JSON.parse(localStorage['JustCRM_accordion']); hideAccordion[curUrl[1]][$(this).attr('data-group')][$(this).attr('rel')].visible = true; localStorage['JustCRM_accordion'] = JSON.stringify(hideAccordion); $('.accordion[rel="' + $(this).attr('rel') + '"').removeClass('accordion-hide'); $(this).parent().remove(); }); //---- Аккордеон и виджет - Конец // Табы $('.tabs-zag').click(function() { var i = $(this).index('.tabs-zag'); $('.tabs').hide(); $('.tabs:eq(' + i + ')').show(); }); //---- Формы // Действия при отметке доп. поле формы $('form').on('change', ':checkbox', function() { if ($(this).hasClass('d')) { if ($(this).is(':checked')) { $('.dop').slideDown(300); } else { $('.dop').slideUp(300); } } }); $('#user_form').find('#userGroup').on('change', function() { if ($('#userGroup').val() == 2) { $('.dop').slideDown(300); } else { $('.dop').slideUp(300); } }); // Вывод и сбор данных с чекбоксов // Выделить все чекбоксы $('.check_all').on('click', function() { if ($(this).children('input').prop("checked") === true) { $(this).children('input').prop("checked", false); } else { $(this).children('input').prop("checked", true); } $(this).parent('div').find('[type="checkbox"]').each(function(index, element) { if ($(element).prop("checked") === true) { $(element).prop("checked", false); } else { $(element).prop("checked", true); } }); }); // Расставляем чекбоксы if ($('form').find('.data-check')) var checkObj = $('form').find('.data-check'); checkObj.each(function(indx, element) { var value = $(element).val(); if ($(element).val().indexOf('{') < 0) $(element).val(''); var vars = ($(element).val() && $(element).val().indexOf('{') >= 0) ? JSON.parse($(element).val()) : '{}'; for (key in vars) { $('[name = "' + key + '"]').prop("checked", true); } }); // Собираем значения чекбоксов var checkAll = {}; $('.check-back, .check-back-line').find('input[type="checkbox"]').on('click', function() { var checkArr = $(this).attr('id').split('_'); var checkId = $(this).attr('id'); var blockName = checkArr[0] + '_' + checkArr[1]; var valAll = ($('[name = "' + blockName + '"]').val()) ? $('[name = "' + blockName + '"]').val() : '{}'; checkAll = JSON.parse(valAll); if ($(this).is(':checked')) { checkAll[checkId] = true; } else { delete checkAll[checkId]; } $('[name = "' + blockName + '"]').val(JSON.stringify(checkAll)); }); // Вывод и сбор данных с чекбоксов - Конец // Глобальная переменная куда будут располагаться данные файлов. var files = ''; // Получить выбранные файлы $('form').on('change', 'input[type="file"]', function(e) { var upload = document.getElementById($(this).attr('id')); files = this.files; function getFileNames() { return Array.prototype.map.call(upload.files, function(file) { return ' ' + file.name; }); } console.log('!!!', e); $(this).prev('label').children('div').html(getFileNames()); }); // Проверка и отправка данных формы $('form').validationEngine('attach', { promptPosition: 'bottomLeft', onValidationComplete: function(form, status) { if (status === true) { var formId = $(form).attr('id'); var datas = $(form).serializeArray(); switch (formId) { case 'send_request': // Если отправка данных заявки send_request(datas, formId); return; break; case 'add_furniture': // Если добавление фурнитуры saveFurniture(datas); return; break; case 'send_purchase_payment': // Если запрос отчета по взаиморасчетам send_request(datas, formId); return; break; case 'tasks_form': // Если форма добавления задач send_request(datas, 'data-exchange', 'data-add-task'); return; break; case 'push_message_form': // Если форма отправки Push-сообщений send_request(datas, 'data-exchange', 'data-send-push'); return; break; default: dataSend(formId, datas, files); } } } }); // Функция отправки данных и файлов function dataSend(url, datas, files) { var resetForm = false; // Отображаем прелоадер preloader('show'); // Создадим данные формы и добавим в них данные файлов из files var data = new FormData(); $.each(files, function(key, value) { data.append(key, value); }); // Создадим данные формы и добавим в них данные из других полей ввода $.each(datas, function(key, value) { // Если был выбран сброс формы с перезагрузкой if (value.name == 'reset-form') resetForm = true; data.append(value.name, value.value); }); // Правило для формы авторизации var uri = (url == 'login_form') ? '/' : '/' + module + '/' + url; // Правило для форм с классическим типом отправки данных if (url.indexOf('filter') === 0) { $('#' + url).unbind('submit').submit(); return; } // Отправляем запрос $.ajax({ url: uri + '?sharkey=' + sharkey, type: 'POST', data: data, cache: false, async: false, processData: false, contentType: false, success: function(respond, textStatus, jqXHR) { if (resetForm) { delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]); return; } switch (url) { case 'get_price': var date = new Date(); var dd = date.getDate(); if (dd < 10) dd = '0' + dd; var mm = date.getMonth() + 1; if (mm < 10) mm = '0' + mm; var yy = date.getFullYear(); if (yy < 10) yy = '0' + yy; popup('good', 'Успешно!', 'Файл доступен для скачивания по этой ссылке.', true, false); break; case 'login_form': window.location.href = window.location.origin; break; case 'file_upload': popup('good', 'Успешно!', 'Файл данных загружен и обработан.', true, false); break; case 'file_upload_nn': popup('good', 'Успешно!', 'Файл данных загружен и обработан.', true, false); break; case 'pays': popup('good', 'Успешно!', 'Система оплаты картами находится в разработке не активна!', true, false); break; case 'tasks-comments_form': switch (jqXHR.status) { case 201: popup('good', 'Успешно!', 'Задача завершена.', true, false); delayClosePopup(1000); delayReload(1000, uri); break; case 202: popup('good', 'Внимание!', 'Вы отклонили выполнение задачи.', true, false); delayClosePopup(1000); delayReload(1000, uri); break; } return; break; case 'sms_form': popup('good', 'Успешно!', 'Сообщение отправлено.', true, false); delayClosePopup(1000); delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]); break; case 'mail_new_form': popup('good', 'Успешно!', 'Письмо отправлено.', true, false); delayClosePopup(1000); delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]); break; case 'photocom_form': popup('good', 'Успешно!', 'Документ сохранен.', true, false); delayClosePopup(1000); //delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]); location.href = '/' + module + '/_details/' + curUrl[3]; break; case 'pays_form': popup('good', 'Успешно!', 'Документ сохранен.', true, false); delayClosePopup(1000); //delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]); location.href = '/' + module + '/_details/' + curUrl[3]; break; case 'recommendations_clients_form': case 'recommendations_clients1_form': case 'recommendations_clients2_form': case 'recommendations_clients3_form': case 'recommendations_clients4_form': case 'recommendations_clients11_form': case 'recommendations_clients22_form': case 'recommendations_clients44_form': popup('good', 'Успешно!', 'Рекомендации назначены.', true, false); delayClosePopup(1000); delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]); break; case 'timeline_clients_form': case 'timeline1_clients_form': case 'timeline11_clients_form': popup('good', 'Успешно!', 'Данные изменены.', true, false); delayClosePopup(1000); delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]); break; case 'recommendations_clients_edit_form': popup('good', 'Успешно!', 'Рекомендация изменена.', true, false); delayClosePopup(1000); delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3] + '#recommendations'); break; case 'recommendations_client_message_form': popup('good', 'Успешно!', 'Уведомление сохранено.', true, false); delayClosePopup(1000); delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]); break; default: // Если указано, что необходимо вернуться по определенному URL if (toBack) { window.location.href = toBack; return; } // Если редактировали форму на странице полной информации, то возвращаемся обратно на эту страницу if (document.referrer.indexOf('/_') >= 0 && data.get('GUID') != '') window.history.go(-1); delayClosePopup(100); delayReload(100, uri); } return; }, error: function(jqxhr) { switch (url) { case 'login_form': switch (jqxhr.status) { case 401: popup('bad', 'Ошибка!', 'Неверное значение в поле логин/пароль.', true, false); break; case 501: popup('bad', 'Ошибка!', 'Ваш аккаунт еще не активирован администрацией.', true, false); break; case 423: popup('bad', 'Ошибка!', 'Аккаунт заблокирован!
Свяжитесь с Вашим менеджером.', false, true); break; case 412: popup('bad', 'Ошибка!', 'Неверное значение поля защиты от спама!', true, false); break; } break; case 'file_upload': switch (jqxhr.status) { case 409: popup('bad', 'Ошибка!', 'Число файлов не может превышать 1-го.', true, false); break; case 500: popup('bad', 'Отправка прервана!', 'Один, или несколько файлов невозможно обработать.
Размер файлов не должен превышать 3Mb.', true, false); break; case 413: popup('bad', 'Ошибка!', 'Размер файлов не должен превышать 3Mb!', true, false); break; case 406: popup('bad', 'Ошибка!', 'Нет файла для обработки!', true, false); break; default: popup('bad', '', 'Неизвестная ошибка!', true, false); } break; case 'user_form': switch (jqxhr.status) { case 412: popup('bad', 'Ошибка!', 'Данный e-mail уже зарегистрирован.', true, false); break; default: popup('bad', '', 'Неизвестная ошибка!', true, false); } break; default: popup('bad', '', 'Нет связи с сервером!', true, false); } return; }, complete: function() { preloader(); } }); } //---- Формы - Конец }); // Часы function digitalClock() { var tag = 'div.time'; var dots = digits = ''; var digit = tag + ' span'; var span = digit + ':nth-child'; for (i = 1; i < 6; i++) for (k = 1; k < 6; k++) dots += ''; for (i = 0; i < 8; i++) digits += ''; jQuery(tag).append(digits); jQuery(digit).append(dots); jQuery(span + '(3), ' + span + '(6)').removeAttr('class').addClass('colon'); function time() { var date = new Date(); var hou = date.getHours().toString(); var min = date.getMinutes().toString(); var sec = date.getSeconds().toString(); hou = (hou < 10) ? 0 + hou : hou; min = (min < 10) ? 0 + min : min; sec = (sec < 10) ? 0 + sec : sec; jQuery(digit + '.colon').css({ opacity: 1 }).each(function() { jQuery(this).delay(400).animate({ opacity: 0 }, 250); }) jQuery(digit).removeAttr('class'); jQuery(span + '(1)').addClass('d' + hou.slice(0, 1)); jQuery(span + '(2)').addClass('d' + hou.slice(1, 2)); jQuery(span + '(3)').addClass('colon'); jQuery(span + '(4)').addClass('d' + min.slice(0, 1)); jQuery(span + '(5)').addClass('d' + min.slice(1, 2)); jQuery(span + '(6)').addClass('colon'); jQuery(span + '(7)').addClass('d' + sec.slice(0, 1)); jQuery(span + '(8)').addClass('d' + sec.slice(1, 2)); setTimeout(time, 1000); } time(); } // Действия при события загрузки, изменения размера и ориентации страницы $(window).on('load resize orientationchange', function() { resize(); }); function resize() { var allW = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var allH = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; $('#main-content').height(allH - $('#main-footer').innerHeight()); } // Генерация GUID function newGuid() { function s4() { return Math.floor((1 + Math.random()) * 0x10000) .toString(16) .substring(1); } return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); } // Снимает все checkbox function uncheckAll() { var w = document.getElementsByTagName('input'); for (var i = 0; i < w.length; i++) { if (w[i].type == 'checkbox') { w[i].checked = false; } } } // Активируем перетаскивание с сортировкой function drag(obj) { setTimeout(function() { $('#' + obj).sortable({ revert: true }); }, 500); } //---- Popup-окна function popup(type, head, message, fix, background, obj, func, storage, command) { $('html').css({ 'overflow-y': 'hidden' }); var backPop = (background) ? 'background: transparent' : ''; var backWind = (background) ? 'top: 20%; margin: auto; width: 40%;' : ''; var icon = (!background) ? '' : ''; var fixe = (fix) ? 'width: 40%;' : ''; $('body').append(''); var thisH = $('.popup .wind .head').last(); var thisC = $('.popup .wind .cont').last(); switch (type) { case 'good': thisH.addClass('good').append(head); thisC.append(message); break; case 'bad': thisH.addClass('bad').append(head); thisC.append(message); break; case 'atten': thisH.addClass('atten').append(head); thisC.append(message); thisC.append('
'); break; case 'form': if ($('#' + message + '_head')) { head = $('#' + message + '_head').html(); } thisH.addClass('form').append(head); thisC.append($('#' + message)); break; default: thisH.append(head); thisC.append(message); } // Проверяем наличие поля, и если оно есть, то даем ему фокус //$('.popup').last().find('input').first().focus().select(); } function delayClosePopup(time) { setTimeout(function() { $('body').find('.popup').last().find('.close').trigger('click'); }, time); } function delayReload(time, url) { setTimeout(function() { if (url) { window.location.href = url; } else { window.location.reload(); } }, time); } // Закрываем окно $(document).on('click', '.close, .close-but', function(e) { var formGuid = $('.popup').find('[name="GUID"]').val(); try { var form = $(this).attr('style').indexOf('transparent'); } catch (e) {} var obj = e.target.className; if ((obj !== 'close' && obj !== 'popup' && obj !== 'close-but') || form > 0) return; $('html').css({ 'overflow-y': 'unset' }); var t = $(this).parents('.popup'); t.children('.wind').removeClass('zoomIn').addClass('zoomOut'); t.fadeOut('slow', function() { t.remove(); }); var curClass = $('.popup .wind .head').last().attr('class'); if (curClass.indexOf('good') < 0 && curClass.indexOf('bad') < 0 && curClass.indexOf('atten') < 0) { $('#_wrap').append($('.popup').find('article')); } // Подменяем текущий URL на предыдущий (если это не справочник), чтобы при нажатии кнопки Back в браузере не открывалось окно var uri = window.location; if (uri.pathname.indexOf('/_') < 0) window.history.replaceState({}, window.location, uri.protocol + '//' + uri.hostname + '/' + module); // Если был использован режим отображения одного документа без учета фильтров в справочнике, // ограничивающий доступ к документам, то запоминаем ?one=true и добавляем у URL var oneDoc = ''; if (document.referrer.indexOf('one=true') >= 0) oneDoc = '?one=true'; // Если форма открыта для создания документа, то остаемся на этой страницы if (typeof formGuid == "undefined" || formGuid == '') return; // Если вызвали документ на редактирование со страницы полной информациии и popup-окно было открыто одно if (document.referrer.indexOf('/_') >= 0 && $('.popup').length < 2 && $('.popup').find('.form').length > 0) { console.log(curUrl, document.referrer); if (document.referrer.indexOf('/_details-templates') >= 0) { // Если это раздел с несколькими тимплейтами/карточками документов нескольких типов, например рассылки location.href = '/' + module + '/_details-templates/' + curUrl[3] + '/' + curUrl[4] + oneDoc; } else { // Для все остальных location.href = '/' + module + '/_details/' + curUrl[3] + oneDoc; } //window.history.go(-1); } }); /* // Закрываем окно $(document).on('click', '.popup, .close', function(e) { // Если есть соответствующий класс, то перегружаем страницу if ($(e.target).hasClass('popup') || $(e.target).hasClass('close')) { setTimeout(function() { var verifyReload = $('body').find('.close-and-reload').length; if (verifyReload > 0) document.location.reload(true); }, 1000); } var formGuid = $('.popup').find('[name="GUID"]').val(); try { var form = $(this).attr('style').indexOf('transparent'); } catch (e) {} var obj = e.target.className; if ( (obj !== 'close' && obj !== 'popup' && obj !== 'close-but') || form > 0 ) return; $('html').css({'overflow-y':'unset'}); var t = $(this); t.children('.wind').removeClass('zoomIn').addClass('zoomOut'); t.fadeOut('slow', function() { t.remove(); }); var curClass = $('.popup .wind .head').last().attr('class'); if (curClass.indexOf('good') < 0 && curClass.indexOf('bad') < 0 && curClass.indexOf('atten') < 0) { $('#_wrap').append($('.popup').find('article')); } // Подменяем текущий URL на предыдущий (если это не справочник), чтобы при нажатии кнопки Back в браузере не открывалось окно var uri = window.location; if (uri.pathname.indexOf('/_') < 0) window.history.replaceState( {}, window.location, uri.protocol+'//'+uri.hostname+'/'+module); // Если форма открыта для создания документа, то остаемся на этой страницы if (typeof formGuid == "undefined" || formGuid == '' ) return; // Если вызвали документ на редактирование со страницы полной информациии и popup-окно было открыто одно if (document.referrer.indexOf('/_') >= 0 && $('.popup').length < 2 && $('.popup').find('.form').length > 0) window.history.go(-1); }); */ // Если изображение $(document).on('click', '.img', function(e) { if (!$('img').is('#popupImg')) { var i = new Image(); i.src = $(this).attr('src'); var width = i.width; var height = i.height; popup('', '', ''); } }); // Подтверждение действия function popupConfirmYes(fName, one, two, three, four, five) { try { eval(fName)(one, two, three, four, five); } catch (e) { console.log('Ошибка при вызове: ' + fName + ' | ' + e.name); } } // Если в окне форма и она вызвана для добавления документа, то очищаем её поля $(document).on('click', '.clear', function(e) { uncheckAll(); $('.popup').last().find('input, textarea, select').each(function(indx, element) { // Если поле имеет аттрибут data-command="no-clear", то не удаляем из него значение if ($(this).attr('data-command') == 'no-clear') return; if ($(this)[0].type != 'radio' && $(this)[0].nodeName != 'TEXTAREA') $(this).val(''); // У 'radio' и 'TEXTAREA' нельзя обнулять value if ($(this)[0].nodeName == 'TEXTAREA') $(this).text(''); if ($(this)[0].nodeName == 'SELECT') { if ($(this).attr('data-new') == 'new') $(this).children('option').remove(); $(this)[0].selectedIndex = 0; $(this).change(); // Условие при добавлении задач if ($(this).attr('id') == 'tasks_object' && $(this)[0].length > 1) { $(this).val(2).change(); } else if ($(this).attr('id') == 'tasks_object') { $(this).val(1).change(); } } }); // Если есть список телефонов, то чистим специфические атрибуты if ($('[data-call]')) $('[data-call]').attr('data-call', ''); }); //---- Popup-окна - Конец // Пангинация function page(direction) { var url = Number($('#page_counter').val()); if (isNaN(Number($('#page_counter').val()))) return; var uri = window.location; if (direction == 'left') { if ((url - 1) < 1) return; uri.href = uri.protocol + '//' + uri.hostname + '/' + module + '/page/' + (url - 1); } else { if (url > (maxPage - 1)) return; uri.href = uri.protocol + '//' + uri.hostname + '/' + module + '/page/' + (url + 1); } } // Сохранение списка function save_select(obj, form) { if ($('#' + form).validationEngine('validate')) { var content = ''; var elements = $('#' + form).find('input, select'); var val = []; for (i = 0; i < elements.length; i++) { if ((i + 1) % 2 && elements[i].value != '') { content += ''; var temp = [elements[i].value, elements[i + 1].value]; val.push(temp); } else { continue; } } $('#' + obj).html(content); $('#' + obj).parents('form').find('#' + obj + 'JSON').val(JSON.stringify(val)); delayClosePopup(100); } } // Preloader function preloader(action) { if (action === 'show') { $('body').append('
Подождите...
'); } else { var obj = $('.preloader'); obj.fadeOut('slow', function() { obj.remove(); }); } } // Preloader - Конец // Функции для работы с куки function setCookie(name, value) { document.cookie = name + '=' + value + '; path=/;'; } function getCookie(name) { var r = document.cookie.match("(^|;) ?" + name + "=([^;]*)(;|$)"); if (r) return r[2]; else return ""; } function deleteCookie(name) { var date = new Date(); // Берём текущую дату date.setTime(date.getTime() - 100); // Возвращаемся в "прошлое" document.cookie = name + "=; path=/; expires=" + date.toGMTString(); // Устанавливаем cookie пустое значение и срок действия до прошедшего уже времени } // Функции для работы с куки - Конец // Иерархическое дерево с вложениями var data = []; $(document).on('click', '#tree li', function(e) { if (this.className == 'plus') { $(this).siblings().each(function(index, element) { if (element.tagName == 'UL') { $(element).show(); } }); // Добавляем название объекта по которому был клик data.push('' + $(this).text() + ''); // Рекурсивно перебираем все остальные объекты eachObj($(this).siblings()); // Добавляем данные в таблицу $('#tree-data').html(data); data = []; } if (this.className == 'minus') { $(this).siblings().each(function(index, element) { $(element).hide(); }); } $(this).toggleClass('plus').toggleClass('minus'); }); // Перебираем все вложенные объекты function eachObj(obj) { obj.each(function(index, element) { if ($(element).find('*').length > 1) { eachObj($(element).find('*')); } else { if (this.className != 'hold' && !$(element).prev().hasClass('hold')) { var temp; //var tempFlag = []; var tempFlag; if ($(element).attr('data-art')) { var e = $(element); //var pres = e.attr('data-pres').replace('[', '').replace(']', '').split(','); //for (key in pres) { // tempFlag[key] = (pres[key] == '1') ? '' : ''; //} tempFlag = (e.attr('data-pres') == '1') ? 'Да' : 'Нет'; temp = '' + '' + e.attr('data-art') + '' + '' + e.text() + '' + '' + e.attr('data-unit') + '' + '' + tempFlag + '' + ''; } else { temp = '' + $(element).text() + ''; } data.push(temp); } } }); } // Иерархическое дерево с вложениями - Конец // Корзина заказа $(document).on('dblclick', '[data-form="new_request"] tr', function(e) { if (!$(this).attr('data-ids')) return; var guid = $(this).attr('data-ids'); // Показываем всплывающее сообщение для добавления кол-ва popup('atten', 'Добавить в корзину?', $('li[data-ids="' + guid + '"]').text() + '', true, false, guid, 'add_position'); }); // Добавляем номенклатуру в корзину function add_position(itemGuid) { var quant = $('#cur_quant').val(); var items = {}; var crmCurCart = {}; // Если есть запись в хранилище, то извлекаем чтобы можно было туда добавить новую if (localStorage.getItem('crmCartTemp')) { var crmCurCart = JSON.parse(localStorage.getItem('crmCartTemp')); } // Формируем новую запись var guid = itemGuid; var nomen = $('li[data-ids="' + guid + '"]'); items['data-ids'] = guid; items['data-art'] = nomen.attr('data-art'); items['data-unit'] = nomen.attr('data-unit'); items['data-cur'] = nomen.attr('data-cur'); items['data-price'] = nomen.attr('data-price'); items['data-pres'] = nomen.attr('data-pres'); items['data-quantity'] = (quant > 1) ? quant : 1; items['data-name'] = nomen.text(); crmCurCart[guid] = items; localStorage.setItem('crmCartTemp', JSON.stringify(crmCurCart)); viewCartTemp('tree-data-temp'); delayClosePopup(100); } // Если корзина не пуста, то выводим её $(function() { if (curUrl[1] == 'request') { viewCartTemp('tree-data-cart'); viewCartTemp('tree-data-temp'); viewFurniture(); } }); function viewCartTemp(table) { // Если есть запись в хранилище, то извлекаем все для вывода var storageObj = (table == 'tree-data-temp') ? 'crmCartTemp' : 'crmCart'; var crmCurCart = {}; if (localStorage.getItem(storageObj)) { crmCurCart = JSON.parse(localStorage.getItem(storageObj)); } else { if (storageObj == 'crmCartTemp') { clearCartTemp(); } else { clearCart(); } return; } var temp = ''; for (key in crmCurCart) { var price = (crmCurCart[key]['data-quantity'] > 1) ? crmCurCart[key]['data-price'] * crmCurCart[key]['data-quantity'] : crmCurCart[key]['data-price']; var prices = (!isNaN(price)) ? Number(price).toFixed(2) : '-'; //var pres = crmCurCart[key]['data-pres'].replace('[', '').replace(']', '').split(','); var tempFlag; //for (k in pres) { // tempFlag[k] = (pres[k] == '1') ? '' : ''; //} tempFlag = (crmCurCart[key]['data-pres'] == '1') ? 'Да' : 'Нет'; temp += '' + '' + crmCurCart[key]['data-art'] + '' + '' + crmCurCart[key]['data-name'] + '' + '' + crmCurCart[key]['data-unit'] + '' + '' + tempFlag + '' + '' + '' + '' + '' + ''; } // Добавляем данные в таблицу $('#' + table).html(temp); } // Очистка временной корзины function clearCartTemp() { localStorage.removeItem('crmCartTemp'); $('#tree-data-temp').html('Выберите позиции'); $('.popup').last().trigger('click'); } // Очистка корзины function clearCart() { localStorage.removeItem('crmCart'); $('#tree-data-cart').html('Выберите позиции'); $('.popup').trigger('click'); } // Добавляем список выбранной номенклатуры в корзину function addCart() { if (localStorage.getItem('crmCart') != null && localStorage.getItem('crmCartTemp') != null) { var crmCurCart = JSON.parse(localStorage.getItem('crmCart')); var crmCurCartTemp = JSON.parse(localStorage.getItem('crmCartTemp')); for (key in crmCurCartTemp) { crmCurCart[key] = crmCurCartTemp[key]; localStorage.setItem('crmCart', JSON.stringify(crmCurCart)); } } else { if (localStorage['crmCartTemp'] == null) { $('.popup').last().trigger('click'); popup('bad', 'Ошибка!', 'Позиции не выбраны', true, false); return; } localStorage.setItem('crmCart', localStorage['crmCartTemp']); } viewCartTemp('tree-data-cart'); clearCartTemp(); } // Изменяем кол-во в номенклатурной позиции $(document).on('change keyup', '.quant', function() { var q = Number($(this).val()); var qn = typeof(q); if (qn == 'number' && q > 0 && q < 10000) { var storageObj = ($(this).parents('tbody').attr('id') == 'tree-data-temp') ? 'crmCartTemp' : 'crmCart'; var guid = $(this).parents('tr').attr('data-ids-temp-cart'); var crmCart = JSON.parse(localStorage.getItem(storageObj)); crmCart[guid]['data-quantity'] = q; localStorage.setItem(storageObj, JSON.stringify(crmCart)); } else { if ($('.popup').length == 0) popup('bad', 'Ошибка!', 'Введите целое число в диапазоне от 1 до 9999', true, false); } }); // Удаление позиции function deleteCartPos(obj, storage) { $('.popup').last().trigger('click'); var posTable = (storage == 'crmCartTemp') ? 'tree-data-temp' : 'tree-data-cart'; switch (storage) { case 'crmCartTemp': posTable = 'tree-data-temp'; break; case 'crmCart': posTable = 'tree-data-cart'; break; case 'crmCartFurniture': posTable = 'data-furniture'; break; } $('#' + posTable).find('tr[data-ids-temp-cart="' + obj + '"]').remove(); var crmCart = JSON.parse(localStorage.getItem(storage)); delete crmCart[obj]; localStorage.setItem(storage, JSON.stringify(crmCart)); // Если карта пуста то возвращаем её к начальному состоянию if (Object.keys(crmCart).length === 0) { switch (storage) { case 'crmCartTemp': clearCartTemp();; break; case 'crmCart': clearCart(); break; case 'crmCartFurniture': clearFurniture(); break; } } } // Поиск по Артикулу и Названию номенклатуры var result = []; var art = ''; var nom = ''; $(document).on('change keyup', '#art, #nom', function() { switch ($(this).attr('id')) { case 'art': art = $(this).val().toLowerCase(); break; case 'nom': nom = $(this).val().toLowerCase(); } if (art.length < 3 && nom.length < 3) return; // Выбираем предварительно все элементы var data = $('#tree').find('li').not('[class]'); // Фильтруем результаты по критериям поиска result = data.filter(function() { var article = $(this).attr('data-art').toLowerCase(); var name = $(this).text().toLowerCase(); return (article.indexOf(art) > -1 && name.indexOf(nom) > -1); }); viewResult(result, 'tree-data'); }); function viewResult(result, table) { // Выводим найденные результаты var temp; //var tempFlag = []; var tempFlag; $(result).each(function(index, element) { var e = $(element); //var pres = e.attr('data-pres').replace('[', '').replace(']', '').split(','); //for (key in pres) { //tempFlag[key] = (pres[key] == '1') ? '' : ''; tempFlag = (e.attr('data-pres') == '1') ? 'Да' : 'Нет'; //} temp += '' + '' + e.attr('data-art') + '' + '' + e.text() + '' + '' + e.attr('data-unit') + '' + '' + tempFlag + '' + ''; }); $('#' + table).html(temp); } // Поиск по Артикулу и Названию номенклатуры - Конец // Корзина заказа - Конец // Выбор фурнитуры $(document).on('change', '#select_complect', function() { var val = $(this).val(); $('#name_complect').html(val); $('[name="name_complect"]').val(val); }); // Добавление строки function saveFurniture(data) { var furniture = {}; var guid = newGuid(); furniture[guid] = {}; for (key in data) { furniture[guid][data[key].name] = data[key].value; } if (localStorage.getItem('crmCartFurniture') != null) { var crmCartFurnitureTemp = JSON.parse(localStorage.getItem('crmCartFurniture')); crmCartFurnitureTemp[guid] = furniture[guid]; localStorage.setItem('crmCartFurniture', JSON.stringify(crmCartFurnitureTemp)); } else { localStorage.setItem('crmCartFurniture', JSON.stringify(furniture)); } $('.popup').trigger('click'); uncheckAll(); viewFurniture(); } function viewFurniture() { if (localStorage.getItem('crmCartFurniture') != null) { var crmCartFurnitureTemp = JSON.parse(localStorage.getItem('crmCartFurniture')); var furniture = ''; for (key in crmCartFurnitureTemp) { var cft = crmCartFurnitureTemp[key]; var check = ''; var bp = (cft.bp == 1) ? check : ''; var sp = (cft.sp == 1) ? check : ''; var schp = (cft.schp == 1) ? check : ''; var bz = (cft.bz == 1) ? check : ''; var uo = (cft.uo == 1) ? check : ''; furniture += '' + '' + cft.complect + '' + '' + cft.direction + '' + '' + cft.systems + '' + '' + cft.height + '' + '' + cft.width + '' + '' + bp + '' + '' + sp + '' + '' + schp + '' + '' + bz + '' + '' + uo + '' + '' + ''; } $('#data-furniture').html(furniture); } else { $('#data-furniture').html('Выберите позиции'); } } // Очистка корзины фурнитуры function clearFurniture() { localStorage.removeItem('crmCartFurniture'); $('#data-furniture').html('Выберите позиции'); $('.popup').trigger('click'); } // Выбор фурнитуры - Конец // Отправка данных var dataResult; function send_request(data, form, command) { switch (form) { // Отправка заявки case 'send_request': // Отображаем прелоадер preloader('show'); var crmCart = null; var crmFurniture = null; if (localStorage.getItem('crmCart') != null) crmCart = JSON.parse(localStorage.getItem('crmCart')); if (localStorage.getItem('crmCartFurniture') != null) crmFurniture = JSON.parse(localStorage.getItem('crmCartFurniture')); if (crmCart === null && crmFurniture === null) { popup('bad', 'Заявка пуста!', 'Необходимо выбрать позиции.', true, false); preloader(); return; } var url = '/ajax-send/send_request.php?guid=' + guid; var dates = data[3]['value'].split('.'); var times = data[4]['value'].split(':'); var sendData = { data: { payMethod: data[1]['value'], shippingMethod: data[2]['value'], //shippingDateTime : dates[2]+dates[1]+dates[0]+times[0]+times[1]+'00', shippingDateTime: data[3]['value'] + ' ' + data[4]['value'], clientGUID: data[0]['value'], furniture: [], table: [] } } for (val in crmCart) { var temp = { GUID: val, quantity: crmCart[val]['data-quantity'], price: crmCart[val]['data-price'] } sendData.data.table.push(temp); } for (val in crmFurniture) { var bp = (crmFurniture[val]['bp']) ? 1 : 0; var sp = (crmFurniture[val]['sp']) ? 1 : 0; var schp = (crmFurniture[val]['schp']) ? 1 : 0; var bz = (crmFurniture[val]['bz']) ? 1 : 0; var uo = (crmFurniture[val]['uo']) ? 1 : 0; var temp = { GUID: val, complect: crmFurniture[val]['complect'], direction: crmFurniture[val]['direction'], systems: crmFurniture[val]['systems'], height: crmFurniture[val]['height'], width: crmFurniture[val]['width'], bp: bp, sp: sp, schp: schp, bz: bz, uo: uo, quant: crmFurniture[val]['quant'] } sendData.data.furniture.push(temp); } // Отправляем данные $.ajax({ url: url, type: 'POST', dataType: 'json', contentType: 'application/json', data: JSON.stringify(sendData), success: function(respond, textStatus, jqXHR) { popup('good', 'Успешно!', 'Заявка успешно отправлена!', true, false); setTimeout(function() { clearCart(); clearCartTemp(); clearFurniture(); }, 2000); }, error: function(jqxhr, status, errorMsg) { popup('bad', 'Ошибка!', 'Сервер заявок недоступен,
свяжитесь с Вашим менеджером, и/или повторите отправку позже.', true, false); }, complete: function() { preloader(); } }); break; // Запросы к внешним файлам case 'data-exchange': switch (command) { case 'data-trash': case 'data-trash-no-back': case 'data-trash-science': case 'data-copy': data = data.split(' | '); preloader('show'); break; case 'data-send-push': preloader('show'); break; case 'data-send-setting-juststat': preloader('show'); break; case 'data-add-task': preloader('show'); default: // Проверяем, нет-ли значений передаваемых из формы массивом typeof data == 'object' && ! if (Array.isArray(data)) { var i = 0; for (key in data) { if (data[key].name.indexOf('[]') >= 0) { i++; var temp = data[key].name.split('['); data[key].name = temp[0] + '[' + i + temp[1]; } } } // Если строка if (typeof data == 'string') { data = data.split(); } } $.ajax({ url: '/ajax-send/' + command + '.php?guid=' + guid, type: 'POST', dataType: 'json', contentType: 'application/json', data: JSON.stringify(data), success: function(respond, textStatus, jqXHR) { switch (command) { case 'data-trash': case 'data-trash-no-back': case 'data-trash-science': case 'data-copy': popup('good', 'Успешно!', 'Запрос выполнен!', true, false); break; case 'data-add-task': popup('good', 'Успешно!', 'Запрос выполнен!', true, false); var id_executors = {}; for (key in data) { if (data[key].name.indexOf('id_executors') >= 0) { id_executors[key] = data[key].value; } } sendSocket('{"command":"new_task", "task_url":"/tasks/_details/' + respond.id + '", "id":"' + id + '", "id_client":"' + guid + '", "id_executors":' + JSON.stringify(id_executors) + '}'); break; case 'data-send-push': popup('good', 'Успешно!', 'Запрос выполнен!', true, false); delayClosePopup(1000); delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]); break; case 'data-make-call': popup('good', 'Успешно!', 'Выполняется вызов на номер: ' + data, true, false); break; case 'data-send-setting-juststat': popup('good', 'Успешно!', 'Настройки отправлены.', true, false); delayClosePopup(500); delayReload(500); preloader(); break; default: delete dataResult; dataResult = respond; } }, error: function(jqxhr, status, errorMsg) { switch (command) { case 'data-make-call': switch (jqxhr.status) { case 424: popup('bad', 'Ошибка!', 'Не указан внутренний номер пользователя!', true, false); break; default: popup('bad', 'Ошибка!', 'АТС не отвечает!', true, false); } break; case 'get-data-letter': if (jqxhr.status == '400') { popup('bad', 'Ошибка!', 'Авторизация завершена!', true, false); delayClosePopup(1000); delayReload(1000, '/'); } break; default: popup('bad', 'Ошибка!', 'Сервер недоступен!', true, false); preloader(); } }, complete: function() { switch (command) { case 'data-trash': case 'data-trash-science': case 'data-copy': preloader(); delayClosePopup(1000); delayReload(1000, '/' + curUrl[1]); break; case 'data-add-task': case 'data-trash-no-back': preloader(); delayClosePopup(1000); delayReload(1000); break; } } }); break; } } // Телефон - вызов номера function makeCall(phone) { var phoneNumber = (typeof(phone) == 'object') ? $(phone).parent('div').children('input').val() : phone; send_request(phoneNumber, 'data-exchange', 'data-make-call'); } // Уведомления // Проверка и запрос разрешений на уведомления function notifyMe(subj, mess, tag) { // Теперь давайте проверим есть ли у нас разрешение для отображения уведомления if (Notification.permission === "granted") { // Если все в порядке, то создадим уведомление notify(subj, mess, tag); } // В противном случае, мы должны спросить у пользователя разрешение else if (Notification.permission === 'default') { Notification.requestPermission(function(permission) { // Не зависимо от ответа, сохраняем его в настройках if (!('permission' in Notification)) { Notification.permission = permission; } // Если разрешение получено, то создадим уведомление if (permission === "granted") { notify(subj, mess, tag); } }); } } // Вывод уведомления function notify(subj, mess, tag) { var notification = new Notification(subj, { lang: 'ru-RU', body: mess, icon: '/img-vendor/logo_note.png', tag: tag, requireInteraction: true }); // Если клиент идентифицирован, то ставим дату последнего звонка и события var info = JSON.parse(notification.tag); if (info.clientId && info.clientId != 'new') { send_request('{"id":"' + info.clientId + '","type_event":"all"}', 'data-exchange', 'set_client_last_event'); } // Действие по клику notification.onclick = function() { var info = JSON.parse(notification.tag); // Если клиент идентифицирован, то открываен форму редактирования if (info.clientId && info.clientId != 'new') { window.location.href = '/clients/_details/' + info.clientId; } else if (info.clientId == 'new') { // Иначе пустая форма клиента c входящим номером setCookie('call_client', info.clientNumber); location.href = '/clients/client'; } // Если иные события if (info.command) { switch (info.command) { // Новая задача case 'new_task': window.location.href = info.task_url; break; // Задача в связи с пропущенным звонком по инициативе клиента, или задача полученная по API case 'dropped_call': case 'new_task_api': window.location.href = '/tasks'; break; } } } } // Уведомления - Конец // Вывод на печать function toPrint(obj, zag, tpl) { var objPrint = $(obj).clone(); var template = (tpl) ? tpl : 'print.html'; var newWin = window.open('/components/inc/' + template, 'Вывод на печать', 'width=1200,height=600,resizable=yes,scrollbars=yes,status=no,toolbar=no,location=no,menubar=no'); newWin.onload = function() { var div = newWin.document.createElement('div'); body = newWin.document.body; div.innerHTML = objPrint[0].innerHTML; body.insertBefore(div, body.firstChild); $(body).find('.print').remove(); $(body).children('div').css({ 'margin': '5em' }); $(body).children('div').prepend('

' + zag + '

'); setTimeout(function() { newWin.print(); }, 500); } } // Вывод на печать function toPrintBooking(obj, zag) { var objPrint = $(obj).clone(); // Удаляем из списка все отмененные брони $(objPrint).children('table').last().find('table').find('tr').children('td').find('i').each(function(index, element) { if ($(element).hasClass('fa-calendar-check-o')) { if ($(element).attr('style').indexOf('red') > -1) { $(element).parent().parent().parent().remove(); } } }); // В этой конфигурации удаляем все заезды кроме оплаченных var newWin = window.open('/components/inc/print.html', 'Вывод на печать', 'width=1200,height=600,resizable=yes,scrollbars=yes,status=no,toolbar=no,location=no,menubar=no'); newWin.onload = function() { var div = newWin.document.createElement('div'); body = newWin.document.body; div.innerHTML = objPrint[0].innerHTML; body.insertBefore(div, body.firstChild); $(body).find('.print').remove(); $(body).children('div').css({ 'margin': '5em' }); $(body).children('div').prepend('

' + zag + '

'); setTimeout(function() { newWin.print(); }, 500); } } // Скролл до объекта function scr(obj) { $('html, body').animate({ scrollTop: $('#' + obj).offset().top }, 250, 'swing'); } function scrInDiv(obj) { var container = $('#' + obj).parents('.scroll'); $('html, body').animate({ scrollTop: container.offset().top }, 250, 'swing'); container.animate({ scrollTop: $('#' + obj).offset().top - container.offset().top }, 250, 'swing'); } /* setTimeout(function() { sendSocket('{"command":"new_task", "id_client":"'+guid+'"}'); }, 2000); */ // Отправка сообщения в сокет function sendSocket(command) { if (window.parent.socket) window.parent.socket.send(command); } // Колл-центр $(function() { if (localStorage['JustCRM_call_id'] && localStorage['JustCRM_block']) { $('#callPanel').slideDown(300); var allIdArr = localStorage['JustCRM_call_id'].split(','); var curKey = allIdArr.indexOf(localStorage['JustCRM_current_id']); } $('#stop-client').on('click', function() { $('#callPanel').slideUp(300); localStorage.removeItem('JustCRM_block'); localStorage.removeItem('JustCRM_call_id'); localStorage.removeItem('JustCRM_current_id'); $('#slideIn').trigger('click'); delayReload(100, '/callcenter'); }); $('#next-client').on('click', function() { if (typeof allIdArr[curKey + 1] == 'undefined') { popup('bad', '', 'Достигнут конец списка.', true, false); return; } localStorage['JustCRM_current_id'] = allIdArr[curKey + 1]; var str = allIdArr.join(','); localStorage['JustCRM_call_id'] = str; delayReload(100, '/callcenter/_details/' + allIdArr[curKey + 1]); }); $('#prev-client').on('click', function() { if (typeof allIdArr[curKey - 1] == 'undefined') { popup('bad', '', 'Достигнуто начало списка.', true, false); return; } localStorage['JustCRM_current_id'] = allIdArr[curKey - 1]; var str = allIdArr.join(','); localStorage['JustCRM_call_id'] = str; delayReload(100, '/callcenter/_details/' + allIdArr[curKey - 1]); }); }); function callCentre(command) { $('#slideOut').trigger('click'); localStorage['JustCRM_block'] = 'true'; localStorage['JustCRM_call_id'] = allId; localStorage['JustCRM_current_id'] = lastId; delayReload(100, '/callcenter/_details/' + lastId); } // Колл-центр - Конец // Декодирование HTML-сущностей function htmlDecode(input) { var e = document.createElement('div'); e.innerHTML = input; return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue; } // Парсинг параметров GET function findGetParameter(findGet) { var result = {}, temp = null, findGetValue = false; location.search.substr(1).split('&').forEach(function(item) { item.split('=').forEach(function(item, i) { if (i === 0) { temp = decodeURIComponent(item); if (temp != '') result[temp] = 0; }; if (i === 1) result[temp] = decodeURIComponent(item); // Если задан параметр поиска значения GET по ключу if (typeof(findGet) != 'undefined' && findGet == temp && result[temp] != '') { findGetValue = true; return false; } }); }); if (findGet && findGetValue) { return result[temp]; } else { if (Object.keys(result).length !== 0 && !findGet) return result; else return false; } } // Запрос данных e-mail function getDataLetter(type) { var type_request = (type == 'short') ? 'infoLetter-short' : 'infoLetter'; send_request(type_request, 'data-exchange', 'get-data-letter'); if (typeof(dataResult) == 'object' && dataResult.request == 'infoLetter') { var cm = (dataResult.answer.count_mails != '') ? dataResult.answer.count_mails : 0; var lu = dataResult.answer.last_update; delete dataResult.answer.count_mails delete dataResult.answer.last_update; delete dataResult.request; delete dataResult.success; var data = dataResult.answer; var cmUnread = Object.keys(data).length; var htmlRes = ''; if (cmUnread != '' || cm != '' || cmUnread != '0' || cm != '0') { sessionStorage['mail-status'] = cmUnread + '/' + cm; } else { sessionStorage['mail-status'] = ''; } sessionStorage['JustCRM_last-update'] = lu; sessionStorage['JustCRM_last-unknown-letter-count'] = cm; sessionStorage['JustCRM_last-unread-letter-count'] = cmUnread; // Делаем вывод списка ссылок на карточки клиентов for (key in data) { htmlRes += '
  • От: ' + data[key].from_address + ' | Тема: ' + data[key].subject + '
  • ' if (typeof data[key].mails == 'object' && Object.keys(data[key].mails).length > 0) { for (k in data[key].mails) { htmlRes += '
  • ' + data[key].mails[k].name + '
  • '; } } htmlRes += '
    '; } sessionStorage['JustCRM_unread-letter'] = htmlRes; } } // Основной таймер опроса событий --- Оставлять всегда внизу скрипта!!! setInterval(function() { // Опрос событий, только при наличии авторизации if (typeof(guid) == 'string' && guid != '') { // Опрос состояния e-mail и заполнение данных в интерфейсе if (typeof(sessionStorage['mail-status']) != 'undefined' && sessionStorage['mail-status'] != '' && sessionStorage['mail-status'] != '0/0') { $('#mail-status').show().text(sessionStorage['mail-status']); } else { $('#mail-status').hide(); } if ($('#mail-status').text() != sessionStorage['mail-status']) $('#mail-status').text(sessionStorage['mail-status']); if ($('#last-update').text() != sessionStorage['JustCRM_last-update']) $('#last-update').text(sessionStorage['JustCRM_last-update']); if ($('#unknown-letter-count').text() != sessionStorage['JustCRM_last-unknown-letter-count']) $('#unknown-letter-count').text(sessionStorage['JustCRM_last-unknown-letter-count']); if ($('#unread-letter-count').text() != sessionStorage['JustCRM_last-unread-letter-count']) $('#unread-letter-count').text(sessionStorage['JustCRM_last-unread-letter-count']); if ($('#unread-letter').text() != sessionStorage['JustCRM_unread-letter']) $('#unread-letter').html(sessionStorage['JustCRM_unread-letter']); } }, 300);