// Глобальные переменные и операции // ОС var OSName = window.parent.OSName; 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; setCookie("JustCRM_lastURL", document.location); }; // Если указано, что необходимо вернуться по определенному URL, то определяем глобальную переменную и удаляем куки if (getCookie('toBack')) { var toBack = getCookie('toBack'); } // Обработка ошибок из скриптов, выполняемых до загрузки main.js // Уведомление при отсутствии модуля, или неверном URL if (typeof moduleError !== 'undefined') { popup('bad', 'Ошибка!', '404 - Некорректный адрес.', true, true); setTimeout(function() { window.location.href = '/tasks' }, 3000); } // Уведомление при отсутствии записей АТС if (typeof noCdrError !== 'undefined') { popup('bad', '', 'Записи разговоров отсутствуют.', true, false); delayReload(1000, noCdrError); } // Изменение в функционале ядра 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); // Событие на изменение размеров элемента $().sizeChanged(function(){}) (function($) { $.fn.sizeChanged = function(handleFunction) { var element = this; var lastWidth = element.width(); var lastHeight = element.height(); setInterval(function() { if (lastWidth === element.width() && lastHeight === element.height()) return; if (typeof(handleFunction) == 'function') { handleFunction({ width: lastWidth, height: lastHeight }, { width: element.width(), height: element.height() }); lastWidth = element.width(); lastHeight = element.height(); } }, 100); return element; }; }(jQuery)); // Изменение внешнего вида scrollbars (function($) { $.fn.hasScrollBar = function() { return this.get(0).scrollHeight > this.height(); }; $.fn.lionbars = function(options) { options = options || {}; autohide = options.autohide; // Flags var timeout, HDragging = false, VDragging = false, activeScroll = 0, activeWrap = 0, eventX, eventY, mouseX, mouseY, currentRatio, initPos, scrollValue, hideTimeoutSet = false, vEventFired = false, hEventFired = false; // Initialization var elements = $(this), id = 0, vScrollWidth = 0, hScrollWidth = 0, addHScroll = false, addVScroll = false, paddingTop = 0, paddingLeft = 0, paddingBottom = 0, paddingRight = 0, borderTop = 0, borderRight = 0, borderBottom = 0, borderLeft = 0, scrollHeight = 0, scrollWidth = 0, offsetWidth = 0, offsetHeight = 0, clientWidth = 0, clientHeight = 0, vRatio = 0, hRatio = 0, vSliderHeight = 0, hSliderHeight = 0, vLbHeight = 0, hLbHeight = 0; // Main Loop mainLoop(); function mainLoop() { for (var i = 0; elements[i] !== undefined; i++) { if (needScrollbars(elements[i]) && !$(elements[i]).hasClass('nolionbars')) { // add the element to the main array target = elements[i]; // get some values before the element is wrapped getDimentions(target); // wrap the element wrap(target, addVScroll, addHScroll); // hide the default scrollbar hideScrollbars(target, addVScroll, addHScroll); // Calculate the size of the scrollbars reduceScrollbarsWidthHeight(target); setSlidersHeight(target); // Set variables needed to calculate scroll speed, etc. setScrollRatios(target); // Set events setEvents(target); // prepare for next element resetVars(); } } } // Set document events $(document).mousemove(function(e) { if (VDragging) { mouseY = e.pageY; activeWrap.scrollTop((initPos + mouseY - eventY) * Math.abs(currentRatio)); } if (HDragging) { mouseX = e.pageX; activeWrap.scrollLeft((initPos + mouseX - eventX) * Math.abs(currentRatio)); } }); $(document).mouseup(function(e) { if (VDragging) { VDragging = false; } if (HDragging) { HDragging = false; } }); // Core functions function setEvents(elem) { var el = $(elem); if (addVScroll || addHScroll) { el.find('.lb-wrap').scroll(function(e) { el.find('.lb-v-scrollbar-slider').css({ "top": -$(this).scrollTop() / el.attr('vratio') }); el.find('.lb-h-scrollbar-slider').css({ "left": -$(this).scrollLeft() / el.attr('hratio') }); if (el.find('.lb-v-scrollbar').height() == (parseInt(el.find('.lb-v-scrollbar-slider').css('top')) + el.find('.lb-v-scrollbar-slider').height()) && typeof(options.reachedBottom) == 'function' && !vEventFired ) { vEventFired = true; var self = $(this); options.reachedBottom.apply($(this).children('.lb-content'), [function() { getDimentions($(self).parent(), { height: $(self).children('.lb-content').get(0).scrollHeight, width: $(self).children('.lb-content').get(0).scrollWidth }); // Calculate the size of the scrollbars reduceScrollbarsWidthHeight($(self).parent()); setSlidersHeight($(self).parent()); // Set variables needed to calculate scroll speed, etc. setScrollRatios($(self).parent()); // prepare for next element resetVars(); vEventFired = false; }]); } if (el.find('.lb-h-scrollbar').width() == (parseInt(el.find('.lb-h-scrollbar-slider').css('left')) + el.find('.lb-h-scrollbar-slider').width()) && typeof(options.reachedRight) == 'function' && !hEventFired ) { hEventFired = true; var self = $(this); options.reachedRight.apply($(this).children('.lb-content'), [function() { getDimentions($(self).parent(), { height: $(self).children('.lb-content').get(0).scrollHeight, width: $(self).children('.lb-content').get(0).scrollWidth }); // Calculate the size of the scrollbars reduceScrollbarsWidthHeight($(self).parent()); setSlidersHeight($(self).parent()); // Set variables needed to calculate scroll speed, etc. setScrollRatios($(self).parent()); // prepare for next element resetVars(); hEventFired = false; }]); } if (autohide) { el.find('.lb-v-scrollbar, .lb-h-scrollbar').fadeIn(150); clearTimeout(timeout); timeout = setTimeout(function() { el.find('.lb-v-scrollbar, .lb-h-scrollbar').fadeOut(150); }, 2000); } }); } if (addVScroll) { el.find('.lb-v-scrollbar-slider').mousedown(function(e) { eventY = e.pageY; VDragging = true; activeScroll = $(this); activeWrap = el.find('.lb-wrap'); currentRatio = activeWrap.parent().attr('vratio'); initPos = activeScroll.position().top; return false; }); el.find('.lb-v-scrollbar').mousedown(function(e) { if (!$(e.target).hasClass('lb-v-scrollbar-slider')) { el.find('.lb-wrap').scrollTop((e.pageY - $(this).offset().top) * Math.abs(el.attr('vratio')) - $(this).find('.lb-v-scrollbar-slider').height() / 2); } return false; }); } if (addHScroll) { el.find('.lb-h-scrollbar-slider').mousedown(function(e) { eventX = e.pageX; HDragging = true; activeScroll = $(this); activeWrap = el.find('.lb-wrap'); currentRatio = activeWrap.parent().attr('hratio'); initPos = activeScroll.position().left; return false; }); el.find('.lb-h-scrollbar').mousedown(function(e) { if (!$(e.target).hasClass('lb-h-scrollbar-slider')) { el.find('.lb-wrap').scrollLeft((e.pageX - $(this).offset().left) * Math.abs(el.attr('hratio')) - $(this).find('.lb-h-scrollbar-slider').width() / 2); } return false; }); } if ((addVScroll || addHScroll) && autohide) { el.find('.lb-v-scrollbar, .lb-h-scrollbar').hide(); el.hover(function() {}, function() { el.find('.lb-v-scrollbar, .lb-h-scrollbar').fadeOut(150); }); } } function setScrollRatios(elem) { vRatio = (offsetHeight - $(elem).find('.lb-wrap').get(0).scrollHeight - borderTop - borderBottom) / (vLbHeight - vSliderHeight); hRatio = (offsetWidth - $(elem).find('.lb-wrap').get(0).scrollWidth - borderLeft - borderRight) / (hLbHeight - hSliderHeight); var el = $(elem); el.attr('vratio', vRatio); el.attr('hratio', hRatio); } function setSlidersHeight(elem) { var el = $(elem); var hmin, hmax, gap; if (el.find('.lb-v-scrollbar').length != 0) { hmin = 20; gap = offsetHeight - el.find('.lb-v-scrollbar').height(); hmax = offsetHeight - gap - hmin; vSliderHeight = Math.round((offsetHeight * hmax) / scrollHeight); vSliderHeight = (vSliderHeight < hmin) ? hmin : vSliderHeight; } if (el.find('.lb-h-scrollbar').length != 0) { hmin = 20; gap = offsetWidth - el.find('.lb-h-scrollbar').width(); hmax = offsetWidth - gap - hmin; hSliderHeight = Math.round((offsetWidth * hmax) / scrollWidth); hSliderHeight = (hSliderHeight < hmin) ? hmin : hSliderHeight; } el.find('.lb-v-scrollbar-slider').css({ "height": vSliderHeight }); el.find('.lb-h-scrollbar-slider').css({ "width": hSliderHeight }); } function resetVars() { vScrollWidth = 0; hScrollWidth = 0; addHScroll = false; addVScroll = false; paddingTop = 0; paddingLeft = 0; paddingBottom = 0; paddingRight = 0; borderTop = 0; borderLeft = 0; borderBottom = 0; borderRight = 0; scrollHeight = 0; scrollWidth = 0; offsetWidth = 0; offsetHeight = 0; clientWidth = 0; clientHeight = 0; // vRatio = 0; // hRatio = 0; vSliderHeight = 0; hSliderHeight = 0; vLbHeight = 0; hLbHeight = 0; } function reduceScrollbarsWidthHeight(elem) { var el = $(elem); if (addVScroll && addHScroll) { vLbHeight = el.height() - 12; hLbHeight = el.width() - 12; el.find('.lb-v-scrollbar').css({ "height": vLbHeight }); el.find('.lb-h-scrollbar').css({ "width": hLbHeight }); } else { vLbHeight = el.height() - 4; hLbHeight = el.width() - 4; el.find('.lb-v-scrollbar').css({ "height": vLbHeight }); el.find('.lb-h-scrollbar').css({ "width": hLbHeight }); } } function hideScrollbars(elem, vscroll, hscroll) { var el = $(elem); if (vscroll || hscroll) { el.css({ "overflow": 'hidden' }); movePadding(el, el.find('.lb-wrap')); resizeMainBox(el); resizeInnerWrap(el, el.find('.lb-wrap')); } } function resizeMainBox(elem) { var el = $(elem); el.css({ "width": el.width() + paddingLeft + paddingRight, "height": el.height() + paddingTop + paddingBottom }); } function movePadding(from, to) { var fromEl = $(from); var toEl = $(to); fromEl.css({ "padding": 0 }); toEl.css({ "padding-top": paddingTop + 'px', "padding-left": paddingLeft + 'px', "padding-bottom": paddingBottom + 'px', "padding-right": paddingRight + 'px' }); } function resizeInnerWrap(main, child) { var mainEl = $(main); var childEl = $(child); mainEl.css({ "position": 'relative' }); childEl.css({ "width": mainEl.width() + vScrollWidth - paddingLeft - paddingRight, "height": mainEl.height() + hScrollWidth - paddingTop - paddingBottom }); } function setVScrollbarWidth(elem) { var el = $(elem); el.css({ "overflow": 'auto' }); vScrollWidth = offsetWidth - clientWidth - borderLeft - borderRight; el.css({ "overflow": 'hidden' }); } function setHScrollbarWidth(elem) { var el = $(elem); el.css({ "overflow": 'auto' }); hScrollWidth = offsetHeight - clientHeight - borderTop - borderBottom; el.css({ "overflow": 'hidden' }); } function wrap(elem, vscroll, hscroll) { var el = $(elem); var elemId = el.attr('id'); var wrap = 0; if (elemId !== undefined) { el.wrapInner('
'); wrap = $('#lb-wrap-' + id + '-' + elemId); } else { el.wrapInner('
'); wrap = $('#lb-wrap-' + id); } wrap.wrapInner('
'); if (vscroll) { el.prepend('
'); el.find('.lb-v-scrollbar').append('
'); } if (hscroll) { el.prepend('
'); el.find('.lb-h-scrollbar').append('
'); } // preparation for the next element id = id + 1; } function needScrollbars(elem) { var el = $(elem); addVScroll = false; addHScroll = false; getPadding(el); getBorders(el); el.css({ "overflow": 'hidden' }); // check for vertical scrollbars if (el.get(0).scrollHeight > el.get(0).clientHeight) { addVScroll = true; // setVScrollbarWidth(el); } // check for horizontal scrollbars if (el.get(0).scrollWidth > el.get(0).clientWidth) { addHScroll = true; // setHScrollbarWidth(el); } el.css({ "overflow": 'auto' }); if (addVScroll || addHScroll) { return true; } } function getPadding(elem) { var el = $(elem); paddingTop = parseInt(el.css('padding-top').replace('px', '')); paddingLeft = parseInt(el.css('padding-left').replace('px', '')); paddingBottom = parseInt(el.css('padding-bottom').replace('px', '')); paddingRight = parseInt(el.css('padding-right').replace('px', '')); } function getBorders(elem) { var el = $(elem); borderTop = parseInt(el.css('border-top-width').replace('px', '')); borderRight = parseInt(el.css('border-right-width').replace('px', '')); borderBottom = parseInt(el.css('border-bottom-width').replace('px', '')); borderLeft = parseInt(el.css('border-left-width').replace('px', '')); } function getDimentions(elem, scroll) { var el = $(elem).get(0); scrollHeight = (typeof(scroll) != 'undefined') ? scroll.height : el.scrollHeight; scrollWidth = (typeof(scroll) != 'undefined') ? scroll.width : el.scrollWidth; clientHeight = el.clientHeight; clientWidth = el.clientWidth; offsetHeight = el.offsetHeight; offsetWidth = el.offsetWidth; setVScrollbarWidth($(elem)); setHScrollbarWidth($(elem)); } return this.each(function() { //var $this = $(this); }); }; })(jQuery); // Скроллинг мышью при зажатой левой клавише. Для выполнения добавить класс dragscroll (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['exports'], factory); } else if (typeof exports !== 'undefined') { factory(exports); } else { factory((root.dragscroll = {})); } }(this, function(exports) { var _window = window; var _document = document; var mousemove = 'mousemove'; var mouseup = 'mouseup'; var mousedown = 'mousedown'; var EventListener = 'EventListener'; var addEventListener = 'add' + EventListener; var removeEventListener = 'remove' + EventListener; var newScrollX, newScrollY; var dragged = []; var reset = function(i, el) { for (i = 0; i < dragged.length;) { el = dragged[i++]; el = el.container || el; el[removeEventListener](mousedown, el.md, 0); _window[removeEventListener](mouseup, el.mu, 0); _window[removeEventListener](mousemove, el.mm, 0); } // cloning into array since HTMLCollection is updated dynamically dragged = [].slice.call(_document.getElementsByClassName('dragscroll')); for (i = 0; i < dragged.length;) { (function(el, lastClientX, lastClientY, pushed, scroller, cont) { (cont = el.container || el)[addEventListener]( mousedown, cont.md = function(e) { if (!el.hasAttribute('nochilddrag') || _document.elementFromPoint( e.pageX, e.pageY ) == cont ) { pushed = 1; lastClientX = e.clientX; lastClientY = e.clientY; e.preventDefault(); } }, 0 ); _window[addEventListener]( mouseup, cont.mu = function() { pushed = 0; }, 0 ); _window[addEventListener]( mousemove, cont.mm = function(e) { if (pushed) { (scroller = el.scroller || el).scrollLeft -= newScrollX = (-lastClientX + (lastClientX = e.clientX)); scroller.scrollTop -= newScrollY = (-lastClientY + (lastClientY = e.clientY)); if (el == _document.body) { (scroller = _document.documentElement).scrollLeft -= newScrollX; scroller.scrollTop -= newScrollY; } } }, 0 ); })(dragged[i++]); } } if (_document.readyState == 'complete') { reset(); } else { _window[addEventListener]('load', reset, 0); } exports.reset = reset; })); // Hyperscript (function() { window.hyperscript = function() { var me = this; this.charsList = '0123456789abcdefghijklmnopqrstuvwxyz'; this.callbacks = []; window.parent.addEventListener("message", function(event) { var cmd = event.data && typeof event.data.split === 'function' ? event.data.split(/:(.+)?/) : [''], args = []; var name = cmd[0]; if (cmd[1]) { try { args = JSON.parse(cmd[1]); } catch (err) {} } if (name == 'runCallback' && me.callbacks[args.callback]) { me.callbacks[args.callback](args.data); } if (name == 'ready') { $(document).trigger('hsready'); } if (name == 'scriptClose') { $(document).trigger('scriptClose'); } if (name == 'scriptDone') { $(document).trigger('scriptDone', args); } }); }; window.hyperscript.prototype.init = function() {}; window.hyperscript.prototype.sendMessage = function(cmd, params, cb) { cmd += ':' + (!!params ? JSON.stringify(params) : '') + ':' + this.setCallback(cb); top.hsiframe.postMessage(cmd, '*'); }; window.hyperscript.prototype.uniqid = function() { var s = ''; for (var i = 0; i < 32; i++) s += this.charsList[Math.round(Math.random() * (this.charsList.length - 1))]; return s; }; window.hyperscript.prototype.setCallback = function(cb) { var cbId = ''; if (!!cb) { cbId = this.uniqid(); this.callbacks[cbId] = cb; } return cbId; } })(); // Изменение в функционале ядра jQuery - Конец // Операции, требующие высокой скорости обработки !!! ---- // Перебираем все td и если они содержат 0 или 0,00 то ставим серый цвет $('body').find('td').each(function(index, element) { if ($(element).parents('table').attr('id') != 'client-stat-table' && ($(element).text() === '0' || $(element).text() === '0,00' || $(element).text() === '0,000')) $(element).css({ 'color': '#CCC' }); }); // Если таблица больше ширины экрана, то включаем скролл var firstRun = true; $('#headcol-fix').parents('.c').sizeChanged(function() { if (!firstRun) resizeFix('#headcol-fix'); }); var twoRun = true; $('#headcol-fix-two').parents('.c').sizeChanged(function() { if (!twoRun) resizeFix('#headcol-fix-two'); }); resizeFix('headcol-fix'); resizeFix('headcol-fix-two'); function resizeFix(tableId) { if ($('#' + tableId).length > 0) { // Запас на отступы var delta = 25; var mainL = document.getElementById('main-layer').getBoundingClientRect(); var tableScr = document.getElementById(tableId).getBoundingClientRect(); var over = tableScr.right - mainL.right + delta; // Нужная ширина таблицы var mustWidth = tableScr.width - over; $('#' + tableId).width(mustWidth); $('#' + tableId).children('.headcol-fix-shadow').height($('#' + tableId).height()); // Если ячеек мало для заполнения таблицы var allThWidth = 0; var oneThWidth = 0; var allThCount = 0; var mustThWidth = 0; var firstThWidth = $('#' + tableId).children('table').find('th').first().width(); var mustTh = $('#' + tableId).children('table').find('th:not([class*="headcol"])'); mustTh.each(function(index, element) { allThWidth += $(element).innerWidth(); allThCount++; }); if ((allThWidth + firstThWidth) < mustWidth && allThCount > 0) { mustThWidth = (mustWidth - allThWidth - firstThWidth) / allThCount; // Добавляем ширины ячейкам mustTh.each(function(index, element) { $(element).outerWidth($(element).outerWidth() + mustThWidth); }); } if (tableId == '#headcol-fix') firstRun = false; if (tableId == '#headcol-fix-two') twoRun = false; } } // Операции, требующие высокой скорости обработки !!! - Конец ---- $(function() { //if (OSName == 'MacOS' && desktopVerify == true) $('body').append(""); // Прокрутка блока вправо if ($('.scroll-left').length > 0) { $('.scroll-left').each(function(i, o) { o.scrollLeft = o.offsetWidth; console.log(o.scrollLeft, o.offsetWidth) }); } // HyperScript - Начало localStorage.setItem('hsauth', JSON.stringify({ user: 'solonitsyna.e@sskindustry.ru', key: '20c0dee9dfdf734ff7faa1c5fd3a15e77582ee54' })); var hyperscript = new window.hyperscript(); if (typeof top.hsiframe != 'undefined') { hsInit(); } $(document).on('hsready', function() { hsInit(); }); function hsInit() { console.log('Hyperscript ready'); // Действия по клику на кнопках, которые управляют окном фрейма $(top.hsiframe).on('click', function(e) { // Закрыть фрейм if ($(e.target).hasClass('closeFrame')) { $(top.document).find('iframe').each(function(i, obj) { $(obj).attr('class', ''); $(top.document).find('body').removeClass('halfView') }); } // Сдвинуть фрейм вправо if ($(e.target).hasClass('closeRight')) { if ($(top.document).find('body').hasClass('halfView')) { $(top.document).find('body').removeClass('halfView'); } else { $(top.document).find('body').addClass('halfView'); } } }); var hsauth = localStorage.getItem('hsauth'); if (hsauth) { var params = JSON.parse(hsauth); hyperscript.sendMessage('isPair', params, function(data) { if (data.pair == true) { if (!$(top.hsiframe.document).find('.js_view_box').is(":visible")) { hyperscript.sendMessage('showScriptList', params, function(result) { if (result.status == 'ok') { params.id = result.id; params.skipStart = true; hyperscript.sendMessage('hideScriptList'); hyperscript.sendMessage('showScript', params); } else { if (result.msg) { alert(result.msg); } } }); } } else { hyperscript.sendMessage('showAuthForm', params, function(data) { if (data.status == 'ok') { hyperscript.sendMessage('hideAuthForm'); var params = {}; params.user = data.user; params.key = data.key; localStorage.setItem('hsauth', JSON.stringify(params)); hyperscript.sendMessage('showScriptList', params, function(result) { if (result.status == 'ok') { params.id = result.id; params.skipStart = true; params.values = [{ 'name': '' }, { 'lastname': '' }, { 'company': 'ООО Скрипты' }, { 'email': '' }, { 'phone': '' }]; hyperscript.sendMessage('hideScriptList'); hyperscript.sendMessage('showScript', params); } else { if (result.msg) { alert(result.msg); } } }); } else { if (data.msg) alert(data.msg); } }); } }); } } //}); $(document).on('scriptClose', function() { var params = {}; try { params = JSON.parse(localStorage.getItem('hsauth')); } catch (e) { console.log('Ошибка:', e); } hyperscript.sendMessage('hideScript'); hyperscript.sendMessage('showScriptList', params, function(result) { if (result.status == 'ok') { params.id = result.id; params.skipStart = true; hyperscript.sendMessage('hideScriptList'); hyperscript.sendMessage('showScript', params); } else { if (result.msg) { alert(result.msg); } } }); }); $(document).on('scriptDone', function(event, data) { console.log(data); }); // HyperScript - Конец $('body').find('#ordercard-list').on('click', '.position', function() { $('.position').attr('style', ''); $(this).attr('style', 'background:#e3e3e3 !important;'); var idNomen = $(this).data('id-pos'); // Перехватываем нажания клавиш sessionStorage['JustCRM_lastNomen'] = idNomen; }); // Переход к позиции при нажатии на стрелочку в корзине $('body').on('click', '.goto-nomen', function() { var thisPosId = $(this).parent('tr').data('id-pos'); location.href = '/nomen?link_last_nomen=' + thisPosId; sessionStorage['JustCRM_lastNomen'] = thisPosId; }); // Перехватываем нажания клавиш. // Изменения фокуса и прочие состояний в связи с отображением элементов, их скрытием и т.д. $(window).on('keydown', function(e) { var keycode = (e.keyCode ? e.keyCode : e.which); // При нажатии на Esc закрываем последнее окно if (keycode === 27) { if ($('body').find('.popup').length > 0) { $('body').find('.popup').last().find('.close').trigger('click'); } } // Enter if (keycode === 13) { // Если нажатие было внутри формы, то находит кнопку submit и кликаем по ней var thisForm = $(document.activeElement).closest('form'); if (thisForm.length > 0 && thisForm.attr('id') === 'filter') { thisForm.find('.orange-but').trigger('click'); } } // По нажатию на Insert переходит к данной позиции номенклатуры, если есть sessionStorage['JustCRM_lastNomen'] if (keycode == 45 && typeof sessionStorage['JustCRM_lastNomen'] != 'undefined' && sessionStorage['JustCRM_lastNomen'] != '') { location.href = '/nomen?link_last_nomen=' + sessionStorage['JustCRM_lastNomen']; } }); // Открываем корзину заказов для изделий из листового металла, если установлена метка if (typeof sessionStorage['JustCRM-EditOrderList'] != 'undefined') { editOrderListView(sessionStorage['JustCRM-EditOrderList']); } // Удаление файловых блоков $('[data-file-trash]').on('click', function() { var attr = $(this).attr('data-file-trash'); $(this).parent().parent('div').remove(); $('[value="' + attr + '"]').remove(); }); // Если в исполнители выбрали всех, то выбираем всех $('.select22-select-all').on('click', function() { console.log($(this).parent('div')); $(this).parents('div').children('select').children('option').prop('selected', true); $(this).parents('div').children('select').trigger('change'); }); $('.select22-unselect-all').on('click', function() { $(this).parents('div').children('select').children('option').prop('selected', false); $(this).parents('div').children('select').trigger('change'); }); // Выбор шаблона для событий $('#events_template_select').on('change', function() { $('#events_subject').val($('#events_template_select option:selected').val()); $('#events_comments').val($('#events_template_select option:selected').data('content')); }) // Скрипты продаж $('body').on('click', '#view-script', function() { //window.parent.frames[1].location.reload(); $('#hyperscript', window.parent.document).addClass('messenger-view animated slideInRight'); }); // Чат $('body').on('click', '#messenger', function() { //window.parent.frames[1].location.reload(); $('#justmessenger', window.parent.document).addClass('messenger-view animated slideInRight'); }); // Если счетчик непрочитанных сообщений заполнен, то выводим значение if (typeof(localStorage['allNew']) != 'undefined') $('.new').html(localStorage['allNew']); // Глобальный таймер событий setInterval(function() { // Запрос на число новыйх сообщений в чате var urii = window.location; var urlMessage = urii.protocol + '//' + urii.hostname + '/api/chats/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); // Если в пути есть якорь, то скроллим страницу к этому тегу if (window.location.search.indexOf('ancor') >= 0 || window.location.search.indexOf('ancoor') >= 0) { var url_scr = new URL(window.location); var url_scr_ancor = url_scr.searchParams.get('ancor'); if (typeof delay == 'undefined') var delay = 0; //preloader('show'); //scr(url_scr_ancor, delay); // delay - указывается глобально в источнике вызова if (window.location.search.indexOf('ancoor') >= 0) { scrInDiv(url_scr_ancor); } else { scr(url_scr_ancor); } } // Пикеры даты и времени и прочее... $('.date').datepicker({ minDate: '0', beforeShow: function(input, obj) { $(input).after($(input).datepicker('widget')); } }); $('.date1').datepicker({ beforeShow: function(input, obj) { $(input).after($(input).datepicker('widget')); setTimeout(function() { obj.dpDiv.css({ position: 'absolute', top: '100%', left: 0 }); }, 0); } }); $('.date2').datepicker({ minDate: '-7d', beforeShow: function(input, obj) { $(input).after($(input).datepicker('widget')); } }); $('.date3').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(); // С поиском клиентов и лидов // Подбор позиции $("#tasks_id_target").select2({ language: { searching: function() { return "Идет поиск..."; }, errorLoading: function() { return "Ничего не найдено..." }, noResults: function() { return "Ничего не найдено..." }, removeAllItems: function() { return "Удалить все результаты." }, inputTooShort: function(args) { return "Введите не менее " + args['minimum'] + " символов"; }, }, ajax: { url: location.protocol + '//' + location.host + '/ajax-send/data-clients-search.php?guid=' + guid, dataType: 'json', delay: 250, cache: true, data: function(params) { var query = { search: params.term, type: 'tasks_id_target' } return query; }, processResults: function(data) { return { results: data //[{ id: 1, text: 'Test' }] }; } }, placeholder: 'Поиск позиции', minimumInputLength: 3, dropdownParent: $('#tasks') }); // С поиском клиентов и лидов // Подбор позиции $("#events_id_target").select2({ language: { searching: function() { return "Идет поиск..."; }, errorLoading: function() { return "Ничего не найдено..." }, noResults: function() { return "Ничего не найдено..." }, removeAllItems: function() { return "Удалить все результаты." }, inputTooShort: function(args) { return "Введите не менее " + args['minimum'] + " символов"; }, }, ajax: { url: location.protocol + '//' + location.host + '/ajax-send/data-clients-search.php?guid=' + guid, dataType: 'json', delay: 250, cache: true, data: function(params) { var query = { search: params.term, type: 'events_id_target' } return query; }, processResults: function(data) { return { results: data //[{ id: 1, text: 'Test' }] }; } }, placeholder: 'Поиск позиции', minimumInputLength: 3, dropdownParent: $('#events') }); // Иерархическое дерево $('.select23').select2({ forceabove: true, escapeMarkup: function(markup) { return markup; }, templateResult: function(data) { // Получаем уровень вложения if (typeof(data.element) != 'undefined' && typeof(data.element.attributes['data-level']) != 'undefined') { var paddingElem = data.element.attributes['data-level'].value; } if (data.loading) { return data.text; } var markup = ""; if (data.children) { markup = "
" + data.text + "
"; } else { markup = "
" + data.text + "
"; } return markup; }, templateSelection: function(data) { return data.text; }, queryComplete: function(select2, term) { //Register the parent element click event select2.$results.children().click(function() { //Triangle Transform position var triangle = $(this).find(".select2-treeview-triangle"); if (triangle.hasClass("select2-treeview-down")) { //triangle.removeClass("select2-treeview-down").addClass("select2-treeview-right"); } else { triangle.removeClass("select2-treeview-right").addClass("select2-treeview-down"); } //Toggle child elements are hidden or displayed $(this).children("ul").toggle(); }).click(); // Shrink all groups var highlighted = select2.$results.find('.select2-results__option--highlighted'); //Expand the grouping of the selected columns highlighted.parent().show(); //Toggle the triangles of the selected section var triangle = highlighted.parent().parent().find(".select2-treeview-triangle"); triangle.removeClass("select2-treeview-right").addClass("select2-treeview-down"); //The scroll bar position // 35 = $(".select2-search--dropdown").outerHeight() // 29 = (".select2-results__option--highlighted").outerHeight() select2.$results.scrollTop(highlighted[0].offsetTop - 35 - 29); } }); // Часы digitalClock(); // Тек. год в футер $('#yearCur').text(new Date().getFullYear()); // Textarea c HTML-форматированием if ($('.editableHTML').length > 0) { $('.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.previousElementSibling.value = $(this).html(); }); } // Выделение пункта меню в зависимости от модуля 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': '#c93939', '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': '1.8em' }); $('#menu-cell').addClass('menu-hide'); $('#slideIn').fadeIn(250); $('#slide').css({ 'left': '-14.5em', 'display': 'block' }); setCookie("hideMenu", "true"); removeBars('#menu-cell'); }); $('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() { $('#slide').css({ 'left': 0 }); $('#slideOut').fadeOut(100); $('#slideIn').fadeOut(100); $('#menu-cell').removeClass('menu-hide').addClass('menu-over'); $(document).mousemove(function(e) { if (e.pageX >= 320) { $('#slide').css({ 'left': '-14.5em' }); $('#slideIn').fadeIn(100); $('#menu-cell').addClass('menu-hide'); $(document).unbind('mousemove'); } }); showBars('#menu-cell'); }); $('#open-menu').on('click', function() { $('#slide').css({ 'left': 0 }); $('#slideOut').fadeOut(100); $('#slideIn').fadeOut(100); $('#menu-cell').removeClass('menu-hide').addClass('menu-over'); $(document).mousemove(function(e) { if (e.pageX >= 320) { $('#slide').css({ 'left': '-14.5em' }); $('#slideIn').fadeIn(100); $('#menu-cell').addClass('menu-hide'); $(document).unbind('mousemove'); } }); showBars('#menu-cell'); }); $('.l-menu').sizeChanged(function() { showBars('#menu-cell'); }) // Скрыть/показать верхнее меню $('.wrap-user-menu').on('mouseover', function() { $('.wrap-user-menu').hide(); $('.manager-kpi').fadeOut('fast'); $('.wrap-user').show('fast', function() { $(document).mousemove(function(e) { var topDiv = $('#top-line').position().top; if (e.pageY > topDiv) { $('.wrap-user').hide('fast'); $('.wrap-user-menu').show('fast'); $('.manager-kpi').fadeIn('fast'); } }); }); }); // Изменение внешнего вида scrollbars function showBars(obj) { // Удаляем все ранее примененные значения и созданные тэги removeBars(obj); // Применяем заново $(obj).lionbars({ autohide: false }); } function removeBars(obj) { // Удаляем все ранее примененные значения и созданные тэги $(obj).attr('style', ''); $(obj).find('.lb-v-scrollbar, .lb-h-scrollbar').remove(); $(obj).find('.l-menu').unwrap('.lb-content').unwrap('.lb-wrap'); } // Добавление задачи $('#add_tasks, #add_tasks_docs').on('click', function() { //console.log('!', document.location.pathname); if (document.location.pathname.indexOf('/_') >= 0) { setTimeout(function() { var tasks_object_url = (document.location.pathname.indexOf('one=true') >= 0) ? document.location.pathname : document.location.pathname + '?one=true'; $('[name=tasks_object_url]').val(tasks_object_url); var name = $('body').find('h2').first().text(); if (!$('#tasks_object_dop').length) $('#tasks_object').append(''); $('#_tasks_object').val(name); }, 250); } }); // Добавление события $('#add_events').on('click', function() { //console.log('!', document.location.pathname.indexOf('/_')); if (document.location.pathname.indexOf('/_') >= 0) { setTimeout(function() { var tasks_object_url = (document.location.pathname.indexOf('one=true') >= 0) ? document.location.pathname : document.location.pathname + '?one=true'; $('[name=tasks_object_url]').val(tasks_object_url); var name = $('body').find('h2').first().text(); if (!$('#events_object_dop').length) $('#events_object').append(''); $('#_events_object').val(name); }, 250); } }); // Выбор иконки статуса $('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"]'); if (Object.keys(butt).length > 0 && butt.parents('.popup').length > 0 && butt.parent('form').attr('id') == 'add_nomens_form') { butt.trigger('click'); } if (e.target.classList[0] !== 'editable') { e.preventDefault(); } } }); // Очистка переменных сессии фильтра без отправки формы $('body').on('click', '#clear', function() { var uri = window.location; uri.href = uri.protocol + '//' + uri.hostname + '/' + module + '?clear=true' }); // Открываем фиксируем позицию таблицы по которой был клик $('body').on('click', '[data-id]', function() { // Пропускаем событие если указано if ($(this).attr('data-id') == 'stop') return; $('[data-id]').css({ 'background': '', 'color': '' }); $(this).attr('style', 'background:#49a0e7 !important; color:#FFF'); }); // Если это desktop это используем двойной клик, если мобильная платформа, то используем одинарный клик var clickVariance = (desktopVerify == false) ? 'dblclick' : 'click'; // Открываем страницу с контентом по имени и id $('body').on(clickVariance + ' touchend', '[data-id]', function(e) { // Пропускаем событие если указано if ($(this).attr('data-id') == 'stop' || e.target.tagName == 'IMG') return; // Действие только если есть у родителя аттрибут data-form if ($(this).parents('[data-form]').length === 0) return; e.stopPropagation(); var uri = window.location; var thisObj = $(this); var m = (thisObj.attr('data-module')) ? thisObj.attr('data-module') : module; var onlyM = (!thisObj.attr('data-id') || thisObj.attr('data-id') == '') ? '' : '/'; uri.href = uri.protocol + '//' + uri.hostname + '/' + m + onlyM + thisObj.attr('data-id'); }); // Удаление записи (в другую папку) $('body').on('click', '[data-to-folder]', function(e) { e.stopPropagation(); popup('atten', 'Внимание!', 'Вы подтверждаете удаление записи?', true, false, $(this).attr('data-to-folder') + ' | ' + $(this).attr('data-table'), 'send_request', 'data-exchange', 'data-to-folder'); }); // Удаление записи $('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-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(''); }); // Табы $('[id ^= tab-btn-]').on('click', function(e) { sessionStorage['JustCRM_activeTab'] = $(this).attr('id'); }) if (typeof sessionStorage['JustCRM_activeTab'] != 'undefined') $('#'+sessionStorage['JustCRM_activeTab']).trigger('click'); //---- Аккордеон и виджет $('.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 = Number(a.getAttribute('data-index')), bn = Number(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 = (Math.round(obj.find('.acrdCont').height()) !== 0) ? false : true; console.log(visible, action, obj.find('.acrdCont').height()); 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()); 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 (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(); }); //---- Аккордеон и виджет - Конец //---- Cортировка для файлов и категорий $('.file-drag, .category-drag').on('mousedown', function() { // Файлы вне категорий $('.file-drags').sortable({ revert: true, connectWith: '.category', update: function(event, ui) { var sequence = seqClear($(this).sortable('serialize')); console.log('Изменение позиции файла вне категории', 'file_category', ui.item.parent().attr('data-category-id'), ui.item.attr('data-id-file'), sequence); var datas = '{"type":"file_category", "category_id":"' + ui.item.parent().attr('data-category-id') + '", "file_id":"' + ui.item.attr('data-id-file') + '", "sequence":"' + sequence + '"}'; send_request(datas, 'data-exchange', 'data-file-category'); }, stop: destroyAll }).disableSelection(); // Файлы в категориях $('.category').sortable({ connectWith: '.category, .file-drags', update: function(event, ui) { var sequence = seqClear($(this).sortable('serialize')); console.log('Изменение позиции файла', 'file_category', ui.item.parent().attr('data-category-id'), ui.item.attr('data-id-file'), sequence); var datas = '{"type":"file_category", "category_id":"' + ui.item.parent().attr('data-category-id') + '", "file_id":"' + ui.item.attr('data-id-file') + '", "sequence":"' + sequence + '"}'; send_request(datas, 'data-exchange', 'data-file-category'); }, stop: destroyAll }).disableSelection(); // Категории $('.category-drags').sortable({ beforeStop: function(event, ui) { console.log('Изменение позиции категории', 'category', ui.item.attr('data-category-id'), seqClear($(this).sortable('serialize'))); var datas = '{"type":"category", "category_id":"' + ui.item.parent().attr('data-category-id') + '", "sequence":"' + seqClear($(this).sortable('serialize')) + '"}'; send_request(datas, 'data-exchange', 'data-file-category'); }, stop: destroyAll }).disableSelection(); // Отключаем распространие методов на род. элементы, останавливаем процесс перетаскивания function destroyAll() { $('.file-drags, .category, .category-drags').sortable('destroy'); //$('.ui-sortable-placeholder').remove(); } // Изменяем вид строки с инф. о порядке расположения элементов на 1,4,6 function seqClear(seq) { var arr = seq.split('&'); for (var key in arr) { arr[key] = arr[key].replace(/[^0-9]/gim, ''); } return arr.join(); } }); $('.category-zag').on('click', function(event) { if (event.target.tagName != 'DIV') return; var target = $(this).next('.category'); if (target.hasClass('category-hide')) { target.removeClass('category-hide'); var show = 1; } else { if (target.children().length > 0) { target.addClass('category-hide'); var show = 0; } } console.log('Скрыть/Отобразить категорию', 'category_hide', $(this).next().attr('data-category-id'), show); var datas = '{"type":"category_hide", "category_id":"' + $(this).next().attr('data-category-id') + '", "show-hide":"' + show + '"}'; send_request(datas, 'data-exchange', 'data-file-category'); }); // Размещаем все файлы по категориям $(function() { $('.file-drags').children().each(function(index, element) { var cat = $(element).data('cat'); if (typeof cat != 'string' && cat != 0 && $('#cat_' + cat)) { $('#cat_' + cat).children('[data-category-id=' + cat + ']').append(element); } }); $('#allFiles').css({ 'display': 'block' }); }); //---- Cортировка для файлов и категорий - Конец // Кладывание раскладывание контактов if ($('.requisites')) { $('.requisites').each(function(index, element) { if (element.scrollHeight > element.clientHeight) { $(element).next('.icon').append(''); } }) } $('.requisites').click(function() { $(this).toggleClass('maxi'); if ($(this).find('img').css('display') == 'block') $(this).find('img').css({ 'display': 'none' }); else $(this).find('img').css({ 'display': 'block' }); resizeWidget(this); }); // Редактирование и удаление контактов $('.edit-contact').on('click', function() { location.href = '/' + module + '/_details/' + curUrl[3] + '?edit-contact=' + $(this).attr('id-contact') + '&in-form=client_contacts'; }); // Редактирование парка техники $('.edit-vehicle').on('click', function() { location.href = '/' + module + '/_details/' + curUrl[3] + '?edit-vehicle=' + $(this).attr('id-vehicle') + '&in-form=client_vehicles'; }); // Редактирование НОВОГО парка техники $('.edit-vehicle-new').on('click', function() { location.href = '/' + module + '/_details/' + curUrl[3] + '?edit-vehicle-new=' + $(this).attr('id-vehicle-new') + '&in-form=client_vehicles_new'; }); // Редактирование доп. телефонов $('.edit-add-phone').on('click', function() { location.href = '/' + module + '/_details/' + curUrl[3] + '?edit-add-phone=' + $(this).attr('id-phone') + '&in-form=client_add_phone'; }); // Редактирование потребности $('.edit-needs').on('click', function() { location.href = '/' + module + '/_details/' + curUrl[3] + '?edit-needs=' + $(this).attr('id-needs') + '&in-form=client_needs'; }); // Редактирование субъективного бюджета $('.edit-subbudjet').on('click', function() { location.href = '/' + module + '/_details/' + curUrl[3] + '?edit-subbudjet=' + $(this).attr('id-subbudjet') + '&in-form=client_budjet'; }); // Редактирование признаков $('.edit-features').on('click', function() { location.href = '/' + module + '/_details/' + curUrl[3] + '?edit-features=' + $(this).attr('id-features') + '&in-form=client_features'; }); // Кладывание раскладывание доп. информации в таблице $('.zag-position').click(function() { $('.dop-position').hide(); var obj = $(this).next('.dop-position'); obj.show(); resizeWidget(obj[0]); }); // Табы // Переключаем $('.tabs-zag').click(function() { var i = $(this).index('.tabs-zag'); $('.tabs').hide(); $('.tabs:eq(' + i + ')').show(); }); // Сбрасываем состояние табов по дефолту $('.tabs-zag1').click(function() { localStorage.removeItem('JustCRM_accordion'); location.href = '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]; }); //---- Формы // Действия при отметке доп. поле формы $('form').on('change', ':checkbox', function() { if ($(this).hasClass('d')) { if ($(this).is(':checked')) { $('.dop').slideDown(300); } else { $('.dop').slideUp(300); } } }); // Вывод и сбор данных с чекбоксов // Расставляем чекбоксы 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() { var upload = document.getElementById($(this).attr('id')); files = this.files; function getFileNames() { return Array.prototype.map.call(upload.files, function(file) { return ' ' + file.name; }); } $(this).prev('label').children('div').html(getFileNames()); }); // Проверка и отправка данных формы $('form').validationEngine('attach', { promptPosition: 'bottomLeft', onValidationComplete: function(form, status) { if (status === true && $(form).attr('no-send') != 'true') { var formId = $(form).attr('id'); var clientType = $(form).data('client-type'); var datas = $(form).serializeArray(); switch (formId) { case 'client_form': // Проверка на совпадение ИНН/КПП var dataInnKpp = []; dataResult = { wait: true }; for (key in datas) { if (datas[key].name == 'INN' || datas[key].name == 'KPP' || datas[key].name == 'id') { dataInnKpp.push(datas[key].value); if (datas[key].name == 'id') { if (clientType == 'client') { send_request(dataInnKpp.join('|'), 'data-exchange', 'data-clients-search-inn-kpp'); } else { send_request(dataInnKpp.join('|'), 'data-exchange', 'data-fiz-search-inn-kpp'); } break; } } } var waitResult = setInterval(function() { if ($.isEmptyObject(dataResult)) { dataSend(formId, datas, files); clearInterval(waitResult); dataResult = {}; } else if (!dataResult.wait) { var clientDublicateInnKpp = ''; for (var key in dataResult) { var clientDublicateName = (dataResult[key].name == '') ? dataResult[key].fullName : dataResult[key].name; clientDublicateInnKpp += '
  • Клиент: ' + clientDublicateName + ', Менеджер: ' + dataResult[key].managerName + '
  • '; } popup('bad', 'Ошибка!', 'Запись данных невозможна!
    Обнаружено совпадение ИНН/КПП по клиенту/ам:

    ' + clientDublicateInnKpp, true, false); clearInterval(waitResult); dataResult = {}; } }, 1); return; break; 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': case 'events_form': // Если форма добавления задач send_request(datas, 'data-exchange', 'data-add-task', formId, files); return; break; default: dataSend(formId, datas, files); } } else { preloader(); } } }); // Функция отправки данных и файлов window.dataSend = function(url, datas, files) { // Отображаем прелоадер preloader(); preloader('show'); // Создадим данные формы и добавим в них данные файлов из files var data = new FormData(); $.each(files, function(key, value) { data.append(key, value); }); // Создадим данные формы и добавим в них данные из других полей ввода $.each(datas, function(key, value) { data.append(value.name, value.value); }); // Вывод отправляемых данных //for (var pair of data.entries()) { // console.log(pair[0]+ ', ' + pair[1]); //} // Правило для форм с файлами договоров if (url.indexOf('file-vehicles') > -1) url = 'file-vehicles'; // Правило для формы авторизации var uri = (url == 'login_form') ? '/' : '/' + module + '/' + url; // Правило для форм с классическим типом отправки данных if (url == 'filter' || url == 'search') { $('#' + 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) { 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': localStorage.removeItem('JustCRM_lastURL'); window.location.href = window.location.origin; break; case 'file_upload': popup('good', 'Успешно!', 'Файл данных загружен и обработан.', true, false); break; case 'mail_new_form': popup('good', 'Успешно!', 'Письмо отправлено.', true, false); delayClosePopup(1000); delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]); break; case 'client_contacts_form': case 'client_comments_form': case 'document_comment_form': case 'files-order': case 'client_file_cat_form': case 'client_file_form': case 'client_vehicles_form': case 'client_vehicles_new_form': case 'client_add_phone_form': case 'client_needs_form': case 'client_budjet_form': case 'client_features_form': case 'file-vehicles': popup('good', 'Успешно!', 'Данные обработаны.', true, false); delayClosePopup(1000); delayReload(1000, '/' + curUrl[1] + '/' + curUrl[2] + '/' + curUrl[3]); break; case 'client_all_file_cat_form': case 'client_all_file_form': popup('good', 'Успешно!', 'Данные обработаны.', true, false); delayClosePopup(1000); // Добавляем строку параметров в конце (если они есть) delayReload(1000, '/' + curUrl[1] + '?' + location.href.split('?')[1]); break; //case 'client_form': //popup ('bad', 'Ошибка!', 'Добавление клиентов c одинаковыми ИНН/КПП запрещено!
    '+innKppDublicate, true, false); //location.href = '/'+module+'/_details/'+curUrl[3]; //break; case 'draw_form': delayClosePopup(1000); delayReload(1000, '/' + curUrl[1]); break; default: // Если редактировали форму на странице полной информации, то возвращаемся обратно на эту страницу if (document.referrer.indexOf('/_') >= 0 && data.get('GUID') != '') { window.location.href = document.referrer; } else { 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; case 405: 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; case 'client_lidas_form': var responceLidas = JSON.parse(jqxhr.responseText); if (Object.keys(responceLidas.error).length > 0) { var errorLidasContent = ''; for (key in responceLidas.error) { //console.log(responceLidas.error[key].error, responceLidas.error[key].str_num); errorLidasContent += ''; } errorLidasContent += '
    № строки:Перечень ошибок:
    ' + responceLidas.error[key].str_num + ''; if (Array.isArray(responceLidas.error[key].error)) { for (keyArr in responceLidas.error[key].error) { errorLidasContent += '
    ' + responceLidas.error[key].error[keyArr] + '
    '; } } errorLidasContent += '
    ' popup('bad', 'Ошибка при загрузке файла!', errorLidasContent, 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()); // Показываем/скрываем левый блок меню и данных в зависимости от ширины экрана if ($('.l-menu').is(':visible') && allW < 1450) { $('#slideOut').trigger('click'); } if (!$('.l-menu').is(':visible') && allW > 1450) { $('#slideIn').trigger('click'); } } // Генерация 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]).attr('data-command') == 'no-clear') continue; if (w[i].type == 'checkbox') { w[i].checked = false; } } } //---- 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% !important; 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; case 'small-image': thisH.append(head); thisH.parent('.wind').css({ 'width': '50%' }); thisC.append(message); break; case 'big-image': thisH.append(head); thisH.parent('.wind').css({ 'width': '80%' }); thisC.append(message); break; default: thisH.append(head); thisC.append(message); } // Проверяем наличие поля, и если оно есть, то даем ему фокус //$('.popup').last().find('input').first().focus().select(); } function delayClosePopup(time) { setTimeout(function() { $('.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-popup', function(e) { $(this).closest('.wind').find('.close').trigger('click'); }); $(document).on('click', '.close', 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).closest('.popup').last(); t.children('.wind').removeClass('zoomIn').addClass('zoomOut'); t.fadeOut('slow', function() { t.remove(); }); var curClass = $('.popup .wind .head').last().attr('class'); if (typeof curClass != 'undefined' && curClass.indexOf('good') < 0 && curClass.indexOf('bad') < 0 && curClass.indexOf('atten') < 0) { $('#_wrap').append(t.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', '.img', function(e) { e.stopImmediatePropagation(); e.stopPropagation(); if (!$('img').is('#popupImg')) { var i = new Image(); i.src = $(this).attr('src'); var width = i.width; var height = i.height; popup('small-image', '', ''); } }); $(document).on('click', '.img-big', function(e) { e.stopImmediatePropagation(); e.stopPropagation(); if (!$('img').is('#popupImg')) { var i = new Image(); i.src = $(this).attr('src'); var width = i.width; var height = i.height; popup('big-image', '', ''); } }); // Подтверждение действия 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(); $('.editable').html(''); $('.popup').last().find('input, textarea, select').each(function(indx, element) { // Удаляем аттрибут disabled if (typeof($(this).attr('disabled')) != 'undefined' && $(this).attr('data-command-d') != 'no-clear-d') $(this).removeAttr('disabled'); // Если поле имеет аттрибут data-command="no-clear", то не удаляем из него значение if ($(this).attr('data-command') == 'no-clear') return; $(this).find('.input-imitation').html(''); if ($(this)[0].type != 'radio') $(this).val(''); if ($(this)[0].nodeName == 'TEXTAREA') { $(this).html(''); $(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 page_arr(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 + uri.pathname + '?page=' + (url - 1); } else { if (url > (maxPage - 1)) return; uri.href = uri.protocol + '//' + uri.hostname + uri.pathname + '?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, obj) { if (action === 'show') { var objToView = (obj) ? obj : 'body'; var objClass = (obj) ? 'preloader preloader-obj' : 'preloader'; $(objToView).append('
    Подождите...
    '); } else { var obj = $('.preloader'); obj.fadeOut('fast', function() { obj.remove(); }); } } // Preloader - Конец // Функции для работы с куки function setCookie(name, value, url) { var path = (typeof(url) != 'undefined') ? url : '/'; document.cookie = name + '=' + value + '; path=' + 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'); } // Выбор фурнитуры - Конец // Отправка данных // Глобальный объект для функции send_request - dataResult; //var dataResult; dataResult = {}; dataResultTwo = {}; function send_request(data, form, command, formId, files, customUrl) { 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 'get_mail': preloader('show'); break; case 'data-trash': case 'data-trash-no-back': data = data.split(' | '); preloader('show'); break; case 'data-add-task': case 'data-speedsend-sms': 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(); } } // Если используется customUrl var requestUrl = (typeof customUrl != 'undefined') ? customUrl : 'ajax-send'; $.ajax({ url: '/' + requestUrl + '/' + command + '.php?guid=' + guid, type: 'POST', dataType: 'json', contentType: 'application/json', async: (command == 'data-add-order' || command == 'data-add-order-list') ? false : true, data: JSON.stringify(data), success: function(respond, textStatus, jqXHR) { switch (command) { case 'data-get-json-temp': case 'data-save-json-temp': case 'data-get-bending': dataResultTwo = respond; return; case 'send_request_remains': dataResultOld = respond; return; break; case 'data-add-order': case 'data-add-order-list': case 'data-edit-order': case 'data-edit-order-list': case 'data-make-invoice': case 'data-make-sketch': case 'data-get-pricelist': dataResultThree = respond; popup('good', 'Успешно!', 'Запрос выполнен!', true, false); delayClosePopup(500); return; case 'data-clients-search-inn-kpp': case 'data-client-widget': dataResult = respond; return; break; case 'data-trash': case 'data-trash-no-back': case 'data-trash-multiple': case 'data-to-folder': 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; } } console.log(respond); data.push({ "name": "task_id", "value": respond.responce[1] }); dataSend(formId, data, files); sendSocket('{"command":"new_task", "task_url":"/tasks/_details/' + respond.id + '", "id":"' + id + '", "id_client":"' + guid + '", "id_executors":' + JSON.stringify(id_executors) + '}'); break; case 'data-add-event': 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; } } data.push({ "name": "task_id", "value": respond.responce[1] }); dataSend(formId, data, files); sendSocket('{"command":"new_task", "task_url":"/events/_details/' + respond.id + '", "id":"' + id + '", "id_client":"' + guid + '", "id_executors":' + JSON.stringify(id_executors) + '}'); break; case 'data-make-call': popup('good', 'Успешно!', 'Выполняется вызов на номер: ' + data, true, false); break; case 'data-speedsend-sms': popup('good', 'Успешно!', 'Сообщения отправлены!', true, false); delayReload(500); break; case 'data-favorites': delayClosePopup(500); if (typeof respond.command != 'undefined' && respond.command == 'reload') { delayReload(500); } else if (typeof respond.error != 'undefined' && respond.error == 'max_fav') { popup('bad', 'Внимание!', 'Создано максимальное кол-во закладок!
    Удалите старые записи из избранного!', true, false); delayClosePopup(500); } else { popup('good', 'Успешно!', 'Добавлено в избранное!', true, false); delayClosePopup(500); } break; case 'data-send-setting-juststat': delayClosePopup(250); setTimeout(function() { popup('good', 'Успешно!', 'Настройки JustStat обновлены.', true, false); delayClosePopup(500); }, 300); break; default: delete dataResult; dataResult = respond; } }, error: function(jqxhr, status, errorMsg) { switch (command) { case 'data-get-bending': dataResultTwo = jqxhr; console.log(errorMsg) if (errorMsg === 'Goods not found') { popup('bad', 'Ошибка!', 'Невозможен заказ изделия с указанными параметрами.
    Скорректируйте размеры A,B,C,D.', true, false); } else if (errorMsg === 'Incorrect size') { popup('bad', 'Ошибка!', 'Размер A,B,C,D не может быть меньше загиба.
    Скорректируйте размеры A,B,C,D.', true, false); } else { popup('bad', 'Ошибка!', 'Сервер недоступен!
    Возможно закончился сеанс авторизации.', true, false); } delayClosePopup(1000); break; case 'data-add-order': case 'data-add-order-list': dataResultThree = { error: 'error' }; popup('bad', 'Ошибка!', 'Сервер вернул ошибку!', true, false); break; case 'data-make-call': switch (jqxhr.status) { case 424: popup('bad', 'Ошибка!', 'Не указан внутренний номер пользователя!', true, false); break; default: popup('bad', 'Ошибка!', 'АТС не отвечает!', true, false); } break; case 'data-client-widget': case 'data-favorites': return true; break; case 'data-get-pricelist': popup('bad', 'Ожидайте!', 'Ваш запрос еще находится в обработке.
    Повторите операцию позже.', true, false); break; case 'data-make-pricelist': popup('bad', 'Внимание!', 'Не удалось определить категорию цен!
    Временно используется категория цен - С3 СРЕДНИЙ ПРАЙС САМАРА.', true, false); break; default: popup('bad', 'Ошибка!', 'Сервер недоступен!
    Возможно закончился сеанс авторизации.', true, false); } }, complete: function() { switch (command) { case 'data-trash': case 'data-trash-no-back': case 'data-to-folder': case 'data-trash-multiple': case 'data-add-task': preloader(); delayClosePopup(500); // Добавляем строку параметров в конце (если они есть) if (typeof(location.href.split('?')[1]) != 'undefined') { delayReload(500, '/' + curUrl[1] + '?' + location.href.split('?')[1]); } else { delayReload(500); } break; case 'data-client-widget': preloader(); break; case 'get_mail': preloader(); delayReload(500); break; } } }); break; } } $(function() { // При загрузке страницы если выбрана категория, то фильтруем сразу if ($('#filter_branch_cat').length > 0 && $('#filter_branch_cat').val() != '') filterBranch($('#filter_branch_cat').val()); // При выборе категории отраслей, скрываем/показываем список отраслей $('#filter_branch_cat').on('change', function() { // Сбрасываем выбор фильтра отраслей $('#filter_branch').prop('selectedIndex', 0); $('#filter_branch_not').prop('checked', false); var selectValue = $(this).val(); // Скрываем отрасли, которые находятся вне данной категории $('#filter_branch').children('option').show(); filterBranch(selectValue); }); function filterBranch(selectValue) { if (selectValue != '') { $('#filter_branch').children('option').each(function(index, element) { if ($(element).data('parent') != selectValue && $(element).val() != '') $(element).hide(); }); } } }); // Фильтрация списка менеджеров по рег. управляющему $(function() { var listManager = []; var listManagerGuid = []; $('#filter_manager').children('option').each(function(index, element) { listManager[index] = element; listManagerGuid[index] = element.value; }); $('#filter_reg_manager').on('change', function() { if ($('option:selected', this).val() == '%') { setListManager('all'); } else { setListManager($('option:selected', this).data('user')); } }); function setListManager(thisListManager) { var copyListManager = ''; var listManagerDefault = ''; if (typeof thisListManager == 'object' && thisListManager.length > 0 && listManager.length > 0) { for (var key in thisListManager) { var findUser = listManagerGuid.indexOf(thisListManager[key]); if (findUser > -1) { copyListManager += listManager[findUser].outerHTML; } } } else if (thisListManager == 'all') { for (var key in listManager) { if (listManager[key].value == '%') continue; copyListManager += listManager[key].outerHTML; } } $('#filter_manager').html(listManagerDefault + copyListManager); } }); // Корзина заказа - НОВАЯ КОРЗИНА - Начало var isOpenForm = true; function openCart() { $('#marker-cart').trigger('click'); } $(function() { // Копирование позиции $('body').on('click', '.copy-nomen', function() { var orderCart = JSON.parse(localStorage['JustCRM-OrderCart']); var orderCartSort = JSON.parse(localStorage['JustCRM-OrderCart-Sort']); var orderCartShipment = JSON.parse(localStorage['JustCRM-OrderCart-Shipment']); var idPos = $(this).closest('tr').attr('data-id-pos-prefix'); var idPosArr = idPos.split('_'); var curIdPrefix = 1; var nextIdPrefix = 2; if (typeof idPosArr[1] != 'undefined') { var maxVal = Number(idPosArr[1]); for (key in orderCart) { var keyArr = key.split('_'); if (typeof keyArr[1] != 'undefined') { var curVal = Number(keyArr[1]); if (curVal > maxVal) maxVal = curVal; } } curIdPrefix = maxVal; nextIdPrefix = maxVal + 1; } keyCurrent = idPosArr[0] + '_' + curIdPrefix; keyNext = idPosArr[0] + '_' + nextIdPrefix; orderCart[keyNext] = orderCart[idPos]; orderCartSort[keyNext] = orderCartSort[idPos]; orderCartShipment[keyNext] = orderCartShipment[idPos]; if (typeof idPosArr[1] == 'undefined') { orderCart[keyCurrent] = orderCart[idPos]; orderCartSort[keyCurrent] = orderCartSort[idPos]; orderCartShipment[keyCurrent] = orderCartShipment[idPos]; delete orderCart[idPos]; delete orderCartSort[idPos]; delete orderCartShipment[idPos]; } localStorage['JustCRM-OrderCart'] = JSON.stringify(orderCart); localStorage['JustCRM-OrderCart-Sort'] = JSON.stringify(orderCartSort); localStorage['JustCRM-OrderCart-Shipment'] = JSON.stringify(orderCartShipment); isOpenForm = false; openCart(); }); $('#clear-shop').on('click', function() { deleteOrderAllPos(); window.location.reload(); }); // Включение/Отключения полей для производства $('#order_prod').on('click', function() { if ($(this).prop('checked')) { $('.prod-field').show(); $('#order-colspan').attr('colspan', '9'); } else { $('.prod-field').hide(); $('#order-colspan').attr('colspan', '6'); } // У тех позиций, что могут быть для производства блокируем/разблокируем поле ввода кол-ва $('#ordercard-list').find('.ordercard-quantity').each(function(index, element) { if ($(element).parents('.position').find('.ordercard-prod').val() == '2') { $(element).prop('readonly', true); $(element).parents('.position').find('.ordercard-qty').show(); $(element).parents('.position').find('.ordercard-length').show(); $(element).parents('.position').find('.ordercard-num-order').show(); } if ($(element).parents('.position').find('.ordercard-prod').val() == '1') { $(element).prop('readonly', false); $(element).parents('.position').find('.ordercard-qty').hide(); $(element).parents('.position').find('.ordercard-length').hide(); $(element).parents('.position').find('.ordercard-num-order').hide(); } }); }); // Для корзины, загруженной из файла if (typeof importOrders != 'undefined' && (getCookie('JustCRM_open_master_order') == '2' || getCookie('JustCRM_open_master_order_prod') == '2')) { var dateDelete = new Date(); // Берём текущую дату dateDelete.setTime(dateDelete.getTime() - 100); // Возвращаемся в "прошлое" document.cookie = "JustCRM_open_master_order=; path=/nomen; expires=" + dateDelete.toGMTString(); document.cookie = "JustCRM_open_master_order_prod=; path=/nomen; expires=" + dateDelete.toGMTString(); var importOrdersTextPrint = (typeof importOrdersText != 'undefined') ? importOrdersText : ''; if (prodShop === 2 && $('#order_prod').prop('checked') === false) { var prodShopSet = JSON.parse(localStorage['JustCRM-OrderCart-field']); prodShopSet[13] = 1; localStorage['JustCRM-OrderCart-field'] = JSON.stringify(prodShopSet); $('#order_prod').trigger('click'); } //popup('atten', 'Успешно!', 'Заказ импортирован в корзину!
    ' + importOrdersTextPrint + '
    Продолжить?', true, false, '', 'openCart'); popup('atten', 'Успешно!', 'Заказ импортирован в корзину!
    ' + importOrdersTextPrint + '
    Продолжить?', true, false, '', 'location.reload()'); setTimeout(function() { //$('#marker-cart').trigger('click'); }, 1000); } // Если поле нового адреса не пустое и не выбран Самовывоз, то скрываем поля Дата доставки и Время доставки if ($('#delivery_places').val() == '%' && $.trim($('body').find('#order-delivery-address').val()) == '') { $('#order-delivery-date, #order-delivery-time').parent('div').hide(); } else { $('#order-delivery-date, #order-delivery-time').parent('div').show(); } // Если выбран новый адрес, то делаем его поле обязательным, иначе необязательным if ($('#delivery_places').val() == '%%') { $('#order-delivery-address').attr('class', 'validate[required,minSize[10],maxSize[500]] text-input'); } else { $('#order-delivery-address').attr('class', 'validate[optional,minSize[3],maxSize[500]] text-input'); } if (typeof localStorage['JustCRM-OrderCart'] == 'undefined') localStorage['JustCRM-OrderCart'] = '{}'; if (typeof localStorage['JustCRM-OrderCart-Sort'] == 'undefined') localStorage['JustCRM-OrderCart-Sort'] = '{}'; if (typeof localStorage['JustCRM-OrderCart-Shipment'] == 'undefined') localStorage['JustCRM-OrderCart-Shipment'] = '{}'; orderStat(); orderMarkerView(); // Показываем корзину только в разделе изделий из листовых металлов if (typeof curUrl[1] != 'undefined' && curUrl[1] == 'nomendraw') orderListMarkerView(); $('.date-order').datepicker({ minDate: '0', beforeShow: function(input, obj) { $(input).after($(input).datepicker('widget')); }, onSelect: function(dateText) { $('#order-delivery-date').trigger('input'); } }); if (typeof localStorage['JustCRM-OrderCart'] != 'undefined') { // Выделяем позиции, которые уже в корзине var orderCartAll = JSON.parse(localStorage['JustCRM-OrderCart']); if (Object.keys(orderCartAll).length > 0) { for (key in orderCartAll) { // Отмечаем в справочнике $('#toBackAncor_' + orderCartAll[key][1].value).children('[data-add-cart]').find('input').addClass('select-cart-pos'); $('#toBackAncor_' + orderCartAll[key][1].value).find('input').val(orderCartAll[key][0].value); // Отмечаем на странице номенклатуре if (orderCartAll[key][1].value != '') $('[data-add-cart=' + orderCartAll[key][1].value + ']').find('input').addClass('select-cart-pos'); } } $('#marker-cart').on('click', function() { $('#ordercard_form').find('#ordercard-list').children().remove(); var orderCartAll = JSON.parse(localStorage['JustCRM-OrderCart']); var orderCartSort = JSON.parse(localStorage['JustCRM-OrderCart-Sort']); var orderCartShipment = JSON.parse(localStorage['JustCRM-OrderCart-Shipment']); orderCartSort = Object.keys(orderCartSort).sort( function(a, b) { return orderCartSort[a] - orderCartSort[b]; } ) if (Object.keys(orderCartAll).length > 0) { // Заполняем корзину при открытии var template = $('#ordercard-template').find('.position'); for (key in orderCartSort) { if (typeof orderCartAll[orderCartSort[key]] == 'undefined') continue; var clone = template.clone(); clone.attr('data-id-pos', orderCartAll[orderCartSort[key]][1].value); clone.attr('data-id-pos-prefix', orderCartSort[key]); clone.children('.ordercard-cat-price').val(orderCartAll[orderCartSort[key]][9].value); clone.children('.ordercard-id-nomen').val(orderCartSort[key]); clone.children('.quantity').children('input').val(orderCartAll[orderCartSort[key]][0].value); clone.children('.name').html(orderCartAll[orderCartSort[key]][2].value); clone.children('.code').html(orderCartAll[orderCartSort[key]][3].value); clone.children('.articul').html(orderCartAll[orderCartSort[key]][4].value); clone.children('.item').html(orderCartAll[orderCartSort[key]][5].value); clone.children('.remains').html(orderCartAll[orderCartSort[key]][6].value); clone.children('.country').html(orderCartAll[orderCartSort[key]][7].value); var posSumm = Number(orderCartAll[orderCartSort[key]][10].value.replace(',', '.').replace(' ', '')) * Number(orderCartAll[orderCartSort[key]][0].value); clone.children('.price').children('input').val(posSumm.toFixed(2).replace('.', ',').replace(' ', '')); clone.children('.price').attr('data-price', orderCartAll[orderCartSort[key]][10].value); clone.children('.base-price').html(orderCartAll[orderCartSort[key]][10].value.replace('.', ',').replace(' ', '')); clone.children('.ordercard-base-price').val(orderCartAll[orderCartSort[key]][10].value.replace(',', '.').replace(' ', '')); clone.children('.ordercard-min-shipment').val(orderCartShipment[orderCartSort[key]]); clone.children('.quantity').children('input').attr('min', orderCartShipment[orderCartSort[key]]); clone.children('.quantity').children('input').attr('step', orderCartShipment[orderCartSort[key]]); clone.children('.delete').children('i').attr('onclick', "popup('atten', 'Внимание!', 'Вы подтверждаете удаление?', true, false, '" + orderCartSort[key] + "', 'deleteOrderPos', 'JustCRM-OrderCart', '#ordercard-list');"); if (typeof orderCartAll[orderCartSort[key]][11] != 'undefined') { clone.find('.ordercard-prod').val(orderCartAll[orderCartSort[key]][11].value); } if (typeof orderCartAll[orderCartSort[key]][12] != 'undefined') { if (orderCartAll[orderCartSort[key]][12].value == '' || orderCartAll[orderCartSort[key]][12].value == '0') orderCartAll[orderCartSort[key]][12].value = '1'; clone.find('.ordercard-qty').val(orderCartAll[orderCartSort[key]][12].value.replace(' ', '')); } if (typeof orderCartAll[orderCartSort[key]][13] != 'undefined') { if (orderCartAll[orderCartSort[key]][13].value == '' || orderCartAll[orderCartSort[key]][13].value == '0') orderCartAll[orderCartSort[key]][13].value = '1'; clone.find('.ordercard-length').val(orderCartAll[orderCartSort[key]][13].value.replace(' ', '')); } if (typeof orderCartAll[orderCartSort[key]][14] != 'undefined') { clone.find('.ordercard-num-order').val(orderCartAll[orderCartSort[key]][14].value); } /* // Если включена галочка производства, то у позиций которые не могут быть заказаны на производство - скрываем поля производства console.log('Мы тут', $('#order_prod').prop('checked'), orderCartAll[orderCartSort[key]][11].value); if ($('#order_prod').prop('checked') && orderCartAll[orderCartSort[key]][11].value == '1') { console.log('Мы здесь скрываем поля производства'); clone.find('.ordercard-qty').hide(); clone.find('.ordercard-length').hide(); } // У тех позиций, что могут быть для производства блокируем поле ввода кол-ва if ($('#order_prod').prop('checked') && orderCartAll[orderCartSort[key]][11].value == '2') { console.log('Мы здесь блокируем кол-во если есть производство'); clone.find('.ordercard-quantity').prop('readonly', true); } */ $('#ordercard_form').find('#ordercard-list').append(clone); } orderStat(); if (isOpenForm === true) { popup('form', '', 'ordercard', false, false); } isOpenForm = true; } }); } $('.clear-nomens-to-cart').on('click', function() { popup('atten', 'Внимание!', 'Вы подтверждаете действие?', true, false, '', 'deleteOrderAllPos'); }); $('.clear-nomens-to-cart-list').on('click', function() { popup('atten', 'Внимание!', 'Вы подтверждаете действие?', true, false, '', 'deleteOrderAllPosList'); }); $('.add-order').on('click', function() { $(this).parents('form').validationEngine('detach'); $(this).parents('form').validationEngine('attach', { promptPosition: 'bottomLeft', onValidationComplete: function(form, status) { if (status === true) { preloader('show'); setTimeout(function() { send_request($('#ordercard_form').serialize(), 'data-exchange', 'data-add-order'); }, 500); var waitOrderSend = setInterval(function() { if (typeof dataResultThree != 'undefined' && !$.isEmptyObject(dataResultThree)) { clearInterval(waitOrderSend); dataResultThree = {}; setTimeout(function() { delayClosePopup(500); }, 1000); // Закомментировать след. 2 строки, если нужно чтобы после отправки корзина не очищалась localStorage['JustCRM-OrderCart-field'] = '[]'; deleteOrderAllPos(); setTimeout(function() { window.location.reload(); }, 500); } }, 500); } } }); }); $('body').on('input', '.ordercard-quantity, .ordercard-qty, .ordercard-length, .ordercard-num-order', function() { $this = $(this); //setTimeout(function() { orderStat($this); //}, 500); }); $('body').on('focusout', '.ordercard-quantity', function() { $this = $(this); orderStat($this, 'minShipment'); }); $('body').on('click', '.order_prod', function() { orderStat($(this)); }); $('body').on('input', '.ordercard-price', function() { orderStat($(this)); }); // Если выбран склад, то запрашиваем остатки именно по нему $('#order-warehouse').on('change', function() { if ($(this).val() != '') { var requestData = { 'warehouse': $(this).val(), 'nomen': [] }; $('#ordercard-list').children('.position').each(function(index, element) { requestData['nomen'].push($(element).data('id-pos')); }); preloader('show'); // Запрашиваем остатки по складу из 1С dataResult = {}; dataResultOld = {}; send_request(JSON.stringify(requestData), 'data-exchange', 'send_request_remains_1C'); var waiting = setInterval(function() { if (!$.isEmptyObject(dataResult)) { setTimeout(function() { if (dataResult.success == 'false') { send_request_remains(requestData, dataResult, false); } else { send_request_remains(requestData, dataResult, true); } preloader(); }, 500); clearTimeout(waiting); } }, 100); // Запрашиваем остатки по складу из СРМ function send_request_remains(requestData, dataResult, dataFlag) { if (dataFlag === false) { //console.log('Не удалось данные из 1С получить, запрашиваем старые остатки по складу', requestData); dataResult = {}; send_request(JSON.stringify(requestData), 'data-exchange', 'send_request_remains'); } var waiting = setInterval(function() { // Ожидание данных от 1С if (!$.isEmptyObject(dataResult)) { if (typeof(dataResult.error) != 'undefined') { //console.log('Ошибка ответа по остаткам 1C', requestData, dataResult); clearTimeout(waiting); dataResult = {}; preloader(); } else { //console.log('Ответ по остаткам из 1С получен', requestData, dataResult); for (key in dataResult) { $('#ordercard-list').find('[data-id-pos=' + key + ']').children('.remains').html(dataResult[key].quantity); } popup('good', 'Успешно!', 'Остатки по складу обновлены!', true, false); setTimeout(function() { orderStat(); }, 500); clearTimeout(waiting); dataResult = {}; preloader(); } } // Ожидание данных от базы CRM if (!$.isEmptyObject(dataResultOld)) { if (typeof(dataResultOld.error) != 'undefined') { //console.log('Ошибка по остаткам CRM', requestData, dataResultOld); clearTimeout(waiting); dataResultOld = {}; preloader(); } else { //console.log('Ответ по остаткам из CRM получен', requestData, dataResultOld); for (key in dataResultOld) { $('#ordercard-list').find('[data-id-pos=' + key + ']').children('.remains').html(dataResultOld[key].quantity); } popup('good', 'Успешно!', 'Остатки по складу обновлены по последним данным!', true, false); setTimeout(function() { orderStat(); }, 500); clearTimeout(waiting); dataResultOld = {}; preloader(); } } }, 100); } } }) // Распознавание адреса $('.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); $('#order-delivery-address-list').val(dataResult.suggestions[0].unrestricted_value); $('#order-delivery-coords-list').val(dataResult.suggestions[0].data.geo_lat + ',' + dataResult.suggestions[0].data.geo_lon); clearTimeout(waiting); dataResult = {}; $('#order-delivery-address').trigger('input'); $('#order-delivery-address-list').trigger('input'); } }, 100); }); // Поиск клиента для заказа var targetInputClient = '#order-client, #order-client-list'; // Объект для адресов доставки клиента var delAddrObj = {}; $('body').on('input', targetInputClient, function() { //delAddrObj = {}; $(this).nextAll('input').val(''); if ($(this).val().length >= 3) { send_request($(this).val(), 'data-exchange', 'data-clients-search'); // dataResult - глобальная переменная if (!$.isEmptyObject(dataResult)) { var result = ''; for (var key in dataResult) { result += '' + dataResult[key].fullName + '
    ИНН:' + dataResult[key].INN + ' | КПП:' + dataResult[key].KPP + '
    '; // Если есть адреса доставки, то заполняем сооответствующее поле if (typeof dataResult[key].delivery_addresses != 'undefined' && Object.keys(dataResult[key].delivery_addresses).length > 0) { var delAddrStr = ''; for (var k in dataResult[key].delivery_addresses) { delAddrStr += ''; } delAddrObj[dataResult[key].UID] = delAddrStr; } } $(this).next('.search-result').fadeIn(); if (!$(this).next('.search-result').hasClass('who')) $(this).next('.search-result').addClass('who'); $(this).next('.search-result').html(result); console.log(delAddrObj) } } else { $('.search-result').fadeOut(); } }); $('#ordercard_form').find('.search-result').on('click', function() { $('#order_client_comments').trigger('input'); }); $('.search-result').on('click', 'span', function() { if ($(this).hasClass('blocked')) return; $(this).parent().prev('input').val($(this).text()); $(this).parent().next().val($(this).attr('data-clients')); $(this).parent().next().next().val($(this).attr('data-cat-price')); $(this).parent().prev('input').css({ 'background': 'lightgreen' }); // Обычный заказ, или листовые изделия var orderFormId = $(this).parent().prev('input').attr('id') // Устанавливаем куки клиента if (orderFormId == 'order-client') { setCookie('cat_search_price_client_uid', decodeURIComponent($(this).attr('data-clients'))); } else { setCookie('cat_search_price_client_uid_list', decodeURIComponent($(this).attr('data-clients'))); } // Добавляем адреса доставки if (typeof delAddrObj[$(this).attr('data-clients')] != 'undefined') { if (orderFormId == 'order-client') { $('#delivery_places').html('' + delAddrObj[$(this).attr('data-clients')]); } else { //console.log(delAddrObj); $('#delivery_places_list').html('' + delAddrObj[$(this).attr('data-clients')]); } } if ($('.search-result').hasClass('who')) $('.search-result').removeClass('who'); }); $('body').on('focusout', targetInputClient, function(e) { if ($(this).nextAll('input').val() == '') { $(this).val('').css({ 'background': '#F8F9FB' }); } $('.search-result').fadeOut(); if ($('.search-result').hasClass('who')) dataResult = {}; }); $('body').on('keydown', targetInputClient, function(e) { var keycode = (e.keyCode ? e.keyCode : e.which); if (keycode === 13) $(this).nextAll('input').trigger('focusout'); }); // Если выбрали не поле Новый адрес доставки, то очищаем введенное ранее в поле Новый адрес доставки $(document).on('change', '#delivery_places, #delivery_places_list', function() { if ($('#delivery_places').val() != '%%') { $('#order-delivery-address').val(''); $('#order-delivery-coords').val(''); } if ($('#delivery_places_list').val() != '%%') { $('#order-delivery-address').val(''); $('#order-delivery-coords').val(''); } // Если поле нового адреса не пустое и не выбран Самовывоз, то скрываем поля Дата доставки и Время доставки if ($(this).val() == '%' && $.trim($('body').find('#order-delivery-address').val()) == '') { $('#order-delivery-date, #order-delivery-time').parent('div').hide(); } else { $('#order-delivery-date, #order-delivery-time').parent('div').show(); } // Если выбран новый адрес, то делаем его поле обязательным, иначе необязательным if ($(this).val() == '%%') { $('#order-delivery-address').attr('class', 'validate[required,minSize[10],maxSize[500]] text-input'); } else { $('#order-delivery-address').attr('class', 'validate[optional,minSize[3],maxSize[500]] text-input'); } }); // Если производится ввод в поле Новый адрес доставки, то выбираем в списке Новый адрес доставки $('#order-delivery-address').on('input', function() { $('#delivery_places option[value="%%"]').prop('selected', true); if ($(this).val() == '') $('#delivery_places option[value="%"]').prop('selected', true); $('#delivery_places_list option[value="%%"]').prop('selected', true); if ($(this).val() == '') $('#delivery_places_list option[value="%"]').prop('selected', true); }); $('#order-client, #id_client, #delivery_places, #order_client_comments, #order-delivery-address, #order-delivery-coords, #order_status, #order-delivery-date, #order-delivery-time, #order-pay, #order_prod').on('change, input, click', function() { var thisForm = $(this).closest('form'); // Заполняем данные var orderF1 = thisForm.find('#order-client').val(); var orderF2 = thisForm.find('#id_client').val(); var orderF3 = thisForm.find('#client_cat_price').val(); var orderF4 = [thisForm.find('#delivery_places').val(), thisForm.find('#delivery_places option:selected').text()]; var orderF5 = thisForm.find('#order_client_comments').val(); if (thisForm.find('#delivery_places').val() != '%%') { thisForm.find('#order-delivery-address').val(''); thisForm.find('#order-delivery-coords').val(''); } var orderF6 = thisForm.find('#order-delivery-address').val(); var orderF7 = thisForm.find('#order-delivery-coords').val(); var orderF8 = thisForm.find('#order_status').val(); var orderF9 = thisForm.find('#order-warehouse').val(); var orderF10 = thisForm.find('#order-delivery-date').val(); var orderF11 = thisForm.find('#order-delivery-time').val(); var orderF12 = thisForm.find('#order-pay').val(); var orderF13 = thisForm.find('#ordercard-edit-flag').val(); var orderF14 = (thisForm.find('#order_prod').prop('checked')) ? 1 : 0; var orderFAll = [orderF1, orderF2, orderF3, orderF4, orderF5, orderF6, orderF7, orderF8, orderF9, orderF10, orderF11, orderF12, orderF13, orderF14]; localStorage['JustCRM-OrderCart-field'] = JSON.stringify(orderFAll); }); }); function editOrder(orderId) { send_request(orderId, 'data-exchange', 'data-edit-order'); var waitOrder = setInterval(function() { if (typeof dataResultThree != 'undefined' && !$.isEmptyObject(dataResultThree)) { clearInterval(waitOrder); // Записываем все данные по основным полям localStorage['JustCRM-OrderCart-field'] = JSON.stringify(dataResultThree.data); localStorage['JustCRM-OrderCart'] = JSON.stringify(dataResultThree.table); localStorage['JustCRM-OrderCart-Sort'] = JSON.stringify(dataResultThree.sort); localStorage['JustCRM-OrderCart-Shipment'] = JSON.stringify(dataResultThree.shipment); // Устанавливаем куки клиента setCookie('cat_search_price_client_uid', decodeURIComponent(dataResultThree.data[1])); setCookie('cat_search_price_uid', decodeURIComponent(dataResultThree.data[2])); // Вы водим полный список адресов доставки по клиенту var deliveryAddressStr = ''; if (Object.keys(dataResultThree.delivery_address).length > 0) { for (key in dataResultThree.delivery_address) { var selectedAddr = ''; if (dataResultThree.data[3][0] == dataResultThree.delivery_address[key]['UID']) selectedAddr = 'selected="selected"'; deliveryAddressStr += '' } } $('#delivery_places').html(deliveryAddressStr); // Выбираем склад $('#order-warehouse option[value="' + dataResultThree.data[8] + '"]').prop('selected', true); // Выбираем время доставки $('#order-delivery-time option[value="' + dataResultThree.data[12] + '"]').prop('selected', true); // Выбираем тип оплаты $('#order-pay option[value="' + dataResultThree.data[13] + '"]').prop('selected', true); dataResultThree = '{}'; //orderStat(); // Последние изменения orderMarkerView(); setTimeout(function() { $('#marker-cart').trigger('click'); }, 1000); } }, 500); } // function editOrderList(orderId) { // sessionStorage['JustCRM-EditOrderList'] = orderId; // location.href = '/nomendraw'; // } // function editOrderListView(orderId) { // sessionStorage.removeItem('JustCRM-EditOrderList'); // send_request(orderId, 'data-exchange', 'data-edit-order-list'); // var waitOrder = setInterval(function() { // if (typeof dataResultThree != 'undefined' && !$.isEmptyObject(dataResultThree)) { // clearInterval(waitOrder); // // Записываем все данные по основным полям // localStorage['JustCRM-OrderCartList-field'] = JSON.stringify(dataResultThree.data); // localStorage['JustCRM-OrderCartList'] = JSON.stringify(dataResultThree.table); // // Устанавливаем куки клиента // setCookie('cat_search_price_client_uid_list', decodeURIComponent(dataResultThree.data[1])); // // Вы водим полный список адресов доставки по клиенту // var deliveryAddressStr = ''; // if (Object.keys(dataResultThree.delivery_address).length > 0) { // for (key in dataResultThree.delivery_address) { // var selectedAddr = ''; // if (dataResultThree.data[3][0] == dataResultThree.delivery_address[key]['UID']) selectedAddr = 'selected="selected"'; // deliveryAddressStr += '' // } // } // $('#delivery_places_list').html(deliveryAddressStr); // // Выбираем время доставки // $('#order-delivery-time-list option[value="' + dataResultThree.data[12] + '"]').prop('selected', true); // // Выбираем тип оплаты // $('#order-pay-list option[value="' + dataResultThree.data[13] + '"]').prop('selected', true); // dataResultThree = '{}'; // orderStatList(); // Последние изменения // orderMarkerView(); // setTimeout(function() { // $('#marker-cart-list').trigger('click'); // }, 1000); // } // }, 500); // } function editOrderList(orderId) { sessionStorage['JustCRM-EditOrderList'] = orderId; send_request(orderId, 'data-exchange', 'data-edit-order-list'); var waitOrder = setInterval(function() { if (typeof dataResultThree != 'undefined' && !$.isEmptyObject(dataResultThree)) { clearInterval(waitOrder); // Записываем все данные по основным полям localStorage['JustCRM-OrderCartList-field'] = JSON.stringify(dataResultThree.data); localStorage['JustCRM-OrderCartList'] = JSON.stringify(dataResultThree.table); // Устанавливаем куки клиента setCookie('cat_search_price_client_uid_list', decodeURIComponent(dataResultThree.data[1])); setCookie('cat_search_price_uid_list', decodeURIComponent(dataResultThree.data[2])); dataResultThree = '{}'; setTimeout(function() { location.href = '/nomendraw'; }, 1000); } }, 500); } function editOrderListView(orderId) { sessionStorage.removeItem('JustCRM-EditOrderList'); orderStatList(); // Последние изменения orderMarkerView(); setTimeout(function() { $('#marker-cart-list').trigger('click'); }, 1000); } function orderStat(quantityField, flag) { // Все позиции корзины if (typeof localStorage['JustCRM-OrderCart'] == 'undefined') localStorage['JustCRM-OrderCart'] = '{}'; if (typeof localStorage['JustCRM-OrderCart-field'] == 'undefined') localStorage['JustCRM-OrderCart-field'] = '[]'; var orderCartAll = JSON.parse(localStorage['JustCRM-OrderCart']); var orderCartAllField = JSON.parse(localStorage['JustCRM-OrderCart-field']); var orderCartAllShipment = JSON.parse(localStorage['JustCRM-OrderCart-Shipment']); if (typeof quantityField != 'undefined') { // Изменение кол-ва товара c пересчетом if (quantityField.hasClass('ordercard-quantity')) { // Проверки только если установлен нужый флаг if (typeof flag != 'undefined' && flag == 'minShipment') { // Проверяем мин. отгрузочную норму var minShipment = quantityField.parents('tr').find('.ordercard-min-shipment').val(); if (Number(quantityField.val()) < Number(minShipment)) { popup('bad', 'Ошибка!', 'Кол-во не может быть менее отгрузочной нормы!
    Минимум: ' + minShipment + ' ед.', true, false); quantityField.attr('value', minShipment); quantityField.val(minShipment); } // Округляем к большему исходя из кратности quantityField.val(roundMultiple(Number(quantityField.val()), Number(minShipment))); orderCartAll[quantityField.parents('.position').data('id-pos-prefix')][0].value = quantityField.val(); } // Пересчитываем цену в связи с изменениями кол-ва var summPos = Number(quantityField.parent().next('[data-price]').attr('data-price').replace(',', '.').replace(' ', '')) * Number(quantityField.val()); quantityField.parent().next('.price').children('input').val(summPos.toFixed(2).replace('.', ',').replace(' ', '')); } // Изменение кол-ва и длины для нарезки в производство if (quantityField.hasClass('ordercard-qty')) { orderCartAll[quantityField.parents('.position').data('id-pos-prefix')][12].value = quantityField.val().replace(',', '.').replace(' ', ''); } if (quantityField.hasClass('ordercard-length')) { orderCartAll[quantityField.parents('.position').data('id-pos-prefix')][13].value = Number(quantityField.val().replace(',', '.').replace(' ', '')).toFixed(2); } if (quantityField.hasClass('ordercard-qty') || quantityField.hasClass('ordercard-length')) { var curPosLine = quantityField.parents('.position'); var prodQty = Number(curPosLine.find('.ordercard-qty').val().replace(',', '.').replace(' ', '')); var prodLength = Number(curPosLine.find('.ordercard-length').val().replace(',', '.').replace(' ', '')).toFixed(2); var fullQty = prodQty * prodLength; var fullSumm = fullQty * Number(curPosLine.find('[data-price]').attr('data-price').replace(',', '.').replace(' ', '')); if (!isNaN(fullQty) && fullQty !== 0) curPosLine.find('.ordercard-quantity').val(String(fullQty.toFixed(2)).replace(',', '.')); if (!isNaN(fullSumm)) curPosLine.find('.ordercard-price').val(String(fullSumm.toFixed(2)).replace(',', '.')); // Пересчитываем цену в связи с изменениями кол-ва orderCartAll[quantityField.parents('.position').data('id-pos-prefix')][0].value = curPosLine.find('.ordercard-quantity').val(); } // Включение/Отключение режима заказов для производства if (quantityField.hasClass('order_prod')) { var orderProd = 0; if (quantityField.prop('checked')) { orderProd = 1; } orderCartAllField[13] = orderProd; } // Комментарий - номер заказа (в строке товара) if (quantityField.hasClass('ordercard-num-order')) { orderCartAll[quantityField.parents('.position').data('id-pos-prefix')][14].value = quantityField.val(); } } // Если включена галочка производства, то увеличиваем сумму на 10% // По всем позициям, где указано, что они для производства var curPriceProd = 0; var newPriceProd = 0; function calcPrice(el) { var curPosLine = el.parents('.position'); var prodQty = Number(curPosLine.find('.ordercard-qty').val().replace(',', '.').replace(' ', '')); var prodLength = Number(curPosLine.find('.ordercard-length').val().replace(',', '.').replace(' ', '')).toFixed(2); var fullQty = prodQty * prodLength; var fullSumm = fullQty * Number(curPosLine.find('[data-price]').attr('data-price').replace(',', '.').replace(' ', '')); // Добавляем наценку в 10% if (orderCartAllField[13] == '1') fullSumm = fullSumm * 1.1; if (!isNaN(fullQty) && fullQty !== 0) curPosLine.find('.ordercard-quantity').val(String(fullQty.toFixed(2)).replace(',', '.')); return (!isNaN(fullSumm)) ? String(fullSumm.toFixed(2)).replace(',', '.') : 0; } // Блокируем/разблокируем поле ввода кол-во позиций, которые заказываются на производство // если стоит галочка для производства // Пересчитываем цену $('#ordercard-list').find('.ordercard-prod[value="2"]').each(function(i, el) { if (orderCartAllField[13] == '1' || (typeof quantityField != 'undefined' && !quantityField.hasClass('ordercard-quantity'))) { if (typeof quantityField == 'undefined' || (typeof quantityField != 'undefined' && !quantityField.hasClass('ordercard-price'))) { $(el).parents('.position').find('.ordercard-price').val(calcPrice($(el))); } } if (orderCartAllField[13] == '1') { $(el).parents('.position').find('.ordercard-quantity').prop('readonly', true); } else { $(el).parents('.position').find('.ordercard-quantity').prop('readonly', false); } }); // Скрываем поля ввода позиций, которые заказываются на производство $('#ordercard-list').find('.ordercard-prod[value="1"]').each(function(index, element) { $(element).parents('.position').find('.ordercard-qty').hide(); $(element).parents('.position').find('.ordercard-length').hide(); $(element).parents('.position').find('.ordercard-num-order').hide(); }); // Сохранение остатков $('body').find('#ordercard-list').find('.remains').each(function(index, element) { var searchKey = searchKeyInOrder($(element).parents('.position').data('id-pos'), orderCartAll); orderCartAll[searchKey][6].value = Number($(element).text()); // Если нет доступного остатка, то подсвечиваем строку if (Number($(element).text()) === 0) { $(element).parent('tr').css({ 'background-color': 'tomato' }); } else { $(element).parent('tr').css({ 'background-color': 'unset' }); } }); // Записываем изменения localStorage['JustCRM-OrderCart-field'] = JSON.stringify(orderCartAllField); localStorage['JustCRM-OrderCart'] = JSON.stringify(orderCartAll); // Пересчет сумм var allQuant = 0; var allSumm = 0; $('body').find('#ordercard-list').find('.ordercard-quantity').each(function(index, element) { allQuant += Number($(element)[0].value); allSumm += Number($(element).parent().next().children('input').val().replace(',', '.')); }); $('.all-quant').children('strong').html(allQuant.toFixed(2)); $('.all-summ').children('strong').html(allSumm.toFixed(2).replace('.', ',')); // Изменение полей кроме списка товаров if (typeof localStorage['JustCRM-OrderCart-field'] != 'undefined' && localStorage['JustCRM-OrderCart-field'] != '[]') { var orderFAll = JSON.parse(localStorage['JustCRM-OrderCart-field']); if (orderFAll[0] != '') $('#order-client').val(orderFAll[0]); if (orderFAll[1] != '') $('#id_client').val(orderFAll[1]); if (orderFAll[2] != '') $('#client_cat_price').val(orderFAll[2]); // Удаляем старое значение и добавляем новое //console.log(orderFAll, orderFAll[3][0]); if (typeof orderFAll[3] != 'undefined' && orderFAll[3] !== null && typeof orderFAll[3][0] != 'undefined' && orderFAll[3][0] != '') { $('#delivery_places').children('[value="' + orderFAll[3][0] + '"]').remove(); $('#delivery_places').append(''); } $('#order_client_comments').val(orderFAll[4]); $('#order-delivery-address').val(orderFAll[5]); $('#order-delivery-coords').val(orderFAll[6]); if (typeof orderFAll[7] == 'undefined' && orderFAll[7] == '') { $('#order_status option[value="1"]').prop('selected', true); } else { $('#order_status option[value="' + orderFAll[7] + '"]').prop('selected', true); } $('#order_status').trigger('change'); /* if (typeof orderFAll[8] == 'undefined' && orderFAll[8] == '') { $('#order-warehouse option[value="1"]').prop('selected', true); } else { $('#order-warehouse option[value="'+orderFAll[8]+'"]').prop('selected', true); console.log('adasdasd'); } */ //$('#order-warehouse').trigger('change'); /* if (typeof orderFAll[3][0] == 'undefined' || orderFAll[3][0] == '') { $('#delivery_places[value=""]').prop('selected', true); } else { $('#delivery_places[value="'+orderFAll[3][0]+'"]').prop('selected', true); } $('#delivery_places').trigger('change'); */ $('#order-delivery-date').val(orderFAll[9]); if (typeof orderFAll[10] == 'undefined' && orderFAll[10] == '') { $('#order-delivery-time option[value=""]').prop('selected', true); } else { $('#order-delivery-time option[value="' + orderFAll[10] + '"]').prop('selected', true); } $('#order-delivery-time').trigger('change'); if (typeof orderFAll[11] == 'undefined' && orderFAll[11] == '') { $('#order-pay option[value=""]').prop('selected', true); } else { $('#order-pay option[value="' + orderFAll[11] + '"]').prop('selected', true); } $('#order-pay').trigger('change'); $('#ordercard-edit-flag').val(orderFAll[12]); // Если поле нового адреса заполнено, то выбираем Новый адрес доставки из списка if ($.trim($('#order-delivery-address').val()) != '') { $('#delivery_places option[value="%%"]').prop('selected', true); } /*else { $('#delivery_places option[value="%"]').prop('selected', true); }*/ // Заполняем значение производства if (orderFAll[13] == '1') { $('#order_prod').prop('checked', true); $('.prod-field').show(); $('#order-colspan').attr('colspan', '9'); } else { $('#order_prod').prop('checked', false); $('.prod-field').hide(); $('#order-colspan').attr('colspan', '6'); } // Ставим массив для сортировки позиций в поле $('#ordercard-sort').val(localStorage['JustCRM-OrderCart-Sort']); $('#ordercard-shipment').val(localStorage['JustCRM-OrderCart-Shipment']); } } function searchKeyInOrder(searchKey, orderObj) { for (key in orderObj) { if (searchKey == key) { return key; } if (key.indexOf(searchKey + '_') > -1) { return key; } } } function addOrder(orderClient, idClient, clientCatPrice, first) { if (!first) { var orderF4 = ["%", "Самовывоз"], orderF5 = '', orderF6 = '', orderF7 = '', orderF8 = '', orderF9 = '', orderF10 = '', orderF11 = '', orderF12 = '', orderF13 = '', orderF14 = ''; var orderFAll = [decodeURIComponent(orderClient), decodeURIComponent(idClient), decodeURIComponent(clientCatPrice), orderF4, orderF5, orderF6, orderF7, orderF8, orderF9, orderF10, orderF11, orderF12, orderF13, orderF14]; localStorage['JustCRM-OrderCart-field'] = JSON.stringify(orderFAll); console.log('Вызов на добавление данных.', orderClient, idClient, clientCatPrice, first) location.href = '/nomen?cat_price=' + encodeURI(clientCatPrice) + '&cat_price_client_uid=' + encodeURI(idClient); } else { console.log('Обновление данных для заказа:', orderClient, idClient, clientCatPrice, first); if (typeof localStorage['JustCRM-OrderCart-field'] == 'undefined') localStorage['JustCRM-OrderCart-field'] = '[]'; try { var orderFAll = JSON.parse(localStorage['JustCRM-OrderCart-field']); } catch (e) { var orderFAll = []; } orderFAll[0] = decodeURIComponent(orderClient); orderFAll[1] = decodeURIComponent(idClient); orderFAll[2] = decodeURIComponent(clientCatPrice); orderFAll[3] = ["%", "Самовывоз"]; orderFAll[4] = ''; orderFAll[5] = ''; orderFAll[6] = ''; orderFAll[7] = '1'; orderFAll[8] = ''; orderFAll[9] = ''; orderFAll[10] = ''; orderFAll[11] = ''; orderFAll[12] = ''; orderFAll[13] = 0; localStorage['JustCRM-OrderCart-field'] = JSON.stringify(orderFAll); } } function addOrderList(orderClient, idClient, clientCatPrice, first) { if (!first) { var orderF4 = ["%", "Самовывоз"], orderF5 = '', orderF6 = '', orderF7 = '', orderF8 = '', orderF9 = '', orderF10 = '', orderF11 = '', orderF12 = '', orderF13 = '', orderF14 = ''; var orderFAll = [decodeURIComponent(orderClient), decodeURIComponent(idClient), decodeURIComponent(clientCatPrice), orderF4, orderF5, orderF6, orderF7, orderF8, orderF9, orderF10, orderF11, orderF12, orderF13, orderF14]; localStorage['JustCRM-OrderCartList-field'] = JSON.stringify(orderFAll); console.log('Вызов на добавление данных.', orderClient, idClient, clientCatPrice, first) location.href = '/nomendraw?cat_price=' + encodeURI(clientCatPrice) + '&cat_price_client_uid=' + encodeURI(idClient); } else { console.log('Обновление данных для заказа:', orderClient, idClient, clientCatPrice, first); if (typeof localStorage['JustCRM-OrderCartList-field'] == 'undefined') localStorage['JustCRM-OrderCartList-field'] = '[]'; try { var orderFAll = JSON.parse(localStorage['JustCRM-OrderCartList-field']); } catch (e) { var orderFAll = []; } orderFAll[0] = decodeURIComponent(orderClient); orderFAll[1] = decodeURIComponent(idClient); orderFAll[2] = decodeURIComponent(clientCatPrice); orderFAll[3] = ["%", "Самовывоз"]; orderFAll[4] = ''; orderFAll[5] = ''; orderFAll[6] = ''; orderFAll[7] = '1'; orderFAll[8] = ''; orderFAll[9] = ''; orderFAll[10] = ''; orderFAll[11] = ''; orderFAll[12] = ''; orderFAll[13] = 0; localStorage['JustCRM-OrderCartList-field'] = JSON.stringify(orderFAll); } } function deleteOrderAllPos() { // Удаляем выбранного клиента и сведения о нём $('.client_warning').hide(); deleteCookie('cat_search_price_client_uid'); deleteCookie('JustCRM_open_master_order'); // Очищаем корзину заказа $('#ordercard_form').find('#ordercard-list').children().remove(); localStorage['JustCRM-OrderCart'] = '{}'; localStorage['JustCRM-OrderCart-Sort'] = '{}'; localStorage['JustCRM-OrderCart-Shipment'] = '{}'; localStorage['JustCRM-OrderCart-field'] = '[]'; $('body').find('.select-cart-pos').removeClass('select-cart-pos'); orderMarkerView(); delayClosePopup(0); setTimeout(function() { delayClosePopup(500); setTimeout(function() { location.reload(); }, 500); }, 500); } function deleteOrderAllPosList() { $('.client_warning').hide(); deleteCookie('cat_search_price_client_uid_list'); deleteCookie('JustCRM_open_master_order_list'); // Очищаем корзину заказа $('#ordercardlist_form').find('#ordercardlist-list').children().remove(); localStorage['JustCRM-OrderCartList'] = '{}'; localStorage['JustCRM-OrderCartList-field'] = '{}'; $('body').find('.select-cart-pos').removeClass('select-cart-pos'); delayClosePopup(0); setTimeout(function() { delayClosePopup(500); setTimeout(function() { location.reload(); }, 500); }, 500); } function deleteOrderPos(storeVarId, storeVar, templateId) { var orderCartAll = JSON.parse(localStorage['JustCRM-OrderCart']); var orderCartAllSort = JSON.parse(localStorage['JustCRM-OrderCart-Sort']); var orderCartAllShipment = JSON.parse(localStorage['JustCRM-OrderCart-Shipment']); delete orderCartAll[storeVarId]; delete orderCartAllSort[storeVarId]; delete orderCartAllShipment[storeVarId]; localStorage['JustCRM-OrderCart'] = JSON.stringify(orderCartAll); localStorage['JustCRM-OrderCart-Sort'] = JSON.stringify(orderCartAllSort); localStorage['JustCRM-OrderCart-Shipment'] = JSON.stringify(orderCartAllShipment); //$(templateId).children('[data-id-pos="' + storeVarId + '"]').remove(); $(templateId).children('[data-id-pos-prefix="' + storeVarId + '"]').remove(); $(this).parents('td').first().find('input').removeClass('select-cart-pos'); $('#toBackAncor_' + storeVarId).children('[data-add-cart]').find('input').removeClass('select-cart-pos'); orderMarkerView(); delayClosePopup(0); setTimeout(function() { if ($(templateId).children('tr').length === 0) { delayClosePopup(500); } }, 500); orderStat(); } function orderMarkerView() { if (typeof localStorage['JustCRM-OrderCart'] != 'undefined') { var orderCartAll = JSON.parse(localStorage['JustCRM-OrderCart']); if (Object.keys(orderCartAll).length > 0) { $('#marker-cart').show(); $('#marker-cart').find('.marker').html(Object.keys(orderCartAll).length); } else { $('#marker-cart').hide(); } } } // Корзина заказа - НОВАЯ КОРЗИНА - Конец // Корзина изделий из листового металла function orderListMarkerView() { if (typeof localStorage['JustCRM-OrderCartList'] != 'undefined') { var orderCartAllList = JSON.parse(localStorage['JustCRM-OrderCartList']); if (Object.keys(orderCartAllList).length > 0) { $('#marker-cart-list').show(); $('#marker-cart-list').find('.marker').html(Object.keys(orderCartAllList).length); } else { $('#marker-cart-list').hide(); } } } // Телефон - вызов номера function makeCall(phone) { var phoneNumber = (typeof(phone) == 'object') ? $(phone).parent('div').children('input').val() : phone; if (/^\+?\d{10,18}$/.test(phoneNumber)) { send_request(phoneNumber, 'data-exchange', 'data-make-call'); delayClosePopup(1000); delayClosePopup(2000); } else { popup('bad', 'Ошибка!', 'Номер некорректен!
    Исправьте для успешного набора.', true, false); } } // Уведомления // Проверка и запрос разрешений на уведомления 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 }); // Действие по клику notification.onclick = function() { var info = JSON.parse(notification.tag); // Формируем ссылку на Юр.лиц, Физ. лиц, либо Лидов в зависимости от clientType и lidasType var linkType = (info.clientType != '2') ? 'clients' : 'fiz'; if (info.lidasType == '1') linkType = 'lidas'; // Если клиент идентифицирован, то открываен форму редактирования if (info.clientId && info.clientId != 'new') { window.location.href = '/' + linkType + '/_details/' + info.clientId; } else if (info.clientId == 'new') { // Иначе пустая форма клиента c входящим номером setCookie('call_client', info.clientNumber); location.href = '/lidas/client'; } // Если иные события if (info.command) { switch (info.command) { case 'new_task': window.location.href = info.task_url; break; case 'dropped_call': window.location.href = '/tasks'; break; case 'new_letter': window.location.href = '/mailbox?filter_parametres=filter_all'; break; } } } } // Уведомления - Конец // Вывод на печать function toPrint(obj, zag, nologo) { var objPrint = $(obj).clone(); if (!nologo) { var newWin = window.open('/components/inc/print.html', 'Печать и сохранение', 'width=1200,height=600,resizable=yes,scrollbars=yes,status=no,toolbar=no,location=no,menubar=no'); } else { var newWin = window.open('/components/inc/print.html', 'Печать и сохранение', 'width=1200,height=600,resizable=yes,scrollbars=yes,status=no,toolbar=no,location=no,menubar=yes'); } 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).find('.delete-print').remove(); $(body).find('.clear-print').attr('class', '').attr('id', '').attr('style', ''); $(body).children('div').css({ 'margin': '5em' }); $(body).children('div').prepend('

    ' + zag + '

    '); if (!nologo) { $(body).children('div').prepend(''); setTimeout(function() { newWin.print(); }, 500); } } } // Скролл до объекта function scr(obj, delay) { try { if (!delay) var delay = 0; setTimeout(function() { $('html, body').animate({ scrollTop: $('#' + obj).offset().top }, 250, 'swing'); preloader(); }, delay); } catch (e) { console.log('Нет объекта для возврата.'); } } function scrInDiv(obj, delay) { try { if (!delay) var delay = 0; var container = $('#' + obj).parents('.scroll'); $('html, body').animate({ scrollTop: container.offset().top }, 250, 'swing'); //jqBar.position().top setTimeout(function() { container.animate({ scrollTop: document.getElementById(obj).offsetTop }, 250, 'swing'); }, delay); } catch (e) { console.log('Нет объекта для возврата.'); } } /* setTimeout(function() { sendSocket('{"command":"new_task", "id_client":"'+guid+'"}'); }, 2000); */ // Отправка сообщения в сокет function sendSocket(command) { if (window.parent.socket) window.parent.socket.send(command); } // Декодирование 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; } } // Переход по указанному URL function proceedURL(url) { location.href = url; } // Округление в большую сторону к требуемому числу function roundMultiple(num, multiple) { return (Math.ceil(num / multiple) * multiple); }